Commit b81fc219ad0b800c7694e8c031664b7de73d1d9f

Authored by Eduardo Heinske
1 parent 49e40dd3

Correção no SET STORAGE ENGINE

bd/PenMetaBD.php
... ... @@ -83,8 +83,7 @@ class PenMetaBD extends InfraMetaBD {
83 83 $version = $this->getObjInfraIBanco()->consultarSql('SELECT VERSION() as versao');
84 84 $version = $version[0]['versao'];
85 85 $arrVersion = explode('.', $version);
86   -
87   - if($arrVersion[0].$arrVersion[1] < 57){
  86 + if($arrVersion[0].$arrVersion[1] < 56){
88 87 $this->getObjInfraIBanco()->executarSql('@SET STORAGE_ENGINE=InnoDB');
89 88 }
90 89 case 'InfraSqlServer':
... ...
sei_atualizar_versao_modulo_pen.php
... ... @@ -1,70 +0,0 @@
1   -<?php
2   -/**
3   - * Script para atualizaçăo do sistema SEI.
4   - *
5   - * Modificar o "short_open_tag" para "On" no php.ini
6   - *
7   - * PHP 5.3.3 (cli) (built: Jul 9 2015 17:39:00)
8   - * Copyright (c) 1997-2010 The PHP Group
9   - * Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
10   - *
11   - * @author Join Tecnologia
12   - */
13   -
14   -try {
15   -
16   - require_once dirname(__FILE__).'/../../SEI.php';
17   -
18   - $objPenConsoleRN = new PenConsoleRN();
19   - $arrArgs = $objPenConsoleRN->getTokens();
20   -
21   - $objAtualizarRN = new PenAtualizarSeiRN($arrArgs);
22   - $objAtualizarRN->atualizarVersao();
23   -
24   - exit(0);
25   -}
26   -catch(InfraException $e){
27   -
28   - print $e->getStrDescricao().PHP_EOL;
29   -}
30   -catch(Exception $e) {
31   -
32   - print InfraException::inspecionar($e);
33   -
34   - try {
35   - LogSEI::getInstance()->gravar(InfraException::inspecionar($e));
36   - } catch (Exception $e) {
37   -
38   - }
39   -
40   - exit(1);
41   -}
42   -
43   -print PHP_EOL;
44   -
45   -/**
46   - # Apagar modulo PEN no SEI pelo MySQL
47   -
48   - SET FOREIGN_KEY_CHECKS = 0;
49   - DROP TABLE `sei`.`pen_componente_digital`;
50   - DROP TABLE `sei`.`pen_envio_recebimento_tramite`;
51   - DROP TABLE `sei`.`pen_especie_documental`;
52   - DROP TABLE `sei`.`pen_procedimento_andamento`;
53   - DROP TABLE `sei`.`pen_procedimento_expedir_andamento`;
54   - DROP TABLE `sei`.`pen_processo_eletronico`;
55   - DROP TABLE `sei`.`pen_protocolo`;
56   - DROP TABLE `sei`.`pen_receber_tramites_recusados`;
57   - DROP TABLE `sei`.`pen_recibo_tramite`;
58   - DROP TABLE `sei`.`pen_recibo_tramite_enviado`;
59   - DROP TABLE `sei`.`pen_recibo_tramite_recebido`;
60   - DROP TABLE `sei`.`pen_rel_processo_apensado`;
61   - DROP TABLE `sei`.`pen_rel_serie_especie`;
62   - DROP TABLE `sei`.`pen_rel_tarefa_operacao`;
63   - DROP TABLE `sei`.`pen_rel_tipo_documento_mapeamento_recebido`;
64   - DROP TABLE `sei`.`pen_tramite`;
65   - DROP TABLE `sei`.`pen_tramite_pendente`;
66   - ALTER TABLE unidade DROP COLUMN id_unidade_rh;
67   - SET FOREIGN_KEY_CHECKS = 1;
68   -
69   -
70   - */
71 0 \ No newline at end of file
sip_atualizar_versao_modulo_pen.php
... ... @@ -1,1258 +0,0 @@
1   -<?php
2   -require_once dirname(__FILE__).'/Sip.php';
3   -
4   -set_include_path(implode(PATH_SEPARATOR, array(
5   - realpath(__DIR__ . '/../infra_php'),
6   - get_include_path(),
7   -)));
8   -
9   -
10   -/**
11   - * Mapeamento dos metadados sobre a estrutura do banco de dados
12   - *
13   - * @author Join Tecnologia
14   - */
15   -class PenMetaBD extends InfraMetaBD {
16   -
17   - const NNULLO = 'NOT NULL';
18   - const SNULLO = 'NULL';
19   -
20   - /**
21   - *
22   - * @return string
23   - */
24   - public function adicionarValorPadraoParaColuna($strNomeTabela, $strNomeColuna, $strValorPadrao, $bolRetornarQuery = false){
25   -
26   - $objInfraBanco = $this->getObjInfraIBanco();
27   -
28   - $strTableDrive = get_parent_class($objInfraBanco);
29   - $strQuery = '';
30   -
31   - switch($strTableDrive) {
32   -
33   - case 'InfraMySqli':
34   - $strQuery = sprintf("ALTER TABLE `%s` ALTER COLUMN `%s` SET DEFAULT '%s'", $strNomeTabela, $strNomeColuna, $strValorPadrao);
35   - break;
36   -
37   - case 'InfraSqlServer':
38   - $strQuery = sprintf("ALTER TABLE [%s] ADD DEFAULT('%s') FOR [%s]", $strNomeTabela, $strValorPadrao, $strNomeColuna);
39   -
40   - case 'InfraOracle':
41   - break;
42   - }
43   -
44   - if($bolRetornarQuery === false) {
45   -
46   - $objInfraBanco->executarSql($strQuery);
47   - }
48   - else {
49   -
50   - return $strQuery;
51   - }
52   - }
53   -
54   - /**
55   - * Verifica se o usuário do drive de conexão possui permissão para criar/ remover
56   - * estruturas
57   - *
58   - * @return PenMetaBD
59   - */
60   - public function isDriverPermissao(){
61   -
62   - $objInfraBanco = $this->getObjInfraIBanco();
63   -
64   - if(count($this->obterTabelas('sei_teste'))==0){
65   - $objInfraBanco->executarSql('CREATE TABLE sei_teste (id '.$this->tipoNumero().' NULL)');
66   - }
67   -
68   - $objInfraBanco->executarSql('DROP TABLE sei_teste');
69   -
70   - return $this;
71   - }
72   -
73   - /**
74   - * Verifica se o banco do SEI é suportador pelo atualizador
75   - *
76   - * @throws InfraException
77   - * @return PenMetaBD
78   - */
79   - public function isDriverSuportado(){
80   -
81   - $strTableDrive = get_parent_class($this->getObjInfraIBanco());
82   -
83   - switch($strTableDrive) {
84   -
85   - case 'InfraMySqli':
86   - // Fix para bug de MySQL versão inferior ao 5.5 o default engine
87   - // é MyISAM e não tem suporte a FOREING KEYS
88   - $version = $this->getObjInfraIBanco()->consultarSql('SELECT VERSION() as versao');
89   - $version = $version[0]['versao'];
90   - $arrVersion = explode('.', $version);
91   -
92   - if($arrVersion[0].$arrVersion[1] < 57){
93   - $this->getObjInfraIBanco()->executarSql('@SET STORAGE_ENGINE=InnoDB');
94   - }
95   - case 'InfraSqlServer':
96   - case 'InfraOracle':
97   - break;
98   -
99   - default:
100   - throw new InfraException('BANCO DE DADOS NAO SUPORTADO: ' . $strTableDrive);
101   -
102   - }
103   -
104   - return $this;
105   - }
106   -
107   - /**
108   - * Verifica se a versão sistema é compativel com a versão do módulo PEN
109   - *
110   - * @throws InfraException
111   - * @return PenMetaBD
112   - */
113   - public function isVersaoSuportada($strRegexVersaoSistema, $strVerMinRequirida){
114   -
115   - $numVersaoRequerida = intval(preg_replace('/\D+/', '', $strVerMinRequirida));
116   - $numVersaoSistema = intval(preg_replace('/\D+/', '', $strRegexVersaoSistema));
117   -
118   - if($numVersaoRequerida > $numVersaoSistema){
119   - throw new InfraException('VERSAO DO FRAMEWORK PHP INCOMPATIVEL (VERSAO ATUAL '.$strRegexVersaoSistema.', VERSAO REQUERIDA '.$strVerMinRequirida.')');
120   - }
121   -
122   - return $this;
123   - }
124   -
125   - /**
126   - * Apaga a chave primária da tabela
127   - *
128   - * @throws InfraException
129   - * @return PenMetaBD
130   - */
131   - public function removerChavePrimaria($strNomeTabela, $strNomeChave){
132   -
133   - if($this->isChaveExiste($strNomeTabela, $strNomeChave)) {
134   -
135   - $strTableDrive = get_parent_class($this->getObjInfraIBanco());
136   -
137   - switch($strTableDrive) {
138   -
139   - case 'InfraMySqli':
140   - $this->getObjInfraIBanco()->executarSql('ALTER TABLE '.$strNomeTabela.' DROP PRIMARY KEY');
141   - break;
142   -
143   - case 'InfraSqlServer':
144   - $this->getObjInfraIBanco()->executarSql('ALTER TABLE '.$strNomeTabela.' DROP CONSTRAINT '.$strNomeChave);
145   - break;
146   -
147   - case 'InfraOracle':
148   - break;
149   - }
150   - }
151   - return $this;
152   - }
153   -
154   - public function isChaveExiste($strNomeTabela = '', $strNomeChave = ''){
155   -
156   - $objInfraBanco = $this->getObjInfraIBanco();
157   - $strTableDrive = get_parent_class($objInfraBanco);
158   -
159   - switch($strTableDrive) {
160   -
161   - case 'InfraMySqli':
162   - $strSql = " SELECT COUNT(CONSTRAINT_NAME) AS EXISTE
163   - FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
164   - WHERE CONSTRAINT_SCHEMA = '".$objInfraBanco->getBanco()."'
165   - AND TABLE_NAME = '".$strNomeTabela."'
166   - AND CONSTRAINT_NAME = '".$strNomeChave."'";
167   - break;
168   -
169   - case 'InfraSqlServer':
170   -
171   - $strSql = " SELECT COUNT(CONSTRAINT_NAME) AS EXISTE
172   - FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
173   - WHERE CONSTRAINT_CATALOG = '".$objInfraBanco->getBanco()."'
174   - AND TABLE_NAME = '".$strNomeTabela."'
175   - AND CONSTRAINT_NAME = '".$strNomeChave."'";
176   - break;
177   -
178   - case 'InfraOracle':
179   - $strSql = "SELECT 0 AS EXISTE";
180   - break;
181   - }
182   -
183   - $strSql = preg_replace('/\s+/', ' ', $strSql);
184   - $arrDados = $objInfraBanco->consultarSql($strSql);
185   -
186   - return (intval($arrDados[0]['EXISTE']) > 0) ? true : false;
187   - }
188   -
189   - public function adicionarChaveUnica($strNomeTabela = '', $arrNomeChave = array()){
190   -
191   - $this->getObjInfraIBanco()
192   - ->executarSql('ALTER TABLE '.$strNomeTabela.' ADD CONSTRAINT UK_'.$strNomeTabela.' UNIQUE('.implode(', ', $arrNomeChave).')');
193   - }
194   -
195   - public function renomearTabela($strNomeTabelaAtual, $strNomeTabelaNovo){
196   -
197   - if($this->isTabelaExiste($strNomeTabelaAtual)) {
198   -
199   - $objInfraBanco = $this->getObjInfraIBanco();
200   -
201   - $strTableDrive = get_parent_class($objInfraBanco);
202   - $strQuery = '';
203   -
204   - switch ($strTableDrive) {
205   -
206   - case 'InfraMySqli':
207   - $strQuery = sprintf("ALTER TABLE `%s` RENAME TO `%s`", $strNomeTabelaAtual, $strNomeTabelaNovo);
208   - break;
209   -
210   - case 'InfraSqlServer':
211   - $strQuery = sprintf("sp_rename '%s', '%s'", $strNomeTabelaAtual, $strNomeTabelaNovo);
212   -
213   - case 'InfraOracle':
214   - $strQuery = sprintf("RENAME TABLE %s TO %s", $strNomeTabelaAtual, $strNomeTabelaNovo);
215   - break;
216   - }
217   -
218   - $objInfraBanco->executarSql($strQuery);
219   - }
220   - }
221   -
222   -
223   - /**
224   - * Verifica se uma tabela existe no banco
225   - *
226   - * @throws InfraException
227   - * @return bool
228   - */
229   - public function isTabelaExiste($strNomeTabela = ''){
230   -
231   - $objInfraBanco = $this->getObjInfraIBanco();
232   - $strTableDrive = get_parent_class($objInfraBanco);
233   -
234   - switch($strTableDrive) {
235   -
236   - case 'InfraMySqli':
237   - $strSql = "SELECT COUNT(TABLE_NAME) AS EXISTE
238   - FROM INFORMATION_SCHEMA.TABLES
239   - WHERE TABLE_SCHEMA = '".$objInfraBanco->getBanco()."'
240   - AND TABLE_NAME = '".$strNomeTabela."'";
241   - break;
242   -
243   - case 'InfraSqlServer':
244   -
245   - $strSql = "SELECT COUNT(TABLE_NAME) AS EXISTE
246   - FROM INFORMATION_SCHEMA.TABLES
247   - WHERE TABLE_CATALOG = '".$objInfraBanco->getBanco()."'
248   - AND TABLE_NAME = '".$strNomeTabela."'";
249   - break;
250   -
251   - case 'InfraOracle':
252   - $strSql = "SELECT 0 AS EXISTE";
253   - break;
254   - }
255   -
256   - $strSql = preg_replace('/\s+/', ' ', $strSql);
257   - $arrDados = $objInfraBanco->consultarSql($strSql);
258   -
259   - return (intval($arrDados[0]['EXISTE']) > 0) ? true : false;
260   - }
261   -
262   - public function isColuna($strNomeTabela = '', $strNomeColuna = ''){
263   -
264   - $objInfraBanco = $this->getObjInfraIBanco();
265   - $strTableDrive = get_parent_class($objInfraBanco);
266   -
267   - switch($strTableDrive) {
268   -
269   - case 'InfraMySqli':
270   - $strSql = "SELECT COUNT(TABLE_NAME) AS EXISTE
271   - FROM INFORMATION_SCHEMA.COLUMNS
272   - WHERE TABLE_SCHEMA = '".$objInfraBanco->getBanco()."'
273   - AND TABLE_NAME = '".$strNomeTabela."'
274   - AND COLUMN_NAME = '".$strNomeColuna."'";
275   - break;
276   -
277   - case 'InfraSqlServer':
278   -
279   - $strSql = "SELECT COUNT(COLUMN_NAME) AS EXISTE
280   - FROM INFORMATION_SCHEMA.COLUMNS
281   - WHERE TABLE_CATALOG = '".$objInfraBanco->getBanco()."'
282   - AND TABLE_NAME = '".$strNomeTabela."'
283   - AND COLUMN_NAME = '".$strNomeColuna."'";
284   - break;
285   -
286   - case 'InfraOracle':
287   - $strSql = "SELECT 0 AS EXISTE";
288   - break;
289   - }
290   -
291   - $strSql = preg_replace('/\s+/', ' ', $strSql);
292   - $arrDados = $objInfraBanco->consultarSql($strSql);
293   -
294   - return (intval($arrDados[0]['EXISTE']) > 0) ? true : false;
295   -
296   -
297   - }
298   -
299   - /**
300   - * Cria a estrutura da tabela no padrão ANSI
301   - *
302   - * @throws InfraException
303   - * @return PenMetaBD
304   - */
305   - public function criarTabela($arrSchema = array()){
306   -
307   - $strNomeTabela = $arrSchema['tabela'];
308   -
309   -
310   - if($this->isTabelaExiste($strNomeTabela)) {
311   - return $this;
312   - }
313   -
314   - $objInfraBanco = $this->getObjInfraIBanco();
315   - $arrColunas = array();
316   - $arrStrQuery = array();
317   -
318   - foreach($arrSchema['cols'] as $strNomeColuna => $arrColunaConfig) {
319   -
320   - list($strTipoDado, $strValorPadrao) = $arrColunaConfig;
321   -
322   - if($strValorPadrao != self::SNULLO && $strValorPadrao != self::NNULLO) {
323   -
324   - $arrStrQuery[] = $this->adicionarValorPadraoParaColuna($strNomeTabela, $strNomeColuna, $strValorPadrao, true);
325   - $strValorPadrao = self::NNULLO;
326   - }
327   -
328   - $arrColunas[] = $strNomeColuna.' '.$strTipoDado.' '.$strValorPadrao;
329   - }
330   -
331   - $objInfraBanco->executarSql('CREATE TABLE '.$strNomeTabela.' ('.implode(', ', $arrColunas).')');
332   -
333   - if(!empty($arrSchema['pk'])) {
334   -
335   - $this->adicionarChavePrimaria($strNomeTabela, 'pk_'.$strNomeTabela, $arrSchema['pk']);
336   -
337   - if(count($arrSchema['pk']) > 1) {
338   -
339   - foreach($arrSchema['pk'] as $strPk) {
340   -
341   - $objInfraBanco->executarSql('CREATE INDEX idx_'.$strNomeTabela.'_'.$strPk.' ON '.$strNomeTabela.'('.$strPk.')');
342   - }
343   - }
344   - }
345   -
346   - if(array_key_exists('uk', $arrSchema) && !empty($arrSchema['uk'])) {
347   -
348   - $this->adicionarChaveUnica($strNomeTabela, $arrSchema['uk']);
349   - }
350   -
351   - if(!empty($arrSchema['fks'])) {
352   -
353   - foreach($arrSchema['fks'] as $strTabelaOrigem => $array) {
354   -
355   - $strNomeFK = 'fk_'.$strNomeTabela.'_'.$strTabelaOrigem;
356   - $arrCamposOrigem = (array)array_shift($array);
357   - $arrCampos = $arrCamposOrigem;
358   -
359   - if(!empty($array)) {
360   - $arrCampos = (array)array_shift($array);
361   - }
362   -
363   - $this->adicionarChaveEstrangeira($strNomeFK, $strNomeTabela, $arrCampos, $strTabelaOrigem, $arrCamposOrigem);
364   - }
365   - }
366   -
367   - if(!empty($arrStrQuery)) {
368   -
369   - foreach($arrStrQuery as $strQuery) {
370   - $objInfraBanco->executarSql($strQuery);
371   - }
372   - }
373   -
374   - return $this;
375   - }
376   -
377   - /**
378   - * Apagar a estrutura da tabela no banco de dados
379   - *
380   - * @throws InfraException
381   - * @return PenMetaBD
382   - */
383   - public function removerTabela($strNomeTabela = ''){
384   -
385   - $this->getObjInfraIBanco()->executarSql('DROP TABLE '.$strNomeTabela);
386   - return $this;
387   - }
388   -
389   - public function adicionarChaveEstrangeira($strNomeFK, $strTabela, $arrCampos, $strTabelaOrigem, $arrCamposOrigem) {
390   -
391   - if(!$this->isChaveExiste($strTabela, $strNomeFK)) {
392   - parent::adicionarChaveEstrangeira($strNomeFK, $strTabela, $arrCampos, $strTabelaOrigem, $arrCamposOrigem);
393   - }
394   - return $this;
395   - }
396   -
397   - public function adicionarChavePrimaria($strTabela, $strNomePK, $arrCampos) {
398   -
399   - if(!$this->isChaveExiste($strTabela, $strNomePK)) {
400   - parent::adicionarChavePrimaria($strTabela, $strNomePK, $arrCampos);
401   - }
402   - return $this;
403   - }
404   -
405   - public function alterarColuna($strTabela, $strColuna, $strTipo, $strNull = '') {
406   - parent::alterarColuna($strTabela, $strColuna, $strTipo, $strNull);
407   - return $this;
408   - }
409   -
410   - public function excluirIndice($strTabela, $strIndex) {
411   - if($this->isChaveExiste($strTabela, $strFk)) {
412   - parent::excluirIndice($strTabela, $strIndex);
413   - }
414   - return $this;
415   - }
416   -
417   - public function excluirChaveEstrangeira($strTabela, $strFk) {
418   - if($this->isChaveExiste($strTabela, $strFk)) {
419   - parent::excluirChaveEstrangeira($strTabela, $strFk);
420   - }
421   - return $this;
422   - }
423   -}
424   -
425   -abstract class PenAtualizadorRN extends InfraRN {
426   -
427   - const VER_NONE = '0.0.0'; // Modulo não instalado
428   - const VER_001 = '0.0.1';
429   - const VER_002 = '0.0.2';
430   - const VER_003 = '0.0.3';
431   - const VER_004 = '0.0.4';
432   - const VER_005 = '0.0.5';
433   -
434   - protected $sei_versao;
435   -
436   - /**
437   - * @var string Versão mínima requirida pelo sistema para instalação do PEN
438   - */
439   - protected $versaoMinRequirida;
440   -
441   - /**
442   - * @var InfraIBanco Instância da classe de persistência com o banco de dados
443   - */
444   - protected $objBanco;
445   -
446   - /**
447   - * @var InfraMetaBD Instância do metadata do banco de dados
448   - */
449   - protected $objMeta;
450   -
451   - /**
452   - * @var InfraDebug Instância do debuger
453   - */
454   - protected $objDebug;
455   -
456   - /**
457   - * @var integer Tempo de execução do script
458   - */
459   - protected $numSeg = 0;
460   -
461   - /**
462   - * @var array Argumentos passados por linha de comando ao script
463   - */
464   - protected $arrArgs = array();
465   -
466   - /**
467   - * Inicia a conexão com o banco de dados
468   - */
469   - protected function inicializarObjMetaBanco() {
470   - if (empty($this->objMeta)) {
471   - $this->objMeta = new PenMetaBD($this->inicializarObjInfraIBanco());
472   - }
473   - return $this->objMeta;
474   - }
475   -
476   - /**
477   - * Adiciona uma mensagem ao output para o usuário
478   - *
479   - * @return null
480   - */
481   - protected function logar($strMsg) {
482   - $this->objDebug->gravar($strMsg);
483   - }
484   -
485   - /**
486   - * Inicia o script criando um contator interno do tempo de execução
487   - *
488   - * @return null
489   - */
490   - protected function inicializar($strTitulo) {
491   -
492   - $this->numSeg = InfraUtil::verificarTempoProcessamento();
493   -
494   - $this->logar($strTitulo);
495   - }
496   -
497   - /**
498   - * Finaliza o script informando o tempo de execução.
499   - *
500   - * @return null
501   - */
502   - protected function finalizar() {
503   -
504   - $this->logar('TEMPO TOTAL DE EXECUCAO: ' . InfraUtil::verificarTempoProcessamento($this->numSeg) . ' s');
505   -
506   - $this->objDebug->setBolLigado(false);
507   - $this->objDebug->setBolDebugInfra(false);
508   - $this->objDebug->setBolEcho(false);
509   -
510   - print PHP_EOL;
511   - die();
512   - }
513   -
514   - /**
515   - * Método criado em função de um bug com a InfraRN na linha 69, onde usamos
516   - * uma instância do banco do SIP e a versão esta no banco SEI, essa verificação
517   - * e lançamento de uma excessão pelos bancos terem nome diferentes tava o
518   - * atualizado
519   - *
520   - * @todo Migrar para classe PenMetaBD
521   - * @return null
522   - */
523   - protected function setVersao($strRegexVersao, $objInfraBanco = null) {
524   -
525   - InfraDebug::getInstance()->gravarInfra(sprintf('[%s->%s]', get_class($this), __FUNCTION__));
526   -
527   -
528   - if ($this->getVersao($objInfraBanco)) {
529   -
530   - $sql = sprintf("UPDATE infra_parametro SET valor = '%s' WHERE nome = '%s'", $strRegexVersao, $this->sei_versao);
531   - } else {
532   -
533   - $sql = sprintf("INSERT INTO infra_parametro(nome, valor) VALUES('%s', '%s')", $this->sei_versao, $strRegexVersao);
534   - }
535   -
536   - if (empty($objInfraBanco)) {
537   -
538   - $objInfraBanco = $this->inicializarObjInfraIBanco();
539   - }
540   -
541   - $objInfraBanco->executarSql($sql);
542   -
543   - return $strRegexVersao;
544   - }
545   -
546   - /**
547   - * Retorna a versão atual do modulo, se já foi instalado
548   - *
549   - * @todo Migrar para classe PenMetaBD
550   - * @param InfraBanco $objInfraBanco Conexão com o banco SEI ou SIP
551   - * @return string
552   - */
553   - protected function getVersao($objInfraBanco = null) {
554   -
555   - InfraDebug::getInstance()->gravarInfra(sprintf('[%s->%s]', get_class($this), __FUNCTION__));
556   -
557   - $sql = sprintf("SELECT valor FROM infra_parametro WHERE nome = '%s'", $this->sei_versao);
558   -
559   - if (empty($objInfraBanco)) {
560   -
561   - $objInfraBanco = $this->inicializarObjInfraIBanco();
562   - }
563   -
564   - $arrResultado = $objInfraBanco->consultarSql($sql);
565   -
566   - if (empty($arrResultado)) {
567   - return null;
568   - }
569   -
570   - $arrLinha = current($arrResultado);
571   -
572   - return $arrLinha['valor'];
573   - }
574   -
575   - /**
576   - * Verifica se o número da versão é valido
577   - *
578   - * @param string $strVersao Versão a ser instalada
579   - * @return bool
580   - */
581   - protected function isVersaoValida($strVersao = self::VER_NONE) {
582   -
583   - if (empty($strVersao)) {
584   - return false;
585   - }
586   -
587   - // Remove os caracteres não númericos
588   - $strVersao = preg_replace('/\D+/', '', $strVersao);
589   -
590   - // Tem que no mínimo 3 digitos
591   - if (strlen($strVersao) < 3) {
592   - return false;
593   - }
594   -
595   - return is_numeric($strVersao) ? true : false;
596   - }
597   -
598   - /**
599   - * Verifica se um paramêtro existe, caso sim retorna o seu valor, senão
600   - * retorna o default especificado.
601   - *
602   - * @param string $strChave Nome do paramêtro
603   - * @param string $strParam String a ser formatada com o valor do paramêtro
604   - * @param string $strParamDefault String que retorna caso o valor do
605   - * paramêtro não exista
606   - * @param bool $bolAlgumFiltroUsado Ponteiro de controle para verificar se
607   - * pelo menos um paramêtro foi encontrado
608   - * @return string
609   - */
610   - private function getStrArg($strChave = '', $strParam = '', $strParamDefault = '', &$bolAlgumFiltroUsado) {
611   -
612   - if (array_key_exists($strChave, $this->arrArgs)) {
613   - $bolAlgumFiltroUsado = true;
614   - return sprintf($strParam, str_pad($this->arrArgs[$strChave], 3, '0', STR_PAD_LEFT));
615   - }
616   - return $strParamDefault;
617   - }
618   -
619   - /**
620   - * Retorna a última versão disponivel. Verifica as constantes que iniciam
621   - * com VER_
622   - */
623   - private function getUltimaVersao() {
624   -
625   - $objReflection = new ReflectionClass(__CLASS__);
626   - $arrVersao = array_flip(preg_grep('/^VER\_/', array_flip($objReflection->getConstants())));
627   - sort($arrVersao);
628   - return array_pop($arrVersao);
629   - }
630   -
631   - /**
632   - * Encontra os métodos com notação para instalar a versão selecionada
633   - *
634   - * @return string Número da versão
635   - */
636   - protected function executarControlado() {
637   -
638   - $this->inicializarObjMetaBanco()
639   - ->isDriverSuportado()
640   - ->isDriverPermissao();
641   - //->isVersaoSuportada(SEI_VERSAO, $this->versaoMinRequirida);
642   -
643   - $arrMetodo = array();
644   -
645   - // Retorna a última versão disponibilizada pelo script. Sempre tenta atualizar
646   - // para versão mais antiga
647   - $strVersaoInstalar = $this->getUltimaVersao();
648   -
649   - //throw new InfraException($strVersaoInstalar);
650   - $objInfraBanco = $this->inicializarObjInfraIBanco();
651   - // Versão atual
652   - $strPenVersao = $this->getVersao($objInfraBanco);
653   - if (!$this->isVersaoValida($strPenVersao)) {
654   - // Não instalado
655   - $strPenVersao = $this->setVersao(self::VER_NONE, $objInfraBanco);
656   - }
657   -
658   - $numPenVersao = substr($strPenVersao, -1);
659   - $numVersaoInstalar = intval(substr($strVersaoInstalar, -1));
660   -
661   - $bolAlgumFiltroUsado = false;
662   - $strRegexRelease = $this->getStrArg('release', '(R%s)', '(R[0-9]{1,3})?', $bolAlgumFiltroUsado);
663   - $strRegexSprint = $this->getStrArg('sprint', '(S%s)', '(S[0-9]{1,3})?', $bolAlgumFiltroUsado);
664   - $strRegexItem = $this->getStrArg('user-story', '(US%s)', '(US|IW[0-9]{1,3})?', $bolAlgumFiltroUsado);
665   - $strRegexItem = $this->getStrArg('item-worker', '(IW%s)', $strRegexItem, $bolAlgumFiltroUsado);
666   -
667   - // Instalar todas atualizações
668   - if ($bolAlgumFiltroUsado === false) {
669   -
670   - $strRegexVersao = sprintf('[%d-%d]', ($numPenVersao + 1), $numVersaoInstalar);
671   - }
672   - // Instalar somente a solicitada
673   - else {
674   - // Caso algum paramêtro seja adicionado não deve passar para próxima versão
675   - $strVersaoInstalar = $strPenVersao;
676   - $strRegexVersao = intval(substr($strPenVersao, -1) + 1);
677   - }
678   -
679   - // instalarV[0-9]{1,2}[0-9](R[0-9]{1,3})?(S[0-9]{1,3})?(US|IW[0-9]{1,4})?
680   - $strRegex = sprintf('/^instalarV[0-9][0-9]%s%s%s%s/i', $strRegexVersao, $strRegexRelease, $strRegexSprint, $strRegexItem
681   - );
682   -
683   - // Tenta encontrar métodos que iniciem com instalar
684   - $arrMetodo = (array) preg_grep($strRegex, get_class_methods($this));
685   -
686   - if (empty($arrMetodo)) {
687   -
688   - throw new InfraException(sprintf('NENHUMA ATUALIZACAO FOI ENCONTRADA SUPERIOR A VERSAO %s DO MODULO PEN', $strPenVersao));
689   - } else {
690   -
691   - foreach ($arrMetodo as $strMetodo) {
692   -
693   - $this->{$strMetodo}();
694   - }
695   - }
696   - $this->setVersao($strVersaoInstalar, $objInfraBanco);
697   -
698   - return $strVersaoInstalar;
699   - }
700   -
701   - /**
702   - * Método que inicia o processo
703   - */
704   - public function atualizarVersao() {
705   -
706   - $this->inicializar('INICIANDO ATUALIZACAO DO MODULO PEN NO SEI VERSAO ' . SIP_VERSAO);
707   -
708   - try {
709   -
710   - $strRegexVersao = $this->executar();
711   - $this->logar('ATUALIZADA VERSAO: ' . $strRegexVersao);
712   - } catch (InfraException $e) {
713   -
714   - $this->logar('Erro: ' . $e->getStrDescricao());
715   - } catch (\Exception $e) {
716   -
717   - $this->logar('Erro: ' . $e->getMessage());
718   - }
719   -
720   - $this->finalizar();
721   - }
722   -
723   - /**
724   - * Construtor
725   - *
726   - * @param array $arrArgs Argumentos enviados pelo script
727   - */
728   - public function __construct($arrArgs = array()) {
729   -
730   - ini_set('max_execution_time', '0');
731   - ini_set('memory_limit', '-1');
732   - @ini_set('zlib.output_compression', '0');
733   - @ini_set('implicit_flush', '1');
734   - ob_implicit_flush();
735   -
736   - $this->arrArgs = $arrArgs;
737   -
738   - $this->inicializarObjMetaBanco();
739   -
740   - $this->objDebug = InfraDebug::getInstance();
741   - $this->objDebug->setBolLigado(true);
742   - $this->objDebug->setBolDebugInfra(true);
743   - $this->objDebug->setBolEcho(true);
744   - $this->objDebug->limpar();
745   - }
746   -
747   -}
748   -
749   -class PenAtualizarSipRN extends PenAtualizadorRN {
750   -
751   - protected $versaoMinRequirida = '1.30.0';
752   - protected $sei_versao = 'PEN_VERSAO_MODULO_SIP';
753   - private $arrRecurso = array();
754   - private $arrMenu = array();
755   -
756   - /**
757   - * Retorna/Cria a conexão com o banco de dados
758   - *
759   - * @return InfraIBanco
760   - */
761   - protected function inicializarObjInfraIBanco() {
762   - if (empty($this->objBanco)) {
763   -
764   - $this->objBanco = BancoSip::getInstance();
765   - }
766   - return $this->objBanco;
767   - }
768   -
769   - /**
770   - * Retorna o ID do sistema
771   - *
772   - * @return int
773   - */
774   - protected function getNumIdSistema($strSigla = 'SIP') {
775   -
776   - $objDTO = new SistemaDTO();
777   - $objDTO->setStrSigla($strSigla);
778   - $objDTO->setNumMaxRegistrosRetorno(1);
779   - $objDTO->retNumIdSistema();
780   -
781   - $objRN = new SistemaRN();
782   - $objDTO = $objRN->consultar($objDTO);
783   -
784   - return (empty($objDTO)) ? '0' : $objDTO->getNumIdSistema();
785   - }
786   -
787   - /**
788   - *
789   - * @return int Código do Menu
790   - */
791   - protected function getNumIdMenu($strMenu = 'Principal', $numIdSistema = 0) {
792   -
793   - $objDTO = new MenuDTO();
794   - $objDTO->setNumIdSistema($numIdSistema);
795   - $objDTO->setStrNome($strMenu);
796   - $objDTO->setNumMaxRegistrosRetorno(1);
797   - $objDTO->retNumIdMenu();
798   -
799   - $objRN = new MenuRN();
800   - $objDTO = $objRN->consultar($objDTO);
801   -
802   - if (empty($objDTO)) {
803   - throw new InfraException('Menu ' . $strMenu . ' não encontrado.');
804   - }
805   -
806   - return $objDTO->getNumIdMenu();
807   - }
808   -
809   - /**
810   - *
811   - * @return int Código do Recurso gerado
812   - */
813   - protected function criarRecurso($strNome = '', $strDescricao = null, $numIdSistema = 0) {
814   -
815   - $objDTO = new RecursoDTO();
816   - $objDTO->setNumIdSistema($numIdSistema);
817   - $objDTO->setStrNome($strNome);
818   - $objDTO->setNumMaxRegistrosRetorno(1);
819   - $objDTO->retNumIdRecurso();
820   -
821   - $objBD = new RecursoBD($this->getObjInfraIBanco());
822   - $objDTO = $objBD->consultar($objDTO);
823   -
824   - if (empty($objDTO)) {
825   -
826   - $objDTO = new RecursoDTO();
827   - $objDTO->setNumIdRecurso(null);
828   - $objDTO->setStrDescricao($strDescricao);
829   - $objDTO->setNumIdSistema($numIdSistema);
830   - $objDTO->setStrNome($strNome);
831   - $objDTO->setStrCaminho('controlador.php?acao=' . $strNome);
832   - $objDTO->setStrSinAtivo('S');
833   -
834   - $objDTO = $objBD->cadastrar($objDTO);
835   - }
836   -
837   - $this->arrRecurso[] = $objDTO->getNumIdRecurso();
838   -
839   - return $objDTO->getNumIdRecurso();
840   - }
841   -
842   - /**
843   - * Cria um menu
844   - *
845   - * @return int
846   - */
847   - protected function criarMenu($strRotulo = '', $numSequencia = 10, $numIdItemMenuPai = null, $numIdMenu = null, $numIdRecurso = null, $numIdSistema = 0) {
848   -
849   - $objDTO = new ItemMenuDTO();
850   - $objDTO->setNumIdItemMenuPai($numIdItemMenuPai);
851   - $objDTO->setNumIdSistema($numIdSistema);
852   - $objDTO->setStrRotulo($strRotulo);
853   - $objDTO->setNumIdRecurso($numIdRecurso);
854   - $objDTO->setNumMaxRegistrosRetorno(1);
855   - $objDTO->retNumIdItemMenu();
856   -
857   - $objBD = new ItemMenuBD($this->inicializarObjInfraIBanco());
858   - $objDTO = $objBD->consultar($objDTO);
859   -
860   - if (empty($objDTO)) {
861   -
862   - $objDTO = new ItemMenuDTO();
863   - $objDTO->setNumIdMenu($numIdMenu);
864   - $objDTO->setNumIdMenuPai($numIdMenu);
865   - $objDTO->setNumIdItemMenu(null);
866   - $objDTO->setNumIdItemMenuPai($numIdItemMenuPai);
867   - $objDTO->setNumIdSistema($numIdSistema);
868   - $objDTO->setNumIdRecurso($numIdRecurso);
869   - $objDTO->setStrRotulo($strRotulo);
870   - $objDTO->setStrDescricao(null);
871   - $objDTO->setNumSequencia($numSequencia);
872   - $objDTO->setStrSinNovaJanela('N');
873   - $objDTO->setStrSinAtivo('S');
874   -
875   - $objDTO = $objBD->cadastrar($objDTO);
876   - }
877   -
878   - if (!empty($numIdRecurso)) {
879   -
880   - $this->arrMenu[] = array($objDTO->getNumIdItemMenu(), $numIdMenu, $numIdRecurso);
881   - }
882   -
883   - return $objDTO->getNumIdItemMenu();
884   - }
885   -
886   - public function addRecursosToPerfil($numIdPerfil, $numIdSistema) {
887   -
888   - if (!empty($this->arrRecurso)) {
889   -
890   - $objDTO = new RelPerfilRecursoDTO();
891   - $objBD = new RelPerfilRecursoBD($this->inicializarObjInfraIBanco());
892   -
893   - foreach ($this->arrRecurso as $numIdRecurso) {
894   -
895   - $objDTO->setNumIdSistema($numIdSistema);
896   - $objDTO->setNumIdPerfil($numIdPerfil);
897   - $objDTO->setNumIdRecurso($numIdRecurso);
898   -
899   - if ($objBD->contar($objDTO) == 0) {
900   - $objBD->cadastrar($objDTO);
901   - }
902   - }
903   - }
904   - }
905   -
906   - public function addMenusToPerfil($numIdPerfil, $numIdSistema) {
907   -
908   - if (!empty($this->arrMenu)) {
909   -
910   - $objDTO = new RelPerfilItemMenuDTO();
911   - $objBD = new RelPerfilItemMenuBD($this->inicializarObjInfraIBanco());
912   -
913   - foreach ($this->arrMenu as $array) {
914   -
915   - list($numIdItemMenu, $numIdMenu, $numIdRecurso) = $array;
916   -
917   - $objDTO->setNumIdPerfil($numIdPerfil);
918   - $objDTO->setNumIdSistema($numIdSistema);
919   - $objDTO->setNumIdRecurso($numIdRecurso);
920   - $objDTO->setNumIdMenu($numIdMenu);
921   - $objDTO->setNumIdItemMenu($numIdItemMenu);
922   -
923   - if ($objBD->contar($objDTO) == 0) {
924   - $objBD->cadastrar($objDTO);
925   - }
926   - }
927   - }
928   - }
929   -
930   - public function atribuirPerfil($numIdSistema) {
931   -
932   - $objDTO = new PerfilDTO();
933   - $objBD = new PerfilBD($this->inicializarObjInfraIBanco());
934   - $objRN = $this;
935   -
936   - // Vincula a um perfil os recursos e menus adicionados nos métodos criarMenu e criarReturso
937   - $fnCadastrar = function($strNome, $numIdSistema) use($objDTO, $objBD, $objRN) {
938   -
939   - $objDTO->unSetTodos();
940   - $objDTO->setNumIdSistema($numIdSistema);
941   - $objDTO->setStrNome($strNome, InfraDTO::$OPER_LIKE);
942   - $objDTO->setNumMaxRegistrosRetorno(1);
943   - $objDTO->retNumIdPerfil();
944   -
945   - $objPerfilDTO = $objBD->consultar($objDTO);
946   -
947   - if (!empty($objPerfilDTO)) {
948   - $objRN->addRecursosToPerfil($objPerfilDTO->getNumIdPerfil(), $numIdSistema);
949   - $objRN->addMenusToPerfil($objPerfilDTO->getNumIdPerfil(), $numIdSistema);
950   - }
951   - };
952   -
953   - $fnCadastrar('ADMINISTRADOR', $numIdSistema);
954   - $fnCadastrar('BASICO', $numIdSistema);
955   - }
956   -
957   - /**
958   - * Instala/Atualiza os módulo PEN para versão 1.0
959   - */
960   - protected function instalarV001() {
961   -
962   - $numIdSistema = $this->getNumIdSistema('SEI');
963   - $numIdMenu = $this->getNumIdMenu('Principal', $numIdSistema);
964   -
965   - //----------------------------------------------------------------------
966   - // Expedir procedimento
967   - //----------------------------------------------------------------------
968   - $this->criarRecurso('pen_procedimento_expedir', 'Expedir Procedimento', $numIdSistema);
969   - $this->criarRecurso('apensados_selecionar_expedir_procedimento', 'Processos Apensados', $numIdSistema);
970   - $numIdRecurso = $this->criarRecurso('pen_procedimento_expedido_listar', 'Processos Expedidos', $numIdSistema);
971   - $this->criarMenu('Processos Expedidos', 55, null, $numIdMenu, $numIdRecurso, $numIdSistema);
972   - //----------------------------------------------------------------------
973   - // Mapeamento de documentos enviados
974   - //----------------------------------------------------------------------
975   - $this->criarRecurso('pen_map_tipo_doc_enviado_visualizar', 'Visualização de mapeamento de documentos enviados', $numIdSistema);
976   -
977   - // Acha o menu existente de Tipos de Documento
978   - $objItemMenuDTO = new ItemMenuDTO();
979   - $objItemMenuDTO->setNumIdSistema($numIdSistema);
980   - $objItemMenuDTO->setNumIdMenu($numIdMenu);
981   - $objItemMenuDTO->setStrRotulo('Tipos de Documento');
982   - $objItemMenuDTO->setNumMaxRegistrosRetorno(1);
983   - $objItemMenuDTO->retNumIdItemMenu();
984   -
985   - $objItemMenuBD = new ItemMenuBD($this->inicializarObjInfraIBanco());
986   - $objItemMenuDTO = $objItemMenuBD->consultar($objItemMenuDTO);
987   -
988   - if (empty($objItemMenuDTO)) {
989   - throw new InfraException('Menu "Tipo de Documentos" não foi localizado');
990   - }
991   -
992   - $numIdItemMenuPai = $objItemMenuDTO->getNumIdItemMenu();
993   -
994   - // Gera o submenu Mapeamento
995   - $_numIdItemMenuPai = $this->criarMenu('Mapeamento', 50, $numIdItemMenuPai, $numIdMenu, null, $numIdSistema);
996   -
997   - // Gera o submenu Mapeamento > Envio
998   - $numIdItemMenuPai = $this->criarMenu('Envio', 10, $_numIdItemMenuPai, $numIdMenu, null, $numIdSistema);
999   -
1000   - // Gera o submenu Mapeamento > Envio > Cadastrar
1001   - $numIdRecurso = $this->criarRecurso('pen_map_tipo_doc_enviado_cadastrar', 'Cadastro de mapeamento de documentos enviados', $numIdSistema);
1002   - $this->criarMenu('Cadastrar', 10, $numIdItemMenuPai, $numIdMenu, $numIdRecurso, $numIdSistema);
1003   -
1004   - // Gera o submenu Mapeamento > Envio > Listar
1005   - $numIdRecurso = $this->criarRecurso('pen_map_tipo_doc_enviado_listar', 'Listagem de mapeamento de documentos enviados', $numIdSistema);
1006   - $this->criarMenu('Listar', 20, $numIdItemMenuPai, $numIdMenu, $numIdRecurso, $numIdSistema);
1007   -
1008   - // Gera o submenu Mapeamento > Recebimento
1009   - $numIdItemMenuPai = $this->criarMenu('Recebimento', 20, $_numIdItemMenuPai, $numIdMenu, null, $numIdSistema);
1010   -
1011   - // Gera o submenu Mapeamento > Recebimento > Cadastrar
1012   - $numIdRecurso = $this->criarRecurso('pen_map_tipo_doc_recebido_cadastrar', 'Cadastro de mapeamento de documentos recebidos', $numIdSistema);
1013   - $this->criarMenu('Cadastrar', 10, $numIdItemMenuPai, $numIdMenu, $numIdRecurso, $numIdSistema);
1014   -
1015   - // Gera o submenu Mapeamento > Recebimento > Listar
1016   - $numIdRecurso = $this->criarRecurso('pen_map_tipo_doc_recebido_listar', 'Listagem de mapeamento de documentos recebidos', $numIdSistema);
1017   - $this->criarMenu('Listar', 20, $numIdItemMenuPai, $numIdMenu, $numIdRecurso, $numIdSistema);
1018   -
1019   - //Atribui as permissões aos recursos e menus
1020   - $this->atribuirPerfil($numIdSistema);
1021   - }
1022   -
1023   - protected function instalarV003R003S003IW001() {
1024   -
1025   -
1026   - $objBD = new ItemMenuBD($this->inicializarObjInfraIBanco());
1027   -
1028   - //----------------------------------------------------------------------
1029   - // Achar o root
1030   -
1031   - $numIdSistema = $this->getNumIdSistema('SEI');
1032   - $numIdMenu = $this->getNumIdMenu('Principal', $numIdSistema);
1033   -
1034   - $objDTO = new ItemMenuDTO();
1035   - $objDTO->setNumIdSistema($numIdSistema);
1036   - $objDTO->setNumIdMenu($numIdMenu);
1037   - $objDTO->setStrRotulo('Administração');
1038   - $objDTO->setNumMaxRegistrosRetorno(1);
1039   - $objDTO->retNumIdItemMenu();
1040   -
1041   - $objDTO = $objBD->consultar($objDTO);
1042   -
1043   - if (empty($objDTO)) {
1044   - throw new InfraException('Menu "Administração" não foi localizado');
1045   - }
1046   -
1047   - $numIdItemMenuRoot = $objDTO->getNumIdItemMenu();
1048   - //----------------------------------------------------------------------
1049   - // Acha o nodo do mapeamento
1050   -
1051   - $objItemMenuDTO = new ItemMenuDTO();
1052   - $objItemMenuDTO->setNumIdSistema($numIdSistema);
1053   - $objItemMenuDTO->setNumIdMenu($numIdMenu);
1054   - $objItemMenuDTO->setStrRotulo('Mapeamento');
1055   - $objItemMenuDTO->setNumSequencia(50);
1056   - $objItemMenuDTO->setNumMaxRegistrosRetorno(1);
1057   - $objItemMenuDTO->retTodos();
1058   -
1059   - $objItemMenuDTO = $objBD->consultar($objItemMenuDTO);
1060   - if (!empty($objItemMenuDTO)) {
1061   -
1062   - $numIdItemMenuMapeamento = $objItemMenuDTO->getNumIdItemMenu();
1063   -
1064   - $objDTO = new ItemMenuDTO();
1065   - $objDTO->setNumIdSistema($numIdSistema);
1066   - $objDTO->setNumIdMenu($numIdMenu);
1067   - $objDTO->setNumIdItemMenuPai($numIdItemMenuMapeamento);
1068   - $objDTO->retTodos();
1069   -
1070   - $arrObjDTO = $objBD->listar($objDTO);
1071   -
1072   - if (!empty($arrObjDTO)) {
1073   -
1074   - $numIdItemMenuPai = $this->criarMenu('Processo Eletrônico Nacional', 0, $numIdItemMenuRoot, $numIdMenu, null, $numIdSistema);
1075   - $numIdItemMenuPai = $this->criarMenu('Mapeamento de Tipos de Documento', 10, $numIdItemMenuPai, $numIdMenu, null, $numIdSistema);
1076   -
1077   - foreach ($arrObjDTO as $objDTO) {
1078   -
1079   - $objDTO->setNumIdItemMenuPai($numIdItemMenuPai);
1080   -
1081   - $objBD->alterar($objDTO);
1082   - }
1083   -
1084   - $objBD->excluir($objItemMenuDTO);
1085   - }
1086   - }
1087   - }
1088   -
1089   -}
1090   -
1091   -class PenConsoleRN extends InfraRN {
1092   -
1093   - protected $objRN;
1094   - protected $strAction;
1095   - protected $arrTokens = array();
1096   - protected $objInfraBanco;
1097   -
1098   - public function __construct($objRN = null, $tokens = array()) {
1099   -
1100   - if(!is_null($objRN)) {
1101   -
1102   - parent::__construct();
1103   -
1104   - if(!is_object($objRN)) {
1105   - throw new InfraException('Requerido objeto Infra');
1106   - }
1107   -
1108   - if(get_parent_class($objRN) !== 'InfraRN') {
1109   - throw new InfraException('Requerido objeto Infra que seja extendido de InfraRN');
1110   - }
1111   -
1112   - $this->objRN = $objRN;
1113   - }
1114   -
1115   - if(empty($tokens)) {
1116   - $tokens = $_SERVER['argv'];
1117   - }
1118   -
1119   - $this->criarTokens($tokens);
1120   - }
1121   -
1122   - /**
1123   - * Inicializador o banco de dados
1124   - */
1125   - protected function inicializarObjInfraIBanco() {
1126   - if(empty($this->objInfraBanco)){
1127   - $this->objInfraBanco = BancoSEI::getInstance();
1128   - }
1129   - return $this->objInfraBanco;
1130   - }
1131   -
1132   - /**
1133   - * Processa os parâmetros passados ao script pelo cli
1134   - *
1135   - * @param array $arguments
1136   - * @return null
1137   - */
1138   - protected function criarTokens($arguments = array()){
1139   -
1140   - if(empty($arguments)) {
1141   - throw new InfraException('Script não pode ser executado pela web');
1142   - }
1143   -
1144   - $strScript = array_shift($arguments);
1145   -
1146   - if(!empty($this->objRN)) {
1147   -
1148   - $strAction = array_shift($arguments);
1149   -
1150   - if(substr($strAction, 0, 2) == '--') {
1151   - throw new InfraException('O primeiro paramêtro deve ser uma action da RN');
1152   - }
1153   -
1154   - $this->strAction = $strAction;
1155   - }
1156   -
1157   - foreach($arguments as $key => $argument) {
1158   -
1159   - if(substr($argument, 0, 2) === '--'){
1160   -
1161   - $string = preg_replace('/^--/', '', $argument);
1162   - $array = explode('=', $string);
1163   -
1164   - $key = array_shift($array);
1165   - $value = (count($array) > 0) ? array_shift($array) : true;
1166   -
1167   - $this->arrTokens[$key] = $value;
1168   - }
1169   - }
1170   - }
1171   -
1172   - /**
1173   - * Retorna os parâmetros
1174   - */
1175   - public function getTokens(){
1176   - return $this->arrTokens;
1177   - }
1178   -
1179   - public function run(){
1180   -
1181   - if(empty($this->objRN)) {
1182   - throw new InfraException('Nenhuma RN foi adicionada ao console');
1183   - }
1184   -
1185   - if(!method_exists($this->objRN, $this->strAction)) {
1186   -
1187   - throw new InfraException(sprintf('Nenhuma ação "%s" foi encontrada em %s '.PHP_EOL.$this->objRN->ajuda(), $this->strAction, get_class($this->objRN)));
1188   - }
1189   -
1190   - if(array_key_exists('ajuda', $this->arrTokens)) {
1191   -
1192   - print $this->objRN->ajuda();
1193   - return true;
1194   - }
1195   -
1196   - return call_user_func(array($this->objRN, $this->strAction), $this->getTokens());
1197   - }
1198   -
1199   - public static function format($strMensagem = '', $strFonte = '', $bolBold = false){
1200   -
1201   - $strBold = ($bolBold !== false) ? '1' : '0';
1202   -
1203   - //$strMensagem = escapeshellarg($strMensagem);
1204   -
1205   - if(!empty($strFonte)) {
1206   -
1207   - switch($strFonte){
1208   -
1209   - case 'green':
1210   - $strMensagem = "\033[".$strBold.";32m".$strMensagem;
1211   - break;
1212   -
1213   - case 'red':
1214   - $strMensagem = "\033[".$strBold.";31m".$strMensagem;
1215   - break;
1216   -
1217   - case 'blue':
1218   - $strMensagem = "\033[".$strBold.";34m".$strMensagem;
1219   - break;
1220   -
1221   - case 'yellow':
1222   - $strMensagem = "\033[".$strBold.";33m".$strMensagem;
1223   - break;
1224   -
1225   - }
1226   - }
1227   - return static::resetAfter($strMensagem);
1228   - }
1229   -
1230   - public static function resetAfter($strMensagem = ''){
1231   -
1232   - return $strMensagem. "\033[0m";
1233   - }
1234   -}
1235   -
1236   -try {
1237   -
1238   - $objPenConsoleRN = new PenConsoleRN();
1239   - $arrArgs = $objPenConsoleRN->getTokens();
1240   -
1241   - $objAtualizarRN = new PenAtualizarSipRN($arrArgs);
1242   - $objAtualizarRN->atualizarVersao();
1243   -
1244   - exit(0);
1245   -} catch (Exception $e) {
1246   -
1247   - print InfraException::inspecionar($e);
1248   -
1249   - try {
1250   - LogSEI::getInstance()->gravar(InfraException::inspecionar($e));
1251   - } catch (Exception $e) {
1252   -
1253   - }
1254   -
1255   - exit(1);
1256   -}
1257   -
1258   -print PHP_EOL;