/** * 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 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)); }
/** * 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; } }