/** * Prepare the Certificate template with the data available from the given event. * * @param \Event $event * @param boolean $ignore_portal - if true, will force the signature box to be rendered rather than checking the portal * @return \ODTTemplateManager * @throws \Exception */ protected function populateCviCertificate(\Event $event, $ignore_portal = false) { $signature_element = $this->getConsentSignatureElementForEvent($event); // we need to check if we already have a signature file linked if (!$signature_element->checkSignature()) { //TODO: restructure or rename, as this process is basically also going to generate //TODO: the QR code signature placeholder when its not yet been captured. // we check if the signature is exists on the portal $signature = $ignore_portal ? $signature_element->getSignatureBox() : $signature_element->loadSignatureFromPortal(); } else { // TODO: this should be checked before, when we retrieve the patient signature!!! // we get the stored signature and creates a GD object from the data if ($signature_element->getDecryptedSignature()) { $signature = imagecreatefromstring($signature_element->getDecryptedSignature()); } else { $signature = imagecreatetruecolor(1, 1); } } // TODO: need to configure this more cleanly $print_helper = new \ODTTemplateManager($this->input_template_file, realpath(__DIR__ . '/..') . '/views/odtTemplate', $this->yii->basePath . '/runtime/cache/cvi/', 'CVICert_' . $event->id . '_' . mt_rand() . '.odt'); $data_handler = new \ODTDataHandler(); $structured_data = $this->getStructuredDataForPrintPDF($event); $data_handler->setTableAndSimpleTextDataFromArray($structured_data); $tables = $data_handler->getTables(); foreach ($tables as $one_table) { $name = $one_table['name']; $data = $data_handler->generateSimpleTableHashData($one_table); $print_helper->fillTableByName($name, $data, 'name'); } $texts = $data_handler->getSimpleTexts(); $print_helper->exchangeAllStringValuesByStyleName($texts); //$print_helper->exchangeStringValues( $this->getStructuredDataForPrintPDF($id) ); // TODO: This should be handled more cleanly for the image manipulation $print_helper->changeImageFromGDObject('signatureImagePatient', $signature); if (array_key_exists('signatureImageConsultant', $structured_data)) { $print_helper->changeImageFromGDObject('signatureImageConsultant', $structured_data['signatureImageConsultant']); } $print_helper->saveContentXML(); $print_helper->generatePDF(); return $print_helper; }