diff --git a/apps/Core/Components/Devtools/Modules/ModulesComponent.php b/apps/Core/Components/Devtools/Modules/ModulesComponent.php index 4373ef18d..3a02cda21 100644 --- a/apps/Core/Components/Devtools/Modules/ModulesComponent.php +++ b/apps/Core/Components/Devtools/Modules/ModulesComponent.php @@ -290,7 +290,7 @@ public function viewAction() if ($module['module_details']['module_type'] === 'components') { $moduleLocation = 'apps/' . ucfirst($module['module_details']['app_type']) . '/Components/'; if ($module['module_details']['menu']) { - $this->view->moduleMenu = $this->helper->encode($this->helper->decode($module['module_details']['menu'], true)); + $this->view->moduleMenu = $this->helper->encode($module['module_details']['menu']); $this->view->menuBaseStructure = $this->basepackages->menus->getMenusForAppType($module['module_details']['app_type']); } else { $this->view->moduleMenu = false; diff --git a/apps/Core/Components/Errors/ErrorsComponent.php b/apps/Core/Components/Errors/ErrorsComponent.php index 343c68b8e..9dae5d098 100644 --- a/apps/Core/Components/Errors/ErrorsComponent.php +++ b/apps/Core/Components/Errors/ErrorsComponent.php @@ -20,9 +20,16 @@ public function controllerNotFoundAction() $this->addResponse('Component Not Found', 1); } - public function controllerDependencyErrorAction() + public function controllerPackageDependencyErrorAction() { - $this->view->pick('common/errors/controllerdependencyerror'); + $this->view->pick('errors/controllerdependencyerror'); + + $this->addResponse('Component Dependency Error', 1); + } + + public function controllerViewDependencyErrorAction() + { + $this->view->pick('errors/controllerdependencyerror'); $this->addResponse('Component Dependency Error', 1); } diff --git a/apps/Core/Components/System/Api/Client/Services/ServicesComponent.php b/apps/Core/Components/System/Api/Client/Services/ServicesComponent.php index fe096f34f..56143d1c7 100644 --- a/apps/Core/Components/System/Api/Client/Services/ServicesComponent.php +++ b/apps/Core/Components/System/Api/Client/Services/ServicesComponent.php @@ -39,7 +39,9 @@ public function viewAction() } if (isset($api['used_by']) && $api['used_by'] !== '') { - $api['used_by'] = $this->helper->decode($api['used_by'], true); + if (is_string($api['used_by'])) { + $api['used_by'] = $this->helper->decode($api['used_by'], true); + } $api['used_by'] = implode(', ', $api['used_by']); } else if (isset($api['used_by']) && $api['used_by'] === '') { $api['used_by'] = '-'; @@ -138,7 +140,9 @@ protected function replaceColumns($dataArr) $data['category'] = ucfirst($data['category']); if (isset($data['used_by']) && $data['used_by'] !== '') { - $data['used_by'] = $this->helper->decode($data['used_by'], true); + if (is_string($data['used_by'])) { + $data['used_by'] = $this->helper->decode($data['used_by'], true); + } $data['used_by'] = implode(', ', $data['used_by']); } else if (isset($data['used_by']) && $data['used_by'] === '') { $data['used_by'] = '-'; diff --git a/apps/Core/Components/System/Email/Queue/QueueComponent.php b/apps/Core/Components/System/Email/Queue/QueueComponent.php index 081e9086a..19eca1ac0 100644 --- a/apps/Core/Components/System/Email/Queue/QueueComponent.php +++ b/apps/Core/Components/System/Email/Queue/QueueComponent.php @@ -135,7 +135,9 @@ protected function formatSentOn($rowId, $data) protected function formatToAddresses($rowId, $data) { - $data['to_addresses'] = $this->helper->decode($data['to_addresses'], true); + if (is_string($data['to_addresses'])) { + $data['to_addresses'] = $this->helper->decode($data['to_addresses'], true); + } $data['to_addresses'] = implode(',', $data['to_addresses']); diff --git a/apps/Core/Components/System/Filters/FiltersComponent.php b/apps/Core/Components/System/Filters/FiltersComponent.php index 2f0beebce..545dcd230 100644 --- a/apps/Core/Components/System/Filters/FiltersComponent.php +++ b/apps/Core/Components/System/Filters/FiltersComponent.php @@ -3,7 +3,6 @@ namespace Apps\Core\Components\System\Filters; use Apps\Core\Packages\Adminltetags\Traits\DynamicTable; -use Apps\Core\Packages\Hrms\Employees\Employees; use System\Base\BaseComponent; class FiltersComponent extends BaseComponent @@ -22,6 +21,20 @@ public function initialize() */ public function viewAction() { + if ($this->request->isGet()) { + if ($this->app['id'] == 1) { + $components = $this->modules->components->components; + } else { + $components = $this->modules->components->getComponentsForAppType($this->app['app_type']); + } + + foreach ($components as $key => $component) { + $components[$key]['name'] = $component['name'] . ' (' . $component['category'] . ')'; + } + + $this->view->components = $components; + } + if (isset($this->getData()['id'])) { if ($this->getData()['id'] != 0) { $filter = $this->filters->getById($this->getData()['id']); @@ -36,18 +49,6 @@ public function viewAction() $this->view->pick('filters/view'); return; - } else { - if ($this->app['id'] == 1) { - $components = $this->modules->components->components; - } else { - $components = $this->modules->components->getComponentsForAppType($this->app['app_type']); - } - - foreach ($components as $key => $component) { - $components[$key]['name'] = $component['name'] . ' (' . $component['category'] . ')'; - } - - $this->view->components = $components; } if ($this->request->isPost()) { @@ -206,4 +207,4 @@ public function getdefaultfilterAction() $this->filters->packagesData->responseCode ); } -} +} \ No newline at end of file diff --git a/apps/Core/Components/System/Notifications/NotificationsComponent.php b/apps/Core/Components/System/Notifications/NotificationsComponent.php index 921281d63..340d258ec 100644 --- a/apps/Core/Components/System/Notifications/NotificationsComponent.php +++ b/apps/Core/Components/System/Notifications/NotificationsComponent.php @@ -134,7 +134,7 @@ protected function packageLinks() foreach ($this->modules->packages->packages as $packageKey => $package) { if ($package['settings'] && $package['settings'] !== '' && $package['settings'] !== '[]') { - if (!is_array($package['settings'])) { + if (is_string($package['settings'])) { $package['settings'] = $this->helper->decode($package['settings'], true); } if (isset($package['settings']['componentRoute'])) { diff --git a/apps/Core/Components/System/Storages/StoragesComponent.php b/apps/Core/Components/System/Storages/StoragesComponent.php index c22e5de14..77fd8ed56 100644 --- a/apps/Core/Components/System/Storages/StoragesComponent.php +++ b/apps/Core/Components/System/Storages/StoragesComponent.php @@ -36,9 +36,15 @@ public function viewAction() return $this->throwIdNotFound(); } - $storage['allowed_image_mime_types'] = $this->helper->decode($storage['allowed_image_mime_types']); - $storage['allowed_image_sizes'] = $this->helper->decode($storage['allowed_image_sizes']); - $storage['allowed_file_mime_types'] = $this->helper->decode($storage['allowed_file_mime_types']); + if (is_string($storage['allowed_image_mime_types'])) { + $storage['allowed_image_mime_types'] = $this->helper->decode($storage['allowed_image_mime_types']); + } + if (is_string($storage['allowed_image_sizes'])) { + $storage['allowed_image_sizes'] = $this->helper->decode($storage['allowed_image_sizes']); + } + if (is_string($storage['allowed_file_mime_types'])) { + $storage['allowed_file_mime_types'] = $this->helper->decode($storage['allowed_file_mime_types']); + } $this->view->storage = $storage; diff --git a/apps/Core/Components/System/Tools/Importexport/ImportexportComponent.php b/apps/Core/Components/System/Tools/Importexport/ImportexportComponent.php index f31d588ae..0c90c15cd 100644 --- a/apps/Core/Components/System/Tools/Importexport/ImportexportComponent.php +++ b/apps/Core/Components/System/Tools/Importexport/ImportexportComponent.php @@ -50,19 +50,32 @@ public function viewAction() $this->view->filters = $componentData['filters']; } - $importexport['fields'] = $this->helper->decode($importexport['fields'], true); + if (is_string($importexport['fields'])) { + $importexport['fields'] = $this->helper->decode($importexport['fields'], true); + } + + if (is_string($importexport['email_to'])) { + $importexport['email_to'] = $this->helper->decode($importexport['email_to'], true); + } - $importexport['email_to'] = implode(',', $this->helper->decode($importexport['email_to'], true)); + $importexport['email_to'] = implode(',', $importexport['email_to']); if ($importexport['file'] && $importexport['file'] !== '') { $importexport['file'] = $this->links->url('system/storages/q/uuid/' . $importexport['file']); } } else if ($importexport['type'] === 'import' && isset($importexport['component_id'])) { - $importexport['email_to'] = implode(',', $this->helper->decode($importexport['email_to'], true)); + if (is_string($importexport['email_to'])) { + $importexport['email_to'] = $this->helper->decode($importexport['email_to'], true); + } + + $importexport['email_to'] = implode(',', $importexport['email_to']); if ($importexport['file'] && $importexport['file'] !== '') { try { - $importexport['file'] = $this->helper->decode($importexport['file'], true); + if (is_string($importexport['file'])) { + $importexport['file'] = $this->helper->decode($importexport['file'], true); + } + $importexport['file'] = $importexport['file'][0]; $this->view->file = $this->basepackages->storages->getFileInfo($importexport['file']); @@ -167,8 +180,10 @@ protected function replaceColumns($dataArr) $data['account_id'] = 'System (' . $data['account_id'] . ')'; } - if ($data['email_to'] && $data['email_to'] !== '') { - $data['email_to'] = $this->helper->decode($data['email_to'], true); + if ($data['email_to']) { + if (is_string($data['email_to']) && $data['email_to'] !== '') { + $data['email_to'] = $this->helper->decode($data['email_to'], true); + } $data['email_to'] = implode(',', $data['email_to']); } diff --git a/apps/Core/Components/System/Users/Accounts/AccountsComponent.php b/apps/Core/Components/System/Users/Accounts/AccountsComponent.php index cbe0c2650..94e5b4d83 100644 --- a/apps/Core/Components/System/Users/Accounts/AccountsComponent.php +++ b/apps/Core/Components/System/Users/Accounts/AccountsComponent.php @@ -183,7 +183,7 @@ protected function getProfilesData($data, $rowId = null) } if ($profilePackage) { - if (!is_array($profilePackage['settings'])) { + if (is_string($profilePackage['settings'])) { $profilePackage['settings'] = $this->helper->decode($profilePackage['settings'], true); } if (isset($profilePackage['settings']['componentRoute'])) { diff --git a/apps/Core/Components/System/Workers/Schedules/SchedulesComponent.php b/apps/Core/Components/System/Workers/Schedules/SchedulesComponent.php index 1e52ed3d8..b6ff539bb 100644 --- a/apps/Core/Components/System/Workers/Schedules/SchedulesComponent.php +++ b/apps/Core/Components/System/Workers/Schedules/SchedulesComponent.php @@ -33,7 +33,9 @@ public function viewAction() return $this->throwIdNotFound(); } - $schedule['schedule'] = $this->helper->decode($schedule['schedule'], true); + if (is_string($schedule['schedule'])) { + $schedule['schedule'] = $this->helper->decode($schedule['schedule'], true); + } if ($schedule['schedule']['type'] === 'everyxseconds') { $schedule['schedule']['params']['seconds'] = implode(',', $schedule['schedule']['params']['seconds']); diff --git a/apps/Core/Middlewares/Acl/Acl.php b/apps/Core/Middlewares/Acl/Acl.php index fea661eb6..f7a1f60cb 100644 --- a/apps/Core/Middlewares/Acl/Acl.php +++ b/apps/Core/Middlewares/Acl/Acl.php @@ -65,7 +65,7 @@ public function process($data) } if ($this->account) { - if (!is_array($this->account['security']['permissions'])) { + if (is_string($this->account['security']['permissions'])) { $this->account['security']['permissions'] = $this->helper->decode($this->account['security']['permissions'], true); } diff --git a/apps/Core/Packages/Adminltetags/Tags/Content/Listing/Table/DynamicTable.php b/apps/Core/Packages/Adminltetags/Tags/Content/Listing/Table/DynamicTable.php index e652bd56e..e2fd3822b 100644 --- a/apps/Core/Packages/Adminltetags/Tags/Content/Listing/Table/DynamicTable.php +++ b/apps/Core/Packages/Adminltetags/Tags/Content/Listing/Table/DynamicTable.php @@ -375,137 +375,152 @@ protected function generateRowsContent() if ($controlKey === 'view') { if (is_array($control)) { - $control = $control['link']; + $controlLink = $control['link']; $title = isset($control['title']) ? strtoupper($control['title']) : 'VIEW'; $icon = isset($control['icon']) ? - strtoupper($control['icon']) : + $control['icon'] : 'eye'; $type = isset($control['type']) ? - strtoupper($control['type']) : + $control['type'] : 'info'; - + $additionalClass = + isset($control['additionalClass']) ? + $control['additionalClass'] : + $this->dtParams['dtControlsLinkClass']; } else { + $controlLink = $control; $title = 'VIEW'; $icon = 'eye'; $type = 'info'; + $additionalClass = $this->dtParams['dtControlsLinkClass']; } - - $controlButtons = array_merge($controlButtons, - [ - $controlKey => - [ - 'title' => $title, - 'additionalClass' => 'rowView ' . $this->dtParams['dtControlsLinkClass'], - 'icon' => $icon, - 'buttonType' => $type, - 'link' => $control - ] - ] - ); } else if ($controlKey === 'edit') { if (is_array($control)) { - $control = $control['link']; + $controlLink = $control['link']; $title = isset($control['title']) ? strtoupper($control['title']) : 'EDIT'; $icon = isset($control['icon']) ? - strtoupper($control['icon']) : + $control['icon'] : 'edit'; $type = isset($control['type']) ? - strtoupper($control['type']) : + $control['type'] : 'primary'; - + $additionalClass = + isset($control['additionalClass']) ? + $control['additionalClass'] : + $this->dtParams['dtControlsLinkClass']; } else { + $controlLink = $control; $title = 'EDIT'; $icon = 'edit'; $type = 'primary'; + $additionalClass = $this->dtParams['dtControlsLinkClass']; } - - $controlButtons = array_merge($controlButtons, - [ - $controlKey => - [ - 'title' => $title, - 'additionalClass' => 'rowEdit ' . $this->dtParams['dtControlsLinkClass'], - 'icon' => $icon, - 'buttonType' => $type, - 'link' => $control - ] - ] - ); } else if ($controlKey === 'clone') { if (is_array($control)) { - $control = $control['link']; + $controlLink = $control['link']; $title = isset($control['title']) ? strtoupper($control['title']) : 'CLONE'; $icon = isset($control['icon']) ? - strtoupper($control['icon']) : + $control['icon'] : 'clone'; $type = isset($control['type']) ? - strtoupper($control['type']) : + $control['type'] : 'primary'; - + $additionalClass = + isset($control['additionalClass']) ? + $control['additionalClass'] : + $this->dtParams['dtControlsLinkClass']; } else { + $controlLink = $control; $title = 'CLONE'; $icon = 'clone'; $type = 'primary'; + $additionalClass = $this->dtParams['dtControlsLinkClass']; } - - $controlButtons = array_merge($controlButtons, - [ - $controlKey => - [ - 'title' => $title, - 'additionalClass' => 'rowEdit ' . $this->dtParams['dtControlsLinkClass'], - 'icon' => $icon, - 'buttonType' => $type, - 'link' => $control - ] - ] - ); } else if ($controlKey === 'remove') { if (is_array($control)) { - $control = $control['link']; + $controlLink = $control['link']; $title = isset($control['title']) ? strtoupper($control['title']) : 'REMOVE'; $icon = isset($control['icon']) ? - strtoupper($control['icon']) : + $control['icon'] : 'trash'; $type = isset($control['type']) ? - strtoupper($control['type']) : + $control['type'] : 'danger'; - + $additionalClass = + isset($control['additionalClass']) ? + $control['additionalClass'] : + ''; } else { + $controlLink = $control; $title = 'REMOVE'; $icon = 'trash'; $type = 'danger'; + $additionalClass = ''; + } + } else { + if ($controlKey === 'divider') { + $control = ''; + } else { + if (is_array($control)) { + $controlLink = $control['link']; + $title = + isset($control['title']) ? + strtoupper($control['title']) : + 'TITLE MISSING'; + $icon = + isset($control['icon']) ? + $control['icon'] : + 'circle-dot'; + $type = + isset($control['type']) ? + $control['type'] : + 'primary'; + $additionalClass = + isset($control['additionalClass']) ? + $control['additionalClass'] : + ''; + } else { + $controlLink = $control; + $title = 'TITLE MISSING'; + $icon = 'circle-dot'; + $type = 'primary'; + $additionalClass = ''; + } } + } + if ($controlKey === 'divider') { + $controlButtons = array_merge($controlButtons, ['divider' => '']); + } else { $controlButtons = array_merge($controlButtons, [ $controlKey => [ 'title' => $title, - 'additionalClass' => 'rowRemove', + 'additionalClass' => 'row' . ucfirst($controlKey) . ' ' . $additionalClass, 'icon' => $icon, 'buttonType' => $type, - 'link' => $control + 'link' => $controlLink ] ] ); @@ -544,8 +559,6 @@ protected function generateRowsContent() } $column = $controlbuttons; - - // $this->dtParams['dtShowRowControls'] = true; } $rowData = array_merge($rowData, [$columnKey => $column]); @@ -620,4 +633,4 @@ protected function additionalControlButtons($controlButtons, $columns) return $controlButtons; } -} \ No newline at end of file +} diff --git a/apps/Core/Packages/Adminltetags/Tags/Fields/Input.php b/apps/Core/Packages/Adminltetags/Tags/Fields/Input.php index 551c4758a..d5b3576b6 100644 --- a/apps/Core/Packages/Adminltetags/Tags/Fields/Input.php +++ b/apps/Core/Packages/Adminltetags/Tags/Fields/Input.php @@ -121,6 +121,11 @@ protected function generateContent() $this->params['fieldGroupPreAddonTextAdditionalClass'] : ''; + $this->fieldParams['fieldGroupPostAddonTextAdditionalClass'] = + isset($this->params['fieldGroupPostAddonTextAdditionalClass']) ? + $this->params['fieldGroupPostAddonTextAdditionalClass'] : + ''; + if (isset($this->params['fieldGroupPreAddonText']) || isset($this->params['fieldGroupPreAddonIcon']) || isset($this->params['fieldGroupPreAddonDropdown']) || @@ -370,14 +375,14 @@ protected function select() protected function postAddon() { if (isset($this->params['fieldGroupPostAddonText'])) { - $this->content .= '
- {{fieldGroupPostAddonText|raw}} + ' . $this->params['fieldGroupPostAddonText'] . '
'; + } - if (isset($this->params['fieldGroupPostAddonIcon'])) { + if (isset($this->params['fieldGroupPostAddonIcon'])) { $this->content .= '
@@ -385,8 +390,8 @@ protected function postAddon()
'; } - if (isset($this->params['fieldGroupPostAddonDropdown'])) { + if (isset($this->params['fieldGroupPostAddonDropdown'])) { $this->fieldParams['fieldGroupPostAddonDropdownButtonClass'] = isset($this->params['fieldGroupPostAddonDropdownButtonClass']) ? $this->params['fieldGroupPostAddonDropdownButtonClass'] : diff --git a/apps/Core/Packages/Adminltetags/Traits/DynamicTable.php b/apps/Core/Packages/Adminltetags/Traits/DynamicTable.php index d8b8295f9..b64b85a82 100644 --- a/apps/Core/Packages/Adminltetags/Traits/DynamicTable.php +++ b/apps/Core/Packages/Adminltetags/Traits/DynamicTable.php @@ -179,10 +179,6 @@ public function generateDTContent( return; } - if ($dtAdditionControlButtons && is_callable($dtAdditionControlButtons)) { - $dtAdditionControlButtons = $dtAdditionControlButtons($rows); - } - if ($controlActions && is_callable($controlActions)) { $rows = $controlActions($rows); } else if ($controlActions) { @@ -197,9 +193,19 @@ public function generateDTContent( ) { if (!in_array($row['id'], $controlActions['disableActionsForIds'][$key])) { if (isset($controlActions['includeQ']) && $controlActions['includeQ'] == true) { - $actions[$key] = $this->links->url($action . '/id/' . $row['id']); + if (is_array($action) && isset($action['link'])) { + $actions[$key] = $action; + $actions[$key]['link'] = $this->links->url($action['link'] . '/id/' . $row['id']); + } else { + $actions[$key] = $this->links->url($action . '/id/' . $row['id']); + } } else { - $actions[$key] = $this->links->url($action . '/q/id/' . $row['id']); + if (is_array($action) && isset($action['link'])) { + $actions[$key] = $action; + $actions[$key]['link'] = $this->links->url($action['link'] . '/q/id/' . $row['id']); + } else { + $actions[$key] = $this->links->url($action . '/q/id/' . $row['id']); + } } } } else if (isset($controlActions['enableActionsForIds'][$key]) && @@ -208,21 +214,46 @@ public function generateDTContent( ) { if (in_array($row['id'], $controlActions['enableActionsForIds'][$key])) { if (isset($controlActions['includeQ']) && $controlActions['includeQ'] == true) { - $actions[$key] = $this->links->url($action . '/id/' . $row['id']); + if (is_array($action) && isset($action['link'])) { + $actions[$key] = $action; + $actions[$key]['link'] = $this->links->url($action['link'] . '/id/' . $row['id']); + } else { + $actions[$key] = $this->links->url($action . '/id/' . $row['id']); + } } else { - $actions[$key] = $this->links->url($action . '/q/id/' . $row['id']); + if (is_array($action) && isset($action['link'])) { + $actions[$key] = $action; + $actions[$key]['link'] = $this->links->url($action['link'] . '/q/id/' . $row['id']); + } else { + $actions[$key] = $this->links->url($action . '/q/id/' . $row['id']); + } } } } else { if (isset($controlActions['includeQ']) && $controlActions['includeQ'] == true) { - $actions[$key] = $this->links->url($action . '/id/' . $row['id']); + if (is_array($action) && isset($action['link'])) { + $actions[$key] = $action; + $actions[$key]['link'] = $this->links->url($action['link'] . '/id/' . $row['id']); + } else { + $actions[$key] = $this->links->url($action . '/id/' . $row['id']); + } } else { - $actions[$key] = $this->links->url($action . '/q/id/' . $row['id']); + if (is_array($action) && isset($action['link'])) { + $actions[$key] = $action; + $actions[$key]['link'] = $this->links->url($action['link'] . '/q/id/' . $row['id']); + } else { + $actions[$key] = $this->links->url($action . '/q/id/' . $row['id']); + } } } if ($key === 'clone') { - $actions[$key] = $actions[$key] . '/clone/true'; + if (is_array($action) && isset($action['link'])) { + $actions[$key] = $action; + $actions[$key]['link'] = $actions[$key]['link'] . '/clone/true'; + } else { + $actions[$key] = $actions[$key] . '/clone/true'; + } } } @@ -230,6 +261,10 @@ public function generateDTContent( } } + if ($dtAdditionControlButtons && is_callable($dtAdditionControlButtons)) { + $dtAdditionControlButtons = $dtAdditionControlButtons($rows); + } + if ($this->api->isApi()) { return ['rows' => $rows, 'counters' => $package->packagesData->paginationCounters]; } diff --git a/apps/Core/Views/Default/html/common/errors/controllerdependencyerror.html b/apps/Core/Views/Default/html/common/errors/controllerdependencyerror.html index 75cd06b5c..14758c3a1 100644 --- a/apps/Core/Views/Default/html/common/errors/controllerdependencyerror.html +++ b/apps/Core/Views/Default/html/common/errors/controllerdependencyerror.html @@ -1,4 +1,10 @@ {% set sectionId = 'controllerDependencyError' %} +{% set moduleName = '' %} +{% if dispatcher.getParams()['module']['display_name'] is defined %} + {% set moduleName = dispatcher.getParams()['module']['display_name'] %} +{% elseif dispatcher.getParams()['module']['name'] is defined %} + {% set moduleName = dispatcher.getParams()['module']['name'] %} +{% endif %}
@@ -6,7 +12,8 @@

Server Error! (Error:Controller Dependency Error)

-

The component's controller is returning an internal error.

+

The component's controller is returning an internal error due to missing component dependency.

+

Missing dependency {{moduleName}}.

Try Again diff --git a/apps/Core/Views/Default/html/devtools/modules/changes/view.html b/apps/Core/Views/Default/html/devtools/modules/changes/view.html index 59c89dddb..1803a4875 100644 --- a/apps/Core/Views/Default/html/devtools/modules/changes/view.html +++ b/apps/Core/Views/Default/html/devtools/modules/changes/view.html @@ -1,4 +1,4 @@ - + {% set changesHtml = '' %} {% if modules|length > 0 %} {% for moduleType, modulesArr in modules %} @@ -24,8 +24,14 @@ {% if moduleArr['isModified'] != false %} {% set moduleModified = 'Yes' %} {% endif %} + {% set moduleName = moduleArr['name'] %} + {% if moduleArr['display_name'] is defined %} + {% set moduleName = moduleArr['display_name'] ~ ' (' ~ moduleArr['name'] ~ ')' %} + {% elseif moduleArr['route'] is defined %} + {% set moduleName = moduleArr['name'] ~ ' (' ~ moduleArr['route'] ~ ')' %} + {% endif %} {% set changesHtml = changesHtml ~ '' ~ - ' ' ~ moduleArr['name'] ~ '' ~ + ' ' ~ moduleName ~ '' ~ ' ' ~ moduleArr['module_type'] ~ '' ~ ' ' ~ moduleUrl ~ '' ~ ' ' ~ moduleVersion ~ '' ~ @@ -208,4 +214,3 @@ dataCollectionSectionForm['funcs']['init'](); }); - \ No newline at end of file diff --git a/apps/Core/Views/Default/html/devtools/modules/module/info.html b/apps/Core/Views/Default/html/devtools/modules/module/info.html index a9ea4757e..1b0c353aa 100644 --- a/apps/Core/Views/Default/html/devtools/modules/module/info.html +++ b/apps/Core/Views/Default/html/devtools/modules/module/info.html @@ -35,6 +35,9 @@ {% endif %} {% if type !== 'core' %} {% set moduleApps = module['module_details']['apps'] %} + {% if is_array(moduleApps) %} + {% set moduleApps = json_encode(moduleApps) %} + {% endif %} {% endif %} {% if clone is defined and clone == true %} {% set moduleId = '' %} diff --git a/apps/Core/Views/Default/html/errors/controllerPackageDependencyError.html b/apps/Core/Views/Default/html/errors/controllerPackageDependencyError.html new file mode 100644 index 000000000..fa5706d10 --- /dev/null +++ b/apps/Core/Views/Default/html/errors/controllerPackageDependencyError.html @@ -0,0 +1 @@ +Placeholder file. Do not remove \ No newline at end of file diff --git a/apps/Core/Views/Default/html/errors/controllerViewDependencyError.html b/apps/Core/Views/Default/html/errors/controllerViewDependencyError.html new file mode 100644 index 000000000..fa5706d10 --- /dev/null +++ b/apps/Core/Views/Default/html/errors/controllerViewDependencyError.html @@ -0,0 +1 @@ +Placeholder file. Do not remove \ No newline at end of file diff --git a/apps/Core/Views/Default/html/system/workers/tasks/form.html b/apps/Core/Views/Default/html/system/workers/tasks/form.html index 039d03a47..9211a3c3c 100644 --- a/apps/Core/Views/Default/html/system/workers/tasks/form.html +++ b/apps/Core/Views/Default/html/system/workers/tasks/form.html @@ -270,7 +270,7 @@ 'fieldBazPostOnUpdate' : true, 'fieldDataSelect2Options' : calls, 'fieldDataSelect2OptionsKey' : 'id', - 'fieldDataSelect2OptionsValue' : 'name:package_name', + 'fieldDataSelect2OptionsValue' : 'name|package_name', 'fieldDataSelect2OptionsArray' : true, 'fieldDataSelect2OptionsSelected' : taskCall ] diff --git a/public/core/default/js/footer/core/Baz/BazContentFields.js b/public/core/default/js/footer/core/Baz/BazContentFields.js index 5d206b475..739fe4f49 100644 --- a/public/core/default/js/footer/core/Baz/BazContentFields.js +++ b/public/core/default/js/footer/core/Baz/BazContentFields.js @@ -1,5 +1,5 @@ /* exported BazContentFields */ -/* globals PNotify flatpickr */ +/* globals paginatedPNotify flatpickr */ /* * @title : BazContentFields * @description : Baz Lib for Content (Sections With Form) @@ -444,9 +444,13 @@ var BazContentFields = function() { var url = dataCollection.env.httpScheme + '://' + dataCollection.env.httpHost + '/' + dataCollection.env.appRoute + '/auth/generatePw' $.post(url, postData, function(response) { if (response.responseCode == 0) { - PNotify.success(response.responseMessage); + paginatedPNotify('success',{ + title : response.responseMessage + }); } else { - PNotify.error(response.responseMessage); + paginatedPNotify('error',{ + title : response.responseMessage + }); } if (response.responseData.password) { $(fieldId).val(response.responseData.password).trigger('change'); @@ -741,7 +745,7 @@ var BazContentFields = function() { // Check if node are selected and only 1 is selected if ($(selectedNode).length !== 1) { $('.ui-pnotify').remove(); - PNotify.notice({ + paginatedPNotify('notice', { title: 'None or Multiple ' + options.bazJstreeOptions.treeName + ' selected!', text: 'Please select only 1 ' + options.bazJstreeOptions.treeName + ' to create a new node under it' }); @@ -781,7 +785,7 @@ var BazContentFields = function() { // Check if node are selected and only 1 is selected if ($(selectedNode).length !== 1) { $('.ui-pnotify').remove(); - PNotify.notice({ + paginatedPNotify('notice', { title: 'None or Multiple ' + options.bazJstreeOptions.treeName + ' selected!', text: 'Please select only 1 ' + options.bazJstreeOptions.treeName + ' to rename', }); diff --git a/public/core/default/js/footer/core/Baz/BazContentSectionWithFormToDatatable.js b/public/core/default/js/footer/core/Baz/BazContentSectionWithFormToDatatable.js index 3b1573a7c..21984fce1 100644 --- a/public/core/default/js/footer/core/Baz/BazContentSectionWithFormToDatatable.js +++ b/public/core/default/js/footer/core/Baz/BazContentSectionWithFormToDatatable.js @@ -1,4 +1,4 @@ -/* globals define exports BazContentFieldsValidator BazContentFields PNotify */ +/* globals define exports BazContentFieldsValidator BazContentFields paginatedPNotify */ /* * @title : BazContentSectionWithFormToDatatable * @description : Baz Lib for Content (Sections With Form) @@ -521,7 +521,7 @@ } if (found) { - PNotify.notice({ + paginatedPNotify('notice', { title: 'Input data already exists in table!' }); diff --git a/public/core/default/js/footer/core/Baz/BazContentSectionWithListing.js b/public/core/default/js/footer/core/Baz/BazContentSectionWithListing.js index 23cb8a766..962773fef 100644 --- a/public/core/default/js/footer/core/Baz/BazContentSectionWithListing.js +++ b/public/core/default/js/footer/core/Baz/BazContentSectionWithListing.js @@ -1,4 +1,4 @@ -/* globals define exports BazContentLoader BazContentFields Swal PNotify */ +/* globals define exports BazContentLoader BazContentFields Swal paginatedPNotify */ /* * @title : BazContentSectionWithListing * @description : Baz Lib for Content (Sections With Form) @@ -222,14 +222,14 @@ // //Update Filter $.post(url, postData, function(response) { if (response.responseCode === 0) { - PNotify.success({ + paginatedPNotify('success', { 'title' : response.responseMessage }); if (response.filters) { redoFiltersOptions(query, sectionId, response); } } else { - PNotify.error({ + paginatedPNotify('error', { 'title' : response.responseMessage }); } @@ -305,7 +305,9 @@ var selectedFilter = $('#' + sectionId + '-filter-filters option:selected'); if ($(selectedFilter).data()['conditions'] === '') { - PNotify.error({'title': 'Show All filter cannot be cloned'}); + paginatedPNotify('error', { + 'title': 'Show All filter cannot be cloned' + }); return; } @@ -319,7 +321,7 @@ $.post(url, postData, function(response) { if (response.responseCode === 0) { - PNotify.success({ + paginatedPNotify('success', { 'title' : response.responseMessage }); if (response.filters) { @@ -328,7 +330,7 @@ resetFilters(); toggleFilterButtons(sectionId + '-filter'); } else { - PNotify.error({ + paginatedPNotify('error', { 'title' : response.responseMessage }); } @@ -488,7 +490,7 @@ $('#' + sectionId + '-edit, #' + sectionId + '-share').attr("disabled", true); $('#' + sectionId + '-delete').addClass('disabled'); - PNotify.success({ + paginatedPNotify('success', { 'title' : selectedFilter.data()['name'] + ' deleted successfully.' }); resetFilters(); @@ -502,7 +504,7 @@ $.post(url, postData, function(response) { if (response.responseCode === 0) { - PNotify.success({ + paginatedPNotify('success', { 'title' : selectedFilter.data()['name'] + ' deleted successfully.' }); if (response.filters) { @@ -510,7 +512,7 @@ } resetFilters(); } else { - PNotify.error({ + paginatedPNotify('error', { 'title' : 'Cannot delete filter.' }); } @@ -763,14 +765,14 @@ //Update Filter $.post(url, postData, function(response) { if (response.responseCode === 0) { - PNotify.success({ + paginatedPNotify('success', { 'title' : response.responseMessage }); if (response.filters) { redoFiltersOptions(query, sectionId, response); } } else { - PNotify.error({ + paginatedPNotify('error', { 'title' : response.responseMessage }); } @@ -1191,7 +1193,7 @@ data : postData, success : function(response) { if (response.responseCode != 0) { - PNotify.error({ + paginatedPNotify('error', { title : response.responseMessage }); } @@ -1458,14 +1460,14 @@ // dataType : 'json', // success : function(response) { // if (response.responseCode === 0) { - // PNotify.success({ + // paginatedPNotify('success', { // title : notificationText, // cornerClass : 'ui-pnotify-sharp' // }); // $(rowSwitchInput).attr('checked', status); // document.getElementById(rowSwitchInputId).checked = true; // } else { - // PNotify.error({ + // paginatedPNotify('error', { // title : 'Error!', // cornerClass : 'ui-pnotify-sharp' // }); @@ -1561,8 +1563,8 @@ // dataType : 'json', // success : function(response) { // if (response.responseCode === 1) { - // PNotify.removeAll() - // PNotify.success({ + // PNotify.removeAll(); + // paginatedPNotify('success', { // title : notificationText, // cornerClass : 'ui-pnotify-sharp' // }); @@ -1571,7 +1573,7 @@ // $('#' + thisId).attr('checked', true); // document.getElementById(thisId).checked = true; // } else { - // PNotify.error({ + // paginatedPNotify('error', { // title : 'Error!', // cornerClass : 'ui-pnotify-sharp' // }); @@ -1639,7 +1641,7 @@ $('#security-token').val(response.token); } if (response.responseCode != 0) { - PNotify.error({ + paginatedPNotify('error', { title : response.responseMessage, }); } diff --git a/public/core/default/js/footer/core/Baz/BazContentSectionWithWizard.js b/public/core/default/js/footer/core/Baz/BazContentSectionWithWizard.js index e4834c81e..619338be7 100644 --- a/public/core/default/js/footer/core/Baz/BazContentSectionWithWizard.js +++ b/public/core/default/js/footer/core/Baz/BazContentSectionWithWizard.js @@ -1,5 +1,5 @@ /* exported BazContentSectionWithWizard */ -/* globals PNotify */ +/* globals paginatedPNotify */ /* * @title : BazContentSectionWithWizard * @description : Baz Core Lib @@ -463,7 +463,7 @@ var BazContentSectionWithWizard = function() { success = true; $('#' + sectionId + '-' + step + '-accordioncard-header').removeClass('bg-danger').addClass('bg-success'); } else { - PNotify.error({ + paginatedPNotify('error', { title : response.responseMessage, }); $('#' + sectionId + '-next').children('i').attr('hidden', true); diff --git a/public/core/default/js/footer/core/Baz/BazMessenger.js b/public/core/default/js/footer/core/Baz/BazMessenger.js index fb7fd7626..3112dfcc9 100644 --- a/public/core/default/js/footer/core/Baz/BazMessenger.js +++ b/public/core/default/js/footer/core/Baz/BazMessenger.js @@ -1,5 +1,5 @@ /* exported BazMessenger */ -/* globals PNotify EmojiPicker autoComplete dayjs Swal */ +/* globals paginatedPNotify EmojiPicker autoComplete dayjs Swal */ /* * @title : BazMessenger * @description : Baz Messenger Lib @@ -212,7 +212,7 @@ var BazMessenger = function() { getUnreadMessagesCount(); } } else { - PNotify.error({ + paginatedPNotify('error', { text : response.responseMessage, textTrusted : true }); @@ -259,7 +259,7 @@ var BazMessenger = function() { $('#messenger-main-unmute').attr('hidden', false); $('#messenger-button').children('i').removeClass('fa-comment').addClass('fa-comment-slash'); } else { - PNotify.error({ + paginatedPNotify('error', { title : response.responseMessage, }); } @@ -288,7 +288,7 @@ var BazMessenger = function() { $('#messenger-main-mute').attr('hidden', false); $('#messenger-button').children('i').removeClass('fa-comment-slash').addClass('fa-comment'); } else { - PNotify.error({ + paginatedPNotify('error', { title : response.responseMessage, }); } @@ -339,7 +339,9 @@ var BazMessenger = function() { } else if (currentMessengerWindows > 1 && currentMessengerWindows < 3) { fromLeft = (5 * currentMessengerWindows) + (currentMessengerWindows * 473) + 5; } else { - PNotify.error({text: "Only 3 chat windows can be opened at a given time. Please close other chat windows to allow this window to open."}); + paginatedPNotify('error', { + text: "Only 3 chat windows can be opened at a given time. Please close other chat windows to allow this window to open." + }); return; } @@ -485,7 +487,7 @@ var BazMessenger = function() { markAllMessagesRead(user); } else { - PNotify.error({ + paginatedPNotify('error', { text : response.responseMessage, textTrusted : true }); @@ -606,7 +608,7 @@ var BazMessenger = function() { $('#messenger-messages-load-more-' + toUser.user).closest('div.row').remove(); populateMessages(toUser, response.responseData.messages, response.responseData.paginationCounters, true); } else { - PNotify.error({ + paginatedPNotify('error', { text : response.responseMessage, textTrusted : true }); @@ -669,7 +671,7 @@ var BazMessenger = function() { if (response.responseCode == 0) { // } else { - PNotify.error({ + paginatedPNotify('error', { text : response.responseMessage, textTrusted : true }); @@ -749,7 +751,7 @@ var BazMessenger = function() { $('#messenger-no-messages-' + user.user).attr('hidden', true); $('#direct-chat-messages-' + user.user).scrollTop($('#direct-chat-messages-' + user.user).get(0).scrollHeight); } else { - PNotify.error({ + paginatedPNotify('error', { text : response.responseMessage, textTrusted : true }); @@ -830,7 +832,7 @@ var BazMessenger = function() { $('#messenger-message-' + postData['id'] + ' .messenger-message-remove').attr('hidden', true); $('#messenger-message-' + postData['id']).off(); } else { - PNotify.error({ + paginatedPNotify('error', { text : response.responseMessage, textTrusted : true }); @@ -1060,7 +1062,7 @@ var BazMessenger = function() { } } } else { - PNotify.error({ + paginatedPNotify('error', { text : response.responseMessage, textTrusted : true }); @@ -1083,7 +1085,7 @@ var BazMessenger = function() { if (response.responseCode == 0) { // } else { - PNotify.error({ + paginatedPNotify('error', { text : response.responseMessage, textTrusted : true }); diff --git a/public/core/default/js/footer/jsFooterCore.js b/public/core/default/js/footer/jsFooterCore.js index 8146c4d58..80ff8e7e3 100644 --- a/public/core/default/js/footer/jsFooterCore.js +++ b/public/core/default/js/footer/jsFooterCore.js @@ -4362,7 +4362,7 @@ exports.BazContentSectionWithForm = BazContentSectionWithForm; Object.defineProperty(exports, '__esModule', { value: true }); })); -/* globals define exports BazContentFieldsValidator BazContentFields PNotify */ +/* globals define exports BazContentFieldsValidator BazContentFields paginatedPNotify */ /* * @title : BazContentSectionWithFormToDatatable * @description : Baz Lib for Content (Sections With Form) @@ -4885,7 +4885,7 @@ Object.defineProperty(exports, '__esModule', { value: true }); } if (found) { - PNotify.notice({ + paginatedPNotify('notice', { title: 'Input data already exists in table!' }); @@ -5583,7 +5583,7 @@ exports.BazContentSectionWithFormToDatatable = BazContentSectionWithFormToDatata Object.defineProperty(exports, '__esModule', { value: true }); })); -/* globals define exports BazContentLoader BazContentFields Swal PNotify */ +/* globals define exports BazContentLoader BazContentFields Swal paginatedPNotify */ /* * @title : BazContentSectionWithListing * @description : Baz Lib for Content (Sections With Form) @@ -5807,14 +5807,14 @@ Object.defineProperty(exports, '__esModule', { value: true }); // //Update Filter $.post(url, postData, function(response) { if (response.responseCode === 0) { - PNotify.success({ + paginatedPNotify('success', { 'title' : response.responseMessage }); if (response.filters) { redoFiltersOptions(query, sectionId, response); } } else { - PNotify.error({ + paginatedPNotify('error', { 'title' : response.responseMessage }); } @@ -5890,7 +5890,9 @@ Object.defineProperty(exports, '__esModule', { value: true }); var selectedFilter = $('#' + sectionId + '-filter-filters option:selected'); if ($(selectedFilter).data()['conditions'] === '') { - PNotify.error({'title': 'Show All filter cannot be cloned'}); + paginatedPNotify('error', { + 'title': 'Show All filter cannot be cloned' + }); return; } @@ -5904,7 +5906,7 @@ Object.defineProperty(exports, '__esModule', { value: true }); $.post(url, postData, function(response) { if (response.responseCode === 0) { - PNotify.success({ + paginatedPNotify('success', { 'title' : response.responseMessage }); if (response.filters) { @@ -5913,7 +5915,7 @@ Object.defineProperty(exports, '__esModule', { value: true }); resetFilters(); toggleFilterButtons(sectionId + '-filter'); } else { - PNotify.error({ + paginatedPNotify('error', { 'title' : response.responseMessage }); } @@ -6073,7 +6075,7 @@ Object.defineProperty(exports, '__esModule', { value: true }); $('#' + sectionId + '-edit, #' + sectionId + '-share').attr("disabled", true); $('#' + sectionId + '-delete').addClass('disabled'); - PNotify.success({ + paginatedPNotify('success', { 'title' : selectedFilter.data()['name'] + ' deleted successfully.' }); resetFilters(); @@ -6087,7 +6089,7 @@ Object.defineProperty(exports, '__esModule', { value: true }); $.post(url, postData, function(response) { if (response.responseCode === 0) { - PNotify.success({ + paginatedPNotify('success', { 'title' : selectedFilter.data()['name'] + ' deleted successfully.' }); if (response.filters) { @@ -6095,7 +6097,7 @@ Object.defineProperty(exports, '__esModule', { value: true }); } resetFilters(); } else { - PNotify.error({ + paginatedPNotify('error', { 'title' : 'Cannot delete filter.' }); } @@ -6348,14 +6350,14 @@ Object.defineProperty(exports, '__esModule', { value: true }); //Update Filter $.post(url, postData, function(response) { if (response.responseCode === 0) { - PNotify.success({ + paginatedPNotify('success', { 'title' : response.responseMessage }); if (response.filters) { redoFiltersOptions(query, sectionId, response); } } else { - PNotify.error({ + paginatedPNotify('error', { 'title' : response.responseMessage }); } @@ -6776,7 +6778,7 @@ Object.defineProperty(exports, '__esModule', { value: true }); data : postData, success : function(response) { if (response.responseCode != 0) { - PNotify.error({ + paginatedPNotify('error', { title : response.responseMessage }); } @@ -7043,14 +7045,14 @@ Object.defineProperty(exports, '__esModule', { value: true }); // dataType : 'json', // success : function(response) { // if (response.responseCode === 0) { - // PNotify.success({ + // paginatedPNotify('success', { // title : notificationText, // cornerClass : 'ui-pnotify-sharp' // }); // $(rowSwitchInput).attr('checked', status); // document.getElementById(rowSwitchInputId).checked = true; // } else { - // PNotify.error({ + // paginatedPNotify('error', { // title : 'Error!', // cornerClass : 'ui-pnotify-sharp' // }); @@ -7146,8 +7148,8 @@ Object.defineProperty(exports, '__esModule', { value: true }); // dataType : 'json', // success : function(response) { // if (response.responseCode === 1) { - // PNotify.removeAll() - // PNotify.success({ + // PNotify.removeAll(); + // paginatedPNotify('success', { // title : notificationText, // cornerClass : 'ui-pnotify-sharp' // }); @@ -7156,7 +7158,7 @@ Object.defineProperty(exports, '__esModule', { value: true }); // $('#' + thisId).attr('checked', true); // document.getElementById(thisId).checked = true; // } else { - // PNotify.error({ + // paginatedPNotify('error', { // title : 'Error!', // cornerClass : 'ui-pnotify-sharp' // }); @@ -7224,7 +7226,7 @@ Object.defineProperty(exports, '__esModule', { value: true }); $('#security-token').val(response.token); } if (response.responseCode != 0) { - PNotify.error({ + paginatedPNotify('error', { title : response.responseMessage, }); } @@ -8125,7 +8127,7 @@ $(document).on('libsLoadComplete bazContentLoaderAjaxComplete bazContentLoaderMo }); /* exported BazContentSectionWithWizard */ -/* globals PNotify */ +/* globals paginatedPNotify */ /* * @title : BazContentSectionWithWizard * @description : Baz Core Lib @@ -8589,7 +8591,7 @@ var BazContentSectionWithWizard = function() { success = true; $('#' + sectionId + '-' + step + '-accordioncard-header').removeClass('bg-danger').addClass('bg-success'); } else { - PNotify.error({ + paginatedPNotify('error', { title : response.responseMessage, }); $('#' + sectionId + '-next').children('i').attr('hidden', true); @@ -8640,7 +8642,7 @@ $(document).on('libsLoadComplete bazContentLoaderAjaxComplete', function() { }); /* exported BazContentFields */ -/* globals PNotify flatpickr */ +/* globals paginatedPNotify flatpickr */ /* * @title : BazContentFields * @description : Baz Lib for Content (Sections With Form) @@ -9085,9 +9087,13 @@ var BazContentFields = function() { var url = dataCollection.env.httpScheme + '://' + dataCollection.env.httpHost + '/' + dataCollection.env.appRoute + '/auth/generatePw' $.post(url, postData, function(response) { if (response.responseCode == 0) { - PNotify.success(response.responseMessage); + paginatedPNotify('success',{ + title : response.responseMessage + }); } else { - PNotify.error(response.responseMessage); + paginatedPNotify('error',{ + title : response.responseMessage + }); } if (response.responseData.password) { $(fieldId).val(response.responseData.password).trigger('change'); @@ -9382,7 +9388,7 @@ var BazContentFields = function() { // Check if node are selected and only 1 is selected if ($(selectedNode).length !== 1) { $('.ui-pnotify').remove(); - PNotify.notice({ + paginatedPNotify('notice', { title: 'None or Multiple ' + options.bazJstreeOptions.treeName + ' selected!', text: 'Please select only 1 ' + options.bazJstreeOptions.treeName + ' to create a new node under it' }); @@ -9422,7 +9428,7 @@ var BazContentFields = function() { // Check if node are selected and only 1 is selected if ($(selectedNode).length !== 1) { $('.ui-pnotify').remove(); - PNotify.notice({ + paginatedPNotify('notice', { title: 'None or Multiple ' + options.bazJstreeOptions.treeName + ' selected!', text: 'Please select only 1 ' + options.bazJstreeOptions.treeName + ' to rename', }); @@ -10619,7 +10625,7 @@ var BazNotifications = function() { return bazNotificationsConstructor; }(); /* exported BazMessenger */ -/* globals PNotify EmojiPicker autoComplete dayjs Swal */ +/* globals paginatedPNotify EmojiPicker autoComplete dayjs Swal */ /* * @title : BazMessenger * @description : Baz Messenger Lib @@ -10832,7 +10838,7 @@ var BazMessenger = function() { getUnreadMessagesCount(); } } else { - PNotify.error({ + paginatedPNotify('error', { text : response.responseMessage, textTrusted : true }); @@ -10879,7 +10885,7 @@ var BazMessenger = function() { $('#messenger-main-unmute').attr('hidden', false); $('#messenger-button').children('i').removeClass('fa-comment').addClass('fa-comment-slash'); } else { - PNotify.error({ + paginatedPNotify('error', { title : response.responseMessage, }); } @@ -10908,7 +10914,7 @@ var BazMessenger = function() { $('#messenger-main-mute').attr('hidden', false); $('#messenger-button').children('i').removeClass('fa-comment-slash').addClass('fa-comment'); } else { - PNotify.error({ + paginatedPNotify('error', { title : response.responseMessage, }); } @@ -10959,7 +10965,9 @@ var BazMessenger = function() { } else if (currentMessengerWindows > 1 && currentMessengerWindows < 3) { fromLeft = (5 * currentMessengerWindows) + (currentMessengerWindows * 473) + 5; } else { - PNotify.error({text: "Only 3 chat windows can be opened at a given time. Please close other chat windows to allow this window to open."}); + paginatedPNotify('error', { + text: "Only 3 chat windows can be opened at a given time. Please close other chat windows to allow this window to open." + }); return; } @@ -11105,7 +11113,7 @@ var BazMessenger = function() { markAllMessagesRead(user); } else { - PNotify.error({ + paginatedPNotify('error', { text : response.responseMessage, textTrusted : true }); @@ -11226,7 +11234,7 @@ var BazMessenger = function() { $('#messenger-messages-load-more-' + toUser.user).closest('div.row').remove(); populateMessages(toUser, response.responseData.messages, response.responseData.paginationCounters, true); } else { - PNotify.error({ + paginatedPNotify('error', { text : response.responseMessage, textTrusted : true }); @@ -11289,7 +11297,7 @@ var BazMessenger = function() { if (response.responseCode == 0) { // } else { - PNotify.error({ + paginatedPNotify('error', { text : response.responseMessage, textTrusted : true }); @@ -11369,7 +11377,7 @@ var BazMessenger = function() { $('#messenger-no-messages-' + user.user).attr('hidden', true); $('#direct-chat-messages-' + user.user).scrollTop($('#direct-chat-messages-' + user.user).get(0).scrollHeight); } else { - PNotify.error({ + paginatedPNotify('error', { text : response.responseMessage, textTrusted : true }); @@ -11450,7 +11458,7 @@ var BazMessenger = function() { $('#messenger-message-' + postData['id'] + ' .messenger-message-remove').attr('hidden', true); $('#messenger-message-' + postData['id']).off(); } else { - PNotify.error({ + paginatedPNotify('error', { text : response.responseMessage, textTrusted : true }); @@ -11680,7 +11688,7 @@ var BazMessenger = function() { } } } else { - PNotify.error({ + paginatedPNotify('error', { text : response.responseMessage, textTrusted : true }); @@ -11703,7 +11711,7 @@ var BazMessenger = function() { if (response.responseCode == 0) { // } else { - PNotify.error({ + paginatedPNotify('error', { text : response.responseMessage, textTrusted : true }); diff --git a/system/Base/BaseComponent.php b/system/Base/BaseComponent.php index 074992f29..fcbff4136 100644 --- a/system/Base/BaseComponent.php +++ b/system/Base/BaseComponent.php @@ -305,7 +305,7 @@ protected function checkComponentDependencies($component = null) ) ) ) { - $this->setErrorDispatcher('controllerDependencyError', ['error' => true]); + $this->setErrorDispatcher('controllerPackageDependencyError', ['error' => true, 'module' => $packageModule]); return false; } @@ -330,7 +330,7 @@ protected function checkComponentDependencies($component = null) ($viewModule['installed'] == false || $viewModule['apps'][$this->app['id']]['enabled'] == false) ) ) { - $this->setErrorDispatcher('controllerDependencyError', ['error' => true]); + $this->setErrorDispatcher('controllerViewDependencyError', ['error' => true, 'module' => $viewModule]); return false; } @@ -961,14 +961,15 @@ protected function usePackage($packageClass) $packageName = implode('', $packageClass); } } else { - if ($this->checkPackage($packageClass)) { - $package = (new $packageClass())->init(); - $packageName = $this->helper->last(explode('\\', $packageClass)); - } else { - throw new \Exception( - 'Package class : ' . $packageClass . - ' not available for app ' . $this->app['name'] - ); + $package = (new $packageClass())->init(); + $packageName = $this->helper->last(explode('\\', $packageClass)); + + if (!$this->checkPackage($packageClass)) { + $this->setErrorDispatcher('appPackagePermissionDenied', ['error' => true, 'module_name' => $packageName]); + // throw new \Exception( + // 'Package class : ' . $packageClass . + // ' not available for app ' . $this->app['name'] + // ); } } @@ -1042,15 +1043,15 @@ protected function checkPackage($packageClass) protected function useComponent($componentClass) { - if ($this->checkComponent($componentClass)) { - $component = new $componentClass(); - - $componentName = $this->helper->last(explode('\\', $componentClass)); - } else { - throw new \Exception( - 'Component class : ' . $componentClass . - ' not available for app ' . $this->app['name'] - ); + $component = new $componentClass(); + $componentName = $this->helper->last(explode('\\', $componentClass)); + + if (!$this->checkComponent($componentClass)) { + $this->setErrorDispatcher('appComponentPermissionDenied', ['error' => true, 'module_name' => $componentName]); + // throw new \Exception( + // 'Component class : ' . $componentClass . + // ' not available for app ' . $this->app['name'] + // ); } if (!isset($this->usedModules['components'])) { diff --git a/system/Base/BasePackage.php b/system/Base/BasePackage.php index 2991a7e6d..9f495542d 100644 --- a/system/Base/BasePackage.php +++ b/system/Base/BasePackage.php @@ -199,7 +199,7 @@ public function getById(int $id, bool $resetCache = false, bool $enableCache = t $this->setFfStoreToUse(); if (is_array($this->ffData) && count($this->ffData) > 0) { - return $this->ffData; + return $this->jsonData($this->ffData, true); } return false; @@ -254,11 +254,11 @@ public function getFirst($by = null, $value = null, bool $resetCache = false, bo } if ($by === 'id') { - $value = (int) $value; + $this->ffData = $this->jsonData($this->ffStore->findById((int) $value, $this->ffRelations, $this->ffRelationsConditions), true); + } else { + $this->ffData = $this->jsonData($this->ffStore->findOneBy([$by, '=', $value], $this->ffRelations, $this->ffRelationsConditions), true); } - $this->ffData = $this->ffStore->findOneBy([$by, '=', $value], $this->ffRelations, $this->ffRelationsConditions); - $this->setFfStoreToUse(); if (is_array($this->ffData) && count($this->ffData) > 0) { @@ -451,7 +451,7 @@ public function getByParams(array $params, bool $resetCache = false, bool $enabl } } - return $this->ffData; + return $this->jsonData($this->ffData, true); } return false; @@ -2302,6 +2302,21 @@ public function getDbCount($recount = false) return $this->ffStore->count($recount); } } + + public function getLastInsertedId() + { + if ($this->config->databasetype === 'db') { + $data = $this->modelToUse::find(); + + return $data->getLast()['id']; + } else { + if (!$this->ffStore) { + $this->ffStore = $this->ff->store($this->ffStoreToUse); + } + + return $this->ffStore->getLastInsertedId(); + } + } // protected function addRefId($data) // { // if (!isset($data['ref_id'])) { diff --git a/system/Base/Helpers.php b/system/Base/Helpers.php index 3ca32cf8f..535340283 100644 --- a/system/Base/Helpers.php +++ b/system/Base/Helpers.php @@ -269,7 +269,7 @@ function checkCtype($str, $ctype = 'alnum', $ignoreChars = null) { } if (!function_exists('msort')) { - function msort($array, $key, $sort_flags = SORT_REGULAR, $order = SORT_ASC) { + function msort($array, $key, $sort_flags = SORT_REGULAR, $order = SORT_ASC, $preserveKey = false) { if (is_array($array) && count($array) > 0) { if (!empty($key)) { $mapping = array(); @@ -294,7 +294,11 @@ function msort($array, $key, $sort_flags = SORT_REGULAR, $order = SORT_ASC) { } $sorted = array(); foreach ($mapping as $k => $v) { - $sorted[] = $array[$k]; + if ($preserveKey) { + $sorted[$k] = $array[$k]; + } else { + $sorted[] = $array[$k]; + } } return $sorted; } @@ -643,3 +647,21 @@ function getRemoteFilesize($url, $formatSize = false, $useHead = false) { return $size; } } + +if (!function_exists('numberFormatPrecision')) { + function numberFormatPrecision($number, $precision = 2, $separator = '.') { + $numberParts = explode($separator, $number); + $response = $numberParts[0]; + + if (count($numberParts) > 1 && $precision > 0) { + $response .= $separator; + $response .= substr($numberParts[1], 0, $precision); + } + + if ($response == '-0') { + $response = 0; + } + + return (float) $response; + } +} \ No newline at end of file diff --git a/system/Base/Providers/BasepackagesServiceProvider/Packages/ApiClientServices/ApiClientServices.php b/system/Base/Providers/BasepackagesServiceProvider/Packages/ApiClientServices/ApiClientServices.php index df0812cfe..9d1b60c84 100644 --- a/system/Base/Providers/BasepackagesServiceProvider/Packages/ApiClientServices/ApiClientServices.php +++ b/system/Base/Providers/BasepackagesServiceProvider/Packages/ApiClientServices/ApiClientServices.php @@ -179,7 +179,7 @@ protected function switchApiModel($api = null) $this->packageName = 'apiApis' . $api['category'] . $api['provider']; } else { - $this->setModelToUse($modelToUse = BasepackagesApiClientServices::class); + $this->setModelToUse($this->modelToUse = BasepackagesApiClientServices::class); $this->packageName = 'apiClientServices'; } diff --git a/system/Base/Providers/BasepackagesServiceProvider/Packages/Filters.php b/system/Base/Providers/BasepackagesServiceProvider/Packages/Filters.php index 6396eb868..2ffe1d46c 100644 --- a/system/Base/Providers/BasepackagesServiceProvider/Packages/Filters.php +++ b/system/Base/Providers/BasepackagesServiceProvider/Packages/Filters.php @@ -522,6 +522,10 @@ public function addFilter(array $data) } } + if (!isset($data['app_type'])) { + $data['app_type'] = $this->app['app_type']; + } + if ($this->checkDefaultFilter($data)) { $add = $this->add($data); diff --git a/system/Base/Providers/BasepackagesServiceProvider/Packages/Menus.php b/system/Base/Providers/BasepackagesServiceProvider/Packages/Menus.php index f282eb5be..2b0c04edd 100644 --- a/system/Base/Providers/BasepackagesServiceProvider/Packages/Menus.php +++ b/system/Base/Providers/BasepackagesServiceProvider/Packages/Menus.php @@ -123,13 +123,17 @@ public function updateMenus(array $data) foreach ($menus as $menuId => $value) { $menu = $this->getById($menuId); - $menu['apps'] = $this->helper->decode($menu['apps'], true); + if (is_string($menu['apps'])) { + $menu['apps'] = $this->helper->decode($menu['apps'], true); + } $menu['apps'] = array_replace($menu['apps'], $value); $menu['apps'] = $this->helper->encode($menu['apps']); - $menu['menu'] = $this->helper->decode($menu['menu'], true); + if (is_string($menu['menu'])) { + $menu['menu'] = $this->helper->decode($menu['menu'], true); + } $menu['menu'] = $this->helper->encode($menu['menu'], JSON_UNESCAPED_SLASHES); $this->update($menu); diff --git a/system/Base/Providers/BasepackagesServiceProvider/Packages/Progress.php b/system/Base/Providers/BasepackagesServiceProvider/Packages/Progress.php index 9a7e493fc..b850df981 100644 --- a/system/Base/Providers/BasepackagesServiceProvider/Packages/Progress.php +++ b/system/Base/Providers/BasepackagesServiceProvider/Packages/Progress.php @@ -548,7 +548,10 @@ public function terminatePid($progressFile) exec('ps -aux | grep ' . $progressFile['pid'], $output, $result); if ($result === 0 && count($output) > 0) { - if (str_contains($output[0], 'php')) { + if (str_contains($output[0], 'php') && + str_contains($output[0], ' ' . $progressFile['pid'] . ' ') && + str_starts_with($output[0], get_current_user())//Make sure we only remove the PID that is assigned via PHP User + ) { exec('kill -9 ' . $progressFile['pid'], $output, $result); if ($result !== 0) { @@ -557,12 +560,16 @@ public function terminatePid($progressFile) return false; } - $this->writeProgressFile(methods: [],progressFile: $progressFile); + $progressFile['pid'] = null; + } else {//We assume that PID does not exists and we remove it from file. + $progressFile['pid'] = null; + } + + $this->writeProgressFile(methods: [],progressFile: $progressFile); - $this->addResponse('Successfully terminating process'); + $this->addResponse('Successfully terminating process'); - return $this->resetProgress(); - } + return $this->resetProgress(); } return true; diff --git a/system/Base/Providers/BasepackagesServiceProvider/Packages/Storages/Local.php b/system/Base/Providers/BasepackagesServiceProvider/Packages/Storages/Local.php index beeb75fa2..f65fed1b9 100644 --- a/system/Base/Providers/BasepackagesServiceProvider/Packages/Storages/Local.php +++ b/system/Base/Providers/BasepackagesServiceProvider/Packages/Storages/Local.php @@ -83,24 +83,21 @@ public function initLocal(array $storage) $this->dataPath = $this->storagePath . '/' . $this->settingsDataPath . '/'; - $this->storage['allowed_image_mime_types'] = - isset($this->storage['allowed_image_mime_types']) ? - $this->helper->decode($this->storage['allowed_image_mime_types']) : - []; + if (!isset($this->storage['allowed_image_mime_types'])) { + $this->storage['allowed_image_mime_types'] = []; + } $this->imageMimeTypes = $this->storage['allowed_image_mime_types']; - $this->storage['allowed_image_sizes'] = - isset($this->storage['allowed_image_sizes']) ? - $this->helper->decode($this->storage['allowed_image_sizes']) : - [30, 80, 200, 800, 1200, 2000]; + if (!isset($this->storage['allowed_image_sizes'])) { + $this->storage['allowed_image_sizes'] = [30, 80, 200, 800, 1200, 2000]; + } $this->allowedImageSizes = $this->storage['allowed_image_sizes']; - $this->storage['allowed_file_mime_types'] = - isset($this->storage['allowed_file_mime_types']) ? - $this->helper->decode($this->storage['allowed_file_mime_types']) : - []; + if (!isset($this->storage['allowed_file_mime_types'])) { + $this->storage['allowed_file_mime_types'] = []; + } $this->fileMimeTypes = $this->storage['allowed_file_mime_types']; @@ -258,7 +255,6 @@ protected function processStore() $this->storeFile(); return true; - } else { $this->addResponse('File Type Not Accepted', 1); @@ -537,7 +533,7 @@ public function getPublicLink(string $uuid, $width = null) if (isset($file[0]['links']) && ($file[0]['links'] !== null && $file[0]['links'] !== '') ) { - $file[0]['links'] = $this->helper->decode($file[0]['links'], true); + $file[0]['links'] = $file[0]['links']; } if ($width) { @@ -583,7 +579,7 @@ public function getPublicLink(string $uuid, $width = null) protected function updateFileLink($file, $link, $width = null) { if ($file['links'] && !is_array($file['links'])) { - $file['links'] = $this->helper->decode($file['links'], true); + $file['links'] = $file['links']; } if ($width) { @@ -758,7 +754,7 @@ public function changeOrphanStatus(string $newUUID = null, string $oldUUID = nul { if ($array) { if ($oldUUID) { - $olduuids = $this->helper->decode($oldUUID, true); + $olduuids = $oldUUID; foreach ($olduuids as $olduuidKey => $olduuid) { if (!$status) { @@ -770,7 +766,7 @@ public function changeOrphanStatus(string $newUUID = null, string $oldUUID = nul } if ($newUUID) { - $uuids = $this->helper->decode($newUUID, true); + $uuids = $newUUID; foreach ($uuids as $uuidKey => $newuuid) { if (!$status) { $status = 0; diff --git a/system/Base/Providers/BasepackagesServiceProvider/Packages/Utils.php b/system/Base/Providers/BasepackagesServiceProvider/Packages/Utils.php index 8c4baacc9..a7ec71e0a 100644 --- a/system/Base/Providers/BasepackagesServiceProvider/Packages/Utils.php +++ b/system/Base/Providers/BasepackagesServiceProvider/Packages/Utils.php @@ -537,8 +537,12 @@ public function validateJson($data) return $data['json']; } - public function setMicroTimer($reference, $calculateMemoryUsage = false) + public function setMicroTimer($reference, $calculateMemoryUsage = false, $resetMicroTimers = false) { + if ($resetMicroTimers) { + $this->resetMicroTimers(); + } + $microtime['reference'] = $reference; if ($this->microtime === 0) { diff --git a/system/Base/Providers/CacheServiceProvider/OpCache.php b/system/Base/Providers/CacheServiceProvider/OpCache.php index 381c49617..1ad941dd7 100644 --- a/system/Base/Providers/CacheServiceProvider/OpCache.php +++ b/system/Base/Providers/CacheServiceProvider/OpCache.php @@ -52,7 +52,7 @@ public function removeCache($key = null, $directory = null) $this->setDirectory($directory); if ($key) { - if (opcache_is_script_cached(base_path($this->storagePath . $this->directory . '/' . $key . '.php'))) { + if ($this->checkCache($key, $directory)) { if (!opcache_invalidate(base_path($this->storagePath . $this->directory . '/' . $key . '.php'), true)) { return false; } @@ -127,4 +127,11 @@ public function setDirectory($directory = null) $this->checkCachePath($this->directory); } + + public function checkCache($key, $directory = null) + { + $this->setDirectory($directory); + + return file_exists(base_path($this->storagePath . $this->directory . '/' . $key . '.php')); + } } \ No newline at end of file diff --git a/system/Base/Providers/DatabaseServiceProvider/Ff/Store.php b/system/Base/Providers/DatabaseServiceProvider/Ff/Store.php index f2d345965..2ae1b7899 100644 --- a/system/Base/Providers/DatabaseServiceProvider/Ff/Store.php +++ b/system/Base/Providers/DatabaseServiceProvider/Ff/Store.php @@ -29,6 +29,7 @@ class Store protected $indexesPath = ''; protected $readIndex = false; protected $indexing = false; + protected $validateData = true; protected $minIndexChars = 3; protected $multiWords = true; protected $multiWordsSeparator = ' '; @@ -1438,14 +1439,16 @@ public function getStoreConfiguration() protected function writeNewDocumentToStore(array $storeData): array { - if (isset($storeData[$this->primaryKey]) && $storeData[$this->primaryKey] != 0) { + $storeData = $this->validateData($storeData); + + if (isset($storeData[$this->primaryKey]) && + ($storeData[$this->primaryKey] != 0 || (is_string($storeData[$this->primaryKey]) && strlen($storeData[$this->primaryKey]) !== 0)) + ) { throw new IdNotAllowedException( "The $this->primaryKey\" index is reserved, please delete the $this->primaryKey key and try again" ); } - $storeData = $this->validateData($storeData); - $id = $this->increaseCounterAndGetNextId(); $storeData[$this->primaryKey] = $id; @@ -1476,6 +1479,12 @@ protected function writeNewDocumentToStore(array $storeData): array protected function validateData(array $data) { + if (!$this->validateData) { + $data = $this->normalizeData($data); + + return $data; + } + if (!isset($data['id']) && count($this->uniqueFields) > 0) { $criteria = []; @@ -1821,6 +1830,10 @@ protected function checkAndStripId($id): int if (is_string($id)) { $id = IoHelper::secureStringForFileAccess($id); + + if (strlen($id) == 0) { + return 0; + } } if (!is_numeric($id)) { @@ -1870,4 +1883,16 @@ public function setReadIndex($index) return $this->getReadIndex(); } + + public function getValidateData() + { + return $this->validateData; + } + + public function setValidateData($validateData) + { + $this->validateData = $validateData; + + return $this->getValidateData(); + } } \ No newline at end of file diff --git a/system/Base/Providers/ErrorServiceProvider/ErrorsComponent.php b/system/Base/Providers/ErrorServiceProvider/ErrorsComponent.php index 64309aaef..a70182e5c 100644 --- a/system/Base/Providers/ErrorServiceProvider/ErrorsComponent.php +++ b/system/Base/Providers/ErrorServiceProvider/ErrorsComponent.php @@ -20,7 +20,14 @@ public function controllerNotFoundAction() $this->addResponse('Component Not Found', 1); } - public function controllerDependencyErrorAction() + public function controllerPackageDependencyErrorAction() + { + $this->view->pick('errors/controllerdependencyerror'); + + $this->addResponse('Component Dependency Error', 1); + } + + public function controllerViewDependencyErrorAction() { $this->view->pick('errors/controllerdependencyerror'); diff --git a/system/Base/Providers/ModulesServiceProvider/Modules/Components.php b/system/Base/Providers/ModulesServiceProvider/Modules/Components.php index 6935e2b22..d8e171398 100644 --- a/system/Base/Providers/ModulesServiceProvider/Modules/Components.php +++ b/system/Base/Providers/ModulesServiceProvider/Modules/Components.php @@ -119,7 +119,9 @@ public function getComponentByRouteForAppId($route, $appId = null) } foreach($this->components as $component) { - $component['apps'] = $this->helper->decode($component['apps'], true); + if (is_string($component['apps'])) { + $component['apps'] = $this->helper->decode($component['apps'], true); + } if (isset($component['apps'][$appId])) { if (isset($component['apps'][$appId]['enabled']) && @@ -137,7 +139,9 @@ public function getComponentByRouteForAppId($route, $appId = null) public function getComponentByNameForAppId($name, $appId) { foreach($this->components as $component) { - $component['apps'] = $this->helper->decode($component['apps'], true); + if (is_string($component['apps'])) { + $component['apps'] = $this->helper->decode($component['apps'], true); + } if (isset($component['apps'][$appId])) { if (isset($component['apps'][$appId]['enabled']) && @@ -180,7 +184,9 @@ public function getComponentByClassForAppId($class, $appId = null) $classArr = explode('\\', $class); foreach($this->components as $component) { - $component['apps'] = $this->helper->decode($component['apps'], true); + if (is_string($component['apps'])) { + $component['apps'] = $this->helper->decode($component['apps'], true); + } if (count($classArr) === 1) {//Only Class Name Given if (!str_contains($component['class'], $classArr[0])) { @@ -211,7 +217,9 @@ public function getComponentsForAppId($appId) $components = []; foreach($this->components as $component) { - $component['apps'] = $this->helper->decode($component['apps'], true); + if (is_string($component['apps'])) { + $component['apps'] = $this->helper->decode($component['apps'], true); + } if (isset($component['apps'][$appId]['enabled']) && $component['apps'][$appId]['enabled'] === true @@ -391,7 +399,9 @@ public function updateComponents(array $data) $package = $this->modules->packages->getPackageByNameForRepo($dependencyPackage['name'], $dependencyPackage['repo']); if ($package) { - $package['apps'] = $this->helper->decode($package['apps'], true); + if (is_string($package['apps'])) { + $package['apps'] = $this->helper->decode($package['apps'], true); + } $package['apps'][$data['id']]['enabled'] = true; @@ -411,7 +421,9 @@ public function updateComponents(array $data) if (!$status && array_key_exists('is_subview', $view) && $view['is_subview'] == false) { continue; } - $view['apps'] = $this->helper->decode($view['apps'], true); + if (is_string($view['apps'])) { + $view['apps'] = $this->helper->decode($view['apps'], true); + } $view['apps'][$data['id']]['enabled'] = (bool) $status; diff --git a/system/Base/Providers/ModulesServiceProvider/Modules/Middlewares.php b/system/Base/Providers/ModulesServiceProvider/Modules/Middlewares.php index 13a15afab..ce0d5e3d7 100644 --- a/system/Base/Providers/ModulesServiceProvider/Modules/Middlewares.php +++ b/system/Base/Providers/ModulesServiceProvider/Modules/Middlewares.php @@ -244,7 +244,9 @@ public function updateMiddlewares(array $data) foreach ($middlewares['middlewares'] as $middlewareId => $status) { $middleware = $this->getById($middlewareId); - $middleware['apps'] = $this->helper->decode($middleware['apps'], true); + if (is_string($middleware['apps'])) { + $middleware['apps'] = $this->helper->decode($middleware['apps'], true); + } if ($status === true) { $middleware['apps'][$data['id']]['enabled'] = true; @@ -271,7 +273,9 @@ public function updateMiddlewares(array $data) foreach ($middlewares['sequence'] as $sequence => $middlewareId) { $middleware = $this->getById($middlewareId); - $middleware['apps'] = $this->helper->decode($middleware['apps'], true); + if (is_string($middleware['apps'])) { + $middleware['apps'] = $this->helper->decode($middleware['apps'], true); + } //System Middlewares if ($middleware['name'] === 'IpFilter') { diff --git a/system/Base/Providers/ModulesServiceProvider/Modules/Packages.php b/system/Base/Providers/ModulesServiceProvider/Modules/Packages.php index 260b8d04f..8df82c9e7 100644 --- a/system/Base/Providers/ModulesServiceProvider/Modules/Packages.php +++ b/system/Base/Providers/ModulesServiceProvider/Modules/Packages.php @@ -29,7 +29,9 @@ public function getPackageByNameForAppId($name, $appId = null) } foreach($this->packages as $package) { - $package['apps'] = $this->helper->decode($package['apps'], true); + if (is_string($package['apps'])) { + $package['apps'] = $this->helper->decode($package['apps'], true); + } if (isset($package['apps'][$appId])) { if (strtolower($package['name']) === strtolower($name) && @@ -54,7 +56,9 @@ public function getPackageByClassForAppId($class, $appId = null) } foreach($this->packages as $package) { - $package['apps'] = $this->helper->decode($package['apps'], true); + if (is_string($package['apps'])) { + $package['apps'] = $this->helper->decode($package['apps'], true); + } if ($package['class'] !== $class) { continue; @@ -218,7 +222,9 @@ public function getPackagesForAppId($appId) $packages = []; foreach($this->packages as $package) { - $package['apps'] = $this->helper->decode($package['apps'], true); + if (is_string($package['apps'])) { + $package['apps'] = $this->helper->decode($package['apps'], true); + } if (isset($package['apps'][$appId]['enabled']) && $package['apps'][$appId]['enabled'] == 'true' @@ -278,7 +284,7 @@ public function updateNotificationSubscriptions(array $subscriptions) } if ($this->packages[$packageId]['notification_subscriptions']) { - if (!is_array($this->packages[$packageId]['notification_subscriptions'])) { + if (is_string($this->packages[$packageId]['notification_subscriptions'])) { $this->packages[$packageId]['notification_subscriptions'] = $this->helper->decode($this->packages[$packageId]['notification_subscriptions'], true); } @@ -390,7 +396,9 @@ public function msupdate(array $data)//module settings update $settingsData !== $this->security->getRequestToken() ) { if (isset($package['settings'][$key])) { - $settingsData = $this->helper->decode($settingsData, true); + if (is_string($settingsData)) { + $settingsData = $this->helper->decode($settingsData, true); + } $package['settings'][$key] = $settingsData; } diff --git a/system/Base/Providers/ModulesServiceProvider/Modules/Views.php b/system/Base/Providers/ModulesServiceProvider/Modules/Views.php index 9c8840400..2e3138281 100644 --- a/system/Base/Providers/ModulesServiceProvider/Modules/Views.php +++ b/system/Base/Providers/ModulesServiceProvider/Modules/Views.php @@ -289,7 +289,9 @@ protected function checkTagsPackage($packageName) public function getViewByNameForAppId($name, $appId) { foreach($this->views as $view) { - $view['apps'] = $this->helper->decode($view['apps'], true); + if (is_string($view['apps'])) { + $view['apps'] = $this->helper->decode($view['apps'], true); + } if ((isset($view['apps'][$appId]['enabled']) && $view['apps'][$appId]['enabled'] == true) && @@ -308,7 +310,9 @@ public function getViewsForAppId($appId, $includeSubViews = true) $views = []; foreach($this->views as $view) { - $view['apps'] = $this->helper->decode($view['apps'], true); + if (is_string($view['apps'])) { + $view['apps'] = $this->helper->decode($view['apps'], true); + } if (isset($view['apps'][$appId]['enabled']) && $view['apps'][$appId]['enabled'] == 'true' @@ -464,7 +468,9 @@ public function updateViews(array $data) foreach ($views as $viewId => $status) { $view = $this->getById($viewId); - $view['apps'] = $this->helper->decode($view['apps'], true); + if (is_string($view['apps'])) { + $view['apps'] = $this->helper->decode($view['apps'], true); + } if ($status === true) { $view['apps'][$data['id']]['enabled'] = true;