#!/usr/bin/perl -w # # scriptLattes V7 # # Copyright 2005-2010: Jesús P. Mena-Chalco e Roberto M. Cesar-Jr. # # # Este programa é um software livre; você pode redistribui-lo e/ou # modifica-lo dentro dos termos da Licença Pública Geral GNU como # publicada pela Fundação do Software Livre (FSF); na versão 2 da # Licença, ou (na sua opnião) qualquer versão. # # Este programa é distribuido na esperança que possa ser util, # mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO a qualquer # MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a # Licença Pública Geral GNU para maiores detalhes. # # Você deve ter recebido uma cópia da Licença Pública Geral GNU # junto com este programa, se não, escreva para a Fundação do Software # Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # use strict; require Encode; use scriptLattes; use Data::Dumper; use Date::Format; use Date::Language; use JSON; use Unicode::Normalize; my @pars= readParameters($ARGV[0]); # Lemos os parâmetros indicados no arquivo de configuração dado como entrada na execução do scriptLattes my $groupName = $pars[0]; # Nome do grupo de pesquisa / titulo global para todas as paginas my $authorListFileName = $pars[1]; # Nome do arquivo que contem a lista de autores my $outputDir = $pars[2]; # Nome do diretorio onde serão armazenados os resultados my $adminEmail = $pars[3]; # Email de contacto do administrador my $itemsFromYear = $pars[4]; # Itens desde o ano... my $itemsToYear = $pars[5]; # Itens até o ano... my $MAXproducoesByPage = $pars[6]; # Número máximo de publicações por página my $flagJSP = $pars[7]; # flag para a criaçao de páginas JSP no lugar de HTML my $lang = $pars[8]; # idioma para a criaçao dos relatórios my $flagIDSLattes = $pars[9]; # flag para mostrar os IDs Lattes nas páginas web my $flagOrientacoes = $pars[10]; # flag para mostrar my $flagProjetos = $pars[11]; # flag para mostrar my $flagBancas = $pars[12]; # flag para mostrar my $flagComissoes = $pars[13]; # flag para mostrar my $flagEventos = $pars[14]; # flag para mostrar my $flagPremios = $pars[15]; # flag para mostrar my $flagGrafo = $pars[16]; # flag para mostrar my $flagTodosOsNos = $pars[17]; # flag para mostrar todos os nós no grafo de colaborações (i.e. inclusive os membros que nao colaboram) my $flagIndicadores = $pars[18]; # flag para mostrar os indicadores my $flagGoogleMap = $pars[19]; # flag para a criação do mapa de pesquisa my $googleMapKey = $pars[20]; # key do maps.google.com para acessar as páginas my $googleAnalyticsKey = $pars[21]; # flag para mostrar os indicadores my @cepList; my @transList; my @authorIndicator; readCEPsList(); loadTranslator(); my $urlLattes = 'http://lattes.cnpq.br/'; my $urlPhotoRetrieve = 'http://buscatextual.cnpq.br/buscatextual/servletrecuperafoto?id='; my $urlscriptLattes = 'http://scriptlattes.sourceforge.net/'; my $version = 'V7.05'; my $fromYear = $itemsFromYear; $fromYear=~s/HOJE/2099/gi; $fromYear=scalar($fromYear); my $toYear = $itemsToYear; $toYear=~s/HOJE/2099/gi; $toYear =scalar($toYear); my $extension; my $beginHTML; my $endHTML; if ($flagJSP=~"n") { $extension = "html"; $beginHTML = ""; $endHTML = ""; } else { $extension = "jsp"; $beginHTML = "<%@ page language=\"java\" contentType=\"text/html; charset=ISO8859-1\" pageEncoding=\"ISO8859-1\"%> <%@ taglib prefix=\"f\" uri=\"http://java.sun.com/jsf/core\"%> "; $endHTML = ""; } # ---------------------------------------------------------------------------- # # Passo 1: Leitura da lista de autores, e processamento dos CVs baixados # ---------------------------------------------------------------------------- # my @authorList = readAuthorList($authorListFileName); getLattesFiles(\@authorList, $outputDir); open(LOG, ">$outputDir/log.txt"); # ---------------------------------------------------------------------------- # # Passo 2: Leitura das produçoes de todos os autores # ---------------------------------------------------------------------------- # print "\n\nExtraindo as publicações dos arquivos baixados:"; my $numberOfAuthors = @authorList; my @totalPublications; my $numberOfPublicationsTypes; my @nameOfPublicationsTypes; my @totalOrientacoesEmAndamento; my @totalOrientacoesConcluidas; my $numberOfOrientacoesTypes; my @nameOfOrientacoesTypes; my @nameOfOrientacoesStatus; my $numberOfProducoesTecnicasTypes; my @nameOfProducoesTecnicasTypes; my $numberOfProducoesArtisticasTypes; my @nameOfProducoesArtisticasTypes; my @totalProducoesTecnicas; my @totalProducoesArtisticas; my $numberOfBancasExaminadorasTypes; my @nameOfBancasExaminadorasTypes; my @totalBancasExaminadoras; my $numberOfComissoesJulgadorasTypes; my @nameOfComissoesJulgadorasTypes; my @totalComissoesJulgadoras; my $numberOfEventosTypes; my @nameOfEventosTypes; my @totalEventos; my $numberOfProjetosTypes; my @nameOfProjetosTypes; my @totalProjetos; my $numberOfPremiosTypes; my @nameOfPremiosTypes; my @totalPremios; my @curriculumHTML; my $numberOfItem; foreach (my $aut=0; $aut<$numberOfAuthors; $aut++) { my $authorCode = ${$authorList[$aut]}[0]; my $authorName = ${$authorList[$aut]}[1]; my $authorPeriods = ${$authorList[$aut]}[2]; $authorPeriods =~ s/\s*//g; my $cvFile = $outputDir."/".$authorCode.".download"; my $authorPublications = new scriptLattes; $authorPublications->parse_file($cvFile); $authorName = trimBlanks($authorPublications->{Name}); # nome do CV Lattes print "\n- [".($aut+1)."/$numberOfAuthors] $cvFile ($authorName) ($authorPeriods)"; ${$authorList[$aut]}[1] = $authorName; ${$authorList[$aut]}[3] = trimBlanks($authorPublications->{Address}); # endereço do CV Lattes (${$authorList[$aut]}[4],${$authorList[$aut]}[5],${$authorList[$aut]}[6]) = getLatitudeAndLongitude(${$authorList[$aut]}[3]); ${$authorList[$aut]}[7] = $authorPublications->{Orientandos}; ${$authorList[$aut]}[8] = getURLPhoto($authorPublications->{PhotoID}); ####################################### ${$authorList[$aut]}[9] = $authorPublications->{FormacaoAcademica}; ${$authorList[$aut]}[10] = $authorPublications->{AreasAtuacao}; # ${$authorList[$aut]}[11] = $authorPublications->{Projetos}; # ${$authorList[$aut]}[12] = $authorPublications->{Premios}; ####################################### print "\n Publicaçoes"; @nameOfPublicationsTypes = @{$authorPublications->{Publication_type}}; $numberOfPublicationsTypes = @{$authorPublications->{Publication_type}}; $authorIndicator[$aut] = setProducoes ($aut, \@{$authorPublications->{Publication}}, \@totalPublications, \@nameOfPublicationsTypes, $numberOfPublicationsTypes, 0, "", "", $authorPeriods); print "\n Produção técnica"; $numberOfProducoesTecnicasTypes = @{$authorPublications->{ProducaoTecnica_type}}; @nameOfProducoesTecnicasTypes = @{$authorPublications->{ProducaoTecnica_type}}; setProducoes ($aut, \@{$authorPublications->{ProducaoTecnica}}, \@totalProducoesTecnicas, \@nameOfProducoesTecnicasTypes, $numberOfProducoesTecnicasTypes, 0, "", "", $authorPeriods); print "\n Produção artística"; $numberOfProducoesArtisticasTypes = @{$authorPublications->{ProducaoArtistica_type}}; @nameOfProducoesArtisticasTypes = @{$authorPublications->{ProducaoArtistica_type}}; setProducoes ($aut, \@{$authorPublications->{ProducaoArtistica}}, \@totalProducoesArtisticas, \@nameOfProducoesArtisticasTypes, $numberOfProducoesArtisticasTypes, 0, "", "", $authorPeriods); print "\n Orientações em andamento"; @nameOfOrientacoesTypes = @{$authorPublications->{Orientacoes_type}}; $numberOfOrientacoesTypes = @{$authorPublications->{Orientacoes_type}}; @nameOfOrientacoesStatus = @{$authorPublications->{Orientacoes_status}}; setProducoes ($aut, \@{$authorPublications->{OrientacoesAndamento}}, \@totalOrientacoesEmAndamento, \@nameOfOrientacoesTypes, $numberOfOrientacoesTypes, 1, $authorCode, $authorName, $authorPeriods); print "\n Orientações concluídas"; setProducoes ($aut, \@{$authorPublications->{OrientacoesConcluidas}}, \@totalOrientacoesConcluidas, \@nameOfOrientacoesTypes, $numberOfOrientacoesTypes, 1, $authorCode, $authorName, $authorPeriods); print "\n Projetos"; $numberOfProjetosTypes = @{$authorPublications->{Projetos_type}}; @nameOfProjetosTypes = @{$authorPublications->{Projetos_type}}; setProducoes ($aut, \@{$authorPublications->{Projetos}}, \@totalProjetos, \@nameOfProjetosTypes, $numberOfProjetosTypes, 2, $authorCode, $authorName, $authorPeriods); print "\n Bancas examinadoras"; $numberOfBancasExaminadorasTypes = @{$authorPublications->{BancasExaminadoras_type}}; @nameOfBancasExaminadorasTypes = @{$authorPublications->{BancasExaminadoras_type}}; setProducoes ($aut, \@{$authorPublications->{BancasExaminadoras}}, \@totalBancasExaminadoras, \@nameOfBancasExaminadorasTypes, $numberOfBancasExaminadorasTypes, 2, $authorCode, $authorName, $authorPeriods); print "\n Comissoes julgadoras"; $numberOfComissoesJulgadorasTypes = @{$authorPublications->{ComissoesJulgadoras_type}}; @nameOfComissoesJulgadorasTypes = @{$authorPublications->{ComissoesJulgadoras_type}}; setProducoes ($aut, \@{$authorPublications->{ComissoesJulgadoras}}, \@totalComissoesJulgadoras, \@nameOfComissoesJulgadorasTypes, $numberOfComissoesJulgadorasTypes, 2, $authorCode, $authorName, $authorPeriods); print "\n Eventos"; $numberOfEventosTypes = @{$authorPublications->{Eventos_type}}; @nameOfEventosTypes = @{$authorPublications->{Eventos_type}}; setProducoes ($aut, \@{$authorPublications->{Eventos}}, \@totalEventos, \@nameOfEventosTypes, $numberOfEventosTypes, 2, $authorCode, $authorName, $authorPeriods); print "\n Premios"; $numberOfPremiosTypes = @{$authorPublications->{Premios_type}}; @nameOfPremiosTypes = @{$authorPublications->{Premios_type}}; setProducoes ($aut, \@{$authorPublications->{Premios}}, \@totalPremios, \@nameOfPremiosTypes, $numberOfPremiosTypes, 2, $authorCode, $authorName, $authorPeriods); print "\n"; } # ---------------------------------------------------------------------------- # # Passo 3: Filtramos redundancias e criamos a matriz de colaboraçoes # ---------------------------------------------------------------------------- # my @netCollaborations; my @netCollaborationsDetail; foreach (my $i=0; $i<$numberOfAuthors; $i++) { foreach (my $j=0; $j<$numberOfAuthors; $j++) { $netCollaborations[$i][$j] = 0; $netCollaborationsDetail[$i][$j] = ""; } } print "\nLog do processamento em: $outputDir/log.txt\n"; print "\n\nFiltrando publicações redudantes na compilacao total: (T=total, DF=depois da filtragem, F=filtradas)"; print LOG "\n================================================================================"; print LOG "\n\nFiltrando publicações redudantes na compilacao total (lista de redundantes)"; my @totalFilteredPublications; getFilteredList( \@totalPublications, \@totalFilteredPublications, \@nameOfPublicationsTypes, $numberOfPublicationsTypes); print "\n\nFiltrando produções técnicas redudantes na compilacao total: (T=total, DF=depois da filtragem, F=filtradas)"; print LOG "\n================================================================================"; print LOG "\n\nFiltrando produções técnicas redudantes na compilacao total (lista de redundantes)"; my @totalFilteredProducoesTecnicas; getFilteredList( \@totalProducoesTecnicas, \@totalFilteredProducoesTecnicas, \@nameOfProducoesTecnicasTypes, $numberOfProducoesTecnicasTypes); print "\n\nFiltrando produções artísticas redudantes na compilacao total: (T=total, DF=depois da filtragem, F=filtradas)"; print LOG "\n================================================================================"; print LOG "\n\nFiltrando produções artísticas redudantes na compilacao total (lista de redundantes)"; my @totalFilteredProducoesArtisticas; getFilteredList( \@totalProducoesArtisticas, \@totalFilteredProducoesArtisticas, \@nameOfProducoesArtisticasTypes, $numberOfProducoesArtisticasTypes); # ---------------------------------------------------------------------------- # # Passo 4: Ordenamos as diferentes produçoes por ano # ---------------------------------------------------------------------------- # print "\n\nOrdenando as producoes por ano:"; my @publicationsByYear; my %allPublicationsByYear; my $numberOfAllPublications = sortProducoesByYear(\@totalFilteredPublications, \@publicationsByYear, \%allPublicationsByYear, $numberOfPublicationsTypes, 0); print "\n- $numberOfAllPublications \t: Publicações"; my @producoesTecnicasByYear; my %allProducoesTecnicasByYear; my $numberOfAllProducoesTecnicas = sortProducoesByYear(\@totalFilteredProducoesTecnicas, \@producoesTecnicasByYear, \%allProducoesTecnicasByYear, $numberOfProducoesTecnicasTypes, 0); print "\n- $numberOfAllProducoesTecnicas \t: Produções técnicas"; my @producoesArtisticasByYear; my %allProducoesArtisticasByYear; my $numberOfAllProducoesArtisticas = sortProducoesByYear(\@totalFilteredProducoesArtisticas, \@producoesArtisticasByYear, \%allProducoesArtisticasByYear, $numberOfProducoesArtisticasTypes, 0); print "\n- $numberOfAllProducoesArtisticas \t: Produções artísticas"; my @orientacoesEmAndamentoByYear; my %allOrientacoesEmAndamentoByYear; my $numberOfAllOrientacoesEmAndamento = sortProducoesByYear(\@totalOrientacoesEmAndamento, \@orientacoesEmAndamentoByYear, \%allOrientacoesEmAndamentoByYear, $numberOfOrientacoesTypes, 1); print "\n- $numberOfAllOrientacoesEmAndamento \t: Orientações em andamento"; my @orientacoesConcluidasByYear; my %allOrientacoesConcluidasByYear; my $numberOfAllOrientacoesConcluidas = sortProducoesByYear(\@totalOrientacoesConcluidas, \@orientacoesConcluidasByYear, \%allOrientacoesConcluidasByYear, $numberOfOrientacoesTypes, 1); print "\n- $numberOfAllOrientacoesConcluidas \t: Orientações concluídas"; my @projetosByYear; my %allProjetosByYear; my $numberOfAllProjetos = sortProducoesByYear(\@totalProjetos, \@projetosByYear, \%allProjetosByYear, $numberOfProjetosTypes, 0); print "\n- $numberOfAllProjetos \t: Projetos"; my @bancasExaminadorasByYear; my %allBancasExaminadorasByYear; my $numberOfAllBancasExaminadoras = sortProducoesByYear(\@totalBancasExaminadoras, \@bancasExaminadorasByYear, \%allBancasExaminadorasByYear, $numberOfBancasExaminadorasTypes, 0); print "\n- $numberOfAllBancasExaminadoras \t: Bancas examinadoras"; my @comissoesJulgadorasByYear; my %allComissoesJulgadorasByYear; my $numberOfAllComissoesJulgadoras = sortProducoesByYear(\@totalComissoesJulgadoras, \@comissoesJulgadorasByYear, \%allComissoesJulgadorasByYear, $numberOfComissoesJulgadorasTypes, 0); print "\n- $numberOfAllComissoesJulgadoras \t: Comissões julgadoras"; my @eventosByYear; my %allEventosByYear; my $numberOfAllEventos = sortProducoesByYear(\@totalEventos, \@eventosByYear, \%allEventosByYear, $numberOfEventosTypes, 0); print "\n- $numberOfAllEventos \t: Eventos"; my @premiosByYear; my %allPremiosByYear; my $numberOfAllPremios = sortProducoesByYear(\@totalPremios, \@premiosByYear, \%allPremiosByYear, $numberOfPremiosTypes, 0); print "\n- $numberOfAllPremios \t: Prêmios"; # ---------------------------------------------------------------------------- # # Passo 5: Criacao de graficos estatísticos e grafo de colaboraçoes # ---------------------------------------------------------------------------- # print "\n\nCriando os graficos estatísticos e grafo de colaborações."; my $graphMap; makeCollaborationsGraph(\@netCollaborations, \@authorList); makeStatisticsBarsByType(\@publicationsByYear, $numberOfPublicationsTypes, "P", translate("Número de publicações")); makeStatisticsBars(\%allPublicationsByYear, "$outputDir/P.png", translate("Total de publicações")); if ($numberOfAllProducoesTecnicas>0) { makeStatisticsBarsByType(\@producoesTecnicasByYear, $numberOfProducoesTecnicasTypes, "PT", translate("Número de produções técnicas")); makeStatisticsBars(\%allProducoesTecnicasByYear, "$outputDir/PT.png", translate("Total de produções técnicas")); } if ($numberOfAllProducoesArtisticas>0) { makeStatisticsBarsByType(\@producoesArtisticasByYear, $numberOfProducoesArtisticasTypes, "PA", translate("Número de produções artísticas")); ## makeStatisticsBars(\%allProducoesArtisticasByYear, "$outputDir/PA.png", translate("Total de produções artísticas")); } if ($numberOfAllOrientacoesEmAndamento>0) { makeStatisticsBarsByType(\@orientacoesEmAndamentoByYear, $numberOfOrientacoesTypes, "OA", translate("Número de orientações em andamento")); makeStatisticsBars(\%allOrientacoesEmAndamentoByYear, "$outputDir/OA.png", translate("Total de orientações em andamento")); } if ($numberOfAllOrientacoesConcluidas>0) { makeStatisticsBarsByType(\@orientacoesConcluidasByYear, $numberOfOrientacoesTypes, "OC", translate("Número de orientações concluídas")); makeStatisticsBars(\%allOrientacoesConcluidasByYear, "$outputDir/OC.png", translate("Total de orientações concluídas")); } if ($numberOfAllProjetos>0) { makeStatisticsBarsByType(\@projetosByYear, $numberOfProjetosTypes, "Pj", translate("Número de projetos")); ## makeStatisticsBars(\%allEventosByYear, "$outputDir/Pj.png", translate("Total de projetos")); } if ($numberOfAllBancasExaminadoras>0) { makeStatisticsBarsByType(\@bancasExaminadorasByYear, $numberOfBancasExaminadorasTypes, "BE", translate("Número de bancas examinadoras")); makeStatisticsBars(\%allBancasExaminadorasByYear, "$outputDir/BE.png", translate("Total de bancas examinadoras")); } if ($numberOfAllComissoesJulgadoras>0) { makeStatisticsBarsByType(\@comissoesJulgadorasByYear, $numberOfComissoesJulgadorasTypes, "CJ", translate("Número de comissões julgadoras")); makeStatisticsBars(\%allComissoesJulgadorasByYear, "$outputDir/CJ.png", translate("Total de comissões julgadoras")); } if ($numberOfAllEventos>0) { makeStatisticsBarsByType(\@eventosByYear, $numberOfEventosTypes, "Ev", translate("Número de eventos")); makeStatisticsBars(\%allEventosByYear, "$outputDir/Ev.png", translate("Total de eventos")); } if ($numberOfAllPremios>0) { makeStatisticsBarsByType(\@premiosByYear, $numberOfPremiosTypes, "Pm", translate("Número de prêmios")); ## makeStatisticsBars(\%allPremiosByYear, "$outputDir/Pm.png", translate("Total de premios")); } # ---------------------------------------------------------------------------- # # Passo 6: Criação das páginas web # Toda enumeração começa em 0 (zero) # ---------------------------------------------------------------------------- # print "\n\nCriando páginas web das produções."; my $dateLang; my $timestamp; my $meta = "$groupName "; my $scriptLattes_message = ""; my $graph_message; my $map_message; my $noItems; my $button = ""; if ($lang eq "EN") { $dateLang = Date::Language->new('English'); $timestamp = $dateLang->time2str("%A, %m/%d/%Y %X\n", time); $noItems = "
  • No item was found on Lattes curricula
  • "; if ($fromYear ne "" && $toYear ne "") { $scriptLattes_message .= "(*) Report created with productions since $itemsFromYear to ".translate($itemsToYear); } $scriptLattes_message .= "

    Processing date: ".$timestamp."

    This file was automatically generated by scriptLattes $version (developed at CCSL-IME/USP by Jesús P. Mena-Chalco and Roberto M. Cesar-Jr). The results can have failures beacuse the automatic processing of Lattes curricula. The errors are normaly associated to incorrect curriculum filling. If you find any bug, please contact us: $adminEmail
    "; $graph_message = "$numberOfAuthors Lattes curricula were considered. It generated the following Colaborations Graph based on publications, technical production and artistic/cultural productions. Click on name inside the vertex to visualize the Lattes Curriculum. "; $map_message = "
    Label: Member (supervisor)   Student with concluded Ph.D. and ID Lattes registered on supervisor curriculum
    "; } else { if ( $lang eq "SP") { $dateLang = Date::Language->new(); $timestamp = $dateLang->time2str("%d/%m/%Y %X\n", time); $noItems = "
  • Ningun item fue encontrado en los curriculos Lattes
  • "; if ($fromYear ne "" && $toYear ne "") { $scriptLattes_message .= "(*) Reporte creado con producciones desde $itemsFromYear hasta ".translate($itemsToYear); } $scriptLattes_message .= "
    Fecha de procesamiento: ".$timestamp."
    Este archivo fue generado automaticamente por scriptLattes $version (desarrollado en el CCSL-IME/USP por Jesús P. Mena-Chalco y Roberto M. Cesar-Jr). Los resultados están sujetos a fallas debido a inconsistencias en los datos de los currículos Lattes. En caso de errores, por favor, contacte al responsable por esta página: $adminEmail
    "; $graph_message = "$numberOfAuthors curriculos Lattes fueron considerados, generando el siguiente Grafo de Colaboraciones encontradas con base en las publicaciones, producciones técnicas y producciones artísticas. Haga click en el nombre dentro del vertice para visualizar el respectivo currículo Lattes. Haga click en la arista para visualizar las producciones realizadas en colaboración. "; if ($flagTodosOsNos!~"s") { $graph_message .= "Solamente los miembros con co-autoria en el grupo analizado aparecen en el grafo."; } $graph_message .= ""; $map_message = "
    Leyenda: Miembro (supervisor)   Alumno con doctorado concluido e ID Lattes registrado en el currículo del supervisor
    "; } else # default: PT { $dateLang = Date::Language->new('Brazilian'); $timestamp = $dateLang->time2str("%A, %d/%m/%Y %X\n", time); $noItems = "
  • Nenhum item achado nos currículos Lattes
  • "; if ($fromYear ne "" && $toYear ne "") { $scriptLattes_message .= "(*) Relatório criado com produções desde $itemsFromYear até $itemsToYear"; } $scriptLattes_message .= "
    Data de processamento: ".$timestamp."
    Este arquivo foi gerado automaticamente por scriptLattes $version (desenvolvido no CCSL-IME/USP por Jesús P. Mena-Chalco e Roberto M. Cesar-Jr). Os resultados estão sujeitos a falhas devido a inconsistências no preenchimento dos currículos Lattes. Caso note alguma falha, por favor, contacte o responsável por esta página: $adminEmail
    "; $graph_message = "$numberOfAuthors currículos Lattes foram considerados, gerando o seguinte grafo de colaborações encontradas com base nas publicações, produções técnicas e produções artísticas. Clique no nome dentro do vértice para visualizar o currículo Lattes. Clique na aresta para visualizar as produções realizadas em colaboração. "; if ($flagTodosOsNos!~"s") { $graph_message .= "Apenas os membros com co-autoria no grupo analisado aparecem no grafo."; } $graph_message .= ""; $map_message = "
    Legenda: Membro (orientador)   Aluno com doutorado concluído e ID Lattes cadastrado no currículo do orientador
    "; } } if ($googleAnalyticsKey ne "") { $scriptLattes_message .= " "; } my $head_message = "$beginHTML $meta
    $button

    $groupName

    "; my $ending_message = "$scriptLattes_message $endHTML"; open(INDEXHTML, ">$outputDir/index.$extension"); print INDEXHTML "$beginHTML $meta"; my $allInfoByType; if ($flagGoogleMap=~"s") { print INDEXHTML getMapOfResearch(); } print INDEXHTML "

    $groupName

    [ ".translate('Membros')." | ".translate('Publicações')." | ".translate('Produções técnicas')." | ".translate('Produções artísticas').""; if ($flagOrientacoes=~"s") { print INDEXHTML " | ".translate('Orientações').""; } if ($flagProjetos=~"s") { print INDEXHTML " | ".translate('Projetos').""; } if ($flagBancas=~"s" or $flagComissoes=~"s") { print INDEXHTML " | ".translate('Bancas').""; } if ($flagEventos=~"s") { print INDEXHTML " | ".translate('Eventos').""; } if ($flagPremios=~"s") { print INDEXHTML " | ".translate('Prêmios').""; } if ($flagGrafo=~"s") { print INDEXHTML " | ".translate('Grafo de colaborações').""; } if ($flagGoogleMap=~"s") { print INDEXHTML " | ".translate('Mapa de pesquisa').""; } print INDEXHTML " ]
    "; # ---------------------------------------------------------------------------- # # (a) Lista de autores open(AUTHORSLIST,">$outputDir/list.$extension"); print AUTHORSLIST "$head_message

    ".translate('Lista de membros')."

    "; foreach (my $aut=0; $aut<$numberOfAuthors; $aut++) { my $authorCode = ${$authorList[$aut]}[0]; my $authorName = ${$authorList[$aut]}[1]; my $authorPeriods = ${$authorList[$aut]}[2]; my $authorAddress = ${$authorList[$aut]}[3]; my $authorLat = ${$authorList[$aut]}[4]; my $authorLng = ${$authorList[$aut]}[5]; my $authorCep = ${$authorList[$aut]}[6]; my $authorPhoto = ${$authorList[$aut]}[8]; ############################################ my $authorFormacao= ${$authorList[$aut]}[9]; my $authorAreas = ${$authorList[$aut]}[10]; ############################################ print AUTHORSLIST ""; open(AUTHOR,">$outputDir/CV$aut.$extension"); print AUTHOR "$beginHTML $meta"; if ($flagGoogleMap=~"s") { print AUTHOR getGoogleMap($authorName, $authorLat, $authorLng, $authorCep); } print AUTHOR " $button

    ".translate("Membro").": $authorName

    "; print AUTHOR "
    ".($aut+1).". $authorName
      "; if ($flagIDSLattes=~"s") { print AUTHOR "
    • ".translate("Currículo Lattes").""; } if ($authorPeriods ne "") { print AUTHOR "
    • ".translate("Período")."(s): $authorPeriods "; } ################################## print AUTHOR "
    • ".translate("Formação acadêmica/Titulação").":"; $allInfoByType->{"FormacaoAcademica"}{$authorName} = (); foreach my $curso (@{$authorFormacao}) { print AUTHOR "
      $curso"; push(@{$allInfoByType->{"FormacaoAcademica"}{$authorName}}, $curso); } print AUTHOR "
    • ".translate("Áreas de atuação").":"; $allInfoByType->{"AreasAtuacao"}{$authorName} = (); foreach my $area (@{$authorAreas}) { print AUTHOR "
      $area"; push(@{$allInfoByType->{"AreasAtuacao"}{$authorName}}, $area); } ################################## print AUTHOR "
    • ".translate("Endereço profissional").":
      ".convertAddressToHTML($authorAddress)."
      "; if ( $flagGoogleMap=~"s" ) { print AUTHOR "
      "; } print AUTHOR "
    "; if ($authorPeriods ne "") { print AUTHOR translate("Legenda").":
    ".translate("Produção não considerada na compilação dado o(s) período(s)")."
    "; } if ($curriculumHTML[$aut]) { print AUTHOR $curriculumHTML[$aut]; } else { print AUTHOR "
    ".translate("Não foram identificadas produções acadêmicas")."
    " } print AUTHOR "$scriptLattes_message $endHTML"; close(AUTHOR); } print AUTHORSLIST "$ending_message"; close(AUTHORSLIST); # ---------------------------------------------------------------------------- # # Prefixos dos arquivos gerados: # - P : Publicacoes # - PT: Producoes tecnicas # - PA: Producoes artisticas # - OA: Orientacoes em andamento # - OC: Orientacoes concluidas # - Pj: Projetos # - BE: Bancas examinadoras # - CJ: Comissoes julgadoras # - Ev: Eventos # - Pm: Premios # ---------------------------------------------------------------------------- # # ---------------------------------------------------------------------------- # # (b) Publicações open(SERIES,">$outputDir/series.dat"); print INDEXHTML "

    ".translate("Publicações")."

    "; # ---------------------------------------------------------------------------- # # (c) Produções técnicas print INDEXHTML "

    ".translate("Produções técnicas")."

    "; # ---------------------------------------------------------------------------- # # (d) Produções artísticas print INDEXHTML "

    ".translate("Produções artísticas")."

    "; # ---------------------------------------------------------------------------- # # (e) Orientações if ($flagOrientacoes=~"s") { print INDEXHTML "

    ".translate("Orientações")."