예제 #1
0
 /**
  *### .update()
  *
  * main function called to update column in database
  *
  */
 public function update()
 {
     //get params from request
     $this->primaryKey = yii::app()->request->getParam('pk');
     $this->attribute = yii::app()->request->getParam('name');
     $this->value = yii::app()->request->getParam('value');
     //checking params
     if (empty($this->attribute)) {
         throw new CException(Yii::t('TbEditableSaver.editable', 'Property "attribute" should be defined.'));
     }
     if (empty($this->primaryKey)) {
         throw new CException(Yii::t('TbEditableSaver.editable', 'Property "primaryKey" should be defined.'));
     }
     //loading model
     $this->model = CActiveRecord::model($this->modelClass)->findByPk($this->primaryKey);
     if (!$this->model) {
         throw new CException(Yii::t('TbEditableSaver.editable', 'Model {class} not found by primary key "{pk}"', array('{class}' => get_class($this->model), '{pk}' => is_array($this->primaryKey) ? CJSON::encode($this->primaryKey) : $this->primaryKey)));
     }
     //set scenario
     $this->model->setScenario($this->scenario);
     //commented to be able to work with virtual attributes
     //see https://github.com/vitalets/yii-bootstrap-editable/issues/15
     /*
     //is attribute exists
     if (!$this->model->hasAttribute($this->attribute)) {
     	throw new CException(Yii::t('EditableSaver.editable', 'Model {class} does not have attribute "{attr}"', array(
     	  '{class}'=>get_class($this->model), '{attr}'=>$this->attribute)));
     }
     */
     //is attribute safe
     if (!$this->model->isAttributeSafe($this->attribute)) {
         throw new CException(Yii::t('editable', 'Model {class} rules do not allow to update attribute "{attr}"', array('{class}' => get_class($this->model), '{attr}' => $this->attribute)));
     }
     //setting new value
     $this->setAttribute($this->attribute, $this->value);
     //validate attribute
     $this->model->validate(array($this->attribute));
     $this->checkErrors();
     //trigger beforeUpdate event
     $this->beforeUpdate();
     $this->checkErrors();
     //saving (no validation, only changed attributes)
     if ($this->model->save(false, $this->changedAttributes)) {
         //trigger afterUpdate event
         $this->afterUpdate();
     } else {
         $this->error(Yii::t('TbEditableSaver.editable', 'Error while saving record!'));
     }
 }
예제 #2
0
 /**
  * main function called to update column in database
  *
  */
 public function update()
 {
     //set params from request
     $this->primaryKey = yii::app()->request->getParam('pk');
     $this->attribute = yii::app()->request->getParam('name');
     $value = Yii::app()->request->getParam('value');
     //checking params
     if (empty($this->attribute)) {
         throw new CException(Yii::t('zii', 'Property "attribute" should be defined.'));
     }
     if (empty($this->primaryKey)) {
         throw new CException(Yii::t('zii', 'Property "primaryKey" should be defined.'));
     }
     //loading model
     $this->model = CActiveRecord::model($this->modelClass)->findByPk($this->primaryKey);
     if (!$this->model) {
         throw new CException(Yii::t('editable', 'Model {class} not found by primary key "{pk}"', array('{class}' => get_class($this->model), '{pk}' => $this->primaryKey)));
     }
     $this->model->setScenario($this->scenario);
     //is attribute exists
     if (!$this->model->hasAttribute($this->attribute)) {
         throw new CException(Yii::t('editable', 'Model {class} does not have attribute "{attr}"', array('{class}' => get_class($this->model), '{attr}' => $this->attribute)));
     }
     //is attribute safe
     if (!$this->model->isAttributeSafe($this->attribute)) {
         throw new CException(Yii::t('zii', 'Model {class} rules do not allow to update attribute "{attr}"', array('{class}' => get_class($this->model), '{attr}' => $this->attribute)));
     }
     //setting new value
     $this->setAttribute($this->attribute, $value);
     //validate
     $this->model->validate(array($this->attribute));
     if ($this->model->hasErrors()) {
         $this->error($this->model->getError($this->attribute));
     }
     //save
     if ($this->beforeUpdate()) {
         //saving (only chnaged attributes)
         if ($this->model->save(false, $this->changedAttributes)) {
             $this->afterUpdate();
         } else {
             $this->error(Yii::t('zii', 'Error while saving record!'));
         }
     } else {
         $firstError = reset($this->model->getErrors());
         $this->error($firstError[0]);
     }
 }
예제 #3
0
 /**
  * Sets model fields using the provided attributes and values.
  *
  * @param CActiveRecord $model the model to set fields on
  * @param array $attributes an associative array of attributes
  * @param array $params the params array passed to X2Flow::trigger()
  * @return boolean whether or not the attributes were valid and set successfully
  *
  */
 public function setModelAttributes(&$model, &$attributeList, &$params)
 {
     $data = array();
     foreach ($attributeList as &$attr) {
         if (!isset($attr['name'], $attr['value'])) {
             continue;
         }
         if (null !== ($field = $model->getField($attr['name']))) {
             // first do variable/expression evaluation, // then process with X2Fields::parseValue()
             $type = $field->type;
             $value = $attr['value'];
             if (is_string($value)) {
                 if (strpos($value, '=') === 0) {
                     $evald = X2FlowFormatter::parseFormula($value, $params);
                     if (!$evald[0]) {
                         return false;
                     }
                     $value = $evald[1];
                 } elseif ($params !== null) {
                     if (is_string($value) && isset($params['model'])) {
                         $value = X2FlowFormatter::replaceVariables($value, $params, $type);
                     }
                 }
             }
             $data[$attr['name']] = $value;
         }
     }
     if (!isset($model->scenario)) {
         $model->setScenario('X2Flow');
     }
     $model->setX2Fields($data);
     if ($model instanceof Actions && isset($data['complete'])) {
         switch ($data['complete']) {
             case 'Yes':
                 $model->complete();
                 break;
             case 'No':
                 $model->uncomplete();
                 break;
         }
     }
     return true;
 }