예제 #1
0
 /**
  * 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;
 }