public function run() { $showSpaces = 30; $spaces = array(); $i = 0; foreach (Membership::GetUserSpaces($this->user->id) as $space) { if ($space->visibility == Space::VISIBILITY_NONE) { continue; } if ($space->status != Space::STATUS_ENABLED) { continue; } $i++; if ($i > $showSpaces) { break; } $spaces[] = $space; } return $this->render('userSpaces', array('spaces' => $spaces)); }
/** * Returns a list of languages */ public function getLanguages() { $languages = array(); if (!is_dir($this->getMessageBasePath())) { return $languages; } $files = scandir($this->getMessageBasePath()); foreach ($files as $file) { if ($file == '.' || $file == '..') { continue; } $languages[$file] = $file; } if (!Yii::$app->request->isConsoleRequest) { if (!Yii::$app->user->isAdmin()) { $userLanguages = array(); $spaceLanguages = array_map(function ($space) { return strtolower($space->name); }, \humhub\modules\space\models\Membership::GetUserSpaces()); foreach ($spaceLanguages as $sp) { if (in_array($sp, $languages)) { $userLanguages[$sp] = $sp; } } return $userLanguages; } } return $languages; }
/** * 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; }
/** * This is a special case, because we need to find a space to start the tour */ public function actionStartSpaceTour() { $space = null; // Loop over all spaces where the user is member foreach (\humhub\modules\space\models\Membership::GetUserSpaces() as $space) { if ($space->isAdmin()) { // If user is admin on this space, it´s the perfect match break; } } if ($space === null) { // If user is not member of any space, try to find a public space // to run tour in $space = Space::findOne(['!=', 'visibility' => Space::VISIBILITY_NONE]); } if ($space === null) { throw new HttpException(404, 'Could not find any public space to run tour!'); } return $this->redirect($space->createUrl('/space/space', array('tour' => true))); }
public function actionIndex() { // Restore users last selectors $lastSelectorsJson = Yii::$app->user->getIdentity()->getSetting('lastSelectors', 'calendar'); if ($lastSelectorsJson != "") { $selectors = Json::decode($lastSelectorsJson); } else { $selectors = array(ActiveQueryContent::USER_RELATED_SCOPE_OWN, ActiveQueryContent::USER_RELATED_SCOPE_SPACES); } // Restore users last used filter $lastFilterJson = Yii::$app->user->getIdentity()->getSetting('lastFilters', 'calendar'); if ($lastFilterJson != "") { $filters = Json::decode($lastFilterJson); } else { $filters = array(); } $spaces = Membership::GetUserSpaces(); $external_sources = CalendarExternalSource::find()->contentContainer(Yii::$app->user->getIdentity())->all(); return $this->render('index', array('selectors' => $selectors, 'filters' => $filters, 'spaces' => $spaces, 'external_sources' => $external_sources, 'user' => Yii::$app->user->getIdentity())); }
/** * Before Delete of a User * */ public function beforeDelete() { // We don't allow deletion of users who owns a space - validate that foreach (\humhub\modules\space\models\Membership::GetUserSpaces($this->id) as $space) { if ($space->isSpaceOwner($this->id)) { throw new Exception("Tried to delete a user which is owner of a space!"); } } // Disable all enabled modules foreach ($this->getAvailableModules() as $moduleId => $module) { if ($this->isModuleEnabled($moduleId)) { $this->disableModule($moduleId); } } // Delete profile image $this->getProfileImage()->delete(); // Remove from search index Yii::$app->search->delete($this); // Cleanup related tables Invite::deleteAll(['user_originator_id' => $this->id]); Follow::deleteAll(['user_id' => $this->id]); Follow::deleteAll(['object_model' => $this->className(), 'object_id' => $this->id]); Password::deleteAll(['user_id' => $this->id]); Profile::deleteAll(['user_id' => $this->id]); GroupUser::deleteAll(['user_id' => $this->id]); Session::deleteAll(['user_id' => $this->id]); return parent::beforeDelete(); }
/** * Delete Action * * Its only possible if the user is not owner of a workspace. */ public function actionDelete() { $isSpaceOwner = false; $user = Yii::$app->user->getIdentity(); if (!Yii::$app->user->canDeleteAccount()) { throw new HttpException(500, 'Account deletion not allowed'); } foreach (\humhub\modules\space\models\Membership::GetUserSpaces() as $space) { if ($space->isSpaceOwner($user->id)) { $isSpaceOwner = true; } } $model = new \humhub\modules\user\models\forms\AccountDelete(); if (!$isSpaceOwner && $model->load(Yii::$app->request->post()) && $model->validate()) { $user->delete(); Yii::$app->user->logout(); return $this->goHome(); } return $this->render('delete', array('model' => $model, 'isSpaceOwner' => $isSpaceOwner)); }
/** * Deletes a user permanently */ public function actionDelete() { $id = (int) Yii::$app->request->get('id'); $doit = (int) Yii::$app->request->get('doit'); $user = User::findOne(['id' => $id]); if ($user == null) { throw new HttpException(404, Yii::t('AdminModule.controllers_UserController', 'User not found!')); } elseif (Yii::$app->user->id == $id) { throw new HttpException(400, Yii::t('AdminModule.controllers_UserController', 'You cannot delete yourself!')); } if ($doit == 2) { $this->forcePostRequest(); foreach (\humhub\modules\space\models\Membership::GetUserSpaces($user->id) as $space) { if ($space->isSpaceOwner($user->id)) { $space->addMember(Yii::$app->user->id); $space->setSpaceOwner(Yii::$app->user->id); } } $user->delete(); return $this->redirect(['/admin/user']); } return $this->render('delete', array('model' => $user)); }
protected function buildQuery($keyword, $options) { // Allow *Token* \ZendSearch\Lucene\Search\Query\Wildcard::setMinPrefixLength(0); $query = new \ZendSearch\Lucene\Search\Query\Boolean(); foreach (explode(" ", $keyword) as $k) { // Require at least 3 non-wildcard characters if (strlen($k) > 2) { $term = new \ZendSearch\Lucene\Index\Term("*" . $k . "*"); $query->addSubquery(new \ZendSearch\Lucene\Search\Query\Wildcard($term), true); } } // Add model filter if (isset($options['model']) && $options['model'] != "") { if (is_array($options['model'])) { $boolQuery = new \ZendSearch\Lucene\Search\Query\MultiTerm(); foreach ($options['model'] as $model) { $boolQuery->addTerm(new \ZendSearch\Lucene\Index\Term($model, 'model')); } $query->addSubquery($boolQuery, true); } else { $term = new \ZendSearch\Lucene\Index\Term($options['model'], 'model'); $query->addSubquery(new \ZendSearch\Lucene\Search\Query\Term($term), true); } } // Add type filter if (isset($options['type']) && $options['type'] != "") { if (is_array($options['type'])) { $boolQuery = new \ZendSearch\Lucene\Search\Query\MultiTerm(); foreach ($options['type'] as $model) { $boolQuery->addTerm(new \ZendSearch\Lucene\Index\Term($type), 'type'); } $query->addSubquery($boolQuery, true); } else { $term = new \ZendSearch\Lucene\Index\Term($options['type'], 'type'); $query->addSubquery(new \ZendSearch\Lucene\Search\Query\Term($term), true); } } // Add custom filters if (isset($options['filters']) && is_array($options['filters'])) { foreach ($options['filters'] as $field => $value) { $term = new \ZendSearch\Lucene\Index\Term($value, $field); $query->addSubquery(new \ZendSearch\Lucene\Search\Query\Term($term), true); } } if ($options['checkPermissions'] && !Yii::$app->request->isConsoleRequest) { $permissionQuery = new \ZendSearch\Lucene\Search\Query\Boolean(); if (Yii::$app->user->isGuest) { // Guest Content $guestContentQuery = new \ZendSearch\Lucene\Search\Query\Boolean(); $guestContentQuery->addSubquery(new \ZendSearch\Lucene\Search\Query\Term(new \ZendSearch\Lucene\Index\Term(self::DOCUMENT_VISIBILITY_PUBLIC, 'visibility')), true); $guestContentQuery->addSubquery(new \ZendSearch\Lucene\Search\Query\Term(new \ZendSearch\Lucene\Index\Term(self::DOCUMENT_TYPE_CONTENT, 'type')), true); $guestContentQuery->addSubquery(new \ZendSearch\Lucene\Search\Query\Term(new \ZendSearch\Lucene\Index\Term(Space::className(), 'containerModel')), true); $guestSpaceListQuery = new \ZendSearch\Lucene\Search\Query\MultiTerm(); foreach (Space::find()->where(['visibility' => Space::VISIBILITY_ALL])->all() as $space) { $guestSpaceListQuery->addTerm(new \ZendSearch\Lucene\Index\Term($space->id, 'containerPk')); } $guestContentQuery->addSubquery($guestSpaceListQuery, true); $permissionQuery->addSubquery($guestContentQuery); // Guest Spaces $guestSpacesQuery = new \ZendSearch\Lucene\Search\Query\Boolean(); $guestSpacesQuery->addSubquery(new \ZendSearch\Lucene\Search\Query\Term(new \ZendSearch\Lucene\Index\Term(self::DOCUMENT_TYPE_SPACE, 'type')), true); $guestSpacesQuery->addSubquery(new \ZendSearch\Lucene\Search\Query\Term(new \ZendSearch\Lucene\Index\Term(self::DOCUMENT_VISIBILITY_PUBLIC, 'visibility')), true); $permissionQuery->addSubquery($guestSpacesQuery); $permissionQuery->addSubquery(new \ZendSearch\Lucene\Search\Query\Term(new \ZendSearch\Lucene\Index\Term(self::DOCUMENT_TYPE_USER, 'type'))); } else { //--- Public Content $permissionQuery->addSubquery(new \ZendSearch\Lucene\Search\Query\Term(new \ZendSearch\Lucene\Index\Term(self::DOCUMENT_VISIBILITY_PUBLIC, 'visibility'))); //--- Private Space Content $privateSpaceContentQuery = new \ZendSearch\Lucene\Search\Query\Boolean(); $privateSpaceContentQuery->addSubquery(new \ZendSearch\Lucene\Search\Query\Term(new \ZendSearch\Lucene\Index\Term(self::DOCUMENT_VISIBILITY_PRIVATE, 'visibility')), true); $privateSpaceContentQuery->addSubquery(new \ZendSearch\Lucene\Search\Query\Term(new \ZendSearch\Lucene\Index\Term(Space::className(), 'containerModel')), true); $privateSpacesListQuery = new \ZendSearch\Lucene\Search\Query\MultiTerm(); foreach (\humhub\modules\space\models\Membership::GetUserSpaces() as $space) { $privateSpacesListQuery->addTerm(new \ZendSearch\Lucene\Index\Term($space->id, 'containerPk')); } $privateSpaceContentQuery->addSubquery($privateSpacesListQuery, true); $permissionQuery->addSubquery($privateSpaceContentQuery); } $query->addSubquery($permissionQuery, true); } if (count($options['limitSpaces']) > 0) { $spaceBaseQuery = new \ZendSearch\Lucene\Search\Query\Boolean(); $spaceBaseQuery->addSubquery(new \ZendSearch\Lucene\Search\Query\Term(new \ZendSearch\Lucene\Index\Term(Space::className(), 'containerModel')), true); $spaceIdQuery = new \ZendSearch\Lucene\Search\Query\MultiTerm(); foreach ($options['limitSpaces'] as $space) { $spaceIdQuery->addTerm(new \ZendSearch\Lucene\Index\Term($space->id, 'containerPk')); } $spaceBaseQuery->addSubquery($spaceIdQuery, true); $query->addSubquery($spaceBaseQuery, true); } return $query; }
/** * Delete Action * * Its only possible if the user is not owner of a workspace. */ public function actionDelete() { $isSpaceOwner = false; $user = Yii::$app->user->getIdentity(); if ($user->auth_mode != User::AUTH_MODE_LOCAL) { throw new HttpException(500, 'This is not a local account! You cannot delete it. (e.g. LDAP)!'); } foreach (\humhub\modules\space\models\Membership::GetUserSpaces() as $space) { if ($space->isSpaceOwner($user->id)) { $isSpaceOwner = true; } } $model = new \humhub\modules\user\models\forms\AccountDelete(); if (!$isSpaceOwner && $model->load(Yii::$app->request->post()) && $model->validate()) { $user->delete(); Yii::$app->user->logout(); $this->redirect(Yii::$app->homeUrl); } return $this->render('delete', array('model' => $model, 'isSpaceOwner' => $isSpaceOwner)); }
* box when the criteria is met. * * Criteria = if they're not looking * at a Space or a User and they are * a member in more than one space. * * Later on (in views/wall/widgets/contentForm.php) * we set up a listener on #post_to_space which updates * the fields that tell Humhub where the post is * originating from. */ use yii\helpers\Html; ?> <?php $userSpaces = \humhub\modules\space\models\Membership::GetUserSpaces(); if (count($userSpaces) > 1 && Yii::$app->request->get('sguid') == null && Yii::$app->request->get('uguid') == null) { $showSpacePicker = true; } else { $showSpacePicker = false; } ?> <div <?php if (!$showSpacePicker) { echo "style='display:none !important;'"; } ?> > <select id="post_to_space" class="btn-group selectpicker show-tick form-control" <?php if (!$showSpacePicker) {
protected function buildQuery($keyword, $options) { $query = new \ZendSearch\Lucene\Search\Query\Boolean(); foreach (explode(" ", $keyword) as $k) { // Require at least 3 non-wildcard characters if (strlen($k) > 2) { $term = new \ZendSearch\Lucene\Index\Term($k . "*"); $query->addSubquery(new \ZendSearch\Lucene\Search\Query\Wildcard($term), true); } } // Add model filter if (isset($options['model']) && $options['model'] != "") { if (is_array($options['model'])) { $boolQuery = new \ZendSearch\Lucene\Search\Query\MultiTerm(); foreach ($options['model'] as $model) { $boolQuery->addTerm(new \ZendSearch\Lucene\Index\Term($model, 'model')); } $query->addSubquery($boolQuery, true); } else { $term = new \ZendSearch\Lucene\Index\Term($options['model'], 'model'); $query->addSubquery(new \ZendSearch\Lucene\Search\Query\Term($term), true); } } // Add type filter if (isset($options['type']) && $options['type'] != "") { if (is_array($options['type'])) { $boolQuery = new \ZendSearch\Lucene\Search\Query\MultiTerm(); foreach ($options['type'] as $model) { $boolQuery->addTerm(new \ZendSearch\Lucene\Index\Term($type), 'type'); } $query->addSubquery($boolQuery, true); } else { $term = new \ZendSearch\Lucene\Index\Term($options['type'], 'type'); $query->addSubquery(new \ZendSearch\Lucene\Search\Query\Term($term), true); } } if ($options['checkPermissions'] && !Yii::$app->request->isConsoleRequest) { $permissionQuery = new \ZendSearch\Lucene\Search\Query\Boolean(); //--- Public Content $permissionQuery->addSubquery(new \ZendSearch\Lucene\Search\Query\Term(new \ZendSearch\Lucene\Index\Term(self::DOCUMENT_VISIBILITY_PUBLIC, 'visibility'))); //--- Private Space Content $privateSpaceContentQuery = new \ZendSearch\Lucene\Search\Query\Boolean(); $privateSpaceContentQuery->addSubquery(new \ZendSearch\Lucene\Search\Query\Term(new \ZendSearch\Lucene\Index\Term(self::DOCUMENT_VISIBILITY_PRIVATE, 'visibility')), true); $privateSpaceContentQuery->addSubquery(new \ZendSearch\Lucene\Search\Query\Term(new \ZendSearch\Lucene\Index\Term(Space::className(), 'containerModel')), true); $privateSpacesListQuery = new \ZendSearch\Lucene\Search\Query\MultiTerm(); foreach (\humhub\modules\space\models\Membership::GetUserSpaces() as $space) { $privateSpacesListQuery->addTerm(new \ZendSearch\Lucene\Index\Term($space->id, 'containerPk')); } $privateSpaceContentQuery->addSubquery($privateSpacesListQuery, true); $permissionQuery->addSubquery($privateSpaceContentQuery); $query->addSubquery($permissionQuery, true); } if (count($options['limitSpaces']) > 0) { $spaceBaseQuery = new \ZendSearch\Lucene\Search\Query\Boolean(); $spaceBaseQuery->addSubquery(new \ZendSearch\Lucene\Search\Query\Term(new \ZendSearch\Lucene\Index\Term(Space::className(), 'containerModel')), true); $spaceIdQuery = new \ZendSearch\Lucene\Search\Query\MultiTerm(); foreach ($options['limitSpaces'] as $space) { $spaceIdQuery->addTerm(new \ZendSearch\Lucene\Index\Term($space->id, 'containerPk')); } $spaceBaseQuery->addSubquery($spaceIdQuery, true); $query->addSubquery($spaceBaseQuery, true); } return $query; }