assign trainers to user; add email to jwt token
This commit is contained in:
@@ -172,19 +172,68 @@ class AdminMenuStructure
|
||||
/////////////////////////////
|
||||
// Group Training
|
||||
/////////////////////////////
|
||||
if (RoleDefinition::isLoggedUser()) {
|
||||
$items = [];
|
||||
$items[] = ['label' => 'Felszerelés', 'url' => ['/event-equipment-type']];
|
||||
$items[] = ['label' => 'Edzők', 'url' => ['/trainer']];
|
||||
$items[] = ['label' => 'Termek', 'url' => ['/room']];
|
||||
$items[] = ['label' => 'Esemény típusok', 'url' => ['/event-type']];
|
||||
$items[] = ['label' => 'Események', 'url' => ['/event/event/index']];
|
||||
$items[] = ['label' => 'Órarend', 'url' => ['/event/event/timetable']];
|
||||
$items[] = ['label' => 'Hét másolása', 'url' => ['/event/event/copy-week']];
|
||||
$this->menuItems[] = ['label' => 'Csoportos edzés', 'url' => $this->emptyUrl,
|
||||
'items' => $items
|
||||
];
|
||||
}
|
||||
$items = [];
|
||||
// $items[] = ['label' => 'Felszerelés', 'url' => ['/event-equipment-type'], 'role' => [RoleDefinition::$ROLE_ADMIN]];
|
||||
$items[] = [
|
||||
'label' => 'Edzők',
|
||||
'url' => ['/trainer'],
|
||||
'role' => [
|
||||
RoleDefinition::$ROLE_ADMIN,
|
||||
RoleDefinition::$ROLE_EMPLOYEE,
|
||||
]
|
||||
];
|
||||
$items[] = ['label' => 'Termek',
|
||||
'url' => ['/room'],
|
||||
'role' => [
|
||||
RoleDefinition::$ROLE_ADMIN,
|
||||
RoleDefinition::$ROLE_EMPLOYEE,
|
||||
]
|
||||
];
|
||||
$items[] = ['label' => 'Esemény típusok',
|
||||
'url' => ['/event-type'],
|
||||
'role' => [
|
||||
RoleDefinition::$ROLE_ADMIN,
|
||||
RoleDefinition::$ROLE_EMPLOYEE,
|
||||
]
|
||||
];
|
||||
$items[] = [
|
||||
'label' => 'Események',
|
||||
'url' => ['/event/event/index'],
|
||||
'role' => [
|
||||
RoleDefinition::$ROLE_ADMIN,
|
||||
RoleDefinition::$ROLE_EMPLOYEE,
|
||||
RoleDefinition::$ROLE_TRAINER
|
||||
]
|
||||
];
|
||||
$items[] = [
|
||||
'label' => 'Órarend',
|
||||
'url' => ['/event/event/timetable'],
|
||||
'role' => [
|
||||
RoleDefinition::$ROLE_ADMIN,
|
||||
RoleDefinition::$ROLE_EMPLOYEE,
|
||||
RoleDefinition::$ROLE_TRAINER
|
||||
]
|
||||
];
|
||||
$items[] = [
|
||||
'label' => 'Hét másolása',
|
||||
'url' => ['/event/event/copy-week'],
|
||||
'role' => [
|
||||
RoleDefinition::$ROLE_ADMIN,
|
||||
RoleDefinition::$ROLE_EMPLOYEE,
|
||||
RoleDefinition::$ROLE_TRAINER
|
||||
]
|
||||
];
|
||||
$this->menuItems[] = [
|
||||
'label' => 'Csoportos edzés',
|
||||
'url' => $this->emptyUrl,
|
||||
'items' => $items,
|
||||
'role' => [
|
||||
RoleDefinition::$ROLE_ADMIN,
|
||||
RoleDefinition::$ROLE_EMPLOYEE,
|
||||
RoleDefinition::$ROLE_TRAINER
|
||||
]
|
||||
];
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Development
|
||||
@@ -198,10 +247,50 @@ class AdminMenuStructure
|
||||
];
|
||||
}
|
||||
|
||||
$this->menuItems = $this->filterMenu($this->menuItems);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected function filterMenu($menuItems)
|
||||
{
|
||||
$result = [];
|
||||
foreach ($menuItems as $item) {
|
||||
$filteredItem = $this->filterMenuItem($item);
|
||||
if (isset($filteredItem)) {
|
||||
$result[] = $filteredItem;
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function filterMenuItem($menuItem)
|
||||
{
|
||||
$result = $menuItem;
|
||||
if (isset($menuItem)) {
|
||||
if (isset($menuItem['role'])) {
|
||||
$roles = $menuItem['role'];
|
||||
$canAny = RoleDefinition::canAny($roles);
|
||||
if ($canAny === false) {
|
||||
$result = null;
|
||||
} else {
|
||||
if (isset($menuItem['items'])) {
|
||||
$result['items'] = [];
|
||||
$items = $menuItem['items'];
|
||||
foreach ($items as $subItem) {
|
||||
$filteredItem = $this->filterMenuItem($subItem);
|
||||
if (isset($filteredItem)) {
|
||||
$result['items'][] = $filteredItem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function addLoginMainMenu()
|
||||
{
|
||||
if (Yii::$app->user->isGuest) {
|
||||
|
||||
@@ -2,10 +2,13 @@
|
||||
|
||||
namespace backend\controllers;
|
||||
|
||||
use common\models\Trainer;
|
||||
use common\models\UserTrainerAssignment;
|
||||
use Yii;
|
||||
use common\models\User;
|
||||
use backend\models\UserSearch;
|
||||
use backend\models\UserCreate;
|
||||
use yii\web\BadRequestHttpException;
|
||||
use yii\web\Controller;
|
||||
use yii\web\NotFoundHttpException;
|
||||
use yii\filters\VerbFilter;
|
||||
@@ -20,7 +23,7 @@ use common\components\RoleDefinition;
|
||||
*/
|
||||
class UserController extends \backend\controllers\BackendController
|
||||
{
|
||||
|
||||
|
||||
|
||||
public function behaviors()
|
||||
{
|
||||
@@ -45,8 +48,8 @@ class UserController extends \backend\controllers\BackendController
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Lists all User models.
|
||||
* @return mixed
|
||||
@@ -55,8 +58,8 @@ class UserController extends \backend\controllers\BackendController
|
||||
{
|
||||
$searchModel = new UserSearch();
|
||||
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return $this->render('index', [
|
||||
'searchModel' => $searchModel,
|
||||
@@ -84,35 +87,48 @@ class UserController extends \backend\controllers\BackendController
|
||||
public function actionCreate()
|
||||
{
|
||||
$model = new UserCreate();
|
||||
|
||||
|
||||
$accounts = Account::readAccounts();
|
||||
$trainers = Trainer::find()->all();
|
||||
|
||||
if ($model->load(Yii::$app->request->post()) && $model->save()) {
|
||||
|
||||
|
||||
$this->updateAccountAssignments($model);
|
||||
|
||||
$this->updateTrainerAssignments($model);
|
||||
|
||||
return $this->redirect(['index' ]);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
return $this->render('create', [
|
||||
'model' => $model,
|
||||
'accounts' => $accounts,
|
||||
'trainers' => $trainers,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
public function updateAccountAssignments($model){
|
||||
|
||||
echo "saving accounts";
|
||||
|
||||
UserAccountAssignment::deleteAll(['id_user' => $model->id]);
|
||||
foreach ( $model->selected_accounts as $id_account ){
|
||||
echo "saving account";
|
||||
$uaa = new UserAccountAssignment();
|
||||
$uaa->id_user = $model->id;
|
||||
$uaa->id_account = $id_account;
|
||||
$uaa->save();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function updateTrainerAssignments($model){
|
||||
|
||||
UserTrainerAssignment::deleteAll(['id_user' => $model->id]);
|
||||
foreach ( $model->selected_trainers as $id_trainer ){
|
||||
$uaa = new UserTrainerAssignment();
|
||||
$uaa->id_user = $model->id;
|
||||
$uaa->id_trainer = $id_trainer;
|
||||
$uaa->save();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -124,7 +140,7 @@ class UserController extends \backend\controllers\BackendController
|
||||
public function actionUpdate($id)
|
||||
{
|
||||
$model = UserUpdate::findOne(['id' => $id]);
|
||||
|
||||
|
||||
if ( Yii::$app->authManager->checkAccess($model->id, 'admin')){
|
||||
$model->role = 'admin';
|
||||
} else if ( Yii::$app->authManager->checkAccess($model->id, 'employee')){
|
||||
@@ -132,28 +148,31 @@ class UserController extends \backend\controllers\BackendController
|
||||
}else if ( Yii::$app->authManager->checkAccess($model->id, 'reception')){
|
||||
$model->role = 'reception';
|
||||
}
|
||||
|
||||
|
||||
if ( $model == null ){
|
||||
throw new NotFoundHttpException('The requested page does not exist.');
|
||||
}
|
||||
|
||||
|
||||
$accounts = Account::readAccounts();
|
||||
|
||||
$this->applyAccounts($model);
|
||||
|
||||
|
||||
$trainers = Trainer::find()->all();
|
||||
$this->applyTrainers($model);
|
||||
|
||||
if ($model->load(Yii::$app->request->post()) && $model->save()) {
|
||||
|
||||
$this->updateAccountAssignments($model);
|
||||
$this->updateTrainerAssignments($model);
|
||||
return $this->redirect(['view', 'id' => $model->id]);
|
||||
} else {
|
||||
}
|
||||
return $this->render('update', [
|
||||
'model' => $model,
|
||||
'accounts' => $accounts,
|
||||
'trainers' => $trainers,
|
||||
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
private function applyAccounts($model ){
|
||||
$assignedAccounts = $model->userAccountAssignments;
|
||||
foreach ($assignedAccounts as $acc ){
|
||||
@@ -161,6 +180,13 @@ class UserController extends \backend\controllers\BackendController
|
||||
}
|
||||
}
|
||||
|
||||
private function applyTrainers($model ){
|
||||
$assignedTrainers = $model->userTrainerAssignments;
|
||||
foreach ($assignedTrainers as $acc ){
|
||||
$model->selected_trainers[] = $acc->id_trainer;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes an existing User model.
|
||||
* If deletion is successful, the browser will be redirected to the 'index' page.
|
||||
@@ -171,12 +197,12 @@ class UserController extends \backend\controllers\BackendController
|
||||
{
|
||||
|
||||
$user = $this->findModel($id);
|
||||
|
||||
|
||||
$user->updateAttributes(['status' => User::STATUS_DELETED]);
|
||||
|
||||
return $this->redirect(['index']);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new User model.
|
||||
* If creation is successful, the browser will be redirected to the 'view' page.
|
||||
@@ -185,17 +211,17 @@ class UserController extends \backend\controllers\BackendController
|
||||
public function actionRole()
|
||||
{
|
||||
$model = new \backend\models\RoleForm();
|
||||
|
||||
|
||||
$model->availablePermissions = [
|
||||
[
|
||||
'name' => "reception.transfers",
|
||||
'description' => 'Tranzakciók'
|
||||
]
|
||||
];
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if ($model->load(Yii::$app->request->post()) ) {
|
||||
if ( $model->validate() && $model->save()){
|
||||
Yii::$app->session->setFlash('success', 'Jogosultságok elmentve');
|
||||
@@ -209,7 +235,7 @@ class UserController extends \backend\controllers\BackendController
|
||||
$model->permissions[] = $child->name;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $this->render('role', [
|
||||
'model' => $model,
|
||||
]);
|
||||
|
||||
@@ -9,9 +9,10 @@ class UserCreate extends User{
|
||||
public $password_plain;
|
||||
public $password_repeat;
|
||||
public $selected_accounts = [];
|
||||
|
||||
public $selected_trainers = [];
|
||||
|
||||
public $role;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
@@ -25,28 +26,34 @@ class UserCreate extends User{
|
||||
}
|
||||
}
|
||||
],
|
||||
['selected_trainers',function ($attribute, $params) {
|
||||
if (!is_array($this->$attribute)) {
|
||||
$this->addError($attribute, 'Invalid array');
|
||||
}
|
||||
}
|
||||
],
|
||||
['email' ,'email' ],
|
||||
['email' ,'unique' ],
|
||||
['username' ,'unique' ],
|
||||
[['password_plain' ,'password_repeat'] ,'string','min' =>6 ],
|
||||
[['password_repeat'] ,'validatePasswordRepeat' ],
|
||||
|
||||
|
||||
[['role'], 'required'],
|
||||
[['role'], 'string', 'max' => 20],
|
||||
['status', 'default', 'value' => self::STATUS_ACTIVE],
|
||||
['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]],
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
public function validatePasswordRepeat($attribute,$params){
|
||||
|
||||
|
||||
if ( !$this->hasErrors()){
|
||||
if ( $this->password_plain != $this->password_repeat ){
|
||||
$this->addError($attribute, Yii::t('app', 'Jelszó és jelszó újra nem egyezik!') );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function attributeLabels(){
|
||||
return [
|
||||
'status' => 'Státusz',
|
||||
@@ -55,10 +62,10 @@ class UserCreate extends User{
|
||||
'created_at' =>'Létrehozás dátuma',
|
||||
'password_plain' => Yii::t('app','Jelszó'),
|
||||
'password_repeat' => Yii::t('app','Jelszó újra'),
|
||||
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
public function beforeSave($insert){
|
||||
if ( parent::beforeSave($insert)){
|
||||
if ( $insert ){
|
||||
@@ -70,12 +77,12 @@ class UserCreate extends User{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function afterSave($insert, $changedAttributes){
|
||||
parent::afterSave($insert, $changedAttributes);
|
||||
parent::afterSave($insert, $changedAttributes);
|
||||
$am = Yii::$app->authManager;
|
||||
$role = $am->getRole($this->role);
|
||||
Yii::$app->authManager->assign($role, $this->id);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,9 +9,10 @@ class UserUpdate extends User {
|
||||
public $password_plain;
|
||||
public $password_repeat;
|
||||
public $selected_accounts = [];
|
||||
public $selected_trainers = [];
|
||||
|
||||
public $role;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
* @formatter:off
|
||||
@@ -21,25 +22,59 @@ class UserUpdate extends User {
|
||||
return [
|
||||
[['username','email'], 'required' ],
|
||||
['email' ,'email' ],
|
||||
['email' ,'unique' , 'targetClass' => User::className(), 'targetAttribute' => 'email'],
|
||||
['username' ,'unique', 'targetClass' => User::className(), 'targetAttribute' => 'username'],
|
||||
// ['email' ,'unique' , 'targetClass' => User::className(), 'targetAttribute' => 'email'],
|
||||
// ['username' ,'unique', 'targetClass' => User::className(), 'targetAttribute' => 'username'],
|
||||
[['password_plain' ,'password_repeat'] ,'string','min' =>6 ],
|
||||
[['password_repeat'] ,'validatePasswordRepeat' ],
|
||||
[['username'] ,'validateUsername' ],
|
||||
[['email'] ,'validateEmail' ],
|
||||
['selected_accounts',function ($attribute, $params) {
|
||||
if (!is_array($this->$attribute)) {
|
||||
$this->addError($attribute, 'Invalid array');
|
||||
}
|
||||
}
|
||||
],
|
||||
['selected_trainers',function ($attribute, $params) {
|
||||
if (!is_array($this->$attribute)) {
|
||||
$this->addError($attribute, 'Invalid array');
|
||||
}
|
||||
}
|
||||
],
|
||||
[['role'], 'required'],
|
||||
[['role'], 'string', 'max' => 20],
|
||||
|
||||
|
||||
['status', 'default', 'value' => self::STATUS_ACTIVE],
|
||||
['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]],
|
||||
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
public function validateEmail($attribute, $params){
|
||||
/** @var User $user */
|
||||
$user = User::find()
|
||||
->andWhere(['email' => $this->email])->one();
|
||||
|
||||
if (isset($user)){
|
||||
if ( $user->id != $this->id ){
|
||||
$this->addError($attribute,'Az email cím már használatban van!');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function validateUsername($attribute, $params){
|
||||
/** @var User $user */
|
||||
$user = User::find()
|
||||
->andWhere(['username' => $this->username])->one();
|
||||
|
||||
if (isset($user)){
|
||||
if ( $user->id != $this->id ){
|
||||
$this->addError($attribute,'A felhasználónév már használatban van!');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @formatter:on
|
||||
*/
|
||||
@@ -53,14 +88,14 @@ class UserUpdate extends User {
|
||||
}
|
||||
}
|
||||
public function attributeLabels() {
|
||||
return [
|
||||
|
||||
return [
|
||||
|
||||
'status' => 'Státusz',
|
||||
'email' => 'E-mail',
|
||||
'username' => 'Felhasználónév',
|
||||
'created_at' => 'Létrehozás dátuma',
|
||||
'password_plain' => Yii::t ( 'app', 'Jelszó' ),
|
||||
'password_repeat' => Yii::t ( 'app', 'Jelszó újra' )
|
||||
'password_repeat' => Yii::t ( 'app', 'Jelszó újra' )
|
||||
]
|
||||
;
|
||||
}
|
||||
@@ -78,7 +113,7 @@ class UserUpdate extends User {
|
||||
}
|
||||
}
|
||||
public function afterSave($insert, $changedAttributes){
|
||||
parent::afterSave($insert, $changedAttributes);
|
||||
parent::afterSave($insert, $changedAttributes);
|
||||
$am = Yii::$app->authManager;
|
||||
$am->revokeAll($this->id);
|
||||
$role = $am->getRole($this->role);
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
<?php
|
||||
|
||||
use backend\models\UserUpdate;
|
||||
use common\models\Account;
|
||||
use common\models\Trainer;
|
||||
use yii\helpers\Html;
|
||||
use yii\widgets\ActiveForm;
|
||||
use yii\grid\GridView;
|
||||
@@ -8,11 +11,13 @@ use common\components\RoleDefinition;
|
||||
use common\models\User;
|
||||
|
||||
/* @var $this yii\web\View */
|
||||
/* @var $model common\models\User */
|
||||
/* @var $model UserUpdate */
|
||||
/* @var $form yii\widgets\ActiveForm */
|
||||
/* @var $trainers Trainer[] */
|
||||
/* @var $accounts Account[] */
|
||||
?>
|
||||
|
||||
<?php
|
||||
<?php
|
||||
|
||||
$roleOptions = RoleDefinition::roleLabels();
|
||||
asort($roleOptions);
|
||||
@@ -32,10 +37,11 @@ asort($roleOptions);
|
||||
<?= $form->field($model, 'password_repeat')->passwordInput() ?>
|
||||
<?= $form->field($model, 'role')->dropDownList($roleOptions) ?>
|
||||
|
||||
<?php
|
||||
|
||||
<?php
|
||||
|
||||
$selectedAccounts = $model->selected_accounts;
|
||||
|
||||
$selectedTrainers = $model->selected_trainers;
|
||||
|
||||
?>
|
||||
|
||||
<h3>Engedélyezett kasszák</h3>
|
||||
@@ -52,7 +58,7 @@ asort($roleOptions);
|
||||
'checkboxOptions' => function ($model, $key, $index, $column) use ($selectedAccounts){
|
||||
$result = [];
|
||||
$result['value'] = $model->id_account ;
|
||||
|
||||
|
||||
if ( isset($selectedAccounts) ){
|
||||
if ( is_array($selectedAccounts) ){
|
||||
if ( array_search($model->id_account , $selectedAccounts ) !== false){
|
||||
@@ -60,15 +66,47 @@ asort($roleOptions);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $result;
|
||||
}
|
||||
],
|
||||
[ 'attribute' => 'name' ],
|
||||
],
|
||||
])?>
|
||||
|
||||
|
||||
<h3>Engedélyezett edzők</h3>
|
||||
<?php echo GridView::widget([
|
||||
'dataProvider' => new ArrayDataProvider( [
|
||||
'allModels' => $trainers,
|
||||
'sort' => false,
|
||||
'pagination' => false,
|
||||
]),
|
||||
'columns' => [
|
||||
[
|
||||
'class' => 'yii\grid\CheckboxColumn',
|
||||
'name' => (new ReflectionClass( $model->classname() ))->getShortName() . '[selected_trainers]',
|
||||
'checkboxOptions' => function ($model, $key, $index, $column) use ($selectedTrainers){
|
||||
$result = [];
|
||||
$result['value'] = $model->id ;
|
||||
|
||||
if ( isset($selectedTrainers) ){
|
||||
if ( is_array($selectedTrainers) ){
|
||||
if ( array_search($model->id , $selectedTrainers ) !== false){
|
||||
$result['checked'] = 'checked' ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
],
|
||||
[ 'attribute' => 'name' ],
|
||||
],
|
||||
])?>
|
||||
|
||||
<div class="form-group">
|
||||
<?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Mentés') : Yii::t('app', 'Mentés'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
|
||||
<?= Html::submitButton( Yii::t('app', 'Mentés'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
|
||||
</div>
|
||||
|
||||
<?php ActiveForm::end(); ?>
|
||||
|
||||
@@ -17,6 +17,7 @@ $this->params['breadcrumbs'][] = $this->title;
|
||||
<?= $this->render('_form', [
|
||||
'model' => $model,
|
||||
'accounts' => $accounts,
|
||||
'trainers' => $trainers,
|
||||
]) ?>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -16,7 +16,8 @@ $this->params['breadcrumbs'][] = Yii::t('backend/user', 'Update');
|
||||
|
||||
<?= $this->render('_form', [
|
||||
'model' => $model,
|
||||
'accounts' => $accounts
|
||||
'accounts' => $accounts,
|
||||
'trainers' => $trainers,
|
||||
]) ?>
|
||||
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user