Exemplo n.º 1
0
 /**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = Vote::find();
     $voteTable = Vote::tableName();
     // set up query with relation to `user.username`
     $user = Yii::$app->getModule("user")->model("User");
     $userTable = $user::tableName();
     $query->joinWith(['user' => function ($query) use($userTable) {
         $query->from(['user' => $userTable]);
     }]);
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     // enable sorting for the related columns
     $addSortAttributes = ["user.username"];
     foreach ($addSortAttributes as $addSortAttribute) {
         $dataProvider->sort->attributes[$addSortAttribute] = ['asc' => [$addSortAttribute => SORT_ASC], 'desc' => [$addSortAttribute => SORT_DESC]];
     }
     if (!($this->load($params) && $this->validate())) {
         return $dataProvider;
     }
     $query->andFilterWhere(["{$voteTable}.id" => $this->id, 'vote' => $this->vote, 'voteable_id' => $this->voteable_id, 'user_id' => $this->user_id, 'ip_address' => $this->ip_address]);
     $createdTime = strtotime($this->created_at);
     $startDay = date("Y-m-d 00:00:00", $createdTime);
     $endDay = date("Y-m-d 00:00:00", $createdTime + 60 * 60 * 24);
     if ($this->created_at) {
         $query->andFilterWhere(['between', 'created_at', $startDay, $endDay]);
     }
     $query->andFilterWhere(['like', 'voteable_type', $this->voteable_type])->andFilterWhere(['like', 'user.username', $this->getAttribute('user.username')]);
     return $dataProvider;
 }
Exemplo n.º 2
0
 /**
  * Add a new vote
  * @param integer $id
  * @param string $type
  * @param integer $vote
  * @return mixed
  */
 public function actionVote($id, $type, $vote = 1)
 {
     if (!Yii::$app->user->isGuest) {
         $voteModel = Vote::find()->where(['voteable_type' => $type, 'voteable_id' => $id, 'user_id' => Yii::$app->user->id])->one();
         if (!isset($voteModel->id)) {
             $voteModel = new Vote();
             $voteModel->voteable_type = $type;
             $voteModel->voteable_id = $id;
             $voteModel->user_id = Yii::$app->user->id;
         } elseif ($voteModel->vote == $vote) {
             $out = ['success' => false, 'error' => 'User has already voted'];
             echo Json::encode($out);
             return;
         }
         $voteModel->vote = $vote;
         if ($voteModel->save()) {
             $rating = Vote::getRating($id, $type);
             $out = ['success' => true, 'rating' => $rating];
         } else {
             $out = ['success' => false, 'error' => $voteModel->getErrors()];
         }
     } else {
         $out = ['success' => false, 'error' => 'User is guest'];
     }
     echo Json::encode($out);
 }
Exemplo n.º 3
0
 public function actionIndex()
 {
     \Yii::$app->response->format = Response::FORMAT_JSON;
     $userId = \Yii::$app->user->id;
     $id = \Yii::$app->request->get('id');
     $type = \Yii::$app->request->get('type', 'article');
     $action = \Yii::$app->request->get('action', 'up');
     if ($type == 'article') {
         $model = Article::find()->where(['id' => $id])->select('id,up,down')->one();
     } else {
         $model = Comment::find()->where(['id' => $id])->select('id,up,down')->one();
     }
     $vote = Vote::find()->where(['type_id' => $id, 'type' => $type, 'action' => $action, 'user_id' => $userId])->one();
     if (empty($vote)) {
         $model->{$action} += 1;
         $model->save(false);
         $vote = new Vote();
         $params = ['type' => $type, 'action' => $action, 'type_id' => $id, 'user_id' => $userId];
         $vote->attributes = $params;
         $vote->save();
     }
     return ['up' => $model->up, 'down' => $model->down];
 }