/**
  * Vote for selected float answer
  * @return mixed Json
  */
 public function actionVoteFloat()
 {
     $answerValues = Yii::$app->request->post('answer');
     $userID = isset(Yii::$app->user->id) ? Yii::$app->user->id : false;
     // validation
     $answers = [];
     if (is_array($answerValues) && $userID) {
         foreach ($answerValues as $aid => $value) {
             $answer = $this->findModel($aid);
             if (isset($answer)) {
                 $answers[] = $answer;
             }
         }
     }
     if (count($answers) == 0) {
         Yii::$app->getSession()->setFlash('error-question', 'Ошибка при сохранении ответа в опросе: Нет выбранных вариантов.');
         return Yii::$app->getResponse()->redirect(Url::to('/'));
     }
     $first = $answers[0];
     $question = $this->findModel($first->parent_id);
     if (isset($question)) {
         $question->voutes++;
         $vote = new QuestionVote();
         $vote->question_id = $question->id;
         $vote->user_id = $userID;
         if (!$vote->validate() || !$question->validate()) {
             Yii::$app->getSession()->setFlash('error-question', 'Ошибка при сохранении ответа в опросе.');
             return Yii::$app->getResponse()->redirect(Url::to('/'));
         }
         $vote->save(false);
         $question->save(false);
         foreach ($answers as $answer) {
             if (!isset($answerValues[$answer->id])) {
                 continue;
             }
             $value = $answerValues[$answer->id];
             if ($answer->mark == 0) {
                 $answer->mark = $value;
             } else {
                 $answer->mark = round(($value + $answer->mark * ($question->voutes - 1)) / $question->voutes, 4);
             }
             $answer->save();
         }
         Yii::$app->getSession()->setFlash('success-question', 'Ваш ответ на опрос успешно сохранен.');
     }
     return Yii::$app->getResponse()->redirect(Url::to('/'));
 }
 /**
  * Vote for selected float answer
  * @return mixed Json
  */
 public function actionVoteFloat()
 {
     $answerValues = Yii::$app->request->get('answer');
     $userID = isset(Yii::$app->user->id) ? Yii::$app->user->id : false;
     // validation
     $answers = [];
     if (is_array($answerValues) && $userID) {
         foreach ($answerValues as $aid => $value) {
             $answer = $this->findModel($aid);
             if (isset($answer)) {
                 $answers[] = $answer;
             }
         }
     }
     if (count($answers) == 0) {
         return Json::encode(['success' => false, 'msg' => 'answers']);
     }
     $first = $answers[0];
     $question = $this->findModel($first->parent_id);
     if (isset($question)) {
         $question->voutes++;
         $vote = new QuestionVote();
         $vote->question_id = $answer->parent_id;
         $vote->user_id = $userID;
         if (!$vote->validate() || !$question->validate()) {
             return Json::encode(['success' => false, 'msg' => 'vote']);
         }
         $vote->save();
         $question->save();
         foreach ($answers as $answer) {
             $answer->mark = round(($value + $answer->mark * ($question->voutes - 1)) / $question->voutes, 4);
             $answer->save();
         }
         return Json::encode(['success' => true]);
     }
     return Json::encode(['success' => false]);
 }
Example #3
0
 /**
  * Get question block
  * @param \common\models\Question|bool|false $question
  * @param int $id
  * @return array Data
  */
 public static function getQuestionBlockTitle($question = false, $id = NULL)
 {
     if (isset($id)) {
         $question = Question::find()->where(['id' => $id])->orderBy(['created_at' => SORT_DESC])->one();
     } else {
         if (!$question) {
             $question = Question::find()->where(['is_active' => 1])->orderBy(['created_at' => SORT_DESC])->one();
         }
     }
     if (!isset($question)) {
         $question = Question::find()->where(['parent_id' => null])->orderBy(['created_at' => SORT_DESC])->one();
     }
     $uid = isset(Yii::$app->user->id) ? Yii::$app->user->id : 0;
     $userVote = QuestionVote::find()->where(['question_id' => $question->id, 'user_id' => $uid])->one();
     if (isset($userVote->id) || !$question->is_active) {
         $block = true;
     } else {
         $block = false;
     }
     $answers = Question::find()->where(['parent_id' => $question->id])->orderBy(['id' => SORT_ASC])->all();
     if (!isset($id)) {
         if ($block) {
             $view = $question->is_float ? 'blocks/question_float_block_title' : 'blocks/question_block_title';
         } else {
             $view = $question->is_float ? 'forms/question_float_form' : 'forms/question_form';
         }
     } else {
         if ($block) {
             $view = $question->is_float ? 'blocks/question_float_block' : 'blocks/question_block';
         } else {
             $view = $question->is_float ? 'forms/question_float_form' : 'forms/question_form';
         }
     }
     $block = ['view' => '@frontend/views/' . $view, 'data' => compact('question', 'answers')];
     return $block;
 }