Merged in release/3.3.4 (pull request #6782)

Release/3.3.4

Approved-by: Paula Quispe <paula.quispe@processmaker.com>
This commit is contained in:
Paula Quispe
2019-02-14 12:45:43 +00:00
25 changed files with 1445 additions and 560 deletions

View File

@@ -3,82 +3,110 @@
use ProcessMaker\Util\DateTime;
switch ($RBAC->userCanAccess('PM_CASES')) {
case - 2:
case -2:
G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_SYSTEM', 'error', 'labels');
G::header('location: ../login/login');
die();
break;
case - 1:
case -1:
G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels');
G::header('location: ../login/login');
die();
break;
}
$oCase = new Cases();
$Fields = $oCase->loadCase($_SESSION['APPLICATION'], $_SESSION['INDEX']);
/* Render page */
/** Render page */
require_once 'classes/model/Process.php';
require_once 'classes/model/Task.php';
//Get information about the case
$case = new Cases();
$fieldsCase = $case->loadCase($_SESSION['APPLICATION'], $_SESSION['INDEX']);
//Get the user logged
$userLogged = isset($RBAC->aUserInfo['USER_INFO']['USR_UID']) ? $RBAC->aUserInfo['USER_INFO']['USR_UID'] : '';
//Check the authorization
$objCase = new \ProcessMaker\BusinessModel\Cases();
$userCanAccess = $objCase->userAuthorization(
$userLogged,
$fieldsCase['PRO_UID'],
$fieldsCase['APP_UID'],
['PM_ALLCASES'],
['SUMMARY_FORM' => 'VIEW']
);
$objProc = new Process();
$aProc = $objProc->load($Fields['PRO_UID']);
$Fields['PRO_TITLE'] = $aProc['PRO_TITLE'];
$fieldsProcess = $objProc->load($fieldsCase['PRO_UID']);
$fieldsCase['PRO_TITLE'] = $fieldsProcess['PRO_TITLE'];
$objTask = new Task();
$aTask = $objTask->load($Fields['TAS_UID']);
$Fields['TAS_TITLE'] = $aTask['TAS_TITLE'];
if (
isset($fieldsProcess['PRO_DYNAFORMS']['PROCESS']) &&
!empty($fieldsProcess['PRO_DYNAFORMS']['PROCESS']) &&
$userCanAccess['objectPermissions']['SUMMARY_FORM'] &&
$objProc->isBpmnProcess($fieldsCase['PRO_UID'])
) {
/**We will to show the custom summary form only for BPMN process*/
$_REQUEST['APP_UID'] = $fieldsCase['APP_UID'];
$_REQUEST['DEL_INDEX'] = $fieldsCase['DEL_INDEX'];
$_REQUEST['DYN_UID'] = $fieldsProcess['PRO_DYNAFORMS']['PROCESS'];
require_once(PATH_METHODS . 'cases' . PATH_SEP . 'summary.php');
exit();
} else {
/**We will to show the default claim case form*/
$objTask = new Task();
$fieldsTask = $objTask->load($fieldsCase['TAS_UID']);
$fieldsCase['TAS_TITLE'] = $fieldsTask['TAS_TITLE'];
$fieldsCase['STATUS'] .= ' ( ' . G::LoadTranslation('ID_UNASSIGNED') . ' )';
$Fields['STATUS'] .= ' ( ' . G::LoadTranslation('ID_UNASSIGNED') . ' )';
//Now getting information about the PREVIOUS task. If is the first task then no previous, use 1
$appDelegation = new AppDelegation();
$appDelegation->Load(
$fieldsCase['APP_UID'],
($fieldsCase['DEL_PREVIOUS'] == 0 ? $fieldsCase['DEL_PREVIOUS'] = 1 : $fieldsCase['DEL_PREVIOUS'])
);
$fieldsDelegation = $appDelegation->toArray(BasePeer::TYPE_FIELDNAME);
//now getting information about the PREVIOUS task. If is the first task then no preious, use 1
$oAppDel = new AppDelegation();
$oAppDel->Load($Fields['APP_UID'], ($Fields['DEL_PREVIOUS'] == 0 ? $Fields['DEL_PREVIOUS'] = 1 : $Fields['DEL_PREVIOUS']));
try {
$userInfo = new Users();
$userInfo->load($fieldsDelegation['USR_UID']);
$fieldsCase['PREVIOUS_USER'] = $userInfo->getUsrFirstname() . ' ' . $userInfo->getUsrLastname();
} catch (Exception $error) {
$fieldsCase['PREVIOUS_USER'] = G::LoadTranslation('ID_NO_PREVIOUS_USR_UID');
}
$aAppDel = $oAppDel->toArray(BasePeer::TYPE_FIELDNAME);
try {
$oCurUser = new Users();
$oCurUser->load($aAppDel['USR_UID']);
$Fields['PREVIOUS_USER'] = $oCurUser->getUsrFirstname() . ' ' . $oCurUser->getUsrLastname();
} catch (Exception $oError) {
$Fields['PREVIOUS_USER'] = G::LoadTranslation('ID_NO_PREVIOUS_USR_UID');
}
$objTask = new Task();
$aTask = $objTask->load($aAppDel['TAS_UID']);
$Fields['PREVIOUS_TASK'] = $aTask['TAS_TITLE'];
//To enable information (dynaforms, steps) before claim a case
$_SESSION['bNoShowSteps'] = true;
$G_MAIN_MENU = 'processmaker';
$G_SUB_MENU = 'caseOptions';
$G_ID_MENU_SELECTED = 'CASES';
$G_ID_SUB_MENU_SELECTED = '_';
$oHeadPublisher = headPublisher::getSingleton();
$oHeadPublisher->addScriptCode("
if (typeof parent != 'undefined') {
if (parent.showCaseNavigatorPanel) {
parent.showCaseNavigatorPanel('{$Fields['APP_STATUS']}');
}
}");
$oHeadPublisher->addScriptCode('
var Cse = {};
Cse.panels = {};
var leimnud = new maborak();
leimnud.make();
leimnud.Package.Load("rpc,drag,drop,panel,app,validator,fx,dom,abbr",{Instance:leimnud,Type:"module"});
leimnud.Package.Load("cases",{Type:"file",Absolute:true,Path:"/jscore/cases/core/cases.js"});
leimnud.Package.Load("cases_Step",{Type:"file",Absolute:true,Path:"/jscore/cases/core/cases_Step.js"});
leimnud.Package.Load("processmap",{Type:"file",Absolute:true,Path:"/jscore/processmap/core/processmap.js"});
leimnud.exec(leimnud.fix.memoryLeak);
//To enable information (dynaforms, steps) before claim a case
$_SESSION['bNoShowSteps'] = true;
$G_MAIN_MENU = 'processmaker';
$G_SUB_MENU = 'caseOptions';
$G_ID_MENU_SELECTED = 'CASES';
$G_ID_SUB_MENU_SELECTED = '_';
$headPublisher = headPublisher::getSingleton();
$headPublisher->addScriptCode("
if (typeof parent != 'undefined') {
if (parent.showCaseNavigatorPanel) {
parent.showCaseNavigatorPanel('{$fieldsCase['APP_STATUS']}');
}
}
");
$headPublisher->addScriptCode('
var Cse = {};
Cse.panels = {};
var leimnud = new maborak();
leimnud.make();
leimnud.Package.Load("rpc,drag,drop,panel,app,validator,fx,dom,abbr",{Instance:leimnud,Type:"module"});
leimnud.Package.Load("cases",{Type:"file",Absolute:true,Path:"/jscore/cases/core/cases.js"});
leimnud.Package.Load("cases_Step",{Type:"file",Absolute:true,Path:"/jscore/cases/core/cases_Step.js"});
leimnud.Package.Load("processmap",{Type:"file",Absolute:true,Path:"/jscore/processmap/core/processmap.js"});
leimnud.exec(leimnud.fix.memoryLeak);
');
$oHeadPublisher = headPublisher::getSingleton();
$oHeadPublisher->addScriptFile('/jscore/cases/core/cases_Step.js');
$headPublisher = headPublisher::getSingleton();
$headPublisher->addScriptFile('/jscore/cases/core/cases_Step.js');
$Fields['isIE'] = Bootstrap::isIE();
$fieldsCase['isIE'] = Bootstrap::isIE();
$G_PUBLISH = new Publisher();
$Fields = DateTime::convertUtcToTimeZone($Fields);
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'cases/cases_CatchSelfService.xml', '', $Fields, 'cases_CatchExecute');
G::RenderPage('publish', 'blank');
$G_PUBLISH = new Publisher();
$fieldsCase = DateTime::convertUtcToTimeZone($fieldsCase);
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'cases/cases_CatchSelfService.xml', '', $fieldsCase, 'cases_CatchExecute');
G::RenderPage('publish', 'blank');
}

View File

@@ -1,32 +1,4 @@
<?php
/**
* open.php Open Case main processor
*
* 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.
*/
/**
*
* @author Erik Amaru Ortiz <erik@colosa.com>
* @date Jan 3th, 2010
*/
$tBarGmail = false;
if (isset($_GET['gmail']) && $_GET['gmail'] == 1) {
@@ -121,22 +93,29 @@ if (isset($_GET['actionFromList']) && ($_GET['actionFromList'] === 'to_revise'))
$script = 'cases_Open?';
}
// getting bpmn projects
$c = new Criteria('workflow');
$c->addSelectColumn(BpmnProjectPeer::PRJ_UID);
$ds = ProcessPeer::doSelectRS($c);
$ds->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$bpmnProjects = array();
$process = new Process();
$fields = $process->load($case['PRO_UID']);
$isBpmn = $fields['PRO_BPMN'] === 1 ? true : false;
while ($ds->next()) {
$row = $ds->getRow();
$bpmnProjects[] = $row['PRJ_UID'];
$showCustomForm = false;
/*----------------------------------********---------------------------------*/
$respView = $oCase->getAllObjectsFrom($case['PRO_UID'], $appUid, $case['TAS_UID'], $_SESSION['USER_LOGGED'], 'VIEW');
$viewSummaryForm = isset($respView['SUMMARY_FORM']) && $respView['SUMMARY_FORM'] === 1 ? true : false;
$isNoEmpty = isset($fields['PRO_DYNAFORMS']['PROCESS']) && !empty($fields['PRO_DYNAFORMS']['PROCESS']);
if ($isBpmn && $viewSummaryForm && $isNoEmpty) {
$showCustomForm = true;
}
/*----------------------------------********---------------------------------*/
$oStep = new Step();
$oStep = $oStep->loadByProcessTaskPosition($case['PRO_UID'], $case['TAS_UID'], 1);
$oHeadPublisher->assign('uri', $script . $uri);
$oHeadPublisher->assign('_APP_NUM', '#: ' . $case['APP_NUMBER']);
$oHeadPublisher->assign('_PROJECT_TYPE', in_array($case['PRO_UID'], $bpmnProjects) ? 'bpmn' : 'classic');
$oHeadPublisher->assign('_PROJECT_TYPE', $isBpmn ? 'bpmn' : 'classic');
$oHeadPublisher->assign('_PRO_UID', $case['PRO_UID']);
$oHeadPublisher->assign('_APP_UID', $appUid);
$oHeadPublisher->assign('_ENV_CURRENT_DATE', $conf->getSystemDate(date('Y-m-d')));
@@ -144,6 +123,7 @@ $oHeadPublisher->assign('_ENV_CURRENT_DATE_NO_FORMAT', date('Y-m-d-h-i-A'));
$oHeadPublisher->assign('idfirstform', is_null($oStep) ? '-1' : $oStep->getStepUidObj());
$oHeadPublisher->assign('appStatus', $case['APP_STATUS']);
$oHeadPublisher->assign('tbarGmail', $tBarGmail);
$oHeadPublisher->assign('showCustomForm', $showCustomForm);
if (!isset($_SESSION['APPLICATION']) || !isset($_SESSION['TASK']) || !isset($_SESSION['INDEX'])) {
$_SESSION['PROCESS'] = $case['PRO_UID'];

View File

@@ -1,7 +1,14 @@
<?php
/**
* Method defined and copied from processmaker/workflow/engine/classes/class.configuration.php
* Get default configuration for Cases List.
*
* @param string $action
* @param int $translation
* @return array
*
* @see workflow/engine/methods/cases/proxyPMTablesFieldList.php
* @link https://wiki.processmaker.com/3.2/Cases_List_Builder#Installation_and_Configuration
*/
function casesListDefaultFieldsAndConfig($action, $translation = 1)
{
@@ -322,6 +329,16 @@ function casesListDefaultFieldsAndConfig($action, $translation = 1)
return array("caseColumns" => $caseColumns, "caseReaderFields" => $caseReaderFields, "rowsperpage" => 20, "dateformat" => "M d, Y");
}
/**
* Get default configuration and verify if casesListDefaultFieldsAndConfig method exist.
*
* @param string $action
* @param int $translation
* @return array
*
* @see workflow/engine/methods/cases/proxyPMTablesFieldList.php
* @link https://wiki.processmaker.com/3.2/Cases_List_Builder#Installation_and_Configuration
*/
function getDefaultConfig($action, $translation)
{
$config = new Configurations();
@@ -335,6 +352,16 @@ function getDefaultConfig($action, $translation)
return $arrayConfig;
}
/**
* Get default fields configuration.
*
* @param string $action
* @param int $translation
* @return array
*
* @see workflow/engine/methods/cases/proxyPMTablesFieldList.php
* @link https://wiki.processmaker.com/3.2/Cases_List_Builder#Installation_and_Configuration
*/
function getDefaultFields($action, $translation)
{
$config = new Configurations();
@@ -405,6 +432,16 @@ function getDefaultFields($action, $translation)
return $arrayField;
}
/**
* Set available fields.
*
* @param array $arrayAvailableField
* @param array $arrayField
* @return array
*
* @see workflow/engine/methods/cases/proxyPMTablesFieldList.php
* @link https://wiki.processmaker.com/3.2/Cases_List_Builder#Installation_and_Configuration
*/
function setAvailableFields($arrayAvailableField, $arrayField)
{
$i = 0;
@@ -427,6 +464,16 @@ function setAvailableFields($arrayAvailableField, $arrayField)
return $arrayFieldResult;
}
/**
* Set Cases List fields.
*
* @param array $arrayCasesListField
* @param array $arrayField
* @return array
*
* @see workflow/engine/methods/cases/proxyPMTablesFieldList.php
* @link https://wiki.processmaker.com/3.2/Cases_List_Builder#Installation_and_Configuration
*/
function setCasesListFields($arrayCasesListField, $arrayField)
{
$i = 0;
@@ -462,32 +509,56 @@ function setCasesListFields($arrayCasesListField, $arrayField)
return $arrayFieldResult;
}
/**
* Get the Custom Case List configuration data.
*
* @global string $action
* @global array $confCasesList
* @global string $tabUid
*
* @see workflow/engine/methods/cases/proxyPMTablesFieldList.php
* @link https://wiki.processmaker.com/3.2/Cases_List_Builder#Installation_and_Configuration
*/
function fieldSet()
{
global $conf;
global $confCasesList;
global $action;
global $confCasesList;
global $tabUid;
if (is_array($confCasesList)) {
$validConfig = isset($confCasesList["first"]) && isset($confCasesList["second"]);
} else {
$validConfig = false;
$arrayField = getDefaultFields($action, 0);
$arrayConfig = getDefaultConfig($action, 0);
$result = genericJsonResponse($tabUid, [], $arrayField, $arrayConfig["rowsperpage"], $arrayConfig["dateformat"]);
$result['first']['data'] = getFieldsByTabUid($tabUid);
$confCasesList = (array) $confCasesList;
if (!empty($confCasesList)) {
if (!empty($tabUid) && empty($confCasesList['PMTable'])) {
$confCasesList['PMTable'] = $tabUid;
$confCasesList['first']['data'] = getFieldsByTabUid($tabUid);
}
if (!empty($confCasesList['PMTable']) && empty($tabUid)) {
$result = $confCasesList;
}
}
if (!$validConfig) {
$arrayField = getDefaultFields($action, 0);
$arrayConfig = getDefaultConfig($action, 0);
$result = genericJsonResponse("", array(), $arrayField, $arrayConfig["rowsperpage"], $arrayConfig["dateformat"]);
$conf->saveObject($result, "casesList", $action, "", "", "");
echo G::json_encode($result);
} else {
echo G::json_encode($confCasesList);
if (is_array($result) && isset($result['second']['data'])) {
foreach ($result['second']['data'] as $key => $value) {
$result['second']['data'][$key]['align_label'] = $result['second']['data'][$key]['align'];
}
}
echo G::json_encode($result);
}
/**
* Reset fields configuration.
*
* @global string $action
* @param int $translation
*
* @see workflow/engine/methods/cases/proxyPMTablesFieldList.php
* @link https://wiki.processmaker.com/3.2/Cases_List_Builder#Installation_and_Configuration
*/
function fieldReset($translation)
{
global $action;
@@ -500,6 +571,15 @@ function fieldReset($translation)
echo G::json_encode($result);
}
/**
* Complete a field.
*
* @global string $action
* @param int $translation
*
* @see workflow/engine/methods/cases/proxyPMTablesFieldList.php
* @link https://wiki.processmaker.com/3.2/Cases_List_Builder#Installation_and_Configuration
*/
function fieldComplete($translation)
{
@@ -565,6 +645,15 @@ function fieldComplete($translation)
echo G::json_encode($result);
}
/**
* Reset field label.
*
* @global string $action
* @param int $translation
*
* @see workflow/engine/methods/cases/proxyPMTablesFieldList.php
* @link https://wiki.processmaker.com/3.2/Cases_List_Builder#Installation_and_Configuration
*/
function fieldLabelReset($translation)
{
@@ -604,6 +693,15 @@ function fieldLabelReset($translation)
echo G::json_encode($result);
}
/**
* Save a field.
*
* @global object $conf
* @global string $action
*
* @see workflow/engine/methods/cases/proxyPMTablesFieldList.php
* @link https://wiki.processmaker.com/3.2/Cases_List_Builder#Installation_and_Configuration
*/
function fieldSave()
{
@@ -690,11 +788,6 @@ try {
switch ($xaction) {
case "FIELD_SET":
if (is_array($confCasesList) && isset($confCasesList['second']['data'])) {
foreach ($confCasesList['second']['data'] as $key => $value) {
$confCasesList['second']['data'][$key]['align_label'] = $confCasesList['second']['data'][$key]['align'];
}
}
fieldSet();
break;
case "FIELD_RESET":
@@ -722,14 +815,20 @@ try {
G::outRes( G::json_encode( G::LoadTranslation("ID_EXCEPTION_LOG_INTERFAZ", array($token)) ) );
}
/**
* set the generic Json Response, using two array for the grid stores and a string for the pmtable name
* @param string $pmtable
* @param array $first
* @param array $second
* @return $response a json string
*/
function genericJsonResponse($pmtable, $first, $second, $rowsperpage, $dateFormat)
/**
* Set the generic Json Response, using two array for the grid stores and a string for the pmtable name.
*
* @param string $pmtable
* @param array $first
* @param array $second
* @param array $rowsPerPage
* @param string $dateFormat
* @return array
*
* @see workflow/engine/methods/cases/proxyPMTablesFieldList.php
* @link https://wiki.processmaker.com/3.2/Cases_List_Builder#Installation_and_Configuration
*/
function genericJsonResponse($pmtable, $first, $second, $rowsPerPage, $dateFormat)
{
$firstGrid['totalCount'] = count($first);
$firstGrid['data'] = $first;
@@ -739,54 +838,72 @@ function genericJsonResponse($pmtable, $first, $second, $rowsperpage, $dateForma
$result['first'] = $firstGrid;
$result['second'] = $secondGrid;
$result['PMTable'] = isset($pmtable) ? $pmtable : '';
$result['rowsperpage'] = isset($rowsperpage) ? $rowsperpage : 20;
$result['rowsperpage'] = isset($rowsPerPage) ? $rowsPerPage : 20;
$result['dateformat'] = isset($dateFormat) && $dateFormat != '' ? $dateFormat : 'M d, Y';
return $result;
}
/**
* Get row from PM Table.
*
* @param string $tabUid
*
* @see workflow/engine/methods/cases/proxyPMTablesFieldList.php
* @link https://wiki.processmaker.com/3.2/Cases_List_Builder#Installation_and_Configuration
*/
function xgetFieldsFromPMTable($tabUid)
{
$rows = array();
$result = array();
// $rows[] = array ( 'name' => 'val 1', 'gridIndex' => '21', 'fieldType' => 'PM Table' );
// $rows[] = array ( 'name' => 'val 2', 'gridIndex' => '22', 'fieldType' => 'PM Table' );
// $rows[] = array ( 'name' => 'val 3', 'gridIndex' => '23', 'fieldType' => 'PM Table' );
//$result['success'] = true;
//$result['totalCount'] = count($rows);
$oCriteria = new Criteria('workflow');
$oCriteria->clearSelectColumns ( );
$oCriteria->setDistinct();
$oCriteria->addSelectColumn ( FieldsPeer::FLD_NAME );
$oCriteria->addSelectColumn ( FieldsPeer::FLD_UID );
$oCriteria->addSelectColumn ( FieldsPeer::FLD_INDEX );
$oCriteria->add (FieldsPeer::ADD_TAB_UID, $tabUid , CRITERIA::EQUAL );
$oCriteria->add (FieldsPeer::FLD_NAME, 'APP_UID' , CRITERIA::NOT_EQUAL );
$oCriteria->addAnd (FieldsPeer::FLD_NAME, 'APP_NUMBER' , CRITERIA::NOT_EQUAL );
$oCriteria->addDescendingOrderByColumn('FLD_INDEX');
$oDataset = FieldsPeer::doSelectRS($oCriteria);
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$oDataset->next();
$index = count($rows);
while ($aRow = $oDataset->getRow()) {
$aRow['index'] = ++$index;
$aTempRow['name'] = $aRow['FLD_NAME'];
$aTempRow['gridIndex'] = $aRow['index'];
$aTempRow['fieldType'] = 'PM Table';
$rows[] = $aTempRow;
$oDataset->next();
}
$result['data'] = $rows;
print G::json_encode( $result ) ;
$result = [];
$result['data'] = getFieldsByTabUid($tabUid);
print G::json_encode($result);
}
/**
*
* @param Array $fields
* @return Array
*
*/
/**
* Get rows from Fields table.
*
* @param string $tabUid
* @return array
*
* @see workflow/engine/methods/cases/proxyPMTablesFieldList.php
* @link https://wiki.processmaker.com/3.2/Cases_List_Builder#Installation_and_Configuration
*/
function getFieldsByTabUid($tabUid)
{
$rows = [];
$criteria = new Criteria('workflow');
$criteria->clearSelectColumns();
$criteria->setDistinct();
$criteria->addSelectColumn(FieldsPeer::FLD_NAME);
$criteria->addSelectColumn(FieldsPeer::FLD_UID);
$criteria->addSelectColumn(FieldsPeer::FLD_INDEX);
$criteria->add(FieldsPeer::ADD_TAB_UID, $tabUid, CRITERIA::EQUAL);
$criteria->add(FieldsPeer::FLD_NAME, 'APP_UID', CRITERIA::NOT_EQUAL);
$criteria->addAnd(FieldsPeer::FLD_NAME, 'APP_NUMBER', CRITERIA::NOT_EQUAL);
$criteria->addDescendingOrderByColumn('FLD_INDEX');
$dataSet = FieldsPeer::doSelectRS($criteria);
$dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$dataSet->next();
$index = 0;
while ($row = $dataSet->getRow()) {
$row['index'] = ++$index;
$tempRow['name'] = $row['FLD_NAME'];
$tempRow['gridIndex'] = $row['index'];
$tempRow['fieldType'] = 'PM Table';
$rows[] = $tempRow;
$dataSet->next();
}
return $rows;
}
/**
* Calculate Grid index.
*
* @param array $fields
* @return array
*
* @see workflow/engine/methods/cases/proxyPMTablesFieldList.php
* @link https://wiki.processmaker.com/3.2/Cases_List_Builder#Installation_and_Configuration
*/
function calculateGridIndex($fields)
{
for ($i=0; $i<count( $fields ); $i++) {

View File

@@ -1,28 +1,22 @@
<?php
/**
* processes_Ajax.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.
*/
try {
// Validate the access to the actions of this file
if (!empty($_REQUEST['action']) && $_REQUEST['action'] == 'load') {
// Validate if exists the session variable "PROCESS", this action is requested from case tracker and running cases
$cannotAccess = empty($_SESSION['PROCESS']);
} else {
// Validate PM_FACTORY permission
global $RBAC;
$cannotAccess = $RBAC->userCanAccess('PM_FACTORY') !== 1;
}
if ($cannotAccess) {
G::SendTemporalMessage( 'ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels' );
G::header( 'Location: ../login/login' );
die();
}
$filter = new InputFilter();
$_GET = $filter->xssFilterHard($_GET);
$_POST = $filter->xssFilterHard($_POST);
@@ -693,41 +687,38 @@ try {
$_REQUEST['filename'] = $filter->xssFilterHard($_REQUEST['filename']);
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
global $RBAC;
if ($RBAC->userCanAccess('PM_FACTORY') == 1) {
$app = new Processes();
if (!$app->processExists($_REQUEST['pro_uid'])) {
echo G::LoadTranslation('ID_PROCESS_UID_NOT_DEFINED');
die;
}
$sDir = "";
if (isset($_REQUEST['MAIN_DIRECTORY'])) {
$_REQUEST['MAIN_DIRECTORY'] = $filter->xssFilterHard($_REQUEST['MAIN_DIRECTORY']);
$sDir = $_REQUEST['MAIN_DIRECTORY'];
}
switch ($sDir) {
case 'mailTemplates':
$sDirectory = PATH_DATA_MAILTEMPLATES . $_REQUEST['pro_uid'] . PATH_SEP . $_REQUEST['filename'];
G::auditLog('ProcessFileManager', 'Save template (' . $_REQUEST['filename'] . ') in process "' . $resultProcess['PRO_TITLE'] . '"');
break;
case 'public':
$sDirectory = PATH_DATA_PUBLIC . $_REQUEST['pro_uid'] . PATH_SEP . $_REQUEST['filename'];
G::auditLog('ProcessFileManager', 'Save public template (' . $_REQUEST['filename'] . ') in process "' . $resultProcess['PRO_TITLE'] . '"');
break;
default:
$sDirectory = PATH_DATA_MAILTEMPLATES . $_REQUEST['pro_uid'] . PATH_SEP . $_REQUEST['filename'];
break;
}
$fp = fopen($sDirectory, 'w');
$content = stripslashes($_REQUEST['fcontent']);
$content = str_replace("@amp@", "&", $content);
$content = base64_decode($content);
fwrite($fp, $content);
fclose($fp);
$sDirectory = $filter->xssFilterHard($sDirectory);
echo 'saved: ' . $sDirectory;
$app = new Processes();
if (!$app->processExists($_REQUEST['pro_uid'])) {
echo G::LoadTranslation('ID_PROCESS_UID_NOT_DEFINED');
die;
}
$sDir = "";
if (isset($_REQUEST['MAIN_DIRECTORY'])) {
$_REQUEST['MAIN_DIRECTORY'] = $filter->xssFilterHard($_REQUEST['MAIN_DIRECTORY']);
$sDir = $_REQUEST['MAIN_DIRECTORY'];
}
switch ($sDir) {
case 'mailTemplates':
$sDirectory = PATH_DATA_MAILTEMPLATES . $_REQUEST['pro_uid'] . PATH_SEP . $_REQUEST['filename'];
G::auditLog('ProcessFileManager', 'Save template (' . $_REQUEST['filename'] . ') in process "' . $resultProcess['PRO_TITLE'] . '"');
break;
case 'public':
$sDirectory = PATH_DATA_PUBLIC . $_REQUEST['pro_uid'] . PATH_SEP . $_REQUEST['filename'];
G::auditLog('ProcessFileManager', 'Save public template (' . $_REQUEST['filename'] . ') in process "' . $resultProcess['PRO_TITLE'] . '"');
break;
default:
$sDirectory = PATH_DATA_MAILTEMPLATES . $_REQUEST['pro_uid'] . PATH_SEP . $_REQUEST['filename'];
break;
}
$fp = fopen($sDirectory, 'w');
$content = stripslashes($_REQUEST['fcontent']);
$content = str_replace("@amp@", "&", $content);
$content = base64_decode($content);
fwrite($fp, $content);
fclose($fp);
$sDirectory = $filter->xssFilterHard($sDirectory);
echo 'saved: ' . $sDirectory;
break;
case 'getSessid':
if (isset($_SESSION['USER_LOGGED'])) {

View File

@@ -4,14 +4,11 @@ $RBAC->allows(basename(__FILE__), $_GET['MAIN_DIRECTORY']);
$mainDirectory = !empty($_GET['MAIN_DIRECTORY']) ? $_GET['MAIN_DIRECTORY'] : '';
$proUid = !empty($_GET['PRO_UID']) ? $_GET['PRO_UID'] : '';
$currentDirectory = !empty($_GET['CURRENT_DIRECTORY']) ? realpath($_GET['CURRENT_DIRECTORY']) . PATH_SEP : '';
$file = !empty($_GET['FILE']) ? realpath($_GET['FILE']) : '';
$currentDirectory = !empty($_GET['CURRENT_DIRECTORY']) ? $_GET['CURRENT_DIRECTORY'] . PATH_SEP : '';
$file = !empty($_GET['FILE']) ? $_GET['FILE'] : '';
$extension = (!empty($_GET['sFilextension']) && $_GET['sFilextension'] === 'javascript') ? '.js' : '';
//validated process exists, return throw if not exists.
$process = new Process();
$process->load($proUid);
// Validate the main directory
switch ($mainDirectory) {
case 'mailTemplates':
$directory = PATH_DATA_MAILTEMPLATES;
@@ -24,9 +21,20 @@ switch ($mainDirectory) {
break;
}
// Validate if process exists, an exception is throwed if not exists
$process = new Process();
$process->load($proUid);
// Validate directory and file requested
$filter = new InputFilter();
$currentDirectory = $filter->validatePath($currentDirectory);
$file = $filter->validatePath($file);
// Build requested path
$directory .= $proUid . PATH_SEP . $currentDirectory;
$file .= $extension;
// Stream the file if path exists
if (file_exists($directory . $file)) {
G::streamFile($directory . $file, true);
}