Index: libraries.api.php =================================================================== RCS file: libraries.api.php diff -N libraries.api.php --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libraries.api.php 3 Apr 2010 12:15:16 -0000 @@ -0,0 +1,94 @@ + 'Example library', + 'vendor url' => 'http://example.com', + 'download url' => 'http://example.com/download', + 'path' => 'exlib/files', + 'version arguments' => array('../docs/CHANGELOG.txt', '5'), + 'files' => array( + 'css' => array('lib_style.css', 'example_1.css', 'example_2.css'), + 'js' => array('exlib.js', 'js_gadget_1.js'), + 'php' => array('exlib.php', 'exlib.inc'), + ), + 'variants' => array( + 'minified' => array( + 'files' => array( + 'css' => array('exlib_min.css'), + 'js' => array('exlib_min.js'), + ), + ), + ), + 'versions' => array( + '2' => array( + 'files' => array( + 'php' => array('api_old.php'), + ), + ), + '3' => array( + 'files' => array( + 'php' => array('api_new.php'), + ), + ), + ), + 'integration files' => array( + 'example_library_integration_module' => array('ex_lib.inc'), + ), + ); + + return $libraries; +} Index: libraries.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/libraries/libraries.module,v retrieving revision 1.3 diff -u -p -r1.3 libraries.module --- libraries.module 2 Apr 2010 15:38:38 -0000 1.3 +++ libraries.module 3 Apr 2010 12:15:16 -0000 @@ -112,3 +112,95 @@ function libraries_get_libraries() { return $directories; } +/* + * Gather library information from modules + */ +function libraries_info() { + + static $libraries; + + if (isset($libraries)) { + return $libraries; + } + + $modules = module_implements('libraries_info'); + $libraries = array(); + + foreach ($modules as $module) { + $module_libraries = module_invoke($module, 'libraries_info'); + + foreach ($module_libraries as $library => $properties) { + $libraries[$library] = $properties; + + // Fill in required and default properties. + $libraries[$library] += array( + 'title' => '', + 'vendor url' => '', + 'download url' => '', + 'path' => '', + 'version callback' => 'libraries_get_version', + 'version arguments' => NULL, + 'variants' => NULL, + 'versions' => NULL, + 'integration files' => NULL, + ); + + } + + } + +} + +/* + * Detect libraries and their versions + * + * @param $libraries + * An array of libraries to detect as from libraries_info. + * + * @see libraries_info() + */ +libraries_detect(&$libraries) { + + foreach ($libraries as $library => $properties) { + + // Check whether library is present. + $libraries[$library]['library path'] = libraries_get_path($library, $library['path']); + if (!($libraries[$library]['installed'] = file_exists($library['library path']))) { + continue; + } + + // Detect library version. + $arguments = ''; + if ($libraries[$library]['version arguments']) { + $arguments = implode(', ', $libraries[$library]['version arguments']); + } + $libraries[$library]['installed version'] = $libraries[$library]['version callback']($arguments); + if (empty($libraries[$library]['installed version'])) { + $libraries[$library]['error'] = t('The version of %library could not be detected.', array('%library' => $properties['title'])); + $libraries[$library]['installed'] = FALSE; + continue; + } + + // Determine to which supported version the installed version maps. + if (ksort($libraries[$library]['versions'])) { + $version = 0; + foreach ($libraries[$library]['versions'] as $supported_version => $version_properties) { + if (version_compare($libraries[$library]['installed version'], $supported_version, '>=')) { + $version = $supported_version; + } + } + if (!$version) { + $libraries[$library]['error'] = t('The installed version %version of %library is not supported.', array('%version' => $libraries[$library]['installed version'], '%library' => $libraries[$library]['title'])); + $libraries[$library]['installed'] = FALSE; + continue; + } + + // Apply version specific definitions and overrides. + $libraries[$library] = array_merge($libraries[$library], $libraries[$library]['versions'][$version]); + unset($libraries[$library]['versions']); + } + + } + +} +