示例#1
0
 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;
 }
示例#3
0
 /**
  * 获取本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;
 }
示例#6
0
 /**
  * 查看一个帖子
  * @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));
 }
示例#7
0
 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);
 }
示例#8
0
 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]);
 }
示例#9
0
 /**
  * 获取成员数量,计入超级管理员
  */
 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);
 }
示例#10
0
 /**
  * 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;
 }