public function checkEmail($attribute) { $value = $this->{$attribute}; $user = Users::model()->findByAttributes(['email' => $value]); /*if (!$user) { $this->addError($attribute, 'В системе нет пользователя с данной почтой'); return false; }*/ if ($user) { $group_member = GroupMember::model()->findByAttributes(['group_id' => $this->group_id, 'user_id' => $user->id]); if ($group_member) { $this->addError($attribute, 'Данный пользователь уже член вашей группы'); return false; } $group = Group::model()->findByPk($this->group_id); if ($group->owner_id == $user->id) { $this->addError($attribute, 'Администратор группы не может быть членом группы'); return false; } } $active_invites = GroupInvite::model()->findByAttributes(['group_id' => $this->group_id, 'email' => $value, 'status' => self::INVITE_CREATE]); if ($active_invites) { $this->addError($attribute, 'Данный пользователь уже имеет приглашение'); } }
/** * Create * @param integer $groupId * @param integer $courseId */ public function actionCreate($groupId, $courseId) { $model = new GroupCourse(); $course = Course::model()->findByPk($courseId); $group = Group::model()->findByPk($groupId); // $member = $group->findMember(array('userId'=>Yii::app()->user->id)); $member = GroupMember::model()->findByAttributes(array('groupId' => $groupId, 'userId' => Yii::app()->user->id)); if ($course && $member && $member->inRoles(array('admin', 'superAdmin'))) { $model->groupId = $groupId; $model->courseId = $courseId; $model->userId = Yii::app()->user->id; $model->addTime = time(); echo $model->save(); Yii::app()->user->setFlash('success', '收藏成功!'); } echo false; }
/** * 获取本member中角色权限不比$userId低的角色,如果操作者不是同一组织的成员,则返回本成员所有roles * Enter description here ... * @param unknown_type $userId */ public function getNoLowerRoles() { if (Yii::app()->user->checkAccess('admin')) { return array(); } $userId = Yii::app()->user->id; // $operateMember = Member::model()->findByAttributes(array('userId'=>$userId,'memberableEntityId'=>$this->memberableEntityId)); $operateMember = GroupMember::model()->findByAttributes(array('userId' => $userId, 'groupId' => $this->groupId)); $objectMember = $this->isNewRecord ? $this : Member::model()->findByPk($this->id); if ($operateMember) { $result = array(); if ($objectMember->inRoles(array('superAdmin'))) { $result[] = 'superAdmin'; } //if($operateMember->inRoles(array('superAdmin'))) return array('superAdmin'); if ($operateMember->inRoles(array('admin'))) { if ($objectMember->inRoles(array('admin'))) { $result[] = 'admin'; } } return $result; } return $objectMember->arrRoles; }
/** * 退出小组处理 * @param integer $id 小组ID */ public function actionQuit($id) { $group = $this->loadModel($id); $member = GroupMember::model()->findByAttributes(array('groupId' => $id, 'userId' => Yii::app()->user->id)); if ($member) { if ($member->inRoles(array('superAdmin'))) { Yii::app()->user->setFlash('error', '超级管理员不能退出小组'); } elseif ($member->delete()) { Yii::app()->user->setFlash('success', '退出' . $group->name . '小组成功!'); } else { Yii::app()->user->setFlash('error', '退出' . $group->name . '小组失败!'); } } $this->redirect(array('index/view', 'id' => $group->id)); }
/** * 检查权限 */ public function allowOnlyAdmin() { if (Yii::app()->user->checkAccess('admin')) { return true; } $group = $this->loadModel($_GET['id']); // $member = $group->findMember(array('userId'=>Yii::app()->user->id)); $member = GroupMember::model()->findByAttributes(array('groupId' => $group->id, 'userId' => Yii::app()->user->id)); if ($member && $member->inRoles(array('admin', 'superAdmin'))) { return true; } return false; }
/** * 查看一个帖子 * @param integer $id 帖子ID */ public function actionView($id) { $post = $this->loadModel($id); //$group = $post->postableEntity->getModel(); $group = $post->group; $member = GroupMember::model()->findByAttributes(array('groupId' => $id, 'userId' => Yii::app()->user->id)); if (!$member) { $member = new GroupMember(); } $followDataProvider = $post->getFollowDataProvider(); $this->render('view', array('post' => $post, 'group' => $group, 'member' => $member, 'followDataProvider' => $followDataProvider)); }
public function actionMembers_manage($book_id) { $this->loadBook($book_id); if (!$this->book->can("membership")) { throw new CHttpException(403, "Вы не можете управлять группой перевода, это прерогатива " . ($this->book->ac_membership == "m" ? "модераторов" : "создателя перевода")); } $back = $this->book->getUrl("members") . "?User_page=" . intval($_POST["User_page"]); if (count($_POST["id"]) == 0) { $this->redirect($back); } /** var integer $status - какой статус ставим / удаляем */ $status = (int) $_POST["status"]; // Нельзя удалять людей из открытого перевода и назначать модераторов, если ты не владелец if ($status == GroupMember::CONTRIBUTOR and $this->book->facecontrol == Book::FC_OPEN or $status == GroupMember::MODERATOR and !$this->book->can("owner")) { $this->redirect($back); } // Загружаем всех, кто был в таблице /** var array $ids - ID всех пользователей, которые были в таблице на странице */ /** var GroupMember[] $members - члены */ $ids = array_filter(array_keys($_POST["id"]), function ($n) { return is_numeric($n); }); if (count($ids) == 0) { $this->redirect($back); } $members = GroupMember::model()->with("user")->book($this->book->id)->findAllByAttributes(array("user_id" => $ids)); $update = array(); $delete = array(); foreach ($members as $member) { // С создателем перевода никаких действий делать нельзя, а модераторов может мучить только создатель if ($member->user_id == $this->book->owner_id) { continue; } if ($member->status == GroupMember::MODERATOR and !$this->book->can("owner")) { continue; } $set = (int) $_POST["id"][$member->user_id]; if ($status == GroupMember::CONTRIBUTOR) { // Выгнать из группы // Пустые чекбоксы пропускаем if ($set == 0) { continue; } // Если это уже удалённый пользователь, то не пинаем труп. if ($member->status == GroupMember::CONTRIBUTOR) { continue; } // Если у члена группы были переводы, то ставим ему status = 0, если не было - удаляем нахуй if ($member->n_trs == 0) { $delete[] = $member->user_id; } else { $update[GroupMember::CONTRIBUTOR][] = $member->user_id; } $member->user->Notify(Notice::EXPELLED, $this->book); } elseif ($status == GroupMember::BANNED or $status == GroupMember::MODERATOR) { // Забанить или сделать модератором // Нельзя сделать модератором вышедшего члена // -- А с какого это хуя нельзя-то? При facecontrol == FC_OPEN - можно. // if($status == GroupMember::MODERATOR and $member->status == GroupMember::CONTRIBUTOR) continue; // Весёлая карусель! Баним незабаненных или коронуем пастухов. if ($set and $member->status != $status) { $update[$status][] = $member->user_id; if ($status == GroupMember::MODERATOR) { $member->user->Notify(Notice::CROWNED, $this->book); } elseif ($status == GroupMember::BANNED) { $member->user->Notify(Notice::BANNED, $this->book); } } // Разбаниваем забаненных, а королей отправляем пасти свиней. if (!$set and $member->status == $status) { $update[$this->book->facecontrol == Book::FC_OPEN ? GroupMember::CONTRIBUTOR : GroupMember::MEMBER][] = $member->user_id; if ($status == GroupMember::MODERATOR) { $member->user->Notify(Notice::DEPOSED, $this->book); } elseif ($status == GroupMember::BANNED) { $member->user->Notify(Notice::UNBANNED, $this->book); } } } } if (count($delete) > 0) { Yii::app()->db->createCommand("DELETE FROM groups WHERE book_id = '{$this->book->id}' AND user_id IN(" . join(",", $delete) . ")")->execute(); } if (count($update) > 0) { foreach ($update as $k => $V) { Yii::app()->db->createCommand("UPDATE groups SET status = '{$k}' WHERE book_id = '{$this->book->id}' AND user_id IN(" . join(",", $V) . ")")->execute(); } } $this->redirect($back); }
public function actionDeleteModerator($member_id, $confirm = 0) { $model = GroupMember::model()->findByPk($member_id); if (!$model) { throw new CHttpException(404, 'Элемент не найден'); } if ($confirm) { if ($model->delete()) { Yii::app()->user->setFlash('success', 'Модератор успешно удален'); } else { Yii::app()->user->setFlash('error', 'Ошибка удаления модератора'); } $this->redirect(['moderators', 'id' => self::$group->number]); } $this->render('moderator/delete', ['model' => $model]); }
/** * 获取成员数量,计入超级管理员 */ public function getMemberCount() { $result = GroupMember::model()->count("memberableEntityId=:entityId and (find_in_set('superAdmin',roles) or find_in_set('admin',roles) or find_in_set('member',roles))", array(':entityId' => $this->getOwner()->entityId)); return intval($result); }
/** * Returns the data model based on the primary key given in the GET variable. * If the data model is not found, an HTTP exception will be raised. */ public function loadModel() { if ($this->_model === null) { if (isset($_GET['id'])) { $this->_model = GroupMember::model()->findbyPk($_GET['id']); } if ($this->_model === null) { throw new CHttpException(404, 'The requested page does not exist.'); } } return $this->_model; }