libraries.module in Libraries API 7
Same filename and directory in other branches
External library handling for Drupal modules.
File
libraries.moduleView source
<?php
/**
* @file
* External library handling for Drupal modules.
*/
/**
* Gets the path of a library.
*
* @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
* The path to the specified library.
*
* @ingroup libraries
*/
function libraries_get_path($name, $base_path = FALSE) {
$libraries =& drupal_static(__FUNCTION__);
if (!isset($libraries)) {
$libraries = libraries_get_libraries();
}
$path = $base_path ? base_path() : '';
if (!isset($libraries[$name])) {
// Most often, external libraries can be shared across multiple sites, so
// we return sites/all/libraries as the default path.
$path .= 'sites/all/libraries/' . $name;
}
else {
$path .= $libraries[$name];
}
return $path;
}
/**
* Returns an array of library directories.
*
* Returns an array of library directories from the all-sites directory
* (i.e. sites/all/libraries/), the profiles directory, and site-specific
* directory (i.e. sites/somesite/libraries/). The returned array will be keyed
* by the library name. Site-specific libraries are prioritized over libraries
* in the default directories. That is, if a library with the same name appears
* in both the site-wide directory and site-specific directory, only the
* site-specific version will be listed.
*
* @return
* A list of library directories.
*
* @ingroup libraries
*/
function libraries_get_libraries() {
$directory = 'libraries';
$searchdir = array();
$profile = drupal_get_profile();
$config = conf_path();
// Similar to 'modules' and 'themes' directories in the root directory,
// certain distributions may want to place libraries into a 'libraries'
// directory in Drupal's root directory.
$searchdir[] = $directory;
// The 'profiles' directory contains pristine collections of modules and
// themes as organized by a distribution. It is pristine in the same way
// that /modules is pristine for core; users should avoid changing anything
// there in favor of sites/all or sites/<domain> directories.
if (file_exists("profiles/{$profile}/{$directory}")) {
$searchdir[] = "profiles/{$profile}/{$directory}";
}
// Always search sites/all/*.
$searchdir[] = 'sites/all/' . $directory;
// Also search sites/<domain>/*.
if (file_exists("{$config}/{$directory}")) {
$searchdir[] = "{$config}/{$directory}";
}
// Retrieve list of directories.
// @todo Core: Allow to scan for directories.
$directories = array();
$nomask = array(
'CVS',
);
foreach ($searchdir as $dir) {
if (is_dir($dir) && ($handle = opendir($dir))) {
while (FALSE !== ($file = readdir($handle))) {
if (!in_array($file, $nomask) && $file[0] != '.') {
if (is_dir("{$dir}/{$file}")) {
$directories[$file] = "{$dir}/{$file}";
}
}
}
closedir($handle);
}
}
return $directories;
}
Functions
Name | Description |
---|---|
libraries_get_libraries | Returns an array of library directories. |
libraries_get_path | Gets the path of a library. |