diff --git a/workflow/engine/classes/Cases.php b/workflow/engine/classes/Cases.php index 0547a104c..1dd15d01a 100644 --- a/workflow/engine/classes/Cases.php +++ b/workflow/engine/classes/Cases.php @@ -7,6 +7,7 @@ use ProcessMaker\ChangeLog\ChangeLog; /*----------------------------------********---------------------------------*/ use ProcessMaker\Core\System; use ProcessMaker\Plugins\PluginRegistry; +use ProcessMaker\Util\DateTime; /** * A Cases object where you can do start, load, update, refresh about cases @@ -7213,6 +7214,7 @@ class Cases * @param string $type * @param string $userUid * @return array|stdclass|string + * */ public function getCaseNotes($applicationID, $type = 'array', $userUid = '') { @@ -7225,7 +7227,7 @@ class Cases if (is_array($appNotes)) { switch ($type) { case 'array': - $response = array(); + $response = []; foreach ($appNotes['array']['notes'] as $key => $value) { $list = array(); $list['FULL_NAME'] = $value['USR_FIRSTNAME'] . " " . $value['USR_LASTNAME']; @@ -7233,6 +7235,9 @@ class Cases if ($keys != 'USR_FIRSTNAME' && $keys != 'USR_LASTNAME' && $keys != 'USR_EMAIL') { $list[$keys] = $value; } + if ($keys == 'NOTE_DATE') { + $list[$keys] = DateTime::convertUtcToTimeZone($value); + } } $response[$key + 1] = $list; } @@ -7245,6 +7250,9 @@ class Cases if ($keys != 'USR_FIRSTNAME' && $keys != 'USR_LASTNAME' && $keys != 'USR_EMAIL') { $response->$key->$keys = $value; } + if ($keys == 'NOTE_DATE') { + $response->$key->$keys = DateTime::convertUtcToTimeZone($value); + } } } break; @@ -7254,7 +7262,7 @@ class Cases $response .= $value['USR_FIRSTNAME'] . " " . $value['USR_LASTNAME'] . " " . "(" . $value['USR_USERNAME'] . ")" . - " " . $value['NOTE_CONTENT'] . " " . " (" . $value['NOTE_DATE'] . " ) " . + " " . $value['NOTE_CONTENT'] . " " . " (" . DateTime::convertUtcToTimeZone($value['NOTE_DATE']) . " ) " . " \n"; } break; diff --git a/workflow/engine/classes/model/AppNotes.php b/workflow/engine/classes/model/AppNotes.php index e40a75068..5c4a773c7 100644 --- a/workflow/engine/classes/model/AppNotes.php +++ b/workflow/engine/classes/model/AppNotes.php @@ -1,7 +1,7 @@ getCaseNotes() + * @see \AppProxy->getNotesList() + * @see \Home->getAppsData() + * @see workflow/engine/methods/cases/caseNotesAjax.php->getNotesList() + * @see \ProcessMaker\BusinessModel\Cases->getCaseNotes() + * @see \ProcessMaker\Services\Api\Light->doGetCaseNotes() + * + * @link https://wiki.processmaker.com/3.2/Case_Notes#Viewing_Existing_Case_Notes + */ + public function getNotesList( $appUid, $usrUid = '', $start = '', @@ -25,70 +50,71 @@ class AppNotes extends BaseAppNotes $dir = 'DESC', $dateFrom = '', $dateTo = '', - $search = '') - { - $Criteria = new Criteria( 'workflow' ); - $Criteria->clearSelectColumns(); + $search = '' + ) { + $criteria = new Criteria('workflow'); + $criteria->clearSelectColumns(); - $Criteria->addSelectColumn( AppNotesPeer::APP_UID ); - $Criteria->addSelectColumn( AppNotesPeer::USR_UID ); - $Criteria->addSelectColumn( AppNotesPeer::NOTE_DATE ); - $Criteria->addSelectColumn( AppNotesPeer::NOTE_CONTENT ); - $Criteria->addSelectColumn( AppNotesPeer::NOTE_TYPE ); - $Criteria->addSelectColumn( AppNotesPeer::NOTE_AVAILABILITY ); - $Criteria->addSelectColumn( AppNotesPeer::NOTE_ORIGIN_OBJ ); - $Criteria->addSelectColumn( AppNotesPeer::NOTE_AFFECTED_OBJ1 ); - $Criteria->addSelectColumn( AppNotesPeer::NOTE_AFFECTED_OBJ2 ); - $Criteria->addSelectColumn( AppNotesPeer::NOTE_RECIPIENTS ); - $Criteria->addSelectColumn( UsersPeer::USR_USERNAME ); - $Criteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); - $Criteria->addSelectColumn( UsersPeer::USR_LASTNAME ); - $Criteria->addSelectColumn( UsersPeer::USR_EMAIL ); + $criteria->addSelectColumn(AppNotesPeer::APP_UID); + $criteria->addSelectColumn(AppNotesPeer::USR_UID); + $criteria->addSelectColumn(AppNotesPeer::NOTE_DATE); + $criteria->addSelectColumn(AppNotesPeer::NOTE_CONTENT); + $criteria->addSelectColumn(AppNotesPeer::NOTE_TYPE); + $criteria->addSelectColumn(AppNotesPeer::NOTE_AVAILABILITY); + $criteria->addSelectColumn(AppNotesPeer::NOTE_ORIGIN_OBJ); + $criteria->addSelectColumn(AppNotesPeer::NOTE_AFFECTED_OBJ1); + $criteria->addSelectColumn(AppNotesPeer::NOTE_AFFECTED_OBJ2); + $criteria->addSelectColumn(AppNotesPeer::NOTE_RECIPIENTS); + $criteria->addSelectColumn(UsersPeer::USR_USERNAME); + $criteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); + $criteria->addSelectColumn(UsersPeer::USR_LASTNAME); + $criteria->addSelectColumn(UsersPeer::USR_EMAIL); - $Criteria->addJoin( AppNotesPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN ); + $criteria->addJoin(AppNotesPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - $Criteria->add( AppNotesPeer::APP_UID, $appUid, Criteria::EQUAL ); + $criteria->add(AppNotesPeer::APP_UID, $appUid, Criteria::EQUAL); if ($usrUid != '') { - $Criteria->add( AppNotesPeer::USR_UID, $usrUid, Criteria::EQUAL ); + $criteria->add(AppNotesPeer::USR_UID, $usrUid, Criteria::EQUAL); } if ($dateFrom != '') { - $Criteria->add( AppNotesPeer::NOTE_DATE, $dateFrom, Criteria::GREATER_EQUAL ); + $criteria->add(AppNotesPeer::NOTE_DATE, $dateFrom, Criteria::GREATER_EQUAL); } if ($dateTo != '') { - $Criteria->add( AppNotesPeer::NOTE_DATE, $dateTo, Criteria::LESS_EQUAL ); + $criteria->add(AppNotesPeer::NOTE_DATE, $dateTo, Criteria::LESS_EQUAL); } if ($search != '') { - $Criteria->add( AppNotesPeer::NOTE_CONTENT, '%'.$search.'%', Criteria::LIKE ); + $criteria->add(AppNotesPeer::NOTE_CONTENT, '%' . $search . '%', Criteria::LIKE); } if ($dir == 'DESC') { - $Criteria->addDescendingOrderByColumn($sort); + $criteria->addDescendingOrderByColumn($sort); } else { - $Criteria->addAscendingOrderByColumn($sort); + $criteria->addAscendingOrderByColumn($sort); } - $response = array (); - $totalCount = AppNotesPeer::doCount( $Criteria ); + $response = []; + $totalCount = AppNotesPeer::doCount($criteria); $response['totalCount'] = $totalCount; - $response['notes'] = array (); + $response['notes'] = []; if ($start != '') { - $Criteria->setLimit( $limit ); - $Criteria->setOffset( $start ); + $criteria->setLimit($limit); + $criteria->setOffset($start); } - $oDataset = appNotesPeer::doSelectRS( $Criteria ); - $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next(); + $dataset = AppNotesPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $dataset->next(); - while ($aRow = $oDataset->getRow()) { - $aRow['NOTE_CONTENT'] = stripslashes($aRow['NOTE_CONTENT']); - $response['notes'][] = $aRow; - $oDataset->next(); + while ($row = $dataset->getRow()) { + $row['NOTE_CONTENT'] = stripslashes($row['NOTE_CONTENT']); + $response['notes'][] = $row; + $dataset->next(); } - $result['criteria'] = $Criteria; + $result = []; + $result['criteria'] = $criteria; $result['array'] = $response; return $result; diff --git a/workflow/engine/controllers/appProxy.php b/workflow/engine/controllers/appProxy.php index b54ca5502..3d9f519f4 100644 --- a/workflow/engine/controllers/appProxy.php +++ b/workflow/engine/controllers/appProxy.php @@ -1,4 +1,6 @@ message = G::LoadTranslation('ID_LOGIN_AGAIN'); @@ -23,15 +25,22 @@ class AppProxy extends HttpProxyController * @param int $httpData->start * @param int $httpData->limit * @param string $httpData->appUid (optionalif it is not passed try use $_SESSION['APPLICATION']) - * @return array containg the case notes + * @return array containing the case notes + * + * @see workflow/engine/methods/cases/open.php + * @see workflow/engine/methods/cases/casesListExtJs.php + * @see workflow/engine/methods/cases/casesConsolidatedListExtJs.php + * + * @link https://wiki.processmaker.com/3.2/Case_Notes + * @link https://wiki.processmaker.com/3.2/Cases/Case_Notes */ - function getNotesList ($httpData) + function getNotesList($httpData) { if (!isset($_SESSION['USER_LOGGED'])) { $response = new stdclass(); $response->message = G::LoadTranslation('ID_LOGIN_AGAIN'); $response->lostSession = true; - print G::json_encode( $response ); + print G::json_encode($response); die(); } @@ -66,8 +75,7 @@ class AppProxy extends HttpProxyController $httpData->pro = $caseLoad['PRO_UID']; } - if(!isset($httpData->pro) || empty($httpData->pro) ) - { + if (!isset($httpData->pro) || empty($httpData->pro)) { $proUid = $_SESSION['PROCESS']; } else { $proUid = $httpData->pro; @@ -80,12 +88,15 @@ class AppProxy extends HttpProxyController } $usrUid = $_SESSION['USER_LOGGED']; - $respView = $case->getAllObjectsFrom($proUid, $appUid, $tasUid, $usrUid, "VIEW", $delIndex); + $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 array ('totalCount' => 0,'notes' => array (),'noPerms' => 1 - ); + return [ + 'totalCount' => 0, + 'notes' => [], + 'noPerms' => 1 + ]; } $usrUid = isset($_SESSION['USER_LOGGED']) ? $_SESSION['USER_LOGGED'] : ""; @@ -93,6 +104,12 @@ class AppProxy extends HttpProxyController $response = $appNotes->getNotesList($appUid, '', $httpData->start, $httpData->limit); $response = AppNotes::applyHtmlentitiesInNotes($response); + $iterator = 0; + foreach ($response['array']['notes'] as $value) { + $response ['array']['notes'][$iterator]['NOTE_DATE'] = DateTime::convertUtcToTimeZone($value['NOTE_DATE']); + $iterator++; + } + require_once("classes/model/Application.php"); $oApplication = new Application(); $aApplication = $oApplication->Load($appUid); diff --git a/workflow/engine/controllers/home.php b/workflow/engine/controllers/home.php index 4feb31204..290e07545 100644 --- a/workflow/engine/controllers/home.php +++ b/workflow/engine/controllers/home.php @@ -1,6 +1,7 @@ render(); } + /** + * Get the cases information + * + * @param string $type + * @param integer $start + * @param integer $limit + * @param string $user + * @param string $filter + * @param string $search + * @param string $process + * @param string $status + * @param string $dateFrom + * @param string $dateTo + * @param string $callback + * @param string $dir + * @param string $sort + * @param string $category + * @return array + * + * @see \Home->appAdvancedSearch() + * @see \Home->appList() + * @see \Home->getApps() + */ public function getAppsData( $type, $start = null, @@ -404,10 +428,10 @@ class Home extends Controller $solrEnabled = false; if (( - $type == "todo" || $type == "draft" || $type == "paused" || $type == "sent" || - $type == "selfservice" || $type == "unassigned" || $type == "search" - ) && - (($solrConf = System::solrEnv()) !== false) + $type == "todo" || $type == "draft" || $type == "paused" || $type == "sent" || + $type == "selfservice" || $type == "unassigned" || $type == "search" + ) && + (($solrConf = System::solrEnv()) !== false) ) { $ApplicationSolrIndex = new AppSolr( $solrConf["solr_enabled"], @@ -443,21 +467,21 @@ class Home extends Controller $category ); } else { - $dataList['userId'] = $user; - $dataList['userUid'] = $this->userUid; - $dataList['start'] = $start; - $dataList['limit'] = $limit; - $dataList['filter'] = $filter; - $dataList['search'] = $search; - $dataList['process'] = $process; - $dataList['status'] = $status; + $dataList['userId'] = $user; + $dataList['userUid'] = $this->userUid; + $dataList['start'] = $start; + $dataList['limit'] = $limit; + $dataList['filter'] = $filter; + $dataList['search'] = $search; + $dataList['process'] = $process; + $dataList['status'] = $status; $dataList['dateFrom'] = $dateFrom; - $dataList['dateTo'] = $dateTo; + $dataList['dateTo'] = $dateTo; $dataList['callback'] = $callback; - $dataList['dir'] = $dir; - $dataList['sort'] = $sort; + $dataList['dir'] = $dir; + $dataList['sort'] = $sort; $dataList['category'] = $category; - $dataList['action'] = $type; + $dataList['action'] = $type; $dataList['dir'] = 'DESC'; /*----------------------------------********---------------------------------*/ if (true) { @@ -527,8 +551,9 @@ class Home extends Controller $generalConfCasesList = $conf->getConfiguration('ENVIRONMENT_SETTINGS', ''); $cases['data'][$i]['DEL_DELEGATE_DATE'] = ''; if (!empty(config("system.workspace"))) { - if (isset( $generalConfCasesList['casesListDateFormat'] ) && ! empty( $generalConfCasesList['casesListDateFormat'] )) { - $cases['data'][$i]['DEL_DELEGATE_DATE'] = $conf->getSystemDate($row['DEL_DELEGATE_DATE'], 'casesListDateFormat'); + if (isset($generalConfCasesList['casesListDateFormat']) && !empty($generalConfCasesList['casesListDateFormat'])) { + $cases['data'][$i]['DEL_DELEGATE_DATE'] = $conf->getSystemDate($row['DEL_DELEGATE_DATE'], + 'casesListDateFormat'); } } if ($cases['data'][$i]['DEL_DELEGATE_DATE'] == '') { @@ -542,6 +567,12 @@ class Home extends Controller $notes = $appNotes->getNotesList($row['APP_UID'], '', $notesStart, $notesLimit); $notes = AppNotes::applyHtmlentitiesInNotes($notes); + $iterator = 0; + foreach ($notes['array']['notes'] as $val) { + $notes ['array']['notes'][$iterator]['NOTE_DATE'] = DateTime::convertUtcToTimeZone($val['NOTE_DATE']); + $iterator++; + } + $notes = $notes['array']; $cases['data'][$i]['NOTES_COUNT'] = $notes['totalCount']; diff --git a/workflow/engine/methods/cases/caseNotesAjax.php b/workflow/engine/methods/cases/caseNotesAjax.php index fcc30a088..b2781388d 100644 --- a/workflow/engine/methods/cases/caseNotesAjax.php +++ b/workflow/engine/methods/cases/caseNotesAjax.php @@ -1,4 +1,8 @@ sessionId); @@ -934,6 +942,11 @@ function getCaseNotes($params) $ws = new WsBase(); $res = $ws->getCaseNotes($params->applicationID, $params->userUid); + foreach ($res->notes as $key => $value) { + $res->notes[$key]['note_date'] = DateTime::convertUtcToTimeZone($res->notes[$key]['note_date']); + + } + return $res; }