protected function handleSignRequest($job) { global $mtlda, $mbus, $config; if (!$mbus->sendMessageToClient('sign-reply', 'Preparing', '10%')) { static::raiseError(get_class($mbus) . '::sendMessageToClient() returned false!'); return false; } if (!$config->isPdfSigningEnabled()) { static::raiseError(get_class($config) . '::isPdfSigningEnabled() returned false!'); return false; } if (empty($job) || !is_a($job, 'Thallium\\Models\\JobModel')) { static::raiseError(__METHOD__ . '(), requires a JobModel reference as parameter!'); return false; } if (!$job->hasParameters() || ($sign_request = $job->getParameters()) === false) { static::raiseError(get_class($job) . '::getParameters() returned false!'); return false; } if (!is_object($sign_request)) { static::raiseError(get_class($job) . '::getParameters() returned invalid data!'); return false; } if (!isset($sign_request->id) || empty($sign_request->id) || !isset($sign_request->guid) || empty($sign_request->guid)) { static::raiseError(__METHOD__ . '() sign-request is incomplete!'); return false; } if (!$mtlda->isValidId($sign_request->id)) { static::raiseError(__METHOD__ . '() \\$id is invalid!'); return false; } if (!$mtlda->isValidGuidSyntax($sign_request->guid)) { static::raiseError(__METHOD__ . '() \\$guid is invalid!'); return false; } if (!$mbus->sendMessageToClient('sign-reply', 'Loading document', '20%')) { static::raiseError(get_class($mbus) . '::sendMessageToClient() returned false!'); return false; } try { $signer = new \Mtlda\Controllers\PdfSigningController(); } catch (\Exception $e) { static::raiseError(__METHOD__ . '(), failed to load PdfSigningController!', false, $e); return false; } try { $document = new \Mtlda\Models\DocumentModel(array('idx' => $sign_request->id, 'guid' => $sign_request->guid)); } catch (\Exception $e) { static::raiseError(__METHOD__ . ", unable to load DocumentModel!"); return false; } if (!$signer->signDocument($document)) { static::raiseError(get_class($signer) . '::signDocument() returned false!'); return false; } if (!$mbus->sendMessageToClient('sign-reply', 'Done', '100%')) { static::raiseError(get_class($mbus) . '::sendMessageToClient() returned false!'); return false; } return true; }
public function sign(&$src_item) { global $config, $audit, $mbus; if (!$config->isPdfSigningEnabled()) { static::raiseError("ConfigController::isPdfSigningEnabled() returns false!"); return false; } try { $signer = new \Mtlda\Controllers\PdfSigningController(); } catch (\Exception $e) { static::raiseError("Failed to load PdfSigningController"); return false; } try { $storage = new \Mtlda\Controllers\StorageController(); } catch (\Exception $e) { static::raiseError("Failed to load StorageController!"); return false; } try { $signing_item = new \Mtlda\Models\DocumentModel(); } catch (\Exception $e) { static::raiseError("Failed to load DocumentModel!"); return false; } if (!$mbus->sendMessageToClient('sign-reply', 'Deriving copy of orignal document', '30%')) { static::raiseError(get_class($mbus) . '::sendMessageToClient() returned false!'); return false; } if (!$signing_item->createClone($src_item)) { static::raiseError(__METHOD__ . " unable to clone DocumentModel!"); return false; } try { $audit->log(__METHOD__, "read", "archive", $src_item->getGuid()); } catch (\Exception $e) { $signing_item->delete(); static::raiseError("AuditController::log() raised an exception!"); return false; } // we need to save once so the database id is written back to the document_idx field. if (!$signing_item->save()) { static::raiseError(get_class($signing_item) . '::save() returned false!'); return false; } // append a suffix to new cloned file $signing_item->setFileName(str_replace(".pdf", "_signed.pdf", $signing_item->getFileName())); $signing_item->setDerivationId($src_item->getIdx()); $signing_item->setDerivationGuid($src_item->getGuid()); if (!$signing_item->save()) { static::raiseError(get_class($signing_item) . '::save() returned false!'); return false; } if ($config->isPdfSigningAttachAuditLogEnabled()) { if (!$this->attachAuditLogToDocument($signing_item)) { $signing_item->delete(); static::raiseError(__CLASS__ . '::attachAuditLogToDocument() returned false!'); return false; } } if (!$signer->signDocument($signing_item)) { $signing_item->delete(); static::raiseError("PdfSigningController::ѕignDocument() returned false!"); return false; } if (!$mbus->sendMessageToClient('sign-reply', 'Refreshing document information', '90%')) { static::raiseError(get_class($mbus) . '::sendMessageToClient() returned false!'); return false; } if (!$signing_item->refresh()) { $signing_item->delete(); static::raiseError(get_class($signing_item) . '::refresh() returned false!'); return false; } if (!$signing_item->setSignedCopy(true)) { static::raiseError(get_class($signing_item) . '::setSignedCopy() returned false!'); return false; } if (!$signing_item->save()) { $signing_item->delete(); static::raiseError(get_class($signing_item) . '::save() returned false!'); return false; } try { $audit->log($src_item->getGuid(), "signed", "archive", $signing_item->getGuid()); } catch (\Exception $e) { $signing_item->delete(); static::raiseError("AuditController::log() raised an exception!"); return false; } return true; }