summaryrefslogtreecommitdiff
path: root/includes
diff options
context:
space:
mode:
Diffstat (limited to 'includes')
-rw-r--r--includes/bootstrap.inc26
-rw-r--r--includes/install.inc2
2 files changed, 22 insertions, 6 deletions
diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc
index 51deb221d..a05a08d74 100644
--- a/includes/bootstrap.inc
+++ b/includes/bootstrap.inc
@@ -192,6 +192,18 @@ function conf_init() {
* theme, etc.). The filename, whether provided, cached, or retrieved
* from the database, is only returned if the file exists.
*
+ * This function plays a key role in allowing Drupal's resources (modules
+ * and themes) to be located in different places depending on a site's
+ * configuration. For example, a module 'foo' may legally be be located
+ * in any of these three places:
+ *
+ * modules/foo/foo.module
+ * sites/all/modules/foo/foo.module
+ * sites/example.com/modules/foo/foo.module
+ *
+ * Calling drupal_get_filename('module', 'foo') will give you one of
+ * the above, depending on where the module is located.
+ *
* @param $type
* The type of the item (i.e. theme, theme_engine, module).
* @param $name
@@ -199,15 +211,13 @@ function conf_init() {
* @param $filename
* The filename of the item if it is to be set explicitly rather
* than by consulting the database.
- * @param $check_db
- * Allows the database search to be skipped (useful for pre-bootstrap
- * checks where configuration paths must still be respected).
*
* @return
* The filename of the requested item.
*/
-function drupal_get_filename($type, $name, $filename = NULL, $check_db = TRUE) {
+function drupal_get_filename($type, $name, $filename = NULL) {
static $files = array();
+ global $active_db;
if (!isset($files[$type])) {
$files[$type] = array();
@@ -219,10 +229,16 @@ function drupal_get_filename($type, $name, $filename = NULL, $check_db = TRUE) {
elseif (isset($files[$type][$name])) {
// nothing
}
- elseif ($check_db && (($file = db_result(db_query("SELECT filename FROM {system} WHERE name = '%s' AND type = '%s'", $name, $type))) && file_exists($file))) {
+ // Verify that we have an active database connection, before querying
+ // the database. This is required because this function is called both
+ // before we have a database connection (i.e. during installation) and
+ // when a database connection fails.
+ elseif ($active_db && (($file = db_result(db_query("SELECT filename FROM {system} WHERE name = '%s' AND type = '%s'", $name, $type))) && file_exists($file))) {
$files[$type][$name] = $file;
}
else {
+ // Fallback to searching the filesystem if the database connection is
+ // not established or the requested file is not found.
$config = conf_path();
$dir = (($type == 'theme_engine') ? 'themes/engines' : "${type}s");
$file = (($type == 'theme_engine') ? "$name.engine" : "$name.$type");
diff --git a/includes/install.inc b/includes/install.inc
index 063f169ad..d19a5eceb 100644
--- a/includes/install.inc
+++ b/includes/install.inc
@@ -306,7 +306,7 @@ function drupal_install_profile($profile, $module_list) {
// installed, so we can't use the normal installation function.
$module_list = array_diff($module_list, array('system'));
- $system_path = dirname(drupal_get_filename('module', 'system', NULL, FALSE));
+ $system_path = dirname(drupal_get_filename('module', 'system', NULL));
require_once './' . $system_path . '/system.install';
module_invoke('system', 'install');
$system_versions = drupal_get_schema_versions('system');