/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params, $scope = 'active') { $query = YBoardBan::find(); if ($scope == 'active') { $query = $query->activeScope(); } $dataProvider = new ActiveDataProvider(['query' => $query]); if (!($this->load($params) && $this->validate())) { return $dataProvider; } $query->andFilterWhere(['id' => $this->id, 'user_id' => $this->user_id, 'expires' => $this->expires, 'banned_by' => $this->banned_by]); $query->andFilterWhere(['like', 'ip', $this->ip])->andFilterWhere(['like', 'email', $this->email])->andFilterWhere(['like', 'message', $this->message]); return $dataProvider; }
public function updateOnlineStatus($action) { //Timed JS function //fetch current user list and add update statistics //js to Update it for a time session_start(); Yii::$app->view->registerJs(" \n function updateOnlineUsers() {\n \$.get('" . Yii::$app->urlManager->createUrl([$this->id . '/member/update-online-status', 'id' => Yii::$app->session->id, 'uid' => Yii::$app->user->id]) . "')\n .done(function(data){\n data = \$.parseJSON(data);\n console.log(data);\n \$('#online-record').html(data.message);\n }); \n }\n \n //call function to immediately update online users\n updateOnlineUsers();\n setInterval(updateOnlineUsers," . $this->onlineLimit * 1000 . ");\n "); // register visit by guest or user /*$session = YBoardSession::findOne(Yii::$app->session->id); if($session == null) { $session = new YBoardSession; $session->setAttributes([ 'id'=>Yii::$app->session->id, 'user_id'=>Yii::$app->user->isGuest ? NULL : Yii::$app->user->id, 'last_visit'=>time(), ]); } $session->save() ; */ // register last visit by member if (!Yii::$app->user->isGuest) { $model = YBoardMember::findOne(Yii::$app->user->id); if ($model !== null) { $model->last_visit = date('Y-m-d H:i:s'); $model->save(); //banned user are not allowed to access anything. So they have to be guests if ($action->id != 'banned' && $action->id != 'error') { Event::on(self::className(), self::EVENT_AFTER_ACTION, function ($event) { //if banned redirect to banned $ban = YBoardBan::find()->where(['user_id' => Yii::$app->user->id])->orWhere(['ip' => Yii::$app->request->userIP])->andWhere('expires>' . time())->one(); if ($ban != null) { return Yii::$app->response->redirect([$this->id . '/forum/banned', 'id' => $ban->id])->send(); } }); } } else { //redirect to associate member with forum account //no user can access forum logged in without member account if ($action->id != 'banned' && $action->id != 'error' && $action->id != 'associate' && $action->controller->id != 'member') { Event::on(self::className(), self::EVENT_AFTER_ACTION, function ($event) { return Yii::$app->response->redirect([$this->id . '/member/associate', 'id' => Yii::$app->user->id])->send(); }); } } } }
public function beforeDelete() { if (parent::beforeDelete()) { //delete: Messages(to/from), Ban History, UpVotes, LogTopic YBoardMessage::deleteAll(['or', 'sendfrom' => $this->id, 'sendto' => $this->id]); // Post(Polls and Votes) YBoardVote::deleteAll(['user_id' => $this->id]); YBoardUpvoted::deleteAll(['member_id' => $this->id]); YBoardPoll::deleteAll(['user_id' => $this->id]); YBoardPost::deleteAll(['user_id' => $this->id]); //log topic YBoardLogTopic::deleteAll(['member_id' => $this->id]); //ban YBoardBan::deleteAll(['user_id' => $this->id]); return true; } else { return false; } }
/** Lift Ban */ public function actionBanLift($id) { if (!Yii::$app->user->can('app.forum.moderator.ban-lift')) { throw new ForbiddenHttpException(YBoard::t('yboard', 'You have no enough permission to access this page! If you think its a mistake, please consider reporting to us.')); } if (!Yii::$app->request->isAjax) { Yii::$app->end(); } $json = []; $ban = YBoardBan::findOne($id); $ban->setAttribute('expires', time() - 60); //expired one minute ago if ($ban != null && $ban->save()) { $json['success'] = 'yes'; } else { $json['success'] = 'no'; $json['error'] = YBoard::t('yboard', 'Could Not Lift the Ban!'); } echo json_encode($json); Yii::$app->end(); }
/** * Displays a single YBoardBan model. * @param integer $id * @return mixed */ public function actionBanned($id) { $model = YBoardBan::findOne($id); $user = YBoardMember::findOne($model->user_id); $isIP = true; if ($user !== null) { $isIP = false; } if ($model == null) { throw new NotFoundHttpException(YBoard::t('yboard', 'The requested Banned User does not exist.')); } $settings = YBoardSetting::find()->where(['key' => 'email'])->one(); return $this->render('banned', ['model' => $model, 'member' => $user, 'isIp' => $isIP, 'email' => $settings == null ? YBoard::t('board', 'no email') : $settings->value]); }