Example #1
1
 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;
 }
Example #3
0
 /**
  * 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()));
 }
Example #6
0
 /**
  * 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));
 }
Example #8
0
 /**
  * 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));
 }
Example #9
0
 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));
 }
Example #11
0
 * 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;
 }