/**
  * 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());
 }
Пример #2
0
 /**
  * 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();
 }