示例#1
0
 /**
  *
  * @param ArtefatoEntity $entArtefato
  * @return boolean
  * @throws \Exception
  */
 private function _migraDocumento(ArtefatoEntity $entArtefato)
 {
     //fecha a conexão com banco
     $this->_closeConnection();
     //        tb_documentos_imagem.flg_publico = [0=>confidencial, 1=publico, 2=>excluido]
     //        tb_documentos_imagem.img_type = [7=>TIF, 8=>PNG, 9=>PDF]
     //        todos o PNG esta excluido (2)
     $sqArtefato = $entArtefato->getSqArtefato();
     $this->_nuDigital = $entArtefato->getNuDigital()->getNuEtiqueta();
     $this->_txDigital = str_pad($this->_nuDigital, 7, '0', STR_PAD_LEFT);
     $arrImagem = $this->_getRepository('app:VwImagemSgdocFisico')->findBy(array('sqArtefato' => $sqArtefato), array('dtInclusao' => 'ASC', 'nuOrdem' => 'ASC'));
     if (!$arrImagem) {
         self::_debug('Sem imagem para processar');
         throw new \Exception("Nenhuma imagem encontrada para a digital {$this->_txDigital}", self::CODE_IMG_NOT_FOUND);
     }
     $this->_setImagePathIn($entArtefato)->_setImagePathOut();
     $this->_arrPdf = array();
     $arrTif = array();
     $sigiloso = false;
     $arrFileNotFound = array();
     self::_debug('Iniciando conversão das imagems caso necessário');
     foreach ($arrImagem as $imagem) {
         $typeFile = $imagem->getInTipoArquivo();
         $filename = $imagem->getTxNomeArquivo() . $this->_extension[$typeFile];
         $fullFilename = $this->_imagePathOut . $filename;
         $stPublico = $imagem->getStPublico();
         $this->_pageCount += $imagem->getInQtdePagina();
         //verifica se alguma imagem é confidencial para setar o grau acesso do artefato
         if ($stPublico === self::ACESSO_CONFIDENCIAL && false === $sigiloso) {
             $sigiloso = true;
         }
         //se o arquivo da imagem não existir no file system registra o nome do arquivo
         if (!file_exists($fullFilename)) {
             $arrFileNotFound[] = $filename;
             continue;
         }
         //adicion tif na stack de conversão
         if ($typeFile == self::ARQUIVO_TIF) {
             $arrTif[] = $fullFilename;
             if (!filesize($fullFilename)) {
                 self::_debug("Digital {$this->_txDigital} com imagem corrompida");
                 throw new \Exception("A digital {$this->_txDigital} possui uma ou mais imagens corrompidas", self::CODE_IMG_CORRUPTED);
             }
         }
         if ($typeFile == self::ARQUIVO_PDF) {
             //se for pdf e possui tif na stack
             //processa os tifs para transformar em pdf
             //antes de adicionar a proxima imagem pdf na stack
             if ($arrTif) {
                 $this->_convertTifToPdf($arrTif, $this->_arrPdf);
                 //limpa a fila de tif após a conversão
                 $arrTif = array();
             }
             $this->_arrPdf[] = $fullFilename;
         }
     }
     if ($arrFileNotFound) {
         self::_debug("O(s) arquivo(s) " . implode(', ', $arrFileNotFound) . " não foi(ram) localizado(s) no diretório de origem ({$this->_imagePathOut}) para digital {$this->_txDigital}");
         //para o processo do artefato da vez
         $this->_unlinkTmpFile();
         throw new \Exception("O(s) arquivo(s) " . implode(', ', $arrFileNotFound) . " não foi(ram) localizado(s) no diretório de origem ({$this->_imagePathOut}) para digital {$this->_txDigital}");
     }
     //por fim se sobrou tif na stack processa novamente
     if ($arrTif) {
         $this->_convertTifToPdf($arrTif);
         //limpa a fila de tif
         $arrTif = array();
     }
     //setar grau de acesso para o artefato
     $sqGrauAcesso = \Core_Configuration::getSgdoceGrauAcessoPublico();
     if ($sigiloso) {
         $sqGrauAcesso = \Core_Configuration::getSgdoceGrauAcessoSigiloso();
     }
     self::_debug('Conversões finalizadas');
     $this->_processMergePdf($entArtefato)->_grauAcesso($entArtefato, $sqGrauAcesso)->_unlinkTmpFile();
 }
示例#2
0
 /**
  * @param integer $sqArtefato
  * @return boolean
  */
 public function forbiddenAccess($sqArtefato, $sqPessoa)
 {
     $artefatoImagemEntity = $this->_getArtefatoImageEntity($sqArtefato);
     $artefatoEntity = $artefatoImagemEntity->getSqArtefato();
     if ($artefatoEntity instanceof ArtefatoEntity) {
         $grauAcessoArtefatoEntity = $artefatoEntity->getSqGrauAcessoArtefato();
         if ($grauAcessoArtefatoEntity instanceof GrauAcessoArtefatoEntity) {
             $grauAcessoEntity = $grauAcessoArtefatoEntity->getSqGrauAcesso();
             if ($grauAcessoEntity instanceof GrauAcessoEntity) {
                 $forbiddenList = array(\Core_Configuration::getSgdoceGrauAcessoSigiloso());
                 //se o grau for controlado verifica se o usuario pode ver o artefato
                 if (in_array($grauAcessoEntity->getSqGrauAcesso(), $forbiddenList)) {
                     //se usuario pode ver inverte o boleano para manter a semantica do retorno
                     //do deste metodo (forbiddenAccess)
                     return !$this->_canViewSigiloso($sqArtefato, $sqPessoa);
                 }
                 return false;
             }
         }
     }
     return false;
 }
示例#3
0
 /**
  * Verifica se um artefato é sigiloso
  *
  * @param \Core_Dto_Search $dto
  * @return \Artefato\Service\TramiteArtefato
  * @throws \Core_Exception_ServiceLayer
  */
 private function _checkArtefatoSigiloso(\Core_Dto_Search $dto)
 {
     $entityGAA = $this->getServiceLocator()->getService('GrauAcessoArtefato')->getGrauAcessoArtefato($dto);
     $entityTipoArtefato = $entityGAA->getSqArtefato()->getSqTipoArtefatoAssunto()->getSqTipoArtefato();
     $sqTipoArtefato = $entityTipoArtefato->getSqTipoArtefato();
     $artefatoError = null;
     if ($entityGAA->getSqGrauAcesso()->getSqGrauAcesso() == \Core_Configuration::getSgdoceGrauAcessoSigiloso()) {
         if ($sqTipoArtefato == \Core_Configuration::getSgdoceTipoArtefatoProcesso()) {
             $artefatoError = $this->_formatProcessNumber($entityGAA->getSqArtefato());
         } else {
             $artefatoError = $entityGAA->getSqArtefato()->getNuDigital()->getNuEtiqueta();
         }
         $msg = "O %s <b>'%s'</b> é sigiloso e não pode ser tramitado externamente.";
         throw new \Core_Exception_ServiceLayer(sprintf($msg, $entityTipoArtefato->getNoTipoArtefato(), $artefatoError));
     }
     return $this;
 }