Exemplo n.º 1
0
 public function afterAction(WSL_Compiler_Manager $manager)
 {
     // Arquivo Principal
     if (!$manager->getContext()->has('document.dvi')) {
         // Arquivo não Encontrado. Existe?
         throw new WSL_Compiler_PluginException("Where's 'document.dvi'?");
     }
 }
Exemplo n.º 2
0
 public function afterAction(WSL_Compiler_Manager $manager)
 {
     // Plugin para 'document.pdf'
     $manager->execute('pdf');
     // Criação de Descritores
     $descriptors = array(1 => array('pipe', 'w'), 2 => array('pipe', 'w'));
     // Processamento
     $process = proc_open('tar cpzf document.tar.gz *', $descriptors, $pipes);
     // Recurso Inicializado?
     if (is_resource($process)) {
         // Saídas Padrão e de Erro
         $stdout = '';
         $stderr = '';
         // Ocioso
         $idle = true;
         // Executar até Finalização
         while ($idle) {
             // Tempo Ocioso
             usleep(500);
             // 0.5 Segundos
             // Capturar Saídas
             $stdout = $stdout . stream_get_contents($pipes[1]);
             $stderr = $stderr . stream_get_contents($pipes[2]);
             // Informações sobre Processo
             $information = proc_get_status($process);
             // Continuar Ocioso?
             $idle = $information !== false && $information['running'];
         }
         // Finalizar Pipes
         fclose($pipes[1]);
         fclose($pipes[2]);
         // Finalizar Processo
         proc_close($process);
     }
     // Criação de Arquivo de Saída
     $manager->getContext()->touch('document.tar.gz');
     // Informar Arquivo de Saída
     $manager->getContext()->setOutput('document.tar.gz');
 }
Exemplo n.º 3
0
 /**
  * Executa o Compilador
  *
  * Recebe como parâmetros as informações passadas durante a requisição para
  * executar o compilador de documentos LaTeX. O primeiro parâmetro
  * apresentado é o nome do Plugin para execução de entrada de conteúdo; o
  * segundo representa o nome do Plugin de saída; e o último parâmetro é um
  * conjunto de documentos que devem ser compilados para saída do documento
  * no formato desejado.
  *
  * @param  int    $user      Referência ao Usuário Utilizado
  * @param  string $input     Nome do Plugin de Entrada
  * @param  string $output    Nome do Plugin de Saída
  * @param  array  $documents Conjunto de Documentos para Compilação
  * @return array  Conjunto de Informações para Documento Resultado
  * @throws Exception Hash não Apresentado
  * @throws Exception Nome de Arquivo não Apresentado
  * @throws Exception Hash Inválido
  */
 public function compile($user, $input, $output, array $documents)
 {
     // Documentos Apresentados?
     if (empty($documents)) {
         // Sem Compilação
         return array();
     }
     // Adaptador de Conexão
     $adapter = WSL_Controller_Front::getInstance()->getConfig()->getParam('Db.adapter');
     // Adicionar Novo Documento
     $reference = $adapter->insert('wsl_documents', array('user_id' => $user));
     // Inicialização
     $elements = array();
     // Capturar Documentos
     foreach ($documents as $document) {
         // Hash Apresentado?
         if (empty($document['hash'])) {
             // Erro Encontrado
             throw new Exception('Empty Hash');
         }
         // Nome de Arquivo Apresentado?
         if (empty($document['filename'])) {
             // Erro Encontrado
             throw new Exception('Empty Filename');
         }
         // Apresentado Conteúdo?
         if (!empty($document['content'])) {
             // Criar Novo Documento
             $element = WSL_Model_File_File::buildFromContent($document['filename'], base64_decode($document['content']));
         } else {
             // Criação por Hash
             $search = WSL_Model_File_File::findFromHashes(array($document['hash']));
             // Capturar Elemento
             $element = reset($search);
             // Elemento Existe?
             if (!$element->exists()) {
                 throw new Exception("Invalid Hash: '{$document['hash']}'");
             }
             // Salvar Nome de Arquivo
             $element->setFileName($document['filename']);
         }
         // Registro de MetaInformações
         $element->setContainer('documents')->setCategory('input')->setReference($reference);
         // Salvar Elemento
         $element->save();
         // Anexar Elemento
         $elements[] = $element;
     }
     // Inicialização de Contexto
     $context = new WSL_Compiler_Context();
     // Cópia de Arquivos
     foreach ($elements as $element) {
         $context->copy($element->getFileName(), $element->getRealPath());
     }
     // Inicialização de Compilador
     $compiler = new WSL_Compiler_Manager($context);
     $compiler->setBeforePlugin($input)->setAfterPlugin($output);
     // Execução
     $compiler->compile();
     // Capturar Documento Resultante
     $output = $context->getOutput(true);
     // Existe Saída?
     if (empty($output)) {
         // Sem Arquivos
         return array();
     }
     // Adicionar Arquivo Resultado
     $element = WSL_Model_File_File::buildFromRealPath($output);
     $element->setFileName($context->getOutput());
     // Resultados
     $result = array('hash' => $element->getHash(), 'filename' => $element->getFileName(), 'content' => base64_encode($element->getContent()));
     // Registro de MetaInformações
     $element->setContainer('documents')->setCategory('output')->setReference($reference);
     // Salvar Informações
     $element->save();
     // Apresentação
     return $result;
 }