function createAttachedDocumentsPdf($product) { $attachedDocuments = $product->get_all_linked_attachments(); // trigger_error("Started to convert products to PDF!", E_USER_NOTICE); if (empty($attachedDocuments)) { return null; } $docHandler = null; $catArgs = array(); $filenameArgs = array(); $filenames = array(); $attachArgs = array(); $ids = range('A', chr(ord('A') + count($attachedDocuments) - 1)); foreach ($attachedDocuments as $attachment_id) { $revision_id = $attachment_id; $revision_check = new DocumentRevision(); if (!$revision_check->retrieve($attachment_id)) { $document = new Document(); if ($document->retrieve($attachment_id)) { $revision_id = $document->document_revision_id; $purpose = $document->document_purpose_c; } } else { $document = new Document(); if ($document->retrieve($revision_check->document_id)) { $purpose = $document->document_purpose_c; } } if ($purpose == 'Catalog') { //1.7.6 include only documents marked For Product Catalog $revision = new DocumentRevision(); if ($revision->retrieve($revision_id)) { if ($revision->file_ext != 'pdf') { //SugarCE determines file type unreliably, so only extension is used if (!$docHandler) { $docHandler = new DocumentHandler(); } $filename = getDocumentFilename($revision_id); // skuria failo varda su nuoroda // we need a descriptive filename for word macros and pdf attachments $realFilenameWithExtension = getRealFilename($revision); copy($filename, $realFilenameWithExtension); $filenames[] = $realFilenameWithExtension; $attachmentFilename = $docHandler->convertToPdf($realFilenameWithExtension); if ($attachmentFilename) { $catArgs[] = current($ids); $filenameArgs[] = current($ids) . '=' . $attachmentFilename; $filenames[] = $attachmentFilename; next($ids); } else { // file was not possible to convert $attachArgs[] = $realFilenameWithExtension; $GLOBALS['log']->fatal('OQC DocumentHandler: file ' . $realFilenameWithExtension . ' is not possible to convert to pdf!'); continue; } } else { $attachmentFilename = getDocumentFilename($revision_id); $catArgs[] = current($ids); $filenameArgs[] = current($ids) . '=' . $attachmentFilename; next($ids); } } } } $testPdfFiles = implode('', $catArgs); //test if there are any pdf file available for pdftk //$GLOBALS['log']->error('OQC pdf testfiles'.$testPdfFiles); $testAttachFiles = implode('', $attachArgs); //test if there are attachement files if (empty($testPdfFiles)) { foreach ($filenames as $attachfile) { unlink($attachfile); } return null; } $outputFilename = tempnam(TMP_DIR, ''); $finalFilename = tempnam(TMP_DIR, ''); $contractFilename = tempnam(TMP_DIR, ''); if (!empty($testPdfFiles)) { // merge files $pdfTkArgs = implode(' ', $filenameArgs) . ' cat ' . implode(' ', $catArgs) . " output {$outputFilename} keep_first_id"; if (execute(PDFTK, $pdfTkArgs) == 0) { copy($outputFilename, $contractFilename); //owerwrite source file } else { $GLOBALS['log']->error('Failed to merge PDF files!'); //cleanup of temporary files unlink($finalFilename); unlink($outputFilename); unlink($contractFilename); foreach ($filenames as $attachfile) { unlink($attachfile); } return null; } } if (!empty($testAttachFiles) && !empty($testPdfFiles)) { $pdfTkArgs = "{$contractFilename} attach_files " . implode(' ', $attachArgs) . " output {$finalFilename}"; if (execute(PDFTK, $pdfTkArgs) == 0) { copy($finalFilename, $contractFilename); } else { $GLOBALS['log']->error('Failed to attach documents to final PDF!'); } } //cleanup of temporary files unlink($finalFilename); unlink($outputFilename); foreach ($filenames as $attachfile) { unlink($attachfile); } $contractFilenamePdf = str_replace("\\", "/", dirname($contractFilename) . DIRECTORY_SEPARATOR . basename($contractFilename, '.tmp') . '.pdf'); rename($contractFilename, $contractFilenamePdf); //$GLOBALS['log']->error('OQC: Attachment filename is '.$contractFilenamePdf); //return str_replace("\\","/",$contractFilename.'.pdf'); return $contractFilenamePdf; }