/** * 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]); }