Merged in feature/PMCORE-3533 (pull request #8349)

PMCORE-3533

Approved-by: Julio Cesar Laura Avendaño
This commit is contained in:
Paula Quispe
2022-06-02 13:09:02 +00:00
committed by Julio Cesar Laura Avendaño
20 changed files with 2103 additions and 182 deletions

View File

@@ -38,6 +38,8 @@ $factory->define(OutputDocument::class, function(Faker $faker) {
'OUT_DOC_PDF_SECURITY_OPEN_PASSWORD' => '',
'OUT_DOC_PDF_SECURITY_OWNER_PASSWORD' => '',
'OUT_DOC_PDF_SECURITY_PERMISSIONS' => '',
'OUT_DOC_OPEN_TYPE' => 1
'OUT_DOC_OPEN_TYPE' => 1,
'OUT_DOC_HEADER' => null,
'OUT_DOC_FOOTER' => null
];
});

View File

@@ -378,6 +378,8 @@ class ProcessesTest extends TestCase
'OUT_DOC_PDF_SECURITY_PERMISSIONS' => '',
'OUT_DOC_OPEN_TYPE' => 1,
'__OUT_DOC_ID_UPDATE__' => false,
'OUT_DOC_FOOTER' => null,
'OUT_DOC_HEADER' => null
],
[
'OUT_DOC_UID' => G::generateUniqueID(),
@@ -407,6 +409,8 @@ class ProcessesTest extends TestCase
'OUT_DOC_PDF_SECURITY_PERMISSIONS' => '',
'OUT_DOC_OPEN_TYPE' => 1,
'__OUT_DOC_ID_UPDATE__' => false,
'OUT_DOC_FOOTER' => null,
'OUT_DOC_HEADER' => null
]
];
$this->sortArrayByColumn($expected, 'OUT_DOC_UID');

View File

@@ -280,33 +280,35 @@ class EmailServerTest extends TestCase
public function it_should_test_the_send_test_mail_method()
{
$string = ini_get("sendmail_path");
if (!is_executable($string)) {
$this->markTestIncomplete($string . " not found");
//in current versions this value has extra parameters and must be cleaned
$result = explode(" ", $string);
$path = $result[0];
if (is_executable($path)) {
// The data that will be sent to the method
$data = [
"FROM_EMAIL" => "admin@processmaker.com",
"FROM_NAME" => "Administrator",
"MESS_ENGINE" => "MAIL",
"MESS_SERVER" => "localhost",
"MESS_PORT" => 25,
"MESS_ACCOUNT" => "admin@processmaker.com",
"MESS_PASSWORD" => "",
"TO" => "admin@processmaker.com",
"MESS_RAUTH" => true
];
// Create the EmailServer object
$emailServer = new EmailServer();
// Call the sendTestMail method
$result = $emailServer->sendTestMail($data);
// Assert the status is true
$this->assertTrue($result['status']);
// Assert the success is true
$this->assertTrue($result['success']);
// Assert the message of the result
$this->assertEquals('**ID_MAIL_TEST_SUCCESS**', $result['msg']);
}
// The data that will be sent to the method
$data = [
"FROM_EMAIL" => "admin@processmaker.com",
"FROM_NAME" => "Administrator",
"MESS_ENGINE" => "MAIL",
"MESS_SERVER" => "localhost",
"MESS_PORT" => 25,
"MESS_ACCOUNT" => "admin@processmaker.com",
"MESS_PASSWORD" => "",
"TO" => "admin@processmaker.com",
"MESS_RAUTH" => true
];
// Create the EmailServer object
$emailServer = new EmailServer();
// Call the sendTestMail method
$result = $emailServer->sendTestMail($data);
// Assert the status is true
$this->assertTrue($result['status']);
// Assert the success is true
$this->assertTrue($result['success']);
// Assert the message of the result
$this->assertEquals('**ID_MAIL_TEST_SUCCESS**', $result['msg']);
}
/**

View File

@@ -13,6 +13,7 @@ use ProcessMaker\GmailOAuth\GmailOAuth;
use ProcessMaker\Model\User;
use RBAC;
use Tests\TestCase;
use BadMethodCallException;
class GmailOAuthTest extends TestCase
{
@@ -251,7 +252,6 @@ class GmailOAuthTest extends TestCase
*/
public function it_should_send_an_email_test_with_PHPMailerOAuth()
{
$this->markTestIncomplete('Please solve the error related to Exception');
$faker = $this->faker;
$gmailOauth = new GmailOAuth();
@@ -276,8 +276,11 @@ class GmailOAuthTest extends TestCase
$gmailOauth->setSenderEmail($faker->email);
$gmailOauth->setMailTo($faker->email);
$gmailOauth->setSendTestMail(1);
$result = $gmailOauth->sendTestMailWithPHPMailerOAuth();
$this->assertTrue($result instanceof PHPMailerOAuth);
//We cannot get a valid 'refresh token', therefore we wait for an exception
//when trying to send a email.
$this->expectException(BadMethodCallException::class);
$gmailOauth->sendTestMailWithPHPMailerOAuth();
}
/**

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,173 @@
<?php
namespace ProcessMaker\PDF;
use stdClass;
use Tests\TestCase;
/**
* @covers ProcessMaker\PDF\TCPDFHeaderFooter
* @test
*/
class TCPDFHeaderFooterTest extends TestCase
{
/**
* TCPDFHeaderFooter object.
* @var TCPDFHeaderFooter
*/
protected $object;
/**
* setUp method.
*/
protected function setUp()
{
parent::setUp();
$this->object = new TCPDFHeaderFooter('P', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$this->object->SetCreator(PDF_CREATOR);
$this->object->SetAuthor('admin');
$this->object->SetTitle('test');
$this->object->SetSubject('test.pdf');
$this->object->SetCompression(true);
$this->setHeaderData();
$this->setFooterData();
}
/**
* tearDown method.
*/
protected function tearDown()
{
parent::tearDown();
}
/**
* Setting data for header configuration.
*/
private function setHeaderData()
{
$header = new stdClass();
$header->logo = PATH_TRUNK . "/vendor/tecnickcom/tcpdf/examples/images/logo_example.jpg";
$header->logoWidth = 10;
$header->logoPositionX = 50;
$header->logoPositionY = 0;
$header->title = "Test1 Test1";
$header->titleFontSize = 60;
$header->titleFontPositionX = 10;
$header->titleFontPositionY = 0;
$header->pageNumber = true;
$header->pageNumberTitle = "Pages";
$header->pageNumberTotal = true;
$header->pageNumberPositionX = 10;
$header->pageNumberPositionY = 0;
$struct = $this->object->getHeaderStruct();
$struct->setLogo($header->logo);
$struct->setLogoWidth($header->logoWidth);
$struct->setLogoPositionX($header->logoPositionX);
$struct->setLogoPositionY($header->logoPositionY);
$struct->setTitle($header->title);
$struct->setTitleFontSize($header->titleFontSize);
$struct->setTitleFontPositionX($header->titleFontPositionX);
$struct->setTitleFontPositionY($header->titleFontPositionY);
$struct->setPageNumber($header->pageNumber);
$struct->setPageNumberTitle($header->pageNumberTitle);
$struct->setPageNumberTotal($header->pageNumberTotal);
$struct->setPageNumberPositionX($header->pageNumberPositionX);
$struct->setPageNumberPositionY($header->pageNumberPositionY);
}
/**
* Setting data for footer configuration.
*/
private function setFooterData()
{
$footer = new stdClass();
$footer->logo = PATH_TRUNK . "/vendor/tecnickcom/tcpdf/examples/images/logo_example.jpg";
$footer->logoWidth = 15;
$footer->logoPositionX = 10;
$footer->logoPositionY = 0;
$footer->title = "Hola mundo como estas";
$footer->titleFontSize = 20;
$footer->titleFontPositionX = 0;
$footer->titleFontPositionY = 5;
$footer->pageNumber = true;
$footer->pageNumberTitle = "Pages";
$footer->pageNumberTotal = true;
$footer->pageNumberPositionX = 40;
$footer->pageNumberPositionY = 5;
$struct = $this->object->getFooterStruct();
$struct->setLogo($footer->logo);
$struct->setLogoWidth($footer->logoWidth);
$struct->setLogoPositionX($footer->logoPositionX);
$struct->setLogoPositionY($footer->logoPositionY);
$struct->setTitle($footer->title);
$struct->setTitleFontSize($footer->titleFontSize);
$struct->setTitleFontPositionX($footer->titleFontPositionX);
$struct->setTitleFontPositionY($footer->titleFontPositionY);
$struct->setPageNumber($footer->pageNumber);
$struct->setPageNumberTitle($footer->pageNumberTitle);
$struct->setPageNumberTotal($footer->pageNumberTotal);
$struct->setPageNumberPositionX($footer->pageNumberPositionX);
$struct->setPageNumberPositionY($footer->pageNumberPositionY);
}
/**
* This test the getHeaderStruct() method.
* @covers ProcessMaker\PDF\TCPDFHeaderFooter::getHeaderStruct()
* @test
*/
public function it_should_test_the_getHeaderStruct()
{
$result = $this->object->getHeaderStruct();
$this->assertNotNull($result);
$this->assertEquals(HeaderStruct::class, get_class($result));
}
/**
* This test the getFooterStruct() method.
* @covers ProcessMaker\PDF\TCPDFHeaderFooter::getFooterStruct()
* @test
*/
public function it_should_test_the_getFooterStruct()
{
$result = $this->object->getFooterStruct();
$this->assertNotNull($result);
$this->assertEquals(FooterStruct::class, get_class($result));
}
/**
* This test the Header() method override.
* @covers ProcessMaker\PDF\TCPDFHeaderFooter::Header()
* @covers ProcessMaker\PDF\TCPDFHeaderFooter::buildHeaderLogo()
* @covers ProcessMaker\PDF\TCPDFHeaderFooter::buildHeaderTitle()
* @covers ProcessMaker\PDF\TCPDFHeaderFooter::buildHeaderPageNumber()
* @test
*/
public function it_should_test_the_Header()
{
$this->object->AddPage();
$result = $this->object->Header();
$this->assertEmpty($result);
}
/**
* @covers ProcessMaker\PDF\TCPDFHeaderFooter::Footer()
* @covers ProcessMaker\PDF\TCPDFHeaderFooter::buildFooterLogo()
* @covers ProcessMaker\PDF\TCPDFHeaderFooter::buildFooterTitle()
* @covers ProcessMaker\PDF\TCPDFHeaderFooter::buildFooterPageNumber()
* @test
*/
public function it_should_test_the_Footer()
{
$this->object->AddPage();
$result = $this->object->Footer();
$this->assertEmpty($result);
}
}

View File

@@ -3,6 +3,7 @@
use Illuminate\Filesystem\Filesystem;
use Illuminate\Support\Facades\Log;
use ProcessMaker\Core\System;
use ProcessMaker\PDF\TCPDFHeaderFooter;
class OutputDocument extends BaseOutputDocument
{
@@ -880,7 +881,7 @@ class OutputDocument extends BaseOutputDocument
$content = str_replace("margin-left", "text-indent", $content);
// Instance the TCPDF library
$pdf = new TCPDF($orientation, PDF_UNIT, $media, true, 'UTF-8', false);
$pdf = new TCPDFHeaderFooter($orientation, PDF_UNIT, $media, true, 'UTF-8', false);
// Set document information
$pdf->SetCreator(PDF_CREATOR);
@@ -897,8 +898,15 @@ class OutputDocument extends BaseOutputDocument
$margins["bottom"] = ($margins["bottom"] >= 0) ? $margins["bottom"] : PDF_MARGIN_BOTTOM;
// Set margins configuration
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$headerOptions = $this->setHeaderOptions($pdf, $fields);
$footerOptions = $this->setFooterOptions($pdf, $fields);
$pdf->setPrintHeader($headerOptions);
$pdf->setPrintFooter($footerOptions);
// Important: footer position depends on header enable
if ($footerOptions === true) {
$pdf->setPrintHeader(true);
}
$pdf->SetLeftMargin($margins['left']);
$pdf->SetTopMargin($margins['top']);
$pdf->SetRightMargin($margins['right']);
@@ -1369,4 +1377,76 @@ class OutputDocument extends BaseOutputDocument
// Save the CSS file
file_put_contents(K_PATH_FONTS . 'fonts.css', $css);
}
/**
* Set and build if header options exist.
* @param TCPDFHeaderFooter $pdf
* @param array $fields
* @return bool
*/
private function setHeaderOptions(TCPDFHeaderFooter $pdf, array $fields): bool
{
if (empty($this->out_doc_header)) {
return false;
}
$header = json_decode($this->out_doc_header);
if ($header->enableHeader === false) {
return false;
}
$struct = $pdf->getHeaderStruct();
$struct->setLogo(G::replaceDataField($header->logo ?? '', $fields));
$struct->setLogoWidth($header->logoWidth ?? 0);
$struct->setLogoPositionX($header->logoPositionX ?? 0);
$struct->setLogoPositionY($header->logoPositionY ?? 0);
$struct->setTitle(G::replaceDataField($header->title ?? '', $fields));
$struct->setTitleFontSize($header->titleFontSize ?? 0);
$struct->setTitleFontPositionX($header->titleFontPositionX ?? 0);
$struct->setTitleFontPositionY($header->titleFontPositionY ?? 0);
$struct->setPageNumber($header->pageNumber ?? false);
$struct->setPageNumberTitle(G::replaceDataField($header->pageNumberTitle ?? '', $fields));
$struct->setPageNumberTotal($header->pageNumberTotal ?? false);
$struct->setPageNumberPositionX($header->pageNumberPositionX ?? 0);
$struct->setPageNumberPositionY($header->pageNumberPositionY ?? 0);
return true;
}
/**
* Set and build if footer options exist.
* @param TCPDFHeaderFooter $pdf
* @param array $fields
* @return bool
*/
private function setFooterOptions(TCPDFHeaderFooter $pdf, array $fields): bool
{
if (empty($this->out_doc_footer)) {
return false;
}
$footer = json_decode($this->out_doc_footer);
if ($footer->enableFooter === false) {
return false;
}
$struct = $pdf->getFooterStruct();
$struct->setLogo(G::replaceDataField($footer->logo ?? '', $fields));
$struct->setLogoWidth($footer->logoWidth ?? 0);
$struct->setLogoPositionX($footer->logoPositionX ?? 0);
$struct->setLogoPositionY($footer->logoPositionY ?? 0);
$struct->setTitle(G::replaceDataField($footer->title ?? '', $fields));
$struct->setTitleFontSize($footer->titleFontSize ?? 0);
$struct->setTitleFontPositionX($footer->titleFontPositionX ?? 0);
$struct->setTitleFontPositionY($footer->titleFontPositionY ?? 0);
$struct->setPageNumber($footer->pageNumber ?? false);
$struct->setPageNumberTitle(G::replaceDataField($footer->pageNumberTitle ?? '', $fields));
$struct->setPageNumberTotal($footer->pageNumberTotal ?? false);
$struct->setPageNumberPositionX($footer->pageNumberPositionX ?? 0);
$struct->setPageNumberPositionY($footer->pageNumberPositionY ?? 0);
return true;
}
}

View File

@@ -117,6 +117,10 @@ class OutputDocumentMapBuilder
$tMap->addColumn('OUT_DOC_OPEN_TYPE', 'OutDocOpenType', 'int', CreoleTypes::INTEGER, false, null);
$tMap->addColumn('OUT_DOC_HEADER', 'OutDocHeader', 'string', CreoleTypes::LONGVARCHAR, false, null);
$tMap->addColumn('OUT_DOC_FOOTER', 'OutDocFooter', 'string', CreoleTypes::LONGVARCHAR, false, null);
$tMap->addValidator('OUT_DOC_UID', 'maxLength', 'propel.validator.MaxLengthValidator', '32', 'Output Document UID can be no larger than 32 in size');
$tMap->addValidator('OUT_DOC_UID', 'required', 'propel.validator.RequiredValidator', '', 'Output Document UID is required.');

View File

@@ -183,6 +183,18 @@ abstract class BaseOutputDocument extends BaseObject implements Persistent
*/
protected $out_doc_open_type = 1;
/**
* The value for the out_doc_header field.
* @var string
*/
protected $out_doc_header;
/**
* The value for the out_doc_footer field.
* @var string
*/
protected $out_doc_footer;
/**
* Flag to prevent endless save loop, if this object is referenced
* by another object which falls in this transaction.
@@ -483,6 +495,28 @@ abstract class BaseOutputDocument extends BaseObject implements Persistent
return $this->out_doc_open_type;
}
/**
* Get the [out_doc_header] column value.
*
* @return string
*/
public function getOutDocHeader()
{
return $this->out_doc_header;
}
/**
* Get the [out_doc_footer] column value.
*
* @return string
*/
public function getOutDocFooter()
{
return $this->out_doc_footer;
}
/**
* Set the value of [out_doc_uid] column.
*
@@ -1055,6 +1089,50 @@ abstract class BaseOutputDocument extends BaseObject implements Persistent
} // setOutDocOpenType()
/**
* Set the value of [out_doc_header] column.
*
* @param string $v new value
* @return void
*/
public function setOutDocHeader($v)
{
// Since the native PHP type for this column is string,
// we will cast the input to a string (if it is not).
if ($v !== null && !is_string($v)) {
$v = (string) $v;
}
if ($this->out_doc_header !== $v) {
$this->out_doc_header = $v;
$this->modifiedColumns[] = OutputDocumentPeer::OUT_DOC_HEADER;
}
} // setOutDocHeader()
/**
* Set the value of [out_doc_footer] column.
*
* @param string $v new value
* @return void
*/
public function setOutDocFooter($v)
{
// Since the native PHP type for this column is string,
// we will cast the input to a string (if it is not).
if ($v !== null && !is_string($v)) {
$v = (string) $v;
}
if ($this->out_doc_footer !== $v) {
$this->out_doc_footer = $v;
$this->modifiedColumns[] = OutputDocumentPeer::OUT_DOC_FOOTER;
}
} // setOutDocFooter()
/**
* Hydrates (populates) the object variables with values from the database resultset.
*
@@ -1124,12 +1202,16 @@ abstract class BaseOutputDocument extends BaseObject implements Persistent
$this->out_doc_open_type = $rs->getInt($startcol + 25);
$this->out_doc_header = $rs->getString($startcol + 26);
$this->out_doc_footer = $rs->getString($startcol + 27);
$this->resetModified();
$this->setNew(false);
// FIXME - using NUM_COLUMNS may be clearer.
return $startcol + 26; // 26 = OutputDocumentPeer::NUM_COLUMNS - OutputDocumentPeer::NUM_LAZY_LOAD_COLUMNS).
return $startcol + 28; // 28 = OutputDocumentPeer::NUM_COLUMNS - OutputDocumentPeer::NUM_LAZY_LOAD_COLUMNS).
} catch (Exception $e) {
throw new PropelException("Error populating OutputDocument object", $e);
@@ -1411,6 +1493,12 @@ abstract class BaseOutputDocument extends BaseObject implements Persistent
case 25:
return $this->getOutDocOpenType();
break;
case 26:
return $this->getOutDocHeader();
break;
case 27:
return $this->getOutDocFooter();
break;
default:
return null;
break;
@@ -1457,6 +1545,8 @@ abstract class BaseOutputDocument extends BaseObject implements Persistent
$keys[23] => $this->getOutDocPdfSecurityOwnerPassword(),
$keys[24] => $this->getOutDocPdfSecurityPermissions(),
$keys[25] => $this->getOutDocOpenType(),
$keys[26] => $this->getOutDocHeader(),
$keys[27] => $this->getOutDocFooter(),
);
return $result;
}
@@ -1566,6 +1656,12 @@ abstract class BaseOutputDocument extends BaseObject implements Persistent
case 25:
$this->setOutDocOpenType($value);
break;
case 26:
$this->setOutDocHeader($value);
break;
case 27:
$this->setOutDocFooter($value);
break;
} // switch()
}
@@ -1693,6 +1789,14 @@ abstract class BaseOutputDocument extends BaseObject implements Persistent
$this->setOutDocOpenType($arr[$keys[25]]);
}
if (array_key_exists($keys[26], $arr)) {
$this->setOutDocHeader($arr[$keys[26]]);
}
if (array_key_exists($keys[27], $arr)) {
$this->setOutDocFooter($arr[$keys[27]]);
}
}
/**
@@ -1808,6 +1912,14 @@ abstract class BaseOutputDocument extends BaseObject implements Persistent
$criteria->add(OutputDocumentPeer::OUT_DOC_OPEN_TYPE, $this->out_doc_open_type);
}
if ($this->isColumnModified(OutputDocumentPeer::OUT_DOC_HEADER)) {
$criteria->add(OutputDocumentPeer::OUT_DOC_HEADER, $this->out_doc_header);
}
if ($this->isColumnModified(OutputDocumentPeer::OUT_DOC_FOOTER)) {
$criteria->add(OutputDocumentPeer::OUT_DOC_FOOTER, $this->out_doc_footer);
}
return $criteria;
}
@@ -1912,6 +2024,10 @@ abstract class BaseOutputDocument extends BaseObject implements Persistent
$copyObj->setOutDocOpenType($this->out_doc_open_type);
$copyObj->setOutDocHeader($this->out_doc_header);
$copyObj->setOutDocFooter($this->out_doc_footer);
$copyObj->setNew(true);

View File

@@ -25,7 +25,7 @@ abstract class BaseOutputDocumentPeer
const CLASS_DEFAULT = 'classes.model.OutputDocument';
/** The total number of columns. */
const NUM_COLUMNS = 26;
const NUM_COLUMNS = 28;
/** The number of lazy-loaded columns. */
const NUM_LAZY_LOAD_COLUMNS = 0;
@@ -109,6 +109,12 @@ abstract class BaseOutputDocumentPeer
/** the column name for the OUT_DOC_OPEN_TYPE field */
const OUT_DOC_OPEN_TYPE = 'OUTPUT_DOCUMENT.OUT_DOC_OPEN_TYPE';
/** the column name for the OUT_DOC_HEADER field */
const OUT_DOC_HEADER = 'OUTPUT_DOCUMENT.OUT_DOC_HEADER';
/** the column name for the OUT_DOC_FOOTER field */
const OUT_DOC_FOOTER = 'OUTPUT_DOCUMENT.OUT_DOC_FOOTER';
/** The PHP to DB Name Mapping */
private static $phpNameMap = null;
@@ -120,10 +126,10 @@ abstract class BaseOutputDocumentPeer
* e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
*/
private static $fieldNames = array (
BasePeer::TYPE_PHPNAME => array ('OutDocUid', 'OutDocId', 'OutDocTitle', 'OutDocDescription', 'OutDocFilename', 'OutDocTemplate', 'ProUid', 'OutDocReportGenerator', 'OutDocLandscape', 'OutDocMedia', 'OutDocLeftMargin', 'OutDocRightMargin', 'OutDocTopMargin', 'OutDocBottomMargin', 'OutDocGenerate', 'OutDocType', 'OutDocCurrentRevision', 'OutDocFieldMapping', 'OutDocVersioning', 'OutDocDestinationPath', 'OutDocTags', 'OutDocPdfSecurityEnabled', 'OutDocPdfSecurityOpenPassword', 'OutDocPdfSecurityOwnerPassword', 'OutDocPdfSecurityPermissions', 'OutDocOpenType', ),
BasePeer::TYPE_COLNAME => array (OutputDocumentPeer::OUT_DOC_UID, OutputDocumentPeer::OUT_DOC_ID, OutputDocumentPeer::OUT_DOC_TITLE, OutputDocumentPeer::OUT_DOC_DESCRIPTION, OutputDocumentPeer::OUT_DOC_FILENAME, OutputDocumentPeer::OUT_DOC_TEMPLATE, OutputDocumentPeer::PRO_UID, OutputDocumentPeer::OUT_DOC_REPORT_GENERATOR, OutputDocumentPeer::OUT_DOC_LANDSCAPE, OutputDocumentPeer::OUT_DOC_MEDIA, OutputDocumentPeer::OUT_DOC_LEFT_MARGIN, OutputDocumentPeer::OUT_DOC_RIGHT_MARGIN, OutputDocumentPeer::OUT_DOC_TOP_MARGIN, OutputDocumentPeer::OUT_DOC_BOTTOM_MARGIN, OutputDocumentPeer::OUT_DOC_GENERATE, OutputDocumentPeer::OUT_DOC_TYPE, OutputDocumentPeer::OUT_DOC_CURRENT_REVISION, OutputDocumentPeer::OUT_DOC_FIELD_MAPPING, OutputDocumentPeer::OUT_DOC_VERSIONING, OutputDocumentPeer::OUT_DOC_DESTINATION_PATH, OutputDocumentPeer::OUT_DOC_TAGS, OutputDocumentPeer::OUT_DOC_PDF_SECURITY_ENABLED, OutputDocumentPeer::OUT_DOC_PDF_SECURITY_OPEN_PASSWORD, OutputDocumentPeer::OUT_DOC_PDF_SECURITY_OWNER_PASSWORD, OutputDocumentPeer::OUT_DOC_PDF_SECURITY_PERMISSIONS, OutputDocumentPeer::OUT_DOC_OPEN_TYPE, ),
BasePeer::TYPE_FIELDNAME => array ('OUT_DOC_UID', 'OUT_DOC_ID', 'OUT_DOC_TITLE', 'OUT_DOC_DESCRIPTION', 'OUT_DOC_FILENAME', 'OUT_DOC_TEMPLATE', 'PRO_UID', 'OUT_DOC_REPORT_GENERATOR', 'OUT_DOC_LANDSCAPE', 'OUT_DOC_MEDIA', 'OUT_DOC_LEFT_MARGIN', 'OUT_DOC_RIGHT_MARGIN', 'OUT_DOC_TOP_MARGIN', 'OUT_DOC_BOTTOM_MARGIN', 'OUT_DOC_GENERATE', 'OUT_DOC_TYPE', 'OUT_DOC_CURRENT_REVISION', 'OUT_DOC_FIELD_MAPPING', 'OUT_DOC_VERSIONING', 'OUT_DOC_DESTINATION_PATH', 'OUT_DOC_TAGS', 'OUT_DOC_PDF_SECURITY_ENABLED', 'OUT_DOC_PDF_SECURITY_OPEN_PASSWORD', 'OUT_DOC_PDF_SECURITY_OWNER_PASSWORD', 'OUT_DOC_PDF_SECURITY_PERMISSIONS', 'OUT_DOC_OPEN_TYPE', ),
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, )
BasePeer::TYPE_PHPNAME => array ('OutDocUid', 'OutDocId', 'OutDocTitle', 'OutDocDescription', 'OutDocFilename', 'OutDocTemplate', 'ProUid', 'OutDocReportGenerator', 'OutDocLandscape', 'OutDocMedia', 'OutDocLeftMargin', 'OutDocRightMargin', 'OutDocTopMargin', 'OutDocBottomMargin', 'OutDocGenerate', 'OutDocType', 'OutDocCurrentRevision', 'OutDocFieldMapping', 'OutDocVersioning', 'OutDocDestinationPath', 'OutDocTags', 'OutDocPdfSecurityEnabled', 'OutDocPdfSecurityOpenPassword', 'OutDocPdfSecurityOwnerPassword', 'OutDocPdfSecurityPermissions', 'OutDocOpenType', 'OutDocHeader', 'OutDocFooter', ),
BasePeer::TYPE_COLNAME => array (OutputDocumentPeer::OUT_DOC_UID, OutputDocumentPeer::OUT_DOC_ID, OutputDocumentPeer::OUT_DOC_TITLE, OutputDocumentPeer::OUT_DOC_DESCRIPTION, OutputDocumentPeer::OUT_DOC_FILENAME, OutputDocumentPeer::OUT_DOC_TEMPLATE, OutputDocumentPeer::PRO_UID, OutputDocumentPeer::OUT_DOC_REPORT_GENERATOR, OutputDocumentPeer::OUT_DOC_LANDSCAPE, OutputDocumentPeer::OUT_DOC_MEDIA, OutputDocumentPeer::OUT_DOC_LEFT_MARGIN, OutputDocumentPeer::OUT_DOC_RIGHT_MARGIN, OutputDocumentPeer::OUT_DOC_TOP_MARGIN, OutputDocumentPeer::OUT_DOC_BOTTOM_MARGIN, OutputDocumentPeer::OUT_DOC_GENERATE, OutputDocumentPeer::OUT_DOC_TYPE, OutputDocumentPeer::OUT_DOC_CURRENT_REVISION, OutputDocumentPeer::OUT_DOC_FIELD_MAPPING, OutputDocumentPeer::OUT_DOC_VERSIONING, OutputDocumentPeer::OUT_DOC_DESTINATION_PATH, OutputDocumentPeer::OUT_DOC_TAGS, OutputDocumentPeer::OUT_DOC_PDF_SECURITY_ENABLED, OutputDocumentPeer::OUT_DOC_PDF_SECURITY_OPEN_PASSWORD, OutputDocumentPeer::OUT_DOC_PDF_SECURITY_OWNER_PASSWORD, OutputDocumentPeer::OUT_DOC_PDF_SECURITY_PERMISSIONS, OutputDocumentPeer::OUT_DOC_OPEN_TYPE, OutputDocumentPeer::OUT_DOC_HEADER, OutputDocumentPeer::OUT_DOC_FOOTER, ),
BasePeer::TYPE_FIELDNAME => array ('OUT_DOC_UID', 'OUT_DOC_ID', 'OUT_DOC_TITLE', 'OUT_DOC_DESCRIPTION', 'OUT_DOC_FILENAME', 'OUT_DOC_TEMPLATE', 'PRO_UID', 'OUT_DOC_REPORT_GENERATOR', 'OUT_DOC_LANDSCAPE', 'OUT_DOC_MEDIA', 'OUT_DOC_LEFT_MARGIN', 'OUT_DOC_RIGHT_MARGIN', 'OUT_DOC_TOP_MARGIN', 'OUT_DOC_BOTTOM_MARGIN', 'OUT_DOC_GENERATE', 'OUT_DOC_TYPE', 'OUT_DOC_CURRENT_REVISION', 'OUT_DOC_FIELD_MAPPING', 'OUT_DOC_VERSIONING', 'OUT_DOC_DESTINATION_PATH', 'OUT_DOC_TAGS', 'OUT_DOC_PDF_SECURITY_ENABLED', 'OUT_DOC_PDF_SECURITY_OPEN_PASSWORD', 'OUT_DOC_PDF_SECURITY_OWNER_PASSWORD', 'OUT_DOC_PDF_SECURITY_PERMISSIONS', 'OUT_DOC_OPEN_TYPE', 'OUT_DOC_HEADER', 'OUT_DOC_FOOTER', ),
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, )
);
/**
@@ -133,10 +139,10 @@ abstract class BaseOutputDocumentPeer
* e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0
*/
private static $fieldKeys = array (
BasePeer::TYPE_PHPNAME => array ('OutDocUid' => 0, 'OutDocId' => 1, 'OutDocTitle' => 2, 'OutDocDescription' => 3, 'OutDocFilename' => 4, 'OutDocTemplate' => 5, 'ProUid' => 6, 'OutDocReportGenerator' => 7, 'OutDocLandscape' => 8, 'OutDocMedia' => 9, 'OutDocLeftMargin' => 10, 'OutDocRightMargin' => 11, 'OutDocTopMargin' => 12, 'OutDocBottomMargin' => 13, 'OutDocGenerate' => 14, 'OutDocType' => 15, 'OutDocCurrentRevision' => 16, 'OutDocFieldMapping' => 17, 'OutDocVersioning' => 18, 'OutDocDestinationPath' => 19, 'OutDocTags' => 20, 'OutDocPdfSecurityEnabled' => 21, 'OutDocPdfSecurityOpenPassword' => 22, 'OutDocPdfSecurityOwnerPassword' => 23, 'OutDocPdfSecurityPermissions' => 24, 'OutDocOpenType' => 25, ),
BasePeer::TYPE_COLNAME => array (OutputDocumentPeer::OUT_DOC_UID => 0, OutputDocumentPeer::OUT_DOC_ID => 1, OutputDocumentPeer::OUT_DOC_TITLE => 2, OutputDocumentPeer::OUT_DOC_DESCRIPTION => 3, OutputDocumentPeer::OUT_DOC_FILENAME => 4, OutputDocumentPeer::OUT_DOC_TEMPLATE => 5, OutputDocumentPeer::PRO_UID => 6, OutputDocumentPeer::OUT_DOC_REPORT_GENERATOR => 7, OutputDocumentPeer::OUT_DOC_LANDSCAPE => 8, OutputDocumentPeer::OUT_DOC_MEDIA => 9, OutputDocumentPeer::OUT_DOC_LEFT_MARGIN => 10, OutputDocumentPeer::OUT_DOC_RIGHT_MARGIN => 11, OutputDocumentPeer::OUT_DOC_TOP_MARGIN => 12, OutputDocumentPeer::OUT_DOC_BOTTOM_MARGIN => 13, OutputDocumentPeer::OUT_DOC_GENERATE => 14, OutputDocumentPeer::OUT_DOC_TYPE => 15, OutputDocumentPeer::OUT_DOC_CURRENT_REVISION => 16, OutputDocumentPeer::OUT_DOC_FIELD_MAPPING => 17, OutputDocumentPeer::OUT_DOC_VERSIONING => 18, OutputDocumentPeer::OUT_DOC_DESTINATION_PATH => 19, OutputDocumentPeer::OUT_DOC_TAGS => 20, OutputDocumentPeer::OUT_DOC_PDF_SECURITY_ENABLED => 21, OutputDocumentPeer::OUT_DOC_PDF_SECURITY_OPEN_PASSWORD => 22, OutputDocumentPeer::OUT_DOC_PDF_SECURITY_OWNER_PASSWORD => 23, OutputDocumentPeer::OUT_DOC_PDF_SECURITY_PERMISSIONS => 24, OutputDocumentPeer::OUT_DOC_OPEN_TYPE => 25, ),
BasePeer::TYPE_FIELDNAME => array ('OUT_DOC_UID' => 0, 'OUT_DOC_ID' => 1, 'OUT_DOC_TITLE' => 2, 'OUT_DOC_DESCRIPTION' => 3, 'OUT_DOC_FILENAME' => 4, 'OUT_DOC_TEMPLATE' => 5, 'PRO_UID' => 6, 'OUT_DOC_REPORT_GENERATOR' => 7, 'OUT_DOC_LANDSCAPE' => 8, 'OUT_DOC_MEDIA' => 9, 'OUT_DOC_LEFT_MARGIN' => 10, 'OUT_DOC_RIGHT_MARGIN' => 11, 'OUT_DOC_TOP_MARGIN' => 12, 'OUT_DOC_BOTTOM_MARGIN' => 13, 'OUT_DOC_GENERATE' => 14, 'OUT_DOC_TYPE' => 15, 'OUT_DOC_CURRENT_REVISION' => 16, 'OUT_DOC_FIELD_MAPPING' => 17, 'OUT_DOC_VERSIONING' => 18, 'OUT_DOC_DESTINATION_PATH' => 19, 'OUT_DOC_TAGS' => 20, 'OUT_DOC_PDF_SECURITY_ENABLED' => 21, 'OUT_DOC_PDF_SECURITY_OPEN_PASSWORD' => 22, 'OUT_DOC_PDF_SECURITY_OWNER_PASSWORD' => 23, 'OUT_DOC_PDF_SECURITY_PERMISSIONS' => 24, 'OUT_DOC_OPEN_TYPE' => 25, ),
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, )
BasePeer::TYPE_PHPNAME => array ('OutDocUid' => 0, 'OutDocId' => 1, 'OutDocTitle' => 2, 'OutDocDescription' => 3, 'OutDocFilename' => 4, 'OutDocTemplate' => 5, 'ProUid' => 6, 'OutDocReportGenerator' => 7, 'OutDocLandscape' => 8, 'OutDocMedia' => 9, 'OutDocLeftMargin' => 10, 'OutDocRightMargin' => 11, 'OutDocTopMargin' => 12, 'OutDocBottomMargin' => 13, 'OutDocGenerate' => 14, 'OutDocType' => 15, 'OutDocCurrentRevision' => 16, 'OutDocFieldMapping' => 17, 'OutDocVersioning' => 18, 'OutDocDestinationPath' => 19, 'OutDocTags' => 20, 'OutDocPdfSecurityEnabled' => 21, 'OutDocPdfSecurityOpenPassword' => 22, 'OutDocPdfSecurityOwnerPassword' => 23, 'OutDocPdfSecurityPermissions' => 24, 'OutDocOpenType' => 25, 'OutDocHeader' => 26, 'OutDocFooter' => 27, ),
BasePeer::TYPE_COLNAME => array (OutputDocumentPeer::OUT_DOC_UID => 0, OutputDocumentPeer::OUT_DOC_ID => 1, OutputDocumentPeer::OUT_DOC_TITLE => 2, OutputDocumentPeer::OUT_DOC_DESCRIPTION => 3, OutputDocumentPeer::OUT_DOC_FILENAME => 4, OutputDocumentPeer::OUT_DOC_TEMPLATE => 5, OutputDocumentPeer::PRO_UID => 6, OutputDocumentPeer::OUT_DOC_REPORT_GENERATOR => 7, OutputDocumentPeer::OUT_DOC_LANDSCAPE => 8, OutputDocumentPeer::OUT_DOC_MEDIA => 9, OutputDocumentPeer::OUT_DOC_LEFT_MARGIN => 10, OutputDocumentPeer::OUT_DOC_RIGHT_MARGIN => 11, OutputDocumentPeer::OUT_DOC_TOP_MARGIN => 12, OutputDocumentPeer::OUT_DOC_BOTTOM_MARGIN => 13, OutputDocumentPeer::OUT_DOC_GENERATE => 14, OutputDocumentPeer::OUT_DOC_TYPE => 15, OutputDocumentPeer::OUT_DOC_CURRENT_REVISION => 16, OutputDocumentPeer::OUT_DOC_FIELD_MAPPING => 17, OutputDocumentPeer::OUT_DOC_VERSIONING => 18, OutputDocumentPeer::OUT_DOC_DESTINATION_PATH => 19, OutputDocumentPeer::OUT_DOC_TAGS => 20, OutputDocumentPeer::OUT_DOC_PDF_SECURITY_ENABLED => 21, OutputDocumentPeer::OUT_DOC_PDF_SECURITY_OPEN_PASSWORD => 22, OutputDocumentPeer::OUT_DOC_PDF_SECURITY_OWNER_PASSWORD => 23, OutputDocumentPeer::OUT_DOC_PDF_SECURITY_PERMISSIONS => 24, OutputDocumentPeer::OUT_DOC_OPEN_TYPE => 25, OutputDocumentPeer::OUT_DOC_HEADER => 26, OutputDocumentPeer::OUT_DOC_FOOTER => 27, ),
BasePeer::TYPE_FIELDNAME => array ('OUT_DOC_UID' => 0, 'OUT_DOC_ID' => 1, 'OUT_DOC_TITLE' => 2, 'OUT_DOC_DESCRIPTION' => 3, 'OUT_DOC_FILENAME' => 4, 'OUT_DOC_TEMPLATE' => 5, 'PRO_UID' => 6, 'OUT_DOC_REPORT_GENERATOR' => 7, 'OUT_DOC_LANDSCAPE' => 8, 'OUT_DOC_MEDIA' => 9, 'OUT_DOC_LEFT_MARGIN' => 10, 'OUT_DOC_RIGHT_MARGIN' => 11, 'OUT_DOC_TOP_MARGIN' => 12, 'OUT_DOC_BOTTOM_MARGIN' => 13, 'OUT_DOC_GENERATE' => 14, 'OUT_DOC_TYPE' => 15, 'OUT_DOC_CURRENT_REVISION' => 16, 'OUT_DOC_FIELD_MAPPING' => 17, 'OUT_DOC_VERSIONING' => 18, 'OUT_DOC_DESTINATION_PATH' => 19, 'OUT_DOC_TAGS' => 20, 'OUT_DOC_PDF_SECURITY_ENABLED' => 21, 'OUT_DOC_PDF_SECURITY_OPEN_PASSWORD' => 22, 'OUT_DOC_PDF_SECURITY_OWNER_PASSWORD' => 23, 'OUT_DOC_PDF_SECURITY_PERMISSIONS' => 24, 'OUT_DOC_OPEN_TYPE' => 25, 'OUT_DOC_HEADER' => 26, 'OUT_DOC_FOOTER' => 27, ),
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, )
);
/**
@@ -289,6 +295,10 @@ abstract class BaseOutputDocumentPeer
$criteria->addSelectColumn(OutputDocumentPeer::OUT_DOC_OPEN_TYPE);
$criteria->addSelectColumn(OutputDocumentPeer::OUT_DOC_HEADER);
$criteria->addSelectColumn(OutputDocumentPeer::OUT_DOC_FOOTER);
}
const COUNT = 'COUNT(OUTPUT_DOCUMENT.OUT_DOC_UID)';

View File

@@ -1002,6 +1002,8 @@
<column name="OUT_DOC_PDF_SECURITY_OWNER_PASSWORD" type="VARCHAR" size="32" required="false" default=""/>
<column name="OUT_DOC_PDF_SECURITY_PERMISSIONS" type="VARCHAR" size="150" required="false" default=""/>
<column name="OUT_DOC_OPEN_TYPE" type="INTEGER" default="1"/>
<column name="OUT_DOC_HEADER" type="LONGVARCHAR" required="false"/>
<column name="OUT_DOC_FOOTER" type="LONGVARCHAR" required="false"/>
<unique name="INDEX_OUT_DOC_ID">
<unique-column name="OUT_DOC_ID"/>
</unique>

View File

@@ -477,6 +477,8 @@ CREATE TABLE `OUTPUT_DOCUMENT`
`OUT_DOC_PDF_SECURITY_OWNER_PASSWORD` VARCHAR(32) default '',
`OUT_DOC_PDF_SECURITY_PERMISSIONS` VARCHAR(150) default '',
`OUT_DOC_OPEN_TYPE` INTEGER default 1,
`OUT_DOC_HEADER` MEDIUMTEXT,
`OUT_DOC_FOOTER` MEDIUMTEXT,
PRIMARY KEY (`OUT_DOC_UID`),
UNIQUE KEY `INDEX_OUT_DOC_ID` (`OUT_DOC_ID`)
)ENGINE=InnoDB DEFAULT CHARSET='utf8';

View File

@@ -1,87 +1,57 @@
<?php
namespace ProcessMaker\BusinessModel;
use \G;
use Exception;
use G;
use ProcessMaker\Model\OutputDocument as ModelOutputDocument;
class OutputDocument
{
/**
* Return output documents of a project
* @param string $sProcessUID
* Return output documents of a project.
* @param string $proUid
* @return array
*
* @access public
*/
public function getOutputDocuments($sProcessUID = '')
public function getOutputDocuments($proUid = '')
{
try {
$sDelimiter = \DBAdapter::getStringDelimiter();
$oCriteria = new \Criteria('workflow');
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_UID);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_TYPE);
$oCriteria->addSelectColumn(\OutputDocumentPeer::PRO_UID);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_REPORT_GENERATOR);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_LANDSCAPE);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_MEDIA);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_LEFT_MARGIN);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_RIGHT_MARGIN);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_TOP_MARGIN);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_BOTTOM_MARGIN);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_GENERATE);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_TYPE);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_CURRENT_REVISION);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_FIELD_MAPPING);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_VERSIONING);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_DESTINATION_PATH);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_TAGS);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_PDF_SECURITY_ENABLED);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_PDF_SECURITY_OPEN_PASSWORD);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_PDF_SECURITY_OWNER_PASSWORD);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_PDF_SECURITY_PERMISSIONS);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_OPEN_TYPE);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_TITLE);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_DESCRIPTION);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_FILENAME);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_TEMPLATE);
$oCriteria->add(\OutputDocumentPeer::PRO_UID, $sProcessUID);
$oDataset = \OutputDocumentPeer::doSelectRS($oCriteria);
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$oDataset->next();
$outputDocArray = array();
while ($aRow = $oDataset->getRow()) {
if (($aRow['OUT_DOC_TITLE'] == null) || ($aRow['OUT_DOC_TITLE'] == "")) {
// There is no transaltion for this Document name, try to get/regenerate the label
$outputDocument = new \OutputDocument();
$outputDocumentObj = $outputDocument->load($aRow['OUT_DOC_UID']);
$aRow['OUT_DOC_TITLE'] = $outputDocumentObj['OUT_DOC_TITLE'];
$aRow['OUT_DOC_DESCRIPTION'] = $outputDocumentObj['OUT_DOC_DESCRIPTION'];
} else {
$outputDocArray[] = array('out_doc_uid' => $aRow['OUT_DOC_UID'],
'out_doc_title' => $aRow['OUT_DOC_TITLE'],
'out_doc_description' => $aRow['OUT_DOC_DESCRIPTION'],
'out_doc_filename' => $aRow['OUT_DOC_FILENAME'],
'out_doc_template' => $aRow['OUT_DOC_TEMPLATE'],
'out_doc_report_generator' => $aRow['OUT_DOC_REPORT_GENERATOR'],
'out_doc_landscape' => $aRow['OUT_DOC_LANDSCAPE'],
'out_doc_media' => $aRow['OUT_DOC_MEDIA'],
'out_doc_left_margin' => $aRow['OUT_DOC_LEFT_MARGIN'],
'out_doc_right_margin' => $aRow['OUT_DOC_RIGHT_MARGIN'],
'out_doc_top_margin' => $aRow['OUT_DOC_TOP_MARGIN'],
'out_doc_bottom_margin' => $aRow['OUT_DOC_BOTTOM_MARGIN'],
'out_doc_generate' => $aRow['OUT_DOC_GENERATE'],
'out_doc_type' => $aRow['OUT_DOC_TYPE'],
'out_doc_current_revision' => $aRow['OUT_DOC_CURRENT_REVISION'],
'out_doc_field_mapping' => $aRow['OUT_DOC_FIELD_MAPPING'],
'out_doc_versioning' => $aRow['OUT_DOC_VERSIONING'],
'out_doc_destination_path' => $aRow['OUT_DOC_DESTINATION_PATH'],
'out_doc_tags' => $aRow['OUT_DOC_TAGS'],
'out_doc_pdf_security_enabled' => $aRow['OUT_DOC_PDF_SECURITY_ENABLED'],
'out_doc_pdf_security_permissions' => $aRow['OUT_DOC_PDF_SECURITY_PERMISSIONS'],
"out_doc_open_type" => $aRow["OUT_DOC_OPEN_TYPE"]);
$result = [];
$outputDocuments = ModelOutputDocument::select()
->where('PRO_UID', '=', $proUid)
->get();
foreach ($outputDocuments as $value) {
if (!empty($value->OUT_DOC_TITLE)) {
$result[] = [
'out_doc_uid' => $value->OUT_DOC_UID,
'out_doc_title' => $value->OUT_DOC_TITLE,
'out_doc_description' => $value->OUT_DOC_DESCRIPTION,
'out_doc_filename' => $value->OUT_DOC_FILENAME,
'out_doc_template' => $value->OUT_DOC_TEMPLATE,
'out_doc_report_generator' => $value->OUT_DOC_REPORT_GENERATOR,
'out_doc_landscape' => $value->OUT_DOC_LANDSCAPE,
'out_doc_media' => $value->OUT_DOC_MEDIA,
'out_doc_left_margin' => $value->OUT_DOC_LEFT_MARGIN,
'out_doc_right_margin' => $value->OUT_DOC_RIGHT_MARGIN,
'out_doc_top_margin' => $value->OUT_DOC_TOP_MARGIN,
'out_doc_bottom_margin' => $value->OUT_DOC_BOTTOM_MARGIN,
'out_doc_generate' => $value->OUT_DOC_GENERATE,
'out_doc_type' => $value->OUT_DOC_TYPE,
'out_doc_current_revision' => $value->OUT_DOC_CURRENT_REVISION,
'out_doc_field_mapping' => $value->OUT_DOC_FIELD_MAPPING,
'out_doc_versioning' => $value->OUT_DOC_VERSIONING,
'out_doc_destination_path' => $value->OUT_DOC_DESTINATION_PATH,
'out_doc_tags' => $value->OUT_DOC_TAGS,
'out_doc_pdf_security_enabled' => $value->OUT_DOC_PDF_SECURITY_ENABLED,
'out_doc_pdf_security_permissions' => $value->OUT_DOC_PDF_SECURITY_PERMISSIONS,
'out_doc_open_type' => $value->OUT_DOC_OPEN_TYPE,
'out_doc_header' => json_decode($value->OUT_DOC_HEADER),
'out_doc_footer' => json_decode($value->OUT_DOC_FOOTER)
];
}
$oDataset->next();
}
return $outputDocArray;
return $result;
} catch (Exception $e) {
throw $e;
}
@@ -89,83 +59,51 @@ class OutputDocument
/**
* Return a single output document of a project
* @param string $sProcessUID
* @param string $sOutputDocumentUID
* @param string $proUid
* @param string $outDocUid
* @return array
*
* @access public
*/
public function getOutputDocument($sProcessUID = '', $sOutputDocumentUID = '')
public function getOutputDocument($proUid = '', $outDocUid = '')
{
try {
$sDelimiter = \DBAdapter::getStringDelimiter();
$oCriteria = new \Criteria('workflow');
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_UID);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_TYPE);
$oCriteria->addSelectColumn(\OutputDocumentPeer::PRO_UID);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_REPORT_GENERATOR);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_LANDSCAPE);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_MEDIA);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_LEFT_MARGIN);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_RIGHT_MARGIN);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_TOP_MARGIN);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_BOTTOM_MARGIN);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_GENERATE);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_TYPE);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_CURRENT_REVISION);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_FIELD_MAPPING);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_VERSIONING);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_DESTINATION_PATH);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_TAGS);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_PDF_SECURITY_ENABLED);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_PDF_SECURITY_OPEN_PASSWORD);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_PDF_SECURITY_OWNER_PASSWORD);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_PDF_SECURITY_PERMISSIONS);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_OPEN_TYPE);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_TITLE);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_DESCRIPTION);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_FILENAME);
$oCriteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_TEMPLATE);
$oCriteria->add(\OutputDocumentPeer::OUT_DOC_UID, $sOutputDocumentUID);
$oCriteria->add(\OutputDocumentPeer::PRO_UID, $sProcessUID);
$oDataset = \OutputDocumentPeer::doSelectRS($oCriteria);
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$oDataset->next();
$outputDocArray = array();
while ($aRow = $oDataset->getRow()) {
if (($aRow['OUT_DOC_TITLE'] == null) || ($aRow['OUT_DOC_TITLE'] == "")) {
// There is no transaltion for this Document name, try to get/regenerate the label
$outputDocument = new \OutputDocument();
$outputDocumentObj = $outputDocument->load($aRow['OUT_DOC_UID']);
$aRow['OUT_DOC_TITLE'] = $outputDocumentObj['OUT_DOC_TITLE'];
$aRow['OUT_DOC_DESCRIPTION'] = $outputDocumentObj['OUT_DOC_DESCRIPTION'];
} else {
$outputDocArray = array('out_doc_uid' => $aRow['OUT_DOC_UID'],
'out_doc_title' => $aRow['OUT_DOC_TITLE'],
'out_doc_description' => $aRow['OUT_DOC_DESCRIPTION'],
'out_doc_filename' => $aRow['OUT_DOC_FILENAME'],
'out_doc_template' => $aRow['OUT_DOC_TEMPLATE'],
'out_doc_report_generator' => $aRow['OUT_DOC_REPORT_GENERATOR'],
'out_doc_landscape' => $aRow['OUT_DOC_LANDSCAPE'],
'out_doc_media' => $aRow['OUT_DOC_MEDIA'],
'out_doc_left_margin' => $aRow['OUT_DOC_LEFT_MARGIN'],
'out_doc_right_margin' => $aRow['OUT_DOC_RIGHT_MARGIN'],
'out_doc_top_margin' => $aRow['OUT_DOC_TOP_MARGIN'],
'out_doc_bottom_margin' => $aRow['OUT_DOC_BOTTOM_MARGIN'],
'out_doc_generate' => $aRow['OUT_DOC_GENERATE'],
'out_doc_type' => $aRow['OUT_DOC_TYPE'],
'out_doc_current_revision' => $aRow['OUT_DOC_CURRENT_REVISION'],
'out_doc_field_mapping' => $aRow['OUT_DOC_FIELD_MAPPING'],
'out_doc_versioning' => $aRow['OUT_DOC_VERSIONING'],
'out_doc_destination_path' => $aRow['OUT_DOC_DESTINATION_PATH'],
'out_doc_tags' => $aRow['OUT_DOC_TAGS'],
'out_doc_pdf_security_enabled' => $aRow['OUT_DOC_PDF_SECURITY_ENABLED'],
'out_doc_pdf_security_permissions' => $aRow['OUT_DOC_PDF_SECURITY_PERMISSIONS'],
"out_doc_open_type" => $aRow["OUT_DOC_OPEN_TYPE"]);
$result = [];
$outputDocuments = ModelOutputDocument::select()
->where('PRO_UID', '=', $proUid)
->where('OUT_DOC_UID', '=', $outDocUid)
->get();
foreach ($outputDocuments as $value) {
if (!empty($value->OUT_DOC_TITLE)) {
$result = [
'out_doc_uid' => $value->OUT_DOC_UID,
'out_doc_title' => $value->OUT_DOC_TITLE,
'out_doc_description' => $value->OUT_DOC_DESCRIPTION,
'out_doc_filename' => $value->OUT_DOC_FILENAME,
'out_doc_template' => $value->OUT_DOC_TEMPLATE,
'out_doc_report_generator' => $value->OUT_DOC_REPORT_GENERATOR,
'out_doc_landscape' => $value->OUT_DOC_LANDSCAPE,
'out_doc_media' => $value->OUT_DOC_MEDIA,
'out_doc_left_margin' => $value->OUT_DOC_LEFT_MARGIN,
'out_doc_right_margin' => $value->OUT_DOC_RIGHT_MARGIN,
'out_doc_top_margin' => $value->OUT_DOC_TOP_MARGIN,
'out_doc_bottom_margin' => $value->OUT_DOC_BOTTOM_MARGIN,
'out_doc_generate' => $value->OUT_DOC_GENERATE,
'out_doc_type' => $value->OUT_DOC_TYPE,
'out_doc_current_revision' => $value->OUT_DOC_CURRENT_REVISION,
'out_doc_field_mapping' => $value->OUT_DOC_FIELD_MAPPING,
'out_doc_versioning' => $value->OUT_DOC_VERSIONING,
'out_doc_destination_path' => $value->OUT_DOC_DESTINATION_PATH,
'out_doc_tags' => $value->OUT_DOC_TAGS,
'out_doc_pdf_security_enabled' => $value->OUT_DOC_PDF_SECURITY_ENABLED,
'out_doc_pdf_security_permissions' => $value->OUT_DOC_PDF_SECURITY_PERMISSIONS,
'out_doc_open_type' => $value->OUT_DOC_OPEN_TYPE,
'out_doc_header' => json_decode($value->OUT_DOC_HEADER),
'out_doc_footer' => json_decode($value->OUT_DOC_FOOTER)
];
}
$oDataset->next();
}
return $outputDocArray;
return $result;
} catch (Exception $e) {
throw $e;
}
@@ -181,6 +119,19 @@ class OutputDocument
*/
public function addOutputDocument($sProcessUID, $outputDocumentData)
{
if (empty($outputDocumentData['out_doc_header'])) {
$outputDocumentData['out_doc_header'] = [];
}
if (isset($outputDocumentData['out_doc_header'])) {
$outputDocumentData['out_doc_header'] = json_encode($outputDocumentData['out_doc_header']);
}
if (empty($outputDocumentData['out_doc_footer'])) {
$outputDocumentData['out_doc_footer'] = [];
}
if (isset($outputDocumentData['out_doc_footer'])) {
$outputDocumentData['out_doc_footer'] = json_encode($outputDocumentData['out_doc_footer']);
}
$pemission = $outputDocumentData['out_doc_pdf_security_permissions'];
$pemission = explode("|", $pemission);
foreach ($pemission as $row) {
@@ -222,6 +173,9 @@ class OutputDocument
}
$outDocUid = $oOutputDocument->create($outputDocumentData);
$outputDocumentData = array_change_key_case($outputDocumentData, CASE_LOWER);
$outputDocumentData['out_doc_header'] = json_decode($outputDocumentData['out_doc_header']);
$outputDocumentData['out_doc_footer'] = json_decode($outputDocumentData['out_doc_footer']);
$this->updateOutputDocument($sProcessUID, $outputDocumentData, 1, $outDocUid);
//Return
unset($outputDocumentData["PRO_UID"]);
@@ -244,6 +198,19 @@ class OutputDocument
*/
public function updateOutputDocument($sProcessUID, $outputDocumentData, $sFlag, $sOutputDocumentUID = '')
{
if (empty($outputDocumentData['out_doc_header'])) {
$outputDocumentData['out_doc_header'] = [];
}
if (isset($outputDocumentData['out_doc_header'])) {
$outputDocumentData['out_doc_header'] = json_encode($outputDocumentData['out_doc_header']);
}
if (empty($outputDocumentData['out_doc_footer'])) {
$outputDocumentData['out_doc_footer'] = [];
}
if (isset($outputDocumentData['out_doc_footer'])) {
$outputDocumentData['out_doc_footer'] = json_encode($outputDocumentData['out_doc_footer']);
}
$oConnection = \Propel::getConnection(\OutputDocumentPeer::DATABASE_NAME);
$pemission = $outputDocumentData['out_doc_pdf_security_permissions'];
$pemission = explode("|", $pemission);

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,11 @@
<?php
namespace ProcessMaker\PDF;
class FooterStruct
{
/**
* Using basic struct for footer properties.
*/
use BasicStruct;
}

View File

@@ -0,0 +1,11 @@
<?php
namespace ProcessMaker\PDF;
class HeaderStruct
{
/**
* Using basic struct for header properties.
*/
use BasicStruct;
}

View File

@@ -0,0 +1,243 @@
<?php
namespace ProcessMaker\PDF;
use TCPDF;
class TCPDFHeaderFooter extends TCPDF
{
/**
* Property for configure header element.
* @var HeaderStruct
*/
private $headerStruct;
/**
* Property for configure footer element.
* @var FooterStruct
*/
private $footerStruct;
/**
* Save the original margins configured in the page.
* @var array
*/
private $originalMargins;
/**
* Constructor of the class.
* @param string $orientation
* @param string $unit
* @param string $format
* @param bool $unicode
* @param string $encoding
* @param bool $diskcache
* @param bool $pdfa
*/
public function __construct($orientation = 'P', $unit = 'mm', $format = 'A4', $unicode = true, $encoding = 'UTF-8', $diskcache = false, $pdfa = false)
{
parent::__construct($orientation, $unit, $format, $unicode, $encoding, $diskcache, $pdfa);
$this->headerStruct = new HeaderStruct();
$this->footerStruct = new FooterStruct();
}
/**
* Destructor of the class.
*/
public function __destruct()
{
parent::__destruct();
}
/**
* Gets an object that contains the properties of the header.
* @return HeaderStruct
*/
public function getHeaderStruct(): HeaderStruct
{
return $this->headerStruct;
}
/**
* Gets an object that contains the properties of the footer.
* @return FooterStruct
*/
public function getFooterStruct(): FooterStruct
{
return $this->footerStruct;
}
/**
* This method is used to render the page header.
* This method has been overwritten.
*/
public function Header()
{
$heights = [];
$struct = $this->getHeaderStruct();
if (empty($this->originalMargins)) {
$this->originalMargins = $this->getMargins();
}
$margins = $this->originalMargins;
$this->buildHeaderLogo($struct, $margins, $heights);
$this->buildHeaderTitle($struct, $margins, $heights);
$this->buildHeaderPageNumber($struct, $margins, $heights);
//page adjust
$newHeight = max($heights);
$this->SetTopMargin($newHeight);
}
/**
* Build header logo.
* @param HeaderStruct $struct
* @param array $margins
* @param array $heights
* @return void
*/
private function buildHeaderLogo(HeaderStruct $struct, array $margins, array &$heights): void
{
$path = $struct->getLogo();
if (!file_exists($path)) {
return;
}
$pathinfo = pathinfo($path);
$imageSize = getimagesize($path);
$extension = $pathinfo['extension'];
$x = $struct->getLogoPositionX() + $margins['left'];
$y = $struct->getLogoPositionY() + $margins['top'];
$width = $struct->getLogoWidth();
$this->Image($path, $x, $y, $width, 0, $extension, '', '', false, 300, '', false, false, 0, false, false, false);
$newImageHeight = ($width * $imageSize[1] / $imageSize[0]);
$heights[] = $margins['top'] + $newImageHeight;
}
/**
* Build header title.
* @param HeaderStruct $struct
* @param array $margins
* @param array $heights
* @return void
*/
private function buildHeaderTitle(HeaderStruct $struct, array $margins, array &$heights): void
{
$string = $struct->getTitle();
$x = $struct->getTitleFontPositionX() + $margins['left'];
$y = $struct->getTitleFontPositionY() + $margins['top'];
$fontSize = $struct->getTitleFontSize();
$this->SetXY($x, $y);
$this->SetFont('helvetica', 'B', $fontSize);
$this->MultiCell(0, 0, $string, 0, 'L', false, 1, '', '', true, 0, false, true, 0, 'T', false);
$heights[] = $margins['top'] + ($this->getCellHeight($fontSize, false)) / 2;
}
/**
* Build header page number.
* @param HeaderStruct $struct
* @param array $margins
* @param array $heights
* @return void
*/
private function buildHeaderPageNumber(HeaderStruct $struct, array $margins, array &$heights): void
{
if ($struct->getPageNumber() === true) {
$pageString = empty($struct->getPageNumberTitle()) ? 'Page ' : $struct->getPageNumberTitle() . ' ';
$pageNumberTotal = $struct->getPageNumberTotal() === true ? ' / ' . $this->getAliasNbPages() : '';
$string = $pageString . $this->getAliasNumPage() . $pageNumberTotal;
$x = $struct->getPageNumberPositionX() + $margins['left'];
$y = $struct->getPageNumberPositionY() + $margins['top'];
$fontSize = 8;
$this->SetXY($x, $y);
$this->SetFont('helvetica', 'I', $fontSize);
$this->Cell(0, 0, $string, 0, 0, '', false, '', 0, false, 'T', 'M');
$heights[] = $margins['top'] + ($this->getCellHeight($fontSize, false)) / 2;
}
}
/**
* This method is used to render the page footer.
* This method has been overwritten.
*/
public function Footer()
{
$struct = $this->getFooterStruct();
if (empty($this->originalMargins)) {
$this->originalMargins = $this->getMargins();
}
$margins = $this->originalMargins;
//page adjust
$bottom = $margins['bottom'] <= 0 ? 1 : $margins['bottom'];
$this->SetY(-1 * $bottom);
$currentY = $this->GetY();
$this->buildFooterLogo($margins, $currentY, $struct);
$this->buildFooterTitle($margins, $currentY, $struct);
$this->buildFooterPageNumber($margins, $currentY, $struct);
}
/**
* Build footer logo.
* @param array $margins
* @param float $currentY
* @param HeaderStruct $struct
* @return void
*/
private function buildFooterLogo(array $margins, float $currentY, FooterStruct $struct): void
{
$path = $struct->getLogo();
if (!file_exists($path)) {
return;
}
$pathinfo = pathinfo($path);
$extension = $pathinfo['extension'];
$x = $struct->getLogoPositionX() + $margins['left'];
$y = $struct->getLogoPositionY() + $currentY;
$width = $struct->getLogoWidth();
$this->Image($path, $x, $y, $width, 0, $extension, '', '', false, 300, '', false, false, 0, false, false, false);
}
/**
* Build footer title.
* @param array $margins
* @param float $currentY
* @param HeaderStruct $struct
* @return void
*/
private function buildFooterTitle(array $margins, float $currentY, FooterStruct $struct): void
{
$string = $struct->getTitle();
$x = $struct->getTitleFontPositionX() + $margins['left'];
$y = $struct->getTitleFontPositionY() + $currentY;
$fontSize = $struct->getTitleFontSize();
$this->SetXY($x, $y);
$this->SetFont('helvetica', 'B', $fontSize);
$this->MultiCell(0, 0, $string, 0, 'L', false, 1, '', '', true, 0, false, true, 0, 'T', false);
}
/**
* Build footer page number.
* @param array $margins
* @param float $currentY
* @param HeaderStruct $struct
* @return void
*/
private function buildFooterPageNumber(array $margins, float $currentY, FooterStruct $struct): void
{
if ($struct->getPageNumber() === true) {
$pageString = empty($struct->getPageNumberTitle()) ? 'Page ' : $struct->getPageNumberTitle() . ' ';
$pageNumberTotal = $struct->getPageNumberTotal() === true ? ' / ' . $this->getAliasNbPages() : '';
$string = $pageString . $this->getAliasNumPage() . $pageNumberTotal;
$x = $struct->getPageNumberPositionX() + $margins['left'];
$y = $struct->getPageNumberPositionY() + $currentY;
$fontSize = 8;
$this->SetXY($x, $y);
$this->SetFont('helvetica', 'I', $fontSize);
$this->Cell(0, 0, $string, 0, 0, '', false, '', 0, false, 'T', 'M');
}
}
}

View File

@@ -243,5 +243,15 @@ class OutputDocumentStructure
* @var int {@from body} {@choice 0,1}
*/
public $out_doc_open_type;
/**
* @var array {@from body}
*/
public $out_doc_header;
/**
* @var array {@from body}
*/
public $out_doc_footer;
}