danielebarchiesi@2
|
1 <?php
|
danielebarchiesi@3
|
2 // $Id: libraries.module,v 1.19.2.1 2011/01/27 02:31:41 sun Exp $
|
danielebarchiesi@2
|
3
|
danielebarchiesi@2
|
4 /**
|
danielebarchiesi@2
|
5 * @file
|
danielebarchiesi@2
|
6 * External library handling for Drupal modules.
|
danielebarchiesi@2
|
7 */
|
danielebarchiesi@2
|
8
|
danielebarchiesi@2
|
9 /**
|
danielebarchiesi@2
|
10 * Gets the path of a library.
|
danielebarchiesi@2
|
11 *
|
danielebarchiesi@2
|
12 * @param $name
|
danielebarchiesi@2
|
13 * The machine name of a library to return the path for.
|
danielebarchiesi@2
|
14 * @param $base_path
|
danielebarchiesi@2
|
15 * Whether to prefix the resulting path with base_path().
|
danielebarchiesi@2
|
16 *
|
danielebarchiesi@2
|
17 * @return
|
danielebarchiesi@3
|
18 * The path to the specified library.
|
danielebarchiesi@2
|
19 *
|
danielebarchiesi@2
|
20 * @ingroup libraries
|
danielebarchiesi@2
|
21 */
|
danielebarchiesi@2
|
22 function libraries_get_path($name, $base_path = FALSE) {
|
danielebarchiesi@2
|
23 $libraries = &drupal_static(__FUNCTION__);
|
danielebarchiesi@2
|
24
|
danielebarchiesi@2
|
25 if (!isset($libraries)) {
|
danielebarchiesi@2
|
26 $libraries = libraries_get_libraries();
|
danielebarchiesi@2
|
27 }
|
danielebarchiesi@2
|
28
|
danielebarchiesi@2
|
29 $path = ($base_path ? base_path() : '');
|
danielebarchiesi@2
|
30 if (!isset($libraries[$name])) {
|
danielebarchiesi@3
|
31 // Most often, external libraries can be shared across multiple sites, so
|
danielebarchiesi@3
|
32 // we return sites/all/libraries as the default path.
|
danielebarchiesi@3
|
33 $path .= 'sites/all/libraries/' . $name;
|
danielebarchiesi@2
|
34 }
|
danielebarchiesi@2
|
35 else {
|
danielebarchiesi@2
|
36 $path .= $libraries[$name];
|
danielebarchiesi@2
|
37 }
|
danielebarchiesi@2
|
38
|
danielebarchiesi@2
|
39 return $path;
|
danielebarchiesi@2
|
40 }
|
danielebarchiesi@2
|
41
|
danielebarchiesi@2
|
42 /**
|
danielebarchiesi@2
|
43 * Returns an array of library directories.
|
danielebarchiesi@2
|
44 *
|
danielebarchiesi@2
|
45 * Returns an array of library directories from the all-sites directory
|
danielebarchiesi@2
|
46 * (i.e. sites/all/libraries/), the profiles directory, and site-specific
|
danielebarchiesi@2
|
47 * directory (i.e. sites/somesite/libraries/). The returned array will be keyed
|
danielebarchiesi@2
|
48 * by the library name. Site-specific libraries are prioritized over libraries
|
danielebarchiesi@2
|
49 * in the default directories. That is, if a library with the same name appears
|
danielebarchiesi@2
|
50 * in both the site-wide directory and site-specific directory, only the
|
danielebarchiesi@2
|
51 * site-specific version will be listed.
|
danielebarchiesi@2
|
52 *
|
danielebarchiesi@2
|
53 * @return
|
danielebarchiesi@2
|
54 * A list of library directories.
|
danielebarchiesi@2
|
55 *
|
danielebarchiesi@2
|
56 * @ingroup libraries
|
danielebarchiesi@2
|
57 */
|
danielebarchiesi@2
|
58 function libraries_get_libraries() {
|
danielebarchiesi@3
|
59 $directory = 'libraries';
|
danielebarchiesi@2
|
60 $searchdir = array();
|
danielebarchiesi@3
|
61 $profile = drupal_get_profile();
|
danielebarchiesi@2
|
62 $config = conf_path();
|
danielebarchiesi@2
|
63
|
danielebarchiesi@2
|
64 // Similar to 'modules' and 'themes' directories in the root directory,
|
danielebarchiesi@2
|
65 // certain distributions may want to place libraries into a 'libraries'
|
danielebarchiesi@2
|
66 // directory in Drupal's root directory.
|
danielebarchiesi@3
|
67 $searchdir[] = $directory;
|
danielebarchiesi@2
|
68
|
danielebarchiesi@3
|
69 // The 'profiles' directory contains pristine collections of modules and
|
danielebarchiesi@3
|
70 // themes as organized by a distribution. It is pristine in the same way
|
danielebarchiesi@3
|
71 // that /modules is pristine for core; users should avoid changing anything
|
danielebarchiesi@3
|
72 // there in favor of sites/all or sites/<domain> directories.
|
danielebarchiesi@3
|
73 if (file_exists("profiles/$profile/$directory")) {
|
danielebarchiesi@3
|
74 $searchdir[] = "profiles/$profile/$directory";
|
danielebarchiesi@3
|
75 }
|
danielebarchiesi@2
|
76
|
danielebarchiesi@3
|
77 // Always search sites/all/*.
|
danielebarchiesi@3
|
78 $searchdir[] = 'sites/all/' . $directory;
|
danielebarchiesi@2
|
79
|
danielebarchiesi@2
|
80 // Also search sites/<domain>/*.
|
danielebarchiesi@3
|
81 if (file_exists("$config/$directory")) {
|
danielebarchiesi@3
|
82 $searchdir[] = "$config/$directory";
|
danielebarchiesi@3
|
83 }
|
danielebarchiesi@2
|
84
|
danielebarchiesi@2
|
85 // Retrieve list of directories.
|
danielebarchiesi@3
|
86 // @todo Core: Allow to scan for directories.
|
danielebarchiesi@2
|
87 $directories = array();
|
danielebarchiesi@2
|
88 $nomask = array('CVS');
|
danielebarchiesi@2
|
89 foreach ($searchdir as $dir) {
|
danielebarchiesi@2
|
90 if (is_dir($dir) && $handle = opendir($dir)) {
|
danielebarchiesi@2
|
91 while (FALSE !== ($file = readdir($handle))) {
|
danielebarchiesi@2
|
92 if (!in_array($file, $nomask) && $file[0] != '.') {
|
danielebarchiesi@2
|
93 if (is_dir("$dir/$file")) {
|
danielebarchiesi@2
|
94 $directories[$file] = "$dir/$file";
|
danielebarchiesi@2
|
95 }
|
danielebarchiesi@2
|
96 }
|
danielebarchiesi@2
|
97 }
|
danielebarchiesi@2
|
98 closedir($handle);
|
danielebarchiesi@2
|
99 }
|
danielebarchiesi@2
|
100 }
|
danielebarchiesi@2
|
101
|
danielebarchiesi@2
|
102 return $directories;
|
danielebarchiesi@2
|
103 }
|
danielebarchiesi@2
|
104
|