Beispiel #1
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("StorageController::createDirectoryStructure() returned false!");
         return false;
     }
     if (!$storage->copyFile($src_file, $dst_file)) {
         static::raiseError("StorageController::copyFile() returned false!");
         return false;
     }
     return true;
 }
Beispiel #2
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;
 }