You are here

class property_validation_unique_validator in Field Validation 7.2

Hierarchy

Expanded class hierarchy of property_validation_unique_validator

1 string reference to 'property_validation_unique_validator'
property_validation_unique_validator.inc in property_validation/plugins/validator/property_validation_unique_validator.inc

File

property_validation/plugins/validator/property_validation_unique_validator.inc, line 16

View source
class property_validation_unique_validator extends property_validation_validator {

  /**
   * Validate field.
   */
  public function validate() {
    $flag = TRUE;
    $scope = $this->rule->settings['data'];
    $count = 0;
    if ($flag) {
      $query = new EntityFieldQuery();
      if ($scope == 'entity') {
        $query
          ->entityCondition('entity_type', $this->rule->entity_type);
      }
      elseif ($scope == 'bundle') {
        $query
          ->entityCondition('entity_type', $this->rule->entity_type);
        $query
          ->entityCondition('bundle', $this->rule->bundle);
      }
      list($id, $vid, $bundle) = entity_extract_ids($this->rule->entity_type, $this->entity);
      if ($this->rule->entity_type == 'user' && arg(0) == 'user' && arg(2) == 'edit' && empty($id)) {
        $id = arg(1);
      }
      if (!empty($id)) {
        $query
          ->entityCondition('entity_id', $id, '!=');
      }

      // Always bypass all access checkings.
      $query
        ->addMetaData('account', user_load(1));
      $count = $query
        ->propertyCondition($this->rule->property_name, $this->value)
        ->count()
        ->execute();
      if ($count) {
        $flag = FALSE;
      }
    }
    if (!$flag) {
      $token = array(
        '[count]' => $count,
      );
      $this
        ->set_error($token);
    }
  }

  /**
   * Provide settings option.
   */
  function settings_form(&$form, &$form_state) {
    $default_settings = $this
      ->get_default_settings($form, $form_state);

    // Print debug($default_settings);
    $form['settings']['data'] = array(
      '#title' => t('Scope of unique'),
      '#description' => t("Specify the scope of unique values, support: entity, bundle."),
      '#type' => 'select',
      '#options' => array(
        'entity' => t('Entity'),
        'bundle' => t('Bundle'),
      ),
      '#default_value' => isset($default_settings['data']) ? $default_settings['data'] : '',
    );
    parent::settings_form($form, $form_state);
  }

  /**
   * Provide token help info for error message.
   */
  public function token_help() {
    $token_help = parent::token_help();
    $token_help += array(
      '[count]' => t('Count of duplicate'),
    );
    return $token_help;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
property_validation_unique_validator::settings_form function Provide settings option. Overrides property_validation_validator::settings_form
property_validation_unique_validator::token_help public function Provide token help info for error message. Overrides property_validation_validator::token_help
property_validation_unique_validator::validate public function Validate field. Overrides property_validation_validator::validate
property_validation_validator::$entity protected property
property_validation_validator::$entity_type protected property
property_validation_validator::$errors protected property
property_validation_validator::$field protected property
property_validation_validator::$rule protected property
property_validation_validator::$value protected property
property_validation_validator::get_default_settings public function Return default settingsfor the validator.
property_validation_validator::get_error_element public function Return error element for the validation rule.
property_validation_validator::get_error_message public function Return error message string for the validation rule.
property_validation_validator::set_error public function Set error message.
property_validation_validator::__construct function Save arguments locally.