protected static function PartyPrimaryFields::buildFields in Party 7
Build the primary field information.
Parameters
bool $reset: Whether the cache should be reset.
1 call to PartyPrimaryFields::buildFields()
- PartyPrimaryFields::getFields in includes/party.primary_fields.inc 
- Get hold of primary field information.
File
- includes/party.primary_fields.inc, line 608 
- Primary field related functions and callbacks.
Class
- PartyPrimaryFields
- Helper class for primary fields.
Code
protected static function buildFields($reset = FALSE) {
  // If we are resetting, clear our static cache.
  if ($reset) {
    self::$fields = NULL;
  }
  else {
    if ($cache = cache_get('party:primary_fields:fields')) {
      self::$fields = $cache->data;
    }
  }
  // If we have no information, build it.
  if (!isset(self::$fields)) {
    // Label and email are provided by custom UIs and stored in a variable which
    // other modules could potentially add to.
    self::$fields = variable_get('party_primary_fields', array());
    // Retrieve from primary field widgets.
    foreach (field_info_instances('party', 'party') as $instance) {
      if ($instance['widget']['type'] == 'party_primary_field') {
        self::$fields[$instance['field_name']] = $instance['widget']['settings']['sources'];
      }
    }
    // Allow other modules to alter it.
    drupal_alter('party_primary_fields_fields', self::$fields);
    // Remove any invalid targets.
    $party_property_info = self::getPropertyInfo('party', 'party');
    foreach (array_keys(self::$fields) as $target) {
      if (!isset($party_property_info[$target])) {
        // Remove and log a watchdog warning.
        watchdog('party', 'The target for the primary field %target does not exist.', array(
          '%target' => $target,
        ), WATCHDOG_WARNING);
        unset(self::$fields[$target]);
      }
    }
    // Make sure the sources are valid and sorted by weight.
    $valid_sources = self::getSources();
    foreach (self::$fields as $target => &$sources) {
      // If we don't have any sources, skip it all.
      if (!is_array($sources)) {
        unset(self::$fields[$target]);
        continue;
      }
      // Remove any invalid sources.
      foreach ($sources as $key => &$source) {
        // Make sure our sources have all the keys.
        $source += array(
          'data_set' => NULL,
          'property' => NULL,
          'value' => NULL,
          'callback' => NULL,
          'weight' => 0,
        );
        // Check that the data set exists.
        if (!isset($valid_sources[$source['data_set']])) {
          watchdog('party', 'The source data set %data_set for the primary field %target does not exist.', array(
            '%data_set' => $source['data_set'],
            '%target' => $target,
          ), WATCHDOG_WARNING);
          unset($sources[$key]);
          continue;
        }
        // Check that the property exists.
        $source_key = self::getSourceKey($source, TRUE);
        if (!isset($valid_sources[$source['data_set']]['sources'][$source_key])) {
          watchdog('party', 'The source property %key for the primary field %target does not exist.', array(
            '%key' => $key,
            '%target' => $target,
          ), WATCHDOG_WARNING);
          unset($sources[$key]);
          continue;
        }
        $source_key = self::getSourceKey($source);
        if (!isset($valid_sources[$source['data_set']]['sources'][$source_key])) {
          watchdog('party', 'The source property %key for the primary field %target does not exist. Falling back to %property.', array(
            '%key' => $key,
            '%target' => $target,
            '%property' => $source['property'],
          ), WATCHDOG_WARNING);
          $sources[$key]['value'] = NULL;
          continue;
        }
      }
      // Sort the sources.
      uasort($sources, 'drupal_sort_weight');
    }
  }
  // Store our information to the cache.
  cache_set('party:primary_fields:fields', self::$fields);
}