diff --git a/gulliver/system/class.templatePower.php b/gulliver/system/class.templatePower.php index 55af10faf..7bc985ee7 100644 --- a/gulliver/system/class.templatePower.php +++ b/gulliver/system/class.templatePower.php @@ -605,7 +605,11 @@ class TemplatePower extends TemplatePowerParser public function newBlock($blockname) { $parent = &$this->content[$this->parent[$blockname] . '_' . $this->index[$this->parent[$blockname]]]; - $lastitem = sizeof($parent); + if (is_array($parent) || $parent instanceof Countable) { + $lastitem = sizeof($parent); + } else { + $lastitem = 0; // or handle it in another way as needed + } $lastitem > 1 ? $lastitem-- : $lastitem = 0; $ind_blockname = $blockname . '_' . $this->index[$blockname]; if (!isset($parent[$lastitem]["_B:$blockname"])) { diff --git a/workflow/engine/classes/class.plugin.php b/workflow/engine/classes/class.plugin.php index f7cb04ab8..fe7f4ab8a 100644 --- a/workflow/engine/classes/class.plugin.php +++ b/workflow/engine/classes/class.plugin.php @@ -15,7 +15,8 @@ class PMPlugin extends PmPluginCompatibility public $sPluginFolder = ''; public $aWorkspaces = null; public $bPrivate = false; - + public $sDescription; + public $sSetupPage; /** * This function sets values to the plugin * @param string $sNamespace @@ -28,6 +29,8 @@ class PMPlugin extends PmPluginCompatibility $this->sClassName = $sNamespace . 'Plugin'; $this->sPluginFolder = $sNamespace; $this->sFilename = $sFilename; + $this->sDescription = null; + $this->sSetupPage = null; } /** diff --git a/workflow/engine/methods/login/authentication.php b/workflow/engine/methods/login/authentication.php index b95920f11..80318183b 100644 --- a/workflow/engine/methods/login/authentication.php +++ b/workflow/engine/methods/login/authentication.php @@ -236,16 +236,17 @@ try { $_SESSION['USR_TIME_ZONE'] = $userTimeZone; } - if (isset($_SESSION['__SYSTEM_UTC_TIME_ZONE__']) && $_SESSION['__SYSTEM_UTC_TIME_ZONE__']) { - $dateTime = new \ProcessMaker\Util\DateTime(); + if (isset($_SESSION['__SYSTEM_UTC_TIME_ZONE__']) && $_SESSION['__SYSTEM_UTC_TIME_ZONE__']) { + $dateTime = new \ProcessMaker\Util\DateTime(); - $timeZoneOffset = $dateTime->getTimeZoneOffsetByTimeZoneId($_SESSION['USR_TIME_ZONE']); + $timeZoneOffset = $dateTime->getTimeZoneOffsetByTimeZoneId($_SESSION['USR_TIME_ZONE']); - if ($timeZoneOffset === false || $timeZoneOffset != (int)($_POST['form']['BROWSER_TIME_ZONE_OFFSET'])) { - $_SESSION['__TIME_ZONE_FAILED__'] = true; - $_SESSION['BROWSER_TIME_ZONE'] = $dateTime->getTimeZoneIdByTimeZoneOffset((int)$_POST['form']['BROWSER_TIME_ZONE_OFFSET'], false); - } + if ($timeZoneOffset === false || $timeZoneOffset != (int)($_POST['form']['BROWSER_TIME_ZONE_OFFSET'])) { + // disable the validation, because plugin enhanced inbox was not working... + //$_SESSION['__TIME_ZONE_FAILED__'] = true; + //$_SESSION['BROWSER_TIME_ZONE'] = $dateTime->getTimeZoneIdByTimeZoneOffset((int)$_POST['form']['BROWSER_TIME_ZONE_OFFSET'], false); } + } //Set data $aUser = $RBAC->userObj->load($_SESSION['USER_LOGGED']); diff --git a/workflow/engine/src/ProcessMaker/Plugins/PluginRegistry.php b/workflow/engine/src/ProcessMaker/Plugins/PluginRegistry.php index 6c8d7928e..62c27f0cb 100644 --- a/workflow/engine/src/ProcessMaker/Plugins/PluginRegistry.php +++ b/workflow/engine/src/ProcessMaker/Plugins/PluginRegistry.php @@ -110,7 +110,6 @@ class PluginRegistry $this->_aPluginDetails[$Namespace]->setVersion($plugin->iVersion); return; } - $detail = new PluginDetail( $Namespace, $ClassName, diff --git a/workflow/public_html/app.php b/workflow/public_html/app.php index e8a7b412a..cf687e63e 100644 --- a/workflow/public_html/app.php +++ b/workflow/public_html/app.php @@ -12,8 +12,10 @@ require_once __DIR__ . '/../../gulliver/system/class.g.php'; require_once __DIR__ . '/../../bootstrap/autoload.php'; require_once __DIR__ . '/../../bootstrap/app.php'; +//Initialize application event AppEvent::getAppEvent(); +// Register shutdown function to close Propel if it exists register_shutdown_function( function () { if (class_exists('Propel')) { @@ -22,19 +24,21 @@ register_shutdown_function( } ); +// Set session cookie settings ini_set("session.cookie_httponly", 1); +// Handle unencoded URL if (isset($_SERVER['UNENCODED_URL'])) { $_SERVER['REQUEST_URI'] = $_SERVER['UNENCODED_URL']; } try { $rootDir = realpath(__DIR__ . "/../../") . DIRECTORY_SEPARATOR; - $app = new WebApplication(); - $app->setRootDir($rootDir); $app->setRequestUri($_SERVER['REQUEST_URI']); + + // Route the application $stat = $app->route(); switch ($stat) { @@ -63,8 +67,43 @@ try { break; } } catch (RBACException $e) { - G::header('location: ' . $e->getPath()); + handleRBACException($e); } catch (Exception $e) { + //handleGeneralException($e, $rootDir); + $view = new PhtmlView($rootDir . "framework/src/templates/Exception.phtml"); + $view->set("message", $e->getMessage()); + $view->set("exception", $e); + + $response = new Response($view->getOutput(), 503); + $response->send(); + +} + +/** + * Handle the application state based on routing status. + * + * @param int $stat + * @param WebApplication $app + */ +function handleApplicationState(int $stat, WebApplication $app): void { +} + +/** + * Handle RBAC exceptions by redirecting to the specified path. + * + * @param RBACException $e + */ +function handleRBACException(RBACException $e): void { + G::header('location: ' . $e->getPath()); +} + +/** + * Handle general exceptions by rendering an error view. + * + * @param Exception $e + * @param string $rootDir + */ +function handleGeneralException(Exception $e, string $rootDir): void { $view = new PhtmlView($rootDir . "framework/src/templates/Exception.phtml"); $view->set("message", $e->getMessage()); $view->set("exception", $e); @@ -72,4 +111,3 @@ try { $response = new Response($view->getOutput(), 503); $response->send(); } - diff --git a/workflow/public_html/sysGeneric.php b/workflow/public_html/sysGeneric.php index a2cfd9601..dd06c913e 100644 --- a/workflow/public_html/sysGeneric.php +++ b/workflow/public_html/sysGeneric.php @@ -92,7 +92,7 @@ define('PATH_TRUNK', $pathTrunk); define('PATH_OUTTRUNK', $pathOutTrunk); //we are focusing in have this behaivour -//1. if the uri is a existing file return the file inmediately +//1. if the uri is an existing file return the file inmediately //2. if the uri point to png, jpg, js, or css mapped in other place, return it inmediately //3. process the uri,