/**
  * Form Validator which checks the invite field
  *
  * @param type $attribute
  * @param type $params
  */
 public function checkInvite($attribute, $params)
 {
     // Check if email field is not empty
     if ($this->{$attribute} != "") {
         $invites = explode(",", $this->{$attribute});
         foreach ($invites as $userGuid) {
             $userGuid = preg_replace("/[^A-Za-z0-9\\-]/", '', $userGuid);
             if ($userGuid == "") {
                 continue;
             }
             // Try load user
             $user = User::model()->findByAttributes(array('guid' => $userGuid));
             if ($user != null) {
                 $membership = RoomMembership::model()->findByAttributes(array('room_id' => $this->room->id, 'user_id' => $user->id));
                 if ($membership != null && $membership->status == RoomMembership::STATUS_MEMBER) {
                     $this->addError($attribute, Yii::t('RoomsModule.forms_RoomInviteForm', "User is already member!"));
                     continue;
                 }
             } else {
                 $this->addError($attribute, Yii::t('RoomsModule.forms_RoomInviteForm', "User not found!"));
                 continue;
             }
             $this->invites[] = $user;
         }
     }
 }
 public function run()
 {
     $currentRoom = null;
     $currentRoomGuid = "";
     if (isset(Yii::app()->params['currentRoom']) && Yii::app()->params['currentRoom'] != null) {
         $currentRoom = Yii::app()->params['currentRoom'];
         $currentRoomGuid = $currentRoom->guid;
     }
     $this->render('yourRoomsMenu', array('currentRoom' => $currentRoom, 'currentRoomGuid' => $currentRoomGuid, 'usersRooms' => RoomMembership::GetUserRooms()));
 }
 public function actionIndex()
 {
     $criteria = new CDbCriteria();
     if (HSetting::Get('roomOrder', 'room') == 0) {
         $criteria->order = 'name ASC';
     } else {
         $criteria->order = 'last_visit DESC';
     }
     $memberships = RoomMembership::model()->with('room')->findAllByAttributes(array('user_id' => Yii::app()->user->id, 'status' => RoomMembership::STATUS_MEMBER), $criteria);
     $this->renderPartial('index', array('memberships' => $memberships), false, true);
 }
 public function actionInviteAccept()
 {
     // Get Current Room
     $room = $this->getRoom();
     // Load Pending Membership
     $membership = RoomMembership::model()->findByAttributes(array('user_id' => Yii::app()->user->id, 'room_id' => $room->id));
     if ($membership == null) {
         throw new CHttpException(404, Yii::t('RoomsModule.controllers_RoomsController', 'There is no pending invite!'));
     }
     // Check there are really an Invite
     if ($membership->status == RoomMembership::STATUS_INVITED) {
         $room->addMember(Yii::app()->user->id);
         //RoomInviteAcceptedNotification::fire($membership->originator_user_id, Yii::app()->user, $room);
     }
     $this->redirect($room->getUrl());
 }
 /**
  * On User delete, also delete his space related stuff
  *
  * @param type $event
  */
 public static function onUserDelete($event)
 {
     $user = $event->sender;
     // Check if the user owns some spaces
     foreach (RoomMembership::GetUserRooms($user->id) as $room) {
         if ($room->isRoomOwner($user->id)) {
             throw new CHttpException(500, Yii::t('RoomsModule.base', 'Could not delete user who is a room owner! Name of Room: {roomName}', array('roomName' => $room->name)));
         }
     }
     // Cancel all space memberships
     foreach (RoomMembership::model()->findAllByAttributes(array('user_id' => $user->id)) as $membership) {
         $membership->room->removeMember($user->id);
     }
     // Cancel all space invites by the user
     foreach (RoomMembership::model()->findAllByAttributes(array('originator_user_id' => $user->id, 'status' => RoomMembership::STATUS_INVITED)) as $membership) {
         $membership->room->removeMember($membership->user_id);
     }
     return true;
 }
 /**
  * Remove Membership
  *
  * @param $userId UserId of User to Remove
  */
 public function removeMember($userId = "")
 {
     if ($userId == "") {
         $userId = Yii::app()->user->id;
     }
     $user = User::model()->findByPk($userId);
     $membership = $this->getMembership($userId);
     if ($this->isRoomOwner($userId)) {
         return false;
     }
     if ($membership == null) {
         return true;
     }
     // If was member, create a activity for that
     if ($membership->status == RoomMembership::STATUS_MEMBER) {
         $activity = new Activity();
         $activity->content->room_id = $this->getOwner()->id;
         $activity->content->visibility = Content::VISIBILITY_PRIVATE;
         $activity->type = "ActivityRoomMemberRemoved";
         $activity->created_by = $userId;
         $activity->save();
         $activity->fire();
     }
     // Was invited, but declined the request
     if ($membership->status == RoomMembership::STATUS_INVITED) {
         RoomInviteDeclinedNotification::fire($membership->originator_user_id, $user, $this->getOwner());
     }
     foreach (RoomMembership::model()->findAllByAttributes(array('user_id' => $userId, 'room_id' => $this->getOwner()->id)) as $membership) {
         $membership->delete();
     }
     // Cleanup Notifications
     RoomApprovalRequestNotification::remove($userId, $this->getOwner());
     RoomInviteNotification::remove($userId, $this->getOwner());
     RoomApprovalRequestNotification::remove($userId, $this->getOwner());
 }
 /**
  * Members Administration Action
  */
 public function actionMembers()
 {
     $membersPerPage = 10;
     $room = $this->getRoom();
     // User Role Management
     if (isset($_POST['users'])) {
         $users = Yii::app()->request->getParam('users');
         // Loop over all users in Form
         foreach ($users as $userGuid) {
             // Get informations
             if (isset($_POST['user_' . $userGuid])) {
                 $userSettings = Yii::app()->request->getParam('user_' . $userGuid);
                 $user = User::model()->findByAttributes(array('guid' => $userGuid));
                 if ($user != null) {
                     // No changes on the Owner
                     if ($room->isRoomOwner($user->id)) {
                         continue;
                     }
                     $membership = RoomMembership::model()->findByAttributes(array('user_id' => $user->id, 'room_id' => $room->id));
                     if ($membership != null) {
                         $membership->invite_role = isset($userSettings['inviteRole']) && $userSettings['inviteRole'] == 1 ? 1 : 0;
                         $membership->admin_role = isset($userSettings['adminRole']) && $userSettings['adminRole'] == 1 ? 1 : 0;
                         $membership->share_role = isset($userSettings['shareRole']) && $userSettings['shareRole'] == 1 ? 1 : 0;
                         $membership->save();
                     }
                 }
             }
         }
         // Change owner if changed
         if ($room->isRoomOwner()) {
             $owner = $room->getRoomOwner();
             $newOwnerId = Yii::app()->request->getParam('ownerId');
             if ($newOwnerId != $owner->id) {
                 if ($room->isMember($newOwnerId)) {
                     $room->setSpaceOwner($newOwnerId);
                     // Redirect to current room
                     $this->redirect($this->createUrl('admin/members', array('sguid' => $this->getRoom()->guid)));
                 }
             }
         }
         Yii::app()->user->setFlash('data-saved', Yii::t('SpaceModule.controllers_AdminController', 'Saved'));
     }
     // Updated Users
     $criteria = new CDbCriteria();
     $criteria->condition = "1";
     // Allow User Searches
     $search = Yii::app()->request->getQuery('search');
     if ($search != "") {
         $criteria->join = "LEFT JOIN user ON memberships.user_id = user.id ";
         $criteria->condition .= " AND (";
         $criteria->condition .= ' user.username LIKE :search';
         $criteria->condition .= ' OR user.email like :search';
         $criteria->condition .= " ) ";
         $criteria->params = array(':search' => '%' . $search . '%');
     }
     //ToDo: Better Counting
     $allMemberCount = count($room->memberships($criteria));
     $pages = new CPagination($allMemberCount);
     $pages->setPageSize($membersPerPage);
     $pages->applyLimit($criteria);
     $members = $room->memberships($criteria);
     $invited_members = RoomMembership::model()->findAllByAttributes(array('room_id' => $room->id, 'status' => RoomMembership::STATUS_INVITED));
     $this->render('members', array('room' => $room, 'members' => $members, 'invited_members' => $invited_members, 'item_count' => $allMemberCount, 'page_size' => $membersPerPage, 'search' => $search, 'pages' => $pages));
 }
Пример #8
0
 /**
  * Before deletion of a Room
  */
 protected function beforeDelete()
 {
     foreach (RoomSetting::model()->findAllByAttributes(array('room_id' => $this->id)) as $roomSetting) {
         $roomSetting->delete();
     }
     // Disable all enabled modules
     foreach ($this->getAvailableModules() as $moduleId => $module) {
         if ($this->isModuleEnabled($moduleId)) {
             $this->disableModule($moduleId);
         }
     }
     Yii::app()->search->delete($this);
     $this->getProfileImage()->delete();
     // Remove all Follwers
     //UserFollow::model()->deleteAllByAttributes(array('object_id' => $this->id, 'object_model' => 'Room'));
     //Delete all memberships:
     //First select, then delete - done to make sure that RoomsMembership::beforeDelete() is triggered
     $roomMemberships = RoomMembership::model()->findAllByAttributes(array('room_id' => $this->id));
     foreach ($roomMemberships as $roomMembership) {
         $roomMembership->delete();
     }
     UserInvite::model()->deleteAllByAttributes(array('room_invite_id' => $this->id));
     // Delete all content objects of this room
     foreach (Content::model()->findAllByAttributes(array('room_id' => $this->id)) as $content) {
         $content->delete();
     }
     // When this room is used in a group as default room, delete the link
     foreach (Group::model()->findAllByAttributes(array('room_id' => $this->id)) as $group) {
         $group->room_id = "";
         $group->save();
     }
     Wall::model()->deleteAllByAttributes(array('id' => $this->wall_id));
     return parent::beforeDelete();
 }
 /**
  * Returns a list of all spaces of the given userId
  *
  * @param type $userId
  */
 public static function GetUserRooms($userId = "")
 {
     // Take current userid if none is given
     if ($userId == "") {
         $userId = Yii::app()->user->id;
     }
     $cacheId = "userRooms_" . $userId;
     $cacheValue = Yii::app()->cache->get($cacheId);
     $orderSetting = HSetting::Get('roomOrder', 'room');
     if ($cacheValue === false) {
         $criteria = new CDbCriteria();
         if ($orderSetting == 0) {
             $criteria->order = 'name ASC';
         } else {
             $criteria->order = 'last_visit DESC';
         }
         $rooms = array();
         $memberships = RoomMembership::model()->with('room')->findAllByAttributes(array('user_id' => $userId, 'status' => RoomMembership::STATUS_MEMBER), $criteria);
         foreach ($memberships as $membership) {
             $rooms[] = $membership->room;
         }
         Yii::app()->cache->set($cacheId, $rooms, HSetting::Get('expireTime', 'cache'));
         return $rooms;
     } else {
         return $cacheValue;
     }
 }