示例#1
0
 public function actionJQGridEdit()
 {
     $model = (string) filter_input(INPUT_POST, 'model');
     $addnewval = json_decode((string) filter_input(INPUT_POST, 'addnewval'));
     if (!@class_exists($model) || !$model::model() instanceof CModel) {
         throw new CHttpException(500, 'Не существует модель "' . $model . '"');
     }
     if (!method_exists($model, 'GetPermissions')) {
         throw new CHttpException(500, 'Не существует метод "GetPermissions" модели "' . $model . '"');
     }
     $oper = (string) filter_input(INPUT_POST, 'oper');
     if ($oper === 'add') {
         if ($model::model()->GetPermissions('new')) {
             $model = new $model();
         } else {
             throw new CHttpException(500, 'Для операции "' . $oper . '" нет разрешения в модели  "' . $model . '"');
         }
     }
     $id = (string) filter_input(INPUT_POST, 'id');
     if ($oper === 'edit') {
         if ($model::model()->GetPermissions('edit')) {
             $model = $model::model()->findByPk($id);
         } else {
             throw new CHttpException(500, 'Для операции "' . $oper . '" нет разрешения в модели  "' . $model . '"');
         }
     }
     if ($oper === 'del') {
         if ($model::model()->GetPermissions('del')) {
             $model::model()->deleteByPk($id);
             exit;
         } else {
             throw new CHttpException(500, 'Для операции "' . $oper . '" нет разрешения в модели  "' . $model . '"');
         }
     }
     $model->setScenario((string) filter_input(INPUT_POST, 'scenario'));
     foreach (array_keys($model->attributes) as $key) {
         //  if (array_key_exists($key, $result[get_class($model)])) {
         $postvalue = (string) filter_input(INPUT_POST, $key);
         // Если формат атрибута datetime
         if (($model instanceof CFormModel || $model->getTableSchema()->getColumn($key)->dbType === 'datetime') && $postvalue !== '' && (DateTime::createFromFormat('d.m.Y H:m:s', $postvalue) || DateTime::createFromFormat('d.m.Y', $postvalue))) {
             $model[$key] = Proc::DateTimeFormat($model, $postvalue);
         } else {
             var_dump($addnewval);
             if ($postvalue === '' && count((array) $addnewval) > 0 && property_exists($addnewval, $key)) {
                 $relat = $model->relations();
                 $addnewmodel = '';
                 array_walk($relat, function ($key, $val) use($addnewmodel) {
                 });
                 $relat = array_filter($model->relations(), function ($val) use($key) {
                     if ($val[2] === $key) {
                         return true;
                     }
                 });
                 if (count($relat) > 0) {
                     $model[$key] = Proc::AddNewValueToModel($addnewval->{$key}, $_POST[$addnewval->{$key}], $relat[key($relat)][1]);
                 }
             } else {
                 if ($postvalue !== '') {
                     $model[$key] = $postvalue;
                 }
             }
         }
         //  }
     }
     if ($model->validate()) {
         $model->save();
     } else {
         // Если валидация не пройдена, возвращаем массив с ошибками
         throw new CHttpException(500, json_encode($model->getErrors()));
     }
 }