/** * Processes a vote (+/-) request. * * @param VoteForm $form * @return array * @throws \Exception * @throws \yii\base\InvalidConfigException */ protected function processVote(VoteForm $form) { /* @var $vote Vote */ $module = $this->getModule(); $response = ['success' => false]; $searchParams = ['entity' => $module->encodeEntity($form->entity), 'target_id' => $form->targetId]; if (Yii::$app->user->isGuest) { $vote = Vote::find()->where($searchParams)->andWhere(['user_ip' => Yii::$app->request->userIP])->andWhere('UNIX_TIMESTAMP() - created_at < :limit', [':limit' => $module->guestTimeLimit])->one(); } else { $vote = Vote::findOne(array_merge($searchParams, ['user_id' => Yii::$app->user->id])); } if ($vote == null) { $response = $this->createVote($module->encodeEntity($form->entity), $form->targetId, $form->getValue()); } else { if ($vote->value !== $form->getValue()) { $vote->value = $form->getValue(); if ($vote->save()) { $response = ['success' => true, 'changed' => true]; } } } return $response; }