You are here

class CerPresetFinder in Corresponding Entity References 7.3

This class is a unified way for CER to find the presets that apply to a given entity. The result set is segmented into two parts: presets where the entity is on the left side, and bidirectional presets with the entity on the right side (i.e., the ones which need to be inverted before use). The execute() method will return a merged and sorted array of presets, but the segmented result set is exposed to the world as well for other uses (i.e., CER Entity Settings' selection handler).

Hierarchy

Expanded class hierarchy of CerPresetFinder

File

includes/CerPresetFinder.inc, line 12

View source
class CerPresetFinder extends EntityFieldQuery {
  public $result = array();
  protected $entity;
  public function __construct(EntityDrupalWrapper $entity = NULL) {
    $this->entity = $entity;
    $this
      ->entityCondition('entity_type', 'cer')
      ->addTag('cer_presets')
      ->addMetaData('entity', $entity);
  }
  public function execute() {
    $lineage = $this->entity->cer->lineage
      ->value();
    $this->result['cer'] = $this
      ->fieldCondition('cer_enabled', 'value', TRUE)
      ->fieldCondition('cer_left', 'path', $lineage, 'STARTS_WITH')
      ->_load(parent::execute());
    $this->fieldConditions = array();
    $this->result['cer__invert'] = $this
      ->fieldCondition('cer_enabled', 'value', TRUE)
      ->fieldCondition('cer_bidirectional', 'value', TRUE)
      ->fieldCondition('cer_right', 'path', $lineage, 'STARTS_WITH')
      ->_load(parent::execute());
    $result = $this->result['cer'];
    foreach ($this->result['cer__invert'] as $preset) {
      $result[] = $preset
        ->invert();
    }
    usort($result, array(
      $this,
      '_sort',
    ));
    return $result;
  }

  /**
   * @return EntityFieldQuery
   */
  public function find($left = NULL, $right = NULL, $bidirectional = NULL, $operator = 'STARTS_WITH') {
    $query = new EntityFieldQuery();
    if ($left) {
      $query
        ->fieldCondition('cer_left', 'path', $left, $operator);
    }
    if ($right) {
      $query
        ->fieldCondition('cer_right', 'path', $right, $operator);
    }
    if (isset($bidirectional)) {
      $query
        ->fieldCondition('cer_bidirectional', 'value', (bool) $bidirectional);
    }
    return $query
      ->entityCondition('entity_type', 'cer')
      ->fieldCondition('cer_enabled', 'value', TRUE);
  }
  private function _load(array $result) {
    return isset($result['cer']) ? entity_load('cer', array_keys($result['cer'])) : array();
  }
  private function _sort(CerPreset $a, CerPreset $b) {
    $a_weight = $a->wrapper->cer_weight
      ->value();
    $b_weight = $b->wrapper->cer_weight
      ->value();
    if ($a_weight > $b_weight) {
      return 1;
    }
    elseif ($b_weight > $a_weight) {
      return -1;
    }
    else {
      return 0;
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CerPresetFinder::$entity protected property
CerPresetFinder::$result public property
CerPresetFinder::execute public function Executes the query. Overrides EntityFieldQuery::execute
CerPresetFinder::find public function
CerPresetFinder::_load private function
CerPresetFinder::_sort private function
CerPresetFinder::__construct public function
EntityFieldQuery::$age public property Flag indicating whether this is querying current or all revisions.
EntityFieldQuery::$altered public property TRUE if the query has already been altered, FALSE if it hasn't.
EntityFieldQuery::$count public property TRUE if this is a count query, FALSE if it isn't.
EntityFieldQuery::$deleted public property Query behavior for deleted data.
EntityFieldQuery::$entityConditions public property Associative array of entity-generic metadata conditions.
EntityFieldQuery::$executeCallback public property The method executing the query, if it is overriding the default.
EntityFieldQuery::$fieldConditions public property List of field conditions.
EntityFieldQuery::$fieldMetaConditions public property List of field meta conditions (language and delta).
EntityFieldQuery::$fields public property A list of field arrays used.
EntityFieldQuery::$metaData public property A list of metadata added to this query.
EntityFieldQuery::$order public property List of order clauses.
EntityFieldQuery::$orderedResults public property The ordered results.
EntityFieldQuery::$pager public property The query pager data.
EntityFieldQuery::$propertyConditions public property List of property conditions.
EntityFieldQuery::$range public property The query range.
EntityFieldQuery::$tags public property A list of the tags added to this query.
EntityFieldQuery::addCondition public function Adds a condition to an already built SelectQuery (internal function).
EntityFieldQuery::addFieldCondition protected function Adds the given condition to the proper condition array.
EntityFieldQuery::addMetaData public function Adds additional metadata to the query.
EntityFieldQuery::addTag public function Adds a tag to the query.
EntityFieldQuery::age public function Queries the current or every revision.
EntityFieldQuery::count public function Sets the query to be a count query only.
EntityFieldQuery::deleted public function Filters on the data being deleted.
EntityFieldQuery::entityCondition public function Adds a condition on entity-generic metadata.
EntityFieldQuery::entityOrderBy public function Orders the result set by entity-generic metadata.
EntityFieldQuery::fieldCondition public function Adds a condition on field values.
EntityFieldQuery::fieldDeltaCondition public function Adds a condition on the field delta column.
EntityFieldQuery::fieldLanguageCondition public function Adds a condition on the field language column.
EntityFieldQuery::fieldOrderBy public function Orders the result set by a given field column.
EntityFieldQuery::finishQuery function Finishes the query.
EntityFieldQuery::initializePager function Gets the total number of results and initializes a pager for the query.
EntityFieldQuery::pager public function Enables a pager for the query.
EntityFieldQuery::propertyCondition public function Adds a condition on an entity-specific property.
EntityFieldQuery::propertyOrderBy public function Orders the result set by an entity-specific property.
EntityFieldQuery::propertyQuery protected function Queries entity tables in SQL for property conditions and sorts.
EntityFieldQuery::queryCallback public function Determines the query callback to use for this entity query.
EntityFieldQuery::range public function Restricts a query to a given range in the result set.
EntityFieldQuery::RETURN_ALL constant Indicates that both deleted and non-deleted fields should be returned.
EntityFieldQuery::tableSort public function Enables sortable tables for this query.