From 651d22a71d2da2f23d6357e296d16d6a943e3b3a Mon Sep 17 00:00:00 2001 From: Ronald Quenta Date: Fri, 4 Aug 2017 09:32:25 -0400 Subject: [PATCH] up observations --- framework/src/Maveriks/WebApplication.php | 5 ++-- gulliver/bin/tasks/pakeGulliver.php | 4 +-- workflow/engine/bin/tasks/cliWorkspaces.php | 2 +- workflow/engine/classes/class.Installer.php | 0 .../engine/classes/class.pluginRegistry.php | 6 +++-- workflow/engine/classes/class.wsTools.php | 14 +++++----- .../engine/classes/model/AppDelegation.php | 2 ++ workflow/engine/classes/model/AppFolder.php | 2 -- .../engine/classes/model/CaseScheduler.php | 4 --- .../engine/classes/model/PluginsRegistry.php | 26 ++++++++++++++++++- .../engine/classes/model/UsersProperties.php | 12 +++++---- workflow/engine/menus/setup.php | 2 +- .../engine/methods/login/licenseUpdate.php | 6 ++--- workflow/engine/methods/login/login.php | 5 +++- workflow/engine/methods/mails/emailList.php | 5 +++- workflow/engine/methods/mails/emailsAjax.php | 5 +++- .../methods/processes/processes_New.php | 5 +++- .../methods/processes/processes_Save.php | 4 ++- .../engine/methods/reports/reportsList.php | 5 +++- .../engine/methods/reports/reports_View.php | 4 ++- workflow/engine/methods/services/upload.php | 4 ++- .../engine/methods/setup/pluginsChange.php | 6 +++-- .../engine/methods/setup/pluginsImport.php | 5 +++- .../engine/methods/setup/pluginsRemove.php | 22 +++------------- .../engine/methods/setup/pluginsSetup.php | 4 ++- .../engine/methods/setup/pluginsSetupSave.php | 4 ++- .../engine/methods/tracker/tracker_Ajax.php | 5 +++- .../ProcessMaker/Plugins/PluginRegistry.php | 21 ++++++++++++--- .../Plugins/Traits/PluginStructure.php | 15 +++++------ .../templates/cases/cases_StepsTree.php | 15 ++++++----- .../engine/templates/steps/triggers_Tree.php | 4 ++- workflow/public_html/bootstrap.php | 4 ++- 32 files changed, 145 insertions(+), 82 deletions(-) create mode 100644 workflow/engine/classes/class.Installer.php diff --git a/framework/src/Maveriks/WebApplication.php b/framework/src/Maveriks/WebApplication.php index 5912d84fa..b2cdfd674 100644 --- a/framework/src/Maveriks/WebApplication.php +++ b/framework/src/Maveriks/WebApplication.php @@ -2,6 +2,7 @@ namespace Maveriks; use Maveriks\Util; +use ProcessMaker\Plugins\PluginRegistry; use ProcessMaker\Services; use ProcessMaker\Services\Api; use Luracast\Restler\RestException; @@ -358,8 +359,8 @@ class WebApplication } // hook to get rest api classes from plugins - if (class_exists('PMPluginRegistry')) { - $pluginRegistry = \PMPluginRegistry::loadSingleton(PATH_DATA_SITE . 'plugin.singleton'); + if (class_exists('ProcessMaker\Plugins\PluginRegistry')) { + $pluginRegistry = PluginRegistry::loadSingleton(); $plugins = $pluginRegistry->getRegisteredRestServices(); if (! empty($plugins)) { diff --git a/gulliver/bin/tasks/pakeGulliver.php b/gulliver/bin/tasks/pakeGulliver.php index 60f7e1bb4..928e33038 100644 --- a/gulliver/bin/tasks/pakeGulliver.php +++ b/gulliver/bin/tasks/pakeGulliver.php @@ -27,7 +27,7 @@ */ //dont work mb_internal_encoding('UTF-8'); - +use ProcessMaker\Plugins\PluginRegistry; pake_desc('gulliver version'); @@ -519,7 +519,7 @@ function run_pack_plugin($task, $args) { require_once ($pluginFilename); - $oPluginRegistry = PluginsRegistry::loadSingleton(); + $oPluginRegistry = PluginRegistry::loadSingleton(); $pluginDetail = $oPluginRegistry->getPluginDetails($pluginName . '.php'); $fileTar = $pluginHome . PATH_SEP . $pluginName . '-' . $pluginDetail->iVersion . '.tar'; diff --git a/workflow/engine/bin/tasks/cliWorkspaces.php b/workflow/engine/bin/tasks/cliWorkspaces.php index cba1c6302..8f3a35f91 100644 --- a/workflow/engine/bin/tasks/cliWorkspaces.php +++ b/workflow/engine/bin/tasks/cliWorkspaces.php @@ -1101,7 +1101,7 @@ function run_migrate_plugin($args, $opts) { /** @var workspaceTools $workspace */ if (count($workspaces) === 1) { $workspace = array_shift($workspaces); - print_r('Regenerating Singleton in: ' . pakeColor::colorize($workspace->name, 'INFO') . "\n"); + CLI::logging('Regenerating Singleton in: ' . pakeColor::colorize($workspace->name, 'INFO') . "\n"); $workspace->migrateSingleton($workspace->name); CLI::logging("-> Regenerating Singleton \n"); } else { diff --git a/workflow/engine/classes/class.Installer.php b/workflow/engine/classes/class.Installer.php new file mode 100644 index 000000000..e69de29bb diff --git a/workflow/engine/classes/class.pluginRegistry.php b/workflow/engine/classes/class.pluginRegistry.php index 1f663c983..ce3d964ed 100644 --- a/workflow/engine/classes/class.pluginRegistry.php +++ b/workflow/engine/classes/class.pluginRegistry.php @@ -25,6 +25,8 @@ * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ +use ProcessMaker\Plugins\PluginRegistry; + /** * * @package workflow.engine.classes @@ -142,7 +144,7 @@ class PMPluginRegistry */ public static function getSingleton() { - return \ProcessMaker\Plugins\PluginRegistry::loadSingleton(); + return PluginRegistry::loadSingleton(); } /** @@ -154,7 +156,7 @@ class PMPluginRegistry */ public static function loadSingleton($file) { - return \ProcessMaker\Plugins\PluginRegistry::loadSingleton(); + return PluginRegistry::loadSingleton(); } /** diff --git a/workflow/engine/classes/class.wsTools.php b/workflow/engine/classes/class.wsTools.php index 2f52233d2..9f0b29892 100644 --- a/workflow/engine/classes/class.wsTools.php +++ b/workflow/engine/classes/class.wsTools.php @@ -3888,13 +3888,13 @@ class workspaceTools $oPluginRegistry = unserialize(file_get_contents($pathSingleton)); $pluginAdapter = new PluginAdapter(); $pluginAdapter->migrate($oPluginRegistry); -// $data["CFG_UID"] = 'MIGRATED_PLUGIN'; -// $data["OBJ_UID"] = 'singleton'; -// $data["CFG_VALUE"] = 'true'; -// $data["PRO_UID"] = ''; -// $data["USR_UID"] = ''; -// $data["APP_UID"] = ''; -// $conf->create($data); + $data["CFG_UID"] = 'MIGRATED_PLUGIN'; + $data["OBJ_UID"] = 'singleton'; + $data["CFG_VALUE"] = 'true'; + $data["PRO_UID"] = ''; + $data["USR_UID"] = ''; + $data["APP_UID"] = ''; + $conf->create($data); } } } diff --git a/workflow/engine/classes/model/AppDelegation.php b/workflow/engine/classes/model/AppDelegation.php index 349d625ea..46229d861 100644 --- a/workflow/engine/classes/model/AppDelegation.php +++ b/workflow/engine/classes/model/AppDelegation.php @@ -25,6 +25,8 @@ * */ +use ProcessMaker\Plugins\PluginRegistry; + /** * Skeleton subclass for representing a row from the 'APP_DELEGATION' table. * diff --git a/workflow/engine/classes/model/AppFolder.php b/workflow/engine/classes/model/AppFolder.php index af60b9012..48df924ec 100644 --- a/workflow/engine/classes/model/AppFolder.php +++ b/workflow/engine/classes/model/AppFolder.php @@ -5,8 +5,6 @@ * @package workflow.engine.classes.model */ -//require_once 'classes/model/om/BaseAppFolder.php'; -//require_once 'classes/model/Application.php'; use ProcessMaker\Plugins\PluginRegistry; /** diff --git a/workflow/engine/classes/model/CaseScheduler.php b/workflow/engine/classes/model/CaseScheduler.php index bff5804f3..a5577b78d 100644 --- a/workflow/engine/classes/model/CaseScheduler.php +++ b/workflow/engine/classes/model/CaseScheduler.php @@ -5,10 +5,6 @@ * @package workflow.engine.classes.model */ -//require_once 'classes/model/om/BaseCaseScheduler.php'; - -//require_once 'classes/model/Process.php'; -//require_once 'classes/model/Task.php'; use ProcessMaker\Plugins\PluginRegistry; /** diff --git a/workflow/engine/classes/model/PluginsRegistry.php b/workflow/engine/classes/model/PluginsRegistry.php index cf3c2fbdd..d13b3ebc9 100644 --- a/workflow/engine/classes/model/PluginsRegistry.php +++ b/workflow/engine/classes/model/PluginsRegistry.php @@ -66,7 +66,7 @@ class PluginsRegistry extends BasePluginsRegistry $aFields = $oPluginsRegistry->toArray(BasePeer::TYPE_FIELDNAME); return $aFields; } else { - throw new Exception("Plugin with $prUid does not exist!"); + throw new Exception("Plugin does not exist!"); } } @@ -105,6 +105,12 @@ class PluginsRegistry extends BasePluginsRegistry return $pluginData; } + /** + * Creates a record in the PLUGINS_REGISTRY table + * @param array $aData + * @return bool + * @throws Exception + */ public static function create($aData) { $oConnection = Propel::getConnection(PluginsRegistryPeer::DATABASE_NAME); @@ -131,6 +137,12 @@ class PluginsRegistry extends BasePluginsRegistry } } + /** + * Modifies a record in the PLUGINS_REGISTRY table + * @param array $aData + * @return int + * @throws Exception + */ public static function update($aData) { $oConnection = Propel::getConnection(PluginsRegistryPeer::DATABASE_NAME); @@ -161,6 +173,12 @@ class PluginsRegistry extends BasePluginsRegistry } } + /** + * Activate a plugin with your name + * @param string $Namespace + * @return int + * @throws Exception + */ public static function enable($Namespace) { $oConnection = Propel::getConnection(PluginsRegistryPeer::DATABASE_NAME); @@ -191,6 +209,12 @@ class PluginsRegistry extends BasePluginsRegistry } } + /** + * Disable a plugin with your name + * @param string $Namespace + * @return int + * @throws Exception + */ public static function disable($Namespace) { $oConnection = Propel::getConnection(PluginsRegistryPeer::DATABASE_NAME); diff --git a/workflow/engine/classes/model/UsersProperties.php b/workflow/engine/classes/model/UsersProperties.php index 7065f5a8f..b4e55a196 100644 --- a/workflow/engine/classes/model/UsersProperties.php +++ b/workflow/engine/classes/model/UsersProperties.php @@ -324,13 +324,15 @@ class UsersProperties extends BaseUsersProperties $oPluginRegistry = PluginRegistry::loadSingleton(); $aRedirectLogin = $oPluginRegistry->getRedirectLogins(); - if (isset( $aRedirectLogin ) && is_array( $aRedirectLogin )) { - foreach ($aRedirectLogin as $key => $detail) { - if (isset( $detail->sPathMethod ) && $detail->sRoleCode == $userRole) { + if (isset($aRedirectLogin) && is_array($aRedirectLogin)) { + /** @var \ProcessMaker\Plugins\Interfaces\RedirectDetail $detail */ + foreach ($aRedirectLogin as $detail) { + $pathMethod = $detail->getPathMethod(); + if (isset($pathMethod) && $detail->equalRoleCodeTo($userRole)) { if (isset($_COOKIE['workspaceSkin'])) { - $url = '/sys' . SYS_SYS . '/' . $this->lang . '/' . $_COOKIE['workspaceSkin'] . '/' . $detail->sPathMethod; + $url = '/sys' . SYS_SYS . '/' . $this->lang . '/' . $_COOKIE['workspaceSkin'] . '/' . $pathMethod; } else { - $url = '/sys' . SYS_SYS . '/' . $this->lang . '/' . SYS_SKIN . '/' . $detail->sPathMethod; + $url = '/sys' . SYS_SYS . '/' . $this->lang . '/' . SYS_SKIN . '/' . $pathMethod; } } } diff --git a/workflow/engine/menus/setup.php b/workflow/engine/menus/setup.php index 08da62041..989248d22 100644 --- a/workflow/engine/menus/setup.php +++ b/workflow/engine/menus/setup.php @@ -291,7 +291,7 @@ if ($RBAC->userCanAccess('PM_SETUP') == 1) { } /*----------------------------------********---------------------------------*/ -$pluginRegistry = PluginRegistry::loadSingleton(); //lsl +$pluginRegistry = PluginRegistry::loadSingleton(); $status = $pluginRegistry->getStatusPlugin('actionsByEmail'); if ((string)($status) !== 'enabled' && diff --git a/workflow/engine/methods/login/licenseUpdate.php b/workflow/engine/methods/login/licenseUpdate.php index 4855e792d..8e6c9ea94 100644 --- a/workflow/engine/methods/login/licenseUpdate.php +++ b/workflow/engine/methods/login/licenseUpdate.php @@ -40,9 +40,9 @@ if ($aux['extension'] != 'dat') { $pluginRegistry = ProcessMaker\Plugins\PluginRegistry::loadSingleton(); /** @var \ProcessMaker\Plugins\Interfaces\PluginDetail $plugin */ foreach ($pluginRegistry->getPlugins() as $plugin) { - if ($plugin->isEnabled() && !in_array($plugin->getNamespace(), $licenseManager->features)) { - $pluginRegistry->disablePlugin($plugin->getNamespace()); - $pluginRegistry->savePlugin($plugin->getNamespace()); + if ($plugin->enabled && !in_array($plugin->sNamespace, $licenseManager->features)) { + $pluginRegistry->disablePlugin($plugin->sNamespace); + $pluginRegistry->savePlugin($plugin->sNamespace); } } diff --git a/workflow/engine/methods/login/login.php b/workflow/engine/methods/login/login.php index 983ea3e85..7ed996d21 100644 --- a/workflow/engine/methods/login/login.php +++ b/workflow/engine/methods/login/login.php @@ -22,6 +22,9 @@ * Coral Gables, FL, 33134, USA, or email info@colosa.com. * */ + +use ProcessMaker\Plugins\PluginRegistry; + /*----------------------------------********---------------------------------*/ //Browser Compatibility $browserSupported = G::checkBrowserCompatibility(); @@ -109,7 +112,7 @@ if (isset ($_SESSION['USER_LOGGED'])) { } } else { // Execute SSO trigger - $pluginRegistry = \ProcessMaker\Plugins\PluginRegistry::loadSingleton(); + $pluginRegistry = PluginRegistry::loadSingleton(); if (defined('PM_SINGLE_SIGN_ON')) { /*----------------------------------********---------------------------------*/ $licensedFeatures = & PMLicensedFeatures::getSingleton(); diff --git a/workflow/engine/methods/mails/emailList.php b/workflow/engine/methods/mails/emailList.php index 65e384f4a..a7957d8a8 100644 --- a/workflow/engine/methods/mails/emailList.php +++ b/workflow/engine/methods/mails/emailList.php @@ -23,6 +23,9 @@ */ global $RBAC; + +use ProcessMaker\Plugins\PluginRegistry; + $resultRbac = $RBAC->requirePermissions('PM_SETUP_ADVANCE', 'PM_SETUP_LOGS'); if (!$resultRbac) { G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels'); @@ -47,7 +50,7 @@ $status = array( array("pending", G::LoadTranslation('ID_PENDING')) ); -$pluginRegistry = \ProcessMaker\Plugins\PluginRegistry::loadSingleton(); +$pluginRegistry = PluginRegistry::loadSingleton(); $flagER = $pluginRegistry->isEnable('externalRegistration') ? 1 : 0; $processes = getProcessArray($userUid); diff --git a/workflow/engine/methods/mails/emailsAjax.php b/workflow/engine/methods/mails/emailsAjax.php index ad1d88388..567dad158 100644 --- a/workflow/engine/methods/mails/emailsAjax.php +++ b/workflow/engine/methods/mails/emailsAjax.php @@ -1,4 +1,7 @@ isEnable('externalRegistration') ? 1 : 0; if ($flagEr == 0) { diff --git a/workflow/engine/methods/processes/processes_New.php b/workflow/engine/methods/processes/processes_New.php index f38680504..33dc497b0 100644 --- a/workflow/engine/methods/processes/processes_New.php +++ b/workflow/engine/methods/processes/processes_New.php @@ -21,6 +21,9 @@ * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ + +use ProcessMaker\Plugins\PluginRegistry; + $access = $RBAC->userCanAccess( 'PM_FACTORY' ); if ($access != 1) { switch ($access) { @@ -43,7 +46,7 @@ if ($access != 1) { } //call plugins -$oPluginRegistry = \ProcessMaker\Plugins\PluginRegistry::loadSingleton(); +$oPluginRegistry = PluginRegistry::loadSingleton(); $oPluginRegistry->executeTriggers( PM_NEW_PROCESS_LIST, NULL ); $aFields['MESSAGE1'] = G::LoadTranslation( 'ID_MSG_ERROR_PRO_TITLE' ); diff --git a/workflow/engine/methods/processes/processes_Save.php b/workflow/engine/methods/processes/processes_Save.php index 382a1976b..c6f8d58a3 100644 --- a/workflow/engine/methods/processes/processes_Save.php +++ b/workflow/engine/methods/processes/processes_Save.php @@ -29,6 +29,8 @@ +use ProcessMaker\Plugins\PluginRegistry; + $function = isset( $_POST['function'] ) ? $_POST['function'] : ''; $infoProcess = new Process(); $resultProcessOld = $infoProcess->load($_POST['form']['PRO_UID']); @@ -68,7 +70,7 @@ switch ($function) { $oData['PRO_TEMPLATE'] = (isset( $_POST['form']['PRO_TEMPLATE'] ) && $_POST['form']['PRO_TEMPLATE'] != '') ? $_POST['form']['PRO_TEMPLATE'] : ''; $oData['PROCESSMAP'] = $oProcessMap; - $oPluginRegistry = \ProcessMaker\Plugins\PluginRegistry::loadSingleton(); + $oPluginRegistry = PluginRegistry::loadSingleton(); $oPluginRegistry->executeTriggers( PM_NEW_PROCESS_SAVE, $oData ); G::header( 'location: processes_Map?PRO_UID=' . $sProUid ); diff --git a/workflow/engine/methods/reports/reportsList.php b/workflow/engine/methods/reports/reportsList.php index d7ba34b97..ae304517a 100644 --- a/workflow/engine/methods/reports/reportsList.php +++ b/workflow/engine/methods/reports/reportsList.php @@ -22,6 +22,9 @@ * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ global $RBAC; + +use ProcessMaker\Plugins\PluginRegistry; + switch ($RBAC->userCanAccess( 'PM_REPORTS' )) { case - 2: G::SendTemporalMessage( 'ID_USER_HAVENT_RIGHTS_SYSTEM', 'error', 'labels' ); @@ -74,7 +77,7 @@ $reports[] = array ('RPT_NUMBER' => count( $reports ),'RPT_UID' => 5,'RPT_TITLE' 'RPT_TITLE' => "Report 9",//G::LoadTranslation('ID_REPORT6'), 'VIEW' => G::LoadTranslation('ID_VIEW'));*/ -$oPluginRegistry = \ProcessMaker\Plugins\PluginRegistry::loadSingleton(); +$oPluginRegistry = PluginRegistry::loadSingleton(); $aAvailableReports = $oPluginRegistry->getReports(); //$aReports = array(); diff --git a/workflow/engine/methods/reports/reports_View.php b/workflow/engine/methods/reports/reports_View.php index e6eddc7f0..470ce0724 100644 --- a/workflow/engine/methods/reports/reports_View.php +++ b/workflow/engine/methods/reports/reports_View.php @@ -22,6 +22,8 @@ * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ +use ProcessMaker\Plugins\PluginRegistry; + /** * Report - Report view * @@ -210,7 +212,7 @@ try { break; default: $foundReport = false; - $oPluginRegistry = \ProcessMaker\Plugins\PluginRegistry::loadSingleton(); + $oPluginRegistry = PluginRegistry::loadSingleton(); $aAvailableReports = $oPluginRegistry->getReports(); foreach ($aAvailableReports as $sReportClass) { diff --git a/workflow/engine/methods/services/upload.php b/workflow/engine/methods/services/upload.php index a8a418d32..63c85e798 100644 --- a/workflow/engine/methods/services/upload.php +++ b/workflow/engine/methods/services/upload.php @@ -22,6 +22,8 @@ * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ +use ProcessMaker\Plugins\PluginRegistry; + /** * @Updated Dec 14, 2009 by Erik * @@ -138,7 +140,7 @@ if (isset( $_FILES ) && $_FILES["ATTACH_FILE"]["error"] == 0) { //Plugin Hook PM_UPLOAD_DOCUMENT for upload document - $oPluginRegistry = \ProcessMaker\Plugins\PluginRegistry::loadSingleton(); + $oPluginRegistry = PluginRegistry::loadSingleton(); if ($oPluginRegistry->existsTrigger( PM_UPLOAD_DOCUMENT ) && class_exists( "uploadDocumentData" )) { $triggerDetail = $oPluginRegistry->getTriggerInfo( PM_UPLOAD_DOCUMENT ); diff --git a/workflow/engine/methods/setup/pluginsChange.php b/workflow/engine/methods/setup/pluginsChange.php index 3e9f10532..0bc475765 100644 --- a/workflow/engine/methods/setup/pluginsChange.php +++ b/workflow/engine/methods/setup/pluginsChange.php @@ -23,6 +23,8 @@ */ // lets display the items +use ProcessMaker\Plugins\PluginRegistry; + $pluginFile = $_GET['id']; $pluginStatus = $_GET['status']; @@ -32,7 +34,7 @@ $filter = new InputFilter(); $path = PATH_PLUGINS . $pluginFile; $path = $filter->validateInput($path, 'path'); -$oPluginRegistry =& ProcessMaker\Plugins\PluginRegistry::loadSingleton(); +$oPluginRegistry = PluginRegistry::loadSingleton(); if ($handle = opendir(PATH_PLUGINS)) { while (false !== ($file = readdir($handle))) { @@ -41,7 +43,7 @@ if ($handle = opendir(PATH_PLUGINS)) { // change to disable $details = $oPluginRegistry->getPluginDetails($pluginFile); $oPluginRegistry->disablePlugin($details->getNamespace()); - //$oPluginRegistry->adapter->savePlugin($details->sNamespace, $oPluginRegistry); + $oPluginRegistry->savePlugin($details->sNamespace); G::auditLog("DisablePlugin", "Plugin Name: " . $details->getNamespace()); } else { $pluginName = str_replace(".php", "", $pluginFile); diff --git a/workflow/engine/methods/setup/pluginsImport.php b/workflow/engine/methods/setup/pluginsImport.php index ea15dc307..df2d3798e 100644 --- a/workflow/engine/methods/setup/pluginsImport.php +++ b/workflow/engine/methods/setup/pluginsImport.php @@ -22,6 +22,9 @@ * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ global $RBAC; + +use ProcessMaker\Plugins\PluginRegistry; + $access = $RBAC->userCanAccess( 'PM_SETUP_ADVANCE' ); if ($access != 1) { switch ($access) { @@ -43,7 +46,7 @@ if ($access != 1) { } } -$oPluginRegistry = \ProcessMaker\Plugins\PluginRegistry::loadSingleton(); +$oPluginRegistry = PluginRegistry::loadSingleton(); $G_MAIN_MENU = 'processmaker'; $G_ID_MENU_SELECTED = 'SETUP'; $G_SUB_MENU = 'setup'; diff --git a/workflow/engine/methods/setup/pluginsRemove.php b/workflow/engine/methods/setup/pluginsRemove.php index 8f8d4e348..d70841448 100644 --- a/workflow/engine/methods/setup/pluginsRemove.php +++ b/workflow/engine/methods/setup/pluginsRemove.php @@ -22,29 +22,15 @@ * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ -/* -global $RBAC; -switch ($RBAC->userCanAccess('PM_SETUP_ADVANCE')) -{ - case -2: - G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_SYSTEM', 'error', 'labels'); - G::header('location: ../login/login'); - die; - break; - case -1: - G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels'); - G::header('location: ../login/login'); - die; - break; -}*/ +use ProcessMaker\Plugins\PluginRegistry; $filter = new InputFilter(); $pluginName = $_REQUEST['pluginUid']; $pluginName = $filter->xssFilterHard($pluginName); -$pluginRegistry =& ProcessMaker\Plugins\PluginRegistry::loadSingleton(); +$pluginRegistry = PluginRegistry::loadSingleton(); $pluginRegistry->uninstallPlugin($pluginName); -G::auditLog('RemovePlugin','Plugin Name: '.$pluginName); -echo $pluginName . ' ' . nl2br( $filter->xssFilterHard(G::LoadTranslation( 'ID_MSG_REMOVE_PLUGIN_SUCCESS' )) ); +G::auditLog('RemovePlugin', 'Plugin Name: ' . $pluginName); +echo $pluginName . ' ' . nl2br($filter->xssFilterHard(G::LoadTranslation('ID_MSG_REMOVE_PLUGIN_SUCCESS'))); diff --git a/workflow/engine/methods/setup/pluginsSetup.php b/workflow/engine/methods/setup/pluginsSetup.php index 932a3327a..5de8150ed 100644 --- a/workflow/engine/methods/setup/pluginsSetup.php +++ b/workflow/engine/methods/setup/pluginsSetup.php @@ -22,9 +22,11 @@ * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ +use ProcessMaker\Plugins\PluginRegistry; + $pluginFile = $_GET['id']; -$oPluginRegistry = \ProcessMaker\Plugins\PluginRegistry::loadSingleton(); +$oPluginRegistry = PluginRegistry::loadSingleton(); $details = $oPluginRegistry->getPluginDetails( $pluginFile ); $folder = $details->getFolder(); diff --git a/workflow/engine/methods/setup/pluginsSetupSave.php b/workflow/engine/methods/setup/pluginsSetupSave.php index d245032f5..783a6c562 100644 --- a/workflow/engine/methods/setup/pluginsSetupSave.php +++ b/workflow/engine/methods/setup/pluginsSetupSave.php @@ -22,9 +22,11 @@ * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ +use ProcessMaker\Plugins\PluginRegistry; + $pluginFile = $_GET['id']; -$oPluginRegistry = \ProcessMaker\Plugins\PluginRegistry::loadSingleton(); +$oPluginRegistry = PluginRegistry::loadSingleton(); $details = $oPluginRegistry->getPluginDetails( $pluginFile ); try { diff --git a/workflow/engine/methods/tracker/tracker_Ajax.php b/workflow/engine/methods/tracker/tracker_Ajax.php index bac877785..e4c4fd89f 100644 --- a/workflow/engine/methods/tracker/tracker_Ajax.php +++ b/workflow/engine/methods/tracker/tracker_Ajax.php @@ -21,6 +21,9 @@ * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ + +use ProcessMaker\Plugins\PluginRegistry; + try { $filter = new InputFilter(); $_POST = $filter->xssFilterHard($_POST); @@ -178,7 +181,7 @@ try { //If plugin and trigger are defined for listing if ($oPluginRegistry->existsTrigger( PM_CASE_DOCUMENT_LIST_ARR )) { - $oPluginRegistry = \ProcessMaker\Plugins\PluginRegistry::loadSingleton(); + $oPluginRegistry = PluginRegistry::loadSingleton(); $filesPluginArray = $oPluginRegistry->executeTriggers( PM_CASE_DOCUMENT_LIST_ARR, $aFields['APP_UID'] ); //Now search for the file, if exists the change the download URL foreach ($filesPluginArray as $file) { diff --git a/workflow/engine/src/ProcessMaker/Plugins/PluginRegistry.php b/workflow/engine/src/ProcessMaker/Plugins/PluginRegistry.php index 8daccc17a..420e17653 100644 --- a/workflow/engine/src/ProcessMaker/Plugins/PluginRegistry.php +++ b/workflow/engine/src/ProcessMaker/Plugins/PluginRegistry.php @@ -61,12 +61,26 @@ class PluginRegistry */ public static function loadSingleton() { - if (self::$instance == null) { + if (self::$instance === null) { self::$instance = new PluginRegistry(); } return self::$instance; } + /** + * Load the singleton instance from a serialized stored file + * @return PluginRegistry + * @throws Exception + */ + public static function newInstance() + { + self::$instance = new PluginRegistry(); + if (! is_object(self::$instance) || get_class(self::$instance) != "ProcessMaker\Plugins\PluginRegistry") { + throw new Exception("Can't load main PluginRegistry object."); + } + return self::$instance; + } + /** * Register the plugin in the singleton * @param string $Namespace Name Plugin @@ -113,7 +127,8 @@ class PluginRegistry if ($pluginDetail->isEnabled()) { if (!empty($pluginDetail->getFile()) && file_exists($pluginDetail->getFile())) { $arrayFileInfo = pathinfo($pluginDetail->getFile()); - $Filename = (($pluginDetail->getNamespace() == "enterprise") ? + $Filename = ( + ($pluginDetail->getNamespace() == "enterprise") ? PATH_CORE . "methods" . PATH_SEP . "enterprise" . PATH_SEP : PATH_PLUGINS ) . $arrayFileInfo["basename"]; @@ -403,7 +418,6 @@ class PluginRegistry $pluginRegistry->savePlugin($value); } } - } } @@ -840,7 +854,6 @@ class PluginRegistry $found = true; } } - } } return $found; diff --git a/workflow/engine/src/ProcessMaker/Plugins/Traits/PluginStructure.php b/workflow/engine/src/ProcessMaker/Plugins/Traits/PluginStructure.php index bce8734d6..bb66ba1ee 100644 --- a/workflow/engine/src/ProcessMaker/Plugins/Traits/PluginStructure.php +++ b/workflow/engine/src/ProcessMaker/Plugins/Traits/PluginStructure.php @@ -43,13 +43,13 @@ trait PluginStructure private $_restServices = array(); /** @var array Reports added */ private $_aReports = array(); - /** @var array */ + /** @var array */ private $_aDashboardPages = array(); /** @var array Dashlets added */ private $_aDashlets = array(); /** @var array Toolbar file added */ private $_aToolbarFiles = array(); - /** @var array Case Scheduler added */ + /** @var array Case Scheduler added */ private $_aCaseSchedulerPlugin = array(); /** @var array Task Extended added */ private $_aTaskExtendedProperties = array(); @@ -248,9 +248,7 @@ trait PluginStructure */ private function buildRestService($restServices) { - foreach ($restServices as $restService) { - $this->_restServices = array_merge($this->_restServices, $restService); - } + $this->_restServices = array_merge($this->_restServices, $restServices); } /** @@ -264,7 +262,7 @@ trait PluginStructure foreach ($attributes as $key => $value) { $this->_aPlugins[$namespace]->{$key} = $value; if (property_exists($this, $key)) { - $this->{$key} = array_merge($this->{$key}, $value); + $this->{$key} = array_merge($this->{$key}, (array)$value); } } } @@ -288,8 +286,7 @@ trait PluginStructure foreach ($PluginRegistry as $propertyName => $propertyValue) { foreach ($propertyValue as $key => $plugin) { if (is_object($plugin) && - ((property_exists($plugin, 'Namespace') && $plugin->equalNamespaceTo($Namespace)) || - (!is_int($key) && $key == $Namespace)) + property_exists($plugin, 'Namespace') && $plugin->equalNamespaceTo($Namespace) ) { $newStructurePlugin[$propertyName][] = $plugin; } elseif (is_object($plugin) && @@ -297,6 +294,8 @@ trait PluginStructure $plugin->pluginName == $Namespace ) { $newStructurePlugin[$propertyName][] = $plugin; + } elseif (is_string($key) && $key == $Namespace) { + $newStructurePlugin[$propertyName][$key] = $plugin; } elseif (is_string($plugin) && $plugin == $Namespace) { $newStructurePlugin[$propertyName][] = $plugin; } diff --git a/workflow/engine/templates/cases/cases_StepsTree.php b/workflow/engine/templates/cases/cases_StepsTree.php index e8c2489d7..c64aa0f7b 100644 --- a/workflow/engine/templates/cases/cases_StepsTree.php +++ b/workflow/engine/templates/cases/cases_StepsTree.php @@ -23,12 +23,14 @@ * */ +use ProcessMaker\Plugins\PluginRegistry; + $c = new Criteria(); $c->add ( StepPeer::PRO_UID, $_SESSION['PROCESS'] ); $c->add ( StepPeer::TAS_UID, $_SESSION['TASK'] ); $c->addAscendingOrderByColumn ( StepPeer::STEP_POSITION ); - $oPluginRegistry = \ProcessMaker\Plugins\PluginRegistry::loadSingleton(); + $oPluginRegistry = PluginRegistry::loadSingleton(); $externalSteps = $oPluginRegistry->getSteps(); $oTree = new Tree(); @@ -70,7 +72,7 @@ $sType = $oDocument->getInpDocFormNeeded(); break; case 'EXTERNAL': $stepTitle = 'unknown ' . $aRow->getStepUidObj(); - $oPluginRegistry = &PMPluginRegistry::getSingleton (); + $oPluginRegistry = PluginRegistry::loadSingleton(); /** @var \ProcessMaker\Plugins\Interfaces\StepDetail $val */ foreach ( $externalSteps as $val ) { if ($val->equalStepIdTo($aRow->getStepUidObj())) { @@ -185,11 +187,12 @@ break; case 'EXTERNAL': $aActions = array ('action' => 'label' ); - $oPluginRegistry = &PMPluginRegistry::getSingleton (); + $oPluginRegistry = PluginRegistry::loadSingleton(); + /** @var \ProcessMaker\Plugins\Interfaces\StepDetail $val */ foreach ( $externalSteps as $key=>$val ) { - if ( $val->sStepId == $aRow->getStepUidObj() ) { - $stepTitle = $val->sStepTitle; //default title - $sNamespace = $val->sNamespace; + if ($val->equalStepIdTo($aRow->getStepUidObj())) { + $stepTitle = $val->getStepTitle(); //default title + $sNamespace = $val->getNamespace(); $oPlugin =& $oPluginRegistry->getPlugin($sNamespace); $classFile = PATH_PLUGINS . $oPlugin->sNamespace . PATH_SEP . 'class.' . $oPlugin->sNamespace .'.php'; if ( file_exists ( $classFile ) ) { diff --git a/workflow/engine/templates/steps/triggers_Tree.php b/workflow/engine/templates/steps/triggers_Tree.php index 0a24686ec..1fe564249 100644 --- a/workflow/engine/templates/steps/triggers_Tree.php +++ b/workflow/engine/templates/steps/triggers_Tree.php @@ -23,10 +23,12 @@ * */ +use ProcessMaker\Plugins\PluginRegistry; + try { //call plugin - $oPluginRegistry = \ProcessMaker\Plugins\PluginRegistry::loadSingleton(); + $oPluginRegistry = PluginRegistry::loadSingleton(); $externalSteps = $oPluginRegistry->getSteps(); $oProcessMap = new ProcessMap(); diff --git a/workflow/public_html/bootstrap.php b/workflow/public_html/bootstrap.php index 0b41e9256..ac472e9e5 100644 --- a/workflow/public_html/bootstrap.php +++ b/workflow/public_html/bootstrap.php @@ -23,6 +23,8 @@ * */ +use ProcessMaker\Plugins\PluginRegistry; + /** * sysGeneric - ProcessMaker Bootstrap * this file is used initialize main variables, redirect and dispatch all requests @@ -419,7 +421,7 @@ //here we are loading all plugins registered //the singleton has a list of enabled plugins - $oPluginRegistry = \ProcessMaker\Plugins\PluginRegistry::loadSingleton(); + $oPluginRegistry = PluginRegistry::loadSingleton(); // setup propel definitions and logging require_once ( "propel/Propel.php" );