/** * Scans and collects module .info data. * * @see _system_rebuild_module_data() * * @return object[] */ public function systemBuildModuleData() { // Find modules $modules = $this->exampleModules->drupalSystemListingModules(); if (FALSE) { // Include the installation profile in modules that are loaded. $profile = 'minimal'; $modules[$profile] = new \stdClass(); $modules[$profile]->name = $profile; $modules[$profile]->uri = 'profiles/' . $profile . '/' . $profile . '.profile'; $modules[$profile]->filename = $profile . '.profile'; // Installation profile hooks are always executed last. $modules[$profile]->weight = 1000; } else { $profile = 'NO_PROFILE'; } // Set defaults for module info. $defaults = array('dependencies' => array(), 'description' => '', 'package' => 'Other', 'version' => NULL, 'files' => array(), 'bootstrap' => 0); // Read info files for each module. foreach ($modules as $key => $module) { // The module system uses the key 'filename' instead of 'uri' so copy the // value so it will be used by the modules system. $modules[$key]->filename = $module->uri; // Look for the info file. $module->info = $this->exampleModules->drupalParseInfoFile($module->name); // Skip modules that don't provide info. if (empty($module->info)) { unset($modules[$key]); continue; } // Merge in defaults and save. $modules[$key]->info = $module->info + $defaults; // Installation profiles are hidden by default, unless explicitly specified // otherwise in the .info file. if ($key == $profile && !isset($modules[$key]->info['hidden'])) { $modules[$key]->info['hidden'] = TRUE; } // Invoke hook_system_info_alter() to give installed modules a chance to // modify the data in the .info files if necessary. $type = 'module'; $this->hookSystem->drupalAlter('system_info', $modules[$key]->info, $modules[$key], $type); } if (isset($modules[$profile])) { // The installation profile is required, if it's a valid module. $modules[$profile]->info['required'] = TRUE; // Add a default distribution name if the profile did not provide one. This // matches the default value used in install_profile_info(). if (!isset($modules[$profile]->info['distribution_name'])) { $modules[$profile]->info['distribution_name'] = 'Drupal'; } } unset($modules['NO_PROFILE']); return $modules; }
/** * Replicates drupal_get_filename(*, *, NULL) * * @param string $type * @param string $name * * @return string|null */ function drupalGetFilename($type, $name) { // Profiles are a special case: they have a fixed location and naming. if ($type == 'profile') { $profile_filename = "profiles/{$name}/{$name}.profile"; $this->files[$type][$name] = file_exists($profile_filename) ? $profile_filename : FALSE; } // Look in runtime cache. if (isset($this->files[$type][$name])) { return $this->files[$type][$name]; } // Load from the database. $file = $this->systemTable->moduleGetFilename($name); if (isset($file) && file_exists($file)) { $this->files[$type][$name] = $file; return $file; } // Fallback: Search the filesystem. $this->files[$type] = $this->exampleModules->discoverModuleFilenames($type); if (isset($this->files[$type][$name])) { return $this->files[$type][$name]; } return NULL; }