public function actionVote() { $answerId = Yii::$app->request->post('answer'); if ($answerId) { /** @var PollAnswerRecord $answer */ $answer = PollAnswerRecord::findOne($answerId); if ($answer) { if ($answer->voices) { PollAnswerRecord::updateAllCounters(['voices' => 1], ['id' => $answerId]); } else { PollAnswerRecord::updateAll(['voices' => 1], ['id' => $answerId]); } $cookies = Yii::$app->response->cookies; $cookies->add(new Cookie(['name' => 'poll_' . $answer->poll_id, 'value' => '1'])); } } $this->goBack(Url::previous('page')); }
/** * @return \yii\db\ActiveQuery */ public function getTotalVoices() { return $this->hasMany(PollAnswerRecord::className(), ['poll_id' => 'id'])->sum('voices'); }
/** * Save PollRecord model * @param bool $insert */ public function savePoll($insert = true) { $poll = $insert === true ? new PollRecord() : PollRecord::findOne($this->item_id); $poll->attributes = $this->toArray(); if ($this->end_date) { $poll->end_date = Yii::$app->formatter->asDate($this->end_date, 'y-MM-dd'); } $poll->active = is_array($this->boxes) && in_array(self::PROPERTY_ACTIVE, $this->boxes) ? 1 : 0; $poll->main = is_array($this->boxes) && in_array(self::PROPERTY_MAIN, $this->boxes) ? 1 : 0; if ($this->item_id && $this->isAnswersEditable) { PollAnswerRecord::deleteAll(['poll_id' => $this->item_id]); } $poll->save(false); if (is_array($this->answers) && $this->isAnswersEditable) { foreach ($this->answers as $answer) { $pollAnswer = new PollAnswerRecord(); $pollAnswer->poll_id = $poll->id; $pollAnswer->answer = $answer; $pollAnswer->save(); } } }