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'?"); } }
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'); }
/** * 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; }