Added space pretty urls, cleanup space controls menu

This commit is contained in:
Lucas Bartholemy 2016-05-10 02:09:39 +02:00
parent 81446fa858
commit 21dab558df
18 changed files with 427 additions and 144 deletions

View File

@ -23,6 +23,7 @@
"cebe/markdown": "1.0.2",
"yiisoft/yii2-jui": "^2.0",
"zendframework/zend-http": "*",
"jbroadway/urlify": "^1.0",
"nqxcode/zendsearch": "^2.0",
"xj/yii2-jplayer-widget": "*",
"zendframework/zend-ldap": "^2.5",

View File

@ -15,6 +15,11 @@ Here you will learn how you can adapt existing modules to working fine with actu
- system_admin attribute in user table was removed
- Renamed space header settings menu dropdown class
from humhub\modules\space\modules\manage\widgets\Menu to humhub\modules\space\widgets\HeaderControlMenu
## to 0.20

View File

@ -2,13 +2,12 @@
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2015 HumHub GmbH & Co. KG
* @copyright Copyright (c) 2016 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\space\components;
use yii\helpers\Url;
use yii\web\UrlRuleInterface;
use yii\base\Object;
use humhub\modules\space\models\Space;
@ -26,6 +25,11 @@ class UrlRule extends Object implements UrlRuleInterface
*/
public $defaultRoute = 'space/space';
/**
* @var array map with space guid/url pairs
*/
protected static $spaceUrlMap = [];
/**
* @inheritdoc
*/
@ -35,13 +39,17 @@ class UrlRule extends Object implements UrlRuleInterface
if ($route == $this->defaultRoute) {
$route = '';
}
$url = "s/" . urlencode($params['sguid']) . "/" . $route;
unset($params['sguid']);
if (!empty($params) && ($query = http_build_query($params)) !== '') {
$url .= '?' . $query;
$urlPart = static::getUrlBySpaceGuid($params['sguid']);
if ($urlPart !== null) {
$url = "s/" . urlencode($urlPart) . "/" . $route;
unset($params['sguid']);
if (!empty($params) && ($query = http_build_query($params)) !== '') {
$url .= '?' . $query;
}
return $url;
}
return $url;
}
return false;
}
@ -55,7 +63,7 @@ class UrlRule extends Object implements UrlRuleInterface
if (substr($pathInfo, 0, 2) == "s/") {
$parts = explode('/', $pathInfo, 3);
if (isset($parts[1])) {
$space = Space::find()->where(['guid' => $parts[1]])->one();
$space = Space::find()->where(['guid' => $parts[1]])->orWhere(['url' => $parts[1]])->one();
if ($space !== null) {
if (!isset($parts[2]) || $parts[2] == "") {
$parts[2] = $this->defaultRoute;
@ -71,4 +79,25 @@ class UrlRule extends Object implements UrlRuleInterface
return false;
}
/**
* Gets space url name by given guid
*
* @param string $guid
* @return string|null the space url part
*/
public static function getUrlBySpaceGuid($guid)
{
if (isset(static::$spaceUrlMap[$guid])) {
return static::$spaceUrlMap[$guid];
}
$space = Space::findOne(['guid' => $guid]);
if ($space !== null) {
static::$spaceUrlMap[$space->guid] = ($space->url != '') ? $space->url : $space->guid;
return static::$spaceUrlMap[$space->guid];
}
return null;
}
}

View File

@ -0,0 +1,71 @@
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2016 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\space\components;
use Yii;
use yii\validators\Validator;
use URLify;
use humhub\modules\space\models\Space;
/**
* UrlValidator for space urls
*
* @since 1.1
* @author Luke
*/
class UrlValidator extends Validator
{
/**
* @inheritdoc
*/
public function validateAttribute($model, $attribute)
{
$value = $model->$attribute;
if (mb_strtolower($value) != URLify::filter($value, 45)) {
$this->addError($model, $attribute, Yii::t('SpaceModule.manage', 'The url contains illegal characters!'));
}
}
/**
* Generate a unique space url
*
* @param string $name
* @return string a unique space url
*/
public static function autogenerateUniqueSpaceUrl($name)
{
$maxUrlLength = 45;
$url = URLify::filter($name, $maxUrlLength - 4);
// Get a list of all similar space urls
$existingSpaceUrls = [];
foreach (Space::find()->where(['LIKE', 'url', $url . '%', false])->all() as $space) {
$existingSpaceUrls[] = $space->url;
}
// Url is free
if (!in_array($url, $existingSpaceUrls)) {
return $url;
}
// Add number to taken url
for ($i = 0; $i <= count($existingSpaceUrls); $i++) {
$tryUrl = $url . ($i + 2);
if (!in_array($tryUrl, $existingSpaceUrls)) {
return $tryUrl;
}
}
// Shouldn't never happen - failed
return "";
}
}

View File

@ -0,0 +1,41 @@
<?php
use yii\db\Query;
use humhub\components\Migration;
class m160509_214811_spaceurl extends Migration
{
public function up()
{
$this->addColumn('space', 'url', $this->string(45));
$this->createIndex('url-unique', 'space', 'url', true);
$rows = (new Query())
->select("*")
->from('space')
->all();
foreach ($rows as $row) {
$url = \humhub\modules\space\components\UrlValidator::autogenerateUniqueSpaceUrl($row['name']);
$this->updateSilent('space', ['url' => $url], ['id' => $row['id']]);
}
}
public function down()
{
echo "m160509_214811_spaceurl cannot be reverted.\n";
return false;
}
/*
// Use safeUp/safeDown to run migration code within a transaction
public function safeUp()
{
}
public function safeDown()
{
}
*/
}

View File

@ -12,6 +12,7 @@ use Yii;
use humhub\modules\space\models\Membership;
use humhub\modules\space\permissions\CreatePrivateSpace;
use humhub\modules\space\permissions\CreatePublicSpace;
use humhub\modules\space\components\UrlValidator;
use humhub\modules\content\models\Content;
use humhub\modules\content\components\ContentContainerActiveRecord;
use humhub\modules\user\models\User;
@ -24,6 +25,7 @@ use humhub\modules\user\models\User;
* @property integer $wall_id
* @property string $name
* @property string $description
* @property string $url
* @property integer $join_policy
* @property integer $visibility
* @property integer $status
@ -61,7 +63,7 @@ class Space extends ContentContainerActiveRecord implements \humhub\modules\sear
/**
* Contains the form value for indexUrl setting
* @var type
* @var string|null
*/
public $indexUrl = null;
@ -87,10 +89,12 @@ class Space extends ContentContainerActiveRecord implements \humhub\modules\sear
[['join_policy'], 'in', 'range' => [0, 1, 2]],
[['visibility'], 'in', 'range' => [0, 1, 2]],
[['visibility'], 'checkVisibility'],
[['guid', 'name'], 'string', 'max' => 45],
[['url'], 'unique', 'skipOnEmpty' => 'true'],
[['guid', 'name', 'url'], 'string', 'max' => 45, 'min' => 2],
[['url'], UrlValidator::className()],
];
if(Yii::$app->getModule('space')->useUniqueSpaceNames) {
if (Yii::$app->getModule('space')->useUniqueSpaceNames) {
$rules[] = [['name'], 'unique', 'targetClass' => self::className()];
}
return $rules;
@ -103,7 +107,7 @@ class Space extends ContentContainerActiveRecord implements \humhub\modules\sear
{
$scenarios = parent::scenarios();
$scenarios['edit'] = ['name', 'color', 'description', 'tags', 'indexUrl', 'join_policy', 'visibility', 'default_content_visibility'];
$scenarios['edit'] = ['name', 'color', 'description', 'tags', 'indexUrl', 'join_policy', 'visibility', 'default_content_visibility', 'url'];
$scenarios['create'] = ['name', 'color', 'description', 'join_policy', 'visibility'];
return $scenarios;
@ -129,6 +133,7 @@ class Space extends ContentContainerActiveRecord implements \humhub\modules\sear
'updated_at' => Yii::t('SpaceModule.models_Space', 'Updated At'),
'updated_by' => Yii::t('SpaceModule.models_Space', 'Updated by'),
'ownerUsernameSearch' => Yii::t('SpaceModule.models_Space', 'Owner'),
'indexUrl' => Yii::t('SpaceModule.models_Space', 'Homepage'),
);
}
@ -172,7 +177,7 @@ class Space extends ContentContainerActiveRecord implements \humhub\modules\sear
$activity->create();
}
if($this->indexUrl != null) {
if ($this->indexUrl != null) {
Yii::$app->getModule('space')->settings->contentContainer($this)->set('indexUrl', $this->indexUrl);
} else {
//Remove entry from db
@ -182,6 +187,24 @@ class Space extends ContentContainerActiveRecord implements \humhub\modules\sear
Yii::$app->cache->delete('userSpaces_' . $user->id);
}
/**
* @inheritdoc
*/
public function beforeSave($insert)
{
if ($insert) {
$this->url = UrlValidator::autogenerateUniqueSpaceUrl($this->name);
}
if ($this->url == '') {
$this->url = new \yii\db\Expression('NULL');
} else {
$this->url = mb_strtolower($this->url);
}
return parent::beforeSave($insert);
}
/**
* @inheritdoc
*/
@ -268,7 +291,6 @@ class Space extends ContentContainerActiveRecord implements \humhub\modules\sear
return false;
}
/**
* Checks if given user can invite people to this workspace
* Note: use directly permission instead
@ -452,8 +474,7 @@ class Space extends ContentContainerActiveRecord implements \humhub\modules\sear
{
$status = ($status == null) ? Membership::STATUS_MEMBER : $status;
$query = User::find();
$query->leftJoin('space_membership', 'space_membership.user_id=user.id AND space_membership.space_id=:space_id AND space_membership.status=:member',
['space_id' => $this->id, 'member' => $status]);
$query->leftJoin('space_membership', 'space_membership.user_id=user.id AND space_membership.space_id=:space_id AND space_membership.status=:member', ['space_id' => $this->id, 'member' => $status]);
$query->andWhere('space_membership.space_id IS NOT NULL');
$query->addOrderBy(['space_membership.group_id' => SORT_DESC]);
return $query;
@ -462,8 +483,7 @@ class Space extends ContentContainerActiveRecord implements \humhub\modules\sear
public function getNonMembershipUser()
{
$query = User::find();
$query->leftJoin('space_membership', 'space_membership.user_id=user.id AND space_membership.space_id=:space_id ',
['space_id' => $this->id]);
$query->leftJoin('space_membership', 'space_membership.user_id=user.id AND space_membership.space_id=:space_id ', ['space_id' => $this->id]);
$query->andWhere('space_membership.space_id IS NULL');
$query->orWhere(['!=', 'space_membership.status', Membership::STATUS_MEMBER]);
$query->addOrderBy(['space_membership.group_id' => SORT_DESC]);
@ -538,4 +558,5 @@ class Space extends ContentContainerActiveRecord implements \humhub\modules\sear
return Content::VISIBILITY_PRIVATE;
}
}

View File

@ -28,12 +28,24 @@ class DefaultController extends Controller
{
$space = $this->contentContainer;
$space->scenario = 'edit';
$space->indexUrl = Yii::$app->settings->get($space->id, 'indexUrl');
if ($space->load(Yii::$app->request->post()) && $space->validate() && $space->save()) {
Yii::$app->getSession()->setFlash('data-saved', Yii::t('SpaceModule.controllers_AdminController', 'Saved'));
return $this->redirect($space->createUrl('index'));
}
return $this->render('index', ['model' => $space]);
}
public function actionAdvanced()
{
$space = $this->contentContainer;
$space->scenario = 'edit';
$space->indexUrl = Yii::$app->settings->get($space->id, 'indexUrl');
if ($space->load(Yii::$app->request->post()) && $space->validate() && $space->save()) {
Yii::$app->getSession()->setFlash('data-saved', Yii::t('SpaceModule.controllers_AdminController', 'Saved'));
return $this->redirect($space->createUrl('advanced'));
}
$indexModuleSelection = SpacePages::getAvailablePages();
@ -41,24 +53,7 @@ class DefaultController extends Controller
array_shift($indexModuleSelection);
$indexModuleSelection = ["" => Yii::t('SpaceModule.controllers_AdminController', 'Stream (Default)')] + $indexModuleSelection;
return $this->render('index', ['model' => $space, 'indexModuleSelection' => $indexModuleSelection]);
}
/**
* Security settings
*/
public function actionSecurity()
{
$space = $this->contentContainer;
$space->scenario = 'edit';
if ($space->load(Yii::$app->request->post()) && $space->validate() && $space->save()) {
Yii::$app->getSession()->setFlash('data-saved', Yii::t('SpaceModule.controllers_AdminController', 'Saved'));
return $this->redirect($space->createUrl('security'));
}
return $this->render('security', array('model' => $space));
return $this->render('advanced', ['model' => $space, 'indexModuleSelection' => $indexModuleSelection]);
}
/**

View File

@ -155,37 +155,6 @@ class MemberController extends Controller
return $this->htmlRedirect($space->createUrl('/space/manage/member'));
}
/**
* Shows space permessions
*/
public function actionPermissions()
{
$space = $this->getSpace();
$groups = $space->getUserGroups();
$groupId = Yii::$app->request->get('groupId', Space::USERGROUP_MEMBER);
if (!array_key_exists($groupId, $groups)) {
throw new HttpException(500, 'Invalid group id given!');
}
// Handle permission state change
if (Yii::$app->request->post('dropDownColumnSubmit')) {
Yii::$app->response->format = 'json';
$permission = $space->permissionManager->getById(Yii::$app->request->post('permissionId'), Yii::$app->request->post('moduleId'));
if ($permission === null) {
throw new \yii\web\HttpException(500, 'Could not find permission!');
}
$space->permissionManager->setGroupState($groupId, $permission, Yii::$app->request->post('state'));
return [];
}
return $this->render('permissions', array(
'space' => $space,
'groups' => $groups,
'groupId' => $groupId
));
}
/**
* Change owner
*/

View File

@ -0,0 +1,70 @@
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2016 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\space\modules\manage\controllers;
use Yii;
use humhub\modules\space\modules\manage\components\Controller;
use humhub\modules\space\models\Space;
use yii\web\HttpException;
/**
* SecurityController
*
* @since 1.1
* @author Luke
*/
class SecurityController extends Controller
{
public function actionIndex()
{
$space = $this->contentContainer;
$space->scenario = 'edit';
if ($space->load(Yii::$app->request->post()) && $space->validate() && $space->save()) {
Yii::$app->getSession()->setFlash('data-saved', Yii::t('SpaceModule.controllers_AdminController', 'Saved'));
return $this->redirect($space->createUrl('security'));
}
return $this->render('index', ['model' => $space]);
}
/**
* Shows space permessions
*/
public function actionPermissions()
{
$space = $this->getSpace();
$groups = $space->getUserGroups();
$groupId = Yii::$app->request->get('groupId', Space::USERGROUP_MEMBER);
if (!array_key_exists($groupId, $groups)) {
throw new HttpException(500, 'Invalid group id given!');
}
// Handle permission state change
if (Yii::$app->request->post('dropDownColumnSubmit')) {
Yii::$app->response->format = 'json';
$permission = $space->permissionManager->getById(Yii::$app->request->post('permissionId'), Yii::$app->request->post('moduleId'));
if ($permission === null) {
throw new \yii\web\HttpException(500, 'Could not find permission!');
}
$space->permissionManager->setGroupState($groupId, $permission, Yii::$app->request->post('state'));
return [];
}
return $this->render('permissions', array(
'space' => $space,
'groups' => $groups,
'groupId' => $groupId
));
}
}
?>

View File

@ -0,0 +1,45 @@
<?php
use yii\bootstrap\ActiveForm;
use yii\helpers\Html;
use yii\helpers\Url;
use humhub\modules\space\models\Space;
use humhub\modules\space\modules\manage\widgets\DefaultMenu;
?>
<div class="panel panel-default">
<div>
<div class="panel-heading">
<?php echo Yii::t('SpaceModule.views_settings', '<strong>Space</strong> settings'); ?>
</div>
</div>
<?= DefaultMenu::widget(['space' => $model]); ?>
<div class="panel-body">
<?php $form = ActiveForm::begin(['options' => ['id' => 'spaceIndexForm'], 'enableClientValidation' => false]); ?>
<?php if (Yii::$app->urlManager->enablePrettyUrl): ?>
<?php echo $form->field($model, 'url')->hint(Yii::t('SpaceModule.manage', 'e.g. example for {baseUrl}/s/example', ['baseUrl' => Url::base(true)])); ?>
<?php endif; ?>
<?php echo $form->field($model, 'indexUrl')->dropDownList($indexModuleSelection)->hint('') ?>
<?php echo Html::submitButton(Yii::t('SpaceModule.views_admin_edit', 'Save'), array('class' => 'btn btn-primary', 'data-ui-loader' => '')); ?>
<?php echo \humhub\widgets\DataSaved::widget(); ?>
<div class="pull-right">
<?php if ($model->status == Space::STATUS_ENABLED) { ?>
<?php echo Html::a(Yii::t('SpaceModule.views_admin_edit', 'Archive'), $model->createUrl('/space/manage/default/archive'), array('class' => 'btn btn-warning', 'data-post' => 'POST')); ?>
<?php } elseif ($model->status == Space::STATUS_ARCHIVED) { ?>
<?php echo Html::a(Yii::t('SpaceModule.views_admin_edit', 'Unarchive'), $model->createUrl('/space/manage/default/unarchive'), array('class' => 'btn btn-warning', 'data-post' => 'POST')); ?>
<?php } ?>
</div>
<?php ActiveForm::end(); ?>
</div>
</div>

View File

@ -14,21 +14,17 @@ $this->registerCssFile('@web/resources/space/colorpicker/css/bootstrap-colorpick
<div>
<div class="panel-heading">
<?php echo Yii::t('SpaceModule.views_settings', '<strong>Space</strong> settings'); ?>
<?php echo Yii::t('SpaceModule.views_settings', '<strong>Space</strong> settings'); ?>
</div>
</div>
<?= DefaultMenu::widget(['space' => $model]); ?>
<div class="panel-body">
<?php $form = ActiveForm::begin(['options' => ['id' => 'spaceIndexForm']]); ?>
<div class="form-group space-color-chooser-edit" style="margin-top: 5px;">
<?= Html::activeTextInput($model, 'color', ['class' => 'form-control', 'id' => 'space-color-picker-edit', 'value' => $model->color, 'style' => 'display:none']); ?>
<!-- ?= Html::activeTextInput($model, 'name' , ['class' => 'form-control', 'id' => 'space-name', 'placeholder' => Yii::t('SpaceModule.views_create_create', 'space name'), 'maxlength' => 45]) ?-->
<?= $form->field($model, 'name', [ 'template' => '
<?php $form = ActiveForm::begin(['options' => ['id' => 'spaceIndexForm'], 'enableClientValidation' => false]); ?>
<div class="form-group space-color-chooser-edit" style="margin-top: 5px;">
<?= Html::activeTextInput($model, 'color', ['class' => 'form-control', 'id' => 'space-color-picker-edit', 'value' => $model->color, 'style' => 'display:none']); ?>
<?= $form->field($model, 'name', [ 'template' => '
{label}
<div class="input-group">
<span class="input-group-addon">
@ -38,15 +34,12 @@ $this->registerCssFile('@web/resources/space/colorpicker/css/bootstrap-colorpick
</input>
</div>
{error}{hint}'])->textInput() ?>
</div>
</div>
<?php echo $form->field($model, 'description')->textarea(['rows' => 6]); ?>
<div class="row">
<div class="col-md-3">
<?php echo $form->field($model, 'indexUrl')->dropDownList($indexModuleSelection) ?>
</div>
<div class="col-md-9">
<?php echo $form->field($model, 'tags')->textInput(['maxlength' => 200]); ?>
</div>
@ -58,11 +51,9 @@ $this->registerCssFile('@web/resources/space/colorpicker/css/bootstrap-colorpick
<?php echo \humhub\widgets\DataSaved::widget(); ?>
<div class="pull-right">
<?php if ($model->status == Space::STATUS_ENABLED) { ?>
<?php echo Html::a(Yii::t('SpaceModule.views_admin_edit', 'Archive'), $model->createUrl('/space/manage/default/archive'), array('class' => 'btn btn-warning', 'data-post' => 'POST')); ?>
<?php } elseif ($model->status == Space::STATUS_ARCHIVED) { ?>
<?php echo Html::a(Yii::t('SpaceModule.views_admin_edit', 'Unarchive'), $model->createUrl('/space/manage/default/unarchive'), array('class' => 'btn btn-warning', 'data-post' => 'POST')); ?>
<?php } ?>
<?php if ($model->isSpaceOwner()) : ?>
<?php echo Html::a(Yii::t('SpaceModule.views_admin_edit', 'Delete'), $model->createUrl('delete'), array('class' => 'btn btn-danger', 'data-post' => 'POST')); ?>
<?php endif; ?>
</div>
<?php ActiveForm::end(); ?>
@ -74,7 +65,7 @@ $this->registerCssFile('@web/resources/space/colorpicker/css/bootstrap-colorpick
// prevent enter key and simulate ajax button submit click
$(document).ready(function () {
var $colorPickerHexInput, picker;
$('.space-color-chooser-edit').colorpicker({
format: 'hex',
color: '<?= $model->color; ?>',
@ -85,37 +76,37 @@ $this->registerCssFile('@web/resources/space/colorpicker/css/bootstrap-colorpick
});
//Add hex input field to color picker
$('.space-color-chooser-edit').on('create', function() {
if(typeof $colorPickerHexInput === 'undefined') {
$('.space-color-chooser-edit').on('create', function () {
if (typeof $colorPickerHexInput === 'undefined') {
picker = $(this).data('colorpicker');
$colorPickerHexInput = $('<input type="text" style="border:0px;outline: none;" id="colorPickerHexInput" value="'+picker.color.toHex()+'"></input>');
$colorPickerHexInput = $('<input type="text" style="border:0px;outline: none;" id="colorPickerHexInput" value="' + picker.color.toHex() + '"></input>');
picker.picker.append($colorPickerHexInput);
$colorPickerHexInput.on('change', function() {
$colorPickerHexInput.on('change', function () {
picker.color.setColor($(this).val());
picker.update();
});
$colorPickerHexInput.on('keydown', function(e) {
var keyCode = e.keyCode || e.which;
$colorPickerHexInput.on('keydown', function (e) {
var keyCode = e.keyCode || e.which;
//Close On Tab
if (keyCode === 9) {
e.preventDefault();
picker.hide();
$('#space-name').focus();
}
});
if (keyCode === 9) {
e.preventDefault();
picker.hide();
$('#space-name').focus();
}
});
}
});
$('.colorpicker').on('click', function() {
$('.colorpicker').on('click', function () {
$colorPickerHexInput.select();
});
$('.space-color-chooser-edit').on('showPicker', function() {
$('.space-color-chooser-edit').on('showPicker', function () {
$colorPickerHexInput.select();
});
$('.space-color-chooser-edit').on('changeColor', function() {
$('.space-color-chooser-edit').on('changeColor', function () {
$colorPickerHexInput.val(picker.color.toHex());
});
});

View File

@ -2,18 +2,18 @@
use yii\bootstrap\ActiveForm;
use yii\helpers\Html;
use \humhub\models\Setting;
use humhub\modules\space\modules\manage\widgets\DefaultMenu;
use humhub\modules\space\modules\manage\widgets\SecurityTabMenu;
?>
<div class="panel panel-default">
<div>
<div class="panel-heading">
<?php echo Yii::t('SpaceModule.views_settings', '<strong>Space</strong> settings'); ?>
<?php echo Yii::t('SpaceModule.views_settings', '<strong>Security</strong> settings'); ?>
</div>
</div>
<?= DefaultMenu::widget(['space' => $model]); ?>
<?= SecurityTabMenu::widget(['space' => $model]); ?>
<div class="panel-body">
<?php $form = ActiveForm::begin(); ?>

View File

@ -1,15 +1,18 @@
<?php
use yii\helpers\Html;
use humhub\modules\space\modules\manage\widgets\MemberMenu;
use humhub\modules\user\widgets\PermissionGridEditor;
use humhub\modules\space\modules\manage\widgets\SecurityTabMenu;
?>
<div class="panel panel-default">
<div class="panel-heading">
<?php echo Yii::t('SpaceModule.views_admin_members', '<strong>Manage</strong> members'); ?>
<div>
<div class="panel-heading">
<?php echo Yii::t('SpaceModule.views_settings', '<strong>Security</strong> settings'); ?>
</div>
</div>
<?= MemberMenu::widget(['space' => $space]); ?>
<?= SecurityTabMenu::widget(['space' => $space]); ?>
<div class="panel-body">
<?php
echo Yii::t('SpaceModule.views_admin_members', '<strong>Current Group:</strong>');

View File

@ -36,16 +36,10 @@ class DefaultMenu extends \humhub\widgets\BaseMenu
'isActive' => (Yii::$app->controller->id == 'default' && Yii::$app->controller->action->id == 'index'),
));
$this->addItem(array(
'label' => Yii::t('AdminModule.manage', 'Security'),
'url' => $this->space->createUrl('/space/manage/default/security'),
'label' => Yii::t('AdminModule.manage', 'Advanced'),
'url' => $this->space->createUrl('/space/manage/default/advanced'),
'sortOrder' => 200,
'isActive' => (Yii::$app->controller->id == 'default' && Yii::$app->controller->action->id == 'security'),
));
$this->addItem(array(
'label' => Yii::t('AdminModule.manage', 'Delete'),
'url' => $this->space->createUrl('/space/manage/default/delete'),
'sortOrder' => 500,
'isActive' => (Yii::$app->controller->id == 'default' && Yii::$app->controller->action->id == 'delete'),
'isActive' => (Yii::$app->controller->id == 'default' && Yii::$app->controller->action->id == 'advanced'),
));
parent::init();
}

View File

@ -30,33 +30,27 @@ class MemberMenu extends \humhub\widgets\BaseMenu
{
$this->addItem(array(
'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu','Members'),
'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu', 'Members'),
'url' => $this->space->createUrl('/space/manage/member/index'),
'sortOrder' => 100,
'isActive' => (Yii::$app->controller->action->id == 'index' && Yii::$app->controller->id === 'member'),
));
$this->addItem(array(
'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu','Pending Invites'),
'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu', 'Pending Invites'),
'url' => $this->space->createUrl('/space/manage/member/pending-invitations'),
'sortOrder' => 200,
'isActive' => (Yii::$app->controller->action->id == 'pending-invitations'),
));
$this->addItem(array(
'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu','Pending Approvals'),
'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu', 'Pending Approvals'),
'url' => $this->space->createUrl('/space/manage/member/pending-approvals'),
'sortOrder' => 300,
'isActive' => (Yii::$app->controller->action->id == 'pending-approvals'),
));
$this->addItem(array(
'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu','Permissions'),
'url' => $this->space->createUrl('/space/manage/member/permissions'),
'sortOrder' => 400,
'isActive' => (Yii::$app->controller->action->id == 'permissions'),
));
if ($this->space->isSpaceOwner()) {
$this->addItem(array(
'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu','Owner'),
'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu', 'Owner'),
'url' => $this->space->createUrl('/space/manage/member/change-owner'),
'sortOrder' => 500,
'isActive' => (Yii::$app->controller->action->id == 'change-owner'),

View File

@ -0,0 +1,45 @@
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2015 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\space\modules\manage\widgets;
use Yii;
/**
* Space Administration Menu
*
* @author Luke
*/
class SecurityTabMenu extends \humhub\widgets\BaseMenu
{
public $template = "@humhub/widgets/views/tabMenu";
/**
* @var \humhub\modules\space\models\Space
*/
public $space;
public function init()
{
$this->addItem(array(
'label' => Yii::t('AdminModule.manage', 'General'),
'url' => $this->space->createUrl('/space/manage/security'),
'sortOrder' => 100,
'isActive' => (Yii::$app->controller->id == 'security' && Yii::$app->controller->action->id == 'index'),
));
$this->addItem(array(
'label' => Yii::t('AdminModule.manage', 'Permissions'),
'url' => $this->space->createUrl('/space/manage/security/permissions'),
'sortOrder' => 200,
'isActive' => (Yii::$app->controller->id == 'security' && Yii::$app->controller->action->id == 'permissions'),
));
parent::init();
}
}

View File

@ -2,11 +2,11 @@
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2015 HumHub GmbH & Co. KG
* @copyright Copyright (c) 2016 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\space\modules\manage\widgets;
namespace humhub\modules\space\widgets;
use Yii;
use \yii\base\Widget;
@ -18,7 +18,7 @@ use \yii\base\Widget;
* @package humhub.modules_core.space.widgets
* @since 0.5
*/
class Menu extends \humhub\widgets\BaseMenu
class HeaderControlsMenu extends \humhub\widgets\BaseMenu
{
public $space;
@ -37,14 +37,23 @@ class Menu extends \humhub\widgets\BaseMenu
if ($this->space->isAdmin()) {
$this->addItem(array(
'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'General'),
'label' => Yii::t('SpaceModule.base', 'Settings'),
'group' => 'admin',
'url' => $this->space->createUrl('/space/manage'),
'icon' => '<i class="fa fa-cogs"></i>',
'sortOrder' => 100,
'isActive' => (Yii::$app->controller->id == "default"),
));
$this->addItem(array(
'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Security'),
'group' => 'admin',
'url' => $this->space->createUrl('/space/manage/security'),
'icon' => '<i class="fa fa-lock"></i>',
'sortOrder' => 200,
'isActive' => (Yii::$app->controller->id == "security"),
));
$this->addItem(array(
'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Members'),
'group' => 'admin',
@ -73,7 +82,6 @@ class Menu extends \humhub\widgets\BaseMenu
'sortOrder' => 300,
'isActive' => (Yii::$app->controller->id == "module"),
'htmlOptions' => ['data-method' => 'POST']
));
}
@ -100,7 +108,6 @@ class Menu extends \humhub\widgets\BaseMenu
'title' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'This option will hide new content from this space at your dashboard')
]
));
} else {
$this->addItem(array(
@ -117,9 +124,7 @@ class Menu extends \humhub\widgets\BaseMenu
'title' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'This option will show new content from this space at your dashboard')
]
));
}
}
}

View File

@ -204,8 +204,12 @@ if ($space->isAdmin()) {
['sortOrder' => 30]]
]]);
?>
<?php echo humhub\modules\space\modules\manage\widgets\Menu::widget(['space' => $space, 'template' => '@humhub/widgets/views/dropdownNavigation']); ?>
<?=
humhub\modules\space\widgets\HeaderControlsMenu::widget([
'space' => $space,
'template' => '@humhub/widgets/views/dropdownNavigation'
]);
?>
</div>
</div>
</div>