/** * 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 (Membership::GetUserSpaces($user->id) as $space) { if ($space->isSpaceOwner($user->id)) { throw new HttpException(500, Yii::t('SpaceModule.base', 'Could not delete user who is a space owner! Name of Space: {spaceName}', array('spaceName' => $space->name))); } } // Cancel all space memberships foreach (Membership::findAll(array('user_id' => $user->id)) as $membership) { $membership->space->removeMember($user->id); } // Cancel all space invites by the user foreach (Membership::findAll(array('originator_user_id' => $user->id, 'status' => Membership::STATUS_INVITED)) as $membership) { $membership->space->removeMember($membership->user_id); } return true; }
/** * @inheritdoc */ public function beforeDelete() { foreach (Setting::findAll(['space_id' => $this->id]) as $spaceSetting) { $spaceSetting->delete(); } foreach ($this->getAvailableModules() as $moduleId => $module) { if ($this->isModuleEnabled($moduleId)) { $this->disableModule($moduleId); } } Yii::$app->search->delete($this); $this->getProfileImage()->delete(); \humhub\modules\user\models\Follow::deleteAll(['object_id' => $this->id, 'object_model' => 'Space']); foreach (Membership::findAll(['space_id' => $this->id]) as $spaceMembership) { $spaceMembership->delete(); } \humhub\modules\user\models\Invite::deleteAll(['space_invite_id' => $this->id]); // When this workspace is used in a group as default workspace, delete the link foreach (\humhub\modules\user\models\Group::findAll(['space_id' => $this->id]) as $group) { $group->space_id = ""; $group->save(); } return parent::beforeDelete(); }
/** * Members Administration Action */ public function actionMembers() { $membersPerPage = 20; $space = $this->getSpace(); // User Role Management if (isset($_POST['users'])) { $users = Yii::$app->request->post('users'); // Loop over all users in Form foreach ($users as $userGuid) { // Get informations if (isset($_POST['user_' . $userGuid])) { $userSettings = Yii::$app->request->post('user_' . $userGuid); $user = User::findOne(['guid' => $userGuid]); if ($user != null) { // No changes on the Owner if ($space->isSpaceOwner($user->id)) { continue; } $membership = \humhub\modules\space\models\Membership::findOne(['user_id' => $user->id, 'space_id' => $space->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 ($space->isSpaceOwner()) { $owner = $space->getSpaceOwner(); $newOwnerId = Yii::$app->request->post('ownerId'); if ($newOwnerId != $owner->id) { if ($space->isMember($newOwnerId)) { $space->setSpaceOwner($newOwnerId); // Redirect to current space return $this->redirect($space->createUrl('admin/members')); } } } Yii::$app->getSession()->setFlash('data-saved', Yii::t('SpaceModule.controllers_AdminController', 'Saved')); } // Updated Users $query = $space->getMemberships(); #$query = Membership::find(); // Allow User Searches $search = Yii::$app->request->post('search'); if ($search != "") { $query->joinWith('user'); $query->andWhere('user.username LIKE :search OR user.email LIKE :search', [':search' => '%' . $search . '%']); } $countQuery = clone $query; $pagination = new \yii\data\Pagination(['totalCount' => $countQuery->count(), 'pageSize' => $membersPerPage]); $query->offset($pagination->offset)->limit($pagination->limit); $invitedMembers = Membership::findAll(['space_id' => $space->id, 'status' => Membership::STATUS_INVITED]); $members = $query->all(); return $this->render('members', array('space' => $space, 'pagination' => $pagination, 'members' => $members, 'invited_members' => $invitedMembers, 'search' => $search)); }
/** * Remove Membership * * @param $userId UserId of User to Remove */ public function removeMember($userId = "") { if ($userId == "") { $userId = Yii::$app->user->id; } $user = User::findOne(['id' => $userId]); $membership = $this->getMembership($userId); if ($this->isSpaceOwner($userId)) { return false; } if ($membership == null) { return true; } // If was member, create a activity for that if ($membership->status == Membership::STATUS_MEMBER) { $activity = new \humhub\modules\space\activities\MemberRemoved(); $activity->source = $this->owner; $activity->originator = $user; $activity->create(); } elseif ($membership->status == Membership::STATUS_INVITED && $membership->originator !== null) { // Was invited, but declined the request - inform originator $notification = new \humhub\modules\space\notifications\InviteDeclined(); $notification->source = $this->owner; $notification->originator = $user; $notification->send($membership->originator); } elseif ($membership->status == Membership::STATUS_APPLICANT) { $notification = new \humhub\modules\space\notifications\ApprovalRequestDeclined(); $notification->source = $this->owner; $notification->originator = Yii::$app->user->getIdentity(); $notification->send($user); } foreach (Membership::findAll(['user_id' => $userId, 'space_id' => $this->owner->id]) as $membership) { $membership->delete(); } $notificationApproval = new \humhub\modules\space\notifications\ApprovalRequest(); $notificationApproval->source = $this->owner; $notificationApproval->originator = $user; $notificationApproval->delete(); $notificationInvite = new \humhub\modules\space\notifications\Invite(); $notificationInvite->source = $this->owner; $notificationInvite->delete($user); }