. * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ /** * @package workflow.engine.classes */ class pluginDetail { var $sNamespace; var $sClassName; var $sFriendlyName = null; var $sDescription = null; var $sSetupPage = null; var $sFilename; var $sPluginFolder = ''; var $sCompanyLogo = ''; var $iVersion = 0; var $enabled = false; var $aWorkspaces = null; var $bPrivate = false; /** * This function is the constructor of the pluginDetail class * @param string $sNamespace * @param string $sClassName * @param string $sFilename * @param string $sFriendlyName * @param string $sPluginFolder * @param string $sDescription * @param string $sSetupPage * @param integer $iVersion * @return void */ function __construct( $sNamespace, $sClassName, $sFilename, $sFriendlyName = '', $sPluginFolder ='', $sDescription ='', $sSetupPage ='', $iVersion = 0) { $this->sNamespace = $sNamespace; $this->sClassName = $sClassName; $this->sFriendlyName = $sFriendlyName; $this->sDescription = $sDescription; $this->sSetupPage = $sSetupPage; $this->iVersion = $iVersion; $this->sFilename = $sFilename; if ( $sPluginFolder == '') $this->sPluginFolder = $sNamespace; else $this->sPluginFolder = $sPluginFolder ; } } /** * @package workflow.engine.classes */ class PMPluginRegistry { private $_aPluginDetails = array(); private $_aPlugins = array(); private $_aMenus = array(); private $_aFolders = array(); private $_aTriggers = array(); private $_aDashlets = array(); private $_aReports = array(); private $_aPmFunctions = array(); private $_aRedirectLogin = array(); private $_aSteps = array(); private $_aCSSStyleSheets = array(); private $_aToolbarFiles = array(); private $_aCaseSchedulerPlugin = array(); private $_aTaskExtendedProperties = array(); private $_aDashboardPages = array(); /** * Registry a plugin javascript to include with js core at same runtime */ private $_aJavascripts = array(); static private $instance = NULL; /** * This function is the constructor of the PMPluginRegistry class * param * @return void */ public function __construct() {} /** * This function is instancing to this class * param * @return object */ function &getSingleton() { if (self::$instance == NULL) { self::$instance = new PMPluginRegistry (); } return self::$instance; } /** * This function generates a storable representation of a value * param * @return void */ function serializeInstance() { return serialize ( self::$instance); } /** * This function takes a single serialized variable and converts it back a code * @param string $serialized * @return void */ function unSerializeInstance( $serialized ) { if (self::$instance == NULL) { self::$instance = new PMPluginRegistry (); } $instance = unserialize ( $serialized ); self::$instance = $instance; } /** * Save the current instance to the plugin singleton * */ function save() { file_put_contents ( PATH_DATA_SITE . 'plugin.singleton', $this->serializeInstance() ); } /** * Register the plugin in the singleton * * @param unknown_type $sClassName * @param unknown_type $sNamespace * @param unknown_type $sFilename */ function registerPlugin( $sNamespace, $sFilename = null) { $sClassName = $sNamespace . 'plugin'; if ( isset( $this->_aPluginDetails[$sNamespace] ) ) return; //require_once ( $sFilename ); $plugin = new $sClassName ($sNamespace, $sFilename); $detail = new pluginDetail ( $sNamespace, $sClassName, $sFilename, $plugin->sFriendlyName, $plugin->sPluginFolder, $plugin->sDescription, $plugin->sSetupPage, $plugin->iVersion ); if ( isset ($plugin->aWorkspaces) ) $detail->aWorkspaces = $plugin->aWorkspaces; if ( isset ($plugin->bPrivate) ) $detail->bPrivate = $plugin->bPrivate; //if ( isset( $this->_aPluginDetails[$sNamespace] ) ){ // $detail->enabled=$this->_aPluginDetails[$sNamespace]->enabled; //} $this->_aPluginDetails[$sNamespace] = $detail; } /** * get the plugin details, by filename * * @param unknown_type $sFilename */ function getPluginDetails( $sFilename ) { foreach ( $this->_aPluginDetails as $key => $row ) { if ( $sFilename == baseName ( $row->sFilename ) ) return $row; } return NULL; } /** * Enable the plugin in the singleton * * @param unknown_type $sNamespace */ function enablePlugin($sNamespace ) { foreach ( $this->_aPluginDetails as $namespace=>$detail ) { if ( $sNamespace == $namespace ) { $this->registerFolder($sNamespace, $sNamespace, $detail->sPluginFolder ); //register the default directory, later we can have more $this->_aPluginDetails[$sNamespace]->enabled = true; $oPlugin = new $detail->sClassName( $detail->sNamespace, $detail->sFilename ); $this->_aPlugins[$detail->sNamespace] = $oPlugin; if (method_exists($oPlugin, 'enable')) { $oPlugin->enable(); } return true; } } throw new Exception("Unable to enable plugin '$sNamespace' (plugin not found)"); } /** * disable the plugin in the singleton * * @param unknown_type $sNamespace */ function disablePlugin($sNamespace, $eventPlugin = 1) { $sw = false; foreach ($this->_aPluginDetails as $namespace => $detail) { if ($namespace == $sNamespace) { unset($this->_aPluginDetails[$sNamespace]); if ($eventPlugin == 1) { $plugin = new $detail->sClassName($detail->sNamespace, $detail->sFilename); $this->_aPlugins[$detail->sNamespace] = $plugin; if (method_exists($plugin, "disable")) { $plugin->disable(); } } $sw = true; } } if (!$sw) { throw new Exception("Unable to disable plugin '$sNamespace' (plugin not found)"); } foreach ( $this->_aMenus as $key=>$detail ) { if ( $detail->sNamespace == $sNamespace ) unset ( $this->_aMenus[ $key ] ); } foreach ( $this->_aFolders as $key=>$detail ) { if ( $detail->sNamespace == $sNamespace ) unset ( $this->_aFolders[ $key ] ); } foreach ( $this->_aTriggers as $key=>$detail ) { if ( $detail->sNamespace == $sNamespace ) unset ( $this->_aTriggers[ $key ] ); } foreach ($this->_aDashlets as $key => $detail) { if ($detail == $sNamespace) { unset($this->_aDashlets[$key]); } } foreach ( $this->_aReports as $key=>$detail ) { if ( $detail == $sNamespace ) unset ( $this->_aReports[ $key ] ); } foreach ( $this->_aPmFunctions as $key=>$detail ) { if ( $detail == $sNamespace ) unset ( $this->_aPmFunctions[ $key ] ); } foreach ( $this->_aRedirectLogin as $key=>$detail ) { if ( $detail->sNamespace == $sNamespace ) unset ( $this->_aRedirectLogin[ $key ] ); } foreach ( $this->_aSteps as $key=>$detail ) { if ( $detail->sNamespace == $sNamespace ) unset ( $this->_aSteps[ $key ] ); } foreach ( $this->_aToolbarFiles as $key=>$detail ) { if ( $detail->sNamespace == $sNamespace ) unset ( $this->_aToolbarFiles[ $key ] ); } foreach ( $this->_aCSSStyleSheets as $key=>$detail ) { if ( $detail->sNamespace == $sNamespace ) unset ( $this->_aCSSStyleSheets[ $key ] ); } foreach ( $this->_aCaseSchedulerPlugin as $key=>$detail ) { if ( $detail->sNamespace == $sNamespace ) unset ( $this->_aCaseSchedulerPlugin[ $key ] ); } foreach ( $this->_aTaskExtendedProperties as $key=>$detail ) { if ( $detail->sNamespace == $sNamespace ) unset ( $this->_aTaskExtendedProperties[ $key ] ); } foreach ( $this->_aDashboardPages as $key=>$detail ) { if ( $detail->sNamespace == $sNamespace ) unset ( $this->_aDashboardPages[ $key ] ); } //unregistering javascripts from this plugin $this->unregisterJavascripts($sNamespace); } /** * get status plugin in the singleton * * @param unknown_type $sNamespace */ function getStatusPlugin($sNamespace ) { foreach ( $this->_aPluginDetails as $namespace=>$detail ) { if ( $sNamespace == $namespace ) if ( $this->_aPluginDetails[$sNamespace]->enabled ) return 'enabled'; else return 'disabled'; } return 0; } /** * Install a plugin archive. If pluginName is specified, the archive will * only be installed if it contains this plugin. * * @return bool true if enabled, false otherwise */ function installPluginArchive($filename, $pluginName) { G::LoadThirdParty("pear/Archive", "Tar"); $tar = new Archive_Tar($filename); $files = $tar->listContent(); $plugins = array(); $namePlugin = array(); foreach ($files as $f) { //if (preg_match("/^([\w\.]*).ini$/", $f["filename"], $matches)) { if (preg_match("/^(.*pluginConfig)\.ini$/", $f["filename"], $matches)) { $plugins[] = $matches[1]; } if (preg_match("/^.*($pluginName)\.php$/", $f["filename"], $matches)) { $namePlugin[] = $matches[1]; } } if (count($plugins) > 1) { throw new Exception("Multiple plugins in one archive are not supported currently"); } //if (isset($pluginName) && !in_array($pluginName, $plugins)) { if (isset($pluginName) && !in_array($pluginName, $namePlugin)) { throw new Exception("Plugin '$pluginName' not found in archive"); } //$pluginName = $plugins[0]; $pluginFile = "$pluginName.php"; /* $oldPluginStatus = $this->getStatusPlugin($pluginFile); if ($pluginStatus != 0) { $oldDetails = $this->getPluginDetails($pluginFile); $oldVersion = $oldDetails->iVersion; } else { $oldDetails = NULL; $oldVersion = NULL; } */ //$pluginIni = $tar->extractInString("$pluginName.ini"); //$pluginConfig = parse_ini_string($pluginIni); /* if (!empty($oClass->aDependences)) { foreach ($oClass->aDependences as $aDependence) { if (file_exists(PATH_PLUGINS . $aDependence['sClassName'] . '.php')) { require_once PATH_PLUGINS . $aDependence['sClassName'] . '.php'; if (!$oPluginRegistry->getPluginDetails($aDependence['sClassName'] . '.php')) { throw new Exception('This plugin needs "' . $aDependence['sClassName'] . '" plugin'); } } else { throw new Exception('This plugin needs "' . $aDependence['sClassName'] . '" plugin'); } } } unset($oClass); if ($fVersionOld > $fVersionNew) { throw new Exception('A recent version of this plugin was already installed.'); } */ $res = $tar->extract(PATH_PLUGINS); if (!file_exists(PATH_PLUGINS . $pluginFile)) { throw (new Exception("File \"$pluginFile\" doesn't exist")); } require_once (PATH_PLUGINS . $pluginFile); $details = $this->getPluginDetails($pluginFile); $this->installPlugin($details->sNamespace); $this->setupPlugins(); $this->enablePlugin($details->sNamespace); $this->save(); } function uninstallPlugin($sNamespace) { $pluginFile = $sNamespace . ".php"; if (!file_exists(PATH_PLUGINS . $pluginFile)) { throw (new Exception("File \"$pluginFile\" doesn't exist")); } /////// require_once (PATH_PLUGINS . $pluginFile); foreach ($this->_aPluginDetails as $namespace => $detail) { if ($namespace == $sNamespace) { $this->enablePlugin($detail->sNamespace); $this->disablePlugin($detail->sNamespace); /////// $plugin = new $detail->sClassName($detail->sNamespace, $detail->sFilename); $this->_aPlugins[$detail->sNamespace] = $plugin; if (method_exists($plugin, "uninstall")) { $plugin->uninstall(); } /////// $this->save(); /////// $pluginDir = PATH_PLUGINS . $detail->sPluginFolder; if (isset($detail->sFilename) && !empty($detail->sFilename) && file_exists($detail->sFilename)) { unlink($detail->sFilename); } if (isset($detail->sPluginFolder) && !empty($detail->sPluginFolder) && file_exists($pluginDir)) { G::rm_dir($pluginDir); } /////// $this->uninstallPluginWorkspaces(array($sNamespace)); /////// break; } } } function uninstallPluginWorkspaces($arrayPlugin) { G::LoadClass("system"); G::LoadClass("wsTools"); $workspace = System::listWorkspaces(); foreach ($workspace as $indexWS => $ws) { $wsPathDataSite = PATH_DATA . "sites" . PATH_SEP . $ws->name . PATH_SEP; if (file_exists($wsPathDataSite . "plugin.singleton")) { //G::LoadClass("plugin"); //Here we are loading all plug-ins registered //The singleton has a list of enabled plug-ins $pluginRegistry = &PMPluginRegistry::getSingleton(); $pluginRegistry->unSerializeInstance(file_get_contents($wsPathDataSite . "plugin.singleton")); /////// $attributes = $pluginRegistry->getAttributes(); foreach ($arrayPlugin as $index => $value) { if (isset($attributes["_aPluginDetails"][$value])) { $pluginRegistry->disablePlugin($value, 0); } } /////// file_put_contents($wsPathDataSite . "plugin.singleton", $pluginRegistry->serializeInstance()); } } } /** * install the plugin * * @param unknown_type $sNamespace */ function installPlugin($sNamespace ) { try { foreach ( $this->_aPluginDetails as $namespace=>$detail ) { if ( $sNamespace == $namespace ) { $oPlugin = new $detail->sClassName( $detail->sNamespace, $detail->sFilename ); $this->_aPlugins[$detail->sNamespace] = $oPlugin; $oPlugin->install(); } } } catch ( Exception $e ) { global $G_PUBLISH; $aMessage['MESSAGE'] = $e->getMessage(); $G_PUBLISH = new Publisher; $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage ); G::RenderPage( 'publish' ); die; } } /** * Register a menu in the singleton * * @param unknown_type $sNamespace * @param unknown_type $sMenuId * @param unknown_type $sFilename */ function registerMenu($sNamespace, $sMenuId, $sFilename ) { $found = false; foreach ( $this->_aMenus as $row=>$detail ) { if ( $sMenuId == $detail->sMenuId && $sNamespace == $detail->sNamespace ) $found = true; } if ( !$found ) { $menuDetail = new menuDetail ($sNamespace, $sMenuId, $sFilename); $this->_aMenus[] = $menuDetail; } } /** * Register a dashlet class in the singleton * * @param unknown_type $className */ function registerDashlets($namespace) { $found = false; foreach ($this->_aDashlets as $row => $detail) { if ($namespace == $detail) { $found = true; } } if (!$found) { $this->_aDashlets[] = $namespace; } } /** * Register a stylesheet in the singleton * * @param unknown_type $sNamespace * @param unknown_type $sPage */ function registerCss($sNamespace, $sCssFile ) { $found = false; foreach ( $this->_aCSSStyleSheets as $row=>$detail ) { if ( $sCssFile == $detail->sCssFile && $sNamespace == $detail->sNamespace ){ $detail->sCssFile=$sCssFile; $found = true; } } if ( !$found ) { $cssFile = new cssFile ($sNamespace, $sCssFile); $this->_aCSSStyleSheets[] = $cssFile; } } /** * return all css * * @return array */ function getRegisteredCss() { return $this->_aCSSStyleSheets; } /** * Register a plugin javascript to run with core js script at same runtime * * @param string $sNamespace * @param string $coreJsFile * @param array/string $pluginJsFile */ function registerJavascript($sNamespace, $sCoreJsFile, $pluginJsFile) { foreach ($this->_aJavascripts as $i=>$js) { if ($sCoreJsFile == $js->sCoreJsFile && $sNamespace == $js->sNamespace) { if (is_string($pluginJsFile)) { if (!in_array($pluginJsFile, $this->_aJavascripts[$i]->pluginJsFile)) { $this->_aJavascripts[$i]->pluginJsFile[] = $pluginJsFile; } } else if (is_array($pluginJsFile)) { $this->_aJavascripts[$i]->pluginJsFile = array_unique(array_merge($pluginJsFile, $this->_aJavascripts[$i]->pluginJsFile)); } else { throw new Exception('Invalid third param, $pluginJsFile should be a string or array - '. gettype($pluginJsFile). ' given.'); } return $this->_aJavascripts[$i]; } } $js = new StdClass(); $js->sNamespace = $sNamespace; $js->sCoreJsFile = $sCoreJsFile; $js->pluginJsFile = Array(); if (is_string($pluginJsFile)) { $js->pluginJsFile[] = $pluginJsFile; } else if (is_array($pluginJsFile)){ $js->pluginJsFile = array_merge($js->pluginJsFile, $pluginJsFile); } else { throw new Exception('Invalid third param, $pluginJsFile should be a string or array - '. gettype($pluginJsFile). ' given.'); } $this->_aJavascripts[] = $js; } /** * return all plugin javascripts * * @return array */ function getRegisteredJavascript() { return $this->_aJavascripts; } /** * return all plugin javascripts given a core js file, from all namespaces or a single namespace * @param string $sCoreJsFile * @param string $sNamespace * @return array */ function getRegisteredJavascriptBy($sCoreJsFile, $sNamespace='') { $scripts = array(); if ($sNamespace == '') { foreach ($this->_aJavascripts as $i=>$js) { if ($sCoreJsFile == $js->sCoreJsFile) { $scripts = array_merge($scripts, $this->_aJavascripts[$i]->pluginJsFile); } } } else { foreach ($this->_aJavascripts as $i=>$js) { if ($sCoreJsFile == $js->sCoreJsFile && $sNamespace == $js->sNamespace) { $scripts = array_merge($scripts, $this->_aJavascripts[$i]->pluginJsFile); } } } return $scripts; } /** * unregister all javascripts from a namespace or a js core file given * @param string $sNamespace * @param string $sCoreJsFile * @return array */ function unregisterJavascripts($sNamespace, $sCoreJsFile='') { if ($sCoreJsFile == '') { // if $sCoreJsFile=='' unregister all js from this namespace foreach ($this->_aJavascripts as $i=>$js) { if ($sNamespace == $js->sNamespace) { unset($this->_aJavascripts[$i]); } } // Re-index when all js were unregistered $this->_aJavascripts = array_values($this->_aJavascripts); } else { foreach ($this->_aJavascripts as $i=>$js) { if ($sCoreJsFile == $js->sCoreJsFile && $sNamespace == $js->sNamespace) { unset($this->_aJavascripts[$i]); // Re-index for each js that was unregistered $this->_aJavascripts = array_values($this->_aJavascripts); } } } } /** * Register a reports class in the singleton * * @param unknown_type $sNamespace * @param unknown_type $sMenuId * @param unknown_type $sFilename */ function registerReport($sNamespace ) { $found = false; foreach ( $this->_aReports as $row=>$detail ) { if ( $sNamespace == $detail ) $found = true; } if ( !$found ) { $this->_aReports[] = $sNamespace; } } /** * Register a PmFunction class in the singleton * * @param unknown_type $sNamespace * @param unknown_type $sMenuId * @param unknown_type $sFilename */ function registerPmFunction($sNamespace ) { $found = false; foreach ( $this->_aPmFunctions as $row=>$detail ) { if ( $sNamespace == $detail ) $found = true; } if ( !$found ) { $this->_aPmFunctions[] = $sNamespace; } } /** * Register a redirectLogin class in the singleton * * @param unknown_type $sNamespace * @param unknown_type $sRole * @param unknown_type $sPath */ function registerRedirectLogin($sNamespace, $sRole, $sPathMethod ) { $found = false; foreach ( $this->_aRedirectLogin as $row=>$detail ) { if (( $sNamespace == $detail->sNamespace )&&( $sRole == $detail->sRoleCode )) //Filters based on Workspace and Role Code $found = true; } if ( !$found ) { $this->_aRedirectLogin[] = new redirectDetail ( $sNamespace, $sRole, $sPathMethod); } } /** * Register a folder for methods * * @param unknown_type $sFolderName */ function registerFolder($sNamespace, $sFolderId, $sFolderName ) { $found = false; foreach ( $this->_aFolders as $row=>$detail ) if ( $sFolderId == $detail->sFolderId && $sNamespace == $detail->sNamespace ) $found = true; if ( !$found ) { $this->_aFolders[] = new folderDetail ( $sNamespace, $sFolderId, $sFolderName); } } /** * Register a step for process * * @param unknown_type $sFolderName */ function registerStep($sNamespace, $sStepId, $sStepName, $sStepTitle, $setupStepPage = '') { $found = false; foreach ( $this->_aSteps as $row=>$detail ) if ( $sStepId == $detail->sStepId && $sNamespace == $detail->sNamespace ) $found = true; if ( !$found ) { $this->_aSteps[] = new stepDetail ( $sNamespace, $sStepId, $sStepName, $sStepTitle, $setupStepPage); } } /** * return true if the $sFolderName is registered in the singleton * * @param unknown_type $sFolderName */ function isRegisteredFolder( $sFolderName ) { foreach ( $this->_aFolders as $row => $folder ) { if ( $sFolderName == $folder->sFolderName && is_dir ( PATH_PLUGINS . $folder->sFolderName )){ return true; }elseif( $sFolderName == $folder->sFolderName && is_dir ( PATH_PLUGINS .$folder->sNamespace.PATH_SEP. $folder->sFolderName )){ return $folder->sNamespace; } } return false; } /** * return all menus related to a menuId * * @param unknown_type $menuId */ function getMenus( $menuId ) { foreach ( $this->_aMenus as $row=>$detail ) { if ( $menuId == $detail->sMenuId && file_exists ( $detail->sFilename ) ) { include ( $detail->sFilename ); } } } /** * return all dashlets classes registered * @return array */ function getDashlets() { return $this->_aDashlets; } /** * this function returns all reports registered * @return array */ function getReports( ) { return $this->_aReports; $report = array (); foreach ( $this->_aReports as $row=>$detail ) { $sClassName = str_replace ( 'plugin', 'class', $this->_aPluginDetails[ $detail ]->sClassName); $report[] = $sClassName; } return $report; } /** * This function returns all pmFunctions registered * @ array */ function getPmFunctions( ) { return $this->_aPmFunctions; $pmf = array (); foreach ( $this->_aPmFunctions as $row=>$detail ) { $sClassName = str_replace ( 'plugin', 'class', $this->_aPluginDetails[ $detail ]->sClassName); $pmf[] = $sClassName; } return $pmf; } /** * This function returns all steps registered * * @return string */ function getSteps( ) { return $this->_aSteps; } /** * This function returns all redirect registered * @return string */ function getRedirectLogins( ) { return $this->_aRedirectLogin; } /** * execute all triggers related to a triggerId * * @param unknown_type $menuId * @return object */ function executeTriggers( $triggerId, $oData ) { foreach ( $this->_aTriggers as $row=>$detail ) { if ( $triggerId == $detail->sTriggerId ) { //review all folders registered for this namespace $found = false; $classFile = ''; foreach ( $this->_aFolders as $row=>$folder ) { $fname = PATH_PLUGINS . $folder->sFolderName . PATH_SEP . 'class.' . $folder->sFolderName .'.php'; if ( $detail->sNamespace == $folder->sNamespace && file_exists ( $fname ) ) { $found = true; $classFile = $fname; } } if ( $found ) { require_once ( $classFile ); $sClassName = substr($this->_aPluginDetails[ $detail->sNamespace ]->sClassName,0,1) . str_replace ( 'plugin', 'class', substr($this->_aPluginDetails[ $detail->sNamespace ]->sClassName,1)); $obj = new $sClassName( ); $methodName = $detail->sTriggerName; $response = $obj->{$methodName}( $oData ); if (PEAR::isError($response) ) { print $response->getMessage(); return; } return $response; } else print "error in call method " . $detail->sTriggerName; } } } /** * verify if exists triggers related to a triggerId * * @param unknown_type $triggerId */ function existsTrigger( $triggerId) { $found = false; foreach ( $this->_aTriggers as $row=>$detail ) { if ( $triggerId == $detail->sTriggerId ) { //review all folders registered for this namespace foreach ( $this->_aFolders as $row=>$folder ) { $fname = PATH_PLUGINS . $folder->sFolderName . PATH_SEP . 'class.' . $folder->sFolderName .'.php'; if ( $detail->sNamespace == $folder->sNamespace && file_exists ( $fname ) ) { $found = true; } } } } return $found; } /** * Return info related to a triggerId * * @param unknown_type $triggerId * @return object */ function getTriggerInfo( $triggerId) { $found = null; foreach ( $this->_aTriggers as $row=>$detail ) { if ( $triggerId == $detail->sTriggerId ) { //review all folders registered for this namespace foreach ( $this->_aFolders as $row=>$folder ) { $fname = PATH_PLUGINS . $folder->sFolderName . PATH_SEP . 'class.' . $folder->sFolderName .'.php'; if ( $detail->sNamespace == $folder->sNamespace && file_exists ( $fname ) ) { $found = $detail; } } } } return $found; } /** * Register a trigger in the Singleton * * @param unknown_type $sTriggerId * @param unknown_type $sMethodFunction * @return void */ function registerTrigger($sNamespace, $sTriggerId, $sTriggerName ) { $found = false; foreach ( $this->_aTriggers as $row=>$detail ) { if ( $sTriggerId == $detail->sTriggerId && $sNamespace == $detail->sNamespace ) $found = true; } if ( !$found ) { $triggerDetail = new triggerDetail ($sNamespace, $sTriggerId, $sTriggerName); $this->_aTriggers[] = $triggerDetail; } } /** * get plugin * * @param unknown_type $sNamespace * @return void */ function &getPlugin($sNamespace) { if (array_key_exists($sNamespace, $this->_aPlugins)) { return $this->_aPlugins[$sNamespace]; } /* $aDetails = KTUtil::arrayGet($this->_aPluginDetails, $sNamespace); if (empty($aDetails)) { return null; } $sFilename = $aDetails[2]; if (!empty($sFilename)) { require_once($sFilename); } $sClassName = $aDetails[0]; $oPlugin =& new $sClassName($sFilename); $this->_aPlugins[$sNamespace] =& $oPlugin; return $oPlugin; */ } /** * set company logo * * @param unknown_type $sNamespace * @param unknown_type $filename * @return void */ function setCompanyLogo( $sNamespace, $filename ) { $found = false; foreach ( $this->_aPluginDetails as $row=>$detail ) { if ( $sNamespace == $detail->sNamespace ) $this->_aPluginDetails[ $sNamespace ]->sCompanyLogo = $filename; } } /** * get company logo * * @param unknown_type $default * @return void */ function getCompanyLogo( $default ) { $sCompanyLogo = $default; foreach ( $this->_aPluginDetails as $row=>$detail ) { if ( trim($detail->sCompanyLogo) != '' ) $sCompanyLogo = $detail->sCompanyLogo; } return $sCompanyLogo; } /** * get setup Plugins * * @param unknown_type $default * @return void */ function setupPlugins() { try { $iPlugins = 0; G::LoadClass ( 'serverConfiguration' ); $oServerConf = & serverConf::getSingleton (); $oServerConf->addPlugin ( SYS_SYS,$this->_aPluginDetails ); foreach ( $this->_aPluginDetails as $namespace=>$detail ) { if ( isset($detail->enabled ) && $detail->enabled ) { if ( !empty( $detail->sFilename) && file_exists ($detail->sFilename) ) { if (strpos($detail->sFilename, PATH_SEP) !== false) { $aux = explode ( PATH_SEP, $detail->sFilename ); } else { $aux = explode ( chr(92), $detail->sFilename ); } $sFilename = PATH_PLUGINS . $aux[ count($aux) -1]; if (! file_exists($sFilename) ) continue; require_once $sFilename; if (class_exists($detail->sClassName)) { $oPlugin = new $detail->sClassName( $detail->sNamespace, $detail->sFilename ); $this->_aPlugins[$detail->sNamespace] = $oPlugin; $iPlugins++; $oPlugin->setup(); } } } } $this->eevalidate(); return $iPlugins; } catch ( Exception $e ) { global $G_PUBLISH; $aMessage['MESSAGE'] = $e->getMessage(); $G_PUBLISH = new Publisher; $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage ); G::RenderPage( 'publish' ); die; } } /** * this function execute a Method * * @param string $sNamespace * @param string $methodName * @param object $oData * @return object */ function executeMethod( $sNamespace, $methodName, $oData ) { $response = null; try { $details = $this->_aPluginDetails[$sNamespace]; $pluginFolder = $details->sPluginFolder; $className = $details->sClassName; $classFile = PATH_PLUGINS . $pluginFolder . PATH_SEP . 'class.' . $pluginFolder .'.php'; if ( file_exists ( $classFile ) ) { $sClassName=substr_replace($className,"class",-6,6); //$sClassName = str_replace ( 'plugin', 'class', $className ); if (!class_exists($sClassName)) { require_once $classFile; } $obj = new $sClassName( ); if ( !in_array ( $methodName, get_class_methods ($obj) ) ) { throw ( new Exception ( "The method '$methodName' doesn't exist in class '$sClassName' ") ); } $obj->sNamespace = $details->sNamespace; $obj->sClassName = $details->sClassName; $obj->sFilename = $details->sFilename; $obj->iVersion = $details->iVersion; $obj->sFriendlyName = $details->sFriendlyName; $obj->sPluginFolder = $details->sPluginFolder; $response = $obj->{$methodName}( $oData ); } return $response; } catch ( Exception $e ) { throw ($e); } } /** * this function gets Fields For Page on Setup * * @param string $sNamespace * @return object */ function getFieldsForPageSetup( $sNamespace ) { $oData = NULL; return $this->executeMethod ( $sNamespace, 'getFieldsForPageSetup', $oData); } /** * this function updates Fields For Page on Setup * * @param string $sNamespace * @return void */ function updateFieldsForPageSetup( $sNamespace, $oData ) { if ( !isset ($this->_aPluginDetails[$sNamespace] ) ) { throw ( new Exception ( "The namespace '$sNamespace' doesn't exist in plugins folder." ) ); }; return $this->executeMethod ( $sNamespace, 'updateFieldsForPageSetup', $oData); } function eevalidate(){ $fileL = PATH_DATA_SITE.'license.dat'; $fileS = PATH_DATA.'license.dat'; if((file_exists($fileL))||(file_exists($fileS))){//Found a License if(class_exists('pmLicenseManager')){ $sSerializedFile = PATH_DATA_SITE . 'lmn.singleton'; $pmLicenseManagerO =& pmLicenseManager::getSingleton(); if ( file_exists ($sSerializedFile) ){ $pmLicenseManagerO->unSerializeInstance( file_get_contents ( $sSerializedFile ) ); } } } } /** * Register a toolbar for dynaform editor in the singleton * * @param unknown_type $sNamespace * @param unknown_type $sToolbarId * @param unknown_type $sFilename */ function registerToolbarFile($sNamespace, $sToolbarId, $sFilename ) { $found = false; foreach ( $this->_aToolbarFiles as $row=>$detail ) { if ( $sToolbarId == $detail->sToolbarId && $sNamespace == $detail->sNamespace ) $found = true; } if ( !$found ) { $toolbarDetail = new toolbarDetail ($sNamespace, $sToolbarId, $sFilename); $this->_aToolbarFiles[] = $toolbarDetail; } } /** * return all toolbar files related to a sToolbarId * * @param unknown_type $sToolbarId (NORMAL, GRID) */ function getToolbarOptions( $sToolbarId ) { foreach ( $this->_aToolbarFiles as $row=>$detail ) { if ( $sToolbarId == $detail->sToolbarId && file_exists ( $detail->sFilename ) ) { include ( $detail->sFilename ); } } } /** * Register a Case Scheduler Plugin * */ function registerCaseSchedulerPlugin($sNamespace, $sActionId, $sActionForm, $sActionSave, $sActionExecute, $sActionGetFields) { $found = false; foreach ( $this->_aCaseSchedulerPlugin as $row=>$detail ) if ( $sActionId == $detail->sActionId && $sNamespace == $detail->sNamespace ) $found = true; if ( !$found ) { $this->_aCaseSchedulerPlugin[] = new caseSchedulerPlugin ( $sNamespace, $sActionId, $sActionForm, $sActionSave, $sActionExecute, $sActionGetFields); } } /** * This function returns all Case Scheduler Plugins registered * * @return string */ function getCaseSchedulerPlugins( ) { return $this->_aCaseSchedulerPlugin; } /** * Register a Task Extended property page in the singleton * * @param unknown_type $sNamespace * @param unknown_type $sPage */ function registerTaskExtendedProperty($sNamespace, $sPage, $sName, $sIcon ) { $found = false; foreach ( $this->_aTaskExtendedProperties as $row=>$detail ) { if ( $sPage == $detail->sPage && $sNamespace == $detail->sNamespace ){ $detail->sName=$sName; $detail->sIcon=$sIcon; $found = true; } } if ( !$found ) { $taskExtendedProperty = new taskExtendedProperty ($sNamespace, $sPage, $sName, $sIcon); $this->_aTaskExtendedProperties[] = $taskExtendedProperty; } } /** * Register a dashboard page for cases in the singleton * @param unknown_type $sNamespace * @param unknown_type $sPage * @param unknown_type $sName * @param unknown_type $sIcon */ function registerDashboardPage($sNamespace, $sPage, $sName, $sIcon ) { foreach ( $this->_aDashboardPages as $row=>$detail ) { if ( $sPage == $detail->sPage && $sNamespace == $detail->sNamespace ){ $detail->sName=$sName; $detail->sIcon=$sIcon; $found = true; } } if ( !$found ) { $dashboardPage = new dashboardPage ($sNamespace, $sPage, $sName, $sIcon); $this->_aDashboardPages[] = $dashboardPage; } } /** * return all dashboard pages * * @return array */ function getDashboardPages() { return $this->_aDashboardPages; } /** * return all tasl extended properties * * @return array */ function getTaskExtendedProperties() { return $this->_aTaskExtendedProperties; } function registerDashboard() { // Dummy function for backwards compatibility } function getAttributes() { return get_object_vars($this); } }