Merged in release/3.4.4 (pull request #7197)

3.4.4: Update the feature with the last official build

Approved-by: Paula Quispe <paula.quispe@processmaker.com>
This commit is contained in:
Paula Quispe
2019-12-20 14:02:38 +00:00
47 changed files with 411 additions and 675 deletions

1
.gitignore vendored
View File

@@ -42,3 +42,4 @@ test_shared/
**/cache/
storage/
phpunit.xml
!/workflow/engine/plugins/.gitignore

View File

@@ -82,6 +82,11 @@ workflow/engine/methods/setup/webServices.php
workflow/engine/methods/setup/webServicesAjax.php
workflow/engine/methods/setup/webServicesList.php
workflow/engine/methods/users/data_usersList.php
workflow/engine/plugins/charts.php
workflow/engine/plugins/charts/class.charts.php
workflow/engine/plugins/charts/config/setup.conf
workflow/engine/plugins/charts/genericCharts.php
workflow/engine/plugins/charts/setupPage.xml
workflow/engine/plugins/openFlash.php
workflow/engine/plugins/openFlash/chart-data.php
workflow/engine/plugins/openFlash/chart.php
@@ -103,6 +108,8 @@ workflow/engine/plugins/pmosCommunity/open_flash_chart_object.php
workflow/engine/plugins/pmosCommunity/public_html/open-flash-chart.swf
workflow/engine/plugins/pmosCommunity/public_html/swfobject.js
workflow/engine/plugins/pmosCommunity/setupPage.xml
workflow/engine/plugins/processTemplate.php
workflow/engine/plugins/processTemplate/class.processTemplate.php
workflow/engine/skinEngine/base/images/updating/page_background.png
workflow/engine/skinEngine/neoclassic/images/updating/page_background.png
workflow/engine/src/ProcessMaker/Services/Api/Test2.php
@@ -122,4 +129,4 @@ workflow/engine/xmlform/cases/cases_ReassignBy.xml
workflow/engine/xmlform/users/users_List.xml
workflow/engine/xmlform/users/users_Options.xml
workflow/public_html/skins/JSForms.js
workflow/public_html/skins/ajax.js
workflow/public_html/skins/ajax.js

View File

@@ -87,7 +87,9 @@ class CodeScanner
if (file_exists($fileDisabledCode)) {
$arrayAux = array_filter(array_map("trim", file($fileDisabledCode, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)));
$arrayAux = array_filter($arrayAux, create_function("\$line", "return !preg_match(\"/^;.*\$/\", \$line);"));
$arrayAux = array_filter($arrayAux, function ($line) {
return !preg_match("/^;.*\$/", $line);
});
$this->arrayDisabledCode = array_unique(array_merge($this->arrayDisabledCode, $arrayAux));
}

View File

@@ -77,12 +77,13 @@ class Controller
*/
public function __get($name)
{
$message = 'Undefined property via __get(): ' . $name . ' in ';
if (array_key_exists($name, $this->__data__)) {
return $this->__data__[$name];
}
$trace = debug_backtrace();
trigger_error('Undefined property via __get(): ' . $name . ' in ' . $trace[0]['file'] . ' on line ' . $trace[0]['line'], E_USER_NOTICE);
trigger_error($message . $trace[0]['file'] . ' on line ' . $trace[0]['line'], E_USER_NOTICE);
return null;
}
@@ -177,8 +178,8 @@ class Controller
$this->__request__ = new stdclass();
}
if (is_array($data)) {
while ($var = each($data)) {
$this->__request__->{$var['key']} = $var['value'];
foreach ($data as $key => $value) {
$this->__request__->{$key} = $value;
}
} else {
$this->__request__ = $data;

View File

@@ -360,7 +360,7 @@ class Form extends XmlForm
//Execute just if a query was set, it should be not empty
if (trim($query) == "") {
continue; //if it is empty string skip it
break; //if it is empty string skip it
}
//We do the query to the external connection and we've got the label
@@ -438,7 +438,7 @@ class Form extends XmlForm
// execute just if a query was set, it should be not empty
if (trim( $query ) == '') {
continue; //if it is empty string skip it
break; //if it is empty string skip it
}
//we do the query to the external connection and we've got the label
@@ -491,7 +491,7 @@ class Form extends XmlForm
//Execute just if a query was set, it should be not empty
if (trim( $query ) == "") {
//if it is empty string skip it
continue;
break;
}
$rs = $stmt->executeQuery( ResultSet::FETCHMODE_NUM );

View File

@@ -758,7 +758,7 @@ class headPublisher
$sjson = $oServerConf->getProperty($keyState);
if ($sjson !== "") {
$json = G::json_decode($sjson);
if ((is_array($json) || is_object($json)) && sizeof($json)){
if (is_iterable($json)) {
foreach ($json as $key => $value) {
$views[$key] = $value;
}

View File

@@ -142,8 +142,8 @@ class HttpProxyController
public function setHttpRequestData($data)
{
if (is_array($data)) {
while ($var = each($data)) {
$this->__request__->{$var['key']} = $var['value'];
foreach ($data as $key => $value) {
$this->__request__->{$key} = $value;
}
} else {
$this->__request__ = $data;

View File

@@ -48,7 +48,7 @@ class Menu
{
public $Id = null;
public $Options = null;
public $Options = [];
public $Labels = null;
public $Icons = null;
public $JS = null;

View File

@@ -876,6 +876,8 @@ EOREGEX;
}
break;
}
$shouldItContinue = false;
switch ($upper) {
case 'AS':
$token_count ++;
@@ -886,7 +888,7 @@ EOREGEX;
++ $n;
}
continue;
$shouldItContinue = true;
break;
case 'INDEX':
if ($token_category == 'CREATE') {
@@ -908,12 +910,12 @@ EOREGEX;
case 'OUTER':
# $expression .= $token;
$token_count ++;
continue;
$shouldItContinue = true;
break;
case 'FOR':
$token_count ++;
$skip_next = true;
continue;
$shouldItContinue = true;
break;
case 'LEFT':
case 'RIGHT':
@@ -969,7 +971,8 @@ EOREGEX;
break;
default:
if ($token === false || empty( $token ) || $token === "") {
continue;
$shouldItContinue = true;
break;
}
if ($token_count == 0) {
@@ -982,6 +985,9 @@ EOREGEX;
$token_count ++;
break;
}
if ($shouldItContinue === true) {
continue;
}
++ $i;
}
if (substr( trim( $table ), 0, 1 ) == '(') {

View File

@@ -2,7 +2,17 @@
namespace Tests\unit\workflow\engine\classes;
use \Derivation;
use Cases;
use Derivation;
use G;
use Illuminate\Support\Facades\DB;
use ProcessMaker\Model\Application;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\Process;
use ProcessMaker\Model\Route;
use ProcessMaker\Model\Task;
use ProcessMaker\Model\TaskUser;
use ProcessMaker\Model\User;
use Tests\TestCase;
class DerivationTest extends TestCase
@@ -15,6 +25,41 @@ class DerivationTest extends TestCase
{
parent::setUp(); // TODO: Change the autogenerated stub
// Truncate the APP_SEQUENCE table
DB::table('APP_SEQUENCE')->truncate();
config(["system.workspace" => "test"]);
$workspace = config("system.workspace");
if (!file_exists(PATH_DB . $workspace)) {
G::mk_dir(PATH_DB . $workspace);
}
if (!file_exists(PATH_DB . $workspace . PATH_SEP . "db.php")) {
$myfile = fopen(PATH_DB . $workspace . PATH_SEP . "db.php", "w");
fwrite($myfile, "<?php
define ('DB_ADAPTER', 'mysql' );
define ('DB_HOST', '" . env('DB_HOST') . "' );
define ('DB_NAME', '" . env('DB_DATABASE') . "' );
define ('DB_USER', '" . env('DB_USERNAME') . "' );
define ('DB_PASS', '" . env('DB_PASSWORD') . "' );
define ('DB_RBAC_HOST', '" . env('DB_HOST') . "' );
define ('DB_RBAC_NAME', '" . env('DB_DATABASE') . "' );
define ('DB_RBAC_USER', '" . env('DB_USERNAME') . "' );
define ('DB_RBAC_PASS', '" . env('DB_PASSWORD') . "' );
define ('DB_REPORT_HOST', '" . env('DB_HOST') . "' );
define ('DB_REPORT_NAME', '" . env('DB_DATABASE') . "' );
define ('DB_REPORT_USER', '" . env('DB_USERNAME') . "' );
define ('DB_REPORT_PASS', '" . env('DB_PASSWORD') . "' );");
}
}
/**
* Call the tearDown method
*/
public function tearDown()
{
parent::tearDown(); // TODO: Change the autogenerated stub
}
/**
@@ -80,4 +125,139 @@ class DerivationTest extends TestCase
$this->assertObjectHasAttribute('name', $res['var3_label']);
$this->assertEquals($res['var3_label'], (object)['Street' => 'test', 'name' => 'Something']);
}
/**
* It tests the doDerivation method sending variables synchronously
*
* @covers Derivation::doDerivation()
* @test
*/
public function it_should_test_the_do_derivation_method_sending_variables_synchronously()
{
// Create the models
$user = factory(User::class)->create();
$process = factory(Process::class)->create([
'PRO_CREATE_USER' => $user->USR_UID
]);
$task = factory(Task::class)->create([
'PRO_UID' => $process->PRO_UID,
]);
$application = factory(Application::class)->create();
$appDelegation = factory(Delegation::class)->create();
// Create the parameters
$currentDelegation = [
'APP_UID' => $application->APP_UID,
'DEL_INDEX' => $appDelegation->DEL_INDEX,
'ROU_TYPE' => ''
];
$nextDel = [
'TAS_UID' => $task->TAS_UID,
'USR_UID' => $user->USR_UID,
'DEL_PRIORITY' => $appDelegation->DEL_PRIORITY,
'TAS_ASSIGN_TYPE' => $task->TAS_ASSIGN_TYPE,
'TAS_ID' => $task->TAS_ID
];
$appFields = [
'APP_NUMBER' => $application->APP_NUMBER,
'DEL_THREAD' => $appDelegation->DEL_THREAD,
'PRO_UID' => $process->PRO_UID,
'PRO_ID' => $process->PRO_ID,
'APP_DATA' => [],
'APP_TITLE' => $application->APP_TITLE,
'APP_UID' => $application->APP_UID
];
$sp = [
'SP_VARIABLES_OUT' => 'a:1:{s:6:"@&var1";s:6:"@&var2";}',
'SP_VARIABLES_IN' => 'a:1:{s:6:"@&var2";s:6:"@&var3";}',
'SP_SYNCHRONOUS' => '1',
'SP_TYPE' => '',
'TAS_UID' => $task->TAS_UID,
'USR_UID' => $user->USR_UID,
];
// Create the Derivation object
$der = new Derivation();
$der->case = new Cases;
// Call the doDerivation method
$res = $der->doDerivation($currentDelegation, $nextDel, $appFields, $sp);
// Assert the new delegation index is 1
$this->assertEquals(1, $res);
}
/**
* It tests the doDerivation method sending variables asynchronously
*
* @covers Derivation::doDerivation()
* @test
*/
public function it_should_test_the_do_derivation_method_sending_variables_asynchronously()
{
// Create the models
$user = factory(User::class)->create();
$process = factory(Process::class)->create([
'PRO_CREATE_USER' => $user->USR_UID
]);
$task = factory(Task::class)->create([
'PRO_UID' => $process->PRO_UID,
'TAS_USER' => $user->USR_UID
]);
factory(TaskUser::class)->create([
'TAS_UID' => $task->TAS_UID,
'USR_UID' => $user->USR_UID,
]);
$application = factory(Application::class)->create();
$appDelegation = factory(Delegation::class)->create([
'TAS_UID' => $task->TAS_UID
]);
factory(Route::class)->create([
'TAS_UID' => $task->TAS_UID,
'ROU_NEXT_TASK' => $task->TAS_UID,
'PRO_UID' => $process->PRO_UID
]);
// Create the parameters
$currentDelegation = [
'APP_UID' => $application->APP_UID,
'DEL_INDEX' => $appDelegation->DEL_INDEX,
'ROU_TYPE' => '',
'TAS_UID' => $task->TAS_UID
];
$nextDel = [
'TAS_UID' => $task->TAS_UID,
'USR_UID' => $user->USR_UID,
'DEL_PRIORITY' => $appDelegation->DEL_PRIORITY,
'TAS_ASSIGN_TYPE' => $task->TAS_ASSIGN_TYPE,
'TAS_ID' => $task->TAS_ID
];
$appFields = [
'APP_NUMBER' => $application->APP_NUMBER,
'DEL_THREAD' => $appDelegation->DEL_THREAD,
'PRO_UID' => $process->PRO_UID,
'PRO_ID' => $process->PRO_ID,
'APP_DATA' => [],
'APP_TITLE' => $application->APP_TITLE,
'APP_UID' => $application->APP_UID
];
$sp = [
'SP_VARIABLES_OUT' => 'a:1:{s:6:"@&var1";s:6:"@&var2";}',
'SP_VARIABLES_IN' => 'a:1:{s:6:"@&var2";s:6:"@&var3";}',
'SP_SYNCHRONOUS' => '0',
'SP_TYPE' => '',
'TAS_UID' => $task->TAS_UID,
'USR_UID' => $user->USR_UID,
];
// Create the Derivation object
$der = new Derivation();
$der->case = new Cases;
// Call the doDerivation method
$res = $der->doDerivation($currentDelegation, $nextDel, $appFields, $sp);
// Assert the new delegation index is 1
$this->assertEquals(1, $res);
}
}

View File

@@ -610,7 +610,7 @@ class DB
$parsed['dbsyntax'] = $str;
}
if (!count($dsn)) {
if (!is_string($dsn)) {
return $parsed;
}

View File

@@ -318,7 +318,7 @@ class Path extends DataType {
try {
$element .= self::resolveFile($project, $pathElement);
} catch (BuildException $e) {
$this->project->log("Dropping path element " . $pathElement
self::$project->log("Dropping path element " . $pathElement
. " as it is not valid relative to the project",
PROJECT_MSG_VERBOSE);
}

View File

@@ -106,7 +106,7 @@ class StringHelper {
* @return int
*/
public static function hashCode($string) {
return $this->encryptCrc32($string);
return self::encryptCrc32($string);
}
/**

View File

@@ -8301,9 +8301,6 @@ class TCPDF {
$version = PHP_VERSION;
define('PHP_VERSION_ID', (($version{0} * 10000) + ($version{2} * 100) + $version{4}));
}
if (PHP_VERSION_ID < 50300) {
@set_magic_quotes_runtime($mqr);
}
}
/**
@@ -21418,7 +21415,7 @@ class TCPDF {
// define self-closing tags
$selfclosingtags = array('area','base','basefont','br','hr','input','img','link','meta');
// remove all unsupported tags (the line below lists all supported tags)
$html = strip_tags($html, '<marker/><a><b><blockquote><body><br><br/><dd><del><div><dl><dt><em><font><form><h1><h2><h3><h4><h5><h6><hr><hr/><i><img><input><label><li><ol><option><p><pre><s><select><small><span><strike><strong><sub><sup><table><tablehead><tcpdf><td><textarea><th><thead><tr><tt><u><ul>');
$html = strip_tags($html, '<marker><a><b><blockquote><body><br><dd><del><div><dl><dt><em><font><form><h1><h2><h3><h4><h5><h6><hr><i><img><input><label><li><ol><option><p><pre><s><select><small><span><strike><strong><sub><sup><table><tablehead><tcpdf><td><textarea><th><thead><tr><tt><u><ul>');
//replace some blank characters
$html = preg_replace('/<pre/', '<xre', $html); // preserve pre tag
$html = preg_replace('/<(table|tr|td|th|tcpdf|blockquote|dd|div|dl|dt|form|h1|h2|h3|h4|h5|h6|br|hr|li|ol|ul|p)([^\>]*)>[\n\r\t]+/', '<\\1\\2>', $html);
@@ -22789,6 +22786,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
}
global $spacew;
while (preg_match('/([0-9\.\+\-]*)[\s](Td|cm|m|l|c|re)[\s]/x', $pmid, $strpiece, PREG_OFFSET_CAPTURE, $offset) == 1) {
$flagContinue = true;
// check if we are inside a string section '[( ... )]'
$stroffset = strpos($pmid, '[(', $offset);
if (($stroffset !== false) AND ($stroffset <= $strpiece[2][1])) {
@@ -22853,7 +22851,8 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
// justify block
if (!$this->empty_string($this->lispacer)) {
$this->lispacer = '';
continue;
$flagContinue = false;
break;
}
preg_match('/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s](re)([\s]*)/x', $pmid, $xmatches);
$currentxpos = $xmatches[1];
@@ -22906,36 +22905,39 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
break;
}
}
// shift the annotations and links
$cxpos = ($currentxpos / $this->k);
$lmpos = ($this->lMargin + $this->cell_padding['L'] + $this->feps);
if ($this->inxobj) {
// we are inside an XObject template
foreach ($this->xobjects[$this->xobjid]['annotations'] as $pak => $pac) {
if (($pac['y'] >= $minstartliney) AND (($pac['x'] * $this->k) >= ($currentxpos - $this->feps)) AND (($pac['x'] * $this->k) <= ($currentxpos + $this->feps))) {
if ($cxpos > $lmpos) {
$this->xobjects[$this->xobjid]['annotations'][$pak]['x'] += ($spacew / $this->k);
$this->xobjects[$this->xobjid]['annotations'][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k);
} else {
$this->xobjects[$this->xobjid]['annotations'][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k);
}
break;
}
}
} elseif (isset($this->PageAnnots[$this->page])) {
foreach ($this->PageAnnots[$this->page] as $pak => $pac) {
if (($pac['y'] >= $minstartliney) AND (($pac['x'] * $this->k) >= ($currentxpos - $this->feps)) AND (($pac['x'] * $this->k) <= ($currentxpos + $this->feps))) {
if ($cxpos > $lmpos) {
$this->PageAnnots[$this->page][$pak]['x'] += ($spacew / $this->k);
$this->PageAnnots[$this->page][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k);
} else {
$this->PageAnnots[$this->page][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k);
}
break;
}
}
if ($flagContinue) {
// shift the annotations and links
$cxpos = ($currentxpos / $this->k);
$lmpos = ($this->lMargin + $this->cell_padding['L'] + $this->feps);
if ($this->inxobj) {
// we are inside an XObject template
foreach ($this->xobjects[$this->xobjid]['annotations'] as $pak => $pac) {
if (($pac['y'] >= $minstartliney) AND (($pac['x'] * $this->k) >= ($currentxpos - $this->feps)) AND (($pac['x'] * $this->k) <= ($currentxpos + $this->feps))) {
if ($cxpos > $lmpos) {
$this->xobjects[$this->xobjid]['annotations'][$pak]['x'] += ($spacew / $this->k);
$this->xobjects[$this->xobjid]['annotations'][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k);
} else {
$this->xobjects[$this->xobjid]['annotations'][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k);
}
break;
}
}
} elseif (isset($this->PageAnnots[$this->page])) {
foreach ($this->PageAnnots[$this->page] as $pak => $pac) {
if (($pac['y'] >= $minstartliney) AND (($pac['x'] * $this->k) >= ($currentxpos - $this->feps)) AND (($pac['x'] * $this->k) <= ($currentxpos + $this->feps))) {
if ($cxpos > $lmpos) {
$this->PageAnnots[$this->page][$pak]['x'] += ($spacew / $this->k);
$this->PageAnnots[$this->page][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k);
} else {
$this->PageAnnots[$this->page][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k);
}
break;
}
}
}
}
} // end of while
}
// end of while
// remove markers
$pmid = str_replace('x*#!#*x', '', $pmid);
if ($this->isUnicodeFont()) {

View File

@@ -24,12 +24,11 @@ use ProcessMaker\Core\JobsManager;
use ProcessMaker\Core\System;
use ProcessMaker\Plugins\PluginRegistry;
$fn = '
register_shutdown_function(function () {
if (class_exists("Propel")) {
Propel::close();
}
';
register_shutdown_function(create_function('', $fn));
});
ini_set('memory_limit', '512M');

View File

@@ -797,7 +797,7 @@ class Cases
public function array_key_intersect(&$a, &$b)
{
$array = array();
while (list($key, $value) = each($a)) {
foreach ($a as $key => $value) {
if (isset($b[$key])) {
if (is_object($b[$key]) && is_object($value)) {
if (serialize($b[$key]) === serialize($value)) {
@@ -1034,6 +1034,7 @@ class Cases
public function removeCase($sAppUid, $deleteDelegation = true)
{
try {
$appUidCopy = $sAppUid;
$this->getExecuteTriggerProcess($sAppUid, 'DELETED');
$oAppDocument = new AppDocument();
@@ -1152,7 +1153,7 @@ class Cases
/** ProcessMaker log*/
$context = Bootstrap::getDefaultContextLog();
$context['appUid'] = $sAppUid;
$context['appUid'] = $appUidCopy;
$context['request'] = $nameFiles;
Bootstrap::registerMonolog('DeleteCases', 200, 'Delete Case', $context);

View File

@@ -466,7 +466,7 @@ class PmTable
}
if (empty($line)) {
continue;
break;
}
if (strpos($line, "#") === 0) {
@@ -474,7 +474,7 @@ class PmTable
}
if (empty($line)) {
continue;
break;
}
// Concatenate the previous line, if any, with the current
@@ -487,7 +487,7 @@ class PmTable
// with the next one, thus supporting multi-line statements.
if (strrpos($line, ";") != strlen($line) - 1) {
$previous = $line;
continue;
break;
}
$line = substr($line, 0, strrpos($line, ";"));
@@ -513,7 +513,7 @@ class PmTable
}
if (empty($line)) {
continue;
break;
}
if (strpos($line, "#") === 0) {
@@ -521,7 +521,7 @@ class PmTable
}
if (empty($line)) {
continue;
break;
}
// Concatenate the previous line, if any, with the current
@@ -534,13 +534,13 @@ class PmTable
// with the next one, thus supporting multi-line statements.
if (strrpos($line, ";") != strlen($line) - 1) {
$previous = $line;
continue;
break;
}
$line = substr($line, 0, strrpos($line, ";"));
if (strpos($line, $this->tableName) == false) {
continue;
break;
}
$auxCreate = explode('CREATE', $line);
@@ -553,7 +553,7 @@ class PmTable
case 'oracle':
$line = trim($line); // Remove comments from the script
if (empty($line)) {
continue;
break;
}
switch (true) {
case preg_match("/^CREATE TABLE\s/i", $line):

View File

@@ -729,6 +729,7 @@ class ProcessMap
$urlEdit = '';
$linkEditValue = '';
$shouldItContinue = false;
switch ($aRow['STEP_TYPE_OBJ']) {
case 'DYNAFORM':
$oDynaform = new Dynaform();
@@ -748,7 +749,8 @@ class ProcessMap
$oInputDocument = new InputDocument();
$aFields = $oInputDocument->getByUid($aRow['STEP_UID_OBJ']);
if ($aFields === false) {
continue;
$shouldItContinue = true;
break;
}
$sTitle = $aFields['INP_DOC_TITLE'];
break;
@@ -757,7 +759,8 @@ class ProcessMap
$aFields = $oOutputDocument->getByUid($aRow['STEP_UID_OBJ']);
if ($aFields === false) {
continue;
$shouldItContinue = true;
break;
}
$sTitle = $aFields['OUT_DOC_TITLE'];
break;
@@ -777,6 +780,9 @@ class ProcessMap
}
break;
}
if ($shouldItContinue === true) {
continue;
}
$aSteps[] = array('STEP_TITLE' => $sTitle, 'STEP_UID' => $aRow['STEP_UID'], 'STEP_TYPE_OBJ' => $aRow['STEP_TYPE_OBJ'], 'STEP_MODE' => $aRow['STEP_MODE'], 'STEP_CONDITION' => $aRow['STEP_CONDITION'], 'STEP_POSITION' => $aRow['STEP_POSITION'], 'urlEdit' => $urlEdit, 'linkEditValue' => $linkEditValue, 'PRO_UID' => $aRow['PRO_UID']
);

View File

@@ -2,15 +2,15 @@
use ProcessMaker\Plugins\PluginRegistry;
function __autoload($sClassName)
{
spl_autoload_register(function($sClassName) {
if (!empty(config("system.workspace"))) {
$sPath = PATH_DB . config("system.workspace") . PATH_SEP . 'classes' . PATH_SEP;
if (file_exists($sPath . $sClassName . '.php')) {
require_once $sPath . $sClassName . '.php';
}
}
}
});
if (!empty(config("system.workspace")) && (!defined('PATH_DATA_SITE') || !defined('PATH_WORKSPACE'))) {
Bootstrap::setConstantsRelatedWs(config("system.workspace"));
}

View File

@@ -103,7 +103,7 @@ class Configuration extends BaseConfiguration
public function exists($CfgUid, $ObjUid = "", $ProUid = "", $UsrUid = "", $AppUid = "")
{
$oRow = ConfigurationPeer::retrieveByPK( $CfgUid, $ObjUid, $ProUid, $UsrUid, $AppUid );
return (( get_class ($oRow) == 'Configuration' )&&(!is_null($oRow)));
return (!is_null($oRow) && get_class($oRow) === 'Configuration');
}
public function getAll ()

View File

@@ -237,7 +237,7 @@ class Translation extends BaseTranslation
}
$res['cacheFileMafe'] = $cacheFileMafe;
$res['languague'] = count($cacheFileMafe);
$res['languague'] = (is_array($cacheFileMafe) || $cacheFileMafe instanceof Countable) ? count($cacheFileMafe) : 0;
$res['rowsMafeJS'] = count( $translation );
return $res;
} catch (Exception $e) {

File diff suppressed because one or more lines are too long

View File

@@ -21674,8 +21674,8 @@ msgstr "Open SSL is optional"
# TRANSLATION
# LABEL/ID_PROCESSMAKER_REQUIREMENTS_PHP
#: LABEL/ID_PROCESSMAKER_REQUIREMENTS_PHP
msgid "PHP recommended version 7.1 or higher, PHP 7.2 is not yet supported"
msgstr "PHP recommended version 7.1 or higher, PHP 7.2 is not yet supported"
msgid "PHP recommended version 7.3, we maintain compatibility starting with PHP 7.1"
msgstr "PHP recommended version 7.3, we maintain compatibility starting with PHP 7.1"
# TRANSLATION
# LABEL/ID_PROCESSMAKER_REQUIREMENTS_SOAP

View File

@@ -12,8 +12,8 @@ include PATH_LANGUAGECONT . "translation." . SYS_LANG;
class InstallerModule extends Controller
{
const PHP_VERSION_MINIMUM_SUPPORTED = '7.1';
const PHP_VERSION_NOT_SUPPORTED = '7.2';
const PHP_VERSION_MINIMUM_SUPPORTED = "7.1";
const PHP_VERSION_NOT_SUPPORTED = "7.4";
public $path_config;
public $path_languages;
public $path_plugins;

View File

@@ -60488,7 +60488,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE
INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ) VALUES
( 'LABEL','ID_PROCESSMAKER_REQUIREMENTS_OPENSSL_OPTIONAL','en','Open SSL is optional','2014-01-15') ,
( 'LABEL','ID_PROCESSMAKER_REQUIREMENTS_PHP','en','PHP recommended version 7.1 or higher, PHP 7.2 is not yet supported','2018-06-13') ,
( 'LABEL','ID_PROCESSMAKER_REQUIREMENTS_PHP','en','PHP recommended version 7.3, we maintain compatibility starting with PHP 7.1','2019-12-02') ,
( 'LABEL','ID_PROCESSMAKER_REQUIREMENTS_SOAP','en','Soap Support','2014-01-15') ,
( 'LABEL','ID_PROCESSMAKER_SLOGAN1','en','This Business Process is Powered By ProcessMaker','2014-01-15') ,
( 'LABEL','ID_PROCESSMAKER_SUCCESS_INSTALLED','en','ProcessMaker was successfully installed<br/>Workspace <b>" {0} " </b> was installed correctly.','2014-01-15') ,

View File

@@ -737,10 +737,12 @@ function sortContent()
function openPMFolder()
{
$oPMFolder = new AppFolder();
$rootFolder = "/";
$WIDTH_PANEL = 350;
$folderContent = $oPMFolder->getFolderList($_POST ['folderID'] != '0' ?
$_POST ['folderID'] == 'NA' ? "" : $_POST ['folderID'] : $rootFolder);
//krumo($folderContent);
if (! is_array($folderContent)) {
echo $folderContent;
exit();
@@ -750,51 +752,49 @@ function openPMFolder()
$tree->name = 'DMS';
$tree->nodeType = "blank";
//$tree->width="350px";
$tree->value = '';
$tree->showSign = false;
$i = 0;
foreach ($folderContent as $key => $obj) {
foreach ($folderContent['folders'] as $key => $obj) {
$i ++;
//if ($obj->item_type=="F") {
$RowClass = ($i % 2 == 0) ? 'Row1' : 'Row2';
$id_delete = G::LoadTranslation('ID_DELETE');
$id_edit = G::LoadTranslation('ID_EDIT');
$htmlGroup = <<<GHTML
<table cellspacing='0' cellpadding='0' border='1' style='border:0px;' width="100%" class="pagedTable">
<tr id="{$i}" onmouseout="setRowClass(this, '{$RowClass}')" onmouseover="setRowClass(this, 'RowPointer')"
class="{$RowClass}" style="cursor:hand">
<td width='' class='treeNode' style='border:0px;background-color:transparent;'><a href="#"
onclick="focusRow(this, 'Selected');openPMFolder('{$obj['FOLDER_UID']}','{$_POST['rootfolder']}');">
<img src="/images/folderV2.gif" border = "0" valign="middle" />&nbsp;{$obj['FOLDER_NAME']}</a>
<a href="#" onclick="deletePMFolder('{$obj['FOLDER_UID']}','{$_POST['rootfolder']}');">&nbsp; {$id_delete}</a>
$htmlGroup = "
<table cellspacing='0' cellpadding='0' border='1' style='border:0px;' width=\"100%\" class=\"pagedTable\">
<tr id=\"{$i}\" onmouseout=\"setRowClass(this, '{$RowClass}')\" onmouseover=\"setRowClass(this, 'RowPointer')\"
class=\"{$RowClass}\" style=\"cursor:hand\">
<td width='' class='treeNode' style='border:0px;background-color:transparent;'><a href=\"#\"
onclick=\"focusRow(this, 'Selected');openPMFolder('{$obj['FOLDER_UID']}','{$_POST['rootfolder']}');\">
<img src=\"/images/folderV2.gif\" border = \"0\" valign=\"middle\" />&nbsp;{$obj['FOLDER_NAME']}</a>
<a href=\"#\" onclick=\"deletePMFolder('{$obj['FOLDER_UID']}','{$_POST['rootfolder']}');\">&nbsp; {$id_delete}</a>
</td>
</tr>
</table>
<div id="child_{$obj['FOLDER_UID']}"></div>
GHTML;
<div id=\"child_{$obj['FOLDER_UID']}\"></div>
";
$ch = $tree->addChild ($key, $htmlGroup, array ('nodeType' => 'child'));
$ch->point = ' ';
}
$RowClass = ($i % 2 == 0) ? 'Row1' : 'Row2';
$key = 0;
if ($_POST ['folderID'] == '0') {
$notInFolderLabel = G::LoadTranslation ('ID_NOT_IN_FOLDER');
$htmlGroup = <<<GHTML
<table cellspacing='0' cellpadding='0' border='1' style='border:0px;' width="100%" class="pagedTable">
<tr id="{$i}" onclick="focusRow(this, 'Selected');openPMFolder('NA');"
onmouseout="setRowClass(this, '{$RowClass}')" onmouseover="setRowClass(this, 'RowPointer')" class="{$RowClass}">
<td width='' class='treeNode' style='border:0px;background-color:transparent;'><a href="#" onclick="">
<img src="/images/folderV2.gif" border = "0" valign="middle" />&nbsp;- {$notInFolderLabel} -</a>&nbsp;</td>
}
$RowClass = ($i % 2 == 0) ? 'Row1' : 'Row2';
$key = 0;
if ($_POST ['folderID'] == '0') {
$notInFolderLabel = G::LoadTranslation ('ID_NOT_IN_FOLDER');
$htmlGroup = "
<table cellspacing='0' cellpadding='0' border='1' style='border:0px;' width=\"100%\" class=\"pagedTable\">
<tr id=\"{$i}\" onclick=\"focusRow(this, 'Selected');openPMFolder('NA');\"
onmouseout=\"setRowClass(this, '{$RowClass}')\" onmouseover=\"setRowClass(this, 'RowPointer')\" class=\"{$RowClass}\">
<td width='' class='treeNode' style='border:0px;background-color:transparent;'><a href=\"#\" onclick=\"\">
<img src=\"/images/folderV2.gif\" border = \"0\" valign=\"middle\" />&nbsp;- {$notInFolderLabel} -</a>&nbsp;</td>
</tr>
</table>
<div id="child_NA"></div>
GHTML;
<div id=\"child_NA\"></div>
";
$ch = $tree->addChild($key, $htmlGroup, array('nodeType' => 'child'));
$ch->point = ' ';

View File

@@ -37,7 +37,7 @@ try {
if (\BpmnProject::exists($_GET["pro_uid"]) && isset($_GET['objects'])) {
/*----------------------------------********---------------------------------*/
$_GET["objects"] = \G::json_decode($_GET['objects']);
if (sizeof($_GET['objects']) == 0) {
if (empty($_GET['objects'])) {
/*----------------------------------********---------------------------------*/
$exporter = new ProcessMaker\Exporter\XmlExporter($_GET["pro_uid"]);
$projectName = $exporter->getProjectName();

View File

@@ -144,7 +144,7 @@ if (isset($_FILES["PROCESS_FILENAME"]) && (pathinfo($_FILES["PROCESS_FILENAME"][
}
}
if (isset($_POST['objectsToImport']) && sizeof(G::json_decode($_POST['objectsToImport']))){
if (isset($_POST['objectsToImport']) && !empty(G::json_decode($_POST['objectsToImport']))) {
$objectsToImport = G::json_decode($_POST['objectsToImport']);
}
/*----------------------------------********---------------------------------*/
@@ -301,7 +301,7 @@ if (isset($_POST["PRO_FILENAME"]) &&
}
}
if (isset($_POST['objectsToImport']) && sizeof(G::json_decode($_POST['objectsToImport']))){
if (isset($_POST['objectsToImport']) && !empty(G::json_decode($_POST['objectsToImport']))) {
$objectsToImport = G::json_decode($_POST['objectsToImport']);
}
/*----------------------------------********---------------------------------*/

View File

@@ -200,91 +200,83 @@ function newSkin ($baseSkin = 'classic')
function importSkin ()
{
try {
ValidationUploadedFiles::getValidationUploadedFiles()->dispatch(function($validator) {
ValidationUploadedFiles::getValidationUploadedFiles()->dispatch(function ($validator) {
throw new Exception($validator->getMessage());
});
if (! isset( $_FILES['uploadedFile'] )) {
throw (new Exception( G::LoadTranslation( 'ID_SKIN_FILE_REQUIRED' ) ));
if (!isset($_FILES['uploadedFile'])) {
throw (new Exception(G::LoadTranslation('ID_SKIN_FILE_REQUIRED')));
}
$uploadedInstances = count( $_FILES['uploadedFile']['name'] );
$sw_error = false;
$sw_error_exists = isset( $_FILES['uploadedFile']['error'] );
$emptyInstances = 0;
$quequeUpload = array ();
// upload files & check for errors
$sw_error_exists = isset($_FILES['uploadedFile']['error']);
// Upload files & check for errors
$tmp = $_FILES['uploadedFile']['tmp_name'];
$items = stripslashes( $_FILES['uploadedFile']['name'] );
$items = stripslashes($_FILES['uploadedFile']['name']);
if ($sw_error_exists) {
$up_err = $_FILES['uploadedFile']['error'];
} else {
$up_err = (file_exists( $tmp ) ? 0 : 4);
$up_err = (file_exists($tmp) ? 0 : 4);
}
if ($items == "" || $up_err == 4) {
throw (new Exception( G::LoadTranslation( 'ID_SKIN_FILE_REQUIRED' ) ));
throw (new Exception(G::LoadTranslation('ID_SKIN_FILE_REQUIRED')));
}
if ($up_err == 1 || $up_err == 2) {
throw (new Exception( G::LoadTranslation( 'ID_FILE_TOO_BIG' ) ));
//$errors[$i]='miscfilesize';
throw (new Exception(G::LoadTranslation('ID_FILE_TOO_BIG')));
}
if ($up_err == 3) {
throw (new Exception( G::LoadTranslation( 'ID_ERROR_UPLOAD_FILE_CONTACT_ADMINISTRATOR' ) ));
//$errors[$i]='miscfilepart';
throw (new Exception(G::LoadTranslation('ID_ERROR_UPLOAD_FILE_CONTACT_ADMINISTRATOR')));
}
if (! @is_uploaded_file( $tmp )) {
throw (new Exception( G::LoadTranslation( 'ID_ERROR_UPLOAD_FILE_CONTACT_ADMINISTRATOR' ) ));
//$errors[$i]='uploadfile';
if (!@is_uploaded_file($tmp)) {
throw (new Exception(G::LoadTranslation('ID_ERROR_UPLOAD_FILE_CONTACT_ADMINISTRATOR')));
}
$fileInfo = pathinfo( $items );
$validType = array ('tar','gz'
);
$fileInfo = pathinfo($items);
$validType = ['tar', 'gz'];
if (! in_array( $fileInfo['extension'], $validType )) {
throw (new Exception( G::LoadTranslation( 'ID_FILE_UPLOAD_INCORRECT_EXTENSION' ) ));
//$errors[$i]='wrongtype';
if (!in_array($fileInfo['extension'], $validType)) {
throw (new Exception(G::LoadTranslation('ID_FILE_UPLOAD_INCORRECT_EXTENSION')));
}
$filename = $items;
$tempPath = PATH_CUSTOM_SKINS . '.tmp' . PATH_SEP;
G::verifyPath( $tempPath, true );
G::verifyPath($tempPath, true);
$tempName = $tmp;
G::uploadFile( $tempName, $tempPath, $filename );
G::uploadFile($tempName, $tempPath, $filename);
$tar = new Archive_Tar( $tempPath . $filename );
$tar = new Archive_Tar($tempPath . $filename);
$aFiles = $tar->listContent();
$swConfigFile = false;
foreach ($aFiles as $key => $val) {
if (basename( $val['filename'] ) == 'config.xml') {
$skinName = dirname( $val['filename'] );
$skinArray = explode( "/", $skinName );
if (count( $skinArray ) == 1) {
if (basename($val['filename']) == 'config.xml') {
$skinName = dirname($val['filename']);
$skinArray = explode("/", $skinName);
if (count($skinArray) == 1) {
$swConfigFile = true;
}
}
}
if (! $swConfigFile) {
@unlink( PATH_CUSTOM_SKINS . '.tmp' . PATH_SEP . $filename );
throw (new Exception( G::LoadTranslation( 'ID_SKIN_CONFIGURATION_MISSING' ) ));
if (!$swConfigFile) {
@unlink(PATH_CUSTOM_SKINS . '.tmp' . PATH_SEP . $filename);
throw (new Exception(G::LoadTranslation('ID_SKIN_CONFIGURATION_MISSING')));
}
if (is_dir( PATH_CUSTOM_SKINS . $skinName )) {
if ((isset( $_REQUEST['overwrite_files'] )) && ($_REQUEST['overwrite_files'] == 'on')) {
G::rm_dir( PATH_CUSTOM_SKINS . $skinName, false );
if (is_dir(PATH_CUSTOM_SKINS . $skinName)) {
if ((isset($_REQUEST['overwrite_files'])) && ($_REQUEST['overwrite_files'] == 'on')) {
G::rm_dir(PATH_CUSTOM_SKINS . $skinName, false);
} else {
throw (new Exception( G::LoadTranslation( 'ID_SKIN_ALREADY_EXISTS' ) ));
throw (new Exception(G::LoadTranslation('ID_SKIN_ALREADY_EXISTS')));
}
}
$res = $tar->extract( PATH_CUSTOM_SKINS );
if (! $res) {
throw (new Exception( G::LoadTranslation( 'ID_SKIN_ERROR_EXTRACTING' ) ));
$res = $tar->extract(PATH_CUSTOM_SKINS);
if (!$res) {
throw (new Exception(G::LoadTranslation('ID_SKIN_ERROR_EXTRACTING')));
}
$configFileOriginal = PATH_CUSTOM_SKINS . $skinName . PATH_SEP . 'config.xml';
$configFileFinal = PATH_CUSTOM_SKINS . $skinName . PATH_SEP . 'config.xml';
$xmlConfiguration = file_get_contents( $configFileOriginal );
$xmlConfiguration = file_get_contents($configFileOriginal);
$workspace = ($_REQUEST['workspace'] == 'global') ? '' : config("system.workspace");
@@ -292,27 +284,27 @@ function importSkin ()
$skinInformationArray = $xmlConfigurationObj->result["skinConfiguration"]["__CONTENT__"]["information"]["__CONTENT__"];
if (isset($skinInformationArray["workspace"]["__VALUE__"])) {
$workspace = ($workspace != "" && !empty($skinInformationArray["workspace"]["__VALUE__"]))? $skinInformationArray["workspace"]["__VALUE__"] . "|" . $workspace : $workspace;
$workspace = ($workspace != "" && !empty($skinInformationArray["workspace"]["__VALUE__"])) ? $skinInformationArray["workspace"]["__VALUE__"] . "|" . $workspace : $workspace;
$xmlConfiguration = preg_replace("/(<workspace>)(.*)(<\/workspace>)/i", "<workspace>" . $workspace . "</workspace><!-- $2 -->", $xmlConfiguration);
} else {
$xmlConfiguration = preg_replace("/(<name>)(.*)(<\/name>)/i", "<name>" . $skinName . "</name><!-- $2 -->\n<workspace>" . $workspace . "</workspace>", $xmlConfiguration);
}
file_put_contents( $configFileFinal, $xmlConfiguration );
file_put_contents($configFileFinal, $xmlConfiguration);
//Delete Temporal
@unlink( PATH_CUSTOM_SKINS . '.tmp' . PATH_SEP . $filename );
// Delete Temporal
@unlink(PATH_CUSTOM_SKINS . '.tmp' . PATH_SEP . $filename);
$response['success'] = true;
$response['message'] = G::LoadTranslation( 'ID_SKIN_SUCCESSFUL_IMPORTED' );
G::auditLog("ImportSkin", "Skin Name: ".$skinName);
G::outRes( G::json_encode( $response ) );
$response['message'] = G::LoadTranslation('ID_SKIN_SUCCESSFUL_IMPORTED');
G::auditLog("ImportSkin", "Skin Name: " . $skinName);
G::outRes(G::json_encode($response));
} catch (Exception $e) {
$response['success'] = false;
$response['message'] = $e->getMessage();
$response['error'] = $e->getMessage();
G::outRes( G::json_encode( $response ) );
G::outRes(G::json_encode($response));
}
}

0
workflow/engine/plugins/.gitignore vendored Normal file
View File

View File

@@ -1,29 +0,0 @@
<?php
class chartsPlugin extends PMPlugin
{
public function chartsPlugin($sNamespace, $sFilename = null)
{
$res = parent::PMPlugin($sNamespace, $sFilename);
$this->sFriendlyName = 'Charts Plugin';
$this->sDescription = 'This plugin shows generic charts for ProcessMaker';
$this->sPluginFolder = 'charts';
$this->sSetupPage = 'setupPage';
$this->aWorkspaces = array( );
$this->iVersion = 0.45;
$this->bPrivate = true;
return $res;
}
public function setup()
{
$this->registerTrigger(10000, 'createCaseFolder');
}
public function install()
{
}
}
$oPluginRegistry = PMPluginRegistry::getSingleton();
$oPluginRegistry->registerPlugin('charts', __FILE__);

View File

@@ -1,106 +0,0 @@
<?php
require_once ( "classes/model/Application.php" );
require_once ( "classes/model/AppDelegation.php" );
require_once ( "classes/model/Process.php" );
class chartsClass extends PMPlugin {
function __construct ( ) {
}
function readConfig () {
$fileConf = PATH_PLUGINS . 'charts' . PATH_SEP . 'config' . PATH_SEP . 'setup.conf';
if ( !file_exists( dirname($fileConf) ) )
throw ( new Exception ("The directory " . dirname($fileConf) . " doesn't exist." ) );
if ( file_exists ( $fileConf ) && !is_writable( $fileConf ) )
throw ( new Exception ("The file $fileConf doesn't exist or this file is not writable." ) );
$content = file_get_contents ( $fileConf);
$fields = unserialize ($content);
return $fields;
}
function getFieldsForPageSetup () {
$fileConf = PATH_PLUGINS . $this->sPluginFolder . PATH_SEP . 'config' . PATH_SEP . 'setup.conf';
if ( !file_exists( dirname($fileConf) ) )
throw ( new Exception ("The directory " . dirname($fileConf) . " doesn't exist." ) );
if ( file_exists ( $fileConf ) && !is_writable( $fileConf ) )
throw ( new Exception ("The file $fileConf doesn't exist or this file is not writable." ) );
if ( file_exists ( $fileConf ) ) {
$content = file_get_contents ( $fileConf);
$fields = unserialize ($content);
}
else
$fields = array();
return $fields;
}
function updateFieldsForPageSetup ( $oData) {
$content = serialize ($oData['form']);
$fileConf = PATH_PLUGINS . $this->sPluginFolder . PATH_SEP . 'config' . PATH_SEP . 'setup.conf';
if ( !is_writable( dirname($fileConf) ) )
throw ( new Exception ("The directory " . dirname($fileConf) . " doesn't exist or this directory is not writable." ) );
if ( file_exists ( $fileConf ) && !is_writable( $fileConf ) )
throw ( new Exception ("The file $fileConf doesn't exist or this file is not writable." ) );
file_put_contents ( $fileConf, $content);
return true;
}
function setup() {
}
function getDatasetCasesByStatus ( ) {
$dataSet = new XYDataSet();
$c = new Criteria('workflow');
$c->clearSelectColumns();
$c->addSelectColumn ( ApplicationPeer::APP_STATUS );
$c->addSelectColumn ( 'COUNT(*) AS CANT') ;
$c->addGroupByColumn(ApplicationPeer::APP_STATUS);
$rs = ApplicationPeer::doSelectRS( $c );
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$rs->next();
$row = $rs->getRow();
while ( is_array ( $row ) ) {
$label = $row['APP_STATUS'];
$value = $row['CANT'];
$dataSet->addPoint(new Point($label , (int)$value ) );
$rs->next();
$row = $rs->getRow();
}
return $dataSet;
}
//we are trying to obtain the process title thru the long way, using the process object.
//there is a short way, if you use a more complex query joining Content Table.
function getDatasetCasesByProcess ( ) {
$dataSet = new XYDataSet();
$processObj = new Process;
$c = new Criteria('workflow');
$c->clearSelectColumns();
$c->addSelectColumn ( ApplicationPeer::PRO_UID );
$c->addSelectColumn ( 'COUNT(*) AS CANT') ;
//$c->addJoin( ProcessPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN);
$c->addGroupByColumn(ApplicationPeer::PRO_UID);
$rs = ApplicationPeer::doSelectRS( $c );
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$rs->next();
$row = $rs->getRow();
while ( is_array ( $row ) ) {
$processObj->load ( $row['PRO_UID'] );
$label = $processObj->getProTitle();
$value = $row['CANT'];
$dataSet->addPoint(new Point($label , (int)$value) );
$rs->next();
$row = $rs->getRow();
}
return $dataSet;
}
}

View File

@@ -1 +0,0 @@
a:1:{s:6:"ACCEPT";s:4:"Save";}

View File

@@ -1,60 +0,0 @@
<?php
/**
* dashboard.php
*
* ProcessMaker Open Source Edition
* Copyright (C) 2004 - 2008 Colosa Inc.23
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
*
*/
//if (($RBAC_Response=$RBAC->userCanAccess("PM_SETUP"))!=1) return $RBAC_Response;
require_once ( "class.charts.php" );
header("Content-type: image/png");
//type of chart, pie, vertical bar, horizontal, etc.
$type = isset ( $_GET['type']) ? $_GET['type'] : '1' ;
$chartType = isset ( $_GET['chart']) ? $_GET['chart'] : '1' ;
$user = isset ( $_GET['user']) ? $_GET['user'] : $_SESSION['USER_LOGGED'] ;
$chartsObj = new chartsClass();
//$chart = new PieChart(450,300);
switch ( $type ) {
case '1' :
$chart = new VerticalBarChart(430, 280); break;
case '2' :
$chart = new HorizontalBarChart(430, 200); break;
case '3' :
$chart = new LineChart(430, 280); break;
case '4' :
$chart = new PieChart(430, 200 ); break;
}
switch ( $chartType ) {
case '1' :
$dataSet = $chartsObj->getDatasetCasesByStatus(); break;
default :
$dataSet = $chartsObj->getDatasetCasesByProcess(); break;
}
$chart->setDataSet($dataSet);
$chart->setTitle( "Cases list" );
$chart->render();

View File

@@ -1,20 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<dynaForm
name="About Charts Plugin"
type="xmlform"
width="550"
>
<TITLE type="title" >
<en>About charts Plugin</en>
</TITLE>
<sTITLE type="subtitle" >
<en>This is the Charts Plugin, with this plugin you can see many differents charts</en>
</sTITLE>
<ACCEPT type="submit" >
<en>Save</en>
</ACCEPT>
</dynaForm>

View File

@@ -1,61 +0,0 @@
<?php
/**
* processTemplate.php
*
* ProcessMaker Open Source Edition
* Copyright (C) 2004 - 2008 Colosa Inc.23
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
*
*/
class processTemplatePlugin extends PMPlugin
{
public function processTemplatePlugin($sNamespace, $sFilename = null)
{
$res = parent::PMPlugin($sNamespace, $sFilename);
$this->sFriendlyName = 'Process Map Templates';
$this->sDescription = 'This plugin includes various templates for quick and easy Process Map creation. Users can customize Process Maps based on pre-defined templates of common process designs (including Parallel, Dual Start Task, and Selection).';
$this->sPluginFolder = 'processTemplate';
$this->sSetupPage = null;
$this->iVersion = 0.78;
$this->bPrivate = true;
$this->aWorkspaces = array( '__' );
return $res;
}
public function setup()
{
//$this->registerTrigger( PM_NEW_PROCESS_LIST, 'getNewProcessTemplateList' );
//$this->registerTrigger( PM_NEW_PROCESS_SAVE, 'saveNewProcess' );
//$this->registerTrigger( PM_NEW_DYNAFORM_LIST, 'getNewDynaformTemplateList' );
//$this->registerTrigger( PM_NEW_DYNAFORM_SAVE, 'saveNewDynaform' );
}
public function install()
{
}
public function enable()
{
}
public function disable()
{
}
}
$oPluginRegistry = PMPluginRegistry::getSingleton();
$oPluginRegistry->registerPlugin('processTemplate', __FILE__);

View File

@@ -1,195 +0,0 @@
<?php
/**
* class.processTemplate.php
*
* ProcessMaker Open Source Edition
* Copyright (C) 2004 - 2008 Colosa Inc.23
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
*
*/
class processTemplateClass extends PMPlugin {
function __construct ( ) {
}
function getNewProcessTemplateList ( $oData ) {
global $_DBArray;
$rows[] = array ( 'uid' => 'char', 'name' => 'char', );
$rows[] = array ( 'uid' => '', 'name' => 'blank process' );
$rows[] = array ( 'uid' => 1, 'name' => 'simple process, three tasks' );
$rows[] = array ( 'uid' => 2, 'name' => 'simple parallel process' );
$rows[] = array ( 'uid' => 3, 'name' => 'conditional process' );
$rows[] = array ( 'uid' => 4, 'name' => 'double starting task' );
$rows[] = array ( 'uid' => 5, 'name' => 'advanced parallel process' );
$_DBArray['ProcessesNew'] = $rows;
}
function saveNewProcess ( $oData ) {
switch ($oData['PRO_TEMPLATE']) {
case 1 : $this->simpleProcess ( $oData);
break;
case 2 : $this->simpleParallel ( $oData);
break;
case 3 : $this->conditional ( $oData);
break;
case 4 : $this->doubleStart ( $oData);
break;
case 5 : $this->fullParallel ( $oData);
break;
default :
}
}
function simpleProcess ($oData ) {
//$oJSON = new Services_JSON();
$sProUid = $oData['PRO_UID'];
$sTemplate = $oData['PRO_TEMPLATE'];
$oProcessMap = $oData['PROCESSMAP'];
$t1 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 300, 70) );
$t2 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 300, 160) );
$t3 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 300, 250) );
$task1 = $t1->uid;
$task2 = $t2->uid;
$task3 = $t3->uid;
$aData = array("TAS_START"=>"TRUE","TAS_UID"=>$task1);
$oTask = new Task();
$oTask->update($aData);
$oProcessMap->saveNewPattern($sProUid, $task1, $task2, 'SEQUENTIAL' );
$oProcessMap->saveNewPattern($sProUid, $task2, $task3, 'SEQUENTIAL' );
$oProcessMap->saveNewPattern($sProUid, $task3, -1, 'SEQUENTIAL' );
}
function simpleParallel ($oData ) {
//$oJSON = new Services_JSON();
$sProUid = $oData['PRO_UID'];
$sTemplate = $oData['PRO_TEMPLATE'];
$oProcessMap = $oData['PROCESSMAP'];
$t1 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 300, 70) );
$t2 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 200, 160) );
$t3 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 400, 160) );
$t5 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 300, 250) );
$aData = array("TAS_START"=>"TRUE","TAS_UID"=>$t1->uid);
$oTask = new Task();
$oTask->update($aData);
$oProcessMap->saveNewPattern($sProUid, $t1->uid, $t2->uid, 'PARALLEL' );
$oProcessMap->saveNewPattern($sProUid, $t1->uid, $t3->uid, 'PARALLEL' );
$oProcessMap->saveNewPattern($sProUid, $t2->uid, $t5->uid, 'SEC-JOIN' );
$oProcessMap->saveNewPattern($sProUid, $t3->uid, $t5->uid, 'SEC-JOIN' );
$oProcessMap->saveNewPattern($sProUid, $t5->uid, -1, 'SEQUENTIAL' );
}
function fullParallel ($oData ) {
//$oJSON = new Services_JSON();
$sProUid = $oData['PRO_UID'];
$sTemplate = $oData['PRO_TEMPLATE'];
$oProcessMap = $oData['PROCESSMAP'];
$t1 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 300, 70) );
$t2 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 100, 160) );
$t3 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 300, 160) );
$t4 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 500, 160) );
$t5 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 200, 250) );
$t6 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 500, 250) );
$t7 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 350, 340) );
$aData = array("TAS_START"=>"TRUE","TAS_UID"=>$t1->uid);
$oTask = new Task();
$oTask->update($aData);
$oProcessMap->saveNewPattern($sProUid, $t1->uid, $t2->uid, 'PARALLEL' );
$oProcessMap->saveNewPattern($sProUid, $t1->uid, $t3->uid, 'PARALLEL' );
$oProcessMap->saveNewPattern($sProUid, $t1->uid, $t4->uid, 'PARALLEL' );
$oProcessMap->saveNewPattern($sProUid, $t2->uid, $t5->uid, 'SEC-JOIN' );
$oProcessMap->saveNewPattern($sProUid, $t3->uid, $t5->uid, 'SEC-JOIN' );
$oProcessMap->saveNewPattern($sProUid, $t4->uid, $t6->uid, 'SEQUENTIAL' );
$oProcessMap->saveNewPattern($sProUid, $t5->uid, $t7->uid, 'SEC-JOIN' );
$oProcessMap->saveNewPattern($sProUid, $t6->uid, $t7->uid, 'SEC-JOIN' );
$oProcessMap->saveNewPattern($sProUid, $t7->uid, -1, 'SEQUENTIAL' );
}
function conditional ($oData ) {
//$oJSON = new Services_JSON();
$sProUid = $oData['PRO_UID'];
$sTemplate = $oData['PRO_TEMPLATE'];
$oProcessMap = $oData['PROCESSMAP'];
$t1 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 300, 70) );
$t2 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 200, 160) );
$t3 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 400, 160) );
$t4 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 300, 250) );
$task1 = $t1->uid;
$task2 = $t2->uid;
$task3 = $t3->uid;
$task4 = $t4->uid;
$aData = array("TAS_START"=>"TRUE","TAS_UID"=>$task1);
$oTask = new Task();
$oTask->update($aData);
$oProcessMap->saveNewPattern($sProUid, $task1, $task2, 'SELECT' );
$oProcessMap->saveNewPattern($sProUid, $task1, $task3, 'SELECT' );
$oProcessMap->saveNewPattern($sProUid, $task2, $task4, 'SEQUENTIAL' );
$oProcessMap->saveNewPattern($sProUid, $task3, $task4, 'SEQUENTIAL' );
$oProcessMap->saveNewPattern($sProUid, $task4, -1, 'SEQUENTIAL' );
}
function doubleStart ($oData ) {
//$oJSON = new Services_JSON();
$sProUid = $oData['PRO_UID'];
$sTemplate = $oData['PRO_TEMPLATE'];
$oProcessMap = $oData['PROCESSMAP'];
$t1 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 200, 70) );
$t2 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 400, 70) );
$t3 = Bootstrap::json_decode( $oProcessMap->addTask( $sProUid, 300, 160) );
$task1 = $t1->uid;
$task2 = $t2->uid;
$task3 = $t3->uid;
$aData = array("TAS_START"=>"TRUE","TAS_UID"=>$task1);
$oTask = new Task();
$oTask->update($aData);
$aData = array("TAS_START"=>"TRUE","TAS_UID"=>$task2);
$oTask = new Task();
$oTask->update($aData);
$oProcessMap->saveNewPattern($sProUid, $task1, $task3, 'SEQUENTIAL' );
$oProcessMap->saveNewPattern($sProUid, $task2, $task3, 'SEQUENTIAL' );
$oProcessMap->saveNewPattern($sProUid, $task3, -1, 'SEQUENTIAL' );
}
function setup()
{
}
}

View File

@@ -1733,7 +1733,7 @@ class Cases
* @return array
* @throws Exception
*/
private function __getFieldsAndValuesByDynaFormAndAppData(array $form, array $appData, array $caseVariable)
private function getFieldsAndValuesByDynaFormAndAppData(array $form, array $appData, array $caseVariable)
{
try {
foreach ($form['items'] as $value) {
@@ -1754,7 +1754,7 @@ class Cases
}
}
} else {
$caseVariableAux = $this->__getFieldsAndValuesByDynaFormAndAppData($field, $appData,
$caseVariableAux = $this->getFieldsAndValuesByDynaFormAndAppData($field, $appData,
$caseVariable);
$caseVariable = array_merge($caseVariable, $caseVariableAux);
}
@@ -1827,7 +1827,7 @@ class Cases
$arrayAppData = $fields['APP_DATA'];
$arrayCaseVariable = $this->__getFieldsAndValuesByDynaFormAndAppData(
$arrayCaseVariable = $this->getFieldsAndValuesByDynaFormAndAppData(
$arrayDynContent['items'][0], $arrayAppData, $arrayCaseVariable
);
} else {
@@ -2406,7 +2406,7 @@ class Cases
* @return array
* @throws Exception
*/
private function __getStatusInfoDataByRsCriteria($rsCriteria)
private function getStatusInfoDataByRsCriteria($rsCriteria)
{
try {
$arrayData = [];
@@ -2489,7 +2489,7 @@ class Cases
$rsCriteria = AppDelayPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$arrayData = $this->__getStatusInfoDataByRsCriteria($rsCriteria);
$arrayData = $this->getStatusInfoDataByRsCriteria($rsCriteria);
if (!empty($arrayData)) {
return $arrayData;
@@ -2522,7 +2522,7 @@ class Cases
$rsCriteria = AppCacheViewPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$arrayData = $this->__getStatusInfoDataByRsCriteria($rsCriteria);
$arrayData = $this->getStatusInfoDataByRsCriteria($rsCriteria);
if (!empty($arrayData)) {
return $arrayData;
@@ -2565,7 +2565,7 @@ class Cases
$rsCriteria = ApplicationPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$arrayData = $this->__getStatusInfoDataByRsCriteria($rsCriteria);
$arrayData = $this->getStatusInfoDataByRsCriteria($rsCriteria);
if (!empty($arrayData)) {
return $arrayData;
@@ -2605,7 +2605,7 @@ class Cases
$rsCriteria2 = ApplicationPeer::doSelectRS($criteria2);
$rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$arrayData = $this->__getStatusInfoDataByRsCriteria($rsCriteria2);
$arrayData = $this->getStatusInfoDataByRsCriteria($rsCriteria2);
if (!empty($arrayData)) {
return $arrayData;
@@ -3152,7 +3152,7 @@ class Cases
*
* @return array Returns array with Case data updated
*/
private function __applicationDataDeleteMultipleFile(
private function applicationDataDeleteMultipleFile(
array $arrayApplicationData,
$variable1,
$variable2,
@@ -3198,7 +3198,7 @@ class Cases
case 'GRID':
foreach ($arrayApplicationData[$variable1] as $key => $value) {
if (array_key_exists($variable2, $value)) {
$arrayApplicationData[$variable1][$key] = $this->__applicationDataDeleteMultipleFile(
$arrayApplicationData[$variable1][$key] = $this->applicationDataDeleteMultipleFile(
$value, $variable2, null, 'NORMAL', $arrayDocumentToDelete
);
}
@@ -3254,7 +3254,7 @@ class Cases
foreach ($arrayDocumentDelete as $value2) {
$appDocument->remove($value2['appDocUid'], (int)($value2['version']));
$arrayApplicationData['APP_DATA'] = $this->__applicationDataDeleteMultipleFile(
$arrayApplicationData['APP_DATA'] = $this->applicationDataDeleteMultipleFile(
$arrayApplicationData['APP_DATA'], $variable, null, $type, $value2
);
@@ -3272,7 +3272,7 @@ class Cases
foreach ($arrayDocumentDelete as $value4) {
$appDocument->remove($value4['appDocUid'], (int)($value4['version']));
$arrayApplicationData['APP_DATA'] = $this->__applicationDataDeleteMultipleFile(
$arrayApplicationData['APP_DATA'] = $this->applicationDataDeleteMultipleFile(
$arrayApplicationData['APP_DATA'], $grid, $variable, $type, $value4
);

View File

@@ -90,7 +90,7 @@ class Variable extends Attribute
* @return mixed Returns array with Application, AppDelegation and Variable record,
* ThrowTheException/FALSE otherwise
*/
private function __getApplicationAppDelegationAndVariableRecordByData(
private function getApplicationAppDelegationAndVariableRecordByData(
$applicationUid,
$delIndex,
$variableName,
@@ -144,7 +144,7 @@ class Variable extends Attribute
*
* @return array Returns an array with Fields of a Grid
*/
private function __getGridFieldDefinitions($projectUid, $gridName)
private function getGridFieldDefinitions($projectUid, $gridName)
{
try {
$arrayGridField = [];
@@ -202,7 +202,7 @@ class Variable extends Attribute
*
* @return bool Returns TRUE when array data is valid, ThrowTheException/FALSE otherwise
*/
private function __validateData(array $arrayData, array $arrayVariableData, $throwException = true)
private function validateData(array $arrayData, array $arrayVariableData, $throwException = true)
{
try {
if (empty($arrayData)) {
@@ -303,7 +303,7 @@ class Variable extends Attribute
{
try {
//Verify data and Set variables
$result = $this->__getApplicationAppDelegationAndVariableRecordByData(
$result = $this->getApplicationAppDelegationAndVariableRecordByData(
$applicationUid, $delIndex, $variableName, $throwException
);
@@ -329,12 +329,12 @@ class Variable extends Attribute
}
if ($arrayVariableData['VAR_FIELD_TYPE'] == 'grid') {
$arrayVariableData['arrayGridField'] = $this->__getGridFieldDefinitions(
$arrayVariableData['arrayGridField'] = $this->getGridFieldDefinitions(
$arrayVariableData['PRJ_UID'], $arrayVariableData['VAR_NAME']
);
}
$result = $this->__validateData($arrayData, $arrayVariableData, $throwException);
$result = $this->validateData($arrayData, $arrayVariableData, $throwException);
if ($result === false) {
return false;
@@ -396,7 +396,7 @@ class Variable extends Attribute
{
try {
//Verify data and Set variables
$result = $this->__getApplicationAppDelegationAndVariableRecordByData(
$result = $this->getApplicationAppDelegationAndVariableRecordByData(
$applicationUid, $delIndex, $variableName, $throwException
);
@@ -420,12 +420,12 @@ class Variable extends Attribute
}
if ($arrayVariableData['VAR_FIELD_TYPE'] == 'grid') {
$arrayVariableData['arrayGridField'] = $this->__getGridFieldDefinitions(
$arrayVariableData['arrayGridField'] = $this->getGridFieldDefinitions(
$arrayVariableData['PRJ_UID'], $arrayVariableData['VAR_NAME']
);
}
$result = $this->__validateData($arrayData, $arrayVariableData, $throwException);
$result = $this->validateData($arrayData, $arrayVariableData, $throwException);
if ($result === false) {
return false;
@@ -490,7 +490,7 @@ class Variable extends Attribute
{
try {
//Verify data and Set variables
$result = $this->__getApplicationAppDelegationAndVariableRecordByData(
$result = $this->getApplicationAppDelegationAndVariableRecordByData(
$applicationUid, $delIndex, $variableName, $throwException
);
@@ -605,7 +605,7 @@ class Variable extends Attribute
$arrayVariable = [];
//Verify data and Set variables
$result = $this->__getApplicationAppDelegationAndVariableRecordByData(
$result = $this->getApplicationAppDelegationAndVariableRecordByData(
$applicationUid, $delIndex, $variableName, $throwException
);
@@ -696,7 +696,7 @@ class Variable extends Attribute
}
}
$result = $this->__getApplicationAppDelegationAndVariableRecordByData(
$result = $this->getApplicationAppDelegationAndVariableRecordByData(
$applicationUid, $delIndex, $variableName, $throwException
);

View File

@@ -226,7 +226,7 @@ class Department
* @param array $record Record
* @return array Return an array with custom record
*/
private function __getUserCustomRecordFromRecord(array $record)
private function getUserCustomRecordFromRecord(array $record)
{
try {
$recordc = [
@@ -414,7 +414,7 @@ class Department
break;
}
$arrayUser[] = ($flagRecord)? $record : $this->__getUserCustomRecordFromRecord($record);
$arrayUser[] = ($flagRecord)? $record : $this->getUserCustomRecordFromRecord($record);
}
//Return

View File

@@ -18,7 +18,7 @@ class ReportTable
*
* @return object
*/
private function __getDefaultColumns($type = 'NORMAL')
private function getDefaultColumns($type = 'NORMAL')
{
$defaultColumns = [];
$application = new \stdClass(); //APPLICATION KEY
@@ -97,7 +97,7 @@ class ReportTable
*
* @return string
*/
private function __populateData(array $arrayTableData, array $tableNameMap)
private function populateData(array $arrayTableData, array $tableNameMap)
{
try {
$errors = '';
@@ -408,7 +408,7 @@ class ReportTable
//New report table
if ($flagIsReportTable && $flagAlterTable) {
//Setting default columns
$defaultColumns = $this->__getDefaultColumns($arrayData['REP_TAB_TYPE']);
$defaultColumns = $this->getDefaultColumns($arrayData['REP_TAB_TYPE']);
$columns = array_merge($defaultColumns, $columns);
}
@@ -839,7 +839,7 @@ class ReportTable
}
if (!empty($tableNameMap)) {
$errors = $this->__populateData($arrayTableData, $tableNameMap);
$errors = $this->populateData($arrayTableData, $tableNameMap);
}
//Return

View File

@@ -640,7 +640,7 @@ class User
* @return array Return an array with custom record
* @throws Exception
*/
private function __getUserCustomRecordFromRecord(array $record)
private function getUserCustomRecordFromRecord(array $record)
{
try {
//Get Calendar
@@ -1084,7 +1084,7 @@ class User
$row = $rsCriteria->getRow();
//Return
return (!$flagGetRecord) ? $this->__getUserCustomRecordFromRecord($row) : $row;
return (!$flagGetRecord) ? $this->getUserCustomRecordFromRecord($row) : $row;
} catch (Exception $e) {
throw $e;
}
@@ -1494,7 +1494,7 @@ class User
while ($rsCriteria->next()) {
$record = $rsCriteria->getRow();
$arrayUser[] = ($flagRecord) ? $record : $this->__getUserCustomRecordFromRecord($record);
$arrayUser[] = ($flagRecord) ? $record : $this->getUserCustomRecordFromRecord($record);
}
//Return

View File

@@ -1502,6 +1502,7 @@ class PluginRegistry
return $oMenuFromPlugin[$strMenuName];
}
}
return [];
}
/**

View File

@@ -87,9 +87,9 @@ class WorkflowBpmn extends Project\Workflow
return parent::getList($start, $limit, $filter, $changeCaseTo);
}
public function remove()
public function remove($flagRemoveCases = true, $onlyDiagram = false)
{
parent::remove();
parent::remove($flagRemoveCases, $onlyDiagram);
$this->bp->remove();
}

View File

@@ -0,0 +1,13 @@
<?php
namespace ProcessMaker\Services\OAuth2;
use OAuth2\Server;
/**
* Extended class where the properties are correctly initialized, compatibility with PHP 7.3.x
*/
class OAuth2Server extends Server
{
protected $responseTypes = [];
}

View File

@@ -53,7 +53,7 @@ class Server implements iAuthenticate
}
// Pass a storage object or array of storage objects to the OAuth2 server class
$this->server = new \OAuth2\Server($this->storage, array('allow_implicit' => true, 'access_lifetime' => 86400));
$this->server = new OAuth2Server($this->storage, array('allow_implicit' => true, 'access_lifetime' => 86400));
$this->server->setConfig('enforce_state', false);

View File

@@ -15,14 +15,11 @@ require_once __DIR__ . '/../../bootstrap/app.php';
AppEvent::getAppEvent();
register_shutdown_function(
create_function(
"",
"
if (class_exists(\"Propel\")) {
function () {
if (class_exists('Propel')) {
Propel::close();
}
"
)
}
);
ini_set("session.cookie_httponly", 1);