/**
  * Validate status change and applies all validators defined by the model for the current transition scenario if
  * enableSwValidation is TRUE. If validator parameter 'match' is true, the transition scenario is matched
  * against validator scenario (which are assumed to be regular expressions).
  *
  * @see validators/CValidator::validateAttribute()
  * @param CModel $model the model to validate
  * @param string $attribute the model attribute to validate
  */
 protected function validateAttribute($model, $attribute)
 {
     $value = $model->{$attribute};
     if ($model->swValidate($attribute, $value) == true and $this->enableSwValidation === true) {
         $swScenario = $this->_getSWScenarioName($model, $value);
         if (!empty($swScenario)) {
             if ($this->match === true) {
                 // validator scenario are Regular Expression that must match the transition scenarion
                 // for the validator to be executed.
                 $validators = $model->getValidatorList();
                 foreach ($validators as $validator) {
                     if ($this->_validatorMatches($validator, $swScenario)) {
                         $validator->validate($model);
                     }
                 }
             } else {
                 $swScenario = SWValidator::SW_SCENARIO_PREFIX . $swScenario;
                 // execute only validator defined for the current transition scenario ($swScenario)
                 // getValidators returns validators with no scenario, and the ones
                 // that apply to the current scenario (swScenario).
                 $saveScenario = $model->getScenario();
                 $model->setScenario($swScenario);
                 $validators = $model->getValidators();
                 foreach ($model->getValidators() as $validator) {
                     // only run validators that applies to the current (swScenario) scenario
                     if (isset($validator->on[$swScenario])) {
                         $validator->validate($model);
                     }
                 }
                 // restore original scenario so validation can continue.
                 $model->setScenario($saveScenario);
             }
         }
     }
 }
Exemple #2
0
 /**
  * Validate status change and applies all validators defined by the model for the current transition scenario if
  * enableSwValidation is TRUE. If validator parameter 'match' is true, the transition scenario is matched
  * against validator scenario (which are assumed to be regular expressions).
  *
  * @see validators/CValidator::validateAttribute()
  * @param CModel $model the model to validate
  * @param string $attribute the model attribute to validate
  */
 protected function validateAttribute($model, $attribute)
 {
     Yii::trace(__CLASS__ . '.' . __FUNCTION__, SWActiveRecordBehavior::SW_LOG_CATEGORY);
     $value = $model->{$attribute};
     if ($model->swValidate($attribute, $value) == true and $this->enableSwValidation === true) {
         $swScenario = $this->_getSWScenarioName($model, $value);
         Yii::trace('swScenario : ' . $swScenario, SWActiveRecordBehavior::SW_LOG_CATEGORY);
         if (!empty($swScenario)) {
             if ($this->match === true) {
                 // validator scenario are Regular Expression that must match the transition scenarion
                 // for the validator to be executed.
                 $validators = $model->getValidatorList();
                 foreach ($validators as $validator) {
                     //Yii::trace(CVarDumper::dumpAsString($validator));
                     if ($this->_validatorMatches($validator, $swScenario)) {
                         Yii::trace('applying validator : ' . CVarDumper::dumpAsString($validator), SWActiveRecordBehavior::SW_LOG_CATEGORY);
                         $validator->validate($model);
                     }
                 }
             } else {
                 $swScenario = SWValidator::SW_SCENARIO_PREFIX . $swScenario;
                 // execute only validator defined for the current transition scenario ($swScenario)
                 // getValidators returns validators with no scenario, and the ones
                 // that apply to the current scenario (swScenario).
                 $saveScenario = $model->getScenario();
                 $model->setScenario($swScenario);
                 $validators = $model->getValidators();
                 foreach ($model->getValidators() as $validator) {
                     // only run validators that applies to the current (swScenario) scenario
                     //Yii::trace(CVarDumper::dumpAsString($validator));
                     if (isset($validator->on[$swScenario])) {
                         Yii::trace('applying validator : ' . CVarDumper::dumpAsString($validator), SWActiveRecordBehavior::SW_LOG_CATEGORY);
                         $validator->validate($model);
                     }
                 }
                 // restore original scenario so validation can continue.
                 $model->setScenario($saveScenario);
             }
         }
     }
 }