diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 08aa85354..4ec14eaa2 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -56,7 +56,7 @@ class G 'ldapadvanced' => LdapAdvanced::class, 'dashletopenvscompleted' => DashletOpenVsCompleted::class, 'dashletrssreader' => DashletRssReader::class, - 'dashletprocesspakerenterprise' => DashletProcessMakerEnterprise::class, + 'dashletprocessmakerenterprise' => DashletProcessMakerEnterprise::class, 'dashletprocessmakercommunity' => DashletProcessMakerCommunity::class, ]; @@ -5883,7 +5883,8 @@ class G /** * Instanciate an adapter by name. * - * @param string $name Adapter name or class name + * @param string $name Adapter name or class name :P + * * @param string[] $parameters Constructor parameters */ public static function factory($name, ...$parameters) @@ -5893,4 +5894,29 @@ class G $rc = new ReflectionClass($class); return $rc->newInstanceArgs($parameters); } + + /** + * Return current class + * + * @param $name string name class + * @return string name of class + */ + public static function nameClass($name) + { + $key = strtolower($name); + return isset(self::$adapters[$key]) ? self::$adapters[$key] : $name; + } + + /** + * Verify class exists + * + * @param $name + * @return bool true or false + */ + public static function classExists($name) + { + $key = strtolower($name); + $class = isset(self::$adapters[$key]) ? self::$adapters[$key] : $name; + return class_exists($class); + } } diff --git a/workflow/engine/classes/PmDashlet.php b/workflow/engine/classes/PmDashlet.php index 13a75cc35..b461c5baf 100644 --- a/workflow/engine/classes/PmDashlet.php +++ b/workflow/engine/classes/PmDashlet.php @@ -12,49 +12,110 @@ class PmDashlet extends DashletInstance implements DashletInterface // Interface functions + /** + * verify if file exists or no, return the path of file. + * + * @param $name file + * @param string $type CORE or PLUGIN + * @return stdClass information of file + */ + private function verifyExistsFile($name, $type = 'CORE') + { + $response = new stdClass(); + $response->exists = false; + $response->path = ''; + $response->plugin = ''; + $response->className = $name; - public static function getAdditionalFields ($className) + //Compatibility with old files + $paths = [ + 'classes' . PATH_SEP . $name . '.php', + 'classes' . PATH_SEP . ucfirst($name) . '.php', + 'classes' . PATH_SEP . 'class.' . $name . '.php' + ]; + + switch ($type) { + case 'CORE': + foreach ($paths as $key => $path) { + if (file_exists(PATH_CORE . $path)) { + $response->exists = true; + $response->path = PATH_CORE . $path; + $response->className = $key == 1 ? ucfirst($name) : $name; + break; + } + } + break; + case 'PLUGIN': + foreach (self::getIncludePath() as $plugin => $pathPlugin) { + foreach ($paths as $key => $path) { + if (file_exists($pathPlugin . $path)) { + $response->exists = true; + $response->path = $pathPlugin . $path; + $response->className = $key == 1 ? ucfirst($name) : $name; + $response->plugin = $plugin; + break 2; + } + } + } + break; + default: + break; + } + + return $response; + } + + + public static function getAdditionalFields($className) { try { - if (! class_exists( $className )) { - self::setIncludePath(); - require_once 'classes' . PATH_SEP . 'class.' . $className . '.php'; + if (!G::classExists($className)) { + $file = self::verifyExistsFile($className, 'PLUGIN'); + if ($file->exists) { + $className = $file->className; + require_once $file->path; + } + } else { + $className = G::nameClass($className); } - eval( "\$additionalFields = $className::getAdditionalFields(\$className);" ); + eval("\$additionalFields = $className::getAdditionalFields(\$className);"); return $additionalFields; } catch (Exception $error) { throw $error; } } - public function setup ($dasInsUid) + public function setup($dasInsUid) { try { - $this->dashletInstance = $this->loadDashletInstance( $dasInsUid ); - - if (! isset( $this->dashletInstance['DAS_CLASS'] )) { - throw new Exception( G::LoadTranslation( 'ID_ERROR_OBJECT_NOT_EXISTS' ) . ' - Probably the plugin related is disabled' ); + $this->dashletInstance = $this->loadDashletInstance($dasInsUid); + + if (!isset($this->dashletInstance['DAS_CLASS'])) { + throw new Exception(G::LoadTranslation('ID_ERROR_OBJECT_NOT_EXISTS') . ' - Probably the plugin related is disabled'); } $className = $this->dashletInstance['DAS_CLASS']; - if (! class_exists( $className )) { - self::setIncludePath(); - require_once 'classes' . PATH_SEP . 'class.' . $className . '.php'; + if (!G::classExists($className)) { + $file = self::verifyExistsFile($className, 'PLUGIN'); + if ($file->exists) { + $className = $file->className; + require_once $file->path; + } } $this->dashletObject = new $className(); - $this->dashletObject->setup( $this->dashletInstance ); + $this->dashletObject->setup($this->dashletInstance); } catch (Exception $error) { throw $error; } } - public function render ($width = 300) + public function render($width = 300) { try { - if (is_null( $this->dashletObject )) { - throw new Exception( 'Please call to the function "setup" before call the function "render".' ); + if (is_null($this->dashletObject)) { + throw new Exception('Please call to the function "setup" before call the function "render".'); } - $this->dashletObject->render( $width ); + $this->dashletObject->render($width); } catch (Exception $error) { throw $error; } @@ -63,12 +124,12 @@ class PmDashlet extends DashletInstance implements DashletInterface // Getter and Setters - public function getDashletInstance () + public function getDashletInstance() { return $this->dashletInstance; } - public function getDashletObject () + public function getDashletObject() { return $this->dashletObject; } @@ -76,74 +137,73 @@ class PmDashlet extends DashletInstance implements DashletInterface // Own functions - public function getDashletsInstances ($start = null, $limit = null) - { + public function getDashletsInstances($start = null, $limit = null) + { try { - $dashletsInstances = array (); - $criteria = new Criteria( 'workflow' ); - $criteria->addSelectColumn( '*' ); - $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN ); - if (! is_null( $start )) { - $criteria->setOffset( $start ); + $dashletsInstances = array(); + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn('*'); + $criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN); + if (!is_null($start)) { + $criteria->setOffset($start); } - if (! is_null( $limit )) { - $criteria->setLimit( $limit ); + if (!is_null($limit)) { + $criteria->setLimit($limit); } - $dataset = DashletInstancePeer::doSelectRS( $criteria ); - $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $dataset = DashletInstancePeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataset->next(); while ($row = $dataset->getRow()) { - $arrayField = unserialize( $row["DAS_INS_ADDITIONAL_PROPERTIES"] ); + $arrayField = unserialize($row["DAS_INS_ADDITIONAL_PROPERTIES"]); if (strstr($row['DAS_TITLE'], '*')) { - $row['DAS_TITLE'] = G::LoadTranslationPlugin('advancedDashboards', str_replace("*","",$row['DAS_TITLE'])); + $row['DAS_TITLE'] = G::LoadTranslationPlugin('advancedDashboards', str_replace("*", "", $row['DAS_TITLE'])); } - $row['DAS_INS_STATUS_LABEL'] = ($row['DAS_INS_STATUS'] == '1' ? G::LoadTranslation( 'ID_ACTIVE' ) : G::LoadTranslation( 'ID_INACTIVE' )); - $row['DAS_INS_TITLE'] = (isset( $arrayField['DAS_INS_TITLE'] ) && ! empty( $arrayField['DAS_INS_TITLE'] )) ? $arrayField['DAS_INS_TITLE'] : ''; - if (! class_exists( $row['DAS_CLASS'] )) { - self::setIncludePath(); - @include 'classes' . PATH_SEP . 'class.' . $row['DAS_CLASS'] . '.php'; - if (! class_exists( $row['DAS_CLASS'] )) { + $row['DAS_INS_STATUS_LABEL'] = ($row['DAS_INS_STATUS'] == '1' ? G::LoadTranslation('ID_ACTIVE') : G::LoadTranslation('ID_INACTIVE')); + $row['DAS_INS_TITLE'] = (isset($arrayField['DAS_INS_TITLE']) && !empty($arrayField['DAS_INS_TITLE'])) ? $arrayField['DAS_INS_TITLE'] : ''; + if (!G::classExists($row['DAS_CLASS'])) { + $file = self::verifyExistsFile($row['DAS_CLASS'], 'PLUGIN'); + if ($file->exists) { + $row['DAS_CLASS'] = $file->className; + require_once $file->path; + } else { $dataset->next(); continue; } } - eval( "\$row['DAS_VERSION'] = defined('" . $row['DAS_CLASS'] . "::version') ? " . $row['DAS_CLASS'] . "::version : \$row['DAS_VERSION'];" ); + eval("\$row['DAS_VERSION'] = defined('" . $row['DAS_CLASS'] . "::version') ? " . $row['DAS_CLASS'] . "::version : \$row['DAS_VERSION'];"); switch ($row['DAS_INS_OWNER_TYPE']) { case 'EVERYBODY': - $row['DAS_INS_OWNER_TITLE'] = G::LoadTranslation( 'ID_ALL_USERS' ); + $row['DAS_INS_OWNER_TITLE'] = G::LoadTranslation('ID_ALL_USERS'); break; case 'USER': - require_once 'classes/model/Users.php'; $userInstance = new Users(); try { - $user = $userInstance->load( $row['DAS_INS_OWNER_UID'] ); + $user = $userInstance->load($row['DAS_INS_OWNER_UID']); $row['DAS_INS_OWNER_TITLE'] = $user['USR_FIRSTNAME'] . ' ' . $user['USR_LASTNAME']; } catch (Exception $error) { - $this->remove( $row['DAS_INS_UID'] ); + $this->remove($row['DAS_INS_UID']); $row['DAS_INS_UID'] = ''; } break; case 'DEPARTMENT': - require_once 'classes/model/Department.php'; $departmentInstance = new Department(); try { - $department = $departmentInstance->load( $row['DAS_INS_OWNER_UID'] ); + $department = $departmentInstance->load($row['DAS_INS_OWNER_UID']); $row['DAS_INS_OWNER_TITLE'] = $department['DEP_TITLE']; } catch (Exception $error) { - $this->remove( $row['DAS_INS_UID'] ); + $this->remove($row['DAS_INS_UID']); $row['DAS_INS_UID'] = ''; } break; case 'GROUP': - require_once 'classes/model/Groupwf.php'; $groupInstance = new Groupwf(); try { - $group = $groupInstance->load( $row['DAS_INS_OWNER_UID'] ); + $group = $groupInstance->load($row['DAS_INS_OWNER_UID']); $row['DAS_INS_OWNER_TITLE'] = $group['GRP_TITLE']; } catch (Exception $error) { - $this->remove( $row['DAS_INS_UID'] ); + $this->remove($row['DAS_INS_UID']); $row['DAS_INS_UID'] = ''; } break; @@ -163,67 +223,64 @@ class PmDashlet extends DashletInstance implements DashletInterface } } - public function loadDashletInstance ($dasInsUid) + public function loadDashletInstance($dasInsUid) { try { - $dashletInstance = $this->load( $dasInsUid ); + $dashletInstance = $this->load($dasInsUid); //Load data from the serialized field $dashlet = new Dashlet(); - $dashletFields = $dashlet->load( $dashletInstance['DAS_UID'] ); - if (is_null( $dashletFields )) { - $dashletFields = array (); + $dashletFields = $dashlet->load($dashletInstance['DAS_UID']); + if (is_null($dashletFields)) { + $dashletFields = array(); } - return array_merge( $dashletFields, $dashletInstance ); + return array_merge($dashletFields, $dashletInstance); } catch (Exception $error) { throw $error; } } - public function saveDashletInstance ($data) + public function saveDashletInstance($data) { try { - $this->createOrUpdate( $data ); + $this->createOrUpdate($data); } catch (Exception $error) { throw $error; } } - public function deleteDashletInstance ($dasInsUid) + public function deleteDashletInstance($dasInsUid) { try { - $this->remove( $dasInsUid ); + $this->remove($dasInsUid); } catch (Exception $error) { throw $error; } } - public function getDashletsInstancesForUser ($userUid) + public function getDashletsInstancesForUser($userUid) { try { - $dashletsInstances = array (); - // Include required classes - require_once 'classes/model/Department.php'; - require_once 'classes/model/Users.php'; + $dashletsInstances = array(); // Check for "public" dashlets - $criteria = new Criteria( 'workflow' ); - $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_UID ); - $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES ); - $criteria->addSelectColumn( DashletPeer::DAS_CLASS ); - $criteria->addSelectColumn( DashletPeer::DAS_TITLE ); - $criteria->add( DashletInstancePeer::DAS_INS_STATUS, '1' ); - $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN ); - $criteria->add( DashletInstancePeer::DAS_INS_OWNER_TYPE, 'EVERYBODY' ); - $dataset = DashletInstancePeer::doSelectRS( $criteria ); - $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_UID); + $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES); + $criteria->addSelectColumn(DashletPeer::DAS_CLASS); + $criteria->addSelectColumn(DashletPeer::DAS_TITLE); + $criteria->add(DashletInstancePeer::DAS_INS_STATUS, '1'); + $criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN); + $criteria->add(DashletInstancePeer::DAS_INS_OWNER_TYPE, 'EVERYBODY'); + $dataset = DashletInstancePeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataset->next(); while ($row = $dataset->getRow()) { - if (! isset( $dashletsInstances[$row['DAS_INS_UID']] )) { - $arrayField = unserialize( $row["DAS_INS_ADDITIONAL_PROPERTIES"] ); + if (!isset($dashletsInstances[$row['DAS_INS_UID']])) { + $arrayField = unserialize($row["DAS_INS_ADDITIONAL_PROPERTIES"]); if (self::verifyPluginDashlet($row['DAS_CLASS'])) { - $row['DAS_XTEMPLATE'] = $this->getXTemplate( $row['DAS_CLASS'] ); - $row["DAS_TITLE"] = (isset( $arrayField["DAS_INS_TITLE"] ) && ! empty( $arrayField["DAS_INS_TITLE"] )) ? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"]; - $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset( $arrayField["DAS_INS_SUBTITLE"] ) && ! empty( $arrayField["DAS_INS_SUBTITLE"] )) ? str_replace( "@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"] ) : null); + $row['DAS_XTEMPLATE'] = $this->getXTemplate($row['DAS_CLASS']); + $row["DAS_TITLE"] = (isset($arrayField["DAS_INS_TITLE"]) && !empty($arrayField["DAS_INS_TITLE"])) ? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"]; + $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset($arrayField["DAS_INS_SUBTITLE"]) && !empty($arrayField["DAS_INS_SUBTITLE"])) ? str_replace("@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"]) : null); $dashletsInstances[$row['DAS_INS_UID']] = $row; } @@ -232,26 +289,26 @@ class PmDashlet extends DashletInstance implements DashletInterface } // Check for the direct assignments $usersInstance = new Users(); - $criteria = new Criteria( 'workflow' ); - $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_UID ); - $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES ); - $criteria->addSelectColumn( DashletPeer::DAS_CLASS ); - $criteria->addSelectColumn( DashletPeer::DAS_TITLE ); - $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN ); - $criteria->add( DashletInstancePeer::DAS_INS_STATUS, '1' ); - $criteria->add( DashletInstancePeer::DAS_INS_OWNER_TYPE, 'USER' ); - $criteria->add( DashletInstancePeer::DAS_INS_OWNER_UID, $userUid ); - $dataset = DashletInstancePeer::doSelectRS( $criteria ); - $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_UID); + $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES); + $criteria->addSelectColumn(DashletPeer::DAS_CLASS); + $criteria->addSelectColumn(DashletPeer::DAS_TITLE); + $criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN); + $criteria->add(DashletInstancePeer::DAS_INS_STATUS, '1'); + $criteria->add(DashletInstancePeer::DAS_INS_OWNER_TYPE, 'USER'); + $criteria->add(DashletInstancePeer::DAS_INS_OWNER_UID, $userUid); + $dataset = DashletInstancePeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataset->next(); while ($row = $dataset->getRow()) { - if (! isset( $dashletsInstances[$row['DAS_INS_UID']] )) { - $arrayField = unserialize( $row["DAS_INS_ADDITIONAL_PROPERTIES"] ); + if (!isset($dashletsInstances[$row['DAS_INS_UID']])) { + $arrayField = unserialize($row["DAS_INS_ADDITIONAL_PROPERTIES"]); if (self::verifyPluginDashlet($row['DAS_CLASS'])) { - $row['DAS_XTEMPLATE'] = $this->getXTemplate( $row['DAS_CLASS'] ); - $row["DAS_TITLE"] = (isset( $arrayField["DAS_INS_TITLE"] ) && ! empty( $arrayField["DAS_INS_TITLE"] )) ? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"]; - $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset( $arrayField["DAS_INS_SUBTITLE"] ) && ! empty( $arrayField["DAS_INS_SUBTITLE"] )) ? str_replace( "@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"] ) : null); + $row['DAS_XTEMPLATE'] = $this->getXTemplate($row['DAS_CLASS']); + $row["DAS_TITLE"] = (isset($arrayField["DAS_INS_TITLE"]) && !empty($arrayField["DAS_INS_TITLE"])) ? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"]; + $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset($arrayField["DAS_INS_SUBTITLE"]) && !empty($arrayField["DAS_INS_SUBTITLE"])) ? str_replace("@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"]) : null); $dashletsInstances[$row['DAS_INS_UID']] = $row; } @@ -260,28 +317,28 @@ class PmDashlet extends DashletInstance implements DashletInterface } // Check for department assigments $departmentInstance = new Department(); - $departments = $departmentInstance->getDepartmentsForUser( $userUid ); + $departments = $departmentInstance->getDepartmentsForUser($userUid); foreach ($departments as $depUid => $department) { - $criteria = new Criteria( 'workflow' ); - $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_UID ); - $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES ); - $criteria->addSelectColumn( DashletPeer::DAS_CLASS ); - $criteria->addSelectColumn( DashletPeer::DAS_TITLE ); - $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN ); - $criteria->add( DashletInstancePeer::DAS_INS_STATUS, '1' ); - $criteria->add( DashletInstancePeer::DAS_INS_OWNER_TYPE, 'DEPARTMENT' ); - $criteria->add( DashletInstancePeer::DAS_INS_OWNER_UID, $depUid ); - $dataset = DashletInstancePeer::doSelectRS( $criteria ); - $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_UID); + $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES); + $criteria->addSelectColumn(DashletPeer::DAS_CLASS); + $criteria->addSelectColumn(DashletPeer::DAS_TITLE); + $criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN); + $criteria->add(DashletInstancePeer::DAS_INS_STATUS, '1'); + $criteria->add(DashletInstancePeer::DAS_INS_OWNER_TYPE, 'DEPARTMENT'); + $criteria->add(DashletInstancePeer::DAS_INS_OWNER_UID, $depUid); + $dataset = DashletInstancePeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataset->next(); while ($row = $dataset->getRow()) { - if (! isset( $dashletsInstances[$row['DAS_INS_UID']] )) { - $arrayField = unserialize( $row["DAS_INS_ADDITIONAL_PROPERTIES"] ); + if (!isset($dashletsInstances[$row['DAS_INS_UID']])) { + $arrayField = unserialize($row["DAS_INS_ADDITIONAL_PROPERTIES"]); if (self::verifyPluginDashlet($row["DAS_CLASS"])) { - $row['DAS_XTEMPLATE'] = $this->getXTemplate( $row['DAS_CLASS'] ); - $row["DAS_TITLE"] = (isset( $arrayField["DAS_INS_TITLE"] ) && ! empty( $arrayField["DAS_INS_TITLE"] )) ? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"]; - $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset( $arrayField["DAS_INS_SUBTITLE"] ) && ! empty( $arrayField["DAS_INS_SUBTITLE"] )) ? str_replace( "@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"] ) : null); + $row['DAS_XTEMPLATE'] = $this->getXTemplate($row['DAS_CLASS']); + $row["DAS_TITLE"] = (isset($arrayField["DAS_INS_TITLE"]) && !empty($arrayField["DAS_INS_TITLE"])) ? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"]; + $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset($arrayField["DAS_INS_SUBTITLE"]) && !empty($arrayField["DAS_INS_SUBTITLE"])) ? str_replace("@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"]) : null); $dashletsInstances[$row['DAS_INS_UID']] = $row; } @@ -291,28 +348,28 @@ class PmDashlet extends DashletInstance implements DashletInterface } // Check for group assignments $groupsInstance = new Groups(); - $groups = $groupsInstance->getGroupsForUser( $userUid ); + $groups = $groupsInstance->getGroupsForUser($userUid); foreach ($groups as $grpUid => $group) { - $criteria = new Criteria( 'workflow' ); - $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_UID ); - $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES ); - $criteria->addSelectColumn( DashletPeer::DAS_CLASS ); - $criteria->addSelectColumn( DashletPeer::DAS_TITLE ); - $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN ); - $criteria->add( DashletInstancePeer::DAS_INS_STATUS, '1' ); - $criteria->add( DashletInstancePeer::DAS_INS_OWNER_TYPE, 'GROUP' ); - $criteria->add( DashletInstancePeer::DAS_INS_OWNER_UID, $grpUid ); - $dataset = DashletInstancePeer::doSelectRS( $criteria ); - $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_UID); + $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES); + $criteria->addSelectColumn(DashletPeer::DAS_CLASS); + $criteria->addSelectColumn(DashletPeer::DAS_TITLE); + $criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN); + $criteria->add(DashletInstancePeer::DAS_INS_STATUS, '1'); + $criteria->add(DashletInstancePeer::DAS_INS_OWNER_TYPE, 'GROUP'); + $criteria->add(DashletInstancePeer::DAS_INS_OWNER_UID, $grpUid); + $dataset = DashletInstancePeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataset->next(); while ($row = $dataset->getRow()) { - if (! isset( $dashletsInstances[$row['DAS_INS_UID']] )) { - $arrayField = unserialize( $row["DAS_INS_ADDITIONAL_PROPERTIES"] ); + if (!isset($dashletsInstances[$row['DAS_INS_UID']])) { + $arrayField = unserialize($row["DAS_INS_ADDITIONAL_PROPERTIES"]); if (self::verifyPluginDashlet($row["DAS_CLASS"])) { - $row['DAS_XTEMPLATE'] = $this->getXTemplate( $row['DAS_CLASS'] ); - $row["DAS_TITLE"] = (isset( $arrayField["DAS_INS_TITLE"] ) && ! empty( $arrayField["DAS_INS_TITLE"] )) ? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"]; - $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset( $arrayField["DAS_INS_SUBTITLE"] ) && ! empty( $arrayField["DAS_INS_SUBTITLE"] )) ? str_replace( "@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"] ) : null); + $row['DAS_XTEMPLATE'] = $this->getXTemplate($row['DAS_CLASS']); + $row["DAS_TITLE"] = (isset($arrayField["DAS_INS_TITLE"]) && !empty($arrayField["DAS_INS_TITLE"])) ? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"]; + $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset($arrayField["DAS_INS_SUBTITLE"]) && !empty($arrayField["DAS_INS_SUBTITLE"])) ? str_replace("@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"]) : null); $dashletsInstances[$row['DAS_INS_UID']] = $row; } @@ -321,82 +378,81 @@ class PmDashlet extends DashletInstance implements DashletInterface } } foreach ($dashletsInstances as $key => $field) { - $dashletsInstances[$key]['DAS_TITLE'] = htmlentities($field['DAS_TITLE'], ENT_QUOTES, 'UTF-8') . ''; + $dashletsInstances[$key]['DAS_TITLE'] = htmlentities($field['DAS_TITLE'], ENT_QUOTES, 'UTF-8') . ''; } // Check for role assigments // ToDo: Next release // Check for permission assigments // ToDo: Next release - return array_values( $dashletsInstances ); + return array_values($dashletsInstances); } catch (Exception $error) { throw $error; } } - public static function getXTemplate ($className) + /** + * Get template for class + * + * @param $className string name of file + * @return mixed string template dashboard + * @throws Exception + */ + public static function getXTemplate($className) { try { - if (! class_exists( $className )) { - self::setIncludePath(); - require_once 'classes' . PATH_SEP . 'class.' . $className . '.php'; + if (!G::classExists($className)) { + $file = self::verifyExistsFile($className, 'PLUGIN'); + if ($file->exists) { + $className = $file->className; + require_once $file->path; + } + } else { + $className = G::nameClass($className); } - eval( "\$additionalFields = $className::getXTemplate(\$className);" ); + eval("\$additionalFields = $className::getXTemplate(\$className);"); return $additionalFields; } catch (Exception $error) { throw $error; } } - public static function verifyPluginDashlet ($className) + public static function verifyPluginDashlet($className) { - // 1-- if name class is in core - $fileExist = PATH_CORE . 'classes' . PATH_SEP . 'class.' . $className . '.php'; - if (file_exists($fileExist)) { - return true; - } - - // 2-- if name class is in plugin - - //---- verify the name plugin of the class - $pluginName = ''; - $oPluginRegistry = PluginRegistry::loadSingleton(); - $pluginsDashlets = $oPluginRegistry->getDashlets(); - - foreach ($pluginsDashlets as $pluginDashlet) { - $fileExist = PATH_PLUGINS . $pluginDashlet . PATH_SEP . 'classes' . PATH_SEP . 'class.' . $className . '.php'; - if (file_exists($fileExist)) { - $pluginName = $pluginDashlet; - break; - } - } - - //---- verify if the plugin is active - if ($pluginName == '') { - return false; + $fileExists = false; + if (G::classExists($className)) { + $fileExists = true; } else { - if ($handle = opendir( PATH_PLUGINS )) { - while (false !== ($file = readdir( $handle ))) { - if (strpos( $file, '.php', 1 ) && is_file( PATH_PLUGINS . $file )) { - include_once (PATH_PLUGINS . $file); - $pluginDetail = $oPluginRegistry->getPluginDetails( $file ); - if ($pluginDetail->getNamespace() == $pluginName) { - return $pluginDetail->isEnabled(); + // 2-- if name class is in plugin + $file = self::verifyExistsFile($className, 'PLUGIN'); + if ($file->exists && !empty($file->plugin)) { + //---- verify if the plugin is active + if ($handle = opendir(PATH_PLUGINS)) { + $oPluginRegistry = PluginRegistry::loadSingleton(); + while (false !== ($filePlugin = readdir($handle))) { + if (strpos($filePlugin, '.php', 1) && is_file(PATH_PLUGINS . $filePlugin)) { + include_once(PATH_PLUGINS . $filePlugin); + $pluginDetail = $oPluginRegistry->getPluginDetails($filePlugin); + if ($pluginDetail->getNamespace() == $file->plugin) { + $fileExists = $pluginDetail->isEnabled(); + } } } + closedir($handle); } - closedir( $handle ); } - return true; } + return true; } - private static function setIncludePath () + private static function getIncludePath() { $oPluginRegistry = PluginRegistry::loadSingleton(); $pluginsDashlets = $oPluginRegistry->getDashlets(); + $paths = []; foreach ($pluginsDashlets as $pluginDashlet) { - set_include_path( get_include_path() . PATH_SEPARATOR . PATH_PLUGINS . $pluginDashlet . PATH_SEP ); + $paths[$pluginDashlet] = PATH_PLUGINS . $pluginDashlet . PATH_SEP; } + return $paths; } } \ No newline at end of file