diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index 8abf877c5dac5faf01f0d0542ae73e5cac169bcf..b61b2ad1d7b25e93625f5c7537ba2c27d89f475d 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -12,6 +12,7 @@ use Illuminate\Validation\Rule; use App\User; use App\Participante; use App\Proponente; +use App\Rules\UrlValidacao; class RegisterController extends Controller { @@ -54,30 +55,31 @@ class RegisterController extends Controller protected function validator(array $data) { - - return Validator::make($data, [ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'string', 'min:8', 'confirmed'], - 'cpf' => ['required', 'cpf'], - 'celular' => ['required','string'], - 'instituicao' => ['required','string','max:255'], + 'cpf' => ['required', 'cpf', 'unique:users'], + 'celular' => ['required', 'string'], + 'instituicao' => ['required_if:instituicaoSelect,Outra', 'max:255'], + 'instituicaoSelect' => ['required_without:instituicao'], 'cargo' => ['required'], 'vinculo' => ['required'], 'outro' => ['required_if:vinculo,Outro'], - 'titulacaoMaxima' => ['required_with:anoTitulacao,areaFormacao,bolsistaProdutividade,linkLattes'], - 'titulacaoMaxima' => Rule::requiredIf( (isset($data['cargo']) && $data['cargo'] !== 'Estudante') || (isset($data['cargo']) && $data['cargo'] === 'Estudante' && isset($data['vinculo']) && $data['vinculo']=== 'Pós-doutorando')), - 'anoTitulacao'=> ['required_with:titulacaoMaxima,areaFormacao,bolsistaProdutividade,linkLattes'], - 'anoTitulacao' => Rule::requiredIf( (isset($data['cargo']) && $data['cargo'] !== 'Estudante') || (isset($data['cargo']) && $data['cargo'] === 'Estudante' && isset($data['vinculo']) && $data['vinculo'] === 'Pós-doutorando')), - 'areaFormacao'=> ['required_with:titulacaoMaxima,anoTitulacao,bolsistaProdutividade,linkLattes'], - 'areaFormacao' => Rule::requiredIf( (isset($data['cargo']) && $data['cargo'] !== 'Estudante') || (isset($data['cargo']) && $data['cargo'] === 'Estudante' && isset($data['vinculo']) && $data['vinculo'] === 'Pós-doutorando')), - 'bolsistaProdutividade'=> ['required_with:titulacaoMaxima,anoTitulacao,areaFormacao,linkLattes'], - 'bolsistaProdutividade' => Rule::requiredIf( (isset($data['cargo']) && $data['cargo'] !== 'Estudante') || (isset($data['cargo']) && $data['cargo'] === 'Estudante' && isset($data['vinculo']) && $data['vinculo'] === 'Pós-doutorando')), + 'titulacaoMaxima' => ['required_with:anoTitulacao,areaFormacao,bolsistaProdutividade'], + 'titulacaoMaxima' => Rule::requiredIf((isset($data['cargo']) && $data['cargo'] !== 'Estudante') || (isset($data['cargo']) && $data['cargo'] === 'Estudante' && isset($data['vinculo']) && $data['vinculo'] === 'Pós-doutorando')), + 'anoTitulacao' => ['required_with:titulacaoMaxima,areaFormacao,bolsistaProdutividade,linkLattes'], + 'anoTitulacao' => Rule::requiredIf((isset($data['cargo']) && $data['cargo'] !== 'Estudante') || (isset($data['cargo']) && $data['cargo'] === 'Estudante' && isset($data['vinculo']) && $data['vinculo'] === 'Pós-doutorando')), + 'areaFormacao' => ['required_with:titulacaoMaxima,anoTitulacao,bolsistaProdutividade,linkLattes'], + 'areaFormacao' => Rule::requiredIf((isset($data['cargo']) && $data['cargo'] !== 'Estudante') || (isset($data['cargo']) && $data['cargo'] === 'Estudante' && isset($data['vinculo']) && $data['vinculo'] === 'Pós-doutorando')), + 'bolsistaProdutividade' => ['required_with:titulacaoMaxima,anoTitulacao,areaFormacao,linkLattes'], + 'bolsistaProdutividade' => Rule::requiredIf((isset($data['cargo']) && $data['cargo'] !== 'Estudante') || (isset($data['cargo']) && $data['cargo'] === 'Estudante' && isset($data['vinculo']) && $data['vinculo'] === 'Pós-doutorando')), 'nivel' => ['required_if:bolsistaProdutividade,sim'], - 'linkLattes'=> ['required_with:titulacaoMaxima,anoTitulacao,areaFormacao,bolsistaProdutividade'], - 'linkLattes' => Rule::requiredIf( (isset($data['cargo']) && $data['cargo'] !== 'Estudante') || (isset($data['cargo']) && $data['cargo'] === 'Estudante' && isset($data['vinculo']) && $data['vinculo'] === 'Pós-doutorando')), - + 'nivel' => [(isset($data['cargo']) && $data['cargo'] !== 'Estudante') || (isset($data['cargo']) && $data['cargo'] === 'Estudante' && isset($data['vinculo']) && $data['vinculo'] === 'Pós-doutorando') ? 'required':''], + 'linkLattes' => ['required_with:titulacaoMaxima,anoTitulacao,areaFormacao,bolsistaProdutividade'], + 'linkLattes' => [(isset($data['cargo']) && $data['cargo'] !== 'Estudante') || (isset($data['cargo']) && $data['cargo'] === 'Estudante' && isset($data['vinculo']) && $data['vinculo'] === 'Pós-doutorando') ? 'required':''], + 'linkLattes' => [(isset($data['cargo']) && $data['cargo'] !== 'Estudante') || (isset($data['cargo']) && $data['cargo'] === 'Estudante' && isset($data['vinculo']) && $data['vinculo'] === 'Pós-doutorando') ? 'link_lattes':''], + ]); } @@ -89,54 +91,59 @@ class RegisterController extends Controller */ protected function create(array $data) { - //dd($data); + //dd($data); $user = new User(); $user->name = $data['name']; $user->email = $data['email']; $user->password = bcrypt($data['password']); $user->cpf = $data['cpf']; $user->celular = $data['celular']; - $user->instituicao = $data['instituicao']; + if ($data['instituicao'] != null) { + $user->instituicao = $data['instituicao']; + } else if (isset($data['instituicaoSelect']) && $data['instituicaoSelect'] != "Outra") { + $user->instituicao = $data['instituicaoSelect']; + } - if($data['cargo'] === "Estudante" && $data['vinculo'] !== "Pós-doutorando"){ + if ($data['cargo'] === "Estudante" && $data['vinculo'] !== "Pós-doutorando") { $user->tipo = 'participante'; $user->save(); $participante = new Participante(); $user->participantes()->save($participante); - }else{ + } else { $user->tipo = 'proponente'; $user->save(); $proponente = new Proponente(); - if($data['SIAPE'] != null){ + if ($data['SIAPE'] != null) { $proponente->SIAPE = $data['SIAPE']; } $proponente->cargo = $data['cargo']; - if($data['vinculo'] != 'Outro'){ + if ($data['vinculo'] != 'Outro') { $proponente->vinculo = $data['vinculo']; - }else{ + } else { $proponente->vinculo = $data['outro']; } $proponente->titulacaoMaxima = $data['titulacaoMaxima']; $proponente->anoTitulacao = $data['anoTitulacao']; - $proponente->areaFormacao = $data['areaFormacao']; + $proponente->areaFormacao = $data['areaFormacao']; $proponente->bolsistaProdutividade = $data['bolsistaProdutividade']; - if($data['bolsistaProdutividade'] == 'sim'){ + if ($data['bolsistaProdutividade'] == 'sim') { $proponente->nivel = $data['nivel']; } - $proponente->linkLattes = $data['linkLattes']; - + $proponente->linkLattes = $data['linkLattes']; + $user->proponentes()->save($proponente); } - + return $user; } - public function showRegistrationForm(){ + public function showRegistrationForm() + { return view('auth.register'); } } diff --git a/app/Http/Controllers/ParticipanteController.php b/app/Http/Controllers/ParticipanteController.php index 82c993f7f56b3a4ed7c96a00c754747c71d4462f..aca64aa7d2398f62c05e7c3477be0928e2a52ddd 100644 --- a/app/Http/Controllers/ParticipanteController.php +++ b/app/Http/Controllers/ParticipanteController.php @@ -3,6 +3,9 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; +use App\Evento; +use App\Trabalho; +use App\Participante; class ParticipanteController extends Controller { @@ -10,4 +13,16 @@ class ParticipanteController extends Controller return view('participante.index'); } + + public function edital($id){ + $edital = Evento::find($id); + $trabalhosId = Trabalho::where('evento_id', '=', $id)->select('id')->get(); + $meusTrabalhosId = Participante::where('user_id', '=', Auth()->user()->id) + ->whereIn('trabalho_id', $trabalhosId)->select('trabalho_id')->get(); + $projetos = Trabalho::whereIn('id', $meusTrabalhosId)->get(); + + //dd($projetos); + + return view('participante.projetos')->with(['edital' => $edital, 'projetos' => $projetos]); + } } diff --git a/app/Http/Controllers/ProponenteController.php b/app/Http/Controllers/ProponenteController.php index df6bafaddd8f87491e938c8dba9a942c88b593c5..3043fce0d59067fdcb8351d0b46d107647ecb057 100644 --- a/app/Http/Controllers/ProponenteController.php +++ b/app/Http/Controllers/ProponenteController.php @@ -37,8 +37,10 @@ class ProponenteController extends Controller 'bolsistaProdutividade'=> ['required_with:titulacaoMaxima,anoTitulacao,areaFormacao,linkLattes'], 'bolsistaProdutividade' => Rule::requiredIf( (isset($request['cargo']) && $request['cargo'] !== 'Estudante') || (isset($request['cargo']) && $request['cargo'] === 'Estudante' && isset($request['vinculo']) && $request['vinculo'] === 'Pós-doutorando')), 'nivel' => ['required_if:bolsistaProdutividade,sim'], + 'nivel' => [(isset($request['cargo']) && $request['cargo'] !== 'Estudante') || (isset($request['cargo']) && $request['cargo'] === 'Estudante' && isset($request['vinculo']) && $request['vinculo'] === 'Pós-doutorando') ? 'required':''], 'linkLattes'=> ['required_with:titulacaoMaxima,anoTitulacao,areaFormacao,bolsistaProdutividade'], - 'linkLattes' => Rule::requiredIf( (isset($request['cargo']) && $request['cargo'] !== 'Estudante') || (isset($request['cargo']) && $request['cargo'] === 'Estudante' && isset($request['vinculo']) && $request['vinculo'] === 'Pós-doutorando')), + 'linkLattes' => [(isset($request['cargo']) && $request['cargo'] !== 'Estudante') || (isset($request['cargo']) && $request['cargo'] === 'Estudante' && isset($request['vinculo']) && $request['vinculo'] === 'Pós-doutorando') ? 'required':''], + 'linkLattes' => [(isset($request['cargo']) && $request['cargo'] !== 'Estudante') || (isset($request['cargo']) && $request['cargo'] === 'Estudante' && isset($request['vinculo']) && $request['vinculo'] === 'Pós-doutorando') ? 'link_lattes':''], ]); if($request['cargo'] === "Estudante" && $request['vinculo'] !== "Pós-doutorando"){ diff --git a/app/Http/Controllers/TrabalhoController.php b/app/Http/Controllers/TrabalhoController.php index 001d60657d0ba9ffe1e8f259a862557c90b047d2..452bfc881b74e3b8094feea72e56bfc5a973300a 100644 --- a/app/Http/Controllers/TrabalhoController.php +++ b/app/Http/Controllers/TrabalhoController.php @@ -101,7 +101,9 @@ class TrabalhoController extends Controller 'nomePlanoTrabalho.*' => ['required', 'string'], 'anexoProjeto' => ['required', 'file', 'mimes:pdf', 'max:2000000'], 'anexoCONSU' => ['required', 'file', 'mimes:pdf', 'max:2000000'], - 'anexoComiteEtica' => ['required', 'file', 'mimes:pdf', 'max:2000000'], + 'botao' => ['required'], + 'anexoComiteEtica' => ['required_without:justificativaAutorizacaoEtica', 'file', 'mimes:pdf', 'max:2000000'], + 'justificativaAutorizacaoEtica' => ['required_without:anexoComiteEtica', 'file', 'mimes:pdf', 'max:2000000'], 'anexoLatterCoordenador' => ['required', 'file', 'mimes:pdf', 'max:2000000'], 'anexoPlanilha' => ['required', 'file', 'mimes:pdf', 'max:2000000'], 'anexoPlanoTrabalho.*' => ['required', 'file', 'mimes:pdf', 'max:2000000'], @@ -224,6 +226,7 @@ class TrabalhoController extends Controller Storage::putFileAs($path, $file, $nome); $arquivo = new Arquivo(); + $arquivo->titulo = $request->nomePlanoTrabalho[$key]; $arquivo->nome = $path . $nome; $arquivo->trabalhoId = $trabalho->id; $arquivo->data = $mytime; @@ -268,21 +271,23 @@ class TrabalhoController extends Controller */ public function show($id) { + // $projeto = Trabalho::find($id); - $edital = Evento::find($projeto->evento_id); - $grandeAreas = GrandeArea::orderBy('nome')->get(); - $areas = Area::orderBy('nome')->get(); - $subareas = Subarea::orderBy('nome')->get(); + $edital = Evento::find($projeto->evento_id); + $grandeArea = GrandeArea::where('id', $projeto->grande_area_id)->select('nome')->first(); + $area = Area::where('id', $projeto->area_id)->select('nome')->first(); + $subarea = Subarea::where('id', $projeto->sub_area_id)->select('nome')->first(); + $proponente = Proponente::find($projeto->proponente_id); $funcaoParticipantes = FuncaoParticipantes::all(); $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(); - return view('projeto.visualizar')->with(['projeto' => $projeto, - 'grandeAreas' => $grandeAreas, - 'areas' => $areas, - 'subAreas' => $subareas, + 'grandeArea' => $grandeArea, + 'area' => $area, + 'subArea' => $subarea, + 'proponente' => $proponente, 'edital' => $edital, 'users' => $users, 'funcaoParticipantes' => $funcaoParticipantes, @@ -454,6 +459,7 @@ class TrabalhoController extends Controller Storage::putFileAs($path, $file, $nome); $arquivo = new Arquivo(); + $arquivo->titulo = $request->nomePlanoTrabalho[$key]; $arquivo->nome = $path . $nome; $arquivo->trabalhoId = $trabalho->id; $arquivo->data = $mytime; @@ -486,6 +492,7 @@ class TrabalhoController extends Controller Storage::putFileAs($path, $file, $nome); $arquivo = new Arquivo(); + $arquivo->titulo = $request->nomePlanoTrabalho[$key]; $arquivo->nome = $path . $nome; $arquivo->trabalhoId = $trabalho->id; $arquivo->data = $mytime; @@ -528,6 +535,16 @@ class TrabalhoController extends Controller return redirect()->back(); } + public function excluirParticipante($id){ + $participante = Participante::where('user_id', Auth()->user()->id) + ->where('trabalho_id', $id)->first(); + + $participante->trabalhos()->detach($id); + $participante->delete(); + + return redirect()->back(); + } + public function novaVersao(Request $request){ $mytime = Carbon::now('America/Recife'); $mytime = $mytime->toDateString(); @@ -710,4 +727,9 @@ class TrabalhoController extends Controller } return abort(404); } + + public function baixarAnexoJustificativa($id) { + $projeto = Trabalho::find($id); + return Storage::download($projeto->justificativaAutorizacaoEtica); + } } diff --git a/app/Participante.php b/app/Participante.php index 5f07bef5ead99e86312685995378b4e4d06ef9a2..6fd42fdadabc4b1672f9a021365cd53e26a13c67 100644 --- a/app/Participante.php +++ b/app/Participante.php @@ -3,9 +3,12 @@ namespace App; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\SoftDeletes; class Participante extends Model { + use SoftDeletes; + protected $fillable = ['name', 'user_id', 'trabalho_id', 'participante_id']; public function user(){ diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index d006879e2204a42cd288114974fa029c162b5fe6..a9f3552931f3003e096152f5889db1bcc814fda8 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -24,6 +24,7 @@ class AppServiceProvider extends ServiceProvider */ public function boot() { - Validator::extend('cpf', '\App\Utils\CpfValidation@validate'); + Validator::extend('cpf', '\App\Utils\CpfValidation@validate'); + Validator::extend('link_lattes', '\App\Utils\LattesValidation@validate', 'Link inválido'); } } diff --git a/app/Utils/LattesValidation.php b/app/Utils/LattesValidation.php new file mode 100644 index 0000000000000000000000000000000000000000..e97a7524241b17c158e95e85d970e358bf013789 --- /dev/null +++ b/app/Utils/LattesValidation.php @@ -0,0 +1,55 @@ +isValidUrl($value); + } + + 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(parse_url($url)['host'] != 'buscatextual.cnpq.br' && parse_url($url)['host'] != 'lattes.cnpq.br'){ + return false; + } + + if($this->getHttpResponseCode_using_getheaders($url) != 200){ + return false; + } + + return true; + } + + function getHttpResponseCode_using_getheaders($url, $followredirects = true) + { + if (!$url || !is_string($url)) { + return false; + } + $headers = @get_headers($url); + if ($headers && is_array($headers)) { + if ($followredirects) { + $headers = array_reverse($headers); + } + foreach ($headers as $hline) { + if (preg_match('/^HTTP\/\S+\s+([1-9][0-9][0-9])\s+.*/', $hline, $matches)) { + $code = $matches[1]; + return $code; + } + } + return false; + } + return false; + } +} \ No newline at end of file diff --git a/config/mail.php b/config/mail.php index d9c8712e46d6a5654aa412128780246e51ed2208..a31435925b75f8d97be10e59770702a7816cdfd1 100644 --- a/config/mail.php +++ b/config/mail.php @@ -57,7 +57,7 @@ return [ 'from' => [ 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), - 'name' => env('MAIL_FROM_NAME', 'Example'), + 'name' => env('MAIL_FROM_NAME', 'Submeta'), ], /* diff --git a/database/migrations/2020_02_05_123115_create_arquivos_table.php b/database/migrations/2020_02_05_123115_create_arquivos_table.php index 5d7119d472ac7acd49fec662a761717ef558324b..26e583ccb37356fd5e6d9af97fbbfc252f534680 100644 --- a/database/migrations/2020_02_05_123115_create_arquivos_table.php +++ b/database/migrations/2020_02_05_123115_create_arquivos_table.php @@ -17,6 +17,7 @@ class CreateArquivosTable extends Migration $table->bigIncrements('id'); $table->timestamps(); $table->string('nome'); + $table->string('titulo'); $table->integer('versao')->nullable(); $table->boolean('versaoFinal')->nullable(); $table->date('data')->nullable(); diff --git a/database/migrations/2020_05_21_020029_create_plano_trabalhos_table.php b/database/migrations/2020_05_21_020029_create_plano_trabalhos_table.php deleted file mode 100644 index 26e51d22894240fab1557fc426cd2b944bf12f50..0000000000000000000000000000000000000000 --- a/database/migrations/2020_05_21_020029_create_plano_trabalhos_table.php +++ /dev/null @@ -1,36 +0,0 @@ -bigIncrements('id'); - $table->string('titulo'); - $table->string('anexoPlanoTrabalho'); - $table->timestamps(); - - $table->unsignedBigInteger('trabalho_id'); - $table->foreign('trabalho_id')->references('id')->on('trabalhos'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('plano_trabalhos'); - } -} diff --git a/database/migrations/2020_05_23_054945_create_participantes_table.php b/database/migrations/2020_05_23_054945_create_participantes_table.php index 8b559d61dc6908c3ac8ec7d60a507967d98a0ee1..b944cc5724483c807065b3500707f6ee55633d37 100644 --- a/database/migrations/2020_05_23_054945_create_participantes_table.php +++ b/database/migrations/2020_05_23_054945_create_participantes_table.php @@ -25,6 +25,8 @@ class CreateParticipantesTable extends Migration $table->unsignedBigInteger('funcao_participante_id')->nullable(); $table->foreign('funcao_participante_id')->references('id')->on('funcao_participantes'); + + $table->softDeletes(); }); } diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index 50441fb0b66d1167c2a89b26b0eebf2a06a95256..093006b1da49859c04a869657789dfe1edf96a6e 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -61,7 +61,7 @@ return [ 'required_unless' => 'O :attribute é necessário a menos que :other esteja em :values.', 'required_with' => 'O campo é obrigatório.', 'required_with_all' => 'O campo :attribute é obrigatório quando :values estão presentes.', - 'required_without' => 'O campo :attribute é obrigatório quando :values não está presente.', + 'required_without' => 'O campo é obrigatório.', 'required_without_all' => 'O campo :attribute é obrigatório quando nenhum destes estão presentes: :values.', 'same' => ':Attribute e :other devem ser iguais.', 'size' => [ diff --git a/resources/views/administrador/editais.blade.php b/resources/views/administrador/editais.blade.php index 89788ff2611def70738589d1a515c75a81dc87ca..68b2f48510ea65248ec8866bc7a292a2b6dd4d2f 100644 --- a/resources/views/administrador/editais.blade.php +++ b/resources/views/administrador/editais.blade.php @@ -167,8 +167,8 @@