Merge branch 'develop' of https://bitbucket.org/colosa/processmaker into feature/PMCORE-1444
This commit is contained in:
@@ -1,74 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use ProcessMaker\Core\System;
|
||||
|
||||
CLI::taskName("generate-data-report");
|
||||
CLI::taskRun("generateDataReport");
|
||||
CLI::taskDescription("\nGenerate data report by process in a respective workspace, you must pass through arguments the project identifier and the processing interval.");
|
||||
CLI::taskArg("workspace", false);
|
||||
CLI::taskOpt("uid", "Identifier that represents the process, must be 32 characters.", "", "process=");
|
||||
CLI::taskOpt("start", "The start option skips so many rows before returning results.", "", "start=");
|
||||
CLI::taskOpt("limit", "The limit option restricts the number of rows returned.", "", "limit=");
|
||||
|
||||
/**
|
||||
* Generate data report by process in a respective workspace, you must pass through
|
||||
* arguments the project identifier and the processing interval.
|
||||
* @param array $options
|
||||
* @return void
|
||||
*/
|
||||
function generateDataReport(array $options): void
|
||||
{
|
||||
//get workspace
|
||||
if (empty($options[0])) {
|
||||
CLI::logging("Workspace undefined!\n");
|
||||
return;
|
||||
}
|
||||
$workspace = $options[0];
|
||||
|
||||
//get options
|
||||
$parameters = [
|
||||
"tableName=" => "",
|
||||
"type=" => "",
|
||||
"process=" => "",
|
||||
"gridKey=" => "",
|
||||
"additionalTable=" => "",
|
||||
"className=" => "",
|
||||
"pathWorkspace=" => "",
|
||||
"start=" => "",
|
||||
"limit=" => ""
|
||||
];
|
||||
foreach ($parameters as $key => $value) {
|
||||
for ($i = 1; $i < count($options); $i++) {
|
||||
if (strpos($options[$i], $key) !== false) {
|
||||
$parameters[$key] = str_replace($key, "", $options[$i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//validations
|
||||
$needed = [
|
||||
"process="
|
||||
];
|
||||
foreach ($needed as $value) {
|
||||
if (empty($parameters[$value])) {
|
||||
CLI::logging("Missing options {$value}.\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//run method
|
||||
$workspaceTools = new WorkspaceTools($workspace);
|
||||
$workspaceTools->generateDataReport(
|
||||
$parameters["tableName="],
|
||||
$parameters["type="],
|
||||
$parameters["process="],
|
||||
$parameters["gridKey="],
|
||||
$parameters["additionalTable="],
|
||||
$parameters["className="],
|
||||
$parameters["pathWorkspace="],
|
||||
(int) $parameters["start="],
|
||||
(int) $parameters["limit="]
|
||||
);
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
<?php
|
||||
|
||||
CLI::taskName("populate-table");
|
||||
CLI::taskRun("populateTable");
|
||||
CLI::taskDescription("\nThis function populates the report table with the APP_DATA data");
|
||||
CLI::taskArg("workspace", false);
|
||||
|
||||
/**
|
||||
* This function populates the report table with the APP_DATA data.
|
||||
* @return void
|
||||
*/
|
||||
function populateTable($options): void
|
||||
{
|
||||
//get options
|
||||
$workspaceName = $options[0];
|
||||
$query = base64_decode($options[1]);
|
||||
$isRbac = (bool) $options[2];
|
||||
|
||||
$workspace = new WorkspaceTools($workspaceName);
|
||||
$workspace->populateTableReport($query, $isRbac);
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
use ProcessMaker\BusinessModel\User as BusinessModelUser;
|
||||
use ProcessMaker\BusinessModel\WebEntryEvent;
|
||||
use ProcessMaker\Cases\CasesTrait;
|
||||
/*----------------------------------********---------------------------------*/
|
||||
use ProcessMaker\ChangeLog\ChangeLog;
|
||||
/*----------------------------------********---------------------------------*/
|
||||
@@ -16,6 +17,7 @@ use ProcessMaker\Util\DateTime;
|
||||
*/
|
||||
class Cases
|
||||
{
|
||||
use CasesTrait;
|
||||
private $appSolr = null;
|
||||
public $dir = 'ASC';
|
||||
public $sort = 'APP_MSG_DATE';
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
*/
|
||||
|
||||
use ProcessMaker\Model\Application as ModelApplication;
|
||||
use ProcessMaker\Model\SubApplication as ModelSubApplication;
|
||||
|
||||
class Derivation
|
||||
{
|
||||
@@ -888,7 +889,7 @@ class Derivation
|
||||
define( 'TASK_FINISH_TASK', - 2 );
|
||||
}
|
||||
|
||||
$this->case = new cases();
|
||||
$this->case = new Cases();
|
||||
|
||||
//Get data for this DEL_INDEX current
|
||||
$appFields = $this->case->loadCase( $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'] );
|
||||
@@ -1163,7 +1164,6 @@ class Derivation
|
||||
$this->verifyIsCaseChild($currentDelegation["APP_UID"], $currentDelegation["DEL_INDEX"]);
|
||||
}
|
||||
$flagUpdateCase = true;
|
||||
|
||||
}
|
||||
|
||||
//The variable $iNewDelIndex will be true if we created a new index the variable
|
||||
@@ -1204,7 +1204,7 @@ class Derivation
|
||||
* @param array $appFields
|
||||
* @param array $aSP
|
||||
*
|
||||
* @return integer $iNewDelIndex
|
||||
* @return integer
|
||||
* @throws /Exception
|
||||
*/
|
||||
function doDerivation ($currentDelegation, $nextDel, $appFields, $aSP = null)
|
||||
@@ -1338,84 +1338,10 @@ class Derivation
|
||||
|
||||
//if there are SubProcess to create
|
||||
if (isset($aSP)) {
|
||||
//Check if is SelfService the task in the SubProcess
|
||||
$isSelfService = (empty($aSP['USR_UID'])) ? true : false;
|
||||
// Create case in the subprocess
|
||||
$this->subProcessCreation($aSP, $appFields, $currentDelegation, $iNewDelIndex, $iAppThreadIndex);
|
||||
|
||||
//Create the new case in the sub-process
|
||||
//Set the initial date to null the time its created
|
||||
$aNewCase = $this->case->startCase( $aSP['TAS_UID'], $aSP['USR_UID'], true, $appFields, $isSelfService);
|
||||
|
||||
//Load the TAS_UID related to the SubProcess
|
||||
$taskNextDel = TaskPeer::retrieveByPK($aSP["TAS_UID"]); //Sub-Process
|
||||
|
||||
//Copy case variables to sub-process case
|
||||
$aFields = unserialize( $aSP['SP_VARIABLES_OUT'] );
|
||||
$aNewFields = array ();
|
||||
$aOldFields = $this->case->loadCase( $aNewCase['APPLICATION'] );
|
||||
|
||||
foreach ($aFields as $sOriginField => $sTargetField) {
|
||||
$sOriginField = trim($sOriginField, " @#%?$=&");
|
||||
$sTargetField = trim($sTargetField, " @#%?$=&");
|
||||
|
||||
$aNewFields[$sTargetField] = isset( $appFields['APP_DATA'][$sOriginField] ) ? $appFields['APP_DATA'][$sOriginField] : '';
|
||||
|
||||
if (array_key_exists($sOriginField . '_label', $appFields['APP_DATA'])) {
|
||||
$aNewFields[$sTargetField . '_label'] = $appFields['APP_DATA'][$sOriginField . '_label'];
|
||||
}
|
||||
}
|
||||
|
||||
//We will to update the new case
|
||||
$aOldFields['APP_DATA'] = array_merge( $aOldFields['APP_DATA'], $aNewFields );
|
||||
$aOldFields['APP_STATUS'] = 'TO_DO';
|
||||
$this->case->updateCase(
|
||||
$aNewCase['APPLICATION'],
|
||||
$aOldFields
|
||||
);
|
||||
|
||||
//Create a registry in SUB_APPLICATION table
|
||||
$aSubApplication = array (
|
||||
'APP_UID' => $aNewCase['APPLICATION'],
|
||||
'APP_PARENT' => $currentDelegation['APP_UID'],
|
||||
'DEL_INDEX_PARENT' => $iNewDelIndex,
|
||||
'DEL_THREAD_PARENT' => $iAppThreadIndex,
|
||||
'SA_STATUS' => 'ACTIVE',
|
||||
'SA_VALUES_OUT' => serialize($aNewFields),
|
||||
'SA_INIT_DATE' => date('Y-m-d H:i:s')
|
||||
);
|
||||
if ($aSP['SP_SYNCHRONOUS'] == 0) {
|
||||
$aSubApplication['SA_STATUS'] = 'FINISHED';
|
||||
$aSubApplication['SA_FINISH_DATE'] = $aSubApplication['SA_INIT_DATE'];
|
||||
}
|
||||
$oSubApplication = new SubApplication();
|
||||
$oSubApplication->create( $aSubApplication );
|
||||
|
||||
//Update the AppDelegation to execute the update trigger
|
||||
$AppDelegation = AppDelegationPeer::retrieveByPK( $aNewCase['APPLICATION'], $aNewCase['INDEX'] );
|
||||
$AppDelegation->save();
|
||||
|
||||
//Create record in table APP_ASSIGN_SELF_SERVICE_VALUE
|
||||
if ($taskNextDel->getTasAssignType() == "SELF_SERVICE" && trim($taskNextDel->getTasGroupVariable()) != "") {
|
||||
$nextTaskGroupVariable = trim($taskNextDel->getTasGroupVariable(), " @#");
|
||||
|
||||
if (isset($aOldFields["APP_DATA"][$nextTaskGroupVariable])) {
|
||||
$dataVariable = $aOldFields["APP_DATA"][$nextTaskGroupVariable];
|
||||
$dataVariable = (is_array($dataVariable))? $dataVariable : trim($dataVariable);
|
||||
|
||||
if (!empty($dataVariable)) {
|
||||
$appAssignSelfServiceValue = new AppAssignSelfServiceValue();
|
||||
|
||||
$appAssignSelfServiceValue->create($aNewCase["APPLICATION"], $aNewCase["INDEX"], array("PRO_UID" => $aNewCase["PROCESS"], "TAS_UID" => $aSP["TAS_UID"], "GRP_UID" => ""), $dataVariable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//We will to send the notifications
|
||||
$sendNotificationsMobile = $this->sendNotificationsMobile($aOldFields, $aSP, $aNewCase['INDEX']);
|
||||
$nextTaskData = $taskNextDel->toArray(BasePeer::TYPE_FIELDNAME);
|
||||
$nextTaskData['USR_UID'] = $aSP['USR_UID'];
|
||||
$sendNotifications = $this->notifyAssignedUser($appFields, $nextTaskData, $aNewCase['INDEX']);
|
||||
|
||||
//If is ASYNCHRONOUS we will to route the case master
|
||||
// If is ASYNCHRONOUS we will to route the case master
|
||||
if ($aSP['SP_SYNCHRONOUS'] == 0) {
|
||||
$this->case->setDelInitDate( $currentDelegation['APP_UID'], $iNewDelIndex );
|
||||
$aDeriveTasks = $this->prepareInformation(
|
||||
@@ -1476,6 +1402,102 @@ class Derivation
|
||||
return $iNewDelIndex;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the sub-process
|
||||
*
|
||||
* @param array $subProcessInfo
|
||||
* @param array $appFields
|
||||
* @param array $currentDelegation
|
||||
* @param int $delIndex
|
||||
* @param int $threadIndex
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function subProcessCreation(array $subProcessInfo, array $appFields, array $currentDelegation, $delIndex, $threadIndex)
|
||||
{
|
||||
// Check if is SelfService the task in the SubProcess
|
||||
$isSelfService = empty($subProcessInfo['USR_UID']) ? true : false;
|
||||
|
||||
// Create the new case in the sub-process
|
||||
// Set the initial date to null the time its created
|
||||
// The DelThreadStatus will create with CLOSED value for avoid to open the case without all the execution
|
||||
$newCase = $this->case->startCase($subProcessInfo['TAS_UID'], $subProcessInfo['USR_UID'], true, $appFields, $isSelfService);
|
||||
|
||||
// Load the TAS_UID related to the SubProcess
|
||||
$taskNextDel = TaskPeer::retrieveByPK($subProcessInfo["TAS_UID"]); //Sub-Process
|
||||
|
||||
// Copy case variables to sub-process case
|
||||
$fields = unserialize($subProcessInfo['SP_VARIABLES_OUT']);
|
||||
$newFields = [];
|
||||
$oldFields = $this->case->loadCase($newCase['APPLICATION']);
|
||||
|
||||
foreach ($fields as $originField => $targetField) {
|
||||
$originField = trim($originField, " @#%?$=&");
|
||||
$targetField = trim($targetField, " @#%?$=&");
|
||||
$newFields[$targetField] = isset($appFields['APP_DATA'][$originField]) ? $appFields['APP_DATA'][$originField] : '';
|
||||
|
||||
if (array_key_exists($originField . '_label', $appFields['APP_DATA'])) {
|
||||
$newFields[$targetField . '_label'] = $appFields['APP_DATA'][$originField . '_label'];
|
||||
}
|
||||
}
|
||||
|
||||
// We will to update the new case
|
||||
$oldFields['APP_DATA'] = array_merge($oldFields['APP_DATA'], $newFields);
|
||||
$oldFields['APP_STATUS'] = 'TO_DO';
|
||||
$this->case->updateCase(
|
||||
$newCase['APPLICATION'],
|
||||
$oldFields
|
||||
);
|
||||
|
||||
// Create a registry in SUB_APPLICATION table
|
||||
$attributes = [
|
||||
'APP_UID' => $newCase['APPLICATION'],
|
||||
'APP_PARENT' => $currentDelegation['APP_UID'],
|
||||
'DEL_INDEX_PARENT' => $delIndex,
|
||||
'DEL_THREAD_PARENT' => $threadIndex,
|
||||
'SA_STATUS' => 'ACTIVE',
|
||||
'SA_VALUES_OUT' => serialize($newFields),
|
||||
'SA_INIT_DATE' => date('Y-m-d H:i:s')
|
||||
];
|
||||
if ($subProcessInfo['SP_SYNCHRONOUS'] == 0) {
|
||||
$attributes['SA_STATUS'] = 'FINISHED';
|
||||
$attributes['SA_FINISH_DATE'] = $attributes['SA_INIT_DATE'];
|
||||
}
|
||||
$subprocess = ModelSubApplication::create($attributes);
|
||||
|
||||
// Update the AppDelegation to execute the update trigger
|
||||
// Update the DelThreadStatus, the thread is ready for continue
|
||||
$appDelegation = AppDelegationPeer::retrieveByPK($newCase['APPLICATION'], $newCase['INDEX']);
|
||||
$appDelegation->setDelThreadStatus('OPEN');
|
||||
$appDelegation->save();
|
||||
|
||||
// Create record in table APP_ASSIGN_SELF_SERVICE_VALUE
|
||||
$tasGroupVariable = $taskNextDel->getTasGroupVariable();
|
||||
if ($taskNextDel->getTasAssignType() == "SELF_SERVICE" && !empty(trim($tasGroupVariable))) {
|
||||
$nextTaskGroupVariable = trim($tasGroupVariable, " @#");
|
||||
|
||||
if (isset($oldFields["APP_DATA"][$nextTaskGroupVariable])) {
|
||||
$dataVariable = $oldFields["APP_DATA"][$nextTaskGroupVariable];
|
||||
$dataVariable = (is_array($dataVariable))? $dataVariable : trim($dataVariable);
|
||||
|
||||
if (!empty($dataVariable)) {
|
||||
$appAssignSelfServiceValue = new AppAssignSelfServiceValue();
|
||||
$appAssignSelfServiceValue->create(
|
||||
$newCase["APPLICATION"],
|
||||
$newCase["INDEX"],
|
||||
["PRO_UID" => $newCase["PROCESS"], "TAS_UID" => $subProcessInfo["TAS_UID"], "GRP_UID" => ""],
|
||||
$dataVariable
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
// We will to send the notifications
|
||||
$sendNotificationsMobile = $this->sendNotificationsMobile($oldFields, $subProcessInfo, $newCase['INDEX']);
|
||||
$nextTaskData = $taskNextDel->toArray(BasePeer::TYPE_FIELDNAME);
|
||||
$nextTaskData['USR_UID'] = $subProcessInfo['USR_UID'];
|
||||
$sendNotifications = $this->notifyAssignedUser($appFields, $nextTaskData, $newCase['INDEX']);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function returns the current user Checking cases where USR_ID exists or checking a subprocess (SYNCHRONOUS)
|
||||
* @param $nextDel
|
||||
|
||||
@@ -29,6 +29,7 @@ class PmDynaform
|
||||
public $lang = SYS_LANG;
|
||||
public $translations = null;
|
||||
public $onPropertyRead = "onPropertyReadFormInstance";
|
||||
public $onAfterPropertyRead = "onAfterPropertyReadFormInstance";
|
||||
public $pathRTLCss = '';
|
||||
public $record = null;
|
||||
public $records = null;
|
||||
@@ -545,6 +546,7 @@ class PmDynaform
|
||||
if (isset($this->fields["APP_DATA"][$json->name . "_label"])) {
|
||||
$json->data->label = $this->fields["APP_DATA"][$json->name . "_label"];
|
||||
}
|
||||
$this->setDependentOptionsForDatetime($json, $this->fields);
|
||||
}
|
||||
if ($key === "type" && ($value === "file") && isset($this->fields["APP_DATA"]["APPLICATION"])) {
|
||||
$oCriteriaAppDocument = new Criteria("workflow");
|
||||
@@ -771,6 +773,11 @@ class PmDynaform
|
||||
}
|
||||
}
|
||||
}
|
||||
//read event after
|
||||
$fn = $this->onAfterPropertyRead;
|
||||
if (is_callable($fn) || function_exists($fn)) {
|
||||
$fn($json, $key, $value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2489,4 +2496,38 @@ class PmDynaform
|
||||
$json->dataSchema[$key] = $columnsData;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the dependentOptions property for datetime control, if it contains dependent fields.
|
||||
* @param stdClass $json
|
||||
* @param array $fields
|
||||
* @return void
|
||||
*/
|
||||
private function setDependentOptionsForDatetime(stdClass &$json, array $fields = []): void
|
||||
{
|
||||
if (!isset($json->type)) {
|
||||
return;
|
||||
}
|
||||
if ($json->type !== 'datetime') {
|
||||
return;
|
||||
}
|
||||
$json->dependentOptions = '';
|
||||
$backup = $this->onAfterPropertyRead;
|
||||
$properties = [
|
||||
'defaultDate' => $json->defaultDate,
|
||||
'minDate' => $json->minDate,
|
||||
'maxDate' => $json->maxDate
|
||||
];
|
||||
$this->onAfterPropertyRead = function(stdClass &$json, $key, $value) use($backup, $properties) {
|
||||
if (isset($json->type) && $json->type === 'datetime' && $key === "dependentOptions") {
|
||||
$json->dependentOptions = new stdClass();
|
||||
foreach ($properties as $property => $value) {
|
||||
if (is_string($value) && in_array(substr($value, 0, 2), self::$prefixs)) {
|
||||
$json->dependentOptions->{$property} = $value;
|
||||
}
|
||||
}
|
||||
$this->onAfterPropertyRead = $backup;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
|
||||
use App\Jobs\GenerateReportTable;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use ProcessMaker\Core\MultiProcOpen;
|
||||
use ProcessMaker\Commands\PopulateTableReport;
|
||||
use ProcessMaker\Core\JobsManager;
|
||||
use ProcessMaker\Model\Application;
|
||||
|
||||
/**
|
||||
@@ -205,6 +205,9 @@ class ReportTables
|
||||
*/
|
||||
public function populateTable($tableName, $connectionShortName = 'report', $type = 'NORMAL', $fields = [], $proUid = '', $grid = '')
|
||||
{
|
||||
$config = System::getSystemConfiguration();
|
||||
$reportTableBatchRegeneration = $config['report_table_batch_regeneration'];
|
||||
|
||||
$tableName = $this->sPrefix . $tableName;
|
||||
//we have to do the propel connection
|
||||
$database = $this->chooseDB($connectionShortName);
|
||||
@@ -222,7 +225,7 @@ class ReportTables
|
||||
$applications = Application::getByProUid($proUid);
|
||||
$i = 1;
|
||||
$queryValues = "";
|
||||
$numberRecords = 1000;
|
||||
$numberRecords = $reportTableBatchRegeneration;
|
||||
$n = count($applications);
|
||||
foreach ($applications as $application) {
|
||||
$appData = $case->unserializeData($application->APP_DATA);
|
||||
@@ -262,11 +265,12 @@ class ReportTables
|
||||
$queryValues = rtrim($queryValues, ",");
|
||||
$query = $headQuery . $queryValues;
|
||||
$queryValues = "";
|
||||
$workspace = config("system.workspace");
|
||||
$processesManager = new MultiProcOpen();
|
||||
$processesManager->chunk(1, 1, function($size, $start, $limit) use ($query, $workspace) {
|
||||
return new PopulateTableReport($workspace, $query);
|
||||
});
|
||||
|
||||
//add to queue
|
||||
$closure = function() use($query) {
|
||||
DB::insert($query);
|
||||
};
|
||||
JobsManager::getSingleton()->dispatch(GenerateReportTable::class, $closure);
|
||||
}
|
||||
} else {
|
||||
if (isset($appData[$grid])) {
|
||||
@@ -304,11 +308,12 @@ class ReportTables
|
||||
$queryValues = rtrim($queryValues, ",");
|
||||
$query = $headQuery . $queryValues;
|
||||
$queryValues = "";
|
||||
$workspace = config("system.workspace");
|
||||
$processesManager = new MultiProcOpen();
|
||||
$processesManager->chunk(1, 1, function($size, $start, $limit) use ($query, $workspace) {
|
||||
return new PopulateTableReport($workspace, $query);
|
||||
});
|
||||
|
||||
//add to queue
|
||||
$closure = function() use($query) {
|
||||
DB::insert($query);
|
||||
};
|
||||
JobsManager::getSingleton()->dispatch(GenerateReportTable::class, $closure);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
<?php
|
||||
|
||||
use App\Jobs\EmailEvent;
|
||||
use Illuminate\Support\Facades\Crypt;
|
||||
use ProcessMaker\BusinessModel\Cases as BmCases;
|
||||
use ProcessMaker\BusinessModel\EmailServer;
|
||||
/*----------------------------------********---------------------------------*/
|
||||
use ProcessMaker\ChangeLog\ChangeLog;
|
||||
@@ -1028,7 +1030,7 @@ class WsBase
|
||||
switch ($appMsgType) {
|
||||
case WsBase::MESSAGE_TYPE_EMAIL_EVENT:
|
||||
case WsBase::MESSAGE_TYPE_PM_FUNCTION:
|
||||
JobsManager::getSingleton()->dispatch('EmailEvent', $closure);
|
||||
JobsManager::getSingleton()->dispatch(EmailEvent::class, $closure);
|
||||
$result = new WsResponse(0, G::loadTranslation('ID_MESSAGE_SENT') . ": " . $to);
|
||||
break;
|
||||
default :
|
||||
@@ -3419,16 +3421,17 @@ class WsBase
|
||||
/**
|
||||
* Add case note
|
||||
*
|
||||
* @param string caseUid : ID of the case.
|
||||
* @param string processUid : ID of the process.
|
||||
* @param string taskUid : ID of the task.
|
||||
* @param string userUid : The unique ID of the user who will add note case.
|
||||
* @param string note : Note of the case.
|
||||
* @param int sendMail : Optional parameter. If set to 1, will send an email to all participants in the case.
|
||||
* @param string $caseUid, ID of the case.
|
||||
* @param string $processUid, ID of the process.
|
||||
* @param string $taskUid, ID of the task.
|
||||
* @param string $userUid, The unique ID of the user who will add note case.
|
||||
* @param string $note, Note of the case.
|
||||
* @param int $sendMail, Optional parameter. If set to 1, will send an email to all participants in the case.
|
||||
* @param array $files, Optional parameter. This is an array of files.
|
||||
*
|
||||
* @return $result will return an object
|
||||
* @return object
|
||||
*/
|
||||
public function addCaseNote($caseUid, $processUid, $taskUid, $userUid, $note, $sendMail = 1)
|
||||
public function addCaseNote($caseUid, $processUid, $taskUid, $userUid, $note, $sendMail = 1, $files = [])
|
||||
{
|
||||
try {
|
||||
if (empty($caseUid)) {
|
||||
@@ -3473,8 +3476,8 @@ class WsBase
|
||||
}
|
||||
|
||||
//Add note case
|
||||
$appNote = new AppNotes();
|
||||
$response = $appNote->addCaseNote($caseUid, $userUid, $note, $sendMail);
|
||||
$appNote = new BmCases();
|
||||
$response = $appNote->addNote($caseUid, $userUid, $note, $sendMail, $files);
|
||||
|
||||
//Response
|
||||
$result = new WsResponse(0, G::LoadTranslation("ID_COMMAND_EXECUTED_SUCCESSFULLY"));
|
||||
|
||||
@@ -249,15 +249,16 @@ function executeQuery ($SqlStatement, $DBConnectionUID = 'workflow', $aParameter
|
||||
if (is_null(config('database.connections.' . $DBConnectionUID . '.driver'))) {
|
||||
// Force to load the external connections
|
||||
DbConnections::loadAdditionalConnections();
|
||||
if (config('database.connections.' . $DBConnectionUID . '.driver') !== 'oracle') {
|
||||
// If the connections drivers are "mysql", "pgsql" or "sqlsrv" we're using Laravel
|
||||
$con = DB::connection($DBConnectionUID);
|
||||
$con->beginTransaction();
|
||||
} else {
|
||||
// If the connection driver is "oracle" we're using the native oci8 functions
|
||||
$con = Propel::getConnection($DBConnectionUID);
|
||||
$con->begin();
|
||||
}
|
||||
}
|
||||
|
||||
if (config('database.connections.' . $DBConnectionUID . '.driver') !== 'oracle') {
|
||||
// If the connections drivers are "mysql", "pgsql" or "sqlsrv" we're using Laravel
|
||||
$con = DB::connection($DBConnectionUID);
|
||||
$con->beginTransaction();
|
||||
} else {
|
||||
// If the connection driver is "oracle" we are using the native oci8 functions
|
||||
$con = Propel::getConnection($DBConnectionUID);
|
||||
$con->begin();
|
||||
}
|
||||
|
||||
$blackList = System::getQueryBlackList();
|
||||
@@ -459,6 +460,123 @@ function evaluateFunction($aGrid, $sExpresion)
|
||||
return $aGrid;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @method
|
||||
*
|
||||
* Executes operations in the grid fields, such as sum, average, median, minimum, maximun,
|
||||
* stantard deviation, variance, percentile, count, count distinct
|
||||
*
|
||||
* @name PMFTotalCalculation
|
||||
* @label PMFTotalCalculation Function
|
||||
* @link http://wiki.processmaker.com/index.php/ProcessMaker_Functions#PMFTotalCalculation.28.29
|
||||
* @param array | $grid | Grid | The input grid.
|
||||
* @param string (32) | $field | Name of field | The name of the field.
|
||||
* @param string (32) | $function | Operation.
|
||||
* @return int|float|array | $result | Result | Result according of the function
|
||||
*
|
||||
*/
|
||||
function PMFTotalCalculation($grid, $field, $function)
|
||||
{
|
||||
$systemConfiguration = Bootstrap::getSystemConfiguration();
|
||||
$floatPointNumber = $systemConfiguration['pmftotalcalculation_floating_point_number'];
|
||||
$function = strtolower($function);
|
||||
$totalRows = count($grid);
|
||||
$result = 0;
|
||||
$sum = 0;
|
||||
|
||||
switch ($function) {
|
||||
case "sum":
|
||||
for ($i = 1; $i <= $totalRows; $i += 1) {
|
||||
$result += $grid[$i][$field];
|
||||
}
|
||||
break;
|
||||
case "average":
|
||||
for ($i = 1; $i <= $totalRows; $i += 1) {
|
||||
$result += $grid[$i][$field];
|
||||
}
|
||||
$result = $result / $totalRows;
|
||||
break;
|
||||
case "median":
|
||||
$arrayAux = [];
|
||||
for ($i = 1; $i <= $totalRows; $i += 1) {
|
||||
$arrayAux[] = $grid[$i][$field];
|
||||
}
|
||||
sort($arrayAux);
|
||||
$term = ($totalRows + 1) / 2;
|
||||
if ($totalRows % 2 === 0) {
|
||||
$term = floor($term);
|
||||
$result = ($arrayAux[$term - 1] + $arrayAux[$term]) / 2;
|
||||
} else {
|
||||
$result = $arrayAux[$term - 1];
|
||||
}
|
||||
break;
|
||||
case "minimum":
|
||||
$result = $grid[1][$field];
|
||||
for ($i = 2; $i <= $totalRows; $i += 1) {
|
||||
if ($grid[$i][$field] < $result) {
|
||||
$result = $grid[$i][$field];
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "maximum":
|
||||
$result = $grid[1][$field];
|
||||
for ($i = 2; $i <= $totalRows; $i += 1) {
|
||||
if ($grid[$i][$field] > $result) {
|
||||
$result = $grid[$i][$field];
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "standarddeviation":
|
||||
$mean = 0;
|
||||
for ($i = 1; $i <= $totalRows; $i += 1) {
|
||||
$mean += $grid[$i][$field];
|
||||
}
|
||||
$mean = $mean / $totalRows;
|
||||
for ($i = 1; $i <= $totalRows; $i += 1) {
|
||||
$result += pow($grid[$i][$field] - $mean, 2);
|
||||
}
|
||||
$result = sqrt($result / $totalRows);
|
||||
break;
|
||||
case "variance":
|
||||
$mean = 0;
|
||||
for ($i = 1; $i <= $totalRows; $i += 1) {
|
||||
$mean += $grid[$i][$field];
|
||||
}
|
||||
$mean = $mean / $totalRows;
|
||||
for ($i = 1; $i <= $totalRows; $i += 1) {
|
||||
$result += pow($grid[$i][$field] - $mean, 2);
|
||||
}
|
||||
$result = $result / $totalRows;
|
||||
break;
|
||||
case "percentile":
|
||||
$result = [];
|
||||
$arrayAux = [];
|
||||
for ($i = 1; $i <= $totalRows; $i += 1) {
|
||||
$sum += $grid[$i][$field];
|
||||
$arrayAux[$i] = $grid[$i][$field];
|
||||
}
|
||||
for ($i = 1; $i <= count($arrayAux); $i += 1) {
|
||||
$result[$i] = round(($arrayAux[$i] * 100) / $sum, $floatPointNumber);
|
||||
}
|
||||
break;
|
||||
case "count":
|
||||
$result = $totalRows;
|
||||
break;
|
||||
case "countdistinct":
|
||||
$arrayAux = [];
|
||||
for ($i = 1; $i <= $totalRows; $i += 1) {
|
||||
$arrayAux[] = $grid[$i][$field];
|
||||
}
|
||||
$result = count(array_count_values($arrayAux));
|
||||
break;
|
||||
}
|
||||
if ($function !== "percentile") {
|
||||
return round($result, $floatPointNumber);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Web Services Functions *
|
||||
*/
|
||||
@@ -2899,13 +3017,15 @@ function PMFUnpauseCase ($caseUid, $delIndex, $userUid)
|
||||
* @param string(32) | $userUid | ID user | The unique ID of the user who will add note case.
|
||||
* @param string | $note | Note of the case | Note of the case.
|
||||
* @param int | $sendMail = 1 | Send mail | Optional parameter. If set to 1, will send an email to all participants in the case.
|
||||
* @param array | $files | Array of files | An array of files (full paths) to be attached to the case notes.
|
||||
*
|
||||
* @return int | $result | Result of the add a case note | Returns 1 if the note has been added to the case.; otherwise, returns 0 if an error occurred.
|
||||
*
|
||||
*/
|
||||
function PMFAddCaseNote($caseUid, $processUid, $taskUid, $userUid, $note, $sendMail = 1)
|
||||
function PMFAddCaseNote($caseUid, $processUid, $taskUid, $userUid, $note, $sendMail = 1, $files = [])
|
||||
{
|
||||
$ws = new WsBase();
|
||||
$result = $ws->addCaseNote($caseUid, $processUid, $taskUid, $userUid, $note, $sendMail);
|
||||
$result = $ws->addCaseNote($caseUid, $processUid, $taskUid, $userUid, $note, $sendMail, $files);
|
||||
|
||||
if ($result->status_code == 0) {
|
||||
return 1;
|
||||
|
||||
@@ -2,9 +2,14 @@
|
||||
|
||||
use ProcessMaker\Plugins\PluginRegistry;
|
||||
|
||||
spl_autoload_register(function($sClassName) {
|
||||
if (!empty(config("system.workspace"))) {
|
||||
$sPath = PATH_DB . config("system.workspace") . PATH_SEP . 'classes' . PATH_SEP;
|
||||
/**
|
||||
* The helper 'config()' is loaded via 'spl_autoload_register()' in unit testing.
|
||||
* The helper is pulled out to avoid an infinite loop.
|
||||
*/
|
||||
$workspace = config("system.workspace", null);
|
||||
spl_autoload_register(function($sClassName) use($workspace) {
|
||||
if (!empty($workspace)) {
|
||||
$sPath = PATH_DB . $workspace . PATH_SEP . 'classes' . PATH_SEP;
|
||||
if (file_exists($sPath . $sClassName . '.php')) {
|
||||
require_once $sPath . $sClassName . '.php';
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
<?php
|
||||
|
||||
use App\Jobs\GenerateReportTable;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use ProcessMaker\Commands\GenerateDataReport;
|
||||
use ProcessMaker\Core\MultiProcOpen;
|
||||
use ProcessMaker\Core\JobsManager;
|
||||
use ProcessMaker\Core\System;
|
||||
use ProcessMaker\Model\Application;
|
||||
use ProcessMaker\Model\Fields;
|
||||
|
||||
@@ -735,28 +736,23 @@ class AdditionalTables extends BaseAdditionalTables
|
||||
$workspace = config("system.workspace");
|
||||
$pathWorkspace = PATH_WORKSPACE;
|
||||
$n = Application::count();
|
||||
$processesManager = new MultiProcOpen();
|
||||
$processesManager->chunk($n, 1000, function($size, $start, $limit) use(
|
||||
$workspace,
|
||||
$tableName,
|
||||
$type,
|
||||
$processUid,
|
||||
$gridKey,
|
||||
$addTabUid,
|
||||
$className,
|
||||
$pathWorkspace) {
|
||||
return new GenerateDataReport(
|
||||
$workspace,
|
||||
$tableName,
|
||||
$type,
|
||||
$processUid,
|
||||
$gridKey,
|
||||
$addTabUid,
|
||||
$className,
|
||||
$pathWorkspace,
|
||||
$start,
|
||||
$limit);
|
||||
});
|
||||
|
||||
//batch process
|
||||
$config = System::getSystemConfiguration();
|
||||
$reportTableBatchRegeneration = $config['report_table_batch_regeneration'];
|
||||
|
||||
$size = $n;
|
||||
$start = 0;
|
||||
$limit = $reportTableBatchRegeneration;
|
||||
|
||||
for ($i = 1; $start < $size; $i++) {
|
||||
$closure = function() use($workspace, $tableName, $type, $processUid, $gridKey, $addTabUid, $className, $pathWorkspace, $start, $limit) {
|
||||
$workspaceTools = new WorkspaceTools($workspace);
|
||||
$workspaceTools->generateDataReport($tableName, $type, $processUid, $gridKey, $addTabUid, $className, $pathWorkspace, $start, $limit);
|
||||
};
|
||||
JobsManager::getSingleton()->dispatch(GenerateReportTable::class, $closure);
|
||||
$start = $i * $limit;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -181,6 +181,9 @@ class AppDelegation extends BaseAppDelegation
|
||||
$criteriaUpdate->add(AppDelegationPeer::DEL_LAST_INDEX, 0);
|
||||
BasePeer::doUpdate($criteria, $criteriaUpdate, Propel::getConnection('workflow'));
|
||||
|
||||
// Define the status of the thread, if is subprocess we need to CLOSED the thread
|
||||
$theadStatus = !$isSubprocess ? 'OPEN' : 'CLOSED';
|
||||
|
||||
$this->setAppUid($sAppUid);
|
||||
$this->setProUid($sProUid);
|
||||
$this->setTasUid($sTasUid);
|
||||
@@ -191,7 +194,7 @@ class AppDelegation extends BaseAppDelegation
|
||||
$this->setDelType('NORMAL');
|
||||
$this->setDelPriority(($iPriority != '' ? $iPriority : '3'));
|
||||
$this->setDelThread($sAppThread);
|
||||
$this->setDelThreadStatus('OPEN');
|
||||
$this->setDelThreadStatus($theadStatus);
|
||||
$this->setDelDelegateDate('now');
|
||||
$this->setAppNumber($appNumber);
|
||||
$this->setTasId($taskId);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
use ProcessMaker\Core\System;
|
||||
use ProcessMaker\Model\Documents;
|
||||
use ProcessMaker\Util\DateTime;
|
||||
|
||||
/**
|
||||
@@ -180,21 +181,29 @@ class AppNotes extends BaseAppNotes
|
||||
* @param string $noteRecipients
|
||||
* @param string $from
|
||||
* @param integer $delIndex
|
||||
* @param integer $noteId
|
||||
* @return void
|
||||
* @throws Exception
|
||||
*
|
||||
* @see AppNotes->addCaseNote()
|
||||
* @see AppNotes->postNewNote()
|
||||
* @see workflow/engine/src/ProcessMaker/Util/helpers.php::postNote()
|
||||
*/
|
||||
public function sendNoteNotification ($appUid, $usrUid, $noteContent, $noteRecipients, $from = '', $delIndex = 0)
|
||||
*/
|
||||
public function sendNoteNotification(
|
||||
$appUid,
|
||||
$usrUid,
|
||||
$noteContent,
|
||||
$noteRecipients,
|
||||
$from = '',
|
||||
$delIndex = 0,
|
||||
$noteId = 0
|
||||
)
|
||||
{
|
||||
try {
|
||||
|
||||
$configuration = System::getEmailConfiguration();
|
||||
|
||||
$msgError = "";
|
||||
if (! isset( $configuration['MESS_ENABLED'] ) || $configuration['MESS_ENABLED'] != '1') {
|
||||
if (!isset($configuration['MESS_ENABLED']) || $configuration['MESS_ENABLED'] != '1') {
|
||||
$msgError = "The default configuration wasn't defined";
|
||||
$configuration['MESS_ENGINE'] = '';
|
||||
}
|
||||
@@ -211,20 +220,31 @@ class AppNotes extends BaseAppNotes
|
||||
$cases = new Cases();
|
||||
$fieldCase = $cases->loadCase($appUid, $delIndex);
|
||||
$configNoteNotification['subject'] = G::LoadTranslation('ID_MESSAGE_SUBJECT_NOTE_NOTIFICATION') . " @#APP_TITLE ";
|
||||
|
||||
//Define the body for the notification
|
||||
$configNoteNotification['body'] = $this->getBodyCaseNote($authorName, $noteContent);
|
||||
$body = nl2br(G::replaceDataField($configNoteNotification['body'], $fieldCase, 'mysql', false));
|
||||
|
||||
// Get the files related to the specific case note
|
||||
if ($noteId !== 0) {
|
||||
$attachFileLinks = $this->getAttachedFilesFromTheCaseNote($noteId);
|
||||
}
|
||||
|
||||
if (!empty($attachFileLinks)) {
|
||||
$body = $body . "<br />" . G::LoadTranslation('ID_ATTACHED_FILES') . ": <br />" . implode("<br />", $attachFileLinks);
|
||||
}
|
||||
$users = new Users();
|
||||
$recipientsArray = explode(",", $noteRecipients);
|
||||
|
||||
foreach ($recipientsArray as $recipientUid) {
|
||||
$userInfo = $users->load($recipientUid);
|
||||
$to = ((($userInfo['USR_FIRSTNAME'] != '') || ($userInfo['USR_LASTNAME'] != '')) ? $userInfo['USR_FIRSTNAME'] . ' ' . $userInfo['USR_LASTNAME'] . ' ' : '') . '<' . $userInfo['USR_EMAIL'] . '>';
|
||||
$ifUserNameDefined = $userInfo['USR_FIRSTNAME'] != '' || $userInfo['USR_LASTNAME'] != '';
|
||||
$to = ($ifUserNameDefined ? $userInfo['USR_FIRSTNAME'] . ' ' . $userInfo['USR_LASTNAME'] . ' ' : '') . '<' . $userInfo['USR_EMAIL'] . '>';
|
||||
|
||||
$spool = new SpoolRun();
|
||||
$spool->setConfig($configuration);
|
||||
$messageArray = AppMessage::buildMessageRow(
|
||||
|
||||
$parameters = [
|
||||
'',
|
||||
$appUid,
|
||||
$delIndex,
|
||||
@@ -244,7 +264,8 @@ class AppNotes extends BaseAppNotes
|
||||
(isset($fieldCase['APP_NUMBER'])) ? $fieldCase['APP_NUMBER'] : 0,
|
||||
(isset($fieldCase['PRO_ID'])) ? $fieldCase['PRO_ID'] : 0,
|
||||
(isset($fieldCase['TAS_ID'])) ? $fieldCase['TAS_ID'] : 0
|
||||
);
|
||||
];
|
||||
$messageArray = AppMessage::buildMessageRow(...$parameters);
|
||||
$spool->create($messageArray);
|
||||
|
||||
if ($msgError == '') {
|
||||
@@ -252,14 +273,30 @@ class AppNotes extends BaseAppNotes
|
||||
$spool->sendMail();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//Send derivation notification - End
|
||||
} catch (Exception $exception) {
|
||||
throw $exception;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get attached files from a specific case note
|
||||
* @param int $docId
|
||||
* @return array
|
||||
*/
|
||||
public function getAttachedFilesFromTheCaseNote(int $docId): array
|
||||
{
|
||||
$attachFileLinks = [];
|
||||
$url = System::getServerMainPath();
|
||||
$result = Documents::getFiles($docId);
|
||||
foreach ($result as $item) {
|
||||
$href = $url . "/cases/casesShowCaseNotes?a={$item['APP_DOC_UID']}&v={$item['DOC_VERSION']}";
|
||||
$attachFileLinks[] = "<a href='{$href}'>{$item['APP_DOC_FILENAME']}</a>";
|
||||
}
|
||||
|
||||
return $attachFileLinks;
|
||||
}
|
||||
|
||||
public function addCaseNote($applicationUid, $userUid, $note, $sendMail)
|
||||
{
|
||||
$response = $this->postNewNote($applicationUid, $userUid, $note, false);
|
||||
|
||||
@@ -81,6 +81,8 @@ class AppDocumentMapBuilder
|
||||
|
||||
$tMap->addColumn('DOC_UID', 'DocUid', 'string', CreoleTypes::VARCHAR, true, 32);
|
||||
|
||||
$tMap->addColumn('DOC_ID', 'DocId', 'int', CreoleTypes::INTEGER, false, null);
|
||||
|
||||
$tMap->addColumn('USR_UID', 'UsrUid', 'string', CreoleTypes::VARCHAR, true, 32);
|
||||
|
||||
$tMap->addColumn('APP_DOC_TYPE', 'AppDocType', 'string', CreoleTypes::VARCHAR, true, 32);
|
||||
@@ -127,7 +129,7 @@ class AppDocumentMapBuilder
|
||||
|
||||
$tMap->addValidator('USR_UID', 'required', 'propel.validator.RequiredValidator', '', 'User UID is required.');
|
||||
|
||||
$tMap->addValidator('APP_DOC_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'INPUT|OUTPUT|ATTACHED', 'Please select a valid document type.');
|
||||
$tMap->addValidator('APP_DOC_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'INPUT|OUTPUT|ATTACHED|CASE_NOTE', 'Please select a valid document type.');
|
||||
|
||||
$tMap->addValidator('APP_DOC_TYPE', 'required', 'propel.validator.RequiredValidator', '', 'Application Document Type is required.');
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ class AppMessageMapBuilder
|
||||
|
||||
$tMap->addColumn('APP_MSG_TYPE_ID', 'AppMsgTypeId', 'int', CreoleTypes::TINYINT, false, null);
|
||||
|
||||
$tMap->addColumn('APP_MSG_SUBJECT', 'AppMsgSubject', 'string', CreoleTypes::VARCHAR, true, 150);
|
||||
$tMap->addColumn('APP_MSG_SUBJECT', 'AppMsgSubject', 'string', CreoleTypes::VARCHAR, true, 998);
|
||||
|
||||
$tMap->addColumn('APP_MSG_FROM', 'AppMsgFrom', 'string', CreoleTypes::VARCHAR, true, 100);
|
||||
|
||||
|
||||
@@ -63,7 +63,9 @@ class AppNotesMapBuilder
|
||||
$tMap = $this->dbMap->addTable('APP_NOTES');
|
||||
$tMap->setPhpName('AppNotes');
|
||||
|
||||
$tMap->setUseIdGenerator(false);
|
||||
$tMap->setUseIdGenerator(true);
|
||||
|
||||
$tMap->addColumn('NOTE_ID', 'NoteId', 'int', CreoleTypes::INTEGER, true, null);
|
||||
|
||||
$tMap->addColumn('APP_UID', 'AppUid', 'string', CreoleTypes::VARCHAR, true, 32);
|
||||
|
||||
|
||||
@@ -75,6 +75,12 @@ abstract class BaseAppDocument extends BaseObject implements Persistent
|
||||
*/
|
||||
protected $doc_uid = '';
|
||||
|
||||
/**
|
||||
* The value for the doc_id field.
|
||||
* @var int
|
||||
*/
|
||||
protected $doc_id = 0;
|
||||
|
||||
/**
|
||||
* The value for the usr_uid field.
|
||||
* @var string
|
||||
@@ -255,6 +261,17 @@ abstract class BaseAppDocument extends BaseObject implements Persistent
|
||||
return $this->doc_uid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the [doc_id] column value.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getDocId()
|
||||
{
|
||||
|
||||
return $this->doc_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the [usr_uid] column value.
|
||||
*
|
||||
@@ -616,6 +633,28 @@ abstract class BaseAppDocument extends BaseObject implements Persistent
|
||||
|
||||
} // setDocUid()
|
||||
|
||||
/**
|
||||
* Set the value of [doc_id] column.
|
||||
*
|
||||
* @param int $v new value
|
||||
* @return void
|
||||
*/
|
||||
public function setDocId($v)
|
||||
{
|
||||
|
||||
// Since the native PHP type for this column is integer,
|
||||
// we will cast the input value to an int (if it is not).
|
||||
if ($v !== null && !is_int($v) && is_numeric($v)) {
|
||||
$v = (int) $v;
|
||||
}
|
||||
|
||||
if ($this->doc_id !== $v || $v === 0) {
|
||||
$this->doc_id = $v;
|
||||
$this->modifiedColumns[] = AppDocumentPeer::DOC_ID;
|
||||
}
|
||||
|
||||
} // setDocId()
|
||||
|
||||
/**
|
||||
* Set the value of [usr_uid] column.
|
||||
*
|
||||
@@ -949,38 +988,40 @@ abstract class BaseAppDocument extends BaseObject implements Persistent
|
||||
|
||||
$this->doc_uid = $rs->getString($startcol + 7);
|
||||
|
||||
$this->usr_uid = $rs->getString($startcol + 8);
|
||||
$this->doc_id = $rs->getInt($startcol + 8);
|
||||
|
||||
$this->app_doc_type = $rs->getString($startcol + 9);
|
||||
$this->usr_uid = $rs->getString($startcol + 9);
|
||||
|
||||
$this->app_doc_create_date = $rs->getTimestamp($startcol + 10, null);
|
||||
$this->app_doc_type = $rs->getString($startcol + 10);
|
||||
|
||||
$this->app_doc_index = $rs->getInt($startcol + 11);
|
||||
$this->app_doc_create_date = $rs->getTimestamp($startcol + 11, null);
|
||||
|
||||
$this->folder_uid = $rs->getString($startcol + 12);
|
||||
$this->app_doc_index = $rs->getInt($startcol + 12);
|
||||
|
||||
$this->app_doc_plugin = $rs->getString($startcol + 13);
|
||||
$this->folder_uid = $rs->getString($startcol + 13);
|
||||
|
||||
$this->app_doc_tags = $rs->getString($startcol + 14);
|
||||
$this->app_doc_plugin = $rs->getString($startcol + 14);
|
||||
|
||||
$this->app_doc_status = $rs->getString($startcol + 15);
|
||||
$this->app_doc_tags = $rs->getString($startcol + 15);
|
||||
|
||||
$this->app_doc_status_date = $rs->getTimestamp($startcol + 16, null);
|
||||
$this->app_doc_status = $rs->getString($startcol + 16);
|
||||
|
||||
$this->app_doc_fieldname = $rs->getString($startcol + 17);
|
||||
$this->app_doc_status_date = $rs->getTimestamp($startcol + 17, null);
|
||||
|
||||
$this->app_doc_drive_download = $rs->getString($startcol + 18);
|
||||
$this->app_doc_fieldname = $rs->getString($startcol + 18);
|
||||
|
||||
$this->sync_with_drive = $rs->getString($startcol + 19);
|
||||
$this->app_doc_drive_download = $rs->getString($startcol + 19);
|
||||
|
||||
$this->sync_permissions = $rs->getString($startcol + 20);
|
||||
$this->sync_with_drive = $rs->getString($startcol + 20);
|
||||
|
||||
$this->sync_permissions = $rs->getString($startcol + 21);
|
||||
|
||||
$this->resetModified();
|
||||
|
||||
$this->setNew(false);
|
||||
|
||||
// FIXME - using NUM_COLUMNS may be clearer.
|
||||
return $startcol + 21; // 21 = AppDocumentPeer::NUM_COLUMNS - AppDocumentPeer::NUM_LAZY_LOAD_COLUMNS).
|
||||
return $startcol + 22; // 22 = AppDocumentPeer::NUM_COLUMNS - AppDocumentPeer::NUM_LAZY_LOAD_COLUMNS).
|
||||
|
||||
} catch (Exception $e) {
|
||||
throw new PropelException("Error populating AppDocument object", $e);
|
||||
@@ -1209,42 +1250,45 @@ abstract class BaseAppDocument extends BaseObject implements Persistent
|
||||
return $this->getDocUid();
|
||||
break;
|
||||
case 8:
|
||||
return $this->getUsrUid();
|
||||
return $this->getDocId();
|
||||
break;
|
||||
case 9:
|
||||
return $this->getAppDocType();
|
||||
return $this->getUsrUid();
|
||||
break;
|
||||
case 10:
|
||||
return $this->getAppDocCreateDate();
|
||||
return $this->getAppDocType();
|
||||
break;
|
||||
case 11:
|
||||
return $this->getAppDocIndex();
|
||||
return $this->getAppDocCreateDate();
|
||||
break;
|
||||
case 12:
|
||||
return $this->getFolderUid();
|
||||
return $this->getAppDocIndex();
|
||||
break;
|
||||
case 13:
|
||||
return $this->getAppDocPlugin();
|
||||
return $this->getFolderUid();
|
||||
break;
|
||||
case 14:
|
||||
return $this->getAppDocTags();
|
||||
return $this->getAppDocPlugin();
|
||||
break;
|
||||
case 15:
|
||||
return $this->getAppDocStatus();
|
||||
return $this->getAppDocTags();
|
||||
break;
|
||||
case 16:
|
||||
return $this->getAppDocStatusDate();
|
||||
return $this->getAppDocStatus();
|
||||
break;
|
||||
case 17:
|
||||
return $this->getAppDocFieldname();
|
||||
return $this->getAppDocStatusDate();
|
||||
break;
|
||||
case 18:
|
||||
return $this->getAppDocDriveDownload();
|
||||
return $this->getAppDocFieldname();
|
||||
break;
|
||||
case 19:
|
||||
return $this->getSyncWithDrive();
|
||||
return $this->getAppDocDriveDownload();
|
||||
break;
|
||||
case 20:
|
||||
return $this->getSyncWithDrive();
|
||||
break;
|
||||
case 21:
|
||||
return $this->getSyncPermissions();
|
||||
break;
|
||||
default:
|
||||
@@ -1275,19 +1319,20 @@ abstract class BaseAppDocument extends BaseObject implements Persistent
|
||||
$keys[5] => $this->getAppUid(),
|
||||
$keys[6] => $this->getDelIndex(),
|
||||
$keys[7] => $this->getDocUid(),
|
||||
$keys[8] => $this->getUsrUid(),
|
||||
$keys[9] => $this->getAppDocType(),
|
||||
$keys[10] => $this->getAppDocCreateDate(),
|
||||
$keys[11] => $this->getAppDocIndex(),
|
||||
$keys[12] => $this->getFolderUid(),
|
||||
$keys[13] => $this->getAppDocPlugin(),
|
||||
$keys[14] => $this->getAppDocTags(),
|
||||
$keys[15] => $this->getAppDocStatus(),
|
||||
$keys[16] => $this->getAppDocStatusDate(),
|
||||
$keys[17] => $this->getAppDocFieldname(),
|
||||
$keys[18] => $this->getAppDocDriveDownload(),
|
||||
$keys[19] => $this->getSyncWithDrive(),
|
||||
$keys[20] => $this->getSyncPermissions(),
|
||||
$keys[8] => $this->getDocId(),
|
||||
$keys[9] => $this->getUsrUid(),
|
||||
$keys[10] => $this->getAppDocType(),
|
||||
$keys[11] => $this->getAppDocCreateDate(),
|
||||
$keys[12] => $this->getAppDocIndex(),
|
||||
$keys[13] => $this->getFolderUid(),
|
||||
$keys[14] => $this->getAppDocPlugin(),
|
||||
$keys[15] => $this->getAppDocTags(),
|
||||
$keys[16] => $this->getAppDocStatus(),
|
||||
$keys[17] => $this->getAppDocStatusDate(),
|
||||
$keys[18] => $this->getAppDocFieldname(),
|
||||
$keys[19] => $this->getAppDocDriveDownload(),
|
||||
$keys[20] => $this->getSyncWithDrive(),
|
||||
$keys[21] => $this->getSyncPermissions(),
|
||||
);
|
||||
return $result;
|
||||
}
|
||||
@@ -1344,42 +1389,45 @@ abstract class BaseAppDocument extends BaseObject implements Persistent
|
||||
$this->setDocUid($value);
|
||||
break;
|
||||
case 8:
|
||||
$this->setUsrUid($value);
|
||||
$this->setDocId($value);
|
||||
break;
|
||||
case 9:
|
||||
$this->setAppDocType($value);
|
||||
$this->setUsrUid($value);
|
||||
break;
|
||||
case 10:
|
||||
$this->setAppDocCreateDate($value);
|
||||
$this->setAppDocType($value);
|
||||
break;
|
||||
case 11:
|
||||
$this->setAppDocIndex($value);
|
||||
$this->setAppDocCreateDate($value);
|
||||
break;
|
||||
case 12:
|
||||
$this->setFolderUid($value);
|
||||
$this->setAppDocIndex($value);
|
||||
break;
|
||||
case 13:
|
||||
$this->setAppDocPlugin($value);
|
||||
$this->setFolderUid($value);
|
||||
break;
|
||||
case 14:
|
||||
$this->setAppDocTags($value);
|
||||
$this->setAppDocPlugin($value);
|
||||
break;
|
||||
case 15:
|
||||
$this->setAppDocStatus($value);
|
||||
$this->setAppDocTags($value);
|
||||
break;
|
||||
case 16:
|
||||
$this->setAppDocStatusDate($value);
|
||||
$this->setAppDocStatus($value);
|
||||
break;
|
||||
case 17:
|
||||
$this->setAppDocFieldname($value);
|
||||
$this->setAppDocStatusDate($value);
|
||||
break;
|
||||
case 18:
|
||||
$this->setAppDocDriveDownload($value);
|
||||
$this->setAppDocFieldname($value);
|
||||
break;
|
||||
case 19:
|
||||
$this->setSyncWithDrive($value);
|
||||
$this->setAppDocDriveDownload($value);
|
||||
break;
|
||||
case 20:
|
||||
$this->setSyncWithDrive($value);
|
||||
break;
|
||||
case 21:
|
||||
$this->setSyncPermissions($value);
|
||||
break;
|
||||
} // switch()
|
||||
@@ -1438,55 +1486,59 @@ abstract class BaseAppDocument extends BaseObject implements Persistent
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[8], $arr)) {
|
||||
$this->setUsrUid($arr[$keys[8]]);
|
||||
$this->setDocId($arr[$keys[8]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[9], $arr)) {
|
||||
$this->setAppDocType($arr[$keys[9]]);
|
||||
$this->setUsrUid($arr[$keys[9]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[10], $arr)) {
|
||||
$this->setAppDocCreateDate($arr[$keys[10]]);
|
||||
$this->setAppDocType($arr[$keys[10]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[11], $arr)) {
|
||||
$this->setAppDocIndex($arr[$keys[11]]);
|
||||
$this->setAppDocCreateDate($arr[$keys[11]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[12], $arr)) {
|
||||
$this->setFolderUid($arr[$keys[12]]);
|
||||
$this->setAppDocIndex($arr[$keys[12]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[13], $arr)) {
|
||||
$this->setAppDocPlugin($arr[$keys[13]]);
|
||||
$this->setFolderUid($arr[$keys[13]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[14], $arr)) {
|
||||
$this->setAppDocTags($arr[$keys[14]]);
|
||||
$this->setAppDocPlugin($arr[$keys[14]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[15], $arr)) {
|
||||
$this->setAppDocStatus($arr[$keys[15]]);
|
||||
$this->setAppDocTags($arr[$keys[15]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[16], $arr)) {
|
||||
$this->setAppDocStatusDate($arr[$keys[16]]);
|
||||
$this->setAppDocStatus($arr[$keys[16]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[17], $arr)) {
|
||||
$this->setAppDocFieldname($arr[$keys[17]]);
|
||||
$this->setAppDocStatusDate($arr[$keys[17]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[18], $arr)) {
|
||||
$this->setAppDocDriveDownload($arr[$keys[18]]);
|
||||
$this->setAppDocFieldname($arr[$keys[18]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[19], $arr)) {
|
||||
$this->setSyncWithDrive($arr[$keys[19]]);
|
||||
$this->setAppDocDriveDownload($arr[$keys[19]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[20], $arr)) {
|
||||
$this->setSyncPermissions($arr[$keys[20]]);
|
||||
$this->setSyncWithDrive($arr[$keys[20]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[21], $arr)) {
|
||||
$this->setSyncPermissions($arr[$keys[21]]);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1532,6 +1584,10 @@ abstract class BaseAppDocument extends BaseObject implements Persistent
|
||||
$criteria->add(AppDocumentPeer::DOC_UID, $this->doc_uid);
|
||||
}
|
||||
|
||||
if ($this->isColumnModified(AppDocumentPeer::DOC_ID)) {
|
||||
$criteria->add(AppDocumentPeer::DOC_ID, $this->doc_id);
|
||||
}
|
||||
|
||||
if ($this->isColumnModified(AppDocumentPeer::USR_UID)) {
|
||||
$criteria->add(AppDocumentPeer::USR_UID, $this->usr_uid);
|
||||
}
|
||||
@@ -1662,6 +1718,8 @@ abstract class BaseAppDocument extends BaseObject implements Persistent
|
||||
|
||||
$copyObj->setDocUid($this->doc_uid);
|
||||
|
||||
$copyObj->setDocId($this->doc_id);
|
||||
|
||||
$copyObj->setUsrUid($this->usr_uid);
|
||||
|
||||
$copyObj->setAppDocType($this->app_doc_type);
|
||||
|
||||
@@ -25,7 +25,7 @@ abstract class BaseAppDocumentPeer
|
||||
const CLASS_DEFAULT = 'classes.model.AppDocument';
|
||||
|
||||
/** The total number of columns. */
|
||||
const NUM_COLUMNS = 21;
|
||||
const NUM_COLUMNS = 22;
|
||||
|
||||
/** The number of lazy-loaded columns. */
|
||||
const NUM_LAZY_LOAD_COLUMNS = 0;
|
||||
@@ -55,6 +55,9 @@ abstract class BaseAppDocumentPeer
|
||||
/** the column name for the DOC_UID field */
|
||||
const DOC_UID = 'APP_DOCUMENT.DOC_UID';
|
||||
|
||||
/** the column name for the DOC_ID field */
|
||||
const DOC_ID = 'APP_DOCUMENT.DOC_ID';
|
||||
|
||||
/** the column name for the USR_UID field */
|
||||
const USR_UID = 'APP_DOCUMENT.USR_UID';
|
||||
|
||||
@@ -105,10 +108,10 @@ abstract class BaseAppDocumentPeer
|
||||
* e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
|
||||
*/
|
||||
private static $fieldNames = array (
|
||||
BasePeer::TYPE_PHPNAME => array ('AppDocUid', 'AppDocFilename', 'AppDocTitle', 'AppDocComment', 'DocVersion', 'AppUid', 'DelIndex', 'DocUid', 'UsrUid', 'AppDocType', 'AppDocCreateDate', 'AppDocIndex', 'FolderUid', 'AppDocPlugin', 'AppDocTags', 'AppDocStatus', 'AppDocStatusDate', 'AppDocFieldname', 'AppDocDriveDownload', 'SyncWithDrive', 'SyncPermissions', ),
|
||||
BasePeer::TYPE_COLNAME => array (AppDocumentPeer::APP_DOC_UID, AppDocumentPeer::APP_DOC_FILENAME, AppDocumentPeer::APP_DOC_TITLE, AppDocumentPeer::APP_DOC_COMMENT, AppDocumentPeer::DOC_VERSION, AppDocumentPeer::APP_UID, AppDocumentPeer::DEL_INDEX, AppDocumentPeer::DOC_UID, AppDocumentPeer::USR_UID, AppDocumentPeer::APP_DOC_TYPE, AppDocumentPeer::APP_DOC_CREATE_DATE, AppDocumentPeer::APP_DOC_INDEX, AppDocumentPeer::FOLDER_UID, AppDocumentPeer::APP_DOC_PLUGIN, AppDocumentPeer::APP_DOC_TAGS, AppDocumentPeer::APP_DOC_STATUS, AppDocumentPeer::APP_DOC_STATUS_DATE, AppDocumentPeer::APP_DOC_FIELDNAME, AppDocumentPeer::APP_DOC_DRIVE_DOWNLOAD, AppDocumentPeer::SYNC_WITH_DRIVE, AppDocumentPeer::SYNC_PERMISSIONS, ),
|
||||
BasePeer::TYPE_FIELDNAME => array ('APP_DOC_UID', 'APP_DOC_FILENAME', 'APP_DOC_TITLE', 'APP_DOC_COMMENT', 'DOC_VERSION', 'APP_UID', 'DEL_INDEX', 'DOC_UID', 'USR_UID', 'APP_DOC_TYPE', 'APP_DOC_CREATE_DATE', 'APP_DOC_INDEX', 'FOLDER_UID', 'APP_DOC_PLUGIN', 'APP_DOC_TAGS', 'APP_DOC_STATUS', 'APP_DOC_STATUS_DATE', 'APP_DOC_FIELDNAME', 'APP_DOC_DRIVE_DOWNLOAD', 'SYNC_WITH_DRIVE', 'SYNC_PERMISSIONS', ),
|
||||
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, )
|
||||
BasePeer::TYPE_PHPNAME => array ('AppDocUid', 'AppDocFilename', 'AppDocTitle', 'AppDocComment', 'DocVersion', 'AppUid', 'DelIndex', 'DocUid', 'DocId', 'UsrUid', 'AppDocType', 'AppDocCreateDate', 'AppDocIndex', 'FolderUid', 'AppDocPlugin', 'AppDocTags', 'AppDocStatus', 'AppDocStatusDate', 'AppDocFieldname', 'AppDocDriveDownload', 'SyncWithDrive', 'SyncPermissions', ),
|
||||
BasePeer::TYPE_COLNAME => array (AppDocumentPeer::APP_DOC_UID, AppDocumentPeer::APP_DOC_FILENAME, AppDocumentPeer::APP_DOC_TITLE, AppDocumentPeer::APP_DOC_COMMENT, AppDocumentPeer::DOC_VERSION, AppDocumentPeer::APP_UID, AppDocumentPeer::DEL_INDEX, AppDocumentPeer::DOC_UID, AppDocumentPeer::DOC_ID, AppDocumentPeer::USR_UID, AppDocumentPeer::APP_DOC_TYPE, AppDocumentPeer::APP_DOC_CREATE_DATE, AppDocumentPeer::APP_DOC_INDEX, AppDocumentPeer::FOLDER_UID, AppDocumentPeer::APP_DOC_PLUGIN, AppDocumentPeer::APP_DOC_TAGS, AppDocumentPeer::APP_DOC_STATUS, AppDocumentPeer::APP_DOC_STATUS_DATE, AppDocumentPeer::APP_DOC_FIELDNAME, AppDocumentPeer::APP_DOC_DRIVE_DOWNLOAD, AppDocumentPeer::SYNC_WITH_DRIVE, AppDocumentPeer::SYNC_PERMISSIONS, ),
|
||||
BasePeer::TYPE_FIELDNAME => array ('APP_DOC_UID', 'APP_DOC_FILENAME', 'APP_DOC_TITLE', 'APP_DOC_COMMENT', 'DOC_VERSION', 'APP_UID', 'DEL_INDEX', 'DOC_UID', 'DOC_ID', 'USR_UID', 'APP_DOC_TYPE', 'APP_DOC_CREATE_DATE', 'APP_DOC_INDEX', 'FOLDER_UID', 'APP_DOC_PLUGIN', 'APP_DOC_TAGS', 'APP_DOC_STATUS', 'APP_DOC_STATUS_DATE', 'APP_DOC_FIELDNAME', 'APP_DOC_DRIVE_DOWNLOAD', 'SYNC_WITH_DRIVE', 'SYNC_PERMISSIONS', ),
|
||||
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, )
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -118,10 +121,10 @@ abstract class BaseAppDocumentPeer
|
||||
* e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0
|
||||
*/
|
||||
private static $fieldKeys = array (
|
||||
BasePeer::TYPE_PHPNAME => array ('AppDocUid' => 0, 'AppDocFilename' => 1, 'AppDocTitle' => 2, 'AppDocComment' => 3, 'DocVersion' => 4, 'AppUid' => 5, 'DelIndex' => 6, 'DocUid' => 7, 'UsrUid' => 8, 'AppDocType' => 9, 'AppDocCreateDate' => 10, 'AppDocIndex' => 11, 'FolderUid' => 12, 'AppDocPlugin' => 13, 'AppDocTags' => 14, 'AppDocStatus' => 15, 'AppDocStatusDate' => 16, 'AppDocFieldname' => 17, 'AppDocDriveDownload' => 18, 'SyncWithDrive' => 19, 'SyncPermissions' => 20, ),
|
||||
BasePeer::TYPE_COLNAME => array (AppDocumentPeer::APP_DOC_UID => 0, AppDocumentPeer::APP_DOC_FILENAME => 1, AppDocumentPeer::APP_DOC_TITLE => 2, AppDocumentPeer::APP_DOC_COMMENT => 3, AppDocumentPeer::DOC_VERSION => 4, AppDocumentPeer::APP_UID => 5, AppDocumentPeer::DEL_INDEX => 6, AppDocumentPeer::DOC_UID => 7, AppDocumentPeer::USR_UID => 8, AppDocumentPeer::APP_DOC_TYPE => 9, AppDocumentPeer::APP_DOC_CREATE_DATE => 10, AppDocumentPeer::APP_DOC_INDEX => 11, AppDocumentPeer::FOLDER_UID => 12, AppDocumentPeer::APP_DOC_PLUGIN => 13, AppDocumentPeer::APP_DOC_TAGS => 14, AppDocumentPeer::APP_DOC_STATUS => 15, AppDocumentPeer::APP_DOC_STATUS_DATE => 16, AppDocumentPeer::APP_DOC_FIELDNAME => 17, AppDocumentPeer::APP_DOC_DRIVE_DOWNLOAD => 18, AppDocumentPeer::SYNC_WITH_DRIVE => 19, AppDocumentPeer::SYNC_PERMISSIONS => 20, ),
|
||||
BasePeer::TYPE_FIELDNAME => array ('APP_DOC_UID' => 0, 'APP_DOC_FILENAME' => 1, 'APP_DOC_TITLE' => 2, 'APP_DOC_COMMENT' => 3, 'DOC_VERSION' => 4, 'APP_UID' => 5, 'DEL_INDEX' => 6, 'DOC_UID' => 7, 'USR_UID' => 8, 'APP_DOC_TYPE' => 9, 'APP_DOC_CREATE_DATE' => 10, 'APP_DOC_INDEX' => 11, 'FOLDER_UID' => 12, 'APP_DOC_PLUGIN' => 13, 'APP_DOC_TAGS' => 14, 'APP_DOC_STATUS' => 15, 'APP_DOC_STATUS_DATE' => 16, 'APP_DOC_FIELDNAME' => 17, 'APP_DOC_DRIVE_DOWNLOAD' => 18, 'SYNC_WITH_DRIVE' => 19, 'SYNC_PERMISSIONS' => 20, ),
|
||||
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, )
|
||||
BasePeer::TYPE_PHPNAME => array ('AppDocUid' => 0, 'AppDocFilename' => 1, 'AppDocTitle' => 2, 'AppDocComment' => 3, 'DocVersion' => 4, 'AppUid' => 5, 'DelIndex' => 6, 'DocUid' => 7, 'DocId' => 8, 'UsrUid' => 9, 'AppDocType' => 10, 'AppDocCreateDate' => 11, 'AppDocIndex' => 12, 'FolderUid' => 13, 'AppDocPlugin' => 14, 'AppDocTags' => 15, 'AppDocStatus' => 16, 'AppDocStatusDate' => 17, 'AppDocFieldname' => 18, 'AppDocDriveDownload' => 19, 'SyncWithDrive' => 20, 'SyncPermissions' => 21, ),
|
||||
BasePeer::TYPE_COLNAME => array (AppDocumentPeer::APP_DOC_UID => 0, AppDocumentPeer::APP_DOC_FILENAME => 1, AppDocumentPeer::APP_DOC_TITLE => 2, AppDocumentPeer::APP_DOC_COMMENT => 3, AppDocumentPeer::DOC_VERSION => 4, AppDocumentPeer::APP_UID => 5, AppDocumentPeer::DEL_INDEX => 6, AppDocumentPeer::DOC_UID => 7, AppDocumentPeer::DOC_ID => 8, AppDocumentPeer::USR_UID => 9, AppDocumentPeer::APP_DOC_TYPE => 10, AppDocumentPeer::APP_DOC_CREATE_DATE => 11, AppDocumentPeer::APP_DOC_INDEX => 12, AppDocumentPeer::FOLDER_UID => 13, AppDocumentPeer::APP_DOC_PLUGIN => 14, AppDocumentPeer::APP_DOC_TAGS => 15, AppDocumentPeer::APP_DOC_STATUS => 16, AppDocumentPeer::APP_DOC_STATUS_DATE => 17, AppDocumentPeer::APP_DOC_FIELDNAME => 18, AppDocumentPeer::APP_DOC_DRIVE_DOWNLOAD => 19, AppDocumentPeer::SYNC_WITH_DRIVE => 20, AppDocumentPeer::SYNC_PERMISSIONS => 21, ),
|
||||
BasePeer::TYPE_FIELDNAME => array ('APP_DOC_UID' => 0, 'APP_DOC_FILENAME' => 1, 'APP_DOC_TITLE' => 2, 'APP_DOC_COMMENT' => 3, 'DOC_VERSION' => 4, 'APP_UID' => 5, 'DEL_INDEX' => 6, 'DOC_UID' => 7, 'DOC_ID' => 8, 'USR_UID' => 9, 'APP_DOC_TYPE' => 10, 'APP_DOC_CREATE_DATE' => 11, 'APP_DOC_INDEX' => 12, 'FOLDER_UID' => 13, 'APP_DOC_PLUGIN' => 14, 'APP_DOC_TAGS' => 15, 'APP_DOC_STATUS' => 16, 'APP_DOC_STATUS_DATE' => 17, 'APP_DOC_FIELDNAME' => 18, 'APP_DOC_DRIVE_DOWNLOAD' => 19, 'SYNC_WITH_DRIVE' => 20, 'SYNC_PERMISSIONS' => 21, ),
|
||||
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, )
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -238,6 +241,8 @@ abstract class BaseAppDocumentPeer
|
||||
|
||||
$criteria->addSelectColumn(AppDocumentPeer::DOC_UID);
|
||||
|
||||
$criteria->addSelectColumn(AppDocumentPeer::DOC_ID);
|
||||
|
||||
$criteria->addSelectColumn(AppDocumentPeer::USR_UID);
|
||||
|
||||
$criteria->addSelectColumn(AppDocumentPeer::APP_DOC_TYPE);
|
||||
|
||||
@@ -27,6 +27,12 @@ abstract class BaseAppNotes extends BaseObject implements Persistent
|
||||
*/
|
||||
protected static $peer;
|
||||
|
||||
/**
|
||||
* The value for the note_id field.
|
||||
* @var int
|
||||
*/
|
||||
protected $note_id;
|
||||
|
||||
/**
|
||||
* The value for the app_uid field.
|
||||
* @var string
|
||||
@@ -101,6 +107,17 @@ abstract class BaseAppNotes extends BaseObject implements Persistent
|
||||
*/
|
||||
protected $alreadyInValidation = false;
|
||||
|
||||
/**
|
||||
* Get the [note_id] column value.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getNoteId()
|
||||
{
|
||||
|
||||
return $this->note_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the [app_uid] column value.
|
||||
*
|
||||
@@ -232,6 +249,28 @@ abstract class BaseAppNotes extends BaseObject implements Persistent
|
||||
return $this->note_recipients;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of [note_id] column.
|
||||
*
|
||||
* @param int $v new value
|
||||
* @return void
|
||||
*/
|
||||
public function setNoteId($v)
|
||||
{
|
||||
|
||||
// Since the native PHP type for this column is integer,
|
||||
// we will cast the input value to an int (if it is not).
|
||||
if ($v !== null && !is_int($v) && is_numeric($v)) {
|
||||
$v = (int) $v;
|
||||
}
|
||||
|
||||
if ($this->note_id !== $v) {
|
||||
$this->note_id = $v;
|
||||
$this->modifiedColumns[] = AppNotesPeer::NOTE_ID;
|
||||
}
|
||||
|
||||
} // setNoteId()
|
||||
|
||||
/**
|
||||
* Set the value of [app_uid] column.
|
||||
*
|
||||
@@ -476,32 +515,34 @@ abstract class BaseAppNotes extends BaseObject implements Persistent
|
||||
{
|
||||
try {
|
||||
|
||||
$this->app_uid = $rs->getString($startcol + 0);
|
||||
$this->note_id = $rs->getInt($startcol + 0);
|
||||
|
||||
$this->usr_uid = $rs->getString($startcol + 1);
|
||||
$this->app_uid = $rs->getString($startcol + 1);
|
||||
|
||||
$this->note_date = $rs->getTimestamp($startcol + 2, null);
|
||||
$this->usr_uid = $rs->getString($startcol + 2);
|
||||
|
||||
$this->note_content = $rs->getString($startcol + 3);
|
||||
$this->note_date = $rs->getTimestamp($startcol + 3, null);
|
||||
|
||||
$this->note_type = $rs->getString($startcol + 4);
|
||||
$this->note_content = $rs->getString($startcol + 4);
|
||||
|
||||
$this->note_availability = $rs->getString($startcol + 5);
|
||||
$this->note_type = $rs->getString($startcol + 5);
|
||||
|
||||
$this->note_origin_obj = $rs->getString($startcol + 6);
|
||||
$this->note_availability = $rs->getString($startcol + 6);
|
||||
|
||||
$this->note_affected_obj1 = $rs->getString($startcol + 7);
|
||||
$this->note_origin_obj = $rs->getString($startcol + 7);
|
||||
|
||||
$this->note_affected_obj2 = $rs->getString($startcol + 8);
|
||||
$this->note_affected_obj1 = $rs->getString($startcol + 8);
|
||||
|
||||
$this->note_recipients = $rs->getString($startcol + 9);
|
||||
$this->note_affected_obj2 = $rs->getString($startcol + 9);
|
||||
|
||||
$this->note_recipients = $rs->getString($startcol + 10);
|
||||
|
||||
$this->resetModified();
|
||||
|
||||
$this->setNew(false);
|
||||
|
||||
// FIXME - using NUM_COLUMNS may be clearer.
|
||||
return $startcol + 10; // 10 = AppNotesPeer::NUM_COLUMNS - AppNotesPeer::NUM_LAZY_LOAD_COLUMNS).
|
||||
return $startcol + 11; // 11 = AppNotesPeer::NUM_COLUMNS - AppNotesPeer::NUM_LAZY_LOAD_COLUMNS).
|
||||
|
||||
} catch (Exception $e) {
|
||||
throw new PropelException("Error populating AppNotes object", $e);
|
||||
@@ -706,33 +747,36 @@ abstract class BaseAppNotes extends BaseObject implements Persistent
|
||||
{
|
||||
switch($pos) {
|
||||
case 0:
|
||||
return $this->getAppUid();
|
||||
return $this->getNoteId();
|
||||
break;
|
||||
case 1:
|
||||
return $this->getUsrUid();
|
||||
return $this->getAppUid();
|
||||
break;
|
||||
case 2:
|
||||
return $this->getNoteDate();
|
||||
return $this->getUsrUid();
|
||||
break;
|
||||
case 3:
|
||||
return $this->getNoteContent();
|
||||
return $this->getNoteDate();
|
||||
break;
|
||||
case 4:
|
||||
return $this->getNoteType();
|
||||
return $this->getNoteContent();
|
||||
break;
|
||||
case 5:
|
||||
return $this->getNoteAvailability();
|
||||
return $this->getNoteType();
|
||||
break;
|
||||
case 6:
|
||||
return $this->getNoteOriginObj();
|
||||
return $this->getNoteAvailability();
|
||||
break;
|
||||
case 7:
|
||||
return $this->getNoteAffectedObj1();
|
||||
return $this->getNoteOriginObj();
|
||||
break;
|
||||
case 8:
|
||||
return $this->getNoteAffectedObj2();
|
||||
return $this->getNoteAffectedObj1();
|
||||
break;
|
||||
case 9:
|
||||
return $this->getNoteAffectedObj2();
|
||||
break;
|
||||
case 10:
|
||||
return $this->getNoteRecipients();
|
||||
break;
|
||||
default:
|
||||
@@ -755,16 +799,17 @@ abstract class BaseAppNotes extends BaseObject implements Persistent
|
||||
{
|
||||
$keys = AppNotesPeer::getFieldNames($keyType);
|
||||
$result = array(
|
||||
$keys[0] => $this->getAppUid(),
|
||||
$keys[1] => $this->getUsrUid(),
|
||||
$keys[2] => $this->getNoteDate(),
|
||||
$keys[3] => $this->getNoteContent(),
|
||||
$keys[4] => $this->getNoteType(),
|
||||
$keys[5] => $this->getNoteAvailability(),
|
||||
$keys[6] => $this->getNoteOriginObj(),
|
||||
$keys[7] => $this->getNoteAffectedObj1(),
|
||||
$keys[8] => $this->getNoteAffectedObj2(),
|
||||
$keys[9] => $this->getNoteRecipients(),
|
||||
$keys[0] => $this->getNoteId(),
|
||||
$keys[1] => $this->getAppUid(),
|
||||
$keys[2] => $this->getUsrUid(),
|
||||
$keys[3] => $this->getNoteDate(),
|
||||
$keys[4] => $this->getNoteContent(),
|
||||
$keys[5] => $this->getNoteType(),
|
||||
$keys[6] => $this->getNoteAvailability(),
|
||||
$keys[7] => $this->getNoteOriginObj(),
|
||||
$keys[8] => $this->getNoteAffectedObj1(),
|
||||
$keys[9] => $this->getNoteAffectedObj2(),
|
||||
$keys[10] => $this->getNoteRecipients(),
|
||||
);
|
||||
return $result;
|
||||
}
|
||||
@@ -797,33 +842,36 @@ abstract class BaseAppNotes extends BaseObject implements Persistent
|
||||
{
|
||||
switch($pos) {
|
||||
case 0:
|
||||
$this->setAppUid($value);
|
||||
$this->setNoteId($value);
|
||||
break;
|
||||
case 1:
|
||||
$this->setUsrUid($value);
|
||||
$this->setAppUid($value);
|
||||
break;
|
||||
case 2:
|
||||
$this->setNoteDate($value);
|
||||
$this->setUsrUid($value);
|
||||
break;
|
||||
case 3:
|
||||
$this->setNoteContent($value);
|
||||
$this->setNoteDate($value);
|
||||
break;
|
||||
case 4:
|
||||
$this->setNoteType($value);
|
||||
$this->setNoteContent($value);
|
||||
break;
|
||||
case 5:
|
||||
$this->setNoteAvailability($value);
|
||||
$this->setNoteType($value);
|
||||
break;
|
||||
case 6:
|
||||
$this->setNoteOriginObj($value);
|
||||
$this->setNoteAvailability($value);
|
||||
break;
|
||||
case 7:
|
||||
$this->setNoteAffectedObj1($value);
|
||||
$this->setNoteOriginObj($value);
|
||||
break;
|
||||
case 8:
|
||||
$this->setNoteAffectedObj2($value);
|
||||
$this->setNoteAffectedObj1($value);
|
||||
break;
|
||||
case 9:
|
||||
$this->setNoteAffectedObj2($value);
|
||||
break;
|
||||
case 10:
|
||||
$this->setNoteRecipients($value);
|
||||
break;
|
||||
} // switch()
|
||||
@@ -850,43 +898,47 @@ abstract class BaseAppNotes extends BaseObject implements Persistent
|
||||
$keys = AppNotesPeer::getFieldNames($keyType);
|
||||
|
||||
if (array_key_exists($keys[0], $arr)) {
|
||||
$this->setAppUid($arr[$keys[0]]);
|
||||
$this->setNoteId($arr[$keys[0]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[1], $arr)) {
|
||||
$this->setUsrUid($arr[$keys[1]]);
|
||||
$this->setAppUid($arr[$keys[1]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[2], $arr)) {
|
||||
$this->setNoteDate($arr[$keys[2]]);
|
||||
$this->setUsrUid($arr[$keys[2]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[3], $arr)) {
|
||||
$this->setNoteContent($arr[$keys[3]]);
|
||||
$this->setNoteDate($arr[$keys[3]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[4], $arr)) {
|
||||
$this->setNoteType($arr[$keys[4]]);
|
||||
$this->setNoteContent($arr[$keys[4]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[5], $arr)) {
|
||||
$this->setNoteAvailability($arr[$keys[5]]);
|
||||
$this->setNoteType($arr[$keys[5]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[6], $arr)) {
|
||||
$this->setNoteOriginObj($arr[$keys[6]]);
|
||||
$this->setNoteAvailability($arr[$keys[6]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[7], $arr)) {
|
||||
$this->setNoteAffectedObj1($arr[$keys[7]]);
|
||||
$this->setNoteOriginObj($arr[$keys[7]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[8], $arr)) {
|
||||
$this->setNoteAffectedObj2($arr[$keys[8]]);
|
||||
$this->setNoteAffectedObj1($arr[$keys[8]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[9], $arr)) {
|
||||
$this->setNoteRecipients($arr[$keys[9]]);
|
||||
$this->setNoteAffectedObj2($arr[$keys[9]]);
|
||||
}
|
||||
|
||||
if (array_key_exists($keys[10], $arr)) {
|
||||
$this->setNoteRecipients($arr[$keys[10]]);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -900,6 +952,10 @@ abstract class BaseAppNotes extends BaseObject implements Persistent
|
||||
{
|
||||
$criteria = new Criteria(AppNotesPeer::DATABASE_NAME);
|
||||
|
||||
if ($this->isColumnModified(AppNotesPeer::NOTE_ID)) {
|
||||
$criteria->add(AppNotesPeer::NOTE_ID, $this->note_id);
|
||||
}
|
||||
|
||||
if ($this->isColumnModified(AppNotesPeer::APP_UID)) {
|
||||
$criteria->add(AppNotesPeer::APP_UID, $this->app_uid);
|
||||
}
|
||||
@@ -997,6 +1053,8 @@ abstract class BaseAppNotes extends BaseObject implements Persistent
|
||||
public function copyInto($copyObj, $deepCopy = false)
|
||||
{
|
||||
|
||||
$copyObj->setNoteId($this->note_id);
|
||||
|
||||
$copyObj->setAppUid($this->app_uid);
|
||||
|
||||
$copyObj->setUsrUid($this->usr_uid);
|
||||
|
||||
@@ -25,12 +25,15 @@ abstract class BaseAppNotesPeer
|
||||
const CLASS_DEFAULT = 'classes.model.AppNotes';
|
||||
|
||||
/** The total number of columns. */
|
||||
const NUM_COLUMNS = 10;
|
||||
const NUM_COLUMNS = 11;
|
||||
|
||||
/** The number of lazy-loaded columns. */
|
||||
const NUM_LAZY_LOAD_COLUMNS = 0;
|
||||
|
||||
|
||||
/** the column name for the NOTE_ID field */
|
||||
const NOTE_ID = 'APP_NOTES.NOTE_ID';
|
||||
|
||||
/** the column name for the APP_UID field */
|
||||
const APP_UID = 'APP_NOTES.APP_UID';
|
||||
|
||||
@@ -72,10 +75,10 @@ abstract class BaseAppNotesPeer
|
||||
* e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
|
||||
*/
|
||||
private static $fieldNames = array (
|
||||
BasePeer::TYPE_PHPNAME => array ('AppUid', 'UsrUid', 'NoteDate', 'NoteContent', 'NoteType', 'NoteAvailability', 'NoteOriginObj', 'NoteAffectedObj1', 'NoteAffectedObj2', 'NoteRecipients', ),
|
||||
BasePeer::TYPE_COLNAME => array (AppNotesPeer::APP_UID, AppNotesPeer::USR_UID, AppNotesPeer::NOTE_DATE, AppNotesPeer::NOTE_CONTENT, AppNotesPeer::NOTE_TYPE, AppNotesPeer::NOTE_AVAILABILITY, AppNotesPeer::NOTE_ORIGIN_OBJ, AppNotesPeer::NOTE_AFFECTED_OBJ1, AppNotesPeer::NOTE_AFFECTED_OBJ2, AppNotesPeer::NOTE_RECIPIENTS, ),
|
||||
BasePeer::TYPE_FIELDNAME => array ('APP_UID', 'USR_UID', 'NOTE_DATE', 'NOTE_CONTENT', 'NOTE_TYPE', 'NOTE_AVAILABILITY', 'NOTE_ORIGIN_OBJ', 'NOTE_AFFECTED_OBJ1', 'NOTE_AFFECTED_OBJ2', 'NOTE_RECIPIENTS', ),
|
||||
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, )
|
||||
BasePeer::TYPE_PHPNAME => array ('NoteId', 'AppUid', 'UsrUid', 'NoteDate', 'NoteContent', 'NoteType', 'NoteAvailability', 'NoteOriginObj', 'NoteAffectedObj1', 'NoteAffectedObj2', 'NoteRecipients', ),
|
||||
BasePeer::TYPE_COLNAME => array (AppNotesPeer::NOTE_ID, AppNotesPeer::APP_UID, AppNotesPeer::USR_UID, AppNotesPeer::NOTE_DATE, AppNotesPeer::NOTE_CONTENT, AppNotesPeer::NOTE_TYPE, AppNotesPeer::NOTE_AVAILABILITY, AppNotesPeer::NOTE_ORIGIN_OBJ, AppNotesPeer::NOTE_AFFECTED_OBJ1, AppNotesPeer::NOTE_AFFECTED_OBJ2, AppNotesPeer::NOTE_RECIPIENTS, ),
|
||||
BasePeer::TYPE_FIELDNAME => array ('NOTE_ID', 'APP_UID', 'USR_UID', 'NOTE_DATE', 'NOTE_CONTENT', 'NOTE_TYPE', 'NOTE_AVAILABILITY', 'NOTE_ORIGIN_OBJ', 'NOTE_AFFECTED_OBJ1', 'NOTE_AFFECTED_OBJ2', 'NOTE_RECIPIENTS', ),
|
||||
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, )
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -85,10 +88,10 @@ abstract class BaseAppNotesPeer
|
||||
* e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0
|
||||
*/
|
||||
private static $fieldKeys = array (
|
||||
BasePeer::TYPE_PHPNAME => array ('AppUid' => 0, 'UsrUid' => 1, 'NoteDate' => 2, 'NoteContent' => 3, 'NoteType' => 4, 'NoteAvailability' => 5, 'NoteOriginObj' => 6, 'NoteAffectedObj1' => 7, 'NoteAffectedObj2' => 8, 'NoteRecipients' => 9, ),
|
||||
BasePeer::TYPE_COLNAME => array (AppNotesPeer::APP_UID => 0, AppNotesPeer::USR_UID => 1, AppNotesPeer::NOTE_DATE => 2, AppNotesPeer::NOTE_CONTENT => 3, AppNotesPeer::NOTE_TYPE => 4, AppNotesPeer::NOTE_AVAILABILITY => 5, AppNotesPeer::NOTE_ORIGIN_OBJ => 6, AppNotesPeer::NOTE_AFFECTED_OBJ1 => 7, AppNotesPeer::NOTE_AFFECTED_OBJ2 => 8, AppNotesPeer::NOTE_RECIPIENTS => 9, ),
|
||||
BasePeer::TYPE_FIELDNAME => array ('APP_UID' => 0, 'USR_UID' => 1, 'NOTE_DATE' => 2, 'NOTE_CONTENT' => 3, 'NOTE_TYPE' => 4, 'NOTE_AVAILABILITY' => 5, 'NOTE_ORIGIN_OBJ' => 6, 'NOTE_AFFECTED_OBJ1' => 7, 'NOTE_AFFECTED_OBJ2' => 8, 'NOTE_RECIPIENTS' => 9, ),
|
||||
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, )
|
||||
BasePeer::TYPE_PHPNAME => array ('NoteId' => 0, 'AppUid' => 1, 'UsrUid' => 2, 'NoteDate' => 3, 'NoteContent' => 4, 'NoteType' => 5, 'NoteAvailability' => 6, 'NoteOriginObj' => 7, 'NoteAffectedObj1' => 8, 'NoteAffectedObj2' => 9, 'NoteRecipients' => 10, ),
|
||||
BasePeer::TYPE_COLNAME => array (AppNotesPeer::NOTE_ID => 0, AppNotesPeer::APP_UID => 1, AppNotesPeer::USR_UID => 2, AppNotesPeer::NOTE_DATE => 3, AppNotesPeer::NOTE_CONTENT => 4, AppNotesPeer::NOTE_TYPE => 5, AppNotesPeer::NOTE_AVAILABILITY => 6, AppNotesPeer::NOTE_ORIGIN_OBJ => 7, AppNotesPeer::NOTE_AFFECTED_OBJ1 => 8, AppNotesPeer::NOTE_AFFECTED_OBJ2 => 9, AppNotesPeer::NOTE_RECIPIENTS => 10, ),
|
||||
BasePeer::TYPE_FIELDNAME => array ('NOTE_ID' => 0, 'APP_UID' => 1, 'USR_UID' => 2, 'NOTE_DATE' => 3, 'NOTE_CONTENT' => 4, 'NOTE_TYPE' => 5, 'NOTE_AVAILABILITY' => 6, 'NOTE_ORIGIN_OBJ' => 7, 'NOTE_AFFECTED_OBJ1' => 8, 'NOTE_AFFECTED_OBJ2' => 9, 'NOTE_RECIPIENTS' => 10, ),
|
||||
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, )
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -189,6 +192,8 @@ abstract class BaseAppNotesPeer
|
||||
public static function addSelectColumns(Criteria $criteria)
|
||||
{
|
||||
|
||||
$criteria->addSelectColumn(AppNotesPeer::NOTE_ID);
|
||||
|
||||
$criteria->addSelectColumn(AppNotesPeer::APP_UID);
|
||||
|
||||
$criteria->addSelectColumn(AppNotesPeer::USR_UID);
|
||||
|
||||
@@ -579,9 +579,6 @@ abstract class BaseEmailServerPeer
|
||||
}
|
||||
} else {
|
||||
|
||||
if ($obj->isNew() || $obj->isColumnModified(EmailServerPeer::MESS_ENGINE))
|
||||
$columns[EmailServerPeer::MESS_ENGINE] = $obj->getMessEngine();
|
||||
|
||||
}
|
||||
|
||||
return BasePeer::doValidate(EmailServerPeer::DATABASE_NAME, EmailServerPeer::TABLE_NAME, $columns);
|
||||
|
||||
@@ -1,27 +1,4 @@
|
||||
<?php
|
||||
/**
|
||||
* databases.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 (defined('PATH_DB') && !empty(config("system.workspace"))) {
|
||||
|
||||
@@ -29,7 +6,32 @@ if (defined('PATH_DB') && !empty(config("system.workspace"))) {
|
||||
throw new Exception("Could not find db.php in current workspace " . config("system.workspace"));
|
||||
}
|
||||
|
||||
require_once(PATH_DB . config("system.workspace") . '/db.php');
|
||||
//These constants must not exist, they will be created by "db.php".
|
||||
$constants = [
|
||||
'DB_ADAPTER',
|
||||
'DB_HOST',
|
||||
'DB_NAME',
|
||||
'DB_USER',
|
||||
'DB_PASS',
|
||||
'DB_RBAC_HOST',
|
||||
'DB_RBAC_NAME',
|
||||
'DB_RBAC_USER',
|
||||
'DB_RBAC_PASS' ,
|
||||
'DB_REPORT_HOST',
|
||||
'DB_REPORT_NAME',
|
||||
'DB_REPORT_USER',
|
||||
'DB_REPORT_PASS',
|
||||
];
|
||||
$load = true;
|
||||
foreach ($constants as $value) {
|
||||
if (defined($value)) {
|
||||
$load = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($load === true) {
|
||||
require_once(PATH_DB . config("system.workspace") . '/db.php');
|
||||
}
|
||||
//to do: enable for other databases
|
||||
$dbType = DB_ADAPTER;
|
||||
$dsn = DB_ADAPTER . '://' . DB_USER . ':' . urlencode(DB_PASS) . '@' . DB_HOST . '/' . DB_NAME;
|
||||
@@ -42,15 +44,12 @@ if (defined('PATH_DB') && !empty(config("system.workspace"))) {
|
||||
|
||||
switch (DB_ADAPTER) {
|
||||
case 'mysql':
|
||||
$dsn .= '?encoding=utf8';
|
||||
$dsnRbac .= '?encoding=utf8';
|
||||
$dsn .= '?encoding=utf8';
|
||||
$dsnRbac .= '?encoding=utf8';
|
||||
$dsnReport .= '?encoding=utf8';
|
||||
break;
|
||||
case 'mssql':
|
||||
case 'sqlsrv':
|
||||
//$dsn .= '?sendStringAsUnicode=false';
|
||||
//$dsnRbac .= '?sendStringAsUnicode=false';
|
||||
//$dsnReport .= '?sendStringAsUnicode=false';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -64,7 +63,7 @@ if (defined('PATH_DB') && !empty(config("system.workspace"))) {
|
||||
|
||||
$pro ['datasources']['rp']['connection'] = $dsnReport;
|
||||
$pro ['datasources']['rp']['adapter'] = DB_ADAPTER;
|
||||
|
||||
|
||||
$dbHost = explode(':', DB_HOST);
|
||||
config(['database.connections.workflow.host' => $dbHost[0]]);
|
||||
config(['database.connections.workflow.database' => DB_NAME]);
|
||||
@@ -76,6 +75,6 @@ if (defined('PATH_DB') && !empty(config("system.workspace"))) {
|
||||
}
|
||||
|
||||
$pro ['datasources']['dbarray']['connection'] = 'dbarray://user:pass@localhost/pm_os';
|
||||
$pro ['datasources']['dbarray']['adapter'] = 'dbarray';
|
||||
$pro ['datasources']['dbarray']['adapter'] = 'dbarray';
|
||||
|
||||
return $pro;
|
||||
|
||||
@@ -230,6 +230,7 @@
|
||||
<column name="APP_UID" type="VARCHAR" size="32" required="true" default=""/>
|
||||
<column name="DEL_INDEX" type="INTEGER" required="true" default="0"/>
|
||||
<column name="DOC_UID" type="VARCHAR" size="32" required="true" default=""/>
|
||||
<column name="DOC_ID" type="INTEGER" required="false" default="0"/>
|
||||
<column name="USR_UID" type="VARCHAR" size="32" required="true" default=""/>
|
||||
<column name="APP_DOC_TYPE" type="VARCHAR" size="32" required="true" default=""/>
|
||||
<column name="APP_DOC_CREATE_DATE" type="TIMESTAMP" required="true"/>
|
||||
@@ -284,7 +285,7 @@
|
||||
<rule name="required" message="User UID is required."/>
|
||||
</validator>
|
||||
<validator column="APP_DOC_TYPE">
|
||||
<rule name="validValues" value="INPUT|OUTPUT|ATTACHED" message="Please select a valid document type."/>
|
||||
<rule name="validValues" value="INPUT|OUTPUT|ATTACHED|CASE_NOTE" message="Please select a valid document type."/>
|
||||
<rule name="required" message="Application Document Type is required."/>
|
||||
</validator>
|
||||
<validator column="APP_DOC_CREATE_DATE">
|
||||
@@ -3287,7 +3288,7 @@
|
||||
<unique-column name="CATEGORY_ID"/>
|
||||
</unique>
|
||||
</table>
|
||||
<table name="APP_NOTES">
|
||||
<table name="APP_NOTES" idMethod="native">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Name" value="APP_NOTES"/>
|
||||
<parameter name="Engine" value="InnoDB"/>
|
||||
@@ -3308,6 +3309,7 @@
|
||||
<parameter name="Create_options" value=""/>
|
||||
<parameter name="Comment" value="Application Notes"/>
|
||||
</vendor>
|
||||
<column name="NOTE_ID" type="INTEGER" required="true" autoIncrement="true" unique="true"/>
|
||||
<column name="APP_UID" type="VARCHAR" size="32" required="true" default=""/>
|
||||
<column name="USR_UID" type="VARCHAR" size="32" required="true" default=""/>
|
||||
<column name="NOTE_DATE" type="TIMESTAMP" required="true"/>
|
||||
@@ -3318,6 +3320,9 @@
|
||||
<column name="NOTE_AFFECTED_OBJ1" type="VARCHAR" size="32" default=""/>
|
||||
<column name="NOTE_AFFECTED_OBJ2" type="VARCHAR" size="32" required="true" default=""/>
|
||||
<column name="NOTE_RECIPIENTS" type="LONGVARCHAR"/>
|
||||
<unique name="NOTE_ID">
|
||||
<unique-column name="NOTE_ID"/>
|
||||
</unique>
|
||||
<index name="indexAppNotesDate">
|
||||
<index-column name="APP_UID"/>
|
||||
<index-column name="NOTE_DATE"/>
|
||||
|
||||
@@ -1993,6 +1993,12 @@ msgstr "Add Data to PM table"
|
||||
msgid "Add field"
|
||||
msgstr "Add field"
|
||||
|
||||
# TRANSLATION
|
||||
# LABEL/ID_ADD_FILE
|
||||
#: LABEL/ID_ADD_FILE
|
||||
msgid "Add file"
|
||||
msgstr "Add file"
|
||||
|
||||
# TRANSLATION
|
||||
# LABEL/ID_ADD_HORIZONTAL_LINE
|
||||
#: LABEL/ID_ADD_HORIZONTAL_LINE
|
||||
@@ -2575,6 +2581,18 @@ msgstr "Attach"
|
||||
msgid "Attached"
|
||||
msgstr "Attached"
|
||||
|
||||
# TRANSLATION
|
||||
# LABEL/ID_ATTACH_FILE
|
||||
#: LABEL/ID_ATTACH_FILE
|
||||
msgid "Attach file"
|
||||
msgstr "Attach file"
|
||||
|
||||
# TRANSLATION
|
||||
# LABEL/ID_ATTACHED_FILES
|
||||
#: LABEL/ID_ATTACHED_FILES
|
||||
msgid "Attached files"
|
||||
msgstr "Attached files"
|
||||
|
||||
# TRANSLATION
|
||||
# LABEL/ID_ATTRIBUTES
|
||||
#: LABEL/ID_ATTRIBUTES
|
||||
@@ -25289,6 +25307,12 @@ msgstr "Error: The application {0} is not canceled."
|
||||
msgid "The default configuration was not defined"
|
||||
msgstr "The default configuration was not defined"
|
||||
|
||||
# TRANSLATION
|
||||
# LABEL/ID_THE_FILE_COULDNT_BE_UPLOADED
|
||||
#: LABEL/ID_THE_FILE_COULDNT_BE_UPLOADED
|
||||
msgid "The file couldn’t be uploaded please review the allowed files or contact your System Administrator."
|
||||
msgstr "The file couldn’t be uploaded please review the allowed files or contact your System Administrator."
|
||||
|
||||
# TRANSLATION
|
||||
# LABEL/ID_THE_FILE_SIZE_IS_BIGGER_THAN_THE_MAXIMUM_ALLOWED
|
||||
#: LABEL/ID_THE_FILE_SIZE_IS_BIGGER_THAN_THE_MAXIMUM_ALLOWED
|
||||
@@ -25325,6 +25349,12 @@ msgstr "The PHP files execution was disabled please contact the system administr
|
||||
msgid "Please complete the reassign reason."
|
||||
msgstr "Please complete the reassign reason."
|
||||
|
||||
# TRANSLATION
|
||||
# LABEL/ID_THE_REPORT_TABLE_IS_REGENERATING_PLEASE_COME_BACK_IN_A_FEW_MINUTES
|
||||
#: LABEL/ID_THE_REPORT_TABLE_IS_REGENERATING_PLEASE_COME_BACK_IN_A_FEW_MINUTES
|
||||
msgid "The report table is regenerating please come back in a few minutes."
|
||||
msgstr "The report table is regenerating please come back in a few minutes."
|
||||
|
||||
# TRANSLATION
|
||||
# LABEL/ID_THE_UPLOAD_OF_PHP_FILES_WAS_DISABLED
|
||||
#: LABEL/ID_THE_UPLOAD_OF_PHP_FILES_WAS_DISABLED
|
||||
@@ -27689,6 +27719,12 @@ msgstr "Yesterday"
|
||||
msgid "[LABEL/ID_YES_VALUE] Yes"
|
||||
msgstr "Yes"
|
||||
|
||||
# TRANSLATION
|
||||
# LABEL/ID_YOUR_FILE_HAS_EXCEEDED
|
||||
#: LABEL/ID_YOUR_FILE_HAS_EXCEEDED
|
||||
msgid "Your file has exceeded the file maximum size that is {0}."
|
||||
msgstr "Your file has exceeded the file maximum size that is {0}."
|
||||
|
||||
# TRANSLATION
|
||||
# LABEL/ID_YOUR_IMAGE_HAS_BEEN_SUCCESSFULLY
|
||||
#: LABEL/ID_YOUR_IMAGE_HAS_BEEN_SUCCESSFULLY
|
||||
@@ -27743,6 +27779,12 @@ msgstr "You do not select any user to import"
|
||||
msgid "you have an error"
|
||||
msgstr "you have an error"
|
||||
|
||||
# TRANSLATION
|
||||
# LABEL/ID_YOU_UPLOADED_AN_UNSUPPORTED_FILE_EXTENSION
|
||||
#: LABEL/ID_YOU_UPLOADED_AN_UNSUPPORTED_FILE_EXTENSION
|
||||
msgid "You uploaded an unsupported file extension, please review the permitted files uploaded in the wiki of ProcessMaker for the cases notes."
|
||||
msgstr "You uploaded an unsupported file extension, please review the permitted files uploaded in the wiki of ProcessMaker for the cases notes."
|
||||
|
||||
# TRANSLATION
|
||||
# LABEL/ID_ZIP_CODE
|
||||
#: LABEL/ID_ZIP_CODE
|
||||
|
||||
@@ -1,4 +1,18 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* appProxy.php
|
||||
*
|
||||
* Controller for return information about the cases notes and summary form
|
||||
*
|
||||
* @link https://wiki.processmaker.com/3.2/Case_Notes
|
||||
* @link https://wiki.processmaker.com/3.2/Case_Summary
|
||||
*/
|
||||
|
||||
use ProcessMaker\BusinessModel\Cases as BmCases;
|
||||
use ProcessMaker\Exception\CaseNoteUploadFile;
|
||||
use ProcessMaker\Model\AppNotes as Notes;
|
||||
use ProcessMaker\Model\Documents;
|
||||
use ProcessMaker\Util\DateTime;
|
||||
|
||||
if (!isset($_SESSION['USER_LOGGED'])) {
|
||||
@@ -86,11 +100,13 @@ class AppProxy extends HttpProxyController
|
||||
} else {
|
||||
$tasUid = $httpData->tas;
|
||||
}
|
||||
|
||||
// Get user logged
|
||||
$usrUid = $_SESSION['USER_LOGGED'];
|
||||
|
||||
// Review if the user has the permissions
|
||||
$respView = $case->getAllObjectsFrom($proUid, $appUid, $tasUid, $usrUid, "VIEW", $delIndex);
|
||||
$respBlock = $case->getAllObjectsFrom($proUid, $appUid, $tasUid, $usrUid, "BLOCK", $delIndex);
|
||||
|
||||
if ($respView['CASES_NOTES'] == 0 && $respBlock['CASES_NOTES'] == 0) {
|
||||
return [
|
||||
'totalCount' => 0,
|
||||
@@ -99,27 +115,30 @@ class AppProxy extends HttpProxyController
|
||||
];
|
||||
}
|
||||
|
||||
$usrUid = isset($_SESSION['USER_LOGGED']) ? $_SESSION['USER_LOGGED'] : "";
|
||||
$appNotes = new AppNotes();
|
||||
$response = $appNotes->getNotesList($appUid, '', $httpData->start, $httpData->limit);
|
||||
// Get the notes
|
||||
$appNote = new Notes();
|
||||
$response = $appNote->getNotes($appUid, $httpData->start, $httpData->limit);
|
||||
$response = AppNotes::applyHtmlentitiesInNotes($response);
|
||||
|
||||
// Prepare the response
|
||||
$documents = new Documents();
|
||||
$iterator = 0;
|
||||
foreach ($response['array']['notes'] as $value) {
|
||||
$response ['array']['notes'][$iterator]['NOTE_DATE'] = DateTime::convertUtcToTimeZone($value['NOTE_DATE']);
|
||||
foreach ($response['notes'] as $value) {
|
||||
$response['notes'][$iterator]['NOTE_DATE'] = DateTime::convertUtcToTimeZone($value['NOTE_DATE']);
|
||||
$response['notes'][$iterator]['attachments'] = $documents->getFiles($value['NOTE_ID']);
|
||||
$iterator++;
|
||||
}
|
||||
|
||||
require_once("classes/model/Application.php");
|
||||
$oApplication = new Application();
|
||||
$aApplication = $oApplication->Load($appUid);
|
||||
$response['array']['appTitle'] = $aApplication['APP_TITLE'];
|
||||
$application = new Application();
|
||||
$appInfo = $application->Load($appUid);
|
||||
$response['appTitle'] = $appInfo['APP_TITLE'];
|
||||
|
||||
return $response['array'];
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* post Note Action
|
||||
* Post a note
|
||||
*
|
||||
* @param string $httpData->appUid (optional, if it is not passed try use $_SESSION['APPLICATION'])
|
||||
* @return array containg the case notes
|
||||
@@ -143,9 +162,15 @@ class AppProxy extends HttpProxyController
|
||||
$this->setSendResponse(false);
|
||||
|
||||
//Add note case
|
||||
$appNote = new AppNotes();
|
||||
$cases = new BmCases();
|
||||
try {
|
||||
$response = $appNote->addCaseNote($appUid, $usrUid, $noteContent, intval($httpData->swSendMail));
|
||||
$sendMail = intval($httpData->swSendMail);
|
||||
$response = $cases->addNote($appUid, $usrUid, $noteContent, $sendMail);
|
||||
} catch (CaseNoteUploadFile $e) {
|
||||
$response = new stdclass();
|
||||
$response->success = 'success';
|
||||
$response->message = $e->getMessage();
|
||||
die(G::json_encode($response));
|
||||
} catch (Exception $error) {
|
||||
$response = new stdclass();
|
||||
$response->success = 'success';
|
||||
|
||||
@@ -1215,7 +1215,7 @@ class pmTablesProxy extends HttpProxyController
|
||||
if (!empty($table) && $table['PRO_UID'] != '') {
|
||||
try {
|
||||
$additionalTables->populateReportTable($table['ADD_TAB_NAME'], PmTable::resolveDbSource($table['DBS_UID']), $table['ADD_TAB_TYPE'], $table['PRO_UID'], $table['ADD_TAB_GRID'], $table['ADD_TAB_UID']);
|
||||
$result->message = 'Generated for table ' . $table['ADD_TAB_NAME'];
|
||||
$result->message = G::LoadTranslation("ID_THE_REPORT_TABLE_IS_REGENERATING_PLEASE_COME_BACK_IN_A_FEW_MINUTES");
|
||||
} catch (Exception $e) {
|
||||
$context = Bootstrap::getDefaultContextLog();
|
||||
$context['proUid'] = $table['PRO_UID'];
|
||||
|
||||
@@ -57133,6 +57133,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE
|
||||
( 'LABEL','ID_ADD_CUSTOM_COLUMN','en','Add Custom Column','2014-01-15') ,
|
||||
( 'LABEL','ID_ADD_DATA_PMTABLE','en','Add Data to PM table','2014-10-10') ,
|
||||
( 'LABEL','ID_ADD_FIELD','en','Add field','2014-01-15') ,
|
||||
( 'LABEL','ID_ADD_FILE','en','Add file','2020-06-11') ,
|
||||
( 'LABEL','ID_ADD_HORIZONTAL_LINE','en','Add horizontal line','2015-02-20') ,
|
||||
( 'LABEL','ID_ADD_LICENSE','en','Please add a new license','2014-01-15') ,
|
||||
( 'LABEL','ID_ADD_MESSAGE','en','Add message','2014-01-15') ,
|
||||
@@ -57232,6 +57233,8 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE
|
||||
( 'LABEL','ID_ASSIGN_VARIABLES_OUT','en','Assign Variables Out','2014-01-15') ,
|
||||
( 'LABEL','ID_ATTACH','en','Attach','2014-01-15') ,
|
||||
( 'LABEL','ID_ATTACHED_DB','en','Attached','2014-10-08') ,
|
||||
( 'LABEL','ID_ATTACH_FILE','en','Attach file','2020-06-11') ,
|
||||
( 'LABEL','ID_ATTACHED_FILES','en','Attached files','2020-06-10') ,
|
||||
( 'LABEL','ID_ATTRIBUTES','en','Attributes','2014-01-15') ,
|
||||
( 'LABEL','ID_ATTRIBUTE_HAS_INVALID_ELEMENT_KEY','en','The attribute {0}, has an invalid element (incorrect keys).','2014-05-20') ,
|
||||
( 'LABEL','ID_AT_RISK','en','At Risk','2014-01-15') ,
|
||||
@@ -61151,12 +61154,14 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE
|
||||
( 'LABEL','ID_THERE_PROBLEM_SENDING_EMAIL','en','There was a problem sending the email to','2016-04-08') ,
|
||||
( 'LABEL','ID_THE_APPLICATION_IS_NOT_CANCELED','en','Error: The application {0} is not canceled.','2016-06-15') ,
|
||||
( 'LABEL','ID_THE_DEFAULT_CONFIGURATION','en','The default configuration was not defined','2016-11-16') ,
|
||||
( 'LABEL','ID_THE_FILE_COULDNT_BE_UPLOADED','en','The file couldn’t be uploaded please review the allowed files or contact your System Administrator.','2020-06-12') ,
|
||||
( 'LABEL','ID_THE_FILE_SIZE_IS_BIGGER_THAN_THE_MAXIMUM_ALLOWED','en','The file size is bigger than the maximum allowed, the maximum size allowed is {0} Mbytes.','2019-02-26') ,
|
||||
( 'LABEL','ID_THE_MAXIMUM_VALUE_OF_THIS_FIELD_IS','en','The maximum value of this field is {0}.','2019-02-26') ,
|
||||
( 'LABEL','ID_THE_MIMETYPE_EXTENSION_ERROR','en','The mime type does not correspond to the permitted extension, please verify your file.','2018-10-02') ,
|
||||
( 'LABEL','ID_THE_NAME_CHANGE_MAY_CAUSE_DATA_LOSS','en','The change might cause data loss in the PM table. Do you want to continue?','2017-03-30') ,
|
||||
( 'LABEL','ID_THE_PHP_FILES_EXECUTION_WAS_DISABLED','en','The PHP files execution was disabled please contact the system administrator.','2018-04-20') ,
|
||||
( 'LABEL','ID_THE_REASON_REASSIGN_USER_EMPTY','en','Please complete the reassign reason.','2016-10-20') ,
|
||||
( 'LABEL','ID_THE_REPORT_TABLE_IS_REGENERATING_PLEASE_COME_BACK_IN_A_FEW_MINUTES','en','The report table is regenerating please come back in a few minutes.','2020-06-01') ,
|
||||
( 'LABEL','ID_THE_UPLOAD_OF_PHP_FILES_WAS_DISABLED','en','The upload of PHP files was disabled please contact the system administrator.','2018-04-20') ,
|
||||
( 'LABEL','ID_THE_USERNAME_EMAIL_IS_INCORRECT','en','The username or email is incorrect','2018-01-18') ,
|
||||
( 'LABEL','ID_THIS_MONTH','en','This Month','2014-01-15') ,
|
||||
@@ -61565,6 +61570,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE
|
||||
( 'LABEL','ID_YES','en','Yes','2014-01-15') ,
|
||||
( 'LABEL','ID_YESTERDAY','en','Yesterday','2014-01-15') ,
|
||||
( 'LABEL','ID_YES_VALUE','en','Yes','2014-01-15') ,
|
||||
( 'LABEL','ID_YOUR_FILE_HAS_EXCEEDED','en','Your file has exceeded the file maximum size that is 10MB.','2020-06-12') ,
|
||||
( 'LABEL','ID_YOUR_IMAGE_HAS_BEEN_SUCCESSFULLY','en','Your image has been successfully uploaded','2014-01-15') ,
|
||||
( 'LABEL','ID_YOUR_LICENSE','en','Your license','2014-09-18') ,
|
||||
( 'LABEL','ID_YOUR_PASSWORD_IS','en','Your password is','2014-01-15') ,
|
||||
@@ -61574,6 +61580,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE
|
||||
( 'LABEL','ID_YOU_DO_NOT_HAVE_PERMISSION','en','Error: You do not have permission.','2016-06-15') ,
|
||||
( 'LABEL','ID_YOU_DO_NOT_SELECT_ANY_USER_TO_IMPORT','en','You do not select any user to import','2015-09-15') ,
|
||||
( 'LABEL','ID_YOU_HAVE_ERROR','en','you have an error','2014-01-15') ,
|
||||
( 'LABEL','ID_YOU_UPLOADED_AN_UNSUPPORTED_FILE_EXTENSION','en','You uploaded an unsupported file extension, please review the permitted files uploaded in the wiki of ProcessMaker for the cases notes.','2020-06-12') ,
|
||||
( 'LABEL','ID_ZIP_CODE','en','Zip Code','2014-01-15') ,
|
||||
( 'LABEL','IMAGE_DETAIL','en','Image detail','2014-01-15') ,
|
||||
( 'LABEL','IMPORT_LANGUAGE_ERR_NO_WRITABLE','en','The XML forms directory is not writable','2014-01-15') ,
|
||||
|
||||
@@ -120,6 +120,7 @@ CREATE TABLE `APP_DOCUMENT`
|
||||
`APP_UID` VARCHAR(32) default '' NOT NULL,
|
||||
`DEL_INDEX` INTEGER default 0 NOT NULL,
|
||||
`DOC_UID` VARCHAR(32) default '' NOT NULL,
|
||||
`DOC_ID` INTEGER default 0,
|
||||
`USR_UID` VARCHAR(32) default '' NOT NULL,
|
||||
`APP_DOC_TYPE` VARCHAR(32) default '' NOT NULL,
|
||||
`APP_DOC_CREATE_DATE` DATETIME NOT NULL,
|
||||
@@ -1583,6 +1584,7 @@ DROP TABLE IF EXISTS `APP_NOTES`;
|
||||
|
||||
CREATE TABLE `APP_NOTES`
|
||||
(
|
||||
`NOTE_ID` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`APP_UID` VARCHAR(32) default '' NOT NULL,
|
||||
`USR_UID` VARCHAR(32) default '' NOT NULL,
|
||||
`NOTE_DATE` DATETIME NOT NULL,
|
||||
@@ -1593,6 +1595,7 @@ CREATE TABLE `APP_NOTES`
|
||||
`NOTE_AFFECTED_OBJ1` VARCHAR(32) default '',
|
||||
`NOTE_AFFECTED_OBJ2` VARCHAR(32) default '' NOT NULL,
|
||||
`NOTE_RECIPIENTS` MEDIUMTEXT,
|
||||
UNIQUE KEY `NOTE_ID` (`NOTE_ID`),
|
||||
KEY `indexAppNotesDate`(`APP_UID`, `NOTE_DATE`),
|
||||
KEY `indexAppNotesUser`(`APP_UID`, `USR_UID`)
|
||||
)ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Application Notes';
|
||||
|
||||
94
workflow/engine/methods/cases/casesShowCaseNotes.php
Normal file
94
workflow/engine/methods/cases/casesShowCaseNotes.php
Normal file
@@ -0,0 +1,94 @@
|
||||
<?php
|
||||
/**
|
||||
* Download documents related to the cases notes
|
||||
*/
|
||||
|
||||
use ProcessMaker\BusinessModel\Cases;
|
||||
|
||||
if (empty($_SESSION['USER_LOGGED'])) {
|
||||
G::SendMessageText(G::LoadTranslation('ID_LOGIN_TO_SEE_OUTPUTDOCS'), "WARNING");
|
||||
G::header('Location: /errors/error403.php?url=' . urlencode($_SERVER['REQUEST_URI']));
|
||||
die();
|
||||
}
|
||||
|
||||
$appDocument = new AppDocument();
|
||||
|
||||
if (empty($_GET['a'])) {
|
||||
G::header('Location: /errors/error403.php');
|
||||
die();
|
||||
}
|
||||
|
||||
if (empty($_GET['v'])) {
|
||||
//Load last version of the document
|
||||
$docVersion = $appDocument->getLastAppDocVersion($_GET['a']);
|
||||
} else {
|
||||
$docVersion = $_GET['v'];
|
||||
}
|
||||
|
||||
$appDocument->fields = $appDocument->load($_GET['a'], $docVersion);
|
||||
|
||||
//Check if the document is a case note document
|
||||
if ($appDocument->fields['APP_DOC_TYPE'] != 'CASE_NOTE') {
|
||||
G::header('Location: /errors/error403.php');
|
||||
die();
|
||||
}
|
||||
|
||||
//Check if the user can be download the input Document
|
||||
//Send the parameter v = Version
|
||||
//Send the parameter a = Case UID
|
||||
if ($RBAC->userCanAccess('PM_FOLDERS_ALL') != 1 && defined('DISABLE_DOWNLOAD_DOCUMENTS_SESSION_VALIDATION') && DISABLE_DOWNLOAD_DOCUMENTS_SESSION_VALIDATION == 0) {
|
||||
if (!$appDocument->canDownloadInput($_SESSION['USER_LOGGED'], $_GET['a'], $docVersion)) {
|
||||
G::header('Location: /errors/error403.php');
|
||||
die();
|
||||
}
|
||||
}
|
||||
|
||||
//Create the Cases object
|
||||
$case = new Cases();
|
||||
//Get the case information to get the processUid
|
||||
$processUid = $case->getCaseInfo($appDocument->fields['APP_UID'], $_SESSION['USER_LOGGED'])->pro_uid;
|
||||
//Get the user authorization
|
||||
$userCanAccess = $case->userAuthorization(
|
||||
$_SESSION['USER_LOGGED'],
|
||||
$processUid,
|
||||
$appDocument->fields['APP_UID'],
|
||||
['PM_ALLCASES'],
|
||||
['CASES_NOTES' => 'VIEW']
|
||||
);
|
||||
|
||||
//Check if the user has the Case Notes permissions
|
||||
if ($userCanAccess['objectPermissions']['CASES_NOTES'] != 1) {
|
||||
G::header('Location: /errors/error403.php');
|
||||
die();
|
||||
}
|
||||
|
||||
$appDocUid = $appDocument->getAppDocUid();
|
||||
$docVersionInformation = $appDocument->getDocVersion();
|
||||
$info = pathinfo($appDocument->getAppDocFilename());
|
||||
$ext = (isset($info['extension']) ? $info['extension'] : '');
|
||||
|
||||
$download = true;
|
||||
|
||||
//Get the document path
|
||||
$appUid = G::getPathFromUID($appDocument->fields['APP_UID']);
|
||||
$file = G::getPathFromFileUID($appDocument->fields['APP_UID'], $appDocUid);
|
||||
|
||||
$realPath = PATH_DOCUMENT . $appUid . '/' . $file[0] . $file[1] . '_' . $docVersionInformation . '.' . $ext;
|
||||
$realPath1 = PATH_DOCUMENT . $appUid . '/' . $file[0] . $file[1] . '.' . $ext;
|
||||
$sw_file_exists = false;
|
||||
if (file_exists($realPath)) {
|
||||
$sw_file_exists = true;
|
||||
} elseif (file_exists($realPath1)) {
|
||||
$sw_file_exists = true;
|
||||
$realPath = $realPath1;
|
||||
}
|
||||
|
||||
if (!$sw_file_exists) {
|
||||
$error_message = G::LoadTranslation('ID_ERROR_STREAMING_FILE');
|
||||
G::SendMessageText($error_message, "ERROR");
|
||||
G::header('Location: ' . $_SERVER['HTTP_REFERER']);
|
||||
die();
|
||||
} else {
|
||||
$nameFile = $appDocument->fields['APP_DOC_FILENAME'];
|
||||
G::streamFile($realPath, $download, $nameFile); //download
|
||||
}
|
||||
@@ -1,37 +1,41 @@
|
||||
<?php
|
||||
|
||||
use App\Jobs\RouteCase;
|
||||
use ProcessMaker\Core\JobsManager;
|
||||
|
||||
/**
|
||||
* cases_Derivate.php
|
||||
*
|
||||
*/
|
||||
|
||||
if (!isset($_SESSION['USER_LOGGED'])) {
|
||||
G::SendTemporalMessage('ID_LOGIN_AGAIN', 'warning', 'labels');
|
||||
die('<script type="text/javascript">
|
||||
var olink = document.location.href;
|
||||
olink = ( olink.search("gmail") == -1 ) ? parent.document.location.href : olink;
|
||||
if(olink.search("gmail") == -1){
|
||||
parent.location = "../cases/casesStartPage?action=startCase";
|
||||
} else {
|
||||
var data = olink.split("?");
|
||||
var odata = data[1].split("&");
|
||||
var appUid = odata[0].split("=");
|
||||
$script = '
|
||||
<script type="text/javascript">
|
||||
var olink = document.location.href;
|
||||
olink = ( olink.search("gmail") == -1 ) ? parent.document.location.href : olink;
|
||||
if(olink.search("gmail") == -1){
|
||||
parent.location = "../cases/casesStartPage?action=startCase";
|
||||
} else {
|
||||
var data = olink.split("?");
|
||||
var odata = data[1].split("&");
|
||||
var appUid = odata[0].split("=");
|
||||
|
||||
var dataToSend = {
|
||||
"action": "credentials",
|
||||
"operation": "refreshPmSession",
|
||||
"type": "processCall",
|
||||
"funParams": [
|
||||
appUid[1],
|
||||
""
|
||||
],
|
||||
"expectReturn": false
|
||||
};
|
||||
var x = parent.postMessage(JSON.stringify(dataToSend), "*");
|
||||
if (x == undefined){
|
||||
x = parent.parent.postMessage(JSON.stringify(dataToSend), "*");
|
||||
}
|
||||
}
|
||||
</script>');
|
||||
var dataToSend = {
|
||||
"action": "credentials",
|
||||
"operation": "refreshPmSession",
|
||||
"type": "processCall",
|
||||
"funParams": [
|
||||
appUid[1],
|
||||
""
|
||||
],
|
||||
"expectReturn": false
|
||||
};
|
||||
var x = parent.postMessage(JSON.stringify(dataToSend), "*");
|
||||
if (x == undefined){
|
||||
x = parent.parent.postMessage(JSON.stringify(dataToSend), "*");
|
||||
}
|
||||
}
|
||||
</script>';
|
||||
die($script);
|
||||
}
|
||||
|
||||
/* Permissions */
|
||||
@@ -53,6 +57,7 @@ switch ($RBAC->userCanAccess('PM_CASES')) {
|
||||
if (!isset($_POST['form'])) {
|
||||
$_POST['form'] = [];
|
||||
}
|
||||
$postForm = $_POST['form'];
|
||||
|
||||
/* GET , POST & $_SESSION Vars */
|
||||
/* Process the info */
|
||||
@@ -61,15 +66,11 @@ $sStatus = 'TO_DO';
|
||||
try {
|
||||
//Load Session variables
|
||||
$processUid = isset($_SESSION['PROCESS']) ? $_SESSION['PROCESS'] : '';
|
||||
//load data
|
||||
$oCase = new Cases();
|
||||
// check if a task was already derivated
|
||||
if (isset($_SESSION["APPLICATION"])
|
||||
&& isset($_SESSION["INDEX"])) {
|
||||
$_SESSION['LAST_DERIVATED_APPLICATION'] = isset($_SESSION['LAST_DERIVATED_APPLICATION'])?$_SESSION['LAST_DERIVATED_APPLICATION']:'';
|
||||
$_SESSION['LAST_DERIVATED_INDEX'] = isset($_SESSION['LAST_DERIVATED_INDEX'])?$_SESSION['LAST_DERIVATED_INDEX']:'';
|
||||
if ($_SESSION["APPLICATION"] === $_SESSION['LAST_DERIVATED_APPLICATION']
|
||||
&& $_SESSION["INDEX"] === $_SESSION['LAST_DERIVATED_INDEX']) {
|
||||
if (isset($_SESSION["APPLICATION"]) && isset($_SESSION["INDEX"])) {
|
||||
$_SESSION['LAST_DERIVATED_APPLICATION'] = isset($_SESSION['LAST_DERIVATED_APPLICATION']) ? $_SESSION['LAST_DERIVATED_APPLICATION'] : '';
|
||||
$_SESSION['LAST_DERIVATED_INDEX'] = isset($_SESSION['LAST_DERIVATED_INDEX']) ? $_SESSION['LAST_DERIVATED_INDEX'] : '';
|
||||
if ($_SESSION["APPLICATION"] === $_SESSION['LAST_DERIVATED_APPLICATION'] && $_SESSION["INDEX"] === $_SESSION['LAST_DERIVATED_INDEX']) {
|
||||
throw new Exception(G::LoadTranslation('ID_INVALID_APPLICATION_ID_MSG', [G::LoadTranslation('ID_REOPEN')]));
|
||||
} else {
|
||||
$appDel = new AppDelegation();
|
||||
@@ -84,116 +85,6 @@ try {
|
||||
throw new Exception(G::LoadTranslation('ID_INVALID_APPLICATION_ID_MSG', [G::LoadTranslation('ID_REOPEN')]));
|
||||
}
|
||||
|
||||
//warning: we are not using the result value of function thisIsTheCurrentUser, so I'm commenting to optimize speed.
|
||||
//$oCase->thisIsTheCurrentUser( $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['USER_LOGGED'], 'REDIRECT', 'casesListExtJs');
|
||||
$appFields = $oCase->loadCase($_SESSION['APPLICATION']);
|
||||
$appFields['APP_DATA'] = array_merge($appFields['APP_DATA'], G::getSystemConstants());
|
||||
//cleaning debug variables
|
||||
$_SESSION['TRIGGER_DEBUG']['DATA'] = [];
|
||||
$_SESSION['TRIGGER_DEBUG']['TRIGGERS_NAMES'] = [];
|
||||
$_SESSION['TRIGGER_DEBUG']['TRIGGERS_VALUES'] = [];
|
||||
$_SESSION['TRIGGER_DEBUG']['TRIGGERS_EXECUTION_TIME'] = [];
|
||||
|
||||
$triggers = $oCase->loadTriggers($_SESSION['TASK'], 'ASSIGN_TASK', -2, 'BEFORE');
|
||||
|
||||
//if there are some triggers to execute
|
||||
if (sizeof($triggers) > 0) {
|
||||
//Execute triggers before derivation
|
||||
$appFields['APP_DATA'] = $oCase->ExecuteTriggers($_SESSION['TASK'], 'ASSIGN_TASK', -2, 'BEFORE',
|
||||
$appFields['APP_DATA']);
|
||||
|
||||
//save trigger variables for debugger
|
||||
$_SESSION['TRIGGER_DEBUG']['info'][0]['NUM_TRIGGERS'] = sizeof($triggers);
|
||||
$_SESSION['TRIGGER_DEBUG']['info'][0]['TIME'] = G::toUpper(G::loadTranslation('ID_BEFORE'));
|
||||
$_SESSION['TRIGGER_DEBUG']['info'][0]['TRIGGERS_NAMES'] = array_column($triggers, 'TRI_TITLE');
|
||||
$_SESSION['TRIGGER_DEBUG']['info'][0]['TRIGGERS_VALUES'] = $triggers;
|
||||
$_SESSION['TRIGGER_DEBUG']['info'][0]['TRIGGERS_EXECUTION_TIME'] = $oCase->arrayTriggerExecutionTime;
|
||||
}
|
||||
|
||||
unset($appFields['APP_STATUS']);
|
||||
unset($appFields['APP_PROC_STATUS']);
|
||||
unset($appFields['APP_PROC_CODE']);
|
||||
unset($appFields['APP_PIN']);
|
||||
|
||||
$appFields["DEL_INDEX"] = $_SESSION["INDEX"];
|
||||
$appFields["TAS_UID"] = $_SESSION["TASK"];
|
||||
$appFields["USER_UID"] = $_SESSION["USER_LOGGED"];
|
||||
$appFields["CURRENT_DYNAFORM"] = "-2";
|
||||
$appFields["OBJECT_TYPE"] = "ASSIGN_TASK";
|
||||
|
||||
$oCase->updateCase($_SESSION["APPLICATION"], $appFields); //Save data
|
||||
|
||||
//Prepare information for the derivation
|
||||
$oDerivation = new Derivation();
|
||||
$aCurrentDerivation = [
|
||||
'APP_UID' => $_SESSION['APPLICATION'],
|
||||
'DEL_INDEX' => $_SESSION['INDEX'],
|
||||
'APP_STATUS' => $sStatus,
|
||||
'TAS_UID' => $_SESSION['TASK'],
|
||||
'ROU_TYPE' => $_POST['form']['ROU_TYPE']
|
||||
];
|
||||
$aDataForPrepareInfo = [
|
||||
'USER_UID' => $_SESSION['USER_LOGGED'],
|
||||
'APP_UID' => $_SESSION['APPLICATION'],
|
||||
'DEL_INDEX' => $_SESSION['INDEX']
|
||||
];
|
||||
|
||||
//We define some parameters in the before the derivation
|
||||
//Then this function will be route the case
|
||||
$arrayDerivationResult = $oDerivation->beforeDerivate(
|
||||
$aDataForPrepareInfo,
|
||||
$_POST['form']['TASKS'],
|
||||
$_POST['form']['ROU_TYPE'],
|
||||
$aCurrentDerivation
|
||||
);
|
||||
|
||||
if (!empty($arrayDerivationResult)) {
|
||||
foreach ($_POST['form']['TASKS'] as $key => $value) {
|
||||
if (isset($value['TAS_UID'])) {
|
||||
foreach ($arrayDerivationResult as $value2) {
|
||||
if ($value2['TAS_UID'] == $value['TAS_UID']) {
|
||||
$_POST['form']['TASKS'][$key]['DEL_INDEX'] = $value2['DEL_INDEX'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$appFields = $oCase->loadCase($_SESSION['APPLICATION']); //refresh appFields, because in derivations should change some values
|
||||
$triggers = $oCase->loadTriggers($_SESSION['TASK'], 'ASSIGN_TASK', -2,
|
||||
'AFTER'); //load the triggers after derivation
|
||||
if (sizeof($triggers) > 0) {
|
||||
$appFields['APP_DATA'] = $oCase->ExecuteTriggers($_SESSION['TASK'], 'ASSIGN_TASK', -2, 'AFTER',
|
||||
$appFields['APP_DATA']); //Execute triggers after derivation
|
||||
|
||||
|
||||
$_SESSION['TRIGGER_DEBUG']['info'][1]['NUM_TRIGGERS'] = sizeof($triggers);
|
||||
$_SESSION['TRIGGER_DEBUG']['info'][1]['TIME'] = G::toUpper(G::loadTranslation('ID_AFTER'));
|
||||
$_SESSION['TRIGGER_DEBUG']['info'][1]['TRIGGERS_NAMES'] = array_column($triggers, 'TRI_TITLE');
|
||||
$_SESSION['TRIGGER_DEBUG']['info'][1]['TRIGGERS_VALUES'] = $triggers;
|
||||
$_SESSION['TRIGGER_DEBUG']['info'][1]['TRIGGERS_EXECUTION_TIME'] = $oCase->arrayTriggerExecutionTime;
|
||||
}
|
||||
unset($appFields['APP_STATUS']);
|
||||
unset($appFields['APP_PROC_STATUS']);
|
||||
unset($appFields['APP_PROC_CODE']);
|
||||
unset($appFields['APP_PIN']);
|
||||
|
||||
$appFields["DEL_INDEX"] = $_SESSION["INDEX"];
|
||||
$appFields["TAS_UID"] = $_SESSION["TASK"];
|
||||
$appFields["USER_UID"] = $_SESSION["USER_LOGGED"];
|
||||
$appFields["CURRENT_DYNAFORM"] = "-2";
|
||||
$appFields["OBJECT_TYPE"] = "ASSIGN_TASK";
|
||||
|
||||
$oCase->updateCase($_SESSION['APPLICATION'], $appFields);
|
||||
|
||||
// Send notifications - Start
|
||||
$oUser = new Users();
|
||||
$aUser = $oUser->load($_SESSION['USER_LOGGED']);
|
||||
$fromName = $aUser['USR_FIRSTNAME'] . ' ' . $aUser['USR_LASTNAME'];
|
||||
|
||||
$sFromData = $fromName . ($aUser['USR_EMAIL'] != '' ? ' <' . $aUser['USR_EMAIL'] . '>' : '');
|
||||
|
||||
$flagGmail = false;
|
||||
/*----------------------------------********---------------------------------*/
|
||||
$licensedFeatures = PMLicensedFeatures::getSingleton();
|
||||
@@ -201,127 +92,58 @@ try {
|
||||
$pmGoogle = new PmGoogleApi();
|
||||
if ($pmGoogle->getServiceGmailStatus()) {
|
||||
$flagGmail = true;
|
||||
|
||||
$appDel = new AppDelegation();
|
||||
$actualThread = $appDel->Load($_SESSION ['APPLICATION'], $_SESSION ['INDEX']);
|
||||
|
||||
$appDelPrev = $appDel->LoadParallel($_SESSION ['APPLICATION']);
|
||||
$Pmgmail = new \ProcessMaker\BusinessModel\Pmgmail();
|
||||
foreach ($appDelPrev as $app) {
|
||||
if (($app ['DEL_INDEX'] != $_SESSION ['INDEX']) && ($app ['DEL_PREVIOUS'] != $actualThread ['DEL_PREVIOUS'])) {
|
||||
$Pmgmail->gmailsIfSelfServiceValueBased($_SESSION ['APPLICATION'], $app ['DEL_INDEX'], $_POST ['form'] ['TASKS'], $appFields ['APP_DATA']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/*----------------------------------********---------------------------------*/
|
||||
|
||||
try {
|
||||
$oCase->sendNotifications(
|
||||
$_SESSION['TASK'],
|
||||
$_POST['form']['TASKS'],
|
||||
$appFields['APP_DATA'],
|
||||
$_SESSION['APPLICATION'],
|
||||
$_SESSION['INDEX'],
|
||||
$sFromData
|
||||
);
|
||||
} catch (Exception $e) {
|
||||
G::SendTemporalMessage(G::loadTranslation('ID_NOTIFICATION_ERROR') . ' - ' . $e->getMessage(), 'warning',
|
||||
'string', null, '100%');
|
||||
}
|
||||
// Send notifications - End
|
||||
// Events - Start
|
||||
$oEvent = new Event();
|
||||
$application = $_SESSION['APPLICATION'];
|
||||
$tasUid = $_SESSION['TASK'];
|
||||
$index = $_SESSION["INDEX"];
|
||||
$userLogged = $_SESSION["USER_LOGGED"];
|
||||
|
||||
// Now we dispatch the derivation of the case through Jobs Laravel.
|
||||
$closure = function() use ($processUid, $application, $postForm, $sStatus, $flagGmail, $tasUid, $index, $userLogged) {
|
||||
$cases = new Cases();
|
||||
$cases->routeCase($processUid, $application, $postForm, $sStatus, $flagGmail, $tasUid, $index, $userLogged);
|
||||
};
|
||||
JobsManager::getSingleton()->dispatch(RouteCase::class, $closure);
|
||||
|
||||
$oEvent->closeAppEvents($processUid, $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['TASK']);
|
||||
$oCurrentAppDel = AppDelegationPeer::retrieveByPk($_SESSION['APPLICATION'], $_SESSION['INDEX'] + 1);
|
||||
$multipleDelegation = false;
|
||||
// check if there are multiple derivations
|
||||
if (count($_POST['form']['TASKS']) > 1) {
|
||||
$multipleDelegation = true;
|
||||
}
|
||||
// If the case has been delegated
|
||||
if (isset($oCurrentAppDel)) {
|
||||
// if there is just a single derivation the TASK_UID can be set by the delegation data
|
||||
if (!$multipleDelegation) {
|
||||
$aCurrentAppDel = $oCurrentAppDel->toArray(BasePeer::TYPE_FIELDNAME);
|
||||
$oEvent->createAppEvents($aCurrentAppDel['PRO_UID'], $aCurrentAppDel['APP_UID'],
|
||||
$aCurrentAppDel['DEL_INDEX'], $aCurrentAppDel['TAS_UID']);
|
||||
} else {
|
||||
// else we need to check every task and create the events if it have any
|
||||
foreach ($_POST['form']['TASKS'] as $taskDelegated) {
|
||||
$aCurrentAppDel = $oCurrentAppDel->toArray(BasePeer::TYPE_FIELDNAME);
|
||||
$oEvent->createAppEvents($aCurrentAppDel['PRO_UID'], $aCurrentAppDel['APP_UID'],
|
||||
$aCurrentAppDel['DEL_INDEX'], $taskDelegated['TAS_UID']);
|
||||
}
|
||||
}
|
||||
}
|
||||
//Events - End
|
||||
|
||||
/*----------------------------------********---------------------------------*/
|
||||
// Set users drive - start
|
||||
$licensedFeatures = PMLicensedFeatures::getSingleton();
|
||||
if ($licensedFeatures->verifyfeature('AhKNjBEVXZlWUFpWE8wVTREQ0FObmo0aTdhVzhvalFic1M=')) {
|
||||
$drive = new AppDocumentDrive();
|
||||
if ($drive->getStatusDrive()) {
|
||||
//add users email next task
|
||||
$drive->addUsersDocumentDrive($appFields['APP_UID']);
|
||||
}
|
||||
}
|
||||
// Set users drive - End
|
||||
/*----------------------------------********---------------------------------*/
|
||||
//We close the related threads.
|
||||
$cases = new Cases();
|
||||
$cases->CloseCurrentDelegation($application, $index);
|
||||
|
||||
$debuggerAvailable = true;
|
||||
|
||||
$casesRedirector = 'casesListExtJsRedirector';
|
||||
if (isset ($_SESSION ['user_experience']) && $flagGmail === false) {
|
||||
$aNextStep ['PAGE'] = $casesRedirector . '?ux=' . $_SESSION ['user_experience'];
|
||||
$nextStep = [];
|
||||
if (isset($_SESSION['user_experience']) && $flagGmail === false) {
|
||||
$nextStep['PAGE'] = $casesRedirector . '?ux=' . $_SESSION['user_experience'];
|
||||
$debuggerAvailable = false;
|
||||
} else {
|
||||
if ($flagGmail === true) {
|
||||
$aNextStep ['PAGE'] = $casesRedirector . '?gmail=1';
|
||||
$nextStep['PAGE'] = $casesRedirector . '?gmail=1';
|
||||
} else {
|
||||
$aNextStep ['PAGE'] = $casesRedirector;
|
||||
$nextStep['PAGE'] = $casesRedirector;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_SESSION['PMDEBUGGER']) && $_SESSION['PMDEBUGGER'] && $debuggerAvailable) {
|
||||
$_SESSION['TRIGGER_DEBUG']['BREAKPAGE'] = $aNextStep['PAGE'];
|
||||
$loc = 'cases_Step?' . 'breakpoint=triggerdebug';
|
||||
} else {
|
||||
$loc = $aNextStep['PAGE'];
|
||||
}
|
||||
$loc = $nextStep['PAGE'];
|
||||
|
||||
//Triggers After
|
||||
$isIE = Bootstrap::isIE();
|
||||
|
||||
if (isset($_SESSION['TRIGGER_DEBUG']['ISSET']) && !$isIE) {
|
||||
if ($_SESSION['TRIGGER_DEBUG']['ISSET'] == 1) {
|
||||
$oTemplatePower = new TemplatePower(PATH_TPL . 'cases/cases_Step.html');
|
||||
$oTemplatePower->prepare();
|
||||
$G_PUBLISH = new Publisher();
|
||||
$G_PUBLISH->AddContent('template', '', '', '', $oTemplatePower);
|
||||
$_POST['NextStep'] = $loc;
|
||||
$G_PUBLISH->AddContent('view', 'cases/showDebugFrameLoader');
|
||||
$G_PUBLISH->AddContent('view', 'cases/showDebugFrameBreaker');
|
||||
$_SESSION['TRIGGER_DEBUG']['ISSET'] == 0;
|
||||
G::RenderPage('publish', 'blank');
|
||||
exit();
|
||||
} else {
|
||||
unset($_SESSION['TRIGGER_DEBUG']);
|
||||
}
|
||||
}
|
||||
unset($_SESSION['TRIGGER_DEBUG']);
|
||||
|
||||
//close tab only if IE11 add a validation was added if the current skin is uxs
|
||||
if ($isIE && !isset($_SESSION['__OUTLOOK_CONNECTOR__']) && SYS_SKIN !== "uxs") {
|
||||
$script = "<script type='text/javascript'>
|
||||
try {
|
||||
if(top.opener) {
|
||||
top.opener.location.reload();
|
||||
}
|
||||
top.close();
|
||||
} catch(e) {
|
||||
}
|
||||
</script>";
|
||||
$script = "
|
||||
<script type='text/javascript'>
|
||||
try {
|
||||
if(top.opener) {
|
||||
top.opener.location.reload();
|
||||
}
|
||||
top.close();
|
||||
} catch(e) {
|
||||
}
|
||||
</script>";
|
||||
die($script);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,14 +4,14 @@
|
||||
* @see workflow/engine/methods/services/ActionsByEmailDataForm.php
|
||||
* @link https://wiki.processmaker.com/3.3/Actions_by_Email#Link_to_Fill_a_Form
|
||||
*/
|
||||
|
||||
use ProcessMaker\BusinessModel\Cases\InputDocument;
|
||||
use ProcessMaker\ChangeLog\ChangeLog;
|
||||
use App\Jobs\ActionByEmail;
|
||||
use ProcessMaker\Core\JobsManager;
|
||||
use ProcessMaker\Validation\ValidationUploadedFiles;
|
||||
|
||||
if (PMLicensedFeatures::getSingleton()
|
||||
->verifyfeature('zLhSk5TeEQrNFI2RXFEVktyUGpnczV1WEJNWVp6cjYxbTU3R29mVXVZNWhZQT0=')) {
|
||||
|
||||
$featureEnable = PMLicensedFeatures::getSingleton()
|
||||
->verifyfeature('zLhSk5TeEQrNFI2RXFEVktyUGpnczV1WEJNWVp6cjYxbTU3R29mVXVZNWhZQT0=');
|
||||
if ($featureEnable) {
|
||||
|
||||
/**
|
||||
* To do: The following evaluation must be moved after saving the data (so as not to lose the data entered in the form).
|
||||
* It only remains because it is an old behavior, which must be defined by "Product Owner".
|
||||
@@ -22,7 +22,7 @@ if (PMLicensedFeatures::getSingleton()
|
||||
G::SendMessageText($validator->getMessage(), "ERROR");
|
||||
$url = explode("sys" . config("system.workspace"), $_SERVER['HTTP_REFERER']);
|
||||
G::header("location: " . "/sys" . config("system.workspace") . $url[1]);
|
||||
die();
|
||||
return;
|
||||
}
|
||||
|
||||
$G_PUBLISH = new Publisher();
|
||||
@@ -53,111 +53,23 @@ if (PMLicensedFeatures::getSingleton()
|
||||
$aber = G::decrypt($_REQUEST['ABER'], URL_KEY);
|
||||
$dynUid = G::decrypt($_REQUEST['DYN_UID'], URL_KEY);
|
||||
$forms = isset($_REQUEST['form']) ? $_REQUEST['form'] : [];
|
||||
$remoteAddr = $_SERVER['REMOTE_ADDR'];
|
||||
$files = $_FILES;
|
||||
|
||||
//Load data related to the case
|
||||
$case = new Cases();
|
||||
$casesFields = $case->loadCase($appUid, $delIndex);
|
||||
|
||||
// Check if the current thread is not finished
|
||||
if (!is_null($casesFields['DEL_FINISH_DATE'])) {
|
||||
throw new Exception(G::loadTranslation('ID_ABE_FORM_ALREADY_FILLED'));
|
||||
}
|
||||
// Merge the data
|
||||
$casesFields['APP_DATA'] = array_merge($casesFields['APP_DATA'], $forms);
|
||||
|
||||
//Get current user info
|
||||
$delegation = new AppDelegation();
|
||||
$currentUsrUid = $delegation->getUserAssignedInThread($appUid, $delIndex);
|
||||
if (!is_null($currentUsrUid)) {
|
||||
$users = new Users();
|
||||
$userInfo = $users->loadDetails($currentUsrUid);
|
||||
$casesFields["APP_DATA"]["USER_LOGGED"] = $currentUsrUid;
|
||||
$casesFields["APP_DATA"]["USR_USERNAME"] = $userInfo['USR_USERNAME'];
|
||||
}
|
||||
|
||||
foreach ($casesFields["APP_DATA"] as $index => $value) {
|
||||
$_SESSION[$index] = $value;
|
||||
}
|
||||
|
||||
$casesFields['CURRENT_DYNAFORM'] = $dynUid;
|
||||
$casesFields['USER_UID'] = $casesFields['CURRENT_USER_UID'];
|
||||
|
||||
ChangeLog::getChangeLog()
|
||||
->getUsrIdByUsrUid($casesFields['USER_UID'], true)
|
||||
->setSourceId(ChangeLog::FromABE);
|
||||
|
||||
//Update case info
|
||||
$case->updateCase($appUid, $casesFields);
|
||||
if (isset($_FILES ['form'])) {
|
||||
if (isset($_FILES["form"]["name"]) && count($_FILES["form"]["name"]) > 0) {
|
||||
$oInputDocument = new InputDocument();
|
||||
$oInputDocument->uploadFileCase($_FILES, $case, $casesFields, $currentUsrUid, $appUid, $delIndex);
|
||||
}
|
||||
}
|
||||
$wsBaseInstance = new WsBase();
|
||||
$result = $wsBaseInstance->derivateCase(
|
||||
$casesFields['CURRENT_USER_UID'], $appUid, $delIndex, true
|
||||
);
|
||||
$code = (is_array($result) ? $result['status_code'] : $result->status_code);
|
||||
|
||||
$dataResponses = array();
|
||||
$dataResponses['ABE_REQ_UID'] = $aber;
|
||||
$dataResponses['ABE_RES_CLIENT_IP'] = $_SERVER['REMOTE_ADDR'];
|
||||
$dataResponses['ABE_RES_DATA'] = serialize($forms);
|
||||
$dataResponses['ABE_RES_STATUS'] = 'PENDING';
|
||||
$dataResponses['ABE_RES_MESSAGE'] = '';
|
||||
|
||||
try {
|
||||
require_once 'classes/model/AbeResponses.php';
|
||||
|
||||
$abeAbeResponsesInstance = new AbeResponses();
|
||||
$dataResponses['ABE_RES_UID'] = $abeAbeResponsesInstance->createOrUpdate($dataResponses);
|
||||
} catch (Exception $error) {
|
||||
throw $error;
|
||||
}
|
||||
|
||||
if ($code == 0) {
|
||||
//Save Cases Notes
|
||||
$dataAbeRequests = loadAbeRequest($aber);
|
||||
$dataAbeConfiguration = loadAbeConfiguration($dataAbeRequests['ABE_UID']);
|
||||
|
||||
if ($dataAbeConfiguration['ABE_CASE_NOTE_IN_RESPONSE'] == 1) {
|
||||
$response = new stdclass();
|
||||
$response->usrUid = $casesFields['APP_DATA']['USER_LOGGED'];
|
||||
$response->appUid = $appUid;
|
||||
$response->delIndex = $delIndex;
|
||||
$response->noteText = "Check the information that was sent for the receiver: " . $dataAbeRequests['ABE_REQ_SENT_TO'];
|
||||
postNote($response);
|
||||
}
|
||||
|
||||
$dataAbeRequests['ABE_REQ_ANSWERED'] = 1;
|
||||
$code == 0 ? uploadAbeRequest($dataAbeRequests) : '';
|
||||
|
||||
$assign = $result['message'];
|
||||
$aMessage['MESSAGE'] = '<strong>' . G::loadTranslation('ID_ABE_INFORMATION_SUBMITTED') . '</strong>';
|
||||
} else {
|
||||
throw new Exception('An error occurred while the application was being processed.<br /><br />
|
||||
Error code: ' . $result->status_code . '<br />
|
||||
Error message: ' . $result->message . '<br /><br />');
|
||||
}
|
||||
|
||||
// Update
|
||||
$dataResponses['ABE_RES_STATUS'] = ($code == 0 ? 'SENT' : 'ERROR');
|
||||
$dataResponses['ABE_RES_MESSAGE'] = ($code == 0 ? '-' : $result->message);
|
||||
|
||||
try {
|
||||
$abeAbeResponsesInstance = new AbeResponses();
|
||||
$abeAbeResponsesInstance->createOrUpdate($dataResponses);
|
||||
} catch (Exception $error) {
|
||||
throw $error;
|
||||
}
|
||||
//Now we dispatch the derivation of the case through Jobs Laravel.
|
||||
$closure = function() use ($appUid, $delIndex, $aber, $dynUid, $forms, $remoteAddr, $files) {
|
||||
$cases = new Cases();
|
||||
$cases->routeCaseActionByEmail($appUid, $delIndex, $aber, $dynUid, $forms, $remoteAddr, $files);
|
||||
};
|
||||
JobsManager::getSingleton()->dispatch(ActionByEmail::class, $closure);
|
||||
|
||||
$message = [];
|
||||
$message['MESSAGE'] = '<strong>' . G::loadTranslation('ID_ABE_INFORMATION_SUBMITTED') . '</strong>';
|
||||
$_SESSION = unserialize($backupSession);
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showInfo', '', $aMessage);
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showInfo', '', $message);
|
||||
} catch (Exception $error) {
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', array('MESSAGE' => $error->getMessage() . ' Please contact to your system administrator.'));
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', ['MESSAGE' => $error->getMessage() . ' Please contact to your system administrator.']);
|
||||
}
|
||||
$_SESSION = unserialize($backupSession);
|
||||
G::RenderPage('publish', 'blank');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1675,4 +1675,12 @@ white-space:normal;
|
||||
.navPanelBottom .x-toolbar-cell {
|
||||
clear: both;
|
||||
height: 50px;
|
||||
}
|
||||
.nav_list li a {
|
||||
padding: 2px 2px 2px 10px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
width: 100px;
|
||||
white-space: nowrap;
|
||||
display: inline-block;
|
||||
}
|
||||
@@ -1868,3 +1868,11 @@ white-space:normal;
|
||||
clear: both;
|
||||
height: 50px;
|
||||
}
|
||||
.nav_list li a {
|
||||
padding: 2px 2px 2px 10px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
width: 100px;
|
||||
white-space: nowrap;
|
||||
display: inline-block;
|
||||
}
|
||||
@@ -1704,4 +1704,12 @@ text-decoration: none;
|
||||
.navPanelBottom .x-toolbar-cell {
|
||||
clear: both;
|
||||
height: 50px;
|
||||
}
|
||||
.nav_list li a {
|
||||
padding: 2px 2px 2px 10px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
width: 100px;
|
||||
white-space: nowrap;
|
||||
display: inline-block;
|
||||
}
|
||||
@@ -1249,4 +1249,12 @@ td.x-cnotes-label {
|
||||
.navPanelBottom .x-toolbar-cell {
|
||||
clear: both;
|
||||
height: 50px;
|
||||
}
|
||||
.nav_list li a {
|
||||
padding: 2px 2px 2px 10px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
width: 100px;
|
||||
white-space: nowrap;
|
||||
display: inline-block;
|
||||
}
|
||||
@@ -14,6 +14,7 @@ use AppHistoryPeer;
|
||||
use Application;
|
||||
use ApplicationPeer;
|
||||
use Applications;
|
||||
use AppNotes;
|
||||
use AppNotesPeer;
|
||||
use AppSolr;
|
||||
use BasePeer;
|
||||
@@ -40,12 +41,16 @@ use ProcessMaker\BusinessModel\Task as BmTask;
|
||||
use ProcessMaker\BusinessModel\User as BmUser;
|
||||
use ProcessMaker\Core\System;
|
||||
use ProcessMaker\Exception\UploadException;
|
||||
use ProcessMaker\Exception\CaseNoteUploadFile;
|
||||
use ProcessMaker\Model\Application as ModelApplication;
|
||||
use ProcessMaker\Model\AppNotes as Notes;
|
||||
use ProcessMaker\Model\Delegation;
|
||||
use ProcessMaker\Model\Documents;
|
||||
use ProcessMaker\Plugins\PluginRegistry;
|
||||
use ProcessMaker\Services\OAuth2\Server;
|
||||
use ProcessMaker\Util\DateTime as UtilDateTime;
|
||||
use ProcessMaker\Validation\ExceptionRestApi;
|
||||
use ProcessMaker\Validation\ValidationUploadedFiles;
|
||||
use ProcessMaker\Validation\Validator as FileValidator;
|
||||
use ProcessPeer;
|
||||
use ProcessUser;
|
||||
@@ -3843,6 +3848,186 @@ class Cases
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a case note
|
||||
*
|
||||
* @param string $appUid
|
||||
* @param string $userUid
|
||||
* @param string $note
|
||||
* @param bool $sendMail
|
||||
* @param array $files
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function addNote($appUid, $userUid, $note, $sendMail = false, $files = [])
|
||||
{
|
||||
// Register the note
|
||||
$attributes = [
|
||||
"APP_UID" => $appUid,
|
||||
"USR_UID" => $userUid,
|
||||
"NOTE_DATE" => date("Y-m-d H:i:s"),
|
||||
"NOTE_CONTENT" => $note,
|
||||
"NOTE_TYPE" => "USER",
|
||||
"NOTE_AVAILABILITY" => "PUBLIC",
|
||||
"NOTE_RECIPIENTS" => ""
|
||||
];
|
||||
$newNote = Notes::create($attributes);
|
||||
// Get the FK
|
||||
$noteId = $newNote->NOTE_ID;
|
||||
|
||||
$attachments = [];
|
||||
// Register the files related to the note
|
||||
if (!empty($files) || !empty($_FILES["filesToUpload"])) {
|
||||
$filesResponse = $this->uploadFilesInCaseNotes($userUid, $appUid, $files, $noteId);
|
||||
foreach ($filesResponse['attachments'] as $key => $value) {
|
||||
$attachments[$key] = [];
|
||||
$attachments[$key]['APP_DOC_FILENAME'] = $value['APP_DOC_FILENAME'];
|
||||
$attachments[$key]['LINK'] = "../cases/casesShowCaseNotes?a=" . $value["APP_DOC_UID"] . "&v=" . $value["DOC_VERSION"];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Send the email
|
||||
if ($sendMail) {
|
||||
// Get the recipients
|
||||
$case = new ClassesCases();
|
||||
$p = $case->getUsersParticipatedInCase($appUid, 'ACTIVE');
|
||||
$noteRecipientsList = [];
|
||||
|
||||
foreach ($p["array"] as $key => $userParticipated) {
|
||||
if ($key != '') {
|
||||
$noteRecipientsList[] = $key;
|
||||
}
|
||||
}
|
||||
|
||||
$noteRecipients = implode(",", $noteRecipientsList);
|
||||
$note = stripslashes($note);
|
||||
|
||||
// Send the notification
|
||||
$appNote = new AppNotes();
|
||||
$appNote->sendNoteNotification($appUid, $userUid, $note, $noteRecipients, '', 0, $noteId);
|
||||
}
|
||||
|
||||
// Prepare the response
|
||||
$result = [];
|
||||
$result['success'] = 'success';
|
||||
$result['message'] = '';
|
||||
$result['attachments'] = $attachments;
|
||||
$result['attachment_errors'] = [];
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Upload file related to the case notes
|
||||
*
|
||||
* @param string $userUid
|
||||
* @param string $appUid
|
||||
* @param array $filesReferences
|
||||
* @param int $noteId
|
||||
*
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
public function uploadFilesInCaseNotes($userUid, $appUid, $filesReferences = [], $noteId = 0)
|
||||
{
|
||||
$files = [];
|
||||
if (!empty($_FILES["filesToUpload"])) {
|
||||
$upload = true;
|
||||
// This format is from ext-js multipart
|
||||
$filesName = !empty($_FILES["filesToUpload"]["name"]) ? $_FILES["filesToUpload"]["name"] : [];
|
||||
$filesTmpName = !empty($_FILES["filesToUpload"]["tmp_name"]) ? $_FILES["filesToUpload"]["tmp_name"] : [];
|
||||
$filesError = !empty($_FILES["filesToUpload"]["error"]) ? $_FILES["filesToUpload"]["error"] : [];
|
||||
|
||||
foreach ($filesName as $index => $value) {
|
||||
if (!empty($value)) {
|
||||
$files[] = [
|
||||
'name' => $filesName[$index],
|
||||
'tmp_name' => $filesTmpName[$index],
|
||||
'error' => $filesError[$index]
|
||||
];
|
||||
}
|
||||
}
|
||||
} elseif (!empty($filesReferences)) {
|
||||
$upload = false;
|
||||
// Array with path references
|
||||
foreach ($filesReferences as $fileIndex => $fileName) {
|
||||
$nameFile = !is_numeric($fileIndex) ? basename($fileIndex) : basename($fileName);
|
||||
$files[] = [
|
||||
'name' => $nameFile,
|
||||
'tmp_name' => $fileName,
|
||||
'error' => UPLOAD_ERR_OK
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
//rules validation
|
||||
foreach ($files as $key => $value) {
|
||||
$entry = [
|
||||
"filename" => $value['name'],
|
||||
"path" => $value['tmp_name']
|
||||
];
|
||||
$validator = ValidationUploadedFiles::getValidationUploadedFiles()
|
||||
->runRulesForPostFilesOfNote($entry);
|
||||
if ($validator->fails()) {
|
||||
Notes::where('NOTE_ID', '=', $noteId)->delete();
|
||||
$messageError = G::LoadTranslation('ID_THE_FILE_COULDNT_BE_UPLOADED');
|
||||
throw new CaseNoteUploadFile($messageError . ' ' . $validator->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// Get the delIndex related to the case
|
||||
$cases = new ClassesCases();
|
||||
$delIndex = $cases->getCurrentDelegation($appUid);
|
||||
|
||||
// We will to register the files in the database
|
||||
$response = [];
|
||||
$response['attachments'] = [];
|
||||
$response['attachment_errors'] = [];
|
||||
if (!empty($files)) {
|
||||
$i = 0;
|
||||
$j = 0;
|
||||
foreach ($files as $fileIndex => $fileName) {
|
||||
// There is no error, the file uploaded with success
|
||||
if ($fileName["error"] === UPLOAD_ERR_OK) {
|
||||
$appDocUid = G::generateUniqueID();
|
||||
|
||||
// Upload or move the file
|
||||
$isUploaded = saveAppDocument($fileName, $appUid, $appDocUid, 1, $upload);
|
||||
|
||||
// If the file was uploaded correctly we will to register in the DB
|
||||
if ($isUploaded) {
|
||||
$attributes = [
|
||||
"DOC_ID" => $noteId,
|
||||
"APP_DOC_UID" => $appDocUid,
|
||||
"DOC_VERSION" => 1,
|
||||
"APP_UID" => $appUid,
|
||||
"DEL_INDEX" => $delIndex,
|
||||
"USR_UID" => $userUid,
|
||||
"DOC_UID" => -1,
|
||||
"APP_DOC_TYPE" => 'CASE_NOTE',
|
||||
"APP_DOC_CREATE_DATE" => date("Y-m-d H:i:s"),
|
||||
"APP_DOC_FILENAME" => $fileName["name"]
|
||||
];
|
||||
Documents::create($attributes);
|
||||
|
||||
// List of files uploaded or copy
|
||||
$response['attachments'][$i++] = $attributes;
|
||||
} else {
|
||||
$response['attachment_errors'][$j++] = [
|
||||
'error' => 'error',
|
||||
'file' => $fileName["name"]
|
||||
];
|
||||
}
|
||||
} else {
|
||||
throw new UploadException($fileName['error']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the validations related to an Input Document
|
||||
*
|
||||
|
||||
@@ -1178,7 +1178,9 @@ class DynaForm
|
||||
}
|
||||
foreach ($oldColumns as $oldColumn) {
|
||||
if (strtolower(AdditionalTables::getPHPName($column->id)) === strtolower(AdditionalTables::getPHPName($oldColumn->id))) {
|
||||
$identicals[] = "'" . $column->id . "' - '" . $oldColumn->id . "'";
|
||||
if (strtolower(AdditionalTables::getPHPName($column->var_name)) === strtolower(AdditionalTables::getPHPName($oldColumn->var_name))) {
|
||||
$identicals[] = "'" . $column->id . "' - '" . $oldColumn->id . "'";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace ProcessMaker\BusinessModel\Factories;
|
||||
|
||||
use Closure;
|
||||
use Exception;
|
||||
|
||||
class Jobs
|
||||
{
|
||||
const CLASS_NAMESPACE = "App\\Jobs\\";
|
||||
|
||||
/**
|
||||
* Gets the full name of the class, if the class does not exist, an exception is thrown.
|
||||
* @param string $name
|
||||
* @return string
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function getClassName($name)
|
||||
{
|
||||
$className = self::CLASS_NAMESPACE . $name;
|
||||
|
||||
if (!class_exists($className)) {
|
||||
throw new Exception("{$className} not exists.");
|
||||
}
|
||||
|
||||
return $className;
|
||||
}
|
||||
|
||||
/**
|
||||
* This gets an instance of some Job defined in App\Jobs and dispatch this job.
|
||||
* @param string $name
|
||||
* @param Closure $closure
|
||||
* @return object
|
||||
*/
|
||||
public static function create($name, Closure $closure)
|
||||
{
|
||||
$jobName = self::getClassName($name);
|
||||
|
||||
$instance = $jobName::dispatch($closure);
|
||||
|
||||
return $instance;
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,16 @@ class Variable
|
||||
'object' => 10
|
||||
];
|
||||
|
||||
/**
|
||||
* Get the variables types accepted
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getVariableTypes()
|
||||
{
|
||||
return $this->variableTypes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Variable for a Process
|
||||
*
|
||||
@@ -355,6 +365,33 @@ class Variable
|
||||
return $arrayVariables;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get data of Variables related to the specific type
|
||||
*
|
||||
* @param string $processUid Unique id of Process
|
||||
* @param int $typeVarId
|
||||
* @param int $start
|
||||
* @param int $limit
|
||||
* @param string $search
|
||||
* @param string $prefix
|
||||
*
|
||||
* @return array, return an array with varaibles filter by type
|
||||
*/
|
||||
public function getVariablesByType($processUid, $typeVarId = 0, $start = null, $limit = null, $search = null, $prefix = null)
|
||||
{
|
||||
//Verify data
|
||||
$proId = Validator::proUid($processUid, '$prj_uid');
|
||||
$variables = ProcessVariables::getVariablesByType($proId, $typeVarId, $start, $limit, $search);
|
||||
$arrayVariables = [];
|
||||
foreach ($variables as $var) {
|
||||
$arrayVariables[] = [
|
||||
'value' => is_null($prefix) ? $var['VAR_NAME'] : $prefix . $var['VAR_NAME'],
|
||||
];
|
||||
}
|
||||
|
||||
return $arrayVariables;
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify field definition
|
||||
*
|
||||
|
||||
332
workflow/engine/src/ProcessMaker/Cases/CasesTrait.php
Normal file
332
workflow/engine/src/ProcessMaker/Cases/CasesTrait.php
Normal file
@@ -0,0 +1,332 @@
|
||||
<?php
|
||||
|
||||
namespace ProcessMaker\Cases;
|
||||
|
||||
use AbeResponses;
|
||||
use AppDelegation;
|
||||
use AppDelegationPeer;
|
||||
use AppDocumentDrive;
|
||||
use BasePeer;
|
||||
use Cases;
|
||||
use Derivation;
|
||||
use Event;
|
||||
use Exception;
|
||||
use G;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use PMLicensedFeatures;
|
||||
use ProcessMaker\BusinessModel\Cases\InputDocument;
|
||||
use ProcessMaker\BusinessModel\Pmgmail;
|
||||
use ProcessMaker\ChangeLog\ChangeLog;
|
||||
use stdClass;
|
||||
use Users;
|
||||
use WsBase;
|
||||
|
||||
trait CasesTrait
|
||||
{
|
||||
|
||||
/**
|
||||
* This initiates the routing of the case given the application and the form
|
||||
* data in the web application interface.
|
||||
* @param string $processUid
|
||||
* @param string $application
|
||||
* @param array $postForm
|
||||
* @param string $status
|
||||
* @param boolean $flagGmail
|
||||
* @param string $tasUid
|
||||
* @param integer $index
|
||||
* @param string $userLogged
|
||||
* @return stdClass
|
||||
*/
|
||||
public function routeCase($processUid, $application, $postForm, $status, $flagGmail, $tasUid, $index, $userLogged): stdClass
|
||||
{
|
||||
//warning: we are not using the result value of function thisIsTheCurrentUser, so I'm commenting to optimize speed.
|
||||
$appFields = $this->loadCase($application);
|
||||
$appFields['APP_DATA'] = array_merge($appFields['APP_DATA'], G::getSystemConstants());
|
||||
|
||||
$triggerDebug = [];
|
||||
$triggers = $this->loadTriggers($tasUid, 'ASSIGN_TASK', -2, 'BEFORE');
|
||||
|
||||
//if there are some triggers to execute
|
||||
if (sizeof($triggers) > 0) {
|
||||
//Execute triggers before derivation
|
||||
$appFields['APP_DATA'] = $this->executeTriggers($tasUid, 'ASSIGN_TASK', -2, 'BEFORE', $appFields['APP_DATA']);
|
||||
|
||||
//save trigger variables for debugger
|
||||
$triggerDebug[] = [
|
||||
'NUM_TRIGGERS' => sizeof($triggers),
|
||||
'TIME' => G::toUpper(G::loadTranslation('ID_BEFORE')),
|
||||
'TRIGGERS_NAMES' => array_column($triggers, 'TRI_TITLE'),
|
||||
'TRIGGERS_VALUES' => $triggers,
|
||||
'TRIGGERS_EXECUTION_TIME' => $this->arrayTriggerExecutionTime
|
||||
];
|
||||
}
|
||||
|
||||
unset($appFields['APP_STATUS']);
|
||||
unset($appFields['APP_PROC_STATUS']);
|
||||
unset($appFields['APP_PROC_CODE']);
|
||||
unset($appFields['APP_PIN']);
|
||||
|
||||
$appFields["DEL_INDEX"] = $index;
|
||||
$appFields["TAS_UID"] = $tasUid;
|
||||
$appFields["USER_UID"] = $userLogged;
|
||||
$appFields["CURRENT_DYNAFORM"] = "-2";
|
||||
$appFields["OBJECT_TYPE"] = "ASSIGN_TASK";
|
||||
|
||||
//save data
|
||||
$this->updateCase($application, $appFields);
|
||||
|
||||
//prepare information for the derivation
|
||||
$derivation = new Derivation();
|
||||
$currentDerivation = [
|
||||
'APP_UID' => $application,
|
||||
'DEL_INDEX' => $index,
|
||||
'APP_STATUS' => $status,
|
||||
'TAS_UID' => $tasUid,
|
||||
'ROU_TYPE' => $postForm['ROU_TYPE']
|
||||
];
|
||||
$dataForPrepareInfo = [
|
||||
'USER_UID' => $userLogged,
|
||||
'APP_UID' => $application,
|
||||
'DEL_INDEX' => $index
|
||||
];
|
||||
|
||||
//we define some parameters in the before the derivation
|
||||
//then this function will be route the case
|
||||
$arrayDerivationResult = $derivation->beforeDerivate(
|
||||
$dataForPrepareInfo,
|
||||
$postForm['TASKS'],
|
||||
$postForm['ROU_TYPE'],
|
||||
$currentDerivation
|
||||
);
|
||||
|
||||
if (!empty($arrayDerivationResult)) {
|
||||
foreach ($postForm['TASKS'] as $key => $value) {
|
||||
if (isset($value['TAS_UID'])) {
|
||||
foreach ($arrayDerivationResult as $value2) {
|
||||
if ($value2['TAS_UID'] == $value['TAS_UID']) {
|
||||
$postForm['TASKS'][$key]['DEL_INDEX'] = $value2['DEL_INDEX'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$appFields = $this->loadCase($application); //refresh appFields, because in derivations should change some values
|
||||
$triggers = $this->loadTriggers($tasUid, 'ASSIGN_TASK', -2, 'AFTER'); //load the triggers after derivation
|
||||
if (sizeof($triggers) > 0) {
|
||||
$appFields['APP_DATA'] = $this->ExecuteTriggers($tasUid, 'ASSIGN_TASK', -2, 'AFTER', $appFields['APP_DATA']); //Execute triggers after derivation
|
||||
|
||||
$triggerDebug[] = [
|
||||
'NUM_TRIGGERS' => sizeof($triggers),
|
||||
'TIME' => G::toUpper(G::loadTranslation('ID_AFTER')),
|
||||
'TRIGGERS_NAMES' => array_column($triggers, 'TRI_TITLE'),
|
||||
'TRIGGERS_VALUES' => $triggers,
|
||||
'TRIGGERS_EXECUTION_TIME' => $this->arrayTriggerExecutionTime
|
||||
];
|
||||
}
|
||||
unset($appFields['APP_STATUS']);
|
||||
unset($appFields['APP_PROC_STATUS']);
|
||||
unset($appFields['APP_PROC_CODE']);
|
||||
unset($appFields['APP_PIN']);
|
||||
|
||||
$appFields["DEL_INDEX"] = $index;
|
||||
$appFields["TAS_UID"] = $tasUid;
|
||||
$appFields["USER_UID"] = $userLogged;
|
||||
$appFields["CURRENT_DYNAFORM"] = "-2";
|
||||
$appFields["OBJECT_TYPE"] = "ASSIGN_TASK";
|
||||
|
||||
$this->updateCase($application, $appFields);
|
||||
|
||||
// Send notifications - Start
|
||||
$user = new Users();
|
||||
$userInfo = $user->load($userLogged);
|
||||
$fromName = $userInfo['USR_FIRSTNAME'] . ' ' . $userInfo['USR_LASTNAME'];
|
||||
|
||||
$fromData = $fromName . ($userInfo['USR_EMAIL'] != '' ? ' <' . $userInfo['USR_EMAIL'] . '>' : '');
|
||||
|
||||
if ($flagGmail === true) {
|
||||
$appDel = new AppDelegation();
|
||||
$actualThread = $appDel->Load($application, $index);
|
||||
|
||||
$appDelPrev = $appDel->LoadParallel($application);
|
||||
$pmGmail = new Pmgmail();
|
||||
foreach ($appDelPrev as $app) {
|
||||
if (($app['DEL_INDEX'] != $index) && ($app['DEL_PREVIOUS'] != $actualThread['DEL_PREVIOUS'])) {
|
||||
$pmGmail->gmailsIfSelfServiceValueBased($application, $app['DEL_INDEX'], $postForm['TASKS'], $appFields['APP_DATA']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$this->sendNotifications($tasUid, $postForm['TASKS'], $appFields['APP_DATA'], $application, $index, $fromData);
|
||||
} catch (Exception $e) {
|
||||
G::SendTemporalMessage(G::loadTranslation('ID_NOTIFICATION_ERROR') . ' - ' . $e->getMessage(), 'warning', 'string', null, '100%');
|
||||
}
|
||||
// Send notifications - End
|
||||
// Events - Start
|
||||
$event = new Event();
|
||||
|
||||
$event->closeAppEvents($processUid, $application, $index, $tasUid);
|
||||
$currentAppDel = AppDelegationPeer::retrieveByPk($application, $index + 1);
|
||||
$multipleDelegation = false;
|
||||
// check if there are multiple derivations
|
||||
if (count($postForm['TASKS']) > 1) {
|
||||
$multipleDelegation = true;
|
||||
}
|
||||
// If the case has been delegated
|
||||
if (isset($currentAppDel)) {
|
||||
// if there is just a single derivation the TASK_UID can be set by the delegation data
|
||||
if (!$multipleDelegation) {
|
||||
$arrayResult = $currentAppDel->toArray(BasePeer::TYPE_FIELDNAME);
|
||||
$event->createAppEvents($arrayResult['PRO_UID'], $arrayResult['APP_UID'], $arrayResult['DEL_INDEX'], $arrayResult['TAS_UID']);
|
||||
} else {
|
||||
// else we need to check every task and create the events if it have any
|
||||
foreach ($postForm['TASKS'] as $taskDelegated) {
|
||||
$arrayResult = $currentAppDel->toArray(BasePeer::TYPE_FIELDNAME);
|
||||
$event->createAppEvents($arrayResult['PRO_UID'], $arrayResult['APP_UID'], $arrayResult['DEL_INDEX'], $taskDelegated['TAS_UID']);
|
||||
}
|
||||
}
|
||||
}
|
||||
//Events - End
|
||||
|
||||
/*----------------------------------********---------------------------------*/
|
||||
// Set users drive - start
|
||||
$licensedFeatures = PMLicensedFeatures::getSingleton();
|
||||
if ($licensedFeatures->verifyfeature('AhKNjBEVXZlWUFpWE8wVTREQ0FObmo0aTdhVzhvalFic1M=')) {
|
||||
$drive = new AppDocumentDrive();
|
||||
if ($drive->getStatusDrive()) {
|
||||
//add users email next task
|
||||
$drive->addUsersDocumentDrive($appFields['APP_UID']);
|
||||
}
|
||||
}
|
||||
// Set users drive - End
|
||||
/*----------------------------------********---------------------------------*/
|
||||
|
||||
$result = [
|
||||
'appFields' => $appFields,
|
||||
'triggerDebug' => $triggerDebug
|
||||
];
|
||||
return (object) $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* This initiates the routing of the case given the application and the form
|
||||
* data in the email application interface.
|
||||
* @param string $appUid
|
||||
* @param int $delIndex
|
||||
* @param string $aber
|
||||
* @param string $dynUid
|
||||
* @param array $forms
|
||||
* @param string $remoteAddr
|
||||
* @param array $files
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
public function routeCaseActionByEmail($appUid, $delIndex, $aber, $dynUid, $forms, $remoteAddr, $files): array
|
||||
{
|
||||
//Load data related to the case
|
||||
$case = new Cases();
|
||||
$fields = $case->loadCase($appUid, $delIndex);
|
||||
|
||||
// Check if the current thread is not finished
|
||||
if (!is_null($fields['DEL_FINISH_DATE'])) {
|
||||
$message = G::loadTranslation('ID_ABE_FORM_ALREADY_FILLED');
|
||||
Log::error($message);
|
||||
throw new Exception($message);
|
||||
}
|
||||
// Merge the data
|
||||
$fields['APP_DATA'] = array_merge($fields['APP_DATA'], $forms);
|
||||
|
||||
//Get current user info
|
||||
$delegation = new AppDelegation();
|
||||
$currentUsrUid = $delegation->getUserAssignedInThread($appUid, $delIndex);
|
||||
if (!is_null($currentUsrUid)) {
|
||||
$users = new Users();
|
||||
$userInfo = $users->loadDetails($currentUsrUid);
|
||||
$fields["APP_DATA"]["USER_LOGGED"] = $currentUsrUid;
|
||||
$fields["APP_DATA"]["USR_USERNAME"] = $userInfo['USR_USERNAME'];
|
||||
}
|
||||
|
||||
foreach ($fields["APP_DATA"] as $index => $value) {
|
||||
$_SESSION[$index] = $value;
|
||||
}
|
||||
|
||||
$fields['CURRENT_DYNAFORM'] = $dynUid;
|
||||
$fields['USER_UID'] = $fields['CURRENT_USER_UID'];
|
||||
|
||||
ChangeLog::getChangeLog()
|
||||
->getUsrIdByUsrUid($fields['USER_UID'], true)
|
||||
->setSourceId(ChangeLog::FromABE);
|
||||
|
||||
//Update case info
|
||||
$case->updateCase($appUid, $fields);
|
||||
if (isset($files['form'])) {
|
||||
if (isset($files["form"]["name"]) && count($files["form"]["name"]) > 0) {
|
||||
$inputDocument = new InputDocument();
|
||||
$inputDocument->uploadFileCase($files, $case, $fields, $currentUsrUid, $appUid, $delIndex);
|
||||
}
|
||||
}
|
||||
$wsBase = new WsBase();
|
||||
$result = $wsBase->derivateCase($fields['CURRENT_USER_UID'], $appUid, $delIndex, true);
|
||||
$code = is_array($result) ? $result['status_code'] : $result->status_code;
|
||||
|
||||
$dataResponses = [];
|
||||
$dataResponses['ABE_REQ_UID'] = $aber;
|
||||
$dataResponses['ABE_RES_CLIENT_IP'] = $remoteAddr;
|
||||
$dataResponses['ABE_RES_DATA'] = serialize($forms);
|
||||
$dataResponses['ABE_RES_STATUS'] = 'PENDING';
|
||||
$dataResponses['ABE_RES_MESSAGE'] = '';
|
||||
|
||||
try {
|
||||
require_once 'classes/model/AbeResponses.php';
|
||||
$abeResponses = new AbeResponses();
|
||||
$dataResponses['ABE_RES_UID'] = $abeResponses->createOrUpdate($dataResponses);
|
||||
} catch (Exception $error) {
|
||||
$message = $error->getMessage();
|
||||
Log::error($message);
|
||||
throw $error;
|
||||
}
|
||||
|
||||
if ($code == 0) {
|
||||
//Save Cases Notes
|
||||
$abeRequest = loadAbeRequest($aber);
|
||||
$abeConfiguration = loadAbeConfiguration($abeRequest['ABE_UID']);
|
||||
|
||||
if ($abeConfiguration['ABE_CASE_NOTE_IN_RESPONSE'] == 1) {
|
||||
$response = new stdclass();
|
||||
$response->usrUid = $fields['APP_DATA']['USER_LOGGED'];
|
||||
$response->appUid = $appUid;
|
||||
$response->delIndex = $delIndex;
|
||||
$response->noteText = "Check the information that was sent for the receiver: " . $abeRequest['ABE_REQ_SENT_TO'];
|
||||
postNote($response);
|
||||
}
|
||||
|
||||
$abeRequest['ABE_REQ_ANSWERED'] = 1;
|
||||
$code == 0 ? uploadAbeRequest($abeRequest) : '';
|
||||
} else {
|
||||
$resStatusCode = is_array($result) ? $result['status_code'] : $result->status_code;
|
||||
$resMessage = is_array($result) ? $result['message'] : $result->message;
|
||||
$message = 'An error occurred while the application was being processed.<br /><br />
|
||||
Error code: ' . $resStatusCode . '<br />
|
||||
Error message: ' . $resMessage . '<br /><br />';
|
||||
Log::error($message);
|
||||
throw new Exception($message);
|
||||
}
|
||||
|
||||
// Update
|
||||
$resMessage = is_array($result) ? $result['message'] : $result->message;
|
||||
$dataResponses['ABE_RES_STATUS'] = ($code == 0 ? 'SENT' : 'ERROR');
|
||||
$dataResponses['ABE_RES_MESSAGE'] = ($code == 0 ? '-' : $resMessage);
|
||||
|
||||
try {
|
||||
$abeResponses = new AbeResponses();
|
||||
$abeResponses->createOrUpdate($dataResponses);
|
||||
} catch (Exception $error) {
|
||||
$message = $error->getMessage();
|
||||
Log::error($message);
|
||||
throw $error;
|
||||
}
|
||||
return $dataResponses;
|
||||
}
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace ProcessMaker\Commands;
|
||||
|
||||
use ProcessMaker\Core\ProcOpen;
|
||||
|
||||
class GenerateDataReport extends ProcOpen
|
||||
{
|
||||
private $workspace;
|
||||
private $tableName;
|
||||
private $type;
|
||||
private $processUid;
|
||||
private $gridKey;
|
||||
private $addTabUid;
|
||||
private $className;
|
||||
private $pathWorkspace;
|
||||
private $start;
|
||||
private $limit;
|
||||
|
||||
/**
|
||||
* Initializes the command parameters.
|
||||
* @param string $workspace
|
||||
* @param string $tableName
|
||||
* @param string $type
|
||||
* @param string $processUid
|
||||
* @param string $gridKey
|
||||
* @param string $addTabUid
|
||||
* @param string $className
|
||||
* @param string $pathWorkspace
|
||||
* @param integer $start
|
||||
* @param integer $limit
|
||||
*/
|
||||
public function __construct(
|
||||
$workspace,
|
||||
$tableName,
|
||||
$type = 'NORMAL',
|
||||
$processUid = '',
|
||||
$gridKey = '',
|
||||
$addTabUid = '',
|
||||
$className = '',
|
||||
$pathWorkspace,
|
||||
$start = 0,
|
||||
$limit = 10)
|
||||
{
|
||||
$this->workspace = $workspace;
|
||||
$this->tableName = $tableName;
|
||||
$this->type = $type;
|
||||
$this->processUid = $processUid;
|
||||
$this->gridKey = $gridKey;
|
||||
$this->addTabUid = $addTabUid;
|
||||
$this->className = $className;
|
||||
$this->pathWorkspace = $pathWorkspace;
|
||||
$this->start = $start;
|
||||
$this->limit = $limit;
|
||||
$this->setCwd(PATH_TRUNK);
|
||||
parent::__construct($this->buildCommand());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the command to execute.
|
||||
* @return string
|
||||
*/
|
||||
private function buildCommand(): string
|
||||
{
|
||||
$command = PHP_BINDIR . "/php "
|
||||
. "./processmaker "
|
||||
. "'generate-data-report' "
|
||||
. "'{$this->workspace}' "
|
||||
. "'tableName={$this->tableName}' "
|
||||
. "'type={$this->type}' "
|
||||
. "'process={$this->processUid}' "
|
||||
. "'gridKey={$this->gridKey}' "
|
||||
. "'additionalTable={$this->addTabUid}' "
|
||||
. "'className={$this->className}' "
|
||||
. "'pathWorkspace={$this->pathWorkspace}' "
|
||||
. "'start={$this->start}' "
|
||||
. "'limit={$this->limit}' ";
|
||||
return $command;
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace ProcessMaker\Commands;
|
||||
|
||||
use ProcessMaker\Core\ProcOpen;
|
||||
|
||||
class PopulateTableReport extends ProcOpen
|
||||
{
|
||||
private $workspace;
|
||||
private $sql;
|
||||
private $isRbac;
|
||||
|
||||
/**
|
||||
* Initializes the command parameters.
|
||||
* @param string $workspace
|
||||
* @param string $sql
|
||||
* @param boolean $isRbac
|
||||
*/
|
||||
public function __construct($workspace, $sql, $isRbac = false)
|
||||
{
|
||||
$this->workspace = $workspace;
|
||||
$this->sql = $sql;
|
||||
$this->isRbac = $isRbac;
|
||||
$this->setCwd(PATH_TRUNK);
|
||||
parent::__construct($this->buildCommand());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the command to execute.
|
||||
* @return string
|
||||
*/
|
||||
public function buildCommand()
|
||||
{
|
||||
$command = PHP_BINDIR . "/php "
|
||||
. "./processmaker "
|
||||
. "'populate-table' "
|
||||
. "'{$this->workspace}' "
|
||||
. base64_encode($this->sql) . " "
|
||||
. ($this->isRbac ? "'1'" : "'0'");
|
||||
return $command;
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,6 @@ namespace ProcessMaker\Core;
|
||||
use Bootstrap;
|
||||
use Exception;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use ProcessMaker\BusinessModel\Factories\Jobs;
|
||||
use ProcessMaker\Core\System;
|
||||
use Propel;
|
||||
|
||||
@@ -187,7 +186,7 @@ class JobsManager
|
||||
{
|
||||
$environment = $this->getDataSnapshot();
|
||||
|
||||
$instance = Jobs::create($name, function() use ($callback, $environment) {
|
||||
$instance = $name::dispatch(function() use ($callback, $environment) {
|
||||
try {
|
||||
$this->recoverDataSnapshot($environment);
|
||||
$callback($environment);
|
||||
|
||||
@@ -1,92 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace ProcessMaker\Core;
|
||||
|
||||
class MultiProcOpen
|
||||
{
|
||||
/**
|
||||
* Represents the waiting time before starting the process monitoring.
|
||||
* @var integer
|
||||
*/
|
||||
private $sleepTime = 1;
|
||||
|
||||
/**
|
||||
* This method obtains a paging by returning the start and limit indexes
|
||||
* compatible with the mysql pagination in its call function.
|
||||
* The return function must return an instance of the object "ProcessMaker\Core\ProcOpen".
|
||||
* Returns an array containing the status, content, and errors generated by
|
||||
* the open process.
|
||||
* @param int $size
|
||||
* @param int $chunk
|
||||
* @param callable $callback
|
||||
* @return array
|
||||
*/
|
||||
public function chunk(int $size, int $chunk, callable $callback): array
|
||||
{
|
||||
$start = 0;
|
||||
$limit = $chunk;
|
||||
$queries = [];
|
||||
for ($i = 1; $start < $size; $i++) {
|
||||
$queries[] = $callback($size, $start, $limit);
|
||||
$start = $i * $limit;
|
||||
}
|
||||
return $this->run($queries);
|
||||
}
|
||||
|
||||
/**
|
||||
* Open a set of background processes.
|
||||
* The array must contain one or more instances of the object inherited from
|
||||
* the class "ProcessMaker\Core\ProcOpen"
|
||||
* Returns an array containing the status, content, and errors generated by
|
||||
* the open process.
|
||||
* @param array $processes
|
||||
* @return array
|
||||
*/
|
||||
public function run(array $processes): array
|
||||
{
|
||||
foreach ($processes as $procOpen) {
|
||||
$procOpen->open();
|
||||
}
|
||||
return $this->processMonitoring($processes);
|
||||
}
|
||||
|
||||
/**
|
||||
* It monitors the open processes, verifying if they have ended or thrown an
|
||||
* error and later closing the resources related to the process.
|
||||
* Returns an array containing the status, content, and errors generated by
|
||||
* the open process.
|
||||
* @param array $processes
|
||||
* @return array
|
||||
*/
|
||||
private function processMonitoring(array $processes): array
|
||||
{
|
||||
sleep($this->sleepTime); //this sleep is very important
|
||||
$i = 0;
|
||||
$n = count($processes);
|
||||
if ($n === 0) {
|
||||
return [];
|
||||
}
|
||||
$outputs = [];
|
||||
do {
|
||||
$index = $i % $n;
|
||||
if (isset($processes[$index])) {
|
||||
$procOpen = $processes[$index];
|
||||
$status = $procOpen->getStatus();
|
||||
$contents = $procOpen->getContents();
|
||||
$errors = $procOpen->getErrors();
|
||||
if ($status->running === false || !empty($errors)) {
|
||||
$outputs[] = [
|
||||
"status" => $status,
|
||||
"contents" => $contents,
|
||||
"errors" => $errors,
|
||||
];
|
||||
$procOpen->terminate();
|
||||
$procOpen->close();
|
||||
unset($processes[$index]);
|
||||
}
|
||||
}
|
||||
$i = $i + 1;
|
||||
} while (!empty($processes));
|
||||
return $outputs;
|
||||
}
|
||||
}
|
||||
@@ -1,126 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace ProcessMaker\Core;
|
||||
|
||||
class ProcOpen
|
||||
{
|
||||
private $command;
|
||||
private $resource;
|
||||
private $descriptorspec;
|
||||
private $pipes;
|
||||
private $cwd;
|
||||
|
||||
/**
|
||||
* This initializes the descriptors and the command for the open process.
|
||||
* @param string $command
|
||||
*/
|
||||
public function __construct(string $command)
|
||||
{
|
||||
$this->descriptorspec = [
|
||||
['pipe', 'r'],
|
||||
['pipe', 'w'],
|
||||
['pipe', 'w']
|
||||
];
|
||||
$this->command = $command;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the resource that represents the process.
|
||||
* @return resource
|
||||
*/
|
||||
public function getResource()
|
||||
{
|
||||
return $this->resource;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the process execution directory.
|
||||
* @param string $cwd
|
||||
*/
|
||||
public function setCwd(string $cwd)
|
||||
{
|
||||
$this->cwd = $cwd;
|
||||
}
|
||||
|
||||
/**
|
||||
* Open a background process.
|
||||
*/
|
||||
public function open()
|
||||
{
|
||||
if (empty($this->cwd)) {
|
||||
$this->resource = proc_open($this->command, $this->descriptorspec, $this->pipes);
|
||||
} else {
|
||||
$this->resource = proc_open($this->command, $this->descriptorspec, $this->pipes, $this->cwd);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the content of the process when it is finished.
|
||||
* @return string
|
||||
*/
|
||||
public function getContents()
|
||||
{
|
||||
if (is_resource($this->pipes[1])) {
|
||||
return stream_get_contents($this->pipes[1]);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the process errors when it is finished.
|
||||
* @return string
|
||||
*/
|
||||
public function getErrors()
|
||||
{
|
||||
if (is_resource($this->pipes[2])) {
|
||||
return stream_get_contents($this->pipes[2]);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Close the resources related to the open process.
|
||||
* return void
|
||||
*/
|
||||
public function close()
|
||||
{
|
||||
if (is_resource($this->resource)) {
|
||||
foreach ($this->pipes as $value) {
|
||||
fclose($value);
|
||||
}
|
||||
proc_close($this->resource);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* End the process before it ends.
|
||||
*/
|
||||
public function terminate()
|
||||
{
|
||||
if (is_resource($this->resource)) {
|
||||
proc_terminate($this->resource);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status of the process.
|
||||
* @return object
|
||||
*/
|
||||
public function getStatus()
|
||||
{
|
||||
$status = [
|
||||
"command" => $this->command,
|
||||
"pid" => null,
|
||||
"running" => false,
|
||||
"signaled" => false,
|
||||
"stopped" => false,
|
||||
"exitcode" => -1,
|
||||
"termsig" => 0,
|
||||
"stopsig" => 0
|
||||
];
|
||||
if (is_resource($this->resource)) {
|
||||
$status = proc_get_status($this->resource);
|
||||
}
|
||||
return (object) $status;
|
||||
}
|
||||
}
|
||||
@@ -77,7 +77,9 @@ class System
|
||||
'highlight_home_folder_enable' => 0,
|
||||
'highlight_home_folder_refresh_time' => 10,
|
||||
'highlight_home_folder_scope' => 'unassigned', // For now only this list is supported
|
||||
'disable_advanced_search_case_title_fulltext' => 0
|
||||
'disable_advanced_search_case_title_fulltext' => 0,
|
||||
'pmftotalcalculation_floating_point_number' => 10,
|
||||
'report_table_batch_regeneration' => 1000
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace ProcessMaker\Exception;
|
||||
|
||||
use Exception;
|
||||
use Throwable;
|
||||
|
||||
class CaseNoteUploadFile extends Exception
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor method.
|
||||
* @param string $message
|
||||
* @param int $code
|
||||
* @param Throwable $previous
|
||||
*/
|
||||
public function __construct(string $message = "", int $code = 0, Throwable $previous = null)
|
||||
{
|
||||
parent::__construct($message, $code, $previous);
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,101 @@ use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class AppNotes extends Model
|
||||
{
|
||||
// Set our table name
|
||||
protected $table = 'APP_NOTES';
|
||||
// No timestamps
|
||||
public $timestamps = false;
|
||||
// Primary key
|
||||
protected $primaryKey = 'NOTE_ID';
|
||||
// The IDs are auto-incrementing
|
||||
public $incrementing = true;
|
||||
|
||||
/**
|
||||
* The model's default values for attributes.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $attributes = [
|
||||
'NOTE_TYPE' => 'USER',
|
||||
'NOTE_ORIGIN_OBJ' => '',
|
||||
'NOTE_AFFECTED_OBJ1' => '',
|
||||
'NOTE_AFFECTED_OBJ2' => ''
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'APP_UID',
|
||||
'USR_UID',
|
||||
'NOTE_DATE',
|
||||
'NOTE_CONTENT',
|
||||
'NOTE_TYPE',
|
||||
'NOTE_AVAILABILITY',
|
||||
'NOTE_ORIGIN_OBJ',
|
||||
'NOTE_AFFECTED_OBJ1',
|
||||
'NOTE_AFFECTED_OBJ2',
|
||||
'NOTE_RECIPIENTS'
|
||||
];
|
||||
|
||||
/**
|
||||
* Scope a query to filter an specific case
|
||||
*
|
||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||
* @param string $appUid
|
||||
* @return \Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public function scopeAppUid($query, string $appUid)
|
||||
{
|
||||
return $query->where('APP_UID', $appUid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the documents related to the case
|
||||
*
|
||||
* @param string $appUid
|
||||
* @param int $start
|
||||
* @param int $limit
|
||||
* @param string $dir
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getNotes(string $appUid, $start = 0, $limit = 25, $dir = 'DESC')
|
||||
{
|
||||
$query = AppNotes::query()->select([
|
||||
'NOTE_ID',
|
||||
'APP_UID',
|
||||
'NOTE_DATE',
|
||||
'NOTE_CONTENT',
|
||||
'NOTE_TYPE',
|
||||
'NOTE_AVAILABILITY',
|
||||
'USERS.USR_UID',
|
||||
'USERS.USR_USERNAME',
|
||||
'USERS.USR_FIRSTNAME',
|
||||
'USERS.USR_LASTNAME'
|
||||
]);
|
||||
$query->leftJoin('USERS', function ($join) {
|
||||
$join->on('USERS.USR_UID', '=', 'APP_NOTES.USR_UID');
|
||||
});
|
||||
$query->appUid($appUid);
|
||||
$query->orderBy('NOTE_DATE', $dir);
|
||||
// Add pagination to the query
|
||||
$query->offset($start)->limit($limit);
|
||||
|
||||
$results = $query->get();
|
||||
$notes = [];
|
||||
$notes['notes'] = [];
|
||||
$results->each(function ($item, $key) use (&$notes) {
|
||||
$row = $item->toArray();
|
||||
$row['NOTE_CONTENT'] = stripslashes($row['NOTE_CONTENT']);
|
||||
$notes['notes'][] = $row;
|
||||
});
|
||||
|
||||
// Add the total of rows to return
|
||||
$notes['totalCount'] = $limit;
|
||||
|
||||
return $notes;
|
||||
}
|
||||
}
|
||||
|
||||
148
workflow/engine/src/ProcessMaker/Model/Documents.php
Normal file
148
workflow/engine/src/ProcessMaker/Model/Documents.php
Normal file
@@ -0,0 +1,148 @@
|
||||
<?php
|
||||
|
||||
namespace ProcessMaker\Model;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Documents extends Model
|
||||
{
|
||||
// Set our table name
|
||||
protected $table = 'APP_DOCUMENT';
|
||||
// No timestamps
|
||||
public $timestamps = false;
|
||||
// Primary key
|
||||
protected $primaryKey = 'NOTE_ID';
|
||||
// The IDs are auto-incrementing
|
||||
public $incrementing = false;
|
||||
// Valid AppDocType's
|
||||
const DOC_TYPE_ATTACHED = 'ATTACHED';
|
||||
const DOC_TYPE_CASE_NOTE = 'CASE_NOTE';
|
||||
const DOC_TYPE_INPUT = 'INPUT';
|
||||
const DOC_TYPE_OUTPUT = 'OUTPUT';
|
||||
|
||||
/**
|
||||
* The model's default values for attributes.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $attributes = [
|
||||
'APP_DOC_TITLE' => '',
|
||||
'APP_DOC_COMMENT' => '',
|
||||
'DOC_UID' => '-1',
|
||||
'FOLDER_UID' => '',
|
||||
'APP_DOC_PLUGIN' => '',
|
||||
'APP_DOC_TAGS' => '',
|
||||
'APP_DOC_FIELDNAME' => '',
|
||||
'APP_DOC_DRIVE_DOWNLOAD' => 'a:0:{}',
|
||||
'SYNC_WITH_DRIVE' => 'UNSYNCHRONIZED',
|
||||
'SYNC_PERMISSIONS' => '',
|
||||
'APP_DOC_STATUS_DATE' => '',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'DOC_ID',
|
||||
'APP_DOC_UID',
|
||||
'DOC_VERSION',
|
||||
'APP_DOC_FILENAME',
|
||||
'APP_UID',
|
||||
'DEL_INDEX',
|
||||
'DOC_UID',
|
||||
'USR_UID',
|
||||
'APP_DOC_TYPE',
|
||||
'APP_DOC_CREATE_DATE',
|
||||
'APP_DOC_INDEX',
|
||||
'FOLDER_UID',
|
||||
'APP_DOC_STATUS',
|
||||
];
|
||||
|
||||
/**
|
||||
* Scope a query to filter an specific case
|
||||
*
|
||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||
* @param string $appUid
|
||||
* @return \Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public function scopeAppUid($query, string $appUid)
|
||||
{
|
||||
return $query->where('APP_UID', $appUid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Scope a query to filter an specific reference file
|
||||
*
|
||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||
* @param int $docId
|
||||
* @return \Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public function scopeDocId($query, int $docId)
|
||||
{
|
||||
return $query->where('DOC_ID', $docId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the documents related to the case
|
||||
*
|
||||
* @param string $appUid
|
||||
* @param string $type
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getAppFiles(string $appUid, $type = 'CASE_NOTES')
|
||||
{
|
||||
$query = Documents::query()->select();
|
||||
$query->appUid($appUid);
|
||||
$query->where('APP_DOC_TYPE', $type);
|
||||
$results = $query->get();
|
||||
$documentList = [];
|
||||
$results->each(function ($item, $key) use (&$documentList) {
|
||||
$documentList[] = $item->toArray();
|
||||
});
|
||||
|
||||
return $documentList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get attached files from the case note.
|
||||
*
|
||||
* @param string $appUid
|
||||
*
|
||||
* @return object
|
||||
*/
|
||||
public static function getAttachedFilesFromTheCaseNote(string $appUid)
|
||||
{
|
||||
$result = Documents::select('APP_DOCUMENT.APP_DOC_UID', 'APP_DOCUMENT.DOC_VERSION', 'APP_DOCUMENT.APP_DOC_FILENAME')
|
||||
->join('APP_NOTES', function($join) use($appUid) {
|
||||
$join->on('APP_NOTES.NOTE_ID', '=', 'APP_DOCUMENT.DOC_ID')
|
||||
->where('APP_DOCUMENT.APP_UID', '=', $appUid);
|
||||
})
|
||||
->get();
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the documents related to the specific DOC_ID
|
||||
*
|
||||
* @param int $docId
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getFiles(int $docId)
|
||||
{
|
||||
$query = Documents::query()->select(['APP_DOC_UID', 'APP_DOC_FILENAME', 'DOC_VERSION']);
|
||||
$query->docId($docId);
|
||||
$results = $query->get();
|
||||
$documentList = [];
|
||||
$results->each(function ($item, $key) use (&$documentList) {
|
||||
$row = $item->toArray();
|
||||
$row['LINK'] = "../cases/casesShowCaseNotes?a=" . $row["APP_DOC_UID"] . "&v=" . $row["DOC_VERSION"];
|
||||
$documentList[] = $row;
|
||||
});
|
||||
|
||||
return $documentList;
|
||||
}
|
||||
}
|
||||
@@ -72,8 +72,21 @@ class ProcessVariables extends Model
|
||||
*/
|
||||
public function scopeProcessId($query, int $proId)
|
||||
{
|
||||
return $query->where('PRO_ID', $proId);
|
||||
return $query->where('PROCESS_VARIABLES.PRO_ID', $proId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Scope a query to filter a specific type for variable
|
||||
*
|
||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||
* @param int $typeId
|
||||
* @return \Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public function scopeTypeId($query, int $typeId)
|
||||
{
|
||||
return $query->where('VAR_FIELD_TYPE_ID', $typeId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the variables list
|
||||
*
|
||||
@@ -96,4 +109,46 @@ class ProcessVariables extends Model
|
||||
|
||||
return $variablesList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the variables list
|
||||
*
|
||||
* @param int $proId
|
||||
* @param int $typeId
|
||||
* @param int $start
|
||||
* @param int $limit
|
||||
* @param string $search
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getVariablesByType(int $proId, int $typeId = 0, $start = null, $limit = null, $search = null)
|
||||
{
|
||||
$query = ProcessVariables::query()->select();
|
||||
$query->leftJoin('DB_SOURCE', function ($join) {
|
||||
$join->on('DB_SOURCE.PRO_ID', '=', 'PROCESS_VARIABLES.PRO_ID');
|
||||
});
|
||||
$query->processId($proId);
|
||||
// Check if we need to filter the type of variables
|
||||
if ($typeId > 0) {
|
||||
$query->typeId($typeId);
|
||||
}
|
||||
// search a specific variable name
|
||||
if (!empty($search)) {
|
||||
$query->where('VAR_NAME', 'LIKE', "${search}%");
|
||||
}
|
||||
// order by varNane
|
||||
$query->orderBy('VAR_NAME', 'ASC');
|
||||
// Check if we need to add a pagination
|
||||
if(!is_null($start) && !is_null($limit)) {
|
||||
$query->offset($start)->limit($limit);
|
||||
}
|
||||
// Get records
|
||||
$results = $query->get();
|
||||
$variablesList = [];
|
||||
$results->each(function ($item, $key) use (&$variablesList) {
|
||||
$variablesList[] = $item->toArray();
|
||||
});
|
||||
|
||||
return $variablesList;
|
||||
}
|
||||
}
|
||||
14
workflow/engine/src/ProcessMaker/Model/StepTrigger.php
Normal file
14
workflow/engine/src/ProcessMaker/Model/StepTrigger.php
Normal file
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
namespace ProcessMaker\Model;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class StepTrigger extends Model
|
||||
{
|
||||
protected $table = 'STEP_TRIGGER';
|
||||
protected $primaryKey = 'STEP_UID';
|
||||
public $incrementing = false;
|
||||
public $timestamps = false;
|
||||
|
||||
}
|
||||
52
workflow/engine/src/ProcessMaker/Model/SubApplication.php
Normal file
52
workflow/engine/src/ProcessMaker/Model/SubApplication.php
Normal file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
namespace ProcessMaker\Model;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
/**
|
||||
* Class Process
|
||||
* @package ProcessMaker\Model
|
||||
*
|
||||
* Represents a business process object in the system.
|
||||
*/
|
||||
class SubApplication extends Model
|
||||
{
|
||||
// Set our table name
|
||||
protected $table = 'SUB_APPLICATION';
|
||||
// No timestamps
|
||||
public $timestamps = false;
|
||||
// Primary key
|
||||
protected $primaryKey = 'APP_UID';
|
||||
// The IDs are auto-incrementing
|
||||
public $incrementing = false;
|
||||
|
||||
/**
|
||||
* The model's default values for attributes.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $attributes = [
|
||||
'SA_STATUS' => '',
|
||||
'SA_VALUES_OUT' => '',
|
||||
'SA_VALUES_IN' => '',
|
||||
'SA_INIT_DATE' => '',
|
||||
'SA_FINISH_DATE' => ''
|
||||
];
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'APP_UID',
|
||||
'APP_PARENT',
|
||||
'DEL_INDEX_PARENT',
|
||||
'DEL_THREAD_PARENT',
|
||||
'SA_STATUS',
|
||||
'SA_VALUES_OUT',
|
||||
'SA_VALUES_IN',
|
||||
'SA_INIT_DATE',
|
||||
'SA_FINISH_DATE'
|
||||
];
|
||||
}
|
||||
@@ -12,6 +12,8 @@ class Triggers extends Model
|
||||
public $timestamps = false;
|
||||
//primary key
|
||||
protected $primaryKey = 'TRI_UID';
|
||||
//No incrementing
|
||||
public $incrementing = false;
|
||||
|
||||
/**
|
||||
* Scope a query to filter an specific process
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
<?php
|
||||
namespace ProcessMaker\Services\Api\Project;
|
||||
|
||||
use \ProcessMaker\Services\Api;
|
||||
use \Luracast\Restler\RestException;
|
||||
use Exception;
|
||||
use G;
|
||||
use Luracast\Restler\RestException;
|
||||
use ProcessMaker\BusinessModel\Variable as BmVariable;
|
||||
use ProcessMaker\Services\Api;
|
||||
|
||||
/**
|
||||
* Project\Variable Api Controller
|
||||
*
|
||||
@@ -28,6 +32,43 @@ class Variable extends Api
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get variables by type
|
||||
*
|
||||
* @url GET /:prj_uid/process-variables/:typeVariable/paged
|
||||
*
|
||||
* @param string $prj_uid {@min 32}{@max 32}
|
||||
* @param string $typeVariable {@from path}
|
||||
* @param int $start {@from path}
|
||||
* @param int $limit {@from path}
|
||||
* @param string $search {@from path}
|
||||
*/
|
||||
public function doGetVariablesByType($prj_uid, $typeVariable, $start = null, $limit = null, $search = null)
|
||||
{
|
||||
try {
|
||||
$variable = new BmVariable();
|
||||
$typesAccepted = $variable::$varTypesValues;
|
||||
if (!empty($typesAccepted[$typeVariable])) {
|
||||
$typeVatId = $typesAccepted[$typeVariable];
|
||||
} else {
|
||||
throw new Exception(G::LoadTranslation("ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES", ['$typeVariable', implode(',', $variable->getVariableTypes())]));
|
||||
}
|
||||
// Review if the word has the prefix
|
||||
$count = preg_match_all('/\@(?:([\@\%\#\?\$\=\&Qq\!])|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]*(?:[\\\\][\w\W])?)*)\))((?:\s*\[[\'"]?\w+[\'"]?\])+|\-\>([a-zA-Z\_]\w*))?/', $search, $match, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE);
|
||||
// Check if the search has some prefix
|
||||
$prefix = '';
|
||||
if ($count) {
|
||||
$prefix = substr($search,0,2);
|
||||
$search = substr($search,2);
|
||||
}
|
||||
$response = $variable->getVariablesByType($prj_uid, $typeVatId, $start, $limit, $search, $prefix);
|
||||
|
||||
return $response;
|
||||
} catch (Exception $e) {
|
||||
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @url GET /:prj_uid/process-variable/:var_uid
|
||||
*
|
||||
|
||||
@@ -601,3 +601,42 @@ function getMysqlVersion()
|
||||
|
||||
return $mysqlVersion;
|
||||
}
|
||||
|
||||
/**
|
||||
* Move the uploaded file to the documents folder
|
||||
*
|
||||
* @param array $file
|
||||
* @param string $appUid
|
||||
* @param string $appDocUid
|
||||
* @param int $version
|
||||
* @param bool $upload
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function saveAppDocument($file, $appUid, $appDocUid, $version = 1, $upload = true)
|
||||
{
|
||||
try {
|
||||
$info = pathinfo($file["name"]);
|
||||
$extension = ((isset($info["extension"])) ? $info["extension"] : "");
|
||||
$fileName = $appDocUid . "_" . $version . "." . $extension;
|
||||
|
||||
$pathCase = PATH_DATA_SITE . 'files' . PATH_SEP . G::getPathFromUID($appUid) . PATH_SEP;
|
||||
|
||||
$response = false;
|
||||
if ($upload) {
|
||||
G::uploadFile(
|
||||
$file["tmp_name"],
|
||||
$pathCase,
|
||||
$fileName
|
||||
);
|
||||
$response = true;
|
||||
} else {
|
||||
G::verifyPath($pathCase, true);
|
||||
$response = copy($file["tmp_name"], $pathCase . $fileName);
|
||||
}
|
||||
|
||||
return $response;
|
||||
} catch (Exception $e) {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,16 @@ class ValidationUploadedFiles
|
||||
*/
|
||||
private $fails = [];
|
||||
|
||||
/**
|
||||
* Return this constant when rule is invalid.
|
||||
*/
|
||||
private const INVALID = true;
|
||||
|
||||
/**
|
||||
* Return this constant when rule is valid.
|
||||
*/
|
||||
private const VALID = false;
|
||||
|
||||
/**
|
||||
* Check if the loaded files comply with the validation rules, add here if you
|
||||
* want more validation rules.
|
||||
@@ -280,6 +290,110 @@ class ValidationUploadedFiles
|
||||
return $validator->validate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the loaded files comply with the validation rules, add here if you
|
||||
* want more validation rules.
|
||||
* Accept per argument an array or object that contains a "filename" and "path" values.
|
||||
* The rules are verified in the order in which they have been added.
|
||||
*
|
||||
* @param array|object $file
|
||||
* @return Validator
|
||||
*/
|
||||
public function runRulesForPostFilesOfNote($file)
|
||||
{
|
||||
$validator = new Validator();
|
||||
|
||||
//rule: file exists
|
||||
$rule = $validator->addRule();
|
||||
$rule->validate($file, function($file) use($rule) {
|
||||
$path = isset($file->path) ? $file->path : "";
|
||||
$filesystem = new Filesystem();
|
||||
if (!$filesystem->exists($path)) {
|
||||
$rule->message(G::LoadTranslation('ID_NOT_EXISTS_FILE'));
|
||||
return self::INVALID;
|
||||
}
|
||||
return self::VALID;
|
||||
})
|
||||
->status(400)
|
||||
->log(function($rule) {
|
||||
/**
|
||||
* Levels supported by MonologProvider is:
|
||||
* 100 "DEBUG"
|
||||
* 200 "INFO"
|
||||
* 250 "NOTICE"
|
||||
* 300 "WARNING"
|
||||
* 400 "ERROR"
|
||||
* 500 "CRITICAL"
|
||||
* 550 "ALERT"
|
||||
* 600 "EMERGENCY"
|
||||
*/
|
||||
Bootstrap::registerMonologPhpUploadExecution('phpUpload', $rule->getStatus(), $rule->getMessage(), $rule->getData()->filename);
|
||||
});
|
||||
|
||||
//rule: extensions
|
||||
$rule = $validator->addRule();
|
||||
$rule->validate($file, function($file) use($rule) {
|
||||
$filesystem = new Filesystem();
|
||||
$extension = strtolower($filesystem->extension($file->filename));
|
||||
$extensions = [
|
||||
'pdf', 'gif', 'jpg', 'png', 'doc', 'docx', 'xls', 'xlsx', 'txt', 'mp4', 'mpv', 'mpeg', 'mpg', 'mov'
|
||||
];
|
||||
if (!in_array($extension, $extensions)) {
|
||||
$rule->message(G::LoadTranslation('ID_YOU_UPLOADED_AN_UNSUPPORTED_FILE_EXTENSION'));
|
||||
return self::INVALID;
|
||||
}
|
||||
return self::VALID;
|
||||
})
|
||||
->status(400)
|
||||
->log(function($rule) {
|
||||
/**
|
||||
* Levels supported by MonologProvider is:
|
||||
* 100 "DEBUG"
|
||||
* 200 "INFO"
|
||||
* 250 "NOTICE"
|
||||
* 300 "WARNING"
|
||||
* 400 "ERROR"
|
||||
* 500 "CRITICAL"
|
||||
* 550 "ALERT"
|
||||
* 600 "EMERGENCY"
|
||||
*/
|
||||
Bootstrap::registerMonologPhpUploadExecution('phpUpload', $rule->getStatus(), $rule->getMessage(), $rule->getData()->filename);
|
||||
});
|
||||
|
||||
//rule: file size
|
||||
$rule = $validator->addRule();
|
||||
$rule->validate($file, function($file) use($rule) {
|
||||
$path = isset($file->path) ? $file->path : "";
|
||||
$filesystem = new Filesystem();
|
||||
$limitSize = '10M';
|
||||
$size = $filesystem->size($path);
|
||||
$phpShorthandByte = new PhpShorthandByte();
|
||||
$postMaxSizeBytes = $phpShorthandByte->valueToBytes($limitSize);
|
||||
if ($size > $postMaxSizeBytes) {
|
||||
$rule->message(G::LoadTranslation('ID_YOUR_FILE_HAS_EXCEEDED', [$limitSize]));
|
||||
return self::INVALID;
|
||||
}
|
||||
return self::VALID;
|
||||
})
|
||||
->status(400)
|
||||
->log(function($rule) {
|
||||
/**
|
||||
* Levels supported by MonologProvider is:
|
||||
* 100 "DEBUG"
|
||||
* 200 "INFO"
|
||||
* 250 "NOTICE"
|
||||
* 300 "WARNING"
|
||||
* 400 "ERROR"
|
||||
* 500 "CRITICAL"
|
||||
* 550 "ALERT"
|
||||
* 600 "EMERGENCY"
|
||||
*/
|
||||
Bootstrap::registerMonologPhpUploadExecution('phpUpload', $rule->getStatus(), $rule->getMessage(), $rule->getData()->filename);
|
||||
});
|
||||
|
||||
return $validator->validate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the first error and call the argument function.
|
||||
*
|
||||
|
||||
@@ -4,8 +4,9 @@ var storeNotes;
|
||||
var appUid;
|
||||
var title;
|
||||
var summaryWindowOpened = false;
|
||||
|
||||
var toolTipChkSendMail;
|
||||
var caseNotesForm;
|
||||
var uploadItemsSize = 5;
|
||||
|
||||
function closeCaseNotesWindow(){
|
||||
if(Ext.get("caseNotesWindowPanel")){
|
||||
@@ -39,7 +40,7 @@ function openCaseNotesWindow(appUid1, delIndex, modalSw, appTitle, proUid, taskU
|
||||
url: "../appProxy/getNotesList?appUid=" + appUid + "&delIndex=" + delIndex + "&pro=" + proUid + "&tas=" + taskUid,
|
||||
root: 'notes',
|
||||
totalProperty: 'totalCount',
|
||||
fields: ['USR_USERNAME','USR_FIRSTNAME','USR_LASTNAME','USR_FULL_NAME','NOTE_DATE','NOTE_CONTENT', 'USR_UID', 'user'],
|
||||
fields: ['USR_USERNAME','USR_FIRSTNAME','USR_LASTNAME','USR_FULL_NAME','NOTE_DATE','NOTE_CONTENT', 'USR_UID','USR_EMAIL', 'attachments', 'user'],
|
||||
baseParams:{
|
||||
start:0,
|
||||
limit:startRecord+loadSize
|
||||
@@ -117,7 +118,8 @@ function openCaseNotesWindow(appUid1, delIndex, modalSw, appTitle, proUid, taskU
|
||||
'<td class="x-cnotes-label"><img border="0" src="../users/users_ViewPhotoGrid?pUID={USR_UID}" width="40" height="40"/></td>' +
|
||||
'<td class="x-cnotes-name">'+
|
||||
'<p class="user-from">{user}</p>'+
|
||||
'<p style="width: 370px; overflow-x:auto; height: 80px;", class="x-editable x-message">{NOTE_CONTENT}</p> '+
|
||||
'<div style="width: 370px; overflow-x:auto; height: 80px;" class="x-editable x-message"><p>{NOTE_CONTENT}</p>'+
|
||||
'<ul class="nav_list"><li>{files}</li></ul></div>' +
|
||||
'<p class="x-editable"><small>'+_('ID_POSTED_AT')+'<i> {NOTE_DATE}</i></small></p>'+
|
||||
'</td>' +
|
||||
'</tr>' +
|
||||
@@ -126,15 +128,16 @@ function openCaseNotesWindow(appUid1, delIndex, modalSw, appTitle, proUid, taskU
|
||||
itemSelector: 'div.x-cnotes-source',
|
||||
overClass: 'x-cnotes-over',
|
||||
selectedClass: 'x-cnotes-selected',
|
||||
singleSelect: true,
|
||||
singleSelect: false,
|
||||
|
||||
prepareData: function(data){
|
||||
//data.shortName = Ext.util.Format.ellipsis(data.name, 15);
|
||||
//data.sizeString = Ext.util.Format.fileSize(data.size);
|
||||
//data.dateString = data.lastmod.format("m/d/Y g:i a");
|
||||
|
||||
data.user = _FNF(data.USR_USERNAME, data.USR_FIRSTNAME, data.USR_LASTNAME);
|
||||
var i;
|
||||
data.user = _FNF(data.USR_EMAIL, data.USR_FIRSTNAME, data.USR_LASTNAME);
|
||||
data.NOTE_CONTENT = data.NOTE_CONTENT.replace(/\n/g,' <br/>');
|
||||
data.files = "";
|
||||
for (i = 0; i < data.attachments.length; i += 1) {
|
||||
data.files += "<a href='" + data.attachments[i].LINK + "' title='" + data.attachments[i].APP_DOC_FILENAME + "'>" + data.attachments[i].APP_DOC_FILENAME + "</a>";
|
||||
}
|
||||
return data;
|
||||
},
|
||||
|
||||
@@ -171,12 +174,101 @@ function openCaseNotesWindow(appUid1, delIndex, modalSw, appTitle, proUid, taskU
|
||||
}
|
||||
]
|
||||
});
|
||||
/**
|
||||
* Factory to create upload files field dinamically
|
||||
* @return {Object}
|
||||
*/
|
||||
function uploadFileFactory () {
|
||||
return {
|
||||
xtype: 'fileuploadfield',
|
||||
emptyText: '',
|
||||
fieldLabel: _('ID_ATTACH_FILE'),
|
||||
buttonText: _('ID_SELECT_FILE'),
|
||||
name: 'filesToUpload[]',
|
||||
allowBlank: true,
|
||||
width : '70%',
|
||||
validator: function (filePath) {
|
||||
var flag = false;
|
||||
if (caseNotesWindow.isVisible() === false || filePath === "") {
|
||||
return true;
|
||||
}
|
||||
filePath = filePath.replace(/^\s|\s$/g, ""); //trims string
|
||||
if (filePath.match(/([^\/\\]+)\.(pdf|gif|jpg|png|doc|docx|xls|xlsx|txt|mp4|mpv|mpeg|mpg|mov)$/i)) {
|
||||
flag = true;
|
||||
} else {
|
||||
messageError = _('ID_ERROR_UPLOADING_IMAGE_TYPE');
|
||||
PMExt.notify(_('ID_ERROR'), messageError);
|
||||
flag = false;
|
||||
this.setRawValue(null);
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
// Cases notes form to insert coments and attach files
|
||||
caseNotesForm = new Ext.FormPanel({
|
||||
width: 462,
|
||||
anchor: '100%',
|
||||
baseCls: 'x-plain',
|
||||
fileUpload: true,
|
||||
items:
|
||||
[
|
||||
{
|
||||
text : _('ID_NEW_NOTE'),
|
||||
xtype : 'textarea',
|
||||
id : 'caseNoteText',
|
||||
name : 'caseNoteText',
|
||||
width : '98%',
|
||||
height : 100,
|
||||
hideLabel: true,
|
||||
maxLengthText : 1500,
|
||||
allowBlank :false,
|
||||
selectOnFocus :true,
|
||||
enableKeyEvents: true,
|
||||
listeners : {
|
||||
scope : this,
|
||||
keyup : updateTextCtr,
|
||||
keydown: updateTextCtr,
|
||||
'change': function(field, newVal, oldVal) {
|
||||
var textAreaValue = newVal.replace(/^\s+/,'').replace(/\s+$/,'');
|
||||
field.setValue(textAreaValue.trim());
|
||||
Ext.getCmp('caseNoteText').focus(false, 200);
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
buttons:
|
||||
[
|
||||
{
|
||||
text: _('ID_ADD_FILE'),
|
||||
id: 'btnAddFile',
|
||||
type: 'button',
|
||||
handler: function () {
|
||||
var uploadFields = caseNotesForm.findByType('fileuploadfield');
|
||||
if (uploadFields.length >= 1 && uploadFields.length < uploadItemsSize) {
|
||||
if (uploadFields[uploadFields.length - 1].getValue() !== "") {
|
||||
caseNotesForm.add(uploadFileFactory());
|
||||
caseNotesForm.doLayout();
|
||||
caseNotesWindow.doLayout();
|
||||
} else {
|
||||
messageError = _('ID_PLEASE_SELECT_FILES_TO_UPLOAD');
|
||||
PMExt.notify(_('ID_ERROR'), messageError);
|
||||
}
|
||||
}
|
||||
if (uploadFields.length === uploadItemsSize - 1) {
|
||||
this.setDisabled(true);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
caseNotesWindow = new Ext.Window({
|
||||
title: _('ID_CASES_NOTES'), //Title of the Window
|
||||
id: 'caseNotesWindowPanel', //ID of the Window Panel
|
||||
width: 480, //Width of the Window
|
||||
resizable: true, //Resize of the Window, if false - it cannot be resized
|
||||
resizable: false, //Resize of the Window, if false - it cannot be resized
|
||||
closable: true, //Hide close button of the Window
|
||||
modal: modalSw, //When modal:true it make the window modal and mask everything behind it when displayed
|
||||
//iconCls: 'ICON_CASES_NOTES',
|
||||
@@ -203,33 +295,7 @@ function openCaseNotesWindow(appUid1, delIndex, modalSw, appTitle, proUid, taskU
|
||||
}
|
||||
}
|
||||
],
|
||||
tbar:[
|
||||
new Ext.form.TextArea({
|
||||
text : _('ID_NEW_NOTE'),
|
||||
xtype : 'textarea',
|
||||
id : 'caseNoteText',
|
||||
name : 'caseNoteText',
|
||||
width : 440,
|
||||
grow : true,
|
||||
height : 100,
|
||||
growMin: 100,
|
||||
growMax: 80,
|
||||
maxLengthText : 1500,
|
||||
allowBlank :false,
|
||||
selectOnFocus :true,
|
||||
enableKeyEvents: true,
|
||||
listeners : {
|
||||
scope : this,
|
||||
keyup : updateTextCtr,
|
||||
keydown: updateTextCtr,
|
||||
'change': function(field, newVal, oldVal){
|
||||
var textAreaValue = newVal.replace(/^\s+/,'').replace(/\s+$/,'');
|
||||
field.setValue(textAreaValue.trim());
|
||||
Ext.getCmp('caseNoteText').focus(false, 200);
|
||||
}
|
||||
}
|
||||
})
|
||||
],
|
||||
tbar:[caseNotesForm],
|
||||
rowtbar: [
|
||||
[
|
||||
{
|
||||
@@ -281,6 +347,9 @@ function openCaseNotesWindow(appUid1, delIndex, modalSw, appTitle, proUid, taskU
|
||||
this.loadMask = new Ext.LoadMask(this.body, {
|
||||
msg:_('ID_LOADING')
|
||||
});
|
||||
caseNotesForm.add(uploadFileFactory());
|
||||
caseNotesForm.doLayout();
|
||||
caseNotesWindow.doLayout();
|
||||
},
|
||||
close:function(){
|
||||
if (typeof(parent.setFlag) != 'undefined') {
|
||||
@@ -320,6 +389,7 @@ function updateTextCtr(body, event) {
|
||||
|
||||
function newNoteHandler()
|
||||
{
|
||||
var i;
|
||||
newNoteAreaActive = newNoteAreaActive ? false : true;
|
||||
if (newNoteAreaActive) {
|
||||
Ext.getCmp('addCancelBtn').setText('');
|
||||
@@ -349,6 +419,14 @@ function newNoteHandler()
|
||||
document.getElementById('countChar').style.display = 'block';
|
||||
Ext.getCmp('caseNoteText').focus();
|
||||
Ext.getCmp('caseNoteText').reset();
|
||||
uploadFields = caseNotesForm.findByType('fileuploadfield');
|
||||
// clean the first upload field
|
||||
uploadFields[0].setRawValue(null);
|
||||
for (i = 1; i < uploadFields.length; i += 1) {
|
||||
caseNotesForm.remove(uploadFields[i]);
|
||||
}
|
||||
caseNotesForm.doLayout();
|
||||
Ext.getCmp('btnAddFile').setDisabled(false);
|
||||
document.getElementById('countChar').innerHTML = '1500';
|
||||
caseNotesWindow.doLayout();
|
||||
}
|
||||
@@ -356,81 +434,76 @@ function newNoteHandler()
|
||||
caseNotesWindow.doLayout();
|
||||
}
|
||||
|
||||
function sendNote()
|
||||
{
|
||||
function sendNote(){
|
||||
var noteText = Ext.getCmp('caseNoteText').getValue();
|
||||
|
||||
if (noteText == "") {
|
||||
return false;
|
||||
}
|
||||
|
||||
newNoteHandler();
|
||||
|
||||
Ext.getCmp('caseNoteText').focus();
|
||||
Ext.getCmp('caseNoteText').reset();
|
||||
Ext.getCmp('caseNoteText').setDisabled(true);
|
||||
Ext.getCmp('sendBtn').setDisabled(true);
|
||||
Ext.getCmp('addCancelBtn').setDisabled(true);
|
||||
statusBarMessage( _('ID_CASES_NOTE_POSTING'), true);
|
||||
Ext.Ajax.request({
|
||||
url : '../appProxy/postNote' ,
|
||||
params : {
|
||||
appUid: appUid,
|
||||
noteText: noteText,
|
||||
swSendMail: (Ext.getCmp("chkSendMail").checked == true)? 1 : 0
|
||||
},
|
||||
success: function ( result, request ) {
|
||||
var data = Ext.util.JSON.decode(result.responseText);
|
||||
if(data.success=="success"){
|
||||
Ext.getCmp('caseNoteText').setDisabled(false);
|
||||
Ext.getCmp('sendBtn').setDisabled(false);
|
||||
Ext.getCmp('addCancelBtn').setDisabled(false);
|
||||
if (data.message != '') {
|
||||
Ext.Msg.show({
|
||||
|
||||
caseNotesForm.getForm().submit({
|
||||
clientValidation: true,
|
||||
url: '../appProxy/postNote',
|
||||
params: {
|
||||
appUid: appUid,
|
||||
noteText: noteText,
|
||||
swSendMail: (Ext.getCmp("chkSendMail").checked === true) ? 1 : 0
|
||||
},
|
||||
success: function ( result, request ) {
|
||||
var data = Ext.util.JSON.decode(request.response.responseText);
|
||||
if(data.success=="success"){
|
||||
Ext.getCmp('caseNoteText').setDisabled(false);
|
||||
Ext.getCmp('sendBtn').setDisabled(false);
|
||||
Ext.getCmp('addCancelBtn').setDisabled(false);
|
||||
if (data.message != '') {
|
||||
Ext.Msg.show({
|
||||
title : _('ID_CASES_NOTE_POST_ERROR'),
|
||||
msg : data.message,
|
||||
icon : Ext.MessageBox.WARNING,
|
||||
buttons : Ext.Msg.OK,
|
||||
fn : function(btn) {
|
||||
statusBarMessage( _('ID_CASES_NOTE_POST_SUCCESS'), false,true);
|
||||
storeNotes.load();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
statusBarMessage( _('ID_CASES_NOTE_POST_SUCCESS'), false,true);
|
||||
storeNotes.load();
|
||||
}
|
||||
} else if (data.lostSession) {
|
||||
Ext.Msg.show({
|
||||
title : _('ID_CASES_NOTE_POST_ERROR'),
|
||||
msg : data.message,
|
||||
icon : Ext.MessageBox.WARNING,
|
||||
icon : Ext.MessageBox.ERROR,
|
||||
buttons : Ext.Msg.OK,
|
||||
fn : function(btn) {
|
||||
statusBarMessage( _('ID_CASES_NOTE_POST_SUCCESS'), false,true);
|
||||
storeNotes.load();
|
||||
try {
|
||||
prnt = parent.parent;
|
||||
top.location = top.location;
|
||||
} catch (err) {
|
||||
parent.location = parent.location;
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
statusBarMessage( _('ID_CASES_NOTE_POST_SUCCESS'), false,true);
|
||||
storeNotes.load();
|
||||
Ext.getCmp('caseNoteText').setDisabled(false);
|
||||
Ext.getCmp('sendBtn').setDisabled(false);
|
||||
Ext.getCmp('addCancelBtn').setDisabled(false);
|
||||
statusBarMessage( _('ID_CASES_NOTE_POST_ERROR'), false,false);
|
||||
Ext.MessageBox.alert(_('ID_CASES_NOTE_POST_ERROR'), data.message);
|
||||
|
||||
}
|
||||
} else if (data.lostSession) {
|
||||
Ext.Msg.show({
|
||||
title : _('ID_CASES_NOTE_POST_ERROR'),
|
||||
msg : data.message,
|
||||
icon : Ext.MessageBox.ERROR,
|
||||
buttons : Ext.Msg.OK,
|
||||
fn : function(btn) {
|
||||
try
|
||||
{
|
||||
prnt = parent.parent;
|
||||
top.location = top.location;
|
||||
}
|
||||
catch (err)
|
||||
{
|
||||
parent.location = parent.location;
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Ext.getCmp('caseNoteText').setDisabled(false);
|
||||
Ext.getCmp('sendBtn').setDisabled(false);
|
||||
Ext.getCmp('addCancelBtn').setDisabled(false);
|
||||
statusBarMessage( _('ID_CASES_NOTE_POST_ERROR'), false,false);
|
||||
Ext.MessageBox.alert(_('ID_CASES_NOTE_POST_ERROR'), data.message);
|
||||
|
||||
},
|
||||
failure: function ( result, request) {
|
||||
statusBarMessage( _('ID_CASES_NOTE_POST_FAILED'), false,false);
|
||||
Ext.MessageBox.alert(_('ID_CASES_NOTE_POST_FAILED'), result.responseText);
|
||||
}
|
||||
},
|
||||
failure: function ( result, request) {
|
||||
statusBarMessage( _('ID_CASES_NOTE_POST_FAILED'), false,false);
|
||||
Ext.MessageBox.alert(_('ID_CASES_NOTE_POST_FAILED'), result.responseText);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -974,6 +974,7 @@ if (!defined('EXECUTE_BY_CRON')) {
|
||||
$noLoginFiles[] = 'cases_SaveData';
|
||||
$noLoginFiles[] = 'cases_Derivate';
|
||||
$noLoginFiles[] = 'cases_NextStep';
|
||||
$noLoginFiles[] = 'casesShowCaseNotes';
|
||||
$noLoginFiles[] = 'genericAjax';
|
||||
$noLoginFiles[] = 'casesSaveDataView';
|
||||
$noLoginFiles[] = 'propelTableAjax';
|
||||
|
||||
Reference in New Issue
Block a user