Пример #1
0
 /**
  * Creates a new Question model.
  * If creation is successful, the browser will be redirected to the 'view' page.
  * @return mixed
  */
 public function actionCreate($list_id)
 {
     // Проверяем можем ли создать вопрос.
     if (!$this->canCreateQuestion($list_id)) {
         return $this->render('question_list_is_lock', ['modelQuestionList' => QuestionList::findOne($list_id), 'action' => 'create']);
     }
     $model = new Question();
     $model->list_id = $list_id;
     $post = Yii::$app->request->post();
     //если данные загрузились в объект вопроса и он валиден
     if ($model->load($post) && ($valid = $model->validate())) {
         $transaction = \Yii::$app->db->beginTransaction();
         // Если сохранили успешно объек вопроса
         if ($model->save()) {
             //Если для этого типа нужно сохранять опции
             switch ($model->type) {
                 case 'select_one':
                 case 'select_multiple':
                 case 'radio':
                     if (is_array($post['AnswerVariant'])) {
                         foreach ($post['AnswerVariant'] as $av_data) {
                             $answerVariantModel = new AnswerVariant($av_data);
                             $answerVariantModel->question_id = $model->id;
                             $valid = $answerVariantModel->save();
                         }
                     }
                     break;
                 case 'checkbox':
                     if (!(int) $post['checkboxUpScores']) {
                         break;
                     }
                     $answerVariantModel = new AnswerVariant();
                     $answerVariantModel->answer = '1';
                     $answerVariantModel->scores = (int) $post['checkboxUpScores'];
                     $answerVariantModel->question_id = $model->id;
                     $valid = $answerVariantModel->save();
                     break;
             }
         } else {
             $transaction->rollBack();
         }
         if ($valid) {
             $transaction->commit();
             return $this->redirect(['view', 'id' => $model->id, 'list_id' => $list_id]);
         } else {
             $transaction->rollBack();
             return $this->render('create', ['model' => $model, 'list_id' => $list_id]);
         }
     } else {
         return $this->render('create', ['model' => $model, 'list_id' => $list_id]);
     }
 }