* * @author Eduardo Bonfandini [eduardo@solis.coop.br] * * @version $Id$ * * \b Maintainers: \n * Eduardo Bonfandini [eduardo@solis.coop.br] * Jamiel Spezia [jamiel@solis.coop.br] * * @since * Class created on 06/01/2011 * **/ $MIOLO = MIOLO::getInstance(); $messagesG = array(); //caso a baslog não exista, cria para evitar problemas no syncdb if ( !bCatalogo::verificarExistenciaDaTabela('public', 'baslog') ) { bBaseDeDados::consultar("CREATE TABLE baslog (username varchar(20), datetime timestamptz, ipaddress inet);"); $messagesG[][] = "Criando tabela baslog"; } //remove usuário do miolo duplicasos, normalmente é um sql rápido no gnuteca if ( bCatalogo::verificarExistenciaDaTabela('public', 'miolo_user') ) { $result = bBaseDeDados::consultar( "DELETE FROM miolo_user WHERE ctid NOT IN (SELECT max(ctid) FROM miolo_user GROUP BY login);", "admin"); } //Renomear a tabela basDomain para basDomain $result = bCatalogo::renomearTabelaSeExistir('gtcdomain','basdomain'); if ( bCatalogo::verificarExistenciaDaTabela('public', 'basperson') ) { //verifica se tem emails duplicados $emailsDuplicados = bBaseDeDados::consultar("SELECT email,count(*) FROM ONLY basperson WHERE email IS NOT null GROUP BY email HAVING COUNT(*) > 1;"); $quantidade = count($emailsDuplicados); //Executar de update para null de e-mails duplicados. if ( $quantidade > 0 ) { $result = bBaseDeDados::consultar( "UPDATE ONLY basperson SET email = null WHERE ctid NOT IN (SELECT max(ctid) FROM ONLY basperson GROUP BY email);"); } } if ( bCatalogo::verificarExistenciaDaTabela('public', 'basdocument') && !bCatalogo::verificarExistenciaDaTabela('public', 'basdocumenttype')) { //lista chaves estrangeiras da basdocument $references = bCatalogo::obterChavesEstrangeiras('public','basdocument'); //Por padrão define que a chave estrangeira para a tabela basdocumenttype não existe $documentTypeReference = false; if ( is_array($references)) { //verifica cada uma das chaves estrangeiras da basdocument foreach ( $references as $reference ) { //Se basdocument tiver referencia para basdocumenttype if ( strtolower($reference->tableRef) == 'basdocumenttype' ) { $documentTypeReference = true; } } } // se basdocument não tiver referencia da basdocumenttype if ( !$documentTypeReference ) { $messagesG[][] = "Organizando tipos de documento"; //cria basDocumentType temporária depois o vpp via incluir o resto dos campos bBaseDeDados::consultar("CREATE TABLE basdocumenttype ( documenttypeid integer, \"name\" text NOT NULL, mask text, persontype character(1) NOT NULL );"); //remove contraint para tudo funcionar direito $basDocumentCheck = bCatalogo::obterChecagens('public', 'basdocument','basdocument_documenttypeid'); //Se tiver checagem do tipo de documento na basdocument if ( $basDocumentCheck[0]->name ) { //Remove checagem pois a partir de agora a será uma relação com a basdocumenttype bBaseDeDados::consultar( "ALTER TABLE basdocument DROP constraint basdocument_documenttypeid;"); } //realiza update que troca o basdocument.documenttypeid que esta com o valor basdomain.'Document_type'.key para basdomain.'Document_type'.sequence evitando problema de integridade bBaseDeDados::consultar("UPDATE basdocument SET documenttypeid = (SELECT sequence FROM basdomain WHERE domainid = 'DOCUMENT_TYPE' and key = documenttypeid);"); //insere os documentos necessários bBaseDeDados::consultar("INSERT INTO basdocumenttype (documenttypeid,name,persontype) SELECT sequence,label,'P' FROM basdomain WHERE domainid = 'DOCUMENT_TYPE' AND sequence NOT IN ( SELECT documenttypeid FROM basdocumenttype );"); //remove registros sobresalentes bBaseDeDados::consultar("DELETE FROM basdomain WHERE domainid = 'DOCUMENT_TYPE'"); } } if ( bCatalogo::verificarExistenciaDaTabela('public', 'basphone') ) { $colunasBasPhone = bCatalogo::obterColunasDaTabela('public','basPhone'); //cria código do telefone de forma serial para que o postgres atribua um id para todos os registros if ( !$colunasBasPhone['phoneid'] ) { $messagesG[][] = "Criando coluna fone id na tabela public.basPhone."; bBaseDeDados::consultar("ALTER TABLE basphone ADD column phoneid SERIAL NOT NULL;"); } } //Caso a preferencia de change_write_person nao esteja no padrao que permite dar permissao por aba. bBaseDeDados::consultar("UPDATE basconfig SET value = 'tabMain=t tabAccess=t tabPhoto=t tabPhone=t tabDocument=t tabBond=t tabPenalty=t', description = 'Permite alterações no formulário de pessoas. Estas permissões são dada por abas, sendo estas respectivamente: Gerais=tabMain Acesso a biblioteca=tabAccess Foto=tabPhoto Telefones=tabPhone Documentos=tabDocument Vínculo=tabBond Penalidade=tabPenalty Deve ser atribuido o valor t para a aba que poderá ser editada e f para a aba que não poderá ser editada.' WHERE parameter = 'CHANGE_WRITE_PERSON' AND trim(value) NOT ILIKE '%=%';"); $langs = bCatalogo::listarLinguagens(); //adiciona suporta a linguagem caso não exista if ( !in_array('plpgsql', $langs)) { bBaseDeDados::executar("CREATE LANGUAGE plpgsql;"); } $nomeBase = $MIOLO->getConf( "db.gnuteca3.name" ); bBaseDeDados::consultar("ALTER DATABASE $nomeBase SET DateStyle TO 'SQL, DMY';"); $fields[] = new MTableRaw( 'Script de sincronização inicial', $messagesG, array(_M('Mensagem','gnuteca3')), 'initialMessage'); $fields[] = new MSeparator('
'); $theme->appendContent( $fields ); ?>