⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pluginutil.inc.php

📁 PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。
💻 PHP
📖 第 1 页 / 共 2 页
字号:
                    if(isset($aParams[5])){
                        $aParams[5] = KTPluginUtil::getFullPath($aParams[5]);
                    }
                    $aParams[3] = _kt($aParams[3]);
                    $aParams[4] = _kt($aParams[4]);
        	        call_user_func_array(array(&$oAdminRegistry, 'registerLocation'), $aParams);
        	        break;

        	    case 'dashlet':
                    if(isset($aParams[2])){
                        $aParams[2] = KTPluginUtil::getFullPath($aParams[2]);
                    }
        	        call_user_func_array(array(&$oDashletRegistry, 'registerDashlet'), $aParams);
        	        break;

        	    case 'i18nlang':
                    if(isset($aParams[2]) && $aParams[2] != 'default'){
                        $aParams[2] = KTPluginUtil::getFullPath($aParams[2]);
                    }
        	        call_user_func_array(array(&$oi18nRegistry, 'registeri18nLang'), $aParams);


        	    case 'i18n':
                    if(isset($aParams[2])){
                        $aParams[1] = $aParams[2];
                        unset($aParams[2]);
                    } else {
                        $aParams[1] = KTPluginUtil::getFullPath($aParams[1]);
                    }
        	        call_user_func_array(array(&$oi18nRegistry, 'registeri18n'), $aParams);
        	        break;

        	    case 'language':
        	        call_user_func_array(array(&$oi18nRegistry, 'registerLanguage'), $aParams);
        	        break;

        	    case 'help_language':
                    if(isset($aParams[2])){
                        $aParams[2] = KTPluginUtil::getFullPath($aParams[2]);
                    }
        	        call_user_func_array(array(&$oKTHelpRegistry, 'registerHelp'), $aParams);
        	        break;

        	    case 'workflow_trigger':
                    if(isset($aParams[2])){
                        $aParams[2] = KTPluginUtil::getFullPath($aParams[2]);
                    }
        	        call_user_func_array(array(&$oWFTriggerRegistry, 'registerWorkflowTrigger'), $aParams);
        	        break;

        	    case 'column':
                    if(isset($aParams[3])){
                        $aParams[3] = KTPluginUtil::getFullPath($aParams[3]);
                    }
                    $aParams[0] = _kt($aParams[0]);
        	        call_user_func_array(array(&$oColumnRegistry, 'registerColumn'), $aParams);
        	        break;

        	    case 'view':
        	        $aParams[0] = _kt($aParams[0]);
        	        call_user_func_array(array(&$oColumnRegistry, 'registerView'), $aParams);
        	        break;

        	    case 'notification_handler':
                    if(isset($aParams[2])){
                        $aParams[2] = KTPluginUtil::getFullPath($aParams[2]);
                    }
        	        call_user_func_array(array(&$oNotificationHandlerRegistry, 'registerNotificationHandler'), $aParams);
        	        break;

        	    case 'template_location':
                    if(isset($aParams[1])){
                        $aParams[1] = KTPluginUtil::getFullPath($aParams[1]);
                    }
        	        call_user_func_array(array(&$oTemplating, 'addLocation2'), $aParams);
        	        break;

        	    case 'criterion':
            	    $aInit = unserialize($aParams[3]);
            	    if($aInit != false){
        	           $aParams[3] = $aInit;
            	    }
                    if(isset($aParams[2])){
                        $aParams[2] = KTPluginUtil::getFullPath($aParams[2]);
                    }
        	        call_user_func_array(array(&$oCriteriaRegistry, 'registerCriterion'), $aParams);
        	        break;

        	    case 'widget':
                    if(isset($aParams[2])){
                        $aParams[2] = KTPluginUtil::getFullPath($aParams[2]);
                    }
        	        call_user_func_array(array(&$oWidgetFactory, 'registerWidget'), $aParams);
        	        break;

        	    case 'validator':
                    if(isset($aParams[2])){
                        $aParams[2] = KTPluginUtil::getFullPath($aParams[2]);
                    }
        	        call_user_func_array(array(&$oValidatorFactory, 'registerValidator'), $aParams);
        	        break;

        	    case 'interceptor':
                    if(isset($aParams[2])){
                        $aParams[2] = KTPluginUtil::getFullPath($aParams[2]);
                    }
        	        call_user_func_array(array(&$oInterceptorRegistry, 'registerInterceptor'), $aParams);
        	        break;

        	    case 'plugin':
                    if(isset($aParams[2])){
                        $aParams[2] = KTPluginUtil::getFullPath($aParams[2]);
                    }
        	        $oKTPluginRegistry->_aPluginDetails[$sName] = $aParams;
        	        break;
        	}
        }
    }

    /**
     * Get the absolute path
     */
    function getFullPath($sPath = '') {
        if(empty($sPath)){
            return '';
        }
        $sPath = (KTUtil::isAbsolutePath($sPath)) ? $sPath : KT_DIR . '/' . $sPath;
        return $sPath;
    }

    /**
     * This loads the plugins in the plugins folder. It searches for files ending with 'Plugin.php'.
     * This is called by the 'Re-read plugins' action in the web interface.
     */
    function registerPlugins () {
        global $default;

        // Path to lock file
        $cacheDir = $default->cacheDirectory . DIRECTORY_SEPARATOR;
        $lockFile = $cacheDir.'plugin_register.lock';

        // Check if the lock file exists
        if(KTPluginUtil::doCheck($lockFile)){
            return true;
        }

        // Create the lock file, run through the plugin registration and then delete the lock file
        touch($lockFile);
        KTPluginUtil::doPluginRegistration();
        @unlink($lockFile);
    }

    /**
     * Check the lockfile
     */
    function doCheck($lockFile)
    {
        if(file_exists($lockFile)){
            // If it does exist, do a stat on it to check when it was created.
            // if it was accessed more than 5 minutes ago then delete it and proceed with the plugin registration
            // otherwise wait till lock file is deleted signalling that the registration is complete and return.

            $stat = stat($lockFile);

            $time = time() - (60 * 5);
            if($stat['mtime'] > $time){

                $cnt = 0;

                while(file_exists($lockFile)){
                    $cnt++;
                    sleep(2);

                    // if we've been waiting too long - typically it should only take a few seconds so 2 mins is too much time.
                    if($cnt > 60){
                        @unlink($lockFile);
                        return false;
                    }
                }
                return true;
            }
            @unlink($lockFile);
        }
        return false;
    }

    /**
     * Read the plugins directory and register all plugins in the database.
     */
    function doPluginRegistration()
    {
        global $default;

        KTPluginUtil::_deleteSmartyFiles();
        require_once(KT_LIB_DIR . '/cache/cache.inc.php');
        $oCache =& KTCache::getSingleton();
        $oCache->deleteAllCaches();

        // Remove all entries from the plugin_helper table and refresh it.
        $query = "DELETE FROM plugin_helper";
        DBUtil::runQuery($query);

        $files = array();
        KTPluginUtil::_walk(KT_DIR . '/plugins', $files);
        foreach ($files as $sFile) {
            $plugin_ending = "Plugin.php";
            if (substr($sFile, -strlen($plugin_ending)) === $plugin_ending) {
                require_once($sFile);
            }
        }

        $oRegistry =& KTPluginRegistry::getSingleton();
        $aRegistryList = $oRegistry->getPlugins();
        foreach ($aRegistryList as $oPlugin) {
            $res = $oPlugin->register();
            if (PEAR::isError($res)) {
                //var_dump($res);
                $default->log->debug('Register of plugin failed: ' . $res->getMessage());
            }
        }

        $aPluginList = KTPluginEntity::getList();
        foreach ($aPluginList as $oPluginEntity) {
            $sPath = $oPluginEntity->getPath();
            if (!KTUtil::isAbsolutePath($sPath)) {
                $sPath = sprintf("%s/%s", KT_DIR, $sPath);
            }
            if (!file_exists($sPath)) {
                $oPluginEntity->setUnavailable(true);
                $oPluginEntity->setDisabled(true);
                $res = $oPluginEntity->update();
            }
        }
        KTPluginEntity::clearAllCaches();

        KTPluginUtil::_deleteSmartyFiles();
        require_once(KT_LIB_DIR . '/cache/cache.inc.php');
        $oCache =& KTCache::getSingleton();
        $oCache->deleteAllCaches();

        //KTPluginUtil::removePluginCache();
    }

    function _deleteSmartyFiles() {
        $oConfig =& KTConfig::getSingleton();
        $dir = sprintf('%s/%s', $oConfig->get('urls/varDirectory'), 'tmp');

        $dh = @opendir($dir);
        if (empty($dh)) {
            return;
        }
        $aFiles = array();
        while (false !== ($sFilename = readdir($dh))) {
            if (substr($sFilename, -10) == "smarty.inc") {
               $aFiles[] = sprintf('%s/%s', $dir, $sFilename);
            }
            if (substr($sFilename, -10) == "smarty.php") {
               $aFiles[] = sprintf('%s/%s', $dir, $sFilename);
            }
        }
        foreach ($aFiles as $sFile) {
            @unlink($sFile);
        }
    }

    function _walk ($path, &$files) {
        if (!is_dir($path)) {
            return;
        }
        $dirh = opendir($path);
        while (($entry = readdir($dirh)) !== false) {
            if (in_array($entry, array('.', '..'))) {
                continue;
            }
            $newpath = $path . '/' . $entry;
            if (is_dir($newpath)) {
                KTPluginUtil::_walk($newpath, $files);
            }
            if (!is_file($newpath)) {
                continue;
            }
            $files[] = $newpath;
        }
    }

    function resourceIsRegistered($path) {
        $oRegistry =& KTPluginResourceRegistry::getSingleton();
        return $oRegistry->isRegistered($path);
    }

    function registerResource($path) {
        $oRegistry =& KTPluginResourceRegistry::getSingleton();
        $oRegistry->registerResource($path);
    }

    function readResource($sPath) {
        global $default;
        $php_file = ".php";
        if (substr($sPath, -strlen($php_file)) === $php_file) {
            require_once($php_file);
        } else {
            $pi = pathinfo($sPath);
            $mime_type = "";
            $sExtension = KTUtil::arrayGet($pi, 'extension');
            if (!empty($sExtension)) {
                $mime_type = DBUtil::getOneResultKey(array("SELECT mimetypes FROM " . $default->mimetypes_table . " WHERE LOWER(filetypes) = ?", $sExtension), "mimetypes");
            }
            if (empty($mime_type)) {
                $mime_type = "application/octet-stream";
            }
            $sFullPath = KT_DIR . '/plugins' . $sPath;
            header("Content-Type: $mime_type");
            header("Content-Length: " . filesize($sFullPath));
            readfile($sFullPath);
        }
    }

    // utility function to detect if the plugin is loaded and active.
    static function pluginIsActive($sNamespace) {



		$oReg =& KTPluginRegistry::getSingleton();
		$plugin = $oReg->getPlugin($sNamespace);



		if (is_null($plugin) || PEAR::isError($plugin)) { return false; }  // no such plugin
		else { // check if its active
			$ent = KTPluginEntity::getByNamespace($sNamespace);

			if (PEAR::isError($ent)) { return false; }

			// we now can ask
			return (!$ent->getDisabled());
		}
    }
}

?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -