From 92852936721cd2a7433b781c70f8f7495e42420c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Mon, 7 Dec 2020 22:42:37 +0000 Subject: [PATCH] PMCORE-2500 --- .../translations/english/processmaker.en.po | 24 ++++++ workflow/engine/data/mysql/insert.sql | 4 + workflow/engine/menus/home.php | 84 +++++++++++++++++++ .../src/ProcessMaker/Services/Api/Home.php | 74 ++++++++++++++++ 4 files changed, 186 insertions(+) create mode 100644 workflow/engine/menus/home.php diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index 7625ca94f..ed7fba400 100755 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -19475,6 +19475,18 @@ msgstr "Successfully connected to MySQL Server" msgid "My account" msgstr "My account" +# TRANSLATION +# LABEL/ID_MY_CASES +#: LABEL/ID_MY_CASES +msgid "My Cases" +msgstr "My Cases" + +# TRANSLATION +# LABEL/ID_MY_DOCUMENTS +#: LABEL/ID_MY_DOCUMENTS +msgid "My Documents" +msgstr "My Documents" + # TRANSLATION # LABEL/ID_MY_DRAFTS #: LABEL/ID_MY_DRAFTS @@ -24977,6 +24989,12 @@ msgstr "Failed saving Supervisor Assigned to process" msgid "Supervisor has been removed successfully from Process" msgstr "Supervisor has been removed successfully from Process" +# TRANSLATION +# LABEL/ID_SUPERVISOR_TASKS +#: LABEL/ID_SUPERVISOR_TASKS +msgid "Supervisor Tasks" +msgstr "Supervisor Tasks" + # TRANSLATION # LABEL/ID_SUPERVISOR_UNAVAILABLE #: LABEL/ID_SUPERVISOR_UNAVAILABLE @@ -25241,6 +25259,12 @@ msgstr "Overdue" msgid "Task properties has been saved successfully" msgstr "Task properties has been saved successfully" +# TRANSLATION +# LABEL/ID_TASK_REASSIGNMENTS +#: LABEL/ID_TASK_REASSIGNMENTS +msgid "Task Reassignments" +msgstr "Task Reassignments" + # TRANSLATION # LABEL/ID_TASK_TRANSFER #: LABEL/ID_TASK_TRANSFER diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index c7d1cd93a..eb00051a6 100755 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -60135,6 +60135,8 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_MYSQL_ERROR','en','MySQL error: {0}','2014-01-15') , ( 'LABEL','ID_MYSQL_SUCCESS_CONNECT','en','Successfully connected to MySQL Server','2015-04-08') , ( 'LABEL','ID_MY_ACCOUNT','en','My account','2014-01-15') , +( 'LABEL','ID_MY_CASES','en','My Cases','2020-12-07') , +( 'LABEL','ID_MY_DOCUMENTS','en','My Documents','2014-12-07') , ( 'LABEL','ID_MY_DRAFTS','en','My Drafts','2014-01-15') , ( 'LABEL','ID_MY_INBOX','en','My inbox','2014-01-15') , ( 'LABEL','ID_NAME','en','Name','2014-01-15') , @@ -61080,6 +61082,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_SUPERVISOR_DOES_NOT_HAVE_DYNAFORMS','en','Supervisor does not have a permission for Dynaform(s).','2015-05-28') , ( 'LABEL','ID_SUPERVISOR_FAILED','en','Failed saving Supervisor Assigned to process','2014-01-15') , ( 'LABEL','ID_SUPERVISOR_REMOVED','en','Supervisor has been removed successfully from Process','2014-01-15') , +( 'LABEL','ID_SUPERVISOR_TASKS','en','Supervisor Tasks','2020-12-07') , ( 'LABEL','ID_SUPERVISOR_UNAVAILABLE','en','No supervisors are available. All supervisors have been already assigned.','2014-01-15') , ( 'LABEL','ID_SUPPORT','en','Support','2014-10-20') , ( 'LABEL','ID_SWITCH_EDITOR','en','Switch Editor','2014-01-15') , @@ -61126,6 +61129,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_TASK_NO_STEPS','en','The task doesn''t have any steps','2014-01-15') , ( 'LABEL','ID_TASK_OVERDUE','en','Overdue','2015-06-09') , ( 'LABEL','ID_TASK_PROPERTIES_SAVE','en','Task properties has been saved successfully','2014-01-15') , +( 'LABEL','ID_TASK_REASSIGNMENTS','en','Task Reassignments','2020-12-07') , ( 'LABEL','ID_TASK_TRANSFER','en','Task Transfer Date','2014-01-15') , ( 'LABEL','ID_TASK_WAS_ASSIGNED_TO_USER','en','Manual assignment shouldn''t be used with sub-processes.
The task "{0}" from case {1} was assigned to user {2} ( {3} {4} )','2015-02-24') , ( 'LABEL','ID_TAS_DURATION_REQUIRE','en','Duration task required','2014-0f-15') , diff --git a/workflow/engine/menus/home.php b/workflow/engine/menus/home.php new file mode 100644 index 000000000..b5b8f23b6 --- /dev/null +++ b/workflow/engine/menus/home.php @@ -0,0 +1,84 @@ +AddIdRawOption('SEARCHS', '', G::LoadTranslation('ID_HOME'), '', '', 'blockHeader'); +$G_TMP_MENU->AddIdRawOption( + 'CASES_MY_CASES', + '/', + G::LoadTranslation('ID_MY_CASES'), + 'fas fa-sliders-h' +); +if ($RBAC->userCanAccess('PM_ALLCASES') == 1) { + $G_TMP_MENU->AddIdRawOption( + 'CASES_SEARCH', + 'casesListExtJs?action=search', + G::LoadTranslation('ID_ADVANCEDSEARCH'), + 'fas fa-search' + ); +} + + +// Tasks section +$G_TMP_MENU->AddIdRawOption('FOLDERS', '', G::LoadTranslation('ID_TASKS'), '', '', 'blockHeader'); +$G_TMP_MENU->AddIdRawOption( + 'CASES_INBOX', + 'casesListExtJs?action=todo', + G::LoadTranslation('ID_INBOX'), + 'far fa-check-circle' +); +$G_TMP_MENU->AddIdRawOption( + 'CASES_DRAFT', + 'casesListExtJs?action=draft', + G::LoadTranslation('ID_DRAFT'), + 'far fa-edit' +); +$G_TMP_MENU->AddIdRawOption( + 'CASES_PAUSED', + 'casesListExtJs?action=paused', + G::LoadTranslation('ID_PAUSED'), + 'far fa-pause-circle' +); +$G_TMP_MENU->AddIdRawOption( + 'CASES_SELFSERVICE', + 'casesListExtJs?action=selfservice', + G::LoadTranslation('ID_UNASSIGNED'), + 'fas fa-crosshairs' +); + + +// Supervisor Tasks section +$G_TMP_MENU->AddIdRawOption('ADMIN', '', G::LoadTranslation('ID_SUPERVISOR_TASKS'), '', '', 'blockHeader'); +/*----------------------------------********---------------------------------*/ +$licensedFeatures = PMLicensedFeatures::getSingleton(); +if ($licensedFeatures->verifyfeature('7TTeDBQeWRoZTZKYjh4eFpYUlRDUUEyVERPU3FxellWank=')) { + $G_TMP_MENU->AddIdRawOption( + 'CONSOLIDATED_CASES', + 'casesConsolidatedListExtJs?action=consolidated', + G::LoadTranslation('ID_BATCH_ROUTING'), + 'fas fa-bars' + ); +} +/*----------------------------------********---------------------------------*/ +if ($RBAC->userCanAccess('PM_REASSIGNCASE') == 1 || $RBAC->userCanAccess('PM_REASSIGNCASE_SUPERVISOR') == 1) { + $G_TMP_MENU->AddIdRawOption( + 'CASES_TO_REASSIGN', + 'casesListExtJs?action=to_reassign', + G::LoadTranslation('ID_TASK_REASSIGNMENTS'), + 'fas fa-arrows-alt' + ); +} + + +// Documents section +if ($RBAC->userCanAccess('PM_FOLDERS_ALL') == 1 || $RBAC->userCanAccess('PM_FOLDERS_OWNER') == 1) { + $G_TMP_MENU->AddIdRawOption('DOCUMENTS', '', G::LoadTranslation('ID_FOLDERS'), '', '', 'blockHeader'); + $G_TMP_MENU->AddIdRawOption( + 'CASES_FOLDERS', + 'casesStartPage?action=documents', + G::LoadTranslation('ID_MY_DOCUMENTS'), + 'fas fa-bars' + ); +} diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Home.php b/workflow/engine/src/ProcessMaker/Services/Api/Home.php index c1543d20c..c450ce729 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Home.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Home.php @@ -4,7 +4,9 @@ namespace ProcessMaker\Services\Api; use Exception; use Luracast\Restler\RestException; +use Menu; use ProcessMaker\BusinessModel\Cases\Draft; +use ProcessMaker\BusinessModel\Cases\Filter; use ProcessMaker\BusinessModel\Cases\Inbox; use ProcessMaker\BusinessModel\Cases\Participated; use ProcessMaker\BusinessModel\Cases\Paused; @@ -14,6 +16,7 @@ use ProcessMaker\BusinessModel\Cases\Unassigned; use ProcessMaker\Model\User; use ProcessMaker\Services\Api; use RBAC; +use stdClass; class Home extends Api { @@ -460,4 +463,75 @@ class Home extends Api throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } + + /** + * Get home menu + * + * @url GET /menu + * + * @return array + * + * @access protected + */ + public function getMenu() + { + // Parse menu definition + $menuInstance = new Menu(); + $menuInstance->load('home'); + + // Initializing variables + $optionsWithCounter = ['CASES_INBOX', 'CASES_DRAFT', 'CASES_PAUSED', 'CASES_SELFSERVICE']; + $menuHome = []; + + // Build the Home menu + for ($i = 0; $i < count($menuInstance->Options); $i++) { + // Initializing option object + $option = new stdClass(); + + // Build the object according to the option menu type + if ($menuInstance->Types[$i] === 'blockHeader') { + $option->header = true; + $option->title = $menuInstance->Labels[$i]; + $option->hiddenOnCollapse = true; + } else { + $option->href = $menuInstance->Options[$i]; + $option->id = $menuInstance->Id[$i]; + $option->title = $menuInstance->Labels[$i]; + $option->icon = $menuInstance->Icons[$i]; + } + + // Add additional attributes for some options + if (in_array($menuInstance->Id[$i], $optionsWithCounter)) { + $option->badge = new stdClass(); + $option->badge->text = '0'; + $option->badge->class = 'badge-custom'; + } + if ($menuInstance->Id[$i] === 'CASES_SEARCH') { + // Get advanced search filters for the current user + $filters = Filter::getByUser($this->getUserId()); + + // Initializing + $child = []; + foreach ($filters as $filter) { + $childFilter = new stdClass(); + $childFilter->id = $filter->id; + $childFilter->page = '/advanced-search'; + $childFilter->href = "{$childFilter->page}/{$filter->id}"; + $childFilter->title = $filter->name; + $childFilter->icon = 'fas fa-circle'; + $childFilter->filters = $filter->filters; + $child[] = $childFilter; + } + + // Adding filters to the "Advanced Search" option + $option->child = $child; + } + + // Add option to the menu + $menuHome[] = $option; + } + + // Return menu + return $menuHome; + } }