Example #1
0
 private function truncate()
 {
     global $db, $config;
     if (!$config->isResetDataPermitted()) {
         static::raiseError(get_class($config) . '::isResetDataPermitted() returned false!');
         return false;
     }
     if (!$db->truncateDatabaseTables()) {
         static::raiseError(get_class($db) . '::truncateDatabaseTables() returned false!');
         return false;
     }
     try {
         $storage = new \Mtlda\Controllers\StorageController();
     } catch (\Exception $e) {
         static::raiseError(__METHOD__ . '(), failed to load StorageController!');
         return false;
     }
     if (!$storage->flushArchive()) {
         static::raiseError(get_class($storage) . '::flushArchive() returned false!');
         return false;
     }
     if (!$storage->flushQueue()) {
         static::raiseError(get_class($storage) . '::flushQueue() returned false!');
         return false;
     }
     try {
         $queue = new \Mtlda\Models\QueueModel();
     } catch (\Exception $e) {
         static::raiseError(__METHOD__ . '(), failed to load QueueModel!');
         return false;
     }
     if (!$queue->flush()) {
         static::raiseError(get_class($queue) . '::flush() returned false!');
         return false;
     }
     return "Reset successful.";
 }
Example #2
0
 protected function deleteFile()
 {
     try {
         $storage = new \Mtlda\Controllers\StorageController();
     } catch (\Exception $e) {
         static::raiseError(__METHOD__ . '(), failed to load StorageController!', false, $e);
         return false;
     }
     if (!$storage->deleteItemFile($this)) {
         static::raiseError("StorageController::deleteItemFile() returned false!");
         return false;
     }
     return true;
 }
Example #3
0
 protected function postClone(&$srcobj)
 {
     try {
         $storage = new \Mtlda\Controllers\StorageController();
     } catch (\Exception $e) {
         static::raiseError("Failed to load StorageController!");
         return false;
     }
     if (($src_file = $srcobj->getFilePath()) === false) {
         static::raiseError(__METHOD__ . '(), unable to retrieve source objects full qualified path name!');
         return false;
     }
     if (($dst_file = $this->getFilePath()) === false) {
         static::raiseError(__CLASS__ . '::getFilePath() returned false!');
         return false;
     }
     if (!$storage->createDirectoryStructure(dirname($dst_file))) {
         static::raiseError(get_class($storage) . '::createDirectoryStructure() returned false!');
         return false;
     }
     if (!$storage->copyFile($src_file, $dst_file)) {
         static::raiseError(get_class($storage) . '::copyFile() returned false!');
         return false;
     }
     return true;
 }
Example #4
0
 protected function runOcr()
 {
     try {
         $pages = $this->pdf->getPages();
     } catch (\Exception $e) {
         static::raiseError(get_class($this->pdf) . '::getPages() returned false!', false, $e);
         return false;
     }
     if (empty($pages)) {
         return true;
     }
     try {
         $storage = new \Mtlda\Controllers\StorageController();
     } catch (\Exception $e) {
         static::raiseError(__METHOD__ . '(), failed to load StorageController!', false, $e);
         return false;
     }
     if (!($tempDir = $storage->createTempDir('ocr_'))) {
         static::raiseError(get_class($storage) . '::createTempDir() returned false!');
         return false;
     }
     if (!file_exists($tempDir) || !is_dir($tempDir)) {
         static::raiseError(get_class($storage) . '::createTempDir() has not returned a valid directory!');
         return false;
     }
     foreach ($pages as $id => $page) {
         try {
             $objects = $page->getXObjects();
         } catch (\Exception $e) {
             $this->unlinkDirectory($tempDir);
             static::raiseError(get_class($page) . '::getXObjects() returned false!', false, $e);
             return false;
         }
         foreach ($objects as $id => $object) {
             if (!is_a($object, 'Smalot\\PdfParser\\XObject\\Image')) {
                 continue;
             }
             try {
                 $content = $object->getContent();
             } catch (\Exception $e) {
                 $this->unlinkDirectory($tempDir);
                 static::raiseError(get_class($object) . '::getContent() returned false!', false, $e);
                 return false;
             }
             if (!($tempFile = tempnam($tempDir, 'pdfcontent_'))) {
                 $this->unlinkDirectory($tempDir);
                 static::raiseError(__METHOD__ . '(), tempnam() returned false!');
                 return false;
             }
             if (!file_put_contents($tempFile, $content)) {
                 $this->unlinkDirectory($tempDir);
                 static::raiseError(__METHOD__ . '(), file_put_contents() returned false!');
                 return false;
             }
         }
     }
     if (($text = $this->ocr->scanDirectory($tempDir)) === false) {
         static::raiseError(get_class($this->ocr) . '::scanDirectory() returned false!');
         return false;
     }
     if (!$this->unlinkDirectory($tempDir)) {
         static::raiseError(__CLASS__ . '::unlinkDirectory() returned false!');
         return false;
     }
     if (!isset($text) || empty($text) || !is_array($text)) {
         return array();
     }
     return $text;
 }
Example #5
0
 public function archive(&$queue_item)
 {
     global $config, $audit, $mbus;
     // verify QueueItemModel is ok()
     if (!$queue_item->verify()) {
         static::raiseError("QueueItemModel::verify() returned false!");
         return false;
     }
     if ($queue_item->isProcessing()) {
         static::raiseError(__METHOD__ . '(), QueueItemModel already in processing!');
         return false;
     }
     if (!$queue_item->setProcessingFlag(true)) {
         static::raiseError(get_class($queue_item) . '::setProcessingFlag() returned false!');
         return false;
     }
     if (!$queue_item->save()) {
         static::raiseError(get_class($queue_item) . '::save() returned false!');
         return false;
     }
     try {
         $document = new \Mtlda\Models\DocumentModel();
     } catch (\Exception $e) {
         static::raiseError("Failed to load DocumentModel!");
         return false;
     }
     try {
         $storage = new \Mtlda\Controllers\StorageController();
     } catch (\Exception $e) {
         static::raiseError("Failed to load StorageController!");
         return false;
     }
     try {
         $audit->log("archiving requested", "archive", "storage", $queue_item->getGuid());
     } catch (\Exception $e) {
         static::raiseError("AuditController::log() returned false!");
         return false;
     }
     if (($fields = $queue_item->getFields()) === false) {
         static::raiseError(get_class($queue_item) . '::getModelFields() returned false!');
         return false;
     }
     if (!is_array($fields) || empty($fields)) {
         static::raiseError(get_class($queue_item) . '::getModelFields() returned no fields!');
         return false;
     }
     $fields_to_skip = array('idx', 'state', 'in_processing', 'keywords');
     // copy fields from QueueItemModel to DocumentModel
     foreach ($fields as $queue_field => $queue_field_prop) {
         // fields we skip
         if (in_array($queue_field, $fields_to_skip)) {
             continue;
         }
         $document_field = str_replace("queue_", "document_", $queue_field);
         if (!$document->setFieldValue($document_field, $queue_field_prop['value'])) {
             static::raiseError(get_class($document) . '::setFieldValue() returned false!');
             return false;
         }
     }
     if (!$document->hasTitle()) {
         if (!$document->hasFileName()) {
             static::raiseError(__METHOD__ . '(), document has no title nor a filename!');
             return false;
         }
         if (($name = $document->getFileName()) === false) {
             static::raiseError(get_class($document) . '::getFileName() returned false!');
             return false;
         }
         if (!$document->setTitle($document->getFileName())) {
             static::raiseError(get_class($document) . '::setTitle() returned false!');
             return false;
         }
     }
     if (!$document->setVersion('1')) {
         static::raiseError(get_class($document) . '::setVersion() returned false!');
         return false;
     }
     //$document->document_derivation = '';
     //$document->document_derivation_guid = '';
     if (($fqfn_src = $queue_item->getFilePath()) === false) {
         static::raiseError(get_class($queue_item) . '::getFilePath() returned false!');
         return false;
     }
     if (($fqfn_dst = $document->getFilePath()) === false) {
         static::raiseError(get_class($queue_item) . '::getFilePath() returned false!');
         return false;
     }
     if (!$mbus->sendMessageToClient('archive-reply', 'Moving document to archive store.', '30%')) {
         static::raiseError(get_class($mbus) . '::sendMessageToClient() returned false!');
         return false;
     }
     // create the target directory structure
     if (!$storage->createDirectoryStructure(dirname($fqfn_dst))) {
         static::raiseError("StorageController::createDirectoryStructure() returned false!");
         return false;
     }
     try {
         $audit->log("using {$fqfn_dst} as destination", "archive", "storage", $queue_item->getGuid());
     } catch (\Exception $e) {
         static::raiseError("AuditController::log() returned false!");
         return false;
     }
     if (!$storage->copyFile($fqfn_src, $fqfn_dst)) {
         static::raiseError("StorageController::copyFile() returned false!");
         return false;
     }
     if (!$mbus->sendMessageToClient('archive-reply', 'Saving document.', '40%')) {
         static::raiseError(get_class($mbus) . '::sendMessageToClient() returned false!');
         return false;
     }
     // safe DocumentModel to database, remove the file from archive again
     if (!$document->save()) {
         static::raiseError("DocumentModel::save() returned false!");
         if (!$storage->deleteItemFile($document)) {
             static::raiseError("StorageController::deleteItemFile() returned false!");
         }
         return false;
     }
     // transfer keywords
     if ($queue_item->hasKeywords()) {
         if (($keywords = $queue_item->getKeywords()) === false) {
             static::raiseError(get_class($queue_item) . '::getKeywords() returned false!');
             return false;
         }
         if (isset($keywords) && is_array($keywords)) {
             if (!$document->setKeywords($keywords)) {
                 static::raiseError(get_class($document) . '::setKeywords() returned false!');
                 return false;
             }
         }
     }
     // delete QueueItemModel from database, if that fails revert
     if (!$queue_item->delete()) {
         static::raiseError("DocumentModel::delete() returned false!");
         if (!$document->delete()) {
             static::raiseError("QueueItemModel::delete() returned false!");
         }
         return false;
     }
     if (!$mbus->sendMessageToClient('archive-reply', 'Embeding seal icon into document.', '50%')) {
         static::raiseError(get_class($mbus) . '::sendMessageToClient() returned false!');
         return false;
     }
     if ($config->isEmbeddingMtldaIcon()) {
         if (!$this->embedMtldaIcon($document)) {
             static::raiseError("embedMtldaIcon() returned false!");
             return false;
         }
         if (!$document->refresh()) {
             static::raiseError("DocumentModel::refresh() returned false!");
             return false;
         }
     }
     if ($config->isPdfIndexingEnabled() && ($document->hasIndices() || !$document->hasProperties())) {
         if (!$mbus->sendMessageToClient('archive-reply', 'Indexing document content.', '60%')) {
             static::raiseError(get_class($mbus) . '::sendMessageToClient() returned false!');
             return false;
         }
         $state = $mbus->suppressOutboundMessaging(true);
         if (!$this->indexDocument($document)) {
             static::raiseError('indexDocument() returned false!');
             return false;
         }
         $mbus->suppressOutboundMessaging($state);
     }
     // if no more actions are necessary, we are done
     if (!$config->isPdfSigningEnabled()) {
         return true;
     }
     // if auto-signing is not enabled, we are done here
     if (!$config->isPdfAutoPdfSignOnImport()) {
         return true;
     }
     if (!$mbus->sendMessageToClient('archive-reply', 'Signing document.', '80%')) {
         static::raiseError(get_class($mbus) . '::sendMessageToClient() returned false!');
         return false;
     }
     $state = $mbus->suppressOutboundMessaging(true);
     if (!$this->sign($document)) {
         static::raiseError(__CLASS__ . "::sign() returned false!");
         return false;
     }
     $mbus->suppressOutboundMessaging($state);
     return true;
 }
Example #6
0
 public function showItem($id, $guid)
 {
     global $mtlda;
     if (empty($id) || !$mtlda->isValidId($id)) {
         static::raiseError("Require a valid \$id to show!");
         return false;
     }
     if (empty($guid) || !$mtlda->isValidGuidSyntax($guid)) {
         static::raiseError("Require a valid \$guid to show!");
         return false;
     }
     try {
         $item = new \Mtlda\Models\QueueItemModel(array('idx' => $id, 'guid' => $guid));
     } catch (\Exception $e) {
         static::raiseError("Failed to load QueueItemModel({$id}, {$guid})!");
         return false;
     }
     try {
         $storage = new \Mtlda\Controllers\StorageController();
     } catch (\Exception $e) {
         static::raiseError("Failed to load StorageController!");
         return false;
     }
     if (!($file = $storage->retrieveFile($item))) {
         static::raiseError("StorageController::retrieveFile() returned false!");
         return false;
     }
     if (!isset($file) || empty($file) || !is_array($file) || !isset($file['hash'], $file['content']) || empty($file['hash']) || empty($file['content'])) {
         static::raiseError("StorageController::retireveFile() returned an invalid file");
         return false;
     }
     if (strlen($file['content']) != $item->getFileSize()) {
         static::raiseError("File size of retrieved file does not match archive record!");
         return false;
     }
     if ($file['hash'] != $item->getFileHash()) {
         static::raiseError("File hash of retrieved file does not match archive record!");
         return false;
     }
     header('Content-Type: application/pdf');
     header('Cache-Control: no-cache, must-revalidate');
     header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
     header('Content-Length: ' . strlen($file['content']));
     print $file['content'];
     return true;
 }