Added space About page

This commit is contained in:
Faeze Moradi 2020-10-06 23:01:59 +02:00
parent dfa2bab027
commit 2866559aac
3 changed files with 160 additions and 1 deletions

View File

@ -43,7 +43,7 @@ class SpaceController extends ContentContainerController
return [
'acl' => [
'class' => AccessControl::class,
'guestAllowedActions' => ['index', 'home', 'stream'],
'guestAllowedActions' => ['index', 'home', 'stream', 'about'],
]
];
}
@ -166,4 +166,17 @@ class SpaceController extends ContentContainerController
return $this->renderAjaxContent(UserListBox::widget(['query' => $query, 'title' => $title]));
}
/**
* About space page
*/
public function actionAbout()
{
$space = $this->getSpace();
return $this->render('about', [
'space' => $space,
'userGroups' => $space->getPrivilegedGroupUsers(),
]);
}
}

View File

@ -36,6 +36,7 @@ use humhub\modules\user\models\Invite;
use humhub\modules\user\models\Group;
use humhub\modules\space\widgets\Wall;
use humhub\modules\space\widgets\Members;
use humhub\modules\user\models\User as UserModel;
use Yii;
/**
@ -186,6 +187,30 @@ class Space extends ContentContainerActiveRecord implements Searchable
];
}
/**
* @return array
*/
public static function visibilityOptions()
{
return [
self::VISIBILITY_NONE => Yii::t('SpaceModule.base', 'Private (Invisible)'),
self::VISIBILITY_REGISTERED_ONLY => Yii::t('SpaceModule.base', 'Public (Registered users only)'),
self::VISIBILITY_ALL => Yii::t('SpaceModule.base', 'Visible for all (members and guests)'),
];
}
/**
* @return array
*/
public static function joinPolicyOptions()
{
return [
self::JOIN_POLICY_NONE => Yii::t('SpaceModule.base', 'Only by invite'),
self::JOIN_POLICY_APPLICATION => Yii::t('SpaceModule.base', 'Invite and request'),
self::JOIN_POLICY_FREE => Yii::t('SpaceModule.base', 'Everyone can enter'),
];
}
/**
* @inheritdoc
*/
@ -635,4 +660,27 @@ class Space extends ContentContainerActiveRecord implements Searchable
return Content::VISIBILITY_PRIVATE;
}
/**
* Returns space privileged groups and their members` User model in array
*
* @return array
*/
public function getPrivilegedGroupUsers()
{
$owner = $this->getOwnerUser()->one();
$groups[self::USERGROUP_OWNER][] = $owner;
$query = Membership::find()->joinWith('user');
$query->andWhere(['IN', 'group_id', [self::USERGROUP_ADMIN, self::USERGROUP_MODERATOR]]);
$query->andWhere('space_id = ' . $this->id);
$query->andWhere('user_id != ' . $owner->id);
$query->andWhere(['user.status' => UserModel::STATUS_ENABLED]);
$query->orderBy(new \yii\db\Expression('FIELD(space_membership.group_id, "' . self::USERGROUP_ADMIN . '", "' . self::USERGROUP_MODERATOR . '")'));
foreach ($query->all() as $membership) {
$groups[$membership->group_id][] = $membership->user;
}
return $groups;
}
}

View File

@ -0,0 +1,98 @@
<?php
use humhub\modules\space\models\Space;
use humhub\modules\space\widgets\AboutPageSidebar;
use humhub\modules\content\widgets\richtext\RichText;
use humhub\modules\user\widgets\Image;
?>
<div class="panel panel-default">
<div class="panel-heading">
<?= Yii::t('SpaceModule.base', '<strong>About Space</strong>') ?>
</div>
<div class="panel-body">
<?php if ($space->summary || $space->description):?>
<div>
<?= Yii::t('SpaceModule.base', '<strong>Description</strong>') ?>
<div data-ui-markdown data-ui-show-more
data-read-more-text="<?= Yii::t('SpaceModule.base', 'Read More') ?>">
<?= RichText::output(empty($space->summary) ? $space->description : $space->summary) ?>
</div>
</div>
<br>
<?php endif;?>
<div>
<?= Yii::t('SpaceModule.base', '<strong>Contact Persons</strong>') ?>
<?php if (!empty($userGroups[Space::USERGROUP_OWNER])): ?>
<div class="media">
<div class="media-heading"><?= Yii::t('SpaceModule.base', 'Owner'); ?>
(<?= count($userGroups[Space::USERGROUP_OWNER]) ?>)
</div>
<div class="media-body">
<?php foreach ($userGroups[Space::USERGROUP_OWNER] as $user) {
echo Image::widget([
'user' => $user, 'width' => 32,
'htmlOptions' => ['style' => 'padding: 3px'],
'imageOptions' => ['style' => 'border:1px solid ' . $this->theme->variable('success')]
]);
}
?>
</div>
</div>
<?php endif; ?>
<?php if (!empty($userGroups[Space::USERGROUP_ADMIN])): ?>
<div class="media">
<div class="media-heading"><?= Yii::t('SpaceModule.base', 'Admins'); ?>
(<?= count($userGroups[Space::USERGROUP_ADMIN]) ?>)
</div>
<div class="media-body">
<?php foreach ($userGroups[Space::USERGROUP_ADMIN] as $user) {
echo Image::widget([
'user' => $user, 'width' => 32,
'htmlOptions' => ['style' => 'padding: 3px'],
'imageOptions' => ['style' => 'border:1px solid ' . $this->theme->variable('success')]
]);
}
?>
</div>
</div>
<?php endif; ?>
<?php if (!empty($userGroups[Space::USERGROUP_MODERATOR])): ?>
<div class="media">
<div class="media-heading"><?= Yii::t('SpaceModule.base', 'Moderators'); ?>
(<?= count($userGroups[Space::USERGROUP_MODERATOR]) ?>)
</div>
<div class="media-body">
<?php foreach ($userGroups[Space::USERGROUP_MODERATOR] as $user) {
echo Image::widget([
'user' => $user, 'width' => 32,
'htmlOptions' => ['style' => 'padding: 3px'],
'imageOptions' => ['style' => 'border:1px solid ' . $this->theme->variable('success')]
]);
}
?>
</div>
</div>
<?php endif; ?>
</div>
<br>
<div>
<?= Yii::t('SpaceModule.base', '<strong>Security Settings</strong>'); ?>
<div>
<h5><?= Yii::t('SpaceModule.base', 'Join Policy')?></h5>
<i class="fa fa-users"></i>
<?= Space::joinPolicyOptions()[$space->join_policy] ?>
<h5><?= Yii::t('SpaceModule.base', 'Space Visibility')?></h5>
<i class="fa fa-globe"></i>
<?= Space::visibilityOptions()[$space->visibility] ?>
</div>
</div>
</div>
</div>
<?php $this->beginBlock('sidebar');
echo AboutPageSidebar::widget(['space' => $space]);
$this->endBlock(); ?>