From a8ed4e264ae1f192aae57efc7e47daefb4b4b91a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=B3na=20Lore?= Date: Sun, 14 Feb 2016 11:27:34 +0100 Subject: [PATCH 1/7] Fixed: PHP Fatal error: Call to protected e_library_manager::__construct(). Removed library prefix from method names. Fixed path handling issue caused by cache. --- e107_handlers/e107_class.php | 14 +-- e107_handlers/library_manager.php | 164 +++++++++++++----------------- 2 files changed, 71 insertions(+), 107 deletions(-) diff --git a/e107_handlers/e107_class.php b/e107_handlers/e107_class.php index 061a9b880..feae95f09 100644 --- a/e107_handlers/e107_class.php +++ b/e107_handlers/e107_class.php @@ -1657,15 +1657,7 @@ class e107 */ private static function getLibrary() { - /*static $included = false; - if(!$included) - { - e107_require_once(e_HANDLER . 'library_manager.php'); - $included = true; - }*/ - - return self::getSingleton('e_library_manager', true); /* @FIXME Use this instead? */ - // return e_library_manager::getInstance(); + return self::getSingleton('e_library_manager', true); } /** @@ -1689,11 +1681,11 @@ class e107 switch ($action) { case 'detect': - return $libraryHandler->libraryDetect($library); + return $libraryHandler->detect($library); break; case 'load': - return $libraryHandler->libraryLoad($library); + return $libraryHandler->load($library); break; } } diff --git a/e107_handlers/library_manager.php b/e107_handlers/library_manager.php index dfba93522..990c68a53 100644 --- a/e107_handlers/library_manager.php +++ b/e107_handlers/library_manager.php @@ -11,7 +11,6 @@ // [e_LANGUAGEDIR]/[e_LANGUAGE]/lan_library_manager.php e107::lan('core', 'library_manager'); -/*FIXME Remove 'library' prefix from method names */ /** * Class e_library_manager. @@ -19,19 +18,11 @@ e107::lan('core', 'library_manager'); class e_library_manager { - /** - * Singleton instance. - * Allow class extends - override {@link getInstance()} - * - * @var e_library_manager - */ - protected static $_instance = null; - /** * Constructor * Use {@link getInstance()}, direct instantiating is not possible for signleton objects. */ - protected function __construct() + public function __construct() { } @@ -49,21 +40,6 @@ class e_library_manager { } - /** - * Get singleton instance. - * - * @return e_library_manager - */ - public static function getInstance() /* FIXME Still Neeeded? */ - { - if(null === self::$_instance) - { - self::$_instance = new self(); - self::$_instance->_init(); - } - return self::$_instance; - } - /** * Tries to detect a library and its installed version. * @@ -72,7 +48,7 @@ class e_library_manager * * @return array|false * An associative array containing registered information for the library specified by $name, or FALSE if the - * library $name is not registered. In addition to the keys returned by libraryInfo(), the following keys are + * library $name is not registered. In addition to the keys returned by info(), the following keys are * contained: * - installed: A boolean indicating whether the library is installed. Note that not only the top-level library, * but also each variant contains this key. @@ -81,10 +57,10 @@ class e_library_manager * "not found", "not detected", "not supported". * - error message: If an error occurred during library detection, a detailed error message. */ - public function libraryDetect($name) + public function detect($name) { - // Re-use the statically cached value of libraryInfo() to save memory. - $library = &$this->libraryInfo($name); + // Re-use the statically cached value of info() to save memory. + $library = &$this->info($name); // Exit early if the library was not found. if($library === false) @@ -103,10 +79,11 @@ class e_library_manager // Check whether the library exists. if(!isset($library['library path'])) { - $library['library path'] = $this->libraryGetPath($library['machine name']); + $library['library path'] = $this->getPath($library['machine name']); } - if($library['library path'] === false || !file_exists($library['library path'])) + $libraryPath = e107::getParser()->replaceConstants($library['library path']); + if($library['library path'] === false || !file_exists($libraryPath)) { $library['error'] = LAN_LIBRARY_MANAGER_09; @@ -120,7 +97,7 @@ class e_library_manager // TODO: // Invoke callbacks in the 'pre-detect' group. - $this->libraryInvoke('pre-detect', $library); + $this->invoke('pre-detect', $library); // Detect library version, if not hardcoded. if(!isset($library['version'])) @@ -247,7 +224,7 @@ class e_library_manager { if(varset($library['plugin'], false)) { - // e107::getAddon($library['plugin'],'e_library'); /* @FIXME Use this to avoid additional class_exists and method_exists checking */ + // e107::getAddon($library['plugin'],'e_library'); /* @FIXME Use this to avoid additional class_exists and method_exists checking */ e107_require_once(e_PLUGIN . $library['plugin'] . '/e_library.php'); $addonClass = $library['plugin'] . '_library'; } @@ -320,7 +297,7 @@ class e_library_manager $library['installed'] = true; // Invoke callbacks in the 'post-detect' group. - $this->libraryInvoke('post-detect', $library); + $this->invoke('post-detect', $library); return $library; } @@ -336,13 +313,13 @@ class e_library_manager * ignored. * * @return - * An associative array of the library information as returned from libraryInfo(). The top-level properties + * An associative array of the library information as returned from info(). The top-level properties * contain the effective definition of the library (variant) that has been loaded. Additionally: - * - installed: Whether the library is installed, as determined by libraryDetectLibrary(). + * - installed: Whether the library is installed, as determined by detectLibrary(). * - loaded: Either the amount of library files that have been loaded, or FALSE if the library could not be - * loaded. See MYPLUGIN_library::libraryInfo() for more information. + * loaded. See MYPLUGIN_library::info() for more information. */ - public function libraryLoad($name, $variant = null) + public function load($name, $variant = null) { static $loaded; /* @FIXME Still needed? */ @@ -359,7 +336,7 @@ class e_library_manager if(!varset($library, false)) { - $library = $this->libraryDetect($name); + $library = $this->detect($name); $cacheData = serialize($library); $cache->set($cacheID, $cacheData, true, false, true); } @@ -385,7 +362,7 @@ class e_library_manager // TODO: // Invoke callbacks in the 'pre-dependencies-load' group. - $this->libraryInvoke('pre-dependencies-load', $library); + $this->invoke('pre-dependencies-load', $library); // If the library (variant) is installed, load it. $library['loaded'] = false; @@ -396,20 +373,20 @@ class e_library_manager { foreach($library['dependencies'] as $dependency) { - $this->libraryLoad($dependency); + $this->load($dependency); } } // TODO: // Invoke callbacks in the 'pre-load' group. - $this->libraryInvoke('pre-load', $library); + $this->invoke('pre-load', $library); // Load all the files associated with the library. - $library['loaded'] = $this->libraryLoadFiles($library); + $library['loaded'] = $this->loadFiles($library); // TODO: // Invoke callbacks in the 'post-load' group. - $this->libraryInvoke('post-load', $library); + $this->invoke('post-load', $library); } $loaded[$name] = $library; } @@ -422,23 +399,20 @@ class e_library_manager * * @param $name * The machine name of a library to return the path for. - * @param $base_path - * Whether to prefix the resulting path with base_path(). * * @return string * The path to the specified library or FALSE if the library wasn't found. */ - private function libraryGetPath($name, $base_path = false) + private function getPath($name) { static $libraries; if(!isset($libraries)) { - $libraries = $this->libraryGetLibraries(); + $libraries = $this->getLibraries(); } - // e_HTTP will at least default to '/'. - $path = ($base_path ? e_HTTP : ''); + $path = ''; if(!isset($libraries[$name])) { return false; @@ -457,7 +431,7 @@ class e_library_manager * @return array * A list of library directories. */ - private function libraryGetLibraries() + private function getLibraries() { $dir = e_WEB . 'lib'; @@ -473,7 +447,7 @@ class e_library_manager { if(is_dir("$dir/$file")) { - $directories[$file] = "$dir/$file"; + $directories[$file] = "{e_WEB}lib/$file"; } } } @@ -496,9 +470,9 @@ class e_library_manager * An associative array containing registered information for all libraries, the registered information for the * library specified by $name, or FALSE if the library $name is not registered. */ - private function &libraryInfo($library = null) + private function &info($library = null) { - // This static cache is re-used by libraryDetect() to save memory. + // This static cache is re-used by detect() to save memory. static $libraries; if(!isset($libraries)) @@ -557,11 +531,11 @@ class e_library_manager // Provide defaults. foreach($libraries as $machine_name => &$properties) { - $this->libraryInfoDefaults($properties, $machine_name); + $this->infoDefaults($properties, $machine_name); } // Allow enabled plugins (with e_library.php file) to alter the registered libraries. - // e107::getAddon($plugin, 'e_library','config_alter'); /* FIXME Use e107::getAddon() instead? */ + // e107::getAddon($plugin, 'e_library','config_alter'); /* FIXME Use e107::getAddon() instead? */ foreach($plugins as $plugin) { e107_require_once(e_PLUGIN . $plugin . '/e_library.php'); @@ -578,8 +552,6 @@ class e_library_manager } // Allow enabled themes (with theme_library.php file) to alter the registered libraries. - - foreach($themes as $theme) { e107_require_once(e_THEME . $theme . '/theme_library.php'); @@ -599,7 +571,7 @@ class e_library_manager // Invoke callbacks in the 'info' group. foreach($libraries as &$properties) { - $this->libraryInvoke('info', $properties); + $this->invoke('info', $properties); } } @@ -629,7 +601,7 @@ class e_library_manager * * @return array */ - private function libraryInfoDefaults(&$library, $name) + private function infoDefaults(&$library, $name) { /* FIXME Avoid spaces in keys, use _ underscores */ @@ -641,7 +613,7 @@ class e_library_manager 'download url' => '', 'path' => '', 'library path' => null, - 'version callback' => 'libraryGetVersion', + 'version callback' => 'getVersion', 'version arguments' => array(), 'files' => array(), 'dependencies' => array(), @@ -661,8 +633,8 @@ class e_library_manager ); // Add our own callbacks before any others. - array_unshift($library['callbacks']['info'], 'libraryPrepareFiles'); - array_unshift($library['callbacks']['post-detect'], 'libraryDetectDependencies'); + array_unshift($library['callbacks']['info'], 'prepareFiles'); + array_unshift($library['callbacks']['post-detect'], 'detectDependencies'); return $library; } @@ -690,7 +662,7 @@ class e_library_manager * @param $variant * If the library information belongs to a specific variant, the variant name. NULL otherwise. */ - private function libraryPrepareFiles(&$library, $version = null, $variant = null) + private function prepareFiles(&$library, $version = null, $variant = null) { // Both the 'files' property and the 'integration files' property contain file declarations, and we want to make // both consistent. @@ -740,14 +712,14 @@ class e_library_manager * @param $variant * If the library information belongs to a specific variant, the variant name. NULL otherwise. */ - private function libraryDetectDependencies(&$library, $version = null, $variant = null) + private function detectDependencies(&$library, $version = null, $variant = null) { if(isset($library['dependencies'])) { foreach($library['dependencies'] as &$dependency_string) { - $dependency_info = $this->libraryParseDependency($dependency_string); - $dependency = $this->libraryDetect($dependency_info['name']); + $dependency_info = $this->parseDependency($dependency_string); + $dependency = $this->detect($dependency_info['name']); if(!$dependency['installed']) { $library['installed'] = false; @@ -758,7 +730,7 @@ class e_library_manager $library['error message'] = str_replace($replace, $replace_with, LAN_LIBRARY_MANAGER_01); /* FIXME $tp->lanVars() */ } - elseif($this->libraryCheckIncompatibility($dependency_info, $dependency['version'])) + elseif($this->checkIncompatibility($dependency_info, $dependency['version'])) { $library['installed'] = false; $library['error'] = LAN_LIBRARY_MANAGER_08; @@ -769,7 +741,7 @@ class e_library_manager $library['error message'] = str_replace($replace, $replace_with, LAN_LIBRARY_MANAGER_02); /* FIXME $tp->lanVars() */ } - // Remove the version string from the dependency, so libraryLoad() can load the libraries directly. + // Remove the version string from the dependency, so load() can load the libraries directly. $dependency_string = $dependency_info['name']; } } @@ -783,7 +755,7 @@ class e_library_manager * @param $library * An array of library information, passed by reference. */ - private function libraryInvoke($group, &$library) + private function invoke($group, &$library) { // When introducing new callback groups in newer versions, stale cached library information somehow reaches // this point during the database update before clearing the library cache. @@ -794,7 +766,7 @@ class e_library_manager foreach($library['callbacks'][$group] as $callback) { - $this->libraryTraverseLibrary($library, $callback); + $this->traverseLibrary($library, $callback); } } @@ -810,7 +782,7 @@ class e_library_manager * @param $callback * A string containing the callback to apply to all parts of a library. */ - private function libraryTraverseLibrary(&$library, $callback) + private function traverseLibrary(&$library, $callback) { // If callback belongs to $this class. if(method_exists($this, $callback)) @@ -857,12 +829,12 @@ class e_library_manager * Loads a library's files. * * @param $library - * An array of library information as returned by libraryInfo(). + * An array of library information as returned by info(). * * @return int * The number of loaded files. */ - private function libraryLoadFiles($library) + private function loadFiles($library) { $siteTheme = e107::getPref('sitetheme'); $adminTheme = e107::getPref('admintheme'); @@ -875,7 +847,7 @@ class e_library_manager // If provider is an installed plugin. if(e107::isInstalled($provider)) { - $this->libraryLoadFiles(array( + $this->loadFiles(array( 'files' => $files, 'path' => '', 'library path' => e_PLUGIN . $provider, @@ -885,17 +857,17 @@ class e_library_manager // If provider is the admin theme, we only allow it for admin pages. elseif(e_ADMIN_AREA && $provider == $adminTheme) { - $this->libraryLoadFiles(array( + $this->loadFiles(array( 'files' => $files, 'path' => '', 'library path' => e_THEME . $provider, 'post-load integration files' => false, )); } - // If provider is the site theme, we only allow it for on the user area. + // If provider is the site theme, we only allow it on user areas. elseif(!deftrue(e_ADMIN_AREA, false) && $provider == $siteTheme) { - $this->libraryLoadFiles(array( + $this->loadFiles(array( 'files' => $files, 'path' => '', 'library path' => e_THEME . $provider, @@ -906,7 +878,7 @@ class e_library_manager } // Construct the full path to the library for later use. - $path = $library['library path']; + $path = e107::getParser()->replaceConstants($library['library path']); $path = ($library['path'] !== '' ? $path . '/' . $library['path'] : $path); // Count the number of loaded files for the return value. @@ -962,18 +934,17 @@ class e_library_manager { foreach($library['files']['php'] as $file => $array) { - // TODO: review these includes. $file_path1 = $path . '/' . $file; $file_path2 = e_ROOT . $path . '/' . $file; if(file_exists($file_path1)) { - $this->_libraryRequireOnce($file_path1); + $this->_requireOnce($file_path1); $count++; } elseif(file_exists($file_path2)) { - $this->_libraryRequireOnce($file_path2); + $this->_requireOnce($file_path2); $count++; } } @@ -987,7 +958,7 @@ class e_library_manager // If provider is an installed plugin. if(e107::isInstalled($provider)) { - $this->libraryLoadFiles(array( + $this->loadFiles(array( 'files' => $files, 'path' => '', 'library path' => e_PLUGIN . $provider, @@ -997,17 +968,17 @@ class e_library_manager // If provider is the admin theme, we only allow it for admin pages. elseif(e_ADMIN_AREA && $provider == $adminTheme) { - $this->libraryLoadFiles(array( + $this->loadFiles(array( 'files' => $files, 'path' => '', 'library path' => e_THEME . $provider, 'post-load integration files' => false, )); } - // If provider is the site theme, we only allow it for on the user area. + // If provider is the site theme, we only allow it on user areas. elseif(!deftrue(e_ADMIN_AREA, false) && $provider == $siteTheme) { - $this->libraryLoadFiles(array( + $this->loadFiles(array( 'files' => $files, 'path' => '', 'library path' => e_THEME . $provider, @@ -1023,14 +994,14 @@ class e_library_manager /** * Wrapper function for require_once. * - * A library file could set a $path variable in file scope. Requiring such a file directly in libraryLoadFiles() + * A library file could set a $path variable in file scope. Requiring such a file directly in loadFiles() * would lead to the local $path variable being overridden after the require_once statement. This would break * loading further files. Therefore we use this trivial wrapper which has no local state that can be tampered with. * * @param $file_path * The file path of the file to require. */ - private function _libraryRequireOnce($file_path) + private function _requireOnce($file_path) { // TODO: use e107_require_once() instead? require_once $file_path; @@ -1055,7 +1026,7 @@ class e_library_manager * @return mixed * A string containing the version of the library. */ - private function libraryGetVersion($library, $options) + private function getVersion($library, $options) { // Provide defaults. $options += array( @@ -1065,7 +1036,8 @@ class e_library_manager 'cols' => 200, ); - $file = $library['library path'] . '/' . $options['file']; + $libraryPath = e107::getParser()->replaceConstants($library['library path']); + $file = $libraryPath . '/' . $options['file']; if(empty($options['file']) || !file_exists($file)) { return; @@ -1085,7 +1057,7 @@ class e_library_manager } /** - * Parses a dependency for comparison by libraryCheckIncompatibility(). + * Parses a dependency for comparison by checkIncompatibility(). * * @param $dependency * A dependency string, which specifies a plugin dependency, and versions that are supported. Supported formats @@ -1100,9 +1072,9 @@ class e_library_manager * incompatibilities). * - 'versions' is a list of associative arrays, each containing the keys 'op' and 'version'. 'op' can be one of: * '=', '==', '!=', '<>', '<', '<=', '>', or '>='. 'version' is one piece like '4.5-beta3'. - * Callers should pass this structure to libraryCheckIncompatibility(). + * Callers should pass this structure to checkIncompatibility(). */ - private function libraryParseDependency($dependency) + private function parseDependency($dependency) { $value = array(); @@ -1152,16 +1124,16 @@ class e_library_manager * Checks whether a version is compatible with a given dependency. * * @param $v - * The parsed dependency structure from libraryParseDependency(). + * The parsed dependency structure from parseDependency(). * @param $current_version * The version to check against (like 4.2). * * @return * NULL if compatible, otherwise the original dependency version string that caused the incompatibility. * - * @see libraryParseDependency() + * @see parseDependency() */ - private function libraryCheckIncompatibility($v, $current_version) + private function checkIncompatibility($v, $current_version) { if(!empty($v['versions'])) { From 5b44ebde1e9e7258a1de8b004ec165420b4f0e08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=B3na=20Lore?= Date: Sun, 14 Feb 2016 11:48:49 +0100 Subject: [PATCH 2/7] Use lanVars() instead of str_replace(). --- e107_handlers/library_manager.php | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/e107_handlers/library_manager.php b/e107_handlers/library_manager.php index 990c68a53..2b16022f0 100644 --- a/e107_handlers/library_manager.php +++ b/e107_handlers/library_manager.php @@ -87,10 +87,8 @@ class e_library_manager { $library['error'] = LAN_LIBRARY_MANAGER_09; - $replace = array('[x]'); $replace_with = array($library['name']); - - $library['error message'] = str_replace($replace, $replace_with, LAN_LIBRARY_MANAGER_03); + $library['error message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_03, $replace_with); return $library; } @@ -138,7 +136,6 @@ class e_library_manager // indexed array of multiple parameters. if(isset($library['version arguments'][0])) { - if(isset($addonClass) && class_exists($addonClass)) /* @FIXME Perhaps use e107::callMethod() ? */ { $class = new $addonClass(); @@ -171,10 +168,8 @@ class e_library_manager { $library['error'] = LAN_LIBRARY_MANAGER_10; - $replace = array('[x]'); $replace_with = array($library['name']); - - $library['error message'] = str_replace($replace, $replace_with, LAN_LIBRARY_MANAGER_04); + $library['error message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_04, $replace_with); return $library; } @@ -196,11 +191,8 @@ class e_library_manager { $library['error'] = LAN_LIBRARY_MANAGER_11; - $replace = array('[x]', '[y]'); $replace_with = array($library['version'], $library['name']); - - /* @XXX - $tp->lanVars() ? */ - $library['error message'] = str_replace($replace, $replace_with, LAN_LIBRARY_MANAGER_05); + $library['error message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_05, $replace_with); return $library; } @@ -284,10 +276,8 @@ class e_library_manager { $variant['error'] = LAN_LIBRARY_MANAGER_09; - $replace = array('[x]', '[y]'); $replace_with = array($variant_name, $library['name']); - - $variant['error message'] = str_replace($replace, $replace_with, LAN_LIBRARY_MANAGER_06); + $variant['error message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_06, $replace_with); } } } @@ -725,20 +715,16 @@ class e_library_manager $library['installed'] = false; $library['error'] = LAN_LIBRARY_MANAGER_07; - $replace = array('[x]', '[y]'); $replace_with = array($dependency['name'], $library['name']); - - $library['error message'] = str_replace($replace, $replace_with, LAN_LIBRARY_MANAGER_01); /* FIXME $tp->lanVars() */ + $library['error message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_01, $replace_with); } elseif($this->checkIncompatibility($dependency_info, $dependency['version'])) { $library['installed'] = false; $library['error'] = LAN_LIBRARY_MANAGER_08; - $replace = array('[x]', '[y]', '[z]'); $replace_with = array($dependency['version'], $library['name'], $library['name']); - - $library['error message'] = str_replace($replace, $replace_with, LAN_LIBRARY_MANAGER_02); /* FIXME $tp->lanVars() */ + $library['error message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_02, $replace_with); } // Remove the version string from the dependency, so load() can load the libraries directly. From 90de3e0017a4ad53bd494f78f2c87238c6db2318 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=B3na=20Lore?= Date: Sun, 14 Feb 2016 12:38:46 +0100 Subject: [PATCH 3/7] Use e107::getAddon() and e107::callMethod() where possible. --- e107_handlers/library_manager.php | 101 +++++++++++++----------------- 1 file changed, 42 insertions(+), 59 deletions(-) diff --git a/e107_handlers/library_manager.php b/e107_handlers/library_manager.php index 2b16022f0..571344051 100644 --- a/e107_handlers/library_manager.php +++ b/e107_handlers/library_manager.php @@ -12,6 +12,7 @@ // [e_LANGUAGEDIR]/[e_LANGUAGE]/lan_library_manager.php e107::lan('core', 'library_manager'); + /** * Class e_library_manager. */ @@ -110,7 +111,7 @@ class e_library_manager // Add the library as the first argument. $classMethod = array($this, $library['version callback']); $params = array_merge(array($library), $library['version arguments']); - $variant['installed'] = call_user_func_array($classMethod, $params); + $variant['version'] = call_user_func_array($classMethod, $params); } else { @@ -121,45 +122,40 @@ class e_library_manager // If version callback is a method in e_library.php file. else { + $variant['version'] = ''; + $class = false; + if(varset($library['plugin'], false)) { - e107_require_once(e_PLUGIN . $library['plugin'] . '/e_library.php'); - $addonClass = $library['plugin'] . '_library'; + $class = e107::getAddon($library['plugin'], 'e_library'); } elseif(varset($library['theme'], false)) { - e107_require_once(e_THEME . $library['theme'] . '/e_library.php'); + // e107::getAddon() does not support theme folders. + e107_require_once(e_THEME . $library['theme'] . '/theme_library.php'); $addonClass = $library['theme'] . '_library'; + + if(isset($addonClass) && class_exists($addonClass)) + { + $class = new $addonClass(); + } } // We support both a single parameter, which is an associative array, and an // indexed array of multiple parameters. if(isset($library['version arguments'][0])) { - if(isset($addonClass) && class_exists($addonClass)) /* @FIXME Perhaps use e107::callMethod() ? */ + if($class) { - $class = new $addonClass(); - if(method_exists($class, $library['version callback'])) - { - // Add the library as the first argument. - // Call PLUGIN/THEME_library::VERSION_CALLBACK(). - $classMethod = array($class, $library['version callback']); - $params = array_merge(array($library), $library['version arguments']); - $variant['installed'] = call_user_func_array($classMethod, $params); - } + $params = array_merge(array($library), $library['version arguments']); + $variant['version'] = e107::callMethod($class, $library['version callback'], $params); } } else { - if(isset($addonClass) && class_exists($addonClass)) + if($class) { - $class = new $addonClass(); - if(method_exists($class, $library['version callback'])) - { - // Call PLUGIN/THEME_library::VERSION_CALLBACK(). - $method = $library['version callback']; - $library['version'] = $class->$method($library, $library['version arguments']); - } + $variant['version'] = e107::callMethod($class, $library['version callback'], $library, $library['version arguments']); } } } @@ -214,64 +210,56 @@ class e_library_manager } else { + $class = false; + if(varset($library['plugin'], false)) { - // e107::getAddon($library['plugin'],'e_library'); /* @FIXME Use this to avoid additional class_exists and method_exists checking */ - e107_require_once(e_PLUGIN . $library['plugin'] . '/e_library.php'); - $addonClass = $library['plugin'] . '_library'; + $class = e107::getAddon($library['plugin'], 'e_library'); } elseif(varset($library['theme'], false)) { - e107_require_once(e_THEME . $library['theme'] . '/e_library.php'); + // e107::getAddon() does not support theme folders. + e107_require_once(e_THEME . $library['theme'] . '/theme_library.php'); $addonClass = $library['theme'] . '_library'; + + if(isset($addonClass) && class_exists($addonClass)) + { + $class = new $addonClass(); + } } // We support both a single parameter, which is an associative array, and an indexed array of // multiple parameters. if(isset($variant['variant arguments'][0])) { - if(isset($addonClass) && class_exists($addonClass)) + if($class) { - $class = new $addonClass(); - if(method_exists($class, $variant['variant callback'])) - { - // Add the library as the first argument, and the variant name as the second. - // Call PLUGIN/THEME_library::VARIANT_CALLBACK(). - $classMethod = array($class, $library['variant callback']); - $params = array_merge(array($library, $variant_name), $variant['variant arguments']); - $variant['installed'] = call_user_func_array($classMethod, $params); - } - else - { - $variant['installed'] = true; - } + $params = array_merge(array($library, $variant_name), $variant['variant arguments']); + $variant['installed'] = e107::callMethod($class, $library['variant callback'], $params); } else { - $variant['installed'] = true; + $variant['installed'] = false; } } else { - if(isset($addonClass) && class_exists($addonClass)) + if($class) { - $class = new $addonClass(); + // Can't use e107::callMethod(), because it only supports 2 params. if(method_exists($class, $variant['variant callback'])) { // Call PLUGIN/THEME_library::VARIANT_CALLBACK(). $method = $variant['variant callback']; $variant['installed'] = $class->$method($library, $variant_name, $variant['variant arguments']); } - else - { - $variant['installed'] = true; - } } else { - $variant['installed'] = true; + $variant['installed'] = false; } } + if(!$variant['installed']) { $variant['error'] = LAN_LIBRARY_MANAGER_09; @@ -311,7 +299,8 @@ class e_library_manager */ public function load($name, $variant = null) { - static $loaded; /* @FIXME Still needed? */ + static $loaded; + /* @FIXME Still needed? */ if(!isset($loaded[$name])) { @@ -525,19 +514,13 @@ class e_library_manager } // Allow enabled plugins (with e_library.php file) to alter the registered libraries. - // e107::getAddon($plugin, 'e_library','config_alter'); /* FIXME Use e107::getAddon() instead? */ foreach($plugins as $plugin) { - e107_require_once(e_PLUGIN . $plugin . '/e_library.php'); - $addonClass = $plugin . '_library'; - - if(class_exists($addonClass)) + $class = e107::getAddon($plugin, 'e_library'); + if($class && method_exists($class, 'config_alter')) { - $class = new $addonClass(); - if(method_exists($class, 'config_alter')) - { - $class->config_alter($libraries); - } + // The library definitions are passed by reference. + $class->config_alter($libraries); } } From 332dc1739ab3797d6f9bfc6b089bc907ed3a2750 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=B3na=20Lore?= Date: Sun, 14 Feb 2016 13:01:36 +0100 Subject: [PATCH 4/7] Use underscores instead of spaces. --- e107_handlers/library_manager.php | 166 ++++++++++++++---------------- e107_plugins/_blank/e_library.php | 90 ++++++++-------- 2 files changed, 123 insertions(+), 133 deletions(-) diff --git a/e107_handlers/library_manager.php b/e107_handlers/library_manager.php index 571344051..916a0824f 100644 --- a/e107_handlers/library_manager.php +++ b/e107_handlers/library_manager.php @@ -6,7 +6,7 @@ * * TODO: * - Provide the ability to use third-party callbacks (are defined in e_library.php files) for groups: - * 'info', 'pre-detect', 'post-detect', 'pre-dependencies-load', 'pre-load', 'post-load' + * 'info', 'pre_detect', 'post_detect', 'pre_dependencies_load', 'pre_load', 'post_load' */ // [e_LANGUAGEDIR]/[e_LANGUAGE]/lan_library_manager.php @@ -56,7 +56,7 @@ class e_library_manager * - version: If the version could be detected, the full version string. * - error: If an error occurred during library detection, one of the following error statuses: * "not found", "not detected", "not supported". - * - error message: If an error occurred during library detection, a detailed error message. + * - error_message: If an error occurred during library detection, a detailed error_message. */ public function detect($name) { @@ -78,48 +78,48 @@ class e_library_manager $library['installed'] = false; // Check whether the library exists. - if(!isset($library['library path'])) + if(!isset($library['library_path'])) { - $library['library path'] = $this->getPath($library['machine name']); + $library['library_path'] = $this->getPath($library['machine_name']); } - $libraryPath = e107::getParser()->replaceConstants($library['library path']); - if($library['library path'] === false || !file_exists($libraryPath)) + $libraryPath = e107::getParser()->replaceConstants($library['library_path']); + if($library['library_path'] === false || !file_exists($libraryPath)) { $library['error'] = LAN_LIBRARY_MANAGER_09; $replace_with = array($library['name']); - $library['error message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_03, $replace_with); + $library['error_message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_03, $replace_with); return $library; } // TODO: - // Invoke callbacks in the 'pre-detect' group. - $this->invoke('pre-detect', $library); + // Invoke callbacks in the 'pre_detect' group. + $this->invoke('pre_detect', $library); // Detect library version, if not hardcoded. if(!isset($library['version'])) { - // If version callback is a method in $this class. - if(method_exists($this, $library['version callback'])) + // If version_callback is a method in $this class. + if(method_exists($this, $library['version_callback'])) { // We support both a single parameter, which is an associative array, and an indexed array of multiple // parameters. - if(isset($library['version arguments'][0])) + if(isset($library['version_arguments'][0])) { // Add the library as the first argument. - $classMethod = array($this, $library['version callback']); - $params = array_merge(array($library), $library['version arguments']); + $classMethod = array($this, $library['version_callback']); + $params = array_merge(array($library), $library['version_arguments']); $variant['version'] = call_user_func_array($classMethod, $params); } else { - $method = $library['version callback']; - $library['version'] = $this->$method($library, $library['version arguments']); + $method = $library['version_callback']; + $library['version'] = $this->$method($library, $library['version_arguments']); } } - // If version callback is a method in e_library.php file. + // If version_callback is a method in e_library.php file. else { $variant['version'] = ''; @@ -143,19 +143,19 @@ class e_library_manager // We support both a single parameter, which is an associative array, and an // indexed array of multiple parameters. - if(isset($library['version arguments'][0])) + if(isset($library['version_arguments'][0])) { if($class) { - $params = array_merge(array($library), $library['version arguments']); - $variant['version'] = e107::callMethod($class, $library['version callback'], $params); + $params = array_merge(array($library), $library['version_arguments']); + $variant['version'] = e107::callMethod($class, $library['version_callback'], $params); } } else { if($class) { - $variant['version'] = e107::callMethod($class, $library['version callback'], $library, $library['version arguments']); + $variant['version'] = e107::callMethod($class, $library['version_callback'], $library, $library['version_arguments']); } } } @@ -165,7 +165,7 @@ class e_library_manager $library['error'] = LAN_LIBRARY_MANAGER_10; $replace_with = array($library['name']); - $library['error message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_04, $replace_with); + $library['error_message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_04, $replace_with); return $library; } @@ -188,7 +188,7 @@ class e_library_manager $library['error'] = LAN_LIBRARY_MANAGER_11; $replace_with = array($library['version'], $library['name']); - $library['error message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_05, $replace_with); + $library['error_message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_05, $replace_with); return $library; } @@ -210,6 +210,7 @@ class e_library_manager } else { + $variant['installed'] = false; $class = false; if(varset($library['plugin'], false)) @@ -237,10 +238,6 @@ class e_library_manager $params = array_merge(array($library, $variant_name), $variant['variant arguments']); $variant['installed'] = e107::callMethod($class, $library['variant callback'], $params); } - else - { - $variant['installed'] = false; - } } else { @@ -254,10 +251,6 @@ class e_library_manager $variant['installed'] = $class->$method($library, $variant_name, $variant['variant arguments']); } } - else - { - $variant['installed'] = false; - } } if(!$variant['installed']) @@ -265,7 +258,7 @@ class e_library_manager $variant['error'] = LAN_LIBRARY_MANAGER_09; $replace_with = array($variant_name, $library['name']); - $variant['error message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_06, $replace_with); + $variant['error_message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_06, $replace_with); } } } @@ -274,8 +267,8 @@ class e_library_manager // If we end up here, the library should be usable. $library['installed'] = true; - // Invoke callbacks in the 'post-detect' group. - $this->invoke('post-detect', $library); + // Invoke callbacks in the 'post_detect' group. + $this->invoke('post_detect', $library); return $library; } @@ -340,8 +333,8 @@ class e_library_manager unset($library['variants']); // TODO: - // Invoke callbacks in the 'pre-dependencies-load' group. - $this->invoke('pre-dependencies-load', $library); + // Invoke callbacks in the 'pre_dependencies_load' group. + $this->invoke('pre_dependencies_load', $library); // If the library (variant) is installed, load it. $library['loaded'] = false; @@ -357,15 +350,15 @@ class e_library_manager } // TODO: - // Invoke callbacks in the 'pre-load' group. - $this->invoke('pre-load', $library); + // Invoke callbacks in the 'pre_load' group. + $this->invoke('pre_load', $library); // Load all the files associated with the library. $library['loaded'] = $this->loadFiles($library); // TODO: - // Invoke callbacks in the 'post-load' group. - $this->invoke('post-load', $library); + // Invoke callbacks in the 'post_load' group. + $this->invoke('post_load', $library); } $loaded[$name] = $library; } @@ -467,7 +460,7 @@ class e_library_manager { foreach($info as $machine_name => $properties) { - $properties['info type'] = 'plugin'; + $properties['info_type'] = 'plugin'; $properties['plugin'] = $plugin; $libraries[$machine_name] = $properties; $plugins[] = $plugin; // This plugin has a valid e_library implementation. @@ -496,7 +489,7 @@ class e_library_manager { foreach($info as $machine_name => $properties) { - $properties['info type'] = 'theme'; + $properties['info_type'] = 'theme'; $properties['theme'] = $theme; $libraries[$machine_name] = $properties; $themes[] = $theme; // This theme has a valid e_library implementation. @@ -576,38 +569,35 @@ class e_library_manager */ private function infoDefaults(&$library, $name) { - - /* FIXME Avoid spaces in keys, use _ underscores */ - $library += array( - 'machine name' => $name, + 'machine_name' => $name, 'name' => $name, - 'vendor url' => '', - 'download url' => '', + 'vendor_url' => '', + 'download_url' => '', 'path' => '', - 'library path' => null, - 'version callback' => 'getVersion', - 'version arguments' => array(), + 'library_path' => null, + 'version_callback' => 'getVersion', + 'version_arguments' => array(), 'files' => array(), 'dependencies' => array(), 'variants' => array(), 'versions' => array(), - 'integration files' => array(), + 'integration_files' => array(), 'callbacks' => array(), ); $library['callbacks'] += array( 'info' => array(), - 'pre-detect' => array(), - 'post-detect' => array(), - 'pre-dependencies-load' => array(), - 'pre-load' => array(), - 'post-load' => array(), + 'pre_detect' => array(), + 'post_detect' => array(), + 'pre_dependencies_load' => array(), + 'pre_load' => array(), + 'post_load' => array(), ); // Add our own callbacks before any others. array_unshift($library['callbacks']['info'], 'prepareFiles'); - array_unshift($library['callbacks']['post-detect'], 'detectDependencies'); + array_unshift($library['callbacks']['post_detect'], 'detectDependencies'); return $library; } @@ -626,7 +616,7 @@ class e_library_manager * 'example_2.js' => array(), * ); * @endcode - * It does the same for the 'integration files' property. + * It does the same for the 'integration_files' property. * * @param $library * An associative array of library information or a part of it, passed by reference. @@ -637,17 +627,17 @@ class e_library_manager */ private function prepareFiles(&$library, $version = null, $variant = null) { - // Both the 'files' property and the 'integration files' property contain file declarations, and we want to make + // Both the 'files' property and the 'integration_files' property contain file declarations, and we want to make // both consistent. $file_types = array(); if(isset($library['files'])) { $file_types[] = &$library['files']; } - if(isset($library['integration files'])) + if(isset($library['integration_files'])) { // Integration files are additionally keyed by plugin. - foreach($library['integration files'] as &$integration_files) + foreach($library['integration_files'] as &$integration_files) { $file_types[] = &$integration_files; } @@ -674,7 +664,7 @@ class e_library_manager } /** - * Library post-detect callback to process and detect dependencies. + * Library post detect callback to process and detect dependencies. * * It checks whether each of the dependencies of a library are installed and available in a compatible version. * @@ -699,7 +689,7 @@ class e_library_manager $library['error'] = LAN_LIBRARY_MANAGER_07; $replace_with = array($dependency['name'], $library['name']); - $library['error message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_01, $replace_with); + $library['error_message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_01, $replace_with); } elseif($this->checkIncompatibility($dependency_info, $dependency['version'])) { @@ -707,7 +697,7 @@ class e_library_manager $library['error'] = LAN_LIBRARY_MANAGER_08; $replace_with = array($dependency['version'], $library['name'], $library['name']); - $library['error message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_02, $replace_with); + $library['error_message'] = e107::getParser()->lanVars(LAN_LIBRARY_MANAGER_02, $replace_with); } // Remove the version string from the dependency, so load() can load the libraries directly. @@ -720,7 +710,7 @@ class e_library_manager * Invokes library callbacks. * * @param $group - * A string containing the group of callbacks that is to be applied. Should be either 'info', 'post-detect'. + * A string containing the group of callbacks that is to be applied. Should be either 'info', 'post_detect'. * @param $library * An array of library information, passed by reference. */ @@ -790,7 +780,7 @@ class e_library_manager else { // TODO: Provide the ability to use third-party callbacks (are defined in e_library.php files) for groups: - // 'info', 'pre-detect', 'post-detect', 'pre-dependencies-load', 'pre-load', 'post-load' + // 'info', 'pre_detect', 'post_detect', 'pre_dependencies_load', 'pre_load', 'post_load' } } @@ -808,10 +798,10 @@ class e_library_manager $siteTheme = e107::getPref('sitetheme'); $adminTheme = e107::getPref('admintheme'); - // Load integration files. - if(!$library['post-load integration files'] && !empty($library['integration files'])) + // Load integration_files. + if(!$library['post_load_integration_files'] && !empty($library['integration_files'])) { - foreach($library['integration files'] as $provider => $files) + foreach($library['integration_files'] as $provider => $files) { // If provider is an installed plugin. if(e107::isInstalled($provider)) @@ -819,8 +809,8 @@ class e_library_manager $this->loadFiles(array( 'files' => $files, 'path' => '', - 'library path' => e_PLUGIN . $provider, - 'post-load integration files' => false, + 'library_path' => e_PLUGIN . $provider, + 'post_load_integration_files' => false, )); } // If provider is the admin theme, we only allow it for admin pages. @@ -829,8 +819,8 @@ class e_library_manager $this->loadFiles(array( 'files' => $files, 'path' => '', - 'library path' => e_THEME . $provider, - 'post-load integration files' => false, + 'library_path' => e_THEME . $provider, + 'post_load_integration_files' => false, )); } // If provider is the site theme, we only allow it on user areas. @@ -839,15 +829,15 @@ class e_library_manager $this->loadFiles(array( 'files' => $files, 'path' => '', - 'library path' => e_THEME . $provider, - 'post-load integration files' => false, + 'library_path' => e_THEME . $provider, + 'post_load_integration_files' => false, )); } } } // Construct the full path to the library for later use. - $path = e107::getParser()->replaceConstants($library['library path']); + $path = e107::getParser()->replaceConstants($library['library_path']); $path = ($library['path'] !== '' ? $path . '/' . $library['path'] : $path); // Count the number of loaded files for the return value. @@ -873,7 +863,7 @@ class e_library_manager $data = $options['data']; unset($options['data']); } - // Prepend the library path to the file name. + // Prepend the library_path to the file name. $data = "$path/$data"; // Apply the default zone if the zone isn't explicitly given. if(!isset($options['zone'])) @@ -919,10 +909,10 @@ class e_library_manager } } - // Load integration files. - if($library['post-load integration files'] && !empty($library['integration files'])) + // Load integration_files. + if($library['post_load_integration_files'] && !empty($library['integration_files'])) { - foreach($library['integration files'] as $provider => $files) + foreach($library['integration_files'] as $provider => $files) { // If provider is an installed plugin. if(e107::isInstalled($provider)) @@ -930,8 +920,8 @@ class e_library_manager $this->loadFiles(array( 'files' => $files, 'path' => '', - 'library path' => e_PLUGIN . $provider, - 'post-load integration files' => false, + 'library_path' => e_PLUGIN . $provider, + 'post_load_integration_files' => false, )); } // If provider is the admin theme, we only allow it for admin pages. @@ -940,8 +930,8 @@ class e_library_manager $this->loadFiles(array( 'files' => $files, 'path' => '', - 'library path' => e_THEME . $provider, - 'post-load integration files' => false, + 'library_path' => e_THEME . $provider, + 'post_load_integration_files' => false, )); } // If provider is the site theme, we only allow it on user areas. @@ -950,8 +940,8 @@ class e_library_manager $this->loadFiles(array( 'files' => $files, 'path' => '', - 'library path' => e_THEME . $provider, - 'post-load integration files' => false, + 'library_path' => e_THEME . $provider, + 'post_load_integration_files' => false, )); } } @@ -1005,7 +995,7 @@ class e_library_manager 'cols' => 200, ); - $libraryPath = e107::getParser()->replaceConstants($library['library path']); + $libraryPath = e107::getParser()->replaceConstants($library['library_path']); $file = $libraryPath . '/' . $options['file']; if(empty($options['file']) || !file_exists($file)) { diff --git a/e107_plugins/_blank/e_library.php b/e107_plugins/_blank/e_library.php index 9c78e64f5..0b0c0af50 100644 --- a/e107_plugins/_blank/e_library.php +++ b/e107_plugins/_blank/e_library.php @@ -21,33 +21,33 @@ class PLUGIN_library * Each key is the directory name below the '{e_WEB}/lib' directory, in which the library may be found. Each * value is an associative array containing: * - name: The official, human-readable name of the library. - * - vendor url: The URL of the homepage of the library. - * - download url: The URL of a web page on which the library can be obtained. + * - vendor_url: The URL of the homepage of the library. + * - download_url: The URL of a web page on which the library can be obtained. * - path: (optional) A relative path from the directory of the library to the actual library. Only required if * the extracted download package contains the actual library files in a sub-directory. - * - library path: (optional) The absolute path to the library directory. This should not be declared normally, as + * - library_path: (optional) The absolute path to the library directory. This should not be declared normally, as * it is automatically detected, to allow for multiple possible library locations. A valid use-case is an * external library, in which case the full URL to the library should be specified here. * - version: (optional) The version of the library. This should not be declared normally, as it is automatically - * detected (see 'version callback' below) to allow for version changes of libraries without code changes of + * detected (see 'version_callback' below) to allow for version changes of libraries without code changes of * implementing plugins and to support different versions of a library simultaneously. A valid use-case is an - * external library whose version cannot be determined programmatically. Either 'version' or 'version callback' - * (or 'version arguments' in case libraryGetVersion() is being used as a version callback) must be declared. - * - version callback: (optional) The name of a function that detects and returns the full version string of the + * external library whose version cannot be determined programmatically. Either 'version' or 'version_callback' + * (or 'version_arguments' in case libraryGetVersion() is being used as a version callback) must be declared. + * - version_callback: (optional) The name of a function that detects and returns the full version string of the * library. The first argument is always $library, an array containing all library information as described here. * There are two ways to declare the version callback's additional arguments, either as a single $options * parameter or as multiple parameters, which correspond to the two ways to specify the argument values (see - * 'version arguments'). Defaults to libraryGetVersion(). Unless 'version' is declared or libraryGetVersion() - * is being used as a version callback, 'version callback' must be declared. In the latter case, however, - * 'version arguments' must be declared in the specified way. - * - version arguments: (optional) A list of arguments to pass to the version callback. Version arguments can be + * 'version_arguments'). Defaults to libraryGetVersion(). Unless 'version' is declared or libraryGetVersion() + * is being used as a version callback, 'version_callback' must be declared. In the latter case, however, + * 'version_arguments' must be declared in the specified way. + * - version_arguments: (optional) A list of arguments to pass to the version callback. Version arguments can be * declared either as an associative array whose keys are the argument names or as an indexed array without * specifying keys. If declared as an associative array, the arguments get passed to the version callback as a * single $options parameter whose keys are the argument names (i.e. $options is identical to the specified * array). If declared as an indexed array, the array values get passed to the version callback as separate * arguments in the order they were declared. The default version callback libraryGetVersion() expects a * single, associative array with named keys: - * - file: The filename to parse for the version, relative to the path specified as the 'library path' property + * - file: The filename to parse for the version, relative to the path specified as the 'library_path' property * (see above). For example: 'docs/changelog.txt'. * - pattern: A string containing a regular expression (PCRE) to match the library version. For example: * '@version\s+([0-9a-zA-Z\.-]+)@'. Note that the returned version is not the match of the entire pattern @@ -56,8 +56,8 @@ class PLUGIN_library * - lines: (optional) The maximum number of lines to search the pattern in. Defaults to 20. * - cols: (optional) The maximum number of characters per line to take into account. Defaults to 200. In case * of minified or compressed files, this prevents reading the entire file into memory. - * Defaults to an empty array. 'version arguments' must be specified unless 'version' is declared or the - * specified 'version callback' does not require any arguments. The latter might be the case with a + * Defaults to an empty array. 'version_arguments' must be specified unless 'version' is declared or the + * specified 'version_callback' does not require any arguments. The latter might be the case with a * library-specific version callback, for example. * - files: An associative array of library files to load. Supported keys are: * - js: A list of JavaScript files to load. @@ -89,13 +89,13 @@ class PLUGIN_library * 'minified' or 'source'. Each value is an associative array of top-level properties that are entirely * overridden by the variant, most often just 'files'. Additionally, each variant can contain following * properties: - * - variant callback: (optional) The name of a function that detects the variant and returns TRUE or FALSE, + * - variant_callback: (optional) The name of a function that detects the variant and returns TRUE or FALSE, * depending on whether the variant is available or not. The first argument is always $library, an array * containing all library information as described here. The second argument is always a string containing the * variant name. There are two ways to declare the variant callback's additional arguments, either as a single * $options parameter or as multiple parameters, which correspond to the two ways to specify the argument - * values (see 'variant arguments'). If omitted, the variant is expected to always be available. - * - variant arguments: A list of arguments to pass to the variant callback. Variant arguments can be declared + * values (see 'variant_arguments'). If omitted, the variant is expected to always be available. + * - variant_arguments: A list of arguments to pass to the variant callback. Variant arguments can be declared * either as an associative array whose keys are the argument names or as an indexed array without specifying * keys. If declared as an associative array, the arguments get passed to the variant callback as a single * $options parameter whose keys are the argument names (i.e. $options is identical to the specified array). @@ -107,7 +107,7 @@ class PLUGIN_library * loaded, different 'variants' may become available, or e107 plugins need to load different integration files * adapted to the new version. Each key is a version *string* (PHP does not support floats as keys). Each value * is an associative array of top-level properties that are entirely overridden by the version. - * - integration files: (optional) Sets of files to load for the plugin, using the same notion as the top-level + * - integration_files: (optional) Sets of files to load for the plugin, using the same notion as the top-level * 'files' property. Each specified file should contain the path to the file relative to the plugin it belongs * to. * Additional top-level properties can be registered as needed. @@ -120,19 +120,19 @@ class PLUGIN_library $libraries['example'] = array( // Only used in administrative UI of Libraries API. 'name' => 'Example library', - 'vendor url' => 'http://example.com', - 'download url' => 'http://example.com/download', + 'vendor_url' => 'http://example.com', + 'download_url' => 'http://example.com/download', // Override default library location ({e_WEB}/lib). - 'library path' => e_PLUGIN . 'example', + 'library_path' => e_PLUGIN . 'example', // Optional: If, after extraction, the actual library files are contained in 'e107_web/lib/example/lib', // specify the relative path here. 'path' => 'lib', // Optional: Define a custom version detection callback, if required. Need to be in your 'PLUGIN_library' // class. - 'version callback' => 'example_custom_version_callback', + 'version_callback' => 'example_custom_version_callback', // Specify arguments for the version callback. // By default, libraryGetVersion() takes a named argument array: - 'version arguments' => array( + 'version_arguments' => array( 'file' => 'docs/CHANGELOG.txt', 'pattern' => '@version\s+([0-9a-zA-Z\.-]+)@', 'lines' => 5, @@ -141,7 +141,7 @@ class PLUGIN_library // Default list of files of the library to load. Important: Only specify third-party files belonging to the // library here, not integration files of your plugin. 'files' => array( - // 'js' and 'css' file paths are relative to the library path. + // 'js' and 'css' file paths are relative to the library_path. 'js' => array( 'exlib.js' => array( 'zone' => 3, // If not set, the default: 2. See: e107::js() @@ -155,7 +155,7 @@ class PLUGIN_library 'lib_style.css', 'skin/example.css', ), - // For PHP libraries, specify include files here, still relative to the library path. + // For PHP libraries, specify include files here, still relative to the library_path. 'php' => array( 'exlib.php', 'exlib.inc', @@ -176,8 +176,8 @@ class PLUGIN_library ), ), // Your variant callback needs to be in your 'PLUGIN_library' class. - 'variant callback' => 'example_custom_variant_callback', - 'variant arguments' => array( + 'variant_callback' => 'example_custom_variant_callback', + 'variant_arguments' => array( 'variant' => 'minified', ), ), @@ -187,7 +187,7 @@ class PLUGIN_library // // Note: // - When registering 'versions', it usually does not make sense to register 'files', 'variants', and - // 'integration files' on the top-level, as most of those likely need to be different per version and there + // 'integration_files' on the top-level, as most of those likely need to be different per version and there // are no defaults. // - The array keys have to be strings, as PHP does not support floats for array keys. 'versions' => array( @@ -218,7 +218,7 @@ class PLUGIN_library ), // Optional: Register files to auto-load for your plugin. All files must be keyed by plugin, and follow the // syntax of the 'files' property. - 'integration files' => array( + 'integration_files' => array( 'MYPLUGIN' => array( 'js' => array('ex_lib.inc'), ), @@ -229,9 +229,9 @@ class PLUGIN_library // 'e107_web/lib/simple'. $libraries['simple'] = array( 'name' => 'Simple library', - 'vendor url' => 'http://example.com/simple', - 'download url' => 'http://example.com/simple', - 'version arguments' => array( + 'vendor_url' => 'http://example.com/simple', + 'download_url' => 'http://example.com/simple', + 'version_arguments' => array( 'file' => 'readme.txt', // Best practice: Document the actual version strings for later reference. // 1.x: Version 1.0 @@ -251,13 +251,13 @@ class PLUGIN_library // A library that (naturally) evolves over time with API changes. $libraries['tinymce'] = array( 'name' => 'TinyMCE', - 'vendor url' => 'http://tinymce.moxiecode.com', - 'download url' => 'http://tinymce.moxiecode.com/download.php', + 'vendor_url' => 'http://tinymce.moxiecode.com', + 'download_url' => 'http://tinymce.moxiecode.com/download.php', 'path' => 'jscripts/tiny_mce', // The regular expression catches two parts (the major and the minor version), which libraryGetVersion() // doesn't allow. - 'version callback' => 'tinymce_get_version', - 'version arguments' => array( + 'version_callback' => 'tinymce_get_version', + 'version_arguments' => array( // It can be easier to parse the first characters of a minified file instead of doing a multi-line // pattern matching in a source file. See 'lines' and 'cols' below. 'file' => 'jscripts/tiny_mce/tiny_mce.js', @@ -280,7 +280,7 @@ class PLUGIN_library ), ), ), - 'integration files' => array( + 'integration_files' => array( 'wysiwyg' => array( 'js' => array('editors/js/tinymce-2.js'), 'css' => array('editors/js/tinymce-2.css'), @@ -311,7 +311,7 @@ class PLUGIN_library ), ), ), - 'integration files' => array( + 'integration_files' => array( 'wysiwyg' => array( 'js' => array('editors/js/tinymce-3.js'), 'css' => array('editors/js/tinymce-3.css'), @@ -324,9 +324,9 @@ class PLUGIN_library // Example for Facebook PHP SDK v4. $libraries['facebook-php-sdk-v4'] = array( 'name' => 'Facebook PHP SDK v4', - 'vendor url' => 'https://github.com/facebook/facebook-php-sdk-v4', - 'download url' => 'https://github.com/facebook/facebook-php-sdk-v4/archive/4.0.23.tar.gz', - 'version arguments' => array( + 'vendor_url' => 'https://github.com/facebook/facebook-php-sdk-v4', + 'download_url' => 'https://github.com/facebook/facebook-php-sdk-v4/archive/4.0.23.tar.gz', + 'version_arguments' => array( 'file' => 'src/Facebook/FacebookRequest.php', // const VERSION = '4.0.23'; 'pattern' => '/const\s+VERSION\s+=\s+\'(4\.\d\.\d+)\'/', @@ -342,9 +342,9 @@ class PLUGIN_library // Example for Facebook PHP SDK v5. $libraries['facebook-php-sdk-v5'] = array( 'name' => 'Facebook PHP SDK v5', - 'vendor url' => 'https://github.com/facebook/facebook-php-sdk-v4', - 'download url' => 'https://github.com/facebook/facebook-php-sdk-v4/archive/5.1.2.tar.gz', - 'version arguments' => array( + 'vendor_url' => 'https://github.com/facebook/facebook-php-sdk-v4', + 'download_url' => 'https://github.com/facebook/facebook-php-sdk-v4/archive/5.1.2.tar.gz', + 'version_arguments' => array( 'file' => 'src/Facebook/Facebook.php', // const VERSION = '5.1.2'; 'pattern' => '/const\s+VERSION\s+=\s+\'(5\.\d\.\d+)\'/', @@ -373,7 +373,7 @@ class PLUGIN_library 'php' => array('example_plugin.php_spellchecker.inc'), ); - $libraries['php_spellchecker']['integration files']['example_plugin'] = $files; + $libraries['php_spellchecker']['integration_files']['example_plugin'] = $files; } } From b6225413b99eba2d2b95e467044df1d204e1bb20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=B3na=20Lore?= Date: Sun, 14 Feb 2016 13:16:24 +0100 Subject: [PATCH 5/7] Comment for static variable. --- e107_handlers/library_manager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e107_handlers/library_manager.php b/e107_handlers/library_manager.php index 916a0824f..36c34781b 100644 --- a/e107_handlers/library_manager.php +++ b/e107_handlers/library_manager.php @@ -292,8 +292,8 @@ class e_library_manager */ public function load($name, $variant = null) { + // Re-use the statically cached value to save memory. static $loaded; - /* @FIXME Still needed? */ if(!isset($loaded[$name])) { From cbc096b74b233de8d8faf82a524e9a3ae62efcce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=B3na=20Lore?= Date: Sun, 14 Feb 2016 13:34:02 +0100 Subject: [PATCH 6/7] Use e107::getFile() to get directories. --- e107_handlers/library_manager.php | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/e107_handlers/library_manager.php b/e107_handlers/library_manager.php index 36c34781b..f02d4bfcd 100644 --- a/e107_handlers/library_manager.php +++ b/e107_handlers/library_manager.php @@ -406,24 +406,15 @@ class e_library_manager private function getLibraries() { $dir = e_WEB . 'lib'; + $directories = array(); // Retrieve list of directories. - /* FIXME Use e107::getFile() or just scandir() ? */ - $directories = array(); - $nomask = array('CVS'); - if(is_dir($dir) && $handle = opendir($dir)) + $file = e107::getFile(); + $dirs = $file->get_dirs($dir); + + foreach($dirs as $dirName) { - while(false !== ($file = readdir($handle))) - { - if(!in_array($file, $nomask) && $file[0] != '.') - { - if(is_dir("$dir/$file")) - { - $directories[$file] = "{e_WEB}lib/$file"; - } - } - } - closedir($handle); + $directories[$dirName] = "{e_WEB}lib/$dirName"; } return $directories; From 60d1bf769d8583643c318127b8da0663a4cc837f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=B3na=20Lore?= Date: Sun, 14 Feb 2016 13:46:10 +0100 Subject: [PATCH 7/7] Fixed: wrong variable usage. --- e107_handlers/library_manager.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/e107_handlers/library_manager.php b/e107_handlers/library_manager.php index f02d4bfcd..546e2a6ce 100644 --- a/e107_handlers/library_manager.php +++ b/e107_handlers/library_manager.php @@ -111,7 +111,7 @@ class e_library_manager // Add the library as the first argument. $classMethod = array($this, $library['version_callback']); $params = array_merge(array($library), $library['version_arguments']); - $variant['version'] = call_user_func_array($classMethod, $params); + $library['version'] = call_user_func_array($classMethod, $params); } else { @@ -122,7 +122,7 @@ class e_library_manager // If version_callback is a method in e_library.php file. else { - $variant['version'] = ''; + $library['version'] = ''; $class = false; if(varset($library['plugin'], false)) @@ -148,14 +148,14 @@ class e_library_manager if($class) { $params = array_merge(array($library), $library['version_arguments']); - $variant['version'] = e107::callMethod($class, $library['version_callback'], $params); + $library['version'] = e107::callMethod($class, $library['version_callback'], $params); } } else { if($class) { - $variant['version'] = e107::callMethod($class, $library['version_callback'], $library, $library['version_arguments']); + $library['version'] = e107::callMethod($class, $library['version_callback'], $library, $library['version_arguments']); } } }