You are here

class field_validation_field_collection_unique_validator in Field Validation 7.2

Hierarchy

Expanded class hierarchy of field_validation_field_collection_unique_validator

1 string reference to 'field_validation_field_collection_unique_validator'
field_validation_field_collection_unique_validator.inc in field_validation_extras/plugins/validator/field_validation_field_collection_unique_validator.inc

File

field_validation_extras/plugins/validator/field_validation_field_collection_unique_validator.inc, line 16

View source
class field_validation_field_collection_unique_validator extends field_validation_validator {

  /**
   * Validate field.
   */
  public function validate() {
    $flag = TRUE;
    $count = 0;
    foreach ($this->items as $delta1 => $item1) {
      if ($this->delta != $delta1) {
        if ($this->value == $item1[$this->rule->col]) {
          $flag = FALSE;
          break;
        }
      }
    }
    if ($flag) {
      $count = 0;
      $query = new EntityFieldQuery();
      $query
        ->entityCondition('entity_type', 'field_collection_item');
      $query
        ->entityCondition('bundle', $this->entity->field_name);

      // Always bypass all access checkings.
      $query
        ->addMetaData('account', user_load(1));
      if (isset($this->entity->hostEntity)) {
        $hostEntity = $this->entity->hostEntity;
      }
      list($id, $vid, $bundle) = entity_extract_ids($this->rule->entity_type, $this->entity);

      // Add field collection item.
      if (arg(0) == 'field-collection' && arg(1) == strtr($bundle, array(
        '_' => '-',
      )) && arg(2) == 'add') {
        $hostEntityType = arg(3);
        $hostEntityId = arg(4);
        $result = entity_load($hostEntityType, array(
          $hostEntityId,
        ));
        $hostEntity = reset($result);
      }

      // Edit field collection item.
      if (arg(0) == 'field-collection' && arg(1) == strtr($bundle, array(
        '_' => '-',
      )) && arg(3) == 'edit' && empty($id)) {
        $id = arg(2);
        $field_collection_item = field_collection_item_load($id);
        $hostEntity = $field_collection_item
          ->hostEntity();
      }
      if (!empty($hostEntity)) {
        $items = isset($hostEntity->{$this->entity->field_name}[LANGUAGE_NONE]) ? $hostEntity->{$this->entity->field_name}[LANGUAGE_NONE] : array();

        // $ids = field_collection_field_item_to_ids($items);
        $ids = array();
        foreach ($items as $item) {
          if (!empty($item['value']) && $item['value'] != $id) {
            $ids[] = $item['value'];
          }
        }
        $query
          ->entityCondition('entity_id', $ids, 'IN');
        $query
          ->fieldCondition($this->rule->field_name, $this->rule->col, $this->value);
        $count = $query
          ->count()
          ->execute();
      }
      if ($count) {
        $flag = FALSE;
      }
    }
    if (!$flag) {
      $this
        ->set_error();
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
field_validation_field_collection_unique_validator::validate public function Validate field. Overrides field_validation_validator::validate
field_validation_validator::$delta protected property
field_validation_validator::$entity protected property
field_validation_validator::$entity_type protected property
field_validation_validator::$errors protected property
field_validation_validator::$field protected property
field_validation_validator::$instance protected property
field_validation_validator::$item protected property
field_validation_validator::$items protected property
field_validation_validator::$langcode protected property
field_validation_validator::$rule protected property
field_validation_validator::$value protected property
field_validation_validator::bypass_validation public function Bypass validation.
field_validation_validator::get_default_settings public function Return default settingsfor the validator.
field_validation_validator::get_error_element public function Return error element for the validation rule. 1
field_validation_validator::get_error_message public function Return error message string for the validation rule.
field_validation_validator::get_token_type public function Get token type.
field_validation_validator::pass_condition public function Pass condition.
field_validation_validator::settings_form function Provide settings option. 24
field_validation_validator::set_error public function Set error message.
field_validation_validator::token_help public function Provide token help info for error message. 7
field_validation_validator::__construct function Save arguments locally.