/** * Adds an member to this space. * * This can happens after an clicking "Request Membership" Link * after Approval or accepting an invite. * * @param type $userId */ public function addMember($userId) { $user = User::model()->findByPk($userId); $membership = $this->getMembership($userId); if ($membership == null) { // Add Membership $membership = new RoomMembership(); $membership->room_id = $this->getOwner()->id; $membership->user_id = $userId; $membership->status = RoomMembership::STATUS_MEMBER; $membership->invite_role = 0; $membership->admin_role = 0; $membership->share_role = 0; $userInvite = UserInvite::model()->findByAttributes(array('email' => $user->email)); if ($userInvite !== null && $userInvite->source == UserInvite::SOURCE_INVITE) { RoomInviteAcceptedNotification::fire($userInvite->user_originator_id, $user, $this->getOwner()); } } else { // User is already member if ($membership->status == RoomMembership::STATUS_MEMBER) { return true; } // User requested membership if ($membership->status == RoomMembership::STATUS_APPLICANT) { RoomApprovalRequestAcceptedNotification::fire(Yii::app()->user->id, $user, $this->getOwner()); } // User was invited if ($membership->status == RoomMembership::STATUS_INVITED) { RoomInviteAcceptedNotification::fire($membership->originator_user_id, $user, $this->getOwner()); } // Update Membership $membership->status = RoomMembership::STATUS_MEMBER; } $membership->save(); // Create Wall Activity for that $activity = new Activity(); $activity->content->room_id = $this->getOwner()->id; $activity->content->visibility = Content::VISIBILITY_PRIVATE; $activity->content->created_by = $this->getOwner()->id; $activity->created_by = $userId; $activity->type = "ActivityRoomMemberAdded"; $activity->save(); $activity->fire(); // Members can't also follow the space $this->getOwner()->unfollow($userId); // Cleanup Notifications RoomInviteNotification::remove($userId, $this->getOwner()); RoomApprovalRequestNotification::remove($userId, $this->getOwner()); }
/** * After Save Addons */ protected function afterSave() { if ($this->status != self::VISIBILITY_NONE) { Yii::app()->search->update($this); } else { Yii::app()->search->delete($this); } $userId = $this->created_by; if ($this->isNewRecord) { // Create new wall record for this room $wall = new Wall(); $wall->object_model = 'Room'; $wall->object_id = $this->id; $wall->save(); $this->wall_id = $wall->id; $this->wall = $wall; Room::model()->updateByPk($this->id, array('wall_id' => $wall->id)); // Auto add creator as admin $membership = new RoomMembership(); $membership->room_id = $this->id; $membership->user_id = $userId; $membership->status = RoomMembership::STATUS_MEMBER; $membership->invite_role = 1; $membership->admin_role = 1; $membership->share_role = 1; $membership->save(); $activity = new Activity(); $activity->content->created_by = $userId; $activity->content->room_id = $this->id; $activity->content->user_id = $userId; $activity->content->visibility = Content::VISIBILITY_PUBLIC; $activity->created_by = $userId; $activity->type = "ActivityRoomCreated"; $activity->save(); $activity->fire(); } Yii::app()->cache->delete('userRooms_' . $userId); parent::afterSave(); }