Example #1
0
 /**
  * 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;
 }