/** * 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 SpaceMembership(); $membership->space_id = $this->getOwner()->id; $membership->user_id = $userId; $membership->status = SpaceMembership::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) { SpaceInviteAcceptedNotification::fire($userInvite->user_originator_id, $user, $this->getOwner()); } } else { // User is already member if ($membership->status == SpaceMembership::STATUS_MEMBER) { return true; } // User requested membership if ($membership->status == SpaceMembership::STATUS_APPLICANT) { SpaceApprovalRequestAcceptedNotification::fire(Yii::app()->user->id, $user, $this->getOwner()); } // User was invited if ($membership->status == SpaceMembership::STATUS_INVITED) { SpaceInviteAcceptedNotification::fire($membership->originator_user_id, $user, $this->getOwner()); } // Update Membership $membership->status = SpaceMembership::STATUS_MEMBER; } $membership->save(); // Create Wall Activity for that $activity = new Activity(); $activity->content->space_id = $this->getOwner()->id; $activity->content->visibility = Content::VISIBILITY_PRIVATE; $activity->content->created_by = $this->getOwner()->id; $activity->created_by = $userId; $activity->type = "ActivitySpaceMemberAdded"; $activity->save(); $activity->fire(); // Members can't also follow the space $this->getOwner()->unfollow($userId); // Cleanup Notifications SpaceInviteNotification::remove($userId, $this->getOwner()); SpaceApprovalRequestNotification::remove($userId, $this->getOwner()); }
/** * After Save Addons */ protected function afterSave() { // Try To Delete Search Model HSearch::getInstance()->deleteModel($this); // Newer index a hidden workspace if ($this->visibility != self::VISIBILITY_NONE) { HSearch::getInstance()->addModel($this); } $userId = $this->created_by; if ($this->isNewRecord) { // Create new wall record for this space $wall = new Wall(); $wall->object_model = 'Space'; $wall->object_id = $this->id; $wall->save(); $this->wall_id = $wall->id; $this->wall = $wall; Space::model()->updateByPk($this->id, array('wall_id' => $wall->id)); // Auto add creator as admin $membership = new SpaceMembership(); $membership->space_id = $this->id; $membership->user_id = $userId; $membership->status = SpaceMembership::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->space_id = $this->id; $activity->content->user_id = $userId; $activity->content->visibility = Content::VISIBILITY_PUBLIC; $activity->created_by = $userId; $activity->type = "ActivitySpaceCreated"; $activity->save(); $activity->fire(); } Yii::app()->cache->delete('userSpaces_' . $userId); parent::afterSave(); }