Merge pull request #1663 from buddha87/v1.1-dev

Enhanced Group Management
This commit is contained in:
buddha87 2016-04-21 17:24:53 +02:00
commit 23d16549ec
7 changed files with 212 additions and 123 deletions

View File

@ -15,6 +15,7 @@ use humhub\modules\user\models\Group;
use humhub\modules\user\widgets\UserPicker;
use humhub\modules\user\models\User;
use humhub\modules\admin\models\forms\AddGroupMemberForm;
use humhub\models\Setting;
/**
* Group Administration Controller
@ -61,12 +62,21 @@ class GroupController extends Controller
if ($group->load(Yii::$app->request->post()) && $group->validate()) {
$group->save();
$this->redirect(Url::toRoute('/admin/group'));
$this->redirect(Url::toRoute(["/admin/group/manage-group-users", 'id' => $group->id]));
}
$showDeleteButton = (!$group->isNewRecord && !$group->is_admin_group);
$isCreateForm = $group->isNewRecord;
return $this->render('edit', [
'group' => $group,
'showDeleteButton' => (!$group->isNewRecord && !$group->is_admin_group),
'isCreateForm' => $group->isNewRecord,
'isManagerApprovalSetting' => Setting::Get('needApproval', 'authentication_internal')
]);
}
public function actionManagePermissions()
{
$group = Group::findOne(['id' => Yii::$app->request->get('id')]);
// Save changed permission states
if (!$group->isNewRecord && Yii::$app->request->post('dropDownColumnSubmit')) {
Yii::$app->response->format = 'json';
@ -77,11 +87,9 @@ class GroupController extends Controller
Yii::$app->user->permissionManager->setGroupState($group->id, $permission, Yii::$app->request->post('state'));
return [];
}
return $this->render('edit', [
'group' => $group,
'showDeleteButton' => $showDeleteButton,
'isCreateForm' => $isCreateForm
return $this->render('permissions', [
'group' => $group
]);
}
@ -91,11 +99,12 @@ class GroupController extends Controller
$searchModel = new \humhub\modules\admin\models\UserSearch();
$searchModel->query = $group->getUsers();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('manageGroupUsers', [
return $this->render('members', [
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
'group' => $group,
'addGroupMemberForm' => new AddGroupMemberForm()
'addGroupMemberForm' => new AddGroupMemberForm(),
'isManagerApprovalSetting' => Setting::Get('needApproval', 'authentication_internal')
]);
}
@ -129,25 +138,30 @@ class GroupController extends Controller
$this->redirect(Url::toRoute("/admin/group"));
}
public function actionToggleAdmin()
public function actionEditManagerRole()
{
Yii::$app->response->format = 'json';
$this->forcePostRequest();
$group = Group::findOne(Yii::$app->request->get('id'));
$group = Group::findOne(Yii::$app->request->post('id'));
$value = Yii::$app->request->post('value');
if($group == null) {
throw new \yii\web\HttpException(404, Yii::t('AdminModule.controllers_GroupController', 'Group not found!'));
} else if($value == null) {
throw new \yii\web\HttpException(400, Yii::t('AdminModule.controllers_GroupController', 'No value found!'));
}
$groupUser = $group->getGroupUser(User::findOne(Yii::$app->request->get('userId')));
$groupUser = $group->getGroupUser(User::findOne(Yii::$app->request->post('userId')));
if($groupUser == null) {
throw new \yii\web\HttpException(404, Yii::t('AdminModule.controllers_GroupController', 'Group user not found!'));
}
$groupUser->is_group_manager = !$groupUser->is_group_manager;
$groupUser->is_group_manager = ($value) ? true : false;
$groupUser->save();
$this->redirect(Url::toRoute(["/admin/group/manage-group-users", 'id' => $group->id]));
return [];
}
public function actionAddMembers()

View File

@ -9,71 +9,60 @@ use yii\helpers\Html;
?>
<div class="panel panel-default">
<?php if (!$group->isNewRecord) : ?>
<div
class="panel-heading"><?php echo Yii::t('AdminModule.views_group_edit', '<strong>Edit</strong> group'); ?></div>
<div class="panel-heading">
<?php echo Yii::t('AdminModule.views_group_edit', '<strong>Edit</strong> group {groupName}', ['groupName' => $group->name]); ?>
</div>
<?php else: ?>
<div
class="panel-heading"><?php echo Yii::t('AdminModule.views_group_edit', '<strong>Create</strong> new group'); ?></div>
<div class="panel-heading"><?php echo Yii::t('AdminModule.views_group_edit', '<strong>Create</strong> new group'); ?></div>
<?php endif; ?>
<div class="panel-body">
<?php $form = ActiveForm::begin(); ?>
<?php echo $form->field($group, 'name'); ?>
<?php echo $form->field($group, 'description')->textarea(['rows' => 5]); ?>
<?php echo $form->field($group, 'defaultSpaceGuid')->textInput(['id' => 'space_select']); ?>
<?php
echo \humhub\modules\space\widgets\Picker::widget([
'inputId' => 'space_select',
'maxSpaces' => 1,
'model' => $group,
'attribute' => 'defaultSpaceGuid'
]);
?>
<?php echo $form->field($group, 'managerGuids', ['inputOptions' => ['id' => 'user_select']]); ?>
<?php
$url = ($group->isNewRecord) ? null : Url::toRoute('/admin/group/admin-user-search');
echo \humhub\modules\user\widgets\UserPicker::widget([
'inputId' => 'user_select',
'model' => $group,
'attribute' => 'managerGuids',
'userSearchUrl' => $url,
'data' => ['id' => $group->id],
'placeholderText' => 'Add a user'
]);
?>
<strong><?php echo Yii::t('AdminModule.views_group_edit', 'Visibility'); ?></strong>
<br>
<br>
<?php echo $form->field($group, 'show_at_registration')->checkbox(); ?>
<?php echo $form->field($group, 'show_at_directory')->checkbox(); ?>
<?php if (!$group->isNewRecord): ?>
<strong>Permissions:</strong><br/>
<?= PermissionGridEditor::widget(['permissionManager' => Yii::$app->user->permissionManager, 'groupId' => $group->id]); ?>
<?php if (!$group->isNewRecord) : ?>
<?= \humhub\modules\admin\widgets\GroupManagerMenu::widget(); ?>
<br />
<?php endif; ?>
<?php echo CHtml::submitButton(Yii::t('AdminModule.views_group_edit', 'Save'), array('class' => 'btn btn-primary')); ?>
<?php
if(!$isCreateForm) {
echo Html::a(Yii::t('AdminModule.views_group_edit', 'Manage Group Users'), Url::toRoute(['/admin/group/manage-group-users', 'id' => $group->id]), array('class' => 'btn btn-danger'));
}?>
<?php
if ($showDeleteButton) {
echo Html::a(Yii::t('AdminModule.views_group_edit', 'Delete'), Url::toRoute(['/admin/group/delete', 'id' => $group->id]), array('class' => 'btn btn-danger', 'data-method' => 'POST'));
}?>
<?php $form = ActiveForm::begin(); ?>
<?php echo $form->field($group, 'name'); ?>
<?php echo $form->field($group, 'description')->textarea(['rows' => 5]); ?>
<?php echo $form->field($group, 'defaultSpaceGuid')->textInput(['id' => 'space_select']); ?>
<?php
echo \humhub\modules\space\widgets\Picker::widget([
'inputId' => 'space_select',
'maxSpaces' => 1,
'model' => $group,
'attribute' => 'defaultSpaceGuid'
]);
?>
<?php if($isManagerApprovalSetting): ?>
<?php echo $form->field($group, 'managerGuids', ['inputOptions' => ['id' => 'user_select']]); ?>
<?php
$url = ($group->isNewRecord) ? null : Url::toRoute('/admin/group/admin-user-search');
echo \humhub\modules\user\widgets\UserPicker::widget([
'inputId' => 'user_select',
'model' => $group,
'attribute' => 'managerGuids',
'userSearchUrl' => $url,
'data' => ['id' => $group->id],
'placeholderText' => 'Add a user'
]);
?>
<?php endif; ?>
<strong><?php echo Yii::t('AdminModule.views_group_edit', 'Visibility'); ?></strong>
<br>
<br>
<?php if($isManagerApprovalSetting): ?>
<?php echo $form->field($group, 'show_at_registration')->checkbox(); ?>
<?php endif; ?>
<?php echo $form->field($group, 'show_at_directory')->checkbox(); ?>
<?php echo CHtml::submitButton(Yii::t('AdminModule.views_group_edit', 'Save'), array('class' => 'btn btn-primary')); ?>
<?php
if ($showDeleteButton) {
echo Html::a(Yii::t('AdminModule.views_group_edit', 'Delete'), Url::toRoute(['/admin/group/delete', 'id' => $group->id]), array('class' => 'btn btn-danger', 'data-method' => 'POST'));
}?>
<?php ActiveForm::end(); ?>
</div>
</div>

View File

@ -27,7 +27,7 @@ use humhub\widgets\GridView;
'format' => 'raw',
'options' => ['style' => 'text-align:center;'],
'value' => function ($data) {
return Html::a($data->getUsers()->count().' <i class="fa fa-pencil"></i>', Url::toRoute(['manage-group-users', 'id' => $data->id]), ['class' => 'btn btn-primary btn-xs tt']);
return $data->getUsers()->count();
}
],
[

View File

@ -7,13 +7,41 @@ use yii\widgets\ActiveForm;
?>
<div class="panel panel-default">
<div class="panel-heading"><?php echo Yii::t('AdminModule.views_group_manageGroupUser', '<strong>Manage</strong> group users'); ?></div>
<div class="panel-heading">
<?php echo Yii::t('AdminModule.views_group_manageGroupUser', '<strong>Edit</strong> group {groupName}', ['groupName' => $group->name]); ?>
</div>
<div class="panel-body">
<p>
<?php echo Yii::t('AdminModule.views_group_manageGroupUser', 'In this view you can manage the users of group <b>{groupName}</b>', [
'groupName' => $group->name
]); ?>
</p>
<?= \humhub\modules\admin\widgets\GroupManagerMenu::widget(); ?>
<br />
<?php $form = ActiveForm::begin(['action' => ['/admin/group/add-members']]); ?>
<div style="display:flex;flex-wrap:wrap;">
<div style="flex-grow:100;margin-right:5px;">
<div>
<?php echo $form->field($addGroupMemberForm, 'userGuids', ['inputOptions' => ['id' => 'user_select']])->label(false); ?>
<?php echo Html::activeHiddenInput($addGroupMemberForm, 'groupId', ['value' => $group->id]) ?>
<?php
echo \humhub\modules\user\widgets\UserPicker::widget([
'inputId' => 'user_select',
'model' => $addGroupMemberForm,
'attribute' => 'userGuids',
'userSearchUrl' => Url::toRoute('/admin/group/new-member-search'),
'data' => ['id' => $group->id],
'placeholderText' => Yii::t('AdminModule.views_group_manageGroupUser', 'Add new members...')
]);
?>
</div>
</div>
<div style="flex-grow:1;">
<?php echo Html::submitButton(Yii::t('AdminModule.views_group_manageGroupUser', 'Add'
. ''), ['class' => 'btn btn-primary']); ?>
</div>
</div>
<?php ActiveForm::end(); ?>
<div class="table-responsive">
<?php
echo GridView::widget([
@ -34,9 +62,17 @@ use yii\widgets\ActiveForm;
'profile.lastname',
[
'attribute' => 'is_manager',
'visible' => $isManagerApprovalSetting,
'label' => Yii::t('AdminModule.views_user_index', 'Group Manager'),
'format' => 'raw',
'value' => function ($data) use ($group) {
return $group->isManager($data) ? Yii::t('AdminModule.views_group_manageGroupUser', 'Yes') : Yii::t('AdminModule.views_group_manageGroupUser', 'No');
$isManager = $group->isManager($data);
$yesSelected = ($isManager) ? 'selected' : '';
$noSelected = ($isManager) ? '' : 'selected';
$result = '<select class="managerDropDown" data-userid="'.$data->id.'" data-groupid="'.$group->id.'">';
$result .= '<option value="0" '.$noSelected.'>'.Yii::t('AdminModule.views_group_manageGroupUser', 'No').'</option>';
$result .= '<option value="1" '.$yesSelected.'>'.Yii::t('AdminModule.views_group_manageGroupUser', 'Yes').'</option>';
return $result;
}
],
[
@ -48,17 +84,7 @@ use yii\widgets\ActiveForm;
return false;
},
'update' => function($url, $model) use ($group) {
if($group->isManager($model)) {
return Html::a('<i class="fa fa-asterisk"></i>', Url::toRoute(['toggle-admin', 'id' => $group->id, 'userId' => $model->id]), [
'data-method' => 'POST',
'title' => Yii::t('AdminModule.views_group_manageGroupUser', 'Remove admin role'),
'class' => 'btn btn-danger btn-xs tt']);
} else {
return Html::a('<i class="fa fa-asterisk"></i>', Url::toRoute(['toggle-admin', 'id' => $group->id, 'userId' => $model->id], ['data-method' => 'POST']), [
'data-method' => 'POST',
'title' => Yii::t('AdminModule.views_group_manageGroupUser', 'Mark as admin'),
'class' => 'btn btn-primary btn-xs tt']);
}
return false;
},
'delete' => function($url, $model) use ($group) {
return Html::a('<i class="fa fa-times"></i>', Url::toRoute(['remove-group-user', 'id' => $group->id, 'userId' => $model->id]), [
@ -72,25 +98,24 @@ use yii\widgets\ActiveForm;
]);
?>
</div>
<hr />
<?php $form = ActiveForm::begin(['action' => ['/admin/group/add-members']]); ?>
<label class="control-label" for="user_select"><?= Yii::t('AdminModule.views_group_manageGroupUser', 'Add Members') ?></label>
<?php echo $form->field($addGroupMemberForm, 'userGuids', ['inputOptions' => ['id' => 'user_select']])->label(false); ?>
<?php echo Html::activeHiddenInput($addGroupMemberForm, 'groupId', ['value' => $group->id]) ?>
<?php
echo \humhub\modules\user\widgets\UserPicker::widget([
'inputId' => 'user_select',
'model' => $addGroupMemberForm,
'attribute' => 'userGuids',
'userSearchUrl' => Url::toRoute('/admin/group/new-member-search'),
'data' => ['id' => $group->id],
'placeholderText' => Yii::t('AdminModule.views_group_manageGroupUser', 'Choose new members...')
]);
?>
<?php echo Html::submitButton(Yii::t('AdminModule.views_group_manageGroupUser', 'Send'), ['class' => 'btn btn-primary']); ?>
<?php echo Html::a(Yii::t('AdminModule.views_group_manageGroupUser', 'Edit this group'), Url::toRoute(['edit', 'id' => $group->id]), ['class' => 'btn btn-danger']);?>
<?php ActiveForm::end(); ?>
</div>
</div>
<script type="text/javascript">
$('.managerDropDown').on('change', function() {
var $this = $(this);
var userId = $this.data('userid');
var groupId = $this.data('groupid');
$.ajax("<?= Url::toRoute(['edit-manager-role']) ?>", {
method: 'POST',
data: {
'id': groupId,
'userId': userId,
'value': $this.val()
},
success : function() {
//success handler
}
});
});
</script>

View File

@ -0,0 +1,16 @@
<?php
use humhub\modules\user\widgets\PermissionGridEditor;
?>
<div class="panel panel-default">
<div class="panel-heading">
<?php echo Yii::t('AdminModule.views_group_permissions', '<strong>Edit</strong> group {groupName}', ['groupName' => $group->name]); ?>
</div>
<div class="panel-body">
<?= \humhub\modules\admin\widgets\GroupManagerMenu::widget(); ?>
<br />
<?= PermissionGridEditor::widget(['permissionManager' => Yii::$app->user->permissionManager, 'groupId' => $group->id]); ?>
</div>
</div>

View File

@ -0,0 +1,50 @@
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2015 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\admin\widgets;
use Yii;
use yii\helpers\Url;
/**
* Group Administration Menu
*/
class GroupManagerMenu extends \humhub\widgets\BaseMenu
{
/**
* @inheritdoc
*/
public $template = "@humhub/widgets/views/tabMenu";
public function init()
{
$groupId = Yii::$app->request->get('id');
$this->addItem(array(
'label' => Yii::t('AdminModule.views_user_index', 'Settings'),
'url' => Url::toRoute(['/admin/group/edit', 'id' => $groupId]),
'sortOrder' => 100,
'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'group' && Yii::$app->controller->action->id == 'edit'),
));
$this->addItem(array(
'label' => Yii::t('AdminModule.views_groups_index', "Permissions"),
'url' => Url::toRoute(['/admin/group/manage-permissions', 'id' => $groupId]),
'sortOrder' => 200,
'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'group' && Yii::$app->controller->action->id == 'manage-permissions'),
));
$this->addItem(array(
'label' => Yii::t('AdminModule.views_groups_index', "Members"),
'url' => Url::toRoute(['/admin/group/manage-group-users', 'id' => $groupId]),
'sortOrder' => 200,
'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'group' && Yii::$app->controller->action->id == 'manage-group-users'),
));
parent::init();
}
}

View File

@ -46,8 +46,7 @@ class Group extends \yii\db\ActiveRecord
public function rules()
{
return [
[['managerGuids', 'name'], 'required', 'on' => self::SCENARIO_EDIT],
['managerGuids', 'atleasOneAdminCheck', 'on' => self::SCENARIO_EDIT],
[['name'], 'required', 'on' => self::SCENARIO_EDIT],
[['space_id', 'created_by', 'updated_by'], 'integer'],
[['description', 'managerGuids', 'defaultSpaceGuid'], 'string'],
[['created_at', 'updated_at'], 'safe'],
@ -71,6 +70,7 @@ class Group extends \yii\db\ActiveRecord
'id' => 'ID',
'space_id' => 'Space ID',
'name' => 'Name',
'defaultSpaceGuid' => 'Default Space',
'managerGuids' => 'Manager',
'description' => 'Description',
'created_at' => 'Created At',
@ -80,11 +80,6 @@ class Group extends \yii\db\ActiveRecord
];
}
public function atleasOneAdminCheck()
{
return !$this->show_at_registration || count(explode(",", $this->managerGuids) > 0);
}
public function beforeSave($insert)
{