From b81fc219ad0b800c7694e8c031664b7de73d1d9f Mon Sep 17 00:00:00 2001 From: eduardo.praxedes Date: Wed, 25 Jan 2017 14:21:48 -0200 Subject: [PATCH] Correção no SET STORAGE ENGINE --- bd/PenMetaBD.php | 3 +-- sei_atualizar_versao_modulo_pen.php | 70 ---------------------------------------------------------------------- sip_atualizar_versao_modulo_pen.php | 1258 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 3 files changed, 1 insertion(+), 1330 deletions(-) delete mode 100644 sei_atualizar_versao_modulo_pen.php delete mode 100644 sip_atualizar_versao_modulo_pen.php diff --git a/bd/PenMetaBD.php b/bd/PenMetaBD.php index a86650c..3510ab3 100644 --- a/bd/PenMetaBD.php +++ b/bd/PenMetaBD.php @@ -83,8 +83,7 @@ class PenMetaBD extends InfraMetaBD { $version = $this->getObjInfraIBanco()->consultarSql('SELECT VERSION() as versao'); $version = $version[0]['versao']; $arrVersion = explode('.', $version); - - if($arrVersion[0].$arrVersion[1] < 57){ + if($arrVersion[0].$arrVersion[1] < 56){ $this->getObjInfraIBanco()->executarSql('@SET STORAGE_ENGINE=InnoDB'); } case 'InfraSqlServer': diff --git a/sei_atualizar_versao_modulo_pen.php b/sei_atualizar_versao_modulo_pen.php deleted file mode 100644 index 8e747aa..0000000 --- a/sei_atualizar_versao_modulo_pen.php +++ /dev/null @@ -1,70 +0,0 @@ -getTokens(); - - $objAtualizarRN = new PenAtualizarSeiRN($arrArgs); - $objAtualizarRN->atualizarVersao(); - - exit(0); -} -catch(InfraException $e){ - - print $e->getStrDescricao().PHP_EOL; -} -catch(Exception $e) { - - print InfraException::inspecionar($e); - - try { - LogSEI::getInstance()->gravar(InfraException::inspecionar($e)); - } catch (Exception $e) { - - } - - exit(1); -} - -print PHP_EOL; - -/** - # Apagar modulo PEN no SEI pelo MySQL - - SET FOREIGN_KEY_CHECKS = 0; - DROP TABLE `sei`.`pen_componente_digital`; - DROP TABLE `sei`.`pen_envio_recebimento_tramite`; - DROP TABLE `sei`.`pen_especie_documental`; - DROP TABLE `sei`.`pen_procedimento_andamento`; - DROP TABLE `sei`.`pen_procedimento_expedir_andamento`; - DROP TABLE `sei`.`pen_processo_eletronico`; - DROP TABLE `sei`.`pen_protocolo`; - DROP TABLE `sei`.`pen_receber_tramites_recusados`; - DROP TABLE `sei`.`pen_recibo_tramite`; - DROP TABLE `sei`.`pen_recibo_tramite_enviado`; - DROP TABLE `sei`.`pen_recibo_tramite_recebido`; - DROP TABLE `sei`.`pen_rel_processo_apensado`; - DROP TABLE `sei`.`pen_rel_serie_especie`; - DROP TABLE `sei`.`pen_rel_tarefa_operacao`; - DROP TABLE `sei`.`pen_rel_tipo_documento_mapeamento_recebido`; - DROP TABLE `sei`.`pen_tramite`; - DROP TABLE `sei`.`pen_tramite_pendente`; - ALTER TABLE unidade DROP COLUMN id_unidade_rh; - SET FOREIGN_KEY_CHECKS = 1; - - - */ \ No newline at end of file diff --git a/sip_atualizar_versao_modulo_pen.php b/sip_atualizar_versao_modulo_pen.php deleted file mode 100644 index d726f39..0000000 --- a/sip_atualizar_versao_modulo_pen.php +++ /dev/null @@ -1,1258 +0,0 @@ -getObjInfraIBanco(); - - $strTableDrive = get_parent_class($objInfraBanco); - $strQuery = ''; - - switch($strTableDrive) { - - case 'InfraMySqli': - $strQuery = sprintf("ALTER TABLE `%s` ALTER COLUMN `%s` SET DEFAULT '%s'", $strNomeTabela, $strNomeColuna, $strValorPadrao); - break; - - case 'InfraSqlServer': - $strQuery = sprintf("ALTER TABLE [%s] ADD DEFAULT('%s') FOR [%s]", $strNomeTabela, $strValorPadrao, $strNomeColuna); - - case 'InfraOracle': - break; - } - - if($bolRetornarQuery === false) { - - $objInfraBanco->executarSql($strQuery); - } - else { - - return $strQuery; - } - } - - /** - * Verifica se o usuário do drive de conexão possui permissão para criar/ remover - * estruturas - * - * @return PenMetaBD - */ - public function isDriverPermissao(){ - - $objInfraBanco = $this->getObjInfraIBanco(); - - if(count($this->obterTabelas('sei_teste'))==0){ - $objInfraBanco->executarSql('CREATE TABLE sei_teste (id '.$this->tipoNumero().' NULL)'); - } - - $objInfraBanco->executarSql('DROP TABLE sei_teste'); - - return $this; - } - - /** - * Verifica se o banco do SEI é suportador pelo atualizador - * - * @throws InfraException - * @return PenMetaBD - */ - public function isDriverSuportado(){ - - $strTableDrive = get_parent_class($this->getObjInfraIBanco()); - - switch($strTableDrive) { - - case 'InfraMySqli': - // Fix para bug de MySQL versão inferior ao 5.5 o default engine - // é MyISAM e não tem suporte a FOREING KEYS - $version = $this->getObjInfraIBanco()->consultarSql('SELECT VERSION() as versao'); - $version = $version[0]['versao']; - $arrVersion = explode('.', $version); - - if($arrVersion[0].$arrVersion[1] < 57){ - $this->getObjInfraIBanco()->executarSql('@SET STORAGE_ENGINE=InnoDB'); - } - case 'InfraSqlServer': - case 'InfraOracle': - break; - - default: - throw new InfraException('BANCO DE DADOS NAO SUPORTADO: ' . $strTableDrive); - - } - - return $this; - } - - /** - * Verifica se a versão sistema é compativel com a versão do módulo PEN - * - * @throws InfraException - * @return PenMetaBD - */ - public function isVersaoSuportada($strRegexVersaoSistema, $strVerMinRequirida){ - - $numVersaoRequerida = intval(preg_replace('/\D+/', '', $strVerMinRequirida)); - $numVersaoSistema = intval(preg_replace('/\D+/', '', $strRegexVersaoSistema)); - - if($numVersaoRequerida > $numVersaoSistema){ - throw new InfraException('VERSAO DO FRAMEWORK PHP INCOMPATIVEL (VERSAO ATUAL '.$strRegexVersaoSistema.', VERSAO REQUERIDA '.$strVerMinRequirida.')'); - } - - return $this; - } - - /** - * Apaga a chave primária da tabela - * - * @throws InfraException - * @return PenMetaBD - */ - public function removerChavePrimaria($strNomeTabela, $strNomeChave){ - - if($this->isChaveExiste($strNomeTabela, $strNomeChave)) { - - $strTableDrive = get_parent_class($this->getObjInfraIBanco()); - - switch($strTableDrive) { - - case 'InfraMySqli': - $this->getObjInfraIBanco()->executarSql('ALTER TABLE '.$strNomeTabela.' DROP PRIMARY KEY'); - break; - - case 'InfraSqlServer': - $this->getObjInfraIBanco()->executarSql('ALTER TABLE '.$strNomeTabela.' DROP CONSTRAINT '.$strNomeChave); - break; - - case 'InfraOracle': - break; - } - } - return $this; - } - - public function isChaveExiste($strNomeTabela = '', $strNomeChave = ''){ - - $objInfraBanco = $this->getObjInfraIBanco(); - $strTableDrive = get_parent_class($objInfraBanco); - - switch($strTableDrive) { - - case 'InfraMySqli': - $strSql = " SELECT COUNT(CONSTRAINT_NAME) AS EXISTE - FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS - WHERE CONSTRAINT_SCHEMA = '".$objInfraBanco->getBanco()."' - AND TABLE_NAME = '".$strNomeTabela."' - AND CONSTRAINT_NAME = '".$strNomeChave."'"; - break; - - case 'InfraSqlServer': - - $strSql = " SELECT COUNT(CONSTRAINT_NAME) AS EXISTE - FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS - WHERE CONSTRAINT_CATALOG = '".$objInfraBanco->getBanco()."' - AND TABLE_NAME = '".$strNomeTabela."' - AND CONSTRAINT_NAME = '".$strNomeChave."'"; - break; - - case 'InfraOracle': - $strSql = "SELECT 0 AS EXISTE"; - break; - } - - $strSql = preg_replace('/\s+/', ' ', $strSql); - $arrDados = $objInfraBanco->consultarSql($strSql); - - return (intval($arrDados[0]['EXISTE']) > 0) ? true : false; - } - - public function adicionarChaveUnica($strNomeTabela = '', $arrNomeChave = array()){ - - $this->getObjInfraIBanco() - ->executarSql('ALTER TABLE '.$strNomeTabela.' ADD CONSTRAINT UK_'.$strNomeTabela.' UNIQUE('.implode(', ', $arrNomeChave).')'); - } - - public function renomearTabela($strNomeTabelaAtual, $strNomeTabelaNovo){ - - if($this->isTabelaExiste($strNomeTabelaAtual)) { - - $objInfraBanco = $this->getObjInfraIBanco(); - - $strTableDrive = get_parent_class($objInfraBanco); - $strQuery = ''; - - switch ($strTableDrive) { - - case 'InfraMySqli': - $strQuery = sprintf("ALTER TABLE `%s` RENAME TO `%s`", $strNomeTabelaAtual, $strNomeTabelaNovo); - break; - - case 'InfraSqlServer': - $strQuery = sprintf("sp_rename '%s', '%s'", $strNomeTabelaAtual, $strNomeTabelaNovo); - - case 'InfraOracle': - $strQuery = sprintf("RENAME TABLE %s TO %s", $strNomeTabelaAtual, $strNomeTabelaNovo); - break; - } - - $objInfraBanco->executarSql($strQuery); - } - } - - - /** - * Verifica se uma tabela existe no banco - * - * @throws InfraException - * @return bool - */ - public function isTabelaExiste($strNomeTabela = ''){ - - $objInfraBanco = $this->getObjInfraIBanco(); - $strTableDrive = get_parent_class($objInfraBanco); - - switch($strTableDrive) { - - case 'InfraMySqli': - $strSql = "SELECT COUNT(TABLE_NAME) AS EXISTE - FROM INFORMATION_SCHEMA.TABLES - WHERE TABLE_SCHEMA = '".$objInfraBanco->getBanco()."' - AND TABLE_NAME = '".$strNomeTabela."'"; - break; - - case 'InfraSqlServer': - - $strSql = "SELECT COUNT(TABLE_NAME) AS EXISTE - FROM INFORMATION_SCHEMA.TABLES - WHERE TABLE_CATALOG = '".$objInfraBanco->getBanco()."' - AND TABLE_NAME = '".$strNomeTabela."'"; - break; - - case 'InfraOracle': - $strSql = "SELECT 0 AS EXISTE"; - break; - } - - $strSql = preg_replace('/\s+/', ' ', $strSql); - $arrDados = $objInfraBanco->consultarSql($strSql); - - return (intval($arrDados[0]['EXISTE']) > 0) ? true : false; - } - - public function isColuna($strNomeTabela = '', $strNomeColuna = ''){ - - $objInfraBanco = $this->getObjInfraIBanco(); - $strTableDrive = get_parent_class($objInfraBanco); - - switch($strTableDrive) { - - case 'InfraMySqli': - $strSql = "SELECT COUNT(TABLE_NAME) AS EXISTE - FROM INFORMATION_SCHEMA.COLUMNS - WHERE TABLE_SCHEMA = '".$objInfraBanco->getBanco()."' - AND TABLE_NAME = '".$strNomeTabela."' - AND COLUMN_NAME = '".$strNomeColuna."'"; - break; - - case 'InfraSqlServer': - - $strSql = "SELECT COUNT(COLUMN_NAME) AS EXISTE - FROM INFORMATION_SCHEMA.COLUMNS - WHERE TABLE_CATALOG = '".$objInfraBanco->getBanco()."' - AND TABLE_NAME = '".$strNomeTabela."' - AND COLUMN_NAME = '".$strNomeColuna."'"; - break; - - case 'InfraOracle': - $strSql = "SELECT 0 AS EXISTE"; - break; - } - - $strSql = preg_replace('/\s+/', ' ', $strSql); - $arrDados = $objInfraBanco->consultarSql($strSql); - - return (intval($arrDados[0]['EXISTE']) > 0) ? true : false; - - - } - - /** - * Cria a estrutura da tabela no padrão ANSI - * - * @throws InfraException - * @return PenMetaBD - */ - public function criarTabela($arrSchema = array()){ - - $strNomeTabela = $arrSchema['tabela']; - - - if($this->isTabelaExiste($strNomeTabela)) { - return $this; - } - - $objInfraBanco = $this->getObjInfraIBanco(); - $arrColunas = array(); - $arrStrQuery = array(); - - foreach($arrSchema['cols'] as $strNomeColuna => $arrColunaConfig) { - - list($strTipoDado, $strValorPadrao) = $arrColunaConfig; - - if($strValorPadrao != self::SNULLO && $strValorPadrao != self::NNULLO) { - - $arrStrQuery[] = $this->adicionarValorPadraoParaColuna($strNomeTabela, $strNomeColuna, $strValorPadrao, true); - $strValorPadrao = self::NNULLO; - } - - $arrColunas[] = $strNomeColuna.' '.$strTipoDado.' '.$strValorPadrao; - } - - $objInfraBanco->executarSql('CREATE TABLE '.$strNomeTabela.' ('.implode(', ', $arrColunas).')'); - - if(!empty($arrSchema['pk'])) { - - $this->adicionarChavePrimaria($strNomeTabela, 'pk_'.$strNomeTabela, $arrSchema['pk']); - - if(count($arrSchema['pk']) > 1) { - - foreach($arrSchema['pk'] as $strPk) { - - $objInfraBanco->executarSql('CREATE INDEX idx_'.$strNomeTabela.'_'.$strPk.' ON '.$strNomeTabela.'('.$strPk.')'); - } - } - } - - if(array_key_exists('uk', $arrSchema) && !empty($arrSchema['uk'])) { - - $this->adicionarChaveUnica($strNomeTabela, $arrSchema['uk']); - } - - if(!empty($arrSchema['fks'])) { - - foreach($arrSchema['fks'] as $strTabelaOrigem => $array) { - - $strNomeFK = 'fk_'.$strNomeTabela.'_'.$strTabelaOrigem; - $arrCamposOrigem = (array)array_shift($array); - $arrCampos = $arrCamposOrigem; - - if(!empty($array)) { - $arrCampos = (array)array_shift($array); - } - - $this->adicionarChaveEstrangeira($strNomeFK, $strNomeTabela, $arrCampos, $strTabelaOrigem, $arrCamposOrigem); - } - } - - if(!empty($arrStrQuery)) { - - foreach($arrStrQuery as $strQuery) { - $objInfraBanco->executarSql($strQuery); - } - } - - return $this; - } - - /** - * Apagar a estrutura da tabela no banco de dados - * - * @throws InfraException - * @return PenMetaBD - */ - public function removerTabela($strNomeTabela = ''){ - - $this->getObjInfraIBanco()->executarSql('DROP TABLE '.$strNomeTabela); - return $this; - } - - public function adicionarChaveEstrangeira($strNomeFK, $strTabela, $arrCampos, $strTabelaOrigem, $arrCamposOrigem) { - - if(!$this->isChaveExiste($strTabela, $strNomeFK)) { - parent::adicionarChaveEstrangeira($strNomeFK, $strTabela, $arrCampos, $strTabelaOrigem, $arrCamposOrigem); - } - return $this; - } - - public function adicionarChavePrimaria($strTabela, $strNomePK, $arrCampos) { - - if(!$this->isChaveExiste($strTabela, $strNomePK)) { - parent::adicionarChavePrimaria($strTabela, $strNomePK, $arrCampos); - } - return $this; - } - - public function alterarColuna($strTabela, $strColuna, $strTipo, $strNull = '') { - parent::alterarColuna($strTabela, $strColuna, $strTipo, $strNull); - return $this; - } - - public function excluirIndice($strTabela, $strIndex) { - if($this->isChaveExiste($strTabela, $strFk)) { - parent::excluirIndice($strTabela, $strIndex); - } - return $this; - } - - public function excluirChaveEstrangeira($strTabela, $strFk) { - if($this->isChaveExiste($strTabela, $strFk)) { - parent::excluirChaveEstrangeira($strTabela, $strFk); - } - return $this; - } -} - -abstract class PenAtualizadorRN extends InfraRN { - - const VER_NONE = '0.0.0'; // Modulo não instalado - const VER_001 = '0.0.1'; - const VER_002 = '0.0.2'; - const VER_003 = '0.0.3'; - const VER_004 = '0.0.4'; - const VER_005 = '0.0.5'; - - protected $sei_versao; - - /** - * @var string Versão mínima requirida pelo sistema para instalação do PEN - */ - protected $versaoMinRequirida; - - /** - * @var InfraIBanco Instância da classe de persistência com o banco de dados - */ - protected $objBanco; - - /** - * @var InfraMetaBD Instância do metadata do banco de dados - */ - protected $objMeta; - - /** - * @var InfraDebug Instância do debuger - */ - protected $objDebug; - - /** - * @var integer Tempo de execução do script - */ - protected $numSeg = 0; - - /** - * @var array Argumentos passados por linha de comando ao script - */ - protected $arrArgs = array(); - - /** - * Inicia a conexão com o banco de dados - */ - protected function inicializarObjMetaBanco() { - if (empty($this->objMeta)) { - $this->objMeta = new PenMetaBD($this->inicializarObjInfraIBanco()); - } - return $this->objMeta; - } - - /** - * Adiciona uma mensagem ao output para o usuário - * - * @return null - */ - protected function logar($strMsg) { - $this->objDebug->gravar($strMsg); - } - - /** - * Inicia o script criando um contator interno do tempo de execução - * - * @return null - */ - protected function inicializar($strTitulo) { - - $this->numSeg = InfraUtil::verificarTempoProcessamento(); - - $this->logar($strTitulo); - } - - /** - * Finaliza o script informando o tempo de execução. - * - * @return null - */ - protected function finalizar() { - - $this->logar('TEMPO TOTAL DE EXECUCAO: ' . InfraUtil::verificarTempoProcessamento($this->numSeg) . ' s'); - - $this->objDebug->setBolLigado(false); - $this->objDebug->setBolDebugInfra(false); - $this->objDebug->setBolEcho(false); - - print PHP_EOL; - die(); - } - - /** - * Método criado em função de um bug com a InfraRN na linha 69, onde usamos - * uma instância do banco do SIP e a versão esta no banco SEI, essa verificação - * e lançamento de uma excessão pelos bancos terem nome diferentes tava o - * atualizado - * - * @todo Migrar para classe PenMetaBD - * @return null - */ - protected function setVersao($strRegexVersao, $objInfraBanco = null) { - - InfraDebug::getInstance()->gravarInfra(sprintf('[%s->%s]', get_class($this), __FUNCTION__)); - - - if ($this->getVersao($objInfraBanco)) { - - $sql = sprintf("UPDATE infra_parametro SET valor = '%s' WHERE nome = '%s'", $strRegexVersao, $this->sei_versao); - } else { - - $sql = sprintf("INSERT INTO infra_parametro(nome, valor) VALUES('%s', '%s')", $this->sei_versao, $strRegexVersao); - } - - if (empty($objInfraBanco)) { - - $objInfraBanco = $this->inicializarObjInfraIBanco(); - } - - $objInfraBanco->executarSql($sql); - - return $strRegexVersao; - } - - /** - * Retorna a versão atual do modulo, se já foi instalado - * - * @todo Migrar para classe PenMetaBD - * @param InfraBanco $objInfraBanco Conexão com o banco SEI ou SIP - * @return string - */ - protected function getVersao($objInfraBanco = null) { - - InfraDebug::getInstance()->gravarInfra(sprintf('[%s->%s]', get_class($this), __FUNCTION__)); - - $sql = sprintf("SELECT valor FROM infra_parametro WHERE nome = '%s'", $this->sei_versao); - - if (empty($objInfraBanco)) { - - $objInfraBanco = $this->inicializarObjInfraIBanco(); - } - - $arrResultado = $objInfraBanco->consultarSql($sql); - - if (empty($arrResultado)) { - return null; - } - - $arrLinha = current($arrResultado); - - return $arrLinha['valor']; - } - - /** - * Verifica se o número da versão é valido - * - * @param string $strVersao Versão a ser instalada - * @return bool - */ - protected function isVersaoValida($strVersao = self::VER_NONE) { - - if (empty($strVersao)) { - return false; - } - - // Remove os caracteres não númericos - $strVersao = preg_replace('/\D+/', '', $strVersao); - - // Tem que no mínimo 3 digitos - if (strlen($strVersao) < 3) { - return false; - } - - return is_numeric($strVersao) ? true : false; - } - - /** - * Verifica se um paramêtro existe, caso sim retorna o seu valor, senão - * retorna o default especificado. - * - * @param string $strChave Nome do paramêtro - * @param string $strParam String a ser formatada com o valor do paramêtro - * @param string $strParamDefault String que retorna caso o valor do - * paramêtro não exista - * @param bool $bolAlgumFiltroUsado Ponteiro de controle para verificar se - * pelo menos um paramêtro foi encontrado - * @return string - */ - private function getStrArg($strChave = '', $strParam = '', $strParamDefault = '', &$bolAlgumFiltroUsado) { - - if (array_key_exists($strChave, $this->arrArgs)) { - $bolAlgumFiltroUsado = true; - return sprintf($strParam, str_pad($this->arrArgs[$strChave], 3, '0', STR_PAD_LEFT)); - } - return $strParamDefault; - } - - /** - * Retorna a última versão disponivel. Verifica as constantes que iniciam - * com VER_ - */ - private function getUltimaVersao() { - - $objReflection = new ReflectionClass(__CLASS__); - $arrVersao = array_flip(preg_grep('/^VER\_/', array_flip($objReflection->getConstants()))); - sort($arrVersao); - return array_pop($arrVersao); - } - - /** - * Encontra os métodos com notação para instalar a versão selecionada - * - * @return string Número da versão - */ - protected function executarControlado() { - - $this->inicializarObjMetaBanco() - ->isDriverSuportado() - ->isDriverPermissao(); - //->isVersaoSuportada(SEI_VERSAO, $this->versaoMinRequirida); - - $arrMetodo = array(); - - // Retorna a última versão disponibilizada pelo script. Sempre tenta atualizar - // para versão mais antiga - $strVersaoInstalar = $this->getUltimaVersao(); - - //throw new InfraException($strVersaoInstalar); - $objInfraBanco = $this->inicializarObjInfraIBanco(); - // Versão atual - $strPenVersao = $this->getVersao($objInfraBanco); - if (!$this->isVersaoValida($strPenVersao)) { - // Não instalado - $strPenVersao = $this->setVersao(self::VER_NONE, $objInfraBanco); - } - - $numPenVersao = substr($strPenVersao, -1); - $numVersaoInstalar = intval(substr($strVersaoInstalar, -1)); - - $bolAlgumFiltroUsado = false; - $strRegexRelease = $this->getStrArg('release', '(R%s)', '(R[0-9]{1,3})?', $bolAlgumFiltroUsado); - $strRegexSprint = $this->getStrArg('sprint', '(S%s)', '(S[0-9]{1,3})?', $bolAlgumFiltroUsado); - $strRegexItem = $this->getStrArg('user-story', '(US%s)', '(US|IW[0-9]{1,3})?', $bolAlgumFiltroUsado); - $strRegexItem = $this->getStrArg('item-worker', '(IW%s)', $strRegexItem, $bolAlgumFiltroUsado); - - // Instalar todas atualizações - if ($bolAlgumFiltroUsado === false) { - - $strRegexVersao = sprintf('[%d-%d]', ($numPenVersao + 1), $numVersaoInstalar); - } - // Instalar somente a solicitada - else { - // Caso algum paramêtro seja adicionado não deve passar para próxima versão - $strVersaoInstalar = $strPenVersao; - $strRegexVersao = intval(substr($strPenVersao, -1) + 1); - } - - // instalarV[0-9]{1,2}[0-9](R[0-9]{1,3})?(S[0-9]{1,3})?(US|IW[0-9]{1,4})? - $strRegex = sprintf('/^instalarV[0-9][0-9]%s%s%s%s/i', $strRegexVersao, $strRegexRelease, $strRegexSprint, $strRegexItem - ); - - // Tenta encontrar métodos que iniciem com instalar - $arrMetodo = (array) preg_grep($strRegex, get_class_methods($this)); - - if (empty($arrMetodo)) { - - throw new InfraException(sprintf('NENHUMA ATUALIZACAO FOI ENCONTRADA SUPERIOR A VERSAO %s DO MODULO PEN', $strPenVersao)); - } else { - - foreach ($arrMetodo as $strMetodo) { - - $this->{$strMetodo}(); - } - } - $this->setVersao($strVersaoInstalar, $objInfraBanco); - - return $strVersaoInstalar; - } - - /** - * Método que inicia o processo - */ - public function atualizarVersao() { - - $this->inicializar('INICIANDO ATUALIZACAO DO MODULO PEN NO SEI VERSAO ' . SIP_VERSAO); - - try { - - $strRegexVersao = $this->executar(); - $this->logar('ATUALIZADA VERSAO: ' . $strRegexVersao); - } catch (InfraException $e) { - - $this->logar('Erro: ' . $e->getStrDescricao()); - } catch (\Exception $e) { - - $this->logar('Erro: ' . $e->getMessage()); - } - - $this->finalizar(); - } - - /** - * Construtor - * - * @param array $arrArgs Argumentos enviados pelo script - */ - public function __construct($arrArgs = array()) { - - ini_set('max_execution_time', '0'); - ini_set('memory_limit', '-1'); - @ini_set('zlib.output_compression', '0'); - @ini_set('implicit_flush', '1'); - ob_implicit_flush(); - - $this->arrArgs = $arrArgs; - - $this->inicializarObjMetaBanco(); - - $this->objDebug = InfraDebug::getInstance(); - $this->objDebug->setBolLigado(true); - $this->objDebug->setBolDebugInfra(true); - $this->objDebug->setBolEcho(true); - $this->objDebug->limpar(); - } - -} - -class PenAtualizarSipRN extends PenAtualizadorRN { - - protected $versaoMinRequirida = '1.30.0'; - protected $sei_versao = 'PEN_VERSAO_MODULO_SIP'; - private $arrRecurso = array(); - private $arrMenu = array(); - - /** - * Retorna/Cria a conexão com o banco de dados - * - * @return InfraIBanco - */ - protected function inicializarObjInfraIBanco() { - if (empty($this->objBanco)) { - - $this->objBanco = BancoSip::getInstance(); - } - return $this->objBanco; - } - - /** - * Retorna o ID do sistema - * - * @return int - */ - protected function getNumIdSistema($strSigla = 'SIP') { - - $objDTO = new SistemaDTO(); - $objDTO->setStrSigla($strSigla); - $objDTO->setNumMaxRegistrosRetorno(1); - $objDTO->retNumIdSistema(); - - $objRN = new SistemaRN(); - $objDTO = $objRN->consultar($objDTO); - - return (empty($objDTO)) ? '0' : $objDTO->getNumIdSistema(); - } - - /** - * - * @return int Código do Menu - */ - protected function getNumIdMenu($strMenu = 'Principal', $numIdSistema = 0) { - - $objDTO = new MenuDTO(); - $objDTO->setNumIdSistema($numIdSistema); - $objDTO->setStrNome($strMenu); - $objDTO->setNumMaxRegistrosRetorno(1); - $objDTO->retNumIdMenu(); - - $objRN = new MenuRN(); - $objDTO = $objRN->consultar($objDTO); - - if (empty($objDTO)) { - throw new InfraException('Menu ' . $strMenu . ' não encontrado.'); - } - - return $objDTO->getNumIdMenu(); - } - - /** - * - * @return int Código do Recurso gerado - */ - protected function criarRecurso($strNome = '', $strDescricao = null, $numIdSistema = 0) { - - $objDTO = new RecursoDTO(); - $objDTO->setNumIdSistema($numIdSistema); - $objDTO->setStrNome($strNome); - $objDTO->setNumMaxRegistrosRetorno(1); - $objDTO->retNumIdRecurso(); - - $objBD = new RecursoBD($this->getObjInfraIBanco()); - $objDTO = $objBD->consultar($objDTO); - - if (empty($objDTO)) { - - $objDTO = new RecursoDTO(); - $objDTO->setNumIdRecurso(null); - $objDTO->setStrDescricao($strDescricao); - $objDTO->setNumIdSistema($numIdSistema); - $objDTO->setStrNome($strNome); - $objDTO->setStrCaminho('controlador.php?acao=' . $strNome); - $objDTO->setStrSinAtivo('S'); - - $objDTO = $objBD->cadastrar($objDTO); - } - - $this->arrRecurso[] = $objDTO->getNumIdRecurso(); - - return $objDTO->getNumIdRecurso(); - } - - /** - * Cria um menu - * - * @return int - */ - protected function criarMenu($strRotulo = '', $numSequencia = 10, $numIdItemMenuPai = null, $numIdMenu = null, $numIdRecurso = null, $numIdSistema = 0) { - - $objDTO = new ItemMenuDTO(); - $objDTO->setNumIdItemMenuPai($numIdItemMenuPai); - $objDTO->setNumIdSistema($numIdSistema); - $objDTO->setStrRotulo($strRotulo); - $objDTO->setNumIdRecurso($numIdRecurso); - $objDTO->setNumMaxRegistrosRetorno(1); - $objDTO->retNumIdItemMenu(); - - $objBD = new ItemMenuBD($this->inicializarObjInfraIBanco()); - $objDTO = $objBD->consultar($objDTO); - - if (empty($objDTO)) { - - $objDTO = new ItemMenuDTO(); - $objDTO->setNumIdMenu($numIdMenu); - $objDTO->setNumIdMenuPai($numIdMenu); - $objDTO->setNumIdItemMenu(null); - $objDTO->setNumIdItemMenuPai($numIdItemMenuPai); - $objDTO->setNumIdSistema($numIdSistema); - $objDTO->setNumIdRecurso($numIdRecurso); - $objDTO->setStrRotulo($strRotulo); - $objDTO->setStrDescricao(null); - $objDTO->setNumSequencia($numSequencia); - $objDTO->setStrSinNovaJanela('N'); - $objDTO->setStrSinAtivo('S'); - - $objDTO = $objBD->cadastrar($objDTO); - } - - if (!empty($numIdRecurso)) { - - $this->arrMenu[] = array($objDTO->getNumIdItemMenu(), $numIdMenu, $numIdRecurso); - } - - return $objDTO->getNumIdItemMenu(); - } - - public function addRecursosToPerfil($numIdPerfil, $numIdSistema) { - - if (!empty($this->arrRecurso)) { - - $objDTO = new RelPerfilRecursoDTO(); - $objBD = new RelPerfilRecursoBD($this->inicializarObjInfraIBanco()); - - foreach ($this->arrRecurso as $numIdRecurso) { - - $objDTO->setNumIdSistema($numIdSistema); - $objDTO->setNumIdPerfil($numIdPerfil); - $objDTO->setNumIdRecurso($numIdRecurso); - - if ($objBD->contar($objDTO) == 0) { - $objBD->cadastrar($objDTO); - } - } - } - } - - public function addMenusToPerfil($numIdPerfil, $numIdSistema) { - - if (!empty($this->arrMenu)) { - - $objDTO = new RelPerfilItemMenuDTO(); - $objBD = new RelPerfilItemMenuBD($this->inicializarObjInfraIBanco()); - - foreach ($this->arrMenu as $array) { - - list($numIdItemMenu, $numIdMenu, $numIdRecurso) = $array; - - $objDTO->setNumIdPerfil($numIdPerfil); - $objDTO->setNumIdSistema($numIdSistema); - $objDTO->setNumIdRecurso($numIdRecurso); - $objDTO->setNumIdMenu($numIdMenu); - $objDTO->setNumIdItemMenu($numIdItemMenu); - - if ($objBD->contar($objDTO) == 0) { - $objBD->cadastrar($objDTO); - } - } - } - } - - public function atribuirPerfil($numIdSistema) { - - $objDTO = new PerfilDTO(); - $objBD = new PerfilBD($this->inicializarObjInfraIBanco()); - $objRN = $this; - - // Vincula a um perfil os recursos e menus adicionados nos métodos criarMenu e criarReturso - $fnCadastrar = function($strNome, $numIdSistema) use($objDTO, $objBD, $objRN) { - - $objDTO->unSetTodos(); - $objDTO->setNumIdSistema($numIdSistema); - $objDTO->setStrNome($strNome, InfraDTO::$OPER_LIKE); - $objDTO->setNumMaxRegistrosRetorno(1); - $objDTO->retNumIdPerfil(); - - $objPerfilDTO = $objBD->consultar($objDTO); - - if (!empty($objPerfilDTO)) { - $objRN->addRecursosToPerfil($objPerfilDTO->getNumIdPerfil(), $numIdSistema); - $objRN->addMenusToPerfil($objPerfilDTO->getNumIdPerfil(), $numIdSistema); - } - }; - - $fnCadastrar('ADMINISTRADOR', $numIdSistema); - $fnCadastrar('BASICO', $numIdSistema); - } - - /** - * Instala/Atualiza os módulo PEN para versão 1.0 - */ - protected function instalarV001() { - - $numIdSistema = $this->getNumIdSistema('SEI'); - $numIdMenu = $this->getNumIdMenu('Principal', $numIdSistema); - - //---------------------------------------------------------------------- - // Expedir procedimento - //---------------------------------------------------------------------- - $this->criarRecurso('pen_procedimento_expedir', 'Expedir Procedimento', $numIdSistema); - $this->criarRecurso('apensados_selecionar_expedir_procedimento', 'Processos Apensados', $numIdSistema); - $numIdRecurso = $this->criarRecurso('pen_procedimento_expedido_listar', 'Processos Expedidos', $numIdSistema); - $this->criarMenu('Processos Expedidos', 55, null, $numIdMenu, $numIdRecurso, $numIdSistema); - //---------------------------------------------------------------------- - // Mapeamento de documentos enviados - //---------------------------------------------------------------------- - $this->criarRecurso('pen_map_tipo_doc_enviado_visualizar', 'Visualização de mapeamento de documentos enviados', $numIdSistema); - - // Acha o menu existente de Tipos de Documento - $objItemMenuDTO = new ItemMenuDTO(); - $objItemMenuDTO->setNumIdSistema($numIdSistema); - $objItemMenuDTO->setNumIdMenu($numIdMenu); - $objItemMenuDTO->setStrRotulo('Tipos de Documento'); - $objItemMenuDTO->setNumMaxRegistrosRetorno(1); - $objItemMenuDTO->retNumIdItemMenu(); - - $objItemMenuBD = new ItemMenuBD($this->inicializarObjInfraIBanco()); - $objItemMenuDTO = $objItemMenuBD->consultar($objItemMenuDTO); - - if (empty($objItemMenuDTO)) { - throw new InfraException('Menu "Tipo de Documentos" não foi localizado'); - } - - $numIdItemMenuPai = $objItemMenuDTO->getNumIdItemMenu(); - - // Gera o submenu Mapeamento - $_numIdItemMenuPai = $this->criarMenu('Mapeamento', 50, $numIdItemMenuPai, $numIdMenu, null, $numIdSistema); - - // Gera o submenu Mapeamento > Envio - $numIdItemMenuPai = $this->criarMenu('Envio', 10, $_numIdItemMenuPai, $numIdMenu, null, $numIdSistema); - - // Gera o submenu Mapeamento > Envio > Cadastrar - $numIdRecurso = $this->criarRecurso('pen_map_tipo_doc_enviado_cadastrar', 'Cadastro de mapeamento de documentos enviados', $numIdSistema); - $this->criarMenu('Cadastrar', 10, $numIdItemMenuPai, $numIdMenu, $numIdRecurso, $numIdSistema); - - // Gera o submenu Mapeamento > Envio > Listar - $numIdRecurso = $this->criarRecurso('pen_map_tipo_doc_enviado_listar', 'Listagem de mapeamento de documentos enviados', $numIdSistema); - $this->criarMenu('Listar', 20, $numIdItemMenuPai, $numIdMenu, $numIdRecurso, $numIdSistema); - - // Gera o submenu Mapeamento > Recebimento - $numIdItemMenuPai = $this->criarMenu('Recebimento', 20, $_numIdItemMenuPai, $numIdMenu, null, $numIdSistema); - - // Gera o submenu Mapeamento > Recebimento > Cadastrar - $numIdRecurso = $this->criarRecurso('pen_map_tipo_doc_recebido_cadastrar', 'Cadastro de mapeamento de documentos recebidos', $numIdSistema); - $this->criarMenu('Cadastrar', 10, $numIdItemMenuPai, $numIdMenu, $numIdRecurso, $numIdSistema); - - // Gera o submenu Mapeamento > Recebimento > Listar - $numIdRecurso = $this->criarRecurso('pen_map_tipo_doc_recebido_listar', 'Listagem de mapeamento de documentos recebidos', $numIdSistema); - $this->criarMenu('Listar', 20, $numIdItemMenuPai, $numIdMenu, $numIdRecurso, $numIdSistema); - - //Atribui as permissões aos recursos e menus - $this->atribuirPerfil($numIdSistema); - } - - protected function instalarV003R003S003IW001() { - - - $objBD = new ItemMenuBD($this->inicializarObjInfraIBanco()); - - //---------------------------------------------------------------------- - // Achar o root - - $numIdSistema = $this->getNumIdSistema('SEI'); - $numIdMenu = $this->getNumIdMenu('Principal', $numIdSistema); - - $objDTO = new ItemMenuDTO(); - $objDTO->setNumIdSistema($numIdSistema); - $objDTO->setNumIdMenu($numIdMenu); - $objDTO->setStrRotulo('Administração'); - $objDTO->setNumMaxRegistrosRetorno(1); - $objDTO->retNumIdItemMenu(); - - $objDTO = $objBD->consultar($objDTO); - - if (empty($objDTO)) { - throw new InfraException('Menu "Administração" não foi localizado'); - } - - $numIdItemMenuRoot = $objDTO->getNumIdItemMenu(); - //---------------------------------------------------------------------- - // Acha o nodo do mapeamento - - $objItemMenuDTO = new ItemMenuDTO(); - $objItemMenuDTO->setNumIdSistema($numIdSistema); - $objItemMenuDTO->setNumIdMenu($numIdMenu); - $objItemMenuDTO->setStrRotulo('Mapeamento'); - $objItemMenuDTO->setNumSequencia(50); - $objItemMenuDTO->setNumMaxRegistrosRetorno(1); - $objItemMenuDTO->retTodos(); - - $objItemMenuDTO = $objBD->consultar($objItemMenuDTO); - if (!empty($objItemMenuDTO)) { - - $numIdItemMenuMapeamento = $objItemMenuDTO->getNumIdItemMenu(); - - $objDTO = new ItemMenuDTO(); - $objDTO->setNumIdSistema($numIdSistema); - $objDTO->setNumIdMenu($numIdMenu); - $objDTO->setNumIdItemMenuPai($numIdItemMenuMapeamento); - $objDTO->retTodos(); - - $arrObjDTO = $objBD->listar($objDTO); - - if (!empty($arrObjDTO)) { - - $numIdItemMenuPai = $this->criarMenu('Processo Eletrônico Nacional', 0, $numIdItemMenuRoot, $numIdMenu, null, $numIdSistema); - $numIdItemMenuPai = $this->criarMenu('Mapeamento de Tipos de Documento', 10, $numIdItemMenuPai, $numIdMenu, null, $numIdSistema); - - foreach ($arrObjDTO as $objDTO) { - - $objDTO->setNumIdItemMenuPai($numIdItemMenuPai); - - $objBD->alterar($objDTO); - } - - $objBD->excluir($objItemMenuDTO); - } - } - } - -} - -class PenConsoleRN extends InfraRN { - - protected $objRN; - protected $strAction; - protected $arrTokens = array(); - protected $objInfraBanco; - - public function __construct($objRN = null, $tokens = array()) { - - if(!is_null($objRN)) { - - parent::__construct(); - - if(!is_object($objRN)) { - throw new InfraException('Requerido objeto Infra'); - } - - if(get_parent_class($objRN) !== 'InfraRN') { - throw new InfraException('Requerido objeto Infra que seja extendido de InfraRN'); - } - - $this->objRN = $objRN; - } - - if(empty($tokens)) { - $tokens = $_SERVER['argv']; - } - - $this->criarTokens($tokens); - } - - /** - * Inicializador o banco de dados - */ - protected function inicializarObjInfraIBanco() { - if(empty($this->objInfraBanco)){ - $this->objInfraBanco = BancoSEI::getInstance(); - } - return $this->objInfraBanco; - } - - /** - * Processa os parâmetros passados ao script pelo cli - * - * @param array $arguments - * @return null - */ - protected function criarTokens($arguments = array()){ - - if(empty($arguments)) { - throw new InfraException('Script não pode ser executado pela web'); - } - - $strScript = array_shift($arguments); - - if(!empty($this->objRN)) { - - $strAction = array_shift($arguments); - - if(substr($strAction, 0, 2) == '--') { - throw new InfraException('O primeiro paramêtro deve ser uma action da RN'); - } - - $this->strAction = $strAction; - } - - foreach($arguments as $key => $argument) { - - if(substr($argument, 0, 2) === '--'){ - - $string = preg_replace('/^--/', '', $argument); - $array = explode('=', $string); - - $key = array_shift($array); - $value = (count($array) > 0) ? array_shift($array) : true; - - $this->arrTokens[$key] = $value; - } - } - } - - /** - * Retorna os parâmetros - */ - public function getTokens(){ - return $this->arrTokens; - } - - public function run(){ - - if(empty($this->objRN)) { - throw new InfraException('Nenhuma RN foi adicionada ao console'); - } - - if(!method_exists($this->objRN, $this->strAction)) { - - throw new InfraException(sprintf('Nenhuma ação "%s" foi encontrada em %s '.PHP_EOL.$this->objRN->ajuda(), $this->strAction, get_class($this->objRN))); - } - - if(array_key_exists('ajuda', $this->arrTokens)) { - - print $this->objRN->ajuda(); - return true; - } - - return call_user_func(array($this->objRN, $this->strAction), $this->getTokens()); - } - - public static function format($strMensagem = '', $strFonte = '', $bolBold = false){ - - $strBold = ($bolBold !== false) ? '1' : '0'; - - //$strMensagem = escapeshellarg($strMensagem); - - if(!empty($strFonte)) { - - switch($strFonte){ - - case 'green': - $strMensagem = "\033[".$strBold.";32m".$strMensagem; - break; - - case 'red': - $strMensagem = "\033[".$strBold.";31m".$strMensagem; - break; - - case 'blue': - $strMensagem = "\033[".$strBold.";34m".$strMensagem; - break; - - case 'yellow': - $strMensagem = "\033[".$strBold.";33m".$strMensagem; - break; - - } - } - return static::resetAfter($strMensagem); - } - - public static function resetAfter($strMensagem = ''){ - - return $strMensagem. "\033[0m"; - } -} - -try { - - $objPenConsoleRN = new PenConsoleRN(); - $arrArgs = $objPenConsoleRN->getTokens(); - - $objAtualizarRN = new PenAtualizarSipRN($arrArgs); - $objAtualizarRN->atualizarVersao(); - - exit(0); -} catch (Exception $e) { - - print InfraException::inspecionar($e); - - try { - LogSEI::getInstance()->gravar(InfraException::inspecionar($e)); - } catch (Exception $e) { - - } - - exit(1); -} - -print PHP_EOL; -- libgit2 0.21.2