/** * Fetches all of the available services from the enabled modules that define * them. */ public static function fetchAvailable() { if (!isset(self::$availableList)) { self::$availableList = array(); self::$enabledList = array(); self::$disabledList = array(); // Fetch all of the service definitions from the modules $modules = module_implements('mostpopular_service'); foreach ($modules as $module) { $s = module_invoke($module, 'mostpopular_service', 'list'); foreach ($s as $delta => $service) { $service['module'] = $module; $service['delta'] = $delta; // Augment the service with stored data from the database $sql = "SELECT * FROM {" . self::$table . "} "; $sql .= "WHERE module = '%s' AND delta = '%s'"; $result = db_query($sql, $module, $delta); if ($row = db_fetch_array($result)) { foreach ($row as $key => $val) { if (isset($val) && drupal_strlen(trim($val)) > 0) { $service[$key] = $val; } } } $service = new MostPopularService($service); // If we've never seen the service before, add it first if ($service->new) { $service->save(); } // Store the service by module and delta. self::$availableList[$module][$delta] = $service; // Store the service by availability if ($service->enabled) { self::$enabledList[$service->sid] = $service; } else { self::$disabledList[$service->sid] = $service; } } } // Sort the list of enabled services by weight uasort(self::$enabledList, '_mostpopular_service_sort'); } return self::$availableList; }