Feuerwehr-eppingen/app/Http/Controllers/UserController.php

370 lines
8.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Tag;
use Auth;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use Validator;
//use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Request as Input;
use Response;
use Illuminate\View\View;
use App\Helpers\StringHelper;
use Session;
class UserController extends ExtendedController
{
public function __construct()
{
$this->middleware(['auth' => 'userPermissions'])->except('user_switch_start', 'user_switch_stop');
// Model
$this->modelClass = User::class;
$this->modelType = StringHelper::toURL(__('models.user'));;
$this->modelData = [
'name' => [
'type' => 'inputText',
'label' => __('models.name'),
'placeholder' => __('models.name'),
'validation' => [
'rules' => 'required|between:3,50',
]
],
'email' => [
'type' => 'inputEmail',
'label' => __('models.email'),
'placeholder' => __('models.email address'),
'validation' => [
'rules' => 'required|email',
]
],
'password' => [
'type' => 'inputPassword',
'label' => __('models.password'),
'labelRepeat' => __('models.password repeat'),
'placeholder' => __('models.password'),
'validation' => [
'rules' => 'required|min:6|confirmed',
]
],
'active' => [
'type' => 'inputCheckbox',
'label' => __('models.account active'),
],
'departments' => [
'type' => 'checkboxSelection',
'name' => 'departments',
'label' => __('models.departments'),
'foreign' => [
'class' => Tag::class,
'model' => 'tags',
'column' => 'name',
'order' => [
'column' => 'name',
'direction' => 'ASC'
],
'conditions' => [
[
'column' => 'type',
'value' => 'abteilung',
],
],
],
],
'instances' => [
'type' => 'checkboxSelection',
'name' => 'instances',
'label' => __('models.instances'),
'foreign' => [
'class' => Tag::class,
'model' => 'tags',
'column' => 'name',
'order' => [
'column' => 'name',
'direction' => 'ASC'
],
'conditions' => [
[
'column' => 'type',
'value' => 'instanz',
],
],
],
],
'roles' => [
'type' => 'checkboxSelection',
'models' => 'roles',
'label' => __('models.roles'),
'foreign'=> [
'class' => Role::class,
'model' => 'roles',
'column' => 'name',
'order' => [
'column' => 'name',
'direction' => 'ASC'
],
],
],
'notifications' => [
'type' => 'checkboxSelection',
'name' => 'notifications',
'label' => __('admin.notifiactions'),
'foreign' => [
'class' => Tag::class,
'model' => 'tags',
'column' => 'name',
'order' => [
'column' => 'name',
'direction' => 'ASC'
],
'conditions' => [
[
'column' => 'type',
'value' => 'benachrichtigung',
],
],
],
],
'membertypes1' => [
'type' => 'checkboxSelection',
'name' => 'membertypes1',
'label' => __('models.membertypes'),
'foreign' => [
'class' => Tag::class,
'model' => 'tags',
'column' => 'name',
'order' => [
'column' => 'order',
'direction' => 'ASC'
],
'conditions' => [
[
'column' => 'type',
'value' => 'mitgliedsart-abteilung',
],
],
],
],
'membertypes2' => [
'type' => 'checkboxSelection',
'name' => 'membertypes2',
'label' => __('models.membertype2s'),
'foreign' => [
'class' => Tag::class,
'model' => 'tags',
'column' => 'name',
'order' => [
'column' => 'order',
'direction' => 'ASC'
],
'conditions' => [
[
'column' => 'type',
'value' => 'mitgliedsart-gesamtwehr',
],
],
],
],
];
// URL options
$this->url = 'user';
$this->route = StringHelper::toURL(__('models.user'));
$this->adminIndexOptions = [
'orderBy' => 'name',
'paginate' => 10,
'listdata' => [
'name' => [
'label' => 'Name'
],
'active' => [],
'departments' => [],
'instances' => [],
'last_login' => [
'label' => __('admin.last login'),
'helper' => 'Date::diffInDaysAndTimeString'
]
]
];
$this->updateOptions = [
'view' => [
'tab1' => [
'label' => __('admin.general'),
'elements' => [
'name',
'email',
'password',
]
],
'tab2' => [
'label' => __('admin.membership'),
'permissions' => [
'Benutzer Administrator',
],
'elements' => [
'departments',
'instances'
]
],
'tab3' => [
'label' => __('models.roles'),
'permissions' => [
'Benutzer Administrator',
],
'elements' => [
'roles'
]
],
'tab4' => [
'label' => __('admin.functions'),
'permissions' => [
'Benutzer Administrator',
],
'elements' => [
'membertypes1',
'membertypes2'
]
],
'tab5' => [
'label' => __('admin.notifications'),
'elements' => [
'notifications'
]
],
'tab6' => [
'label' => __('admin.account'),
'permissions' => [
'Benutzer Administrator',
],
'elements' => [
'active',
]
]
]
];
parent::__construct();
}
protected function hook_after_renderEditView(&$model, View &$views)
{
$model->type = $this->modelType;
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$model = User::withTrashed()->find($id);
$password = $request['password'];
$password_confirmation = $request['password_confirmation'];
$validators = array(
'name' => 'required|between:3,50',
'email' => 'required|email',
);
if(isset($password) || isset($password_confirmation))
{
$validators['password'] = 'min:6|confirmed';
}
if(isset($request['restore']))
{
$model->restore();
$this->addMessageSuccess(
__("messages.restored"),
__("messages.:model successfully restored", ['model' => __('models.'.$this->url)])
);
return $this->createJSONResponse();
}
else
{
$validator = Validator::make(Input::all(), $validators);
if($validator->fails())
{
$model->fill($request->all());
$this->addMessageError(
__("messages.form error"),
__("messages.please fill the form correct")
);
return $this->createJSONResponse(
$this->renderEditView($model, ['errors' => $validator->getMessageBag(), 'wizard' => false])
);
}
if(method_exists($this, 'prepareRequest'))
{
$request = $this->prepareRequest($request);
}
if(isset($password) && isset($password_confirmation) && $password == $password_confirmation)
{
$input = $request->only('name', 'email', 'email', 'password', 'active');
}
else
{
$input = $request->only('name', 'email', 'email', 'active');
}
$model->update($input);
$this->saveForeignData($model, $request);
$roles = $request['roles'];
$model->fill($input)->save();
if(isset($roles))
{
$model->roles()->sync($roles);
}
else{
$model->roles()->detach();
}
$this->addMessageSuccess(
__("messages.saved"),
__("messages.:model successfully edited", ['model' => __('models.'.$this->url)]),
true
);
return $this->createJSONResponse();
}
}
public function user_switch_start($new_user)
{
// if(getenv('APP_ENV') != 'production')
{
$new_user = User::find( $new_user );
Session::put( 'orig_user', Auth::id() );
Auth::login( $new_user );
return redirect()->back();
}
}
public function user_switch_stop()
{
// if(getenv('APP_ENV') != 'production')
{
$id = Session::pull('orig_user');
$orig_user = User::find($id);
Auth::login($orig_user);
return redirect()->back();
}
}
}