diff --git a/app/Http/Controllers/EventoController.php b/app/Http/Controllers/EventoController.php index c1985fd99f62e0e62071d84f3ca2e0b5d85d20c7..fb7a8067fe3932fc05527e25684d9084d604ce37 100644 --- a/app/Http/Controllers/EventoController.php +++ b/app/Http/Controllers/EventoController.php @@ -80,8 +80,11 @@ class EventoController extends Controller $user_id = Auth()->user()->id; //dd($user_id); - // validar datas nulas antes, pois pode gerar um bug + //--Salvando os anexos da submissão temporariamente + $evento = $this->armazenarAnexosTemp($request); + + // validar datas nulas antes, pois pode gerar um bug if( $request->inicioSubmissao == null || $request->fimSubmissao == null || @@ -94,13 +97,15 @@ class EventoController extends Controller 'nome' => ['required', 'string'], 'descricao' => ['required', 'string'], 'tipo' => ['required', 'string'], - 'natureza' => ['required'], + 'natureza' => ['required'], + 'descricao' => ['required'], + 'coordenador_id' => ['required'], 'inicioSubmissao' => ['required', 'date'], 'fimSubmissao' => ['required', 'date'], 'inicioRevisao' => ['required', 'date'], 'fimRevisao' => ['required', 'date'], 'resultado' => ['required', 'date'], - 'pdfEdital' => ['required', 'file', 'mimes:pdf', 'max:2000000'], + 'pdfEdital' => [($request->pdfEditalPreenchido!=='sim'?'required':''), 'file', 'mimes:pdf', 'max:2000000'], 'modeloDocumento' => ['file', 'mimes:zip,doc,docx,odt,pdf', 'max:2000000'], ]); } @@ -112,28 +117,31 @@ class EventoController extends Controller 'descricao' => ['required', 'string'], 'tipo' => ['required', 'string'], 'natureza' => ['required'], + 'descricao' => ['required'], + 'coordenador_id' => ['required'], 'inicioSubmissao' => ['required', 'date', 'after:' . $yesterday], 'fimSubmissao' => ['required', 'date', 'after:' . $request->inicioSubmissao], 'inicioRevisao' => ['required', 'date', 'after:' . $yesterday], 'fimRevisao' => ['required', 'date', 'after:' . $request->inicioRevisao], 'resultado' => ['required', 'date', 'after:' . $yesterday], - 'pdfEdital' => ['required', 'file', 'mimes:pdf', 'max:2000000'], + 'pdfEdital' => [($request->pdfEditalPreenchido!=='sim'?'required':''), 'file', 'mimes:pdf', 'max:2000000'], 'modeloDocumento' => ['file', 'mimes:zip,doc,docx,odt,pdf', 'max:2000000'], ]); - $evento = Evento::create([ - 'nome' => $request->nome, - 'descricao' => $request->descricao, - 'tipo' => $request->tipo, - 'natureza_id' => $request->natureza, - 'inicioSubmissao' => $request->inicioSubmissao, - 'fimSubmissao' => $request->fimSubmissao, - 'inicioRevisao' => $request->inicioRevisao, - 'fimRevisao' => $request->fimRevisao, - 'resultado' => $request->resultado, - 'coordenadorId' => $request->coordenador_id, - 'criador_id' => $user_id, - ]); + //$evento = Evento::create([ + $evento['nome'] = $request->nome; + $evento['descricao'] = $request->descricao; + $evento['tipo'] = $request->tipo; + $evento['natureza_id'] = $request->natureza; + $evento['inicioSubmissao'] = $request->inicioSubmissao; + $evento['fimSubmissao'] = $request->fimSubmissao; + $evento['inicioRevisao'] = $request->inicioRevisao; + $evento['fimRevisao'] = $request->fimRevisao; + $evento['resultado'] = $request->resultado; + $evento['coordenadorId'] = $request->coordenador_id; + $evento['criador_id'] = $user_id; + $evento['anexosStatus'] = 'final'; + //dd($evento); // $user = User::find($request->coordenador_id); // $user->coordenadorComissao()->editais()->save($evento); @@ -147,12 +155,16 @@ class EventoController extends Controller //$evento->coordenadorId = Auth::user()->id; - $pdfEdital = $request->pdfEdital; - $path = 'pdfEdital/' . $evento->id . '/'; - $nome = "edital.pdf"; - Storage::putFileAs($path, $pdfEdital, $nome); - $evento->pdfEdital = $path . $nome; + //-- Salvando anexos finais + if(isset($request->pdfEdital)){ + $pdfEdital = $request->pdfEdital; + $path = 'pdfEdital/' . $evento->id . '/'; + $nome = "edital.pdf"; + Storage::putFileAs($path, $pdfEdital, $nome); + $evento->pdfEdital = $path . $nome; + } + if(isset($request->modeloDocumento)){ $modeloDocumento = $request->modeloDocumento; $extension = $modeloDocumento->extension(); @@ -163,9 +175,7 @@ class EventoController extends Controller $evento->modeloDocumento = $path . $nome; } - - - $evento->save(); + $evento->update(); // $user = Auth::user(); // $subject = "Evento Criado"; @@ -175,6 +185,35 @@ class EventoController extends Controller return redirect()->route('coord.home'); } + public function armazenarAnexosTemp(Request $request){ + + //---Anexos do Projeto + $eventoTemp = Evento::where('criador_id', Auth::user()->id)->where('anexosStatus', 'temporario') + ->orderByDesc('updated_at')->first(); + + if($eventoTemp == null){ + $eventoTemp = new Evento(); + $eventoTemp->criador_id = Auth::user()->id; + $eventoTemp->anexosStatus = 'temporario'; + $eventoTemp->save(); + } + + if(!(is_null($request->pdfEdital)) ) { + $pasta = 'pdfEdital/' . $eventoTemp->id; + $eventoTemp->pdfEdital = Storage::putFileAs($pasta, $request->pdfEdital, 'edital.pdf'); + } + if (!(is_null($request->modeloDocumento))) { + $extension = $request->modeloDocumento->extension(); + $path = 'modeloDocumento/' . $eventoTemp->id; + $nome = "modelo" . "." . $extension; + $eventoTemp->modeloDocumento = Storage::putFileAs($path, $request->modeloDocumento, $nome); + } + + $eventoTemp->update(); + + return $eventoTemp; + } + /** * Display the specified resource. * @@ -248,8 +287,15 @@ class EventoController extends Controller public function edit($id) { // dd($id); - $evento = Evento::find($id); - return view('evento.editarEvento',['evento'=>$evento]); + $evento = Evento::find($id); + $coordenadors = CoordenadorComissao::with('user')->get(); + $naturezas = Natureza::orderBy('nome')->get(); + $yesterday = Carbon::yesterday('America/Recife'); + $yesterday = $yesterday->toDateString(); + return view('evento.editarEvento',['evento'=>$evento, + 'coordenadores'=>$coordenadors, + 'naturezas'=>$naturezas, + 'ontem'=>$yesterday]); } /** @@ -263,15 +309,55 @@ class EventoController extends Controller { //dd($request); $evento = Evento::find($id); + $yesterday = Carbon::yesterday('America/Recife'); + $yesterday = $yesterday->toDateString(); + if( + $request->inicioSubmissao == null || + $request->fimSubmissao == null || + $request->inicioRevisao == null || + $request->fimRevisao == null || + $request->resultado == null + + ){ + $validatedData = $request->validate([ + 'nome' => ['required', 'string'], + 'descricao' => ['required', 'string'], + 'tipo' => ['required', 'string'], + 'natureza' => ['required'], + 'inicioSubmissao' => ['required', 'date'], + 'fimSubmissao' => ['required', 'date'], + 'inicioRevisao' => ['required', 'date'], + 'fimRevisao' => ['required', 'date'], + 'resultado' => ['required', 'date'], + 'pdfEdital' => ['file', 'mimes:pdf', 'max:2000000'], + 'modeloDocumento' => ['file', 'mimes:zip,doc,docx,odt,pdf', 'max:2000000'], + ]); + } + + $validated = $request->validate([ + 'nome' => ['required', 'string'], + 'descricao' => ['required', 'string'], + 'tipo' => ['required', 'string'], + 'natureza' => ['required'], + 'inicioSubmissao' => ['required', 'date', 'after:' . $yesterday], + 'fimSubmissao' => ['required', 'date', 'after:' . $request->inicioSubmissao], + 'inicioRevisao' => ['required', 'date', 'after:' . $yesterday], + 'fimRevisao' => ['required', 'date', 'after:' . $request->inicioRevisao], + 'resultado' => ['required', 'date', 'after:' . $yesterday], + 'pdfEdital' => ['file', 'mimes:pdf', 'max:2000000'], + 'modeloDocumento' => ['file', 'mimes:zip,doc,docx,odt,pdf', 'max:2000000'], + ]); $evento->nome = $request->nome; $evento->descricao = $request->descricao; - $evento->tipo = $request->tipo; + $evento->tipo = $request->tipo; + $evento->natureza_id = $request->natureza; $evento->inicioSubmissao = $request->inicioSubmissao; $evento->fimSubmissao = $request->fimSubmissao; $evento->inicioRevisao = $request->inicioRevisao; $evento->fimRevisao = $request->fimRevisao; - $evento->resultado = $request->resultado; + $evento->resultado = $request->resultado; + $evento->coordenadorId = $request->coordenador_id; if($request->pdfEdital != null){ $pdfEdital = $request->pdfEdital; @@ -289,7 +375,7 @@ class EventoController extends Controller $evento->modeloDocumento = $path . $nome; } - $evento->save(); + $evento->update(); $eventos = Evento::all(); return view('coordenador.home',['eventos'=>$eventos]); @@ -470,6 +556,21 @@ class EventoController extends Controller public function baixarEdital($id) { $evento = Evento::find($id); - return Storage::download($evento->pdfEdital); + + if (Storage::disk()->exists($evento->pdfEdital)) { + return Storage::download($evento->pdfEdital); + } + + return abort(404); + } + + public function baixarModelos($id) { + $evento = Evento::find($id); + + if (Storage::disk()->exists($evento->modeloDocumento)) { + return Storage::download($evento->modeloDocumento); + } + + return abort(404); } } diff --git a/app/Http/Controllers/ProponenteController.php b/app/Http/Controllers/ProponenteController.php index 9c4a2aa5b81bedad671ccb866415abc61da0b1da..b57e1f3278230408ce874030d95a662d8fdb5080 100644 --- a/app/Http/Controllers/ProponenteController.php +++ b/app/Http/Controllers/ProponenteController.php @@ -7,6 +7,7 @@ use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rule; use Auth; use App\User; +use App\Trabalho; use App\Proponente; use App\Evento; @@ -77,4 +78,12 @@ class ProponenteController extends Controller } + + public function projetosDoProponente() { + $proponente = Proponente::where('user_id', Auth()->user()->id)->first(); + + $projetos = Trabalho::where('proponente_id', $proponente->id)->get(); + + return view('proponente.projetos')->with(['projetos' => $projetos]); + } } diff --git a/app/Http/Controllers/TrabalhoController.php b/app/Http/Controllers/TrabalhoController.php index 68e5c17faa6fedc149230687b7930ba17a2fef20..b94fea7b607f1fbd511b1a5ad1afb3cb702f8544 100644 --- a/app/Http/Controllers/TrabalhoController.php +++ b/app/Http/Controllers/TrabalhoController.php @@ -49,12 +49,17 @@ class TrabalhoController extends Controller if($proponente == null){ return view('proponente.cadastro')->with(['mensagem' => 'Você não possui perfil de Proponente, para submeter algum projeto preencha o formulário.']);; } + + $rascunho = Trabalho::where('proponente_id', $proponente->id)->where('evento_id',$edital->id)->where('status', 'Rascunho') + ->orderByDesc('updated_at')->first(); + + //dd($rascunho); return view('evento.submeterTrabalho',[ 'edital' => $edital, 'grandeAreas' => $grandeAreas, - 'funcaoParticipantes'=> $funcaoParticipantes - + 'funcaoParticipantes'=> $funcaoParticipantes, + 'rascunho' => $rascunho ]); } @@ -94,8 +99,8 @@ class TrabalhoController extends Controller } } - //--Salvando os anexos da submissão temporariamente - $this->armazenarAnexosTemp($request, Auth::user()->id); + //--Salvando os dados da submissão temporariamente + $trabalho = $this->armazenarInfoTemp($request, $proponente); //O anexo de Decisão do CONSU dependo do tipo de edital if( $evento->tipo == 'PIBIC' || $evento->tipo == 'PIBIC-EM'){ @@ -125,28 +130,27 @@ class TrabalhoController extends Controller ]); //dd($request->all()); - $trabalho = Trabalho::create([ - 'titulo' => $request->nomeProjeto, - 'coordenador_id' => $coordenador->id, - 'grande_area_id' => $request->grandeArea, - 'area_id' => $request->area, - 'sub_area_id' => $request->subArea, - 'pontuacaoPlanilha' => $request->pontuacaoPlanilha, - 'linkGrupoPesquisa' => $request->linkGrupo, - 'linkLattesEstudante' => $request->linkLattesEstudante, - 'data' => $mytime, - 'evento_id' => $request->editalId, - 'avaliado' => 0, - 'status' => 'Submetido' , - 'proponente_id' => $proponente->id, - //Anexos - 'anexoCONSU' => $request->anexoCONSU != null ? $request->anexoCONSU : "", - 'anexoProjeto' => $request->anexoProjeto != null ? $request->anexoProjeto : "", - 'anexoAutorizacaoComiteEtica' => $request->anexoComiteEtica != null ? $request->anexoComiteEtica : "", - 'justificativaAutorizacaoEtica' => $request->justificativaAutorizacaoEtica != null ? $request->justificativaAutorizacaoEtica : "", - 'anexoLattesCoordenador' => $request->anexoLattesCoordenador != null ? $request->anexoLattesCoordenador : "", - 'anexoPlanilhaPontuacao' => $request->anexoPlanilha != null ? $request->anexoPlanilha : "", - ]); + //$trabalho = Trabalho::create([ + $trabalho['titulo'] = $request->nomeProjeto; + $trabalho['coordenador_id'] = $coordenador->id; + $trabalho['grande_area_id'] = $request->grandeArea; + $trabalho['area_id'] = $request->area; + $trabalho['sub_area_id'] = $request->subArea; + $trabalho['pontuacaoPlanilha'] = $request->pontuacaoPlanilha; + $trabalho['linkGrupoPesquisa'] = $request->linkGrupo; + $trabalho['linkLattesEstudante'] = $request->linkLattesEstudante; + $trabalho['data'] = $mytime; + $trabalho['evento_id'] = $request->editalId; + $trabalho['status'] = 'Submetido'; + $trabalho['proponente_id'] = $proponente->id; + //Anexos + $trabalho['anexoDecisaoCONSU'] = $request->anexoCONSU != null ? $request->anexoCONSU : ""; + $trabalho['anexoProjeto'] = $request->anexoProjeto != null ? $request->anexoProjeto : ""; + $trabalho['anexoAutorizacaoComiteEtica'] = $request->anexoComiteEtica != null ? $request->anexoComiteEtica : ""; + $trabalho['justificativaAutorizacaoEtica'] = $request->justificativaAutorizacaoEtica != null ? $request->justificativaAutorizacaoEtica : ""; + $trabalho['anexoLattesCoordenador'] = $request->anexoLattesCoordenador != null ? $request->anexoLattesCoordenador : ""; + $trabalho['anexoPlanilhaPontuacao'] = $request->anexoPlanilha != null ? $request->anexoPlanilha : ""; + //dd($trabalho); } else { //Caso em que o anexo da Decisão do CONSU não necessário @@ -169,28 +173,26 @@ class TrabalhoController extends Controller 'anexoPlanoTrabalho.*' => ['nullable', 'file', 'mimes:pdf', 'max:2000000'], ]); - $trabalho = Trabalho::create([ - 'titulo' => $request->nomeProjeto, - 'coordenador_id' => $coordenador->id, - 'grande_area_id' => $request->grandeArea, - 'area_id' => $request->area, - 'sub_area_id' => $request->subArea, - 'pontuacaoPlanilha' => $request->pontuacaoPlanilha, - 'linkGrupoPesquisa' => $request->linkGrupo, - 'linkLattesEstudante' => $request->linkLattesEstudante, - 'data' => $mytime, - 'evento_id' => $request->editalId, - 'avaliado' => 0, - 'status' => 'Submetido' , - 'proponente_id' => $proponente->id, + //$trabalho = Trabalho::create([ + $trabalho['titulo'] = $request->nomeProjeto; + $trabalho['coordenador_id'] = $coordenador->id; + $trabalho['grande_area_id'] = $request->grandeArea; + $trabalho['area_id'] = $request->area; + $trabalho['sub_area_id'] = $request->subArea; + $trabalho['pontuacaoPlanilha'] = $request->pontuacaoPlanilha; + $trabalho['linkGrupoPesquisa'] = $request->linkGrupo; + $trabalho['linkLattesEstudante'] = $request->linkLattesEstudante; + $trabalho['data'] = $mytime; + $trabalho['evento_id'] = $request->editalId; + $trabalho['status'] = 'Submetido'; + $trabalho['proponente_id'] = $proponente->id; //Anexos - 'anexoProjeto' => $request->anexoProjeto, - 'anexoAutorizacaoComiteEtica' => $request->anexoComiteEtica, - 'justificativaAutorizacaoEtica' => $request->justificativaAutorizacaoEtica, - 'anexoLattesCoordenador' => $request->anexoLattesCoordenador, - 'anexoPlanilhaPontuacao' => $request->anexoPlanilha, - ]); - + $trabalho['anexoProjeto'] = $request->anexoProjeto; + $trabalho['anexoAutorizacaoComiteEtica'] = $request->anexoComiteEtica; + $trabalho['justificativaAutorizacaoEtica'] = $request->justificativaAutorizacaoEtica; + $trabalho['anexoLattesCoordenador'] = $request->anexoLattesCoordenador; + $trabalho['anexoPlanilhaPontuacao'] = $request->anexoPlanilha; + } //Envia email com senha temp para cada participante do projeto @@ -257,19 +259,7 @@ class TrabalhoController extends Controller $pasta = 'trabalhos/' . $request->editalId . '/' . $trabalho->id; - //-- Se existem anexos temporários, utilizá-los - $anexosTemp = AnexosTemp::where('eventoId', $request->editalId)->where('proponenteId', Auth::user()->id) - ->orderByDesc('updated_at')->first(); - - if($anexosTemp != null){ - $this->armazenarAnexosFinais($anexosTemp, $request, $pasta, $trabalho, $evento); - } - - $trabalho->update(); - - //Deletando arquivos temporários - Storage::deleteDirectory('anexosTemp/' . $request->editalId . '/' . Auth::user()->id); - $anexosTemp->delete(); + $trabalho = $this->armazenarAnexosFinais($request, $pasta, $trabalho, $evento); $subject = "Submissão de Trabalho"; $autor = Auth()->user(); @@ -281,91 +271,134 @@ class TrabalhoController extends Controller return redirect()->route('evento.visualizar',['id'=>$request->editalId]); } - //Armazena temporariamente anexos da submissão, no banco de dados e no storage - public function armazenarAnexosTemp(Request $request, $proponenteId){ + public function storeParcial(Request $request){ + $mytime = Carbon::now('America/Recife'); + $mytime = $mytime->toDateString(); + $evento = Evento::find($request->editalId); + $coordenador = CoordenadorComissao::find($evento->coordenadorId); - //---Anexos do Projeto - $anexosTemp = AnexosTemp::where('eventoId', $request->editalId)->where('proponenteId', $proponenteId) + //Relaciona o projeto criado com o proponente que criou o projeto + $proponente = Proponente::where('user_id', Auth::user()->id)->first(); + + $trabalho = "trabalho"; + if($evento->inicioSubmissao > $mytime){ + if($mytime >= $evento->fimSubmissao){ + return redirect()->route('home'); + } + } + + //--Salvando os dados da submissão temporariamente + $this->armazenarInfoTemp($request, $proponente); + + return redirect()->route('projetos.edital',['id'=>$request->editalId]); + } + + //Armazena temporariamente dados da submissão, no banco de dados e no storage + public function armazenarInfoTemp(Request $request, $proponente){ + + //---Dados do Projeto + $trabalho = Trabalho::where('proponente_id', $proponente->id)->where('evento_id',$request->editalId)->where('status', 'Rascunho') ->orderByDesc('updated_at')->first(); - - if($anexosTemp == null){ - $anexosTemp = new AnexosTemp(); - $jaExiste = false; - }else{ - $jaExiste = true; + // dd($trabalho); + if($trabalho == null){ + $trabalho = new Trabalho(); + $trabalho->proponente_id = $proponente->id; + $trabalho->evento_id = $request->editalId; + $trabalho->status = 'Rascunho'; + + $stringKeys = ['titulo','linkGrupoPesquisa', 'linkLattesEstudante','pontuacaoPlanilha','anexoProjeto', + 'anexoPlanilhaPontuacao', 'anexoLattesCoordenador']; + $intKeys = ['grande_area_id','area_id','sub_area_id','coordenador_id']; + + $trabalho->fill( + array_fill_keys($stringKeys, "") + array_fill_keys($intKeys, 1) + )->save(); + // dd($trabalho); + } + + if(!(is_null($request->nomeProjeto)) ) { + $trabalho->titulo = $request->nomeProjeto; + } + if(!(is_null($request->grandeArea))){ + $trabalho->grande_area_id = $request->grandeArea; + } + if(!(is_null($request->area))){ + $trabalho->area_id = $request->area; + } + if(!(is_null($request->subArea))){ + $trabalho->sub_area_id = $request->subArea; + } + if(!(is_null($request->pontuacaoPlanilha))){ + $trabalho->pontuacaoPlanilha = $request->pontuacaoPlanilha; + } + if(!(is_null($request->linkGrupo))){ + $trabalho->linkGrupoPesquisa = $request->linkGrupo; } - $pasta = 'anexosTemp/' . $request->editalId . '/' . $proponenteId; + //Anexos do projeto + + $pasta = 'trabalhos/' . $request->editalId . '/' . $trabalho->id; if(!(is_null($request->anexoCONSU)) ) { - $anexosTemp->anexoDecisaoCONSU = Storage::putFileAs($pasta, $request->anexoCONSU, "CONSU.pdf"); + $trabalho->anexoDecisaoCONSU = Storage::putFileAs($pasta, $request->anexoCONSU, "CONSU.pdf"); } if (!(is_null($request->anexoComiteEtica))) { - $anexosTemp->anexoAutorizacaoComiteEtica = Storage::putFileAs($pasta, $request->anexoComiteEtica, "Comite_de_etica.pdf"); + $trabalho->anexoAutorizacaoComiteEtica = Storage::putFileAs($pasta, $request->anexoComiteEtica, "Comite_de_etica.pdf"); } if (!(is_null($request->justificativaAutorizacaoEtica))) { - $anexosTemp->justificativaAutorizacaoEtica = Storage::putFileAs($pasta, $request->justificativaAutorizacaoEtica, "Justificativa.pdf"); + $trabalho->justificativaAutorizacaoEtica = Storage::putFileAs($pasta, $request->justificativaAutorizacaoEtica, "Justificativa.pdf"); } if (!(is_null($request->anexoProjeto))) { - $anexosTemp->anexoProjeto = Storage::putFileAs($pasta, $request->anexoProjeto, "Projeto.pdf"); + $trabalho->anexoProjeto = Storage::putFileAs($pasta, $request->anexoProjeto, "Projeto.pdf"); } if (!(is_null($request->anexoLattesCoordenador))) { - $anexosTemp->anexoLattesCoordenador = Storage::putFileAs($pasta, $request->anexoLattesCoordenador, "Latter_Coordenador.pdf"); + $trabalho->anexoLattesCoordenador = Storage::putFileAs($pasta, $request->anexoLattesCoordenador, "Latter_Coordenador.pdf"); } if (!(is_null($request->anexoPlanilha))) { - $anexosTemp->anexoPlanilhaPontuacao = Storage::putFileAs($pasta, $request->anexoPlanilha, "Planilha.pdf"); - } - - $anexosTemp->eventoId = $request->editalId; - $anexosTemp->proponenteId = $proponenteId; - - if(!$jaExiste){ - $anexosTemp->save(); - }else{ - $anexosTemp->update(); + $trabalho->anexoPlanilhaPontuacao = Storage::putFileAs($pasta, $request->anexoPlanilha, "Planilha.pdf"); } + $trabalho->update(); + //---Anexos planos de trabalho - + + return $trabalho; } - public function armazenarAnexosFinais($anexosTemp, $request, $pasta, $trabalho, $evento){ + public function armazenarAnexosFinais($request, $pasta, $trabalho, $evento){ // Anexo Projeto - if( (!isset($request->anexoProjeto) && $request->anexoProjetoPreenchido == 'sim') || isset($request->anexoProjeto)){ - Storage::move($anexosTemp->anexoProjeto, $pasta . '/Projeto.pdf'); - $trabalho->anexoProjeto = $pasta . '/Projeto.pdf'; + if( (!isset($request->anexoProjeto) && $request->anexoProjetoPreenchido == 'sim') || isset($request->anexoProjeto)){ + $trabalho->anexoProjeto = Storage::putFileAs($pasta, $request->anexoProjeto, 'Projeto.pdf'); } - + //Anexo Decisão CONSU if( $evento->tipo == 'PIBIC' || $evento->tipo == 'PIBIC-EM') { if( (!isset($request->anexoCONSU) && $request->anexoConsuPreenchido == 'sim') || isset($request->anexoCONSU)){ - Storage::move($anexosTemp->anexoDecisaoCONSU, $pasta . '/CONSU.pdf'); - $trabalho->anexoDecisaoCONSU = $pasta . '/CONSU.pdf'; + $trabalho->anexoDecisaoCONSU = Storage::putFileAs($pasta, $request->anexoCONSU, 'CONSU.pdf'); } } - + //Autorização ou Justificativa if( (!isset($request->anexoComiteEtica) && $request->anexoComitePreenchido == 'sim') || isset($request->anexoComiteEtica)){ - Storage::move($anexosTemp->anexoAutorizacaoComiteEtica, $pasta . '/Comite_de_etica.pdf'); - $trabalho->anexoAutorizacaoComiteEtica = $pasta . '/Comite_de_etica.pdf'; + $trabalho->anexoAutorizacaoComiteEtica = Storage::putFileAs($pasta, $request->anexoComiteEtica, 'Comite_de_etica.pdf'); } elseif( (!isset($request->justificativaAutorizacaoEtica) && $request->anexoJustificativaPreenchido == 'sim') || isset($request->justificativaAutorizacaoEtica)){ - Storage::move($anexosTemp->justificativaAutorizacaoEtica, $pasta . '/Justificativa.pdf'); - $trabalho->justificativaAutorizacaoEtica = $pasta . '/Justificativa.pdf'; + $trabalho->justificativaAutorizacaoEtica = Storage::putFileAs($pasta, $request->justificativaAutorizacaoEtica, 'Justificativa.pdf'); } - + //Anexo Lattes if( (!isset($request->anexoLattesCoordenador) && $request->anexoLattesPreenchido == 'sim') || isset($request->anexoLattesCoordenador)){ - Storage::move($anexosTemp->anexoLattesCoordenador, $pasta . '/Latter_Coordenador.pdf'); - $trabalho->anexoLattesCoordenador = $pasta . '/Latter_Coordenador.pdf'; + $trabalho->anexoLattesCoordenador = Storage::putFileAs($pasta, $request->anexoLattesCoordenador, 'Latter_Coordenador.pdf'); } - + //Anexo Planilha if( (!isset($request->anexoPlanilha) && $request->anexoPlanilhaPreenchido == 'sim') || isset($request->anexoPlanilha)){ - Storage::move($anexosTemp->anexoPlanilhaPontuacao, $pasta . '/Planilha.pdf'); - $trabalho->anexoPlanilhaPontuacao = $pasta . '/Planilha.pdf'; + $trabalho->anexoPlanilhaPontuacao = Storage::putFileAs($pasta, $request->anexoPlanilha, 'Planilha.pdf'); } + + $trabalho->update(); + return $trabalho; } /** * Display the specified resource. @@ -416,7 +449,7 @@ class TrabalhoController extends Controller $participantes = Participante::where('trabalho_id', $id)->get(); $participantesUsersIds = Participante::where('trabalho_id', $id)->select('user_id')->get(); $users = User::whereIn('id', $participantesUsersIds)->get(); - $arquivos = Arquivo::where('trabalhoId', $id)->get(); + $arquivos = Arquivo::where('trabalhoId', $id)->get(); return view('projeto.editar')->with(['projeto' => $projeto, 'grandeAreas' => $grandeAreas, @@ -537,7 +570,6 @@ class TrabalhoController extends Controller foreach ($users as $user) { array_push($emailParticipantes, $user->email); } - foreach ($request->emailParticipante as $key => $value) { // criando novos participantes que podem ter sido adicionados if (!(in_array($request->emailParticipante[$key], $emailParticipantes, false))) { @@ -593,6 +625,7 @@ class TrabalhoController extends Controller if (in_array($request->emailParticipante[$key], $emailParticipantes, false)) { $userParticipante = User::where('email', $value)->first(); if($userParticipante != null){ + $user = User::where('email', $request->emailParticipante[$key])->first(); $participante = Participante::where([['user_id', '=', $user->id], ['trabalho_id', '=', $trabalho->id]])->first(); @@ -603,25 +636,42 @@ class TrabalhoController extends Controller $participante->update(); //atualizando planos de trabalho - if (array_key_exists($key, $request->anexoPlanoTrabalho)) { - if (!(is_null($request->anexoPlanoTrabalho[$key]))) { + if ($request->anexoPlanoTrabalho != null && array_key_exists($key, $request->anexoPlanoTrabalho)) { + if (!(is_null($request->anexoPlanoTrabalho[$key]))) { $arquivo = Arquivo::where('participanteId', $participante->id)->first(); - Storage::delete($arquivo->nome); - $arquivo->delete(); - - $path = 'trabalhos/' . $request->editalId . '/' . $trabalho->id .'/'; - $nome = $request->nomePlanoTrabalho[$key] .".pdf"; - $file = $request->anexoPlanoTrabalho[$key]; - Storage::putFileAs($path, $file, $nome); - - $arquivo = new Arquivo(); - $arquivo->titulo = $request->nomePlanoTrabalho[$key]; - $arquivo->nome = $path . $nome; - $arquivo->trabalhoId = $trabalho->id; - $arquivo->data = $mytime; - $arquivo->participanteId = $participante->id; - $arquivo->versaoFinal = true; - $arquivo->save(); + //se plano já existir, deletar + if($arquivo != null){ + Storage::delete($arquivo->nome); + $arquivo->delete(); + } + + //atualizar plano + if($request->semPlano[$key] == null){ + $path = 'trabalhos/' . $request->editalId . '/' . $trabalho->id .'/'; + $nome = $request->nomePlanoTrabalho[$key] .".pdf"; + $file = $request->anexoPlanoTrabalho[$key]; + Storage::putFileAs($path, $file, $nome); + + $arquivo = new Arquivo(); + $arquivo->titulo = $request->nomePlanoTrabalho[$key]; + $arquivo->nome = $path . $nome; + $arquivo->trabalhoId = $trabalho->id; + $arquivo->data = $mytime; + $arquivo->participanteId = $participante->id; + $arquivo->versaoFinal = true; + $arquivo->save(); + } + } + } + //removendo planos de trabalho + if($request->nomePlanoTrabalho != null && array_key_exists($key, $request->nomePlanoTrabalho)){ + if($request->semPlano[$key] == 'sim'){ + $arquivo = Arquivo::where('participanteId', $participante->id)->first(); + //se plano já existir, deletar + if($arquivo != null){ + Storage::delete($arquivo->nome); + $arquivo->delete(); + } } } } @@ -632,13 +682,14 @@ class TrabalhoController extends Controller $participantesUsersIds = Participante::where('trabalho_id', '=', $trabalho->id)->select('user_id')->get(); $users = User::whereIn('id', $participantesUsersIds)->get(); - foreach ($users as $user) { - //dd($user); - if (!(in_array($user->email, $request->emailParticipante, false))) { - $participante = Participante::where([['user_id', '=', $user->id], ['trabalho_id', '=', $trabalho->id]])->first(); - $arquivo = Arquivo::where('participanteId', $participante->id); - Storage::delete($arquivo->nome); - $arquivo->delete(); + foreach ($users as $user) { + if (!(in_array($user->email, $request->emailParticipante, false))) { + $participante = Participante::where([['user_id', '=', $user->id], ['trabalho_id', '=', $trabalho->id]])->first(); + $arquivo = Arquivo::where('participanteId', $participante->id)->first(); + if($arquivo != null){ + Storage::delete($arquivo->nome); + $arquivo->delete(); + } $participante->delete(); } } @@ -656,6 +707,8 @@ class TrabalhoController extends Controller { $trabalho = Trabalho::find($request->id); //dd($trabalho); + Storage::deleteDirectory('trabalhos/' . $trabalho->evento->id . '/' . $trabalho->id ); + $trabalho->delete(); return redirect()->back(); } @@ -855,15 +908,27 @@ class TrabalhoController extends Controller public function baixarAnexoJustificativa($id) { $projeto = Trabalho::find($id); - return Storage::download($projeto->justificativaAutorizacaoEtica); + + if (Storage::disk()->exists($projeto->justificativaAutorizacaoEtica)) { + return Storage::download($projeto->justificativaAutorizacaoEtica); + } + + return abort(404); } public function baixarAnexoTemp($eventoId, $nomeAnexo) { - $proponenteId = Auth::user()->id; + $proponente = Proponente::where('user_id', Auth::user()->id)->first(); - $anexosTemp = AnexosTemp::where('eventoId', $eventoId)->where('proponenteId', $proponenteId) - ->orderByDesc('updated_at')->first(); + $trabalho = Trabalho::where('proponente_id', $proponente->id)->where('evento_id',$eventoId)->where('status', 'Rascunho') + ->orderByDesc('updated_at')->first(); + + return Storage::download($trabalho->$nomeAnexo); + } + + public function baixarEventoTemp($nomeAnexo){ + $eventoTemp = Evento::where('criador_id', Auth::user()->id)->where('anexosStatus', 'temporario') + ->orderByDesc('updated_at')->first(); - return Storage::download($anexosTemp->$nomeAnexo); + return Storage::download($eventoTemp->$nomeAnexo); } } diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index c28ad4015cc9d9d1394510a8b9c2fb2b184b036f..131ae00184ddb80d54cb9ae84fee365b9c8292f8 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -14,6 +14,7 @@ use App\Endereco; use App\Trabalho; use App\Coautor; use App\Evento; +use Carbon\Carbon; use Illuminate\Support\Facades\Log; class UserController extends Controller @@ -27,7 +28,9 @@ class UserController extends Controller return redirect()->route('home'); } Log::debug('UserController index'); - return view('index', ['eventos' => $eventos]); + $hoje = Carbon::today('America/Recife'); + $hoje = $hoje->toDateString(); + return view('index', ['eventos' => $eventos, 'hoje' => $hoje]); //return view('auth.login'); } diff --git a/app/Utils/GrupoPesquisaValidation.php b/app/Utils/GrupoPesquisaValidation.php index 0685205e67f92bceab4071ad1cd54c76ed319d8e..62ca9fd6e71d68159504cda2050d7827cfd1696e 100644 --- a/app/Utils/GrupoPesquisaValidation.php +++ b/app/Utils/GrupoPesquisaValidation.php @@ -16,14 +16,19 @@ class GrupoPesquisaValidation $url = filter_var($url, FILTER_SANITIZE_URL); - // Validate url - if (!filter_var($url, FILTER_VALIDATE_URL)) { - return false; - } + // // Validate url + // if (!filter_var($url, FILTER_VALIDATE_URL)) { + // return false; + // } + + //If url doesn't have a protocol + if(substr($url, 0, 4) != 'http'){ + $url = 'http://' . $url; + } - // if(parse_url($url)['host'] != 'dgp.cnpq.br'){ - // return false; - // } + if(parse_url($url)['host'] != 'dgp.cnpq.br'){ + return false; + } if($this->getHttpResponseCode_using_getheaders($url) != 200){ return false; diff --git a/app/Utils/LattesValidation.php b/app/Utils/LattesValidation.php index e97a7524241b17c158e95e85d970e358bf013789..8f24a6ee0a0f939b5a520da8ba53e6b3ea913626 100644 --- a/app/Utils/LattesValidation.php +++ b/app/Utils/LattesValidation.php @@ -9,18 +9,26 @@ class LattesValidation function isValidUrl($url) { + // first do some quick sanity checks: if (!$url || !is_string($url)) { return false; } - + $url = filter_var($url, FILTER_SANITIZE_URL); - + // Validate url - if (!filter_var($url, FILTER_VALIDATE_URL)) { - return false; - } + // if (!filter_var($url, FILTER_VALIDATE_URL)) { + // dd('1'); + // return false; + // } + //If url doesn't have a protocol + if(substr($url, 0, 4) != 'http'){ + $url = 'http://' . $url; + } + + //dd(parse_url($url)['host'] != 'lattes.cnpq.br'); if(parse_url($url)['host'] != 'buscatextual.cnpq.br' && parse_url($url)['host'] != 'lattes.cnpq.br'){ return false; } diff --git a/composer.lock b/composer.lock index 06cca0a75f61f83b73ab24e78f294033cb488b6d..f68ea6ea4451f50a2c24adc7788b8b5500e7d733 100644 --- a/composer.lock +++ b/composer.lock @@ -234,16 +234,16 @@ }, { "name": "egulias/email-validator", - "version": "2.1.17", + "version": "2.1.18", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a" + "reference": "cfa3d44471c7f5bfb684ac2b0da7114283d78441" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/cfa3d44471c7f5bfb684ac2b0da7114283d78441", + "reference": "cfa3d44471c7f5bfb684ac2b0da7114283d78441", "shasum": "" }, "require": { @@ -267,7 +267,7 @@ }, "autoload": { "psr-4": { - "Egulias\\EmailValidator\\": "EmailValidator" + "Egulias\\EmailValidator\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -288,7 +288,7 @@ "validation", "validator" ], - "time": "2020-02-13T22:36:52+00:00" + "time": "2020-06-16T20:11:17+00:00" }, { "name": "fideloper/proxy", @@ -397,16 +397,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.5.4", + "version": "6.5.5", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d" + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d", - "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", "shasum": "" }, "require": { @@ -414,7 +414,7 @@ "guzzlehttp/promises": "^1.0", "guzzlehttp/psr7": "^1.6.1", "php": ">=5.5", - "symfony/polyfill-intl-idn": "1.17.0" + "symfony/polyfill-intl-idn": "^1.17.0" }, "require-dev": { "ext-curl": "*", @@ -460,7 +460,7 @@ "rest", "web service" ], - "time": "2020-05-25T19:35:05+00:00" + "time": "2020-06-16T21:01:06+00:00" }, { "name": "guzzlehttp/promises", @@ -586,16 +586,16 @@ }, { "name": "laravel/framework", - "version": "v6.18.19", + "version": "v6.18.20", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "69321afec31f4a908112e5dc8995fc91024fd971" + "reference": "2862a9857533853bb2851bac39d65e3bfb8ba6cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/69321afec31f4a908112e5dc8995fc91024fd971", - "reference": "69321afec31f4a908112e5dc8995fc91024fd971", + "url": "https://api.github.com/repos/laravel/framework/zipball/2862a9857533853bb2851bac39d65e3bfb8ba6cd", + "reference": "2862a9857533853bb2851bac39d65e3bfb8ba6cd", "shasum": "" }, "require": { @@ -677,6 +677,7 @@ "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.0).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", + "ext-ftp": "Required to use the Flysystem FTP driver.", "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "ext-memcached": "Required to use the memcache cache driver.", "ext-pcntl": "Required to use all features of the queue worker.", @@ -729,7 +730,7 @@ "framework", "laravel" ], - "time": "2020-06-09T13:59:34+00:00" + "time": "2020-06-16T13:21:33+00:00" }, { "name": "laravel/tinker", @@ -1215,16 +1216,16 @@ }, { "name": "opis/closure", - "version": "3.5.4", + "version": "3.5.5", "source": { "type": "git", "url": "https://github.com/opis/closure.git", - "reference": "1d0deef692f66dae5d70663caee2867d0971306b" + "reference": "dec9fc5ecfca93f45cd6121f8e6f14457dff372c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/1d0deef692f66dae5d70663caee2867d0971306b", - "reference": "1d0deef692f66dae5d70663caee2867d0971306b", + "url": "https://api.github.com/repos/opis/closure/zipball/dec9fc5ecfca93f45cd6121f8e6f14457dff372c", + "reference": "dec9fc5ecfca93f45cd6121f8e6f14457dff372c", "shasum": "" }, "require": { @@ -1272,7 +1273,7 @@ "serialization", "serialize" ], - "time": "2020-06-07T11:41:29+00:00" + "time": "2020-06-17T14:59:55+00:00" }, { "name": "paragonie/random_compat", @@ -5407,16 +5408,16 @@ }, { "name": "webmozart/assert", - "version": "1.8.0", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6" + "reference": "9dc4f203e36f2b486149058bade43c851dd97451" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6", - "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6", + "url": "https://api.github.com/repos/webmozart/assert/zipball/9dc4f203e36f2b486149058bade43c851dd97451", + "reference": "9dc4f203e36f2b486149058bade43c851dd97451", "shasum": "" }, "require": { @@ -5424,6 +5425,7 @@ "symfony/polyfill-ctype": "^1.8" }, "conflict": { + "phpstan/phpstan": "<0.12.20", "vimeo/psalm": "<3.9.1" }, "require-dev": { @@ -5451,7 +5453,7 @@ "check", "validate" ], - "time": "2020-04-18T12:12:48+00:00" + "time": "2020-06-16T10:16:42+00:00" } ], "aliases": [], diff --git a/database/migrations/2020_02_05_123153_create_eventos_table.php b/database/migrations/2020_02_05_123153_create_eventos_table.php index d9f13899a0c4b3bfc2e45670600f551cf2e6290a..bdf65f801a72363fbf80066f93df951a803ff59a 100644 --- a/database/migrations/2020_02_05_123153_create_eventos_table.php +++ b/database/migrations/2020_02_05_123153_create_eventos_table.php @@ -32,6 +32,7 @@ class CreateEventosTable extends Migration $table->integer('coordenadorId')->nullable(); $table->string('pdfEdital')->nullable(); $table->string('modeloDocumento')->nullable(); + $table->string('anexosStatus')->nullable(); }); } diff --git a/database/migrations/2020_06_15_160417_create_anexos_temps_table.php b/database/migrations/2020_06_15_160417_create_anexos_temps_table.php deleted file mode 100644 index 4c0b77a7862dd1a70460a12ad2e58b95ddbc07c7..0000000000000000000000000000000000000000 --- a/database/migrations/2020_06_15_160417_create_anexos_temps_table.php +++ /dev/null @@ -1,41 +0,0 @@ -bigIncrements('id'); - $table->timestamps(); - - $table->string('anexoProjeto')->nullable(); - $table->string('anexoDecisaoCONSU')->nullable(); - $table->string('anexoPlanilhaPontuacao')->nullable(); - $table->string('anexoLattesCoordenador')->nullable(); - $table->string('anexoAutorizacaoComiteEtica')->nullable(); - $table->string('justificativaAutorizacaoEtica')->nullable(); - - $table->integer('eventoId'); - $table->integer('proponenteId'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('anexos_temps'); - } -} diff --git a/resources/views/administrador/editais.blade.php b/resources/views/administrador/editais.blade.php index 552bcbb7e73ca2fece22fd03aacdd2f388b6730f..12d00994b26cf9b0872c766c40bb1353340d737a 100644 --- a/resources/views/administrador/editais.blade.php +++ b/resources/views/administrador/editais.blade.php @@ -8,8 +8,9 @@