Shim workaround to avoid max_input_vars and max_multipart_body_parts limits
max_input_vars = 2000 max_multipart_body_parts = 2048
This commit is contained in:
@@ -85,14 +85,19 @@ class GroupsController extends Controller
|
||||
$permissions = config('permissions');
|
||||
$groupPermissions = $group->decodePermissions();
|
||||
|
||||
// dd(config('permissions'));
|
||||
|
||||
if ((!is_array($groupPermissions)) || (!$groupPermissions)) {
|
||||
$groupPermissions = [];
|
||||
}
|
||||
$selected_array = Helper::selectedPermissionsArray($permissions, $groupPermissions);
|
||||
$associated_users = $group->users()->get();
|
||||
|
||||
//dd($associated_users->toArray());
|
||||
return view('groups.edit', compact('group', 'permissions', 'selected_array', 'groupPermissions'))->with('associated_users', $associated_users);
|
||||
// Get the unselected users
|
||||
$users = \App\Models\User::get();
|
||||
$unselected_users = $users->diffKeys($associated_users);
|
||||
|
||||
return view('groups.edit', compact('group', 'permissions', 'selected_array', 'groupPermissions'))->with('associated_users', $associated_users)->with('unselected_users', $unselected_users);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -106,13 +111,23 @@ class GroupsController extends Controller
|
||||
public function update(Request $request, Group $group) : RedirectResponse
|
||||
{
|
||||
$group->name = $request->input('name');
|
||||
$group->permissions = json_encode($request->input('permission'));
|
||||
\Log::error(print_r($_POST, true));
|
||||
|
||||
|
||||
if ($request->filled('permission')) {
|
||||
$group->permissions = json_encode($request->array('permission'));
|
||||
} else {
|
||||
$group->permissions = null;
|
||||
}
|
||||
|
||||
$group->notes = $request->input('notes');
|
||||
|
||||
|
||||
if (! config('app.lock_passwords')) {
|
||||
if ($group->save()) {
|
||||
$group->users()->sync($request->input('associated_users'));
|
||||
|
||||
$associated_users = explode(',',$request->input('users_to_add'));
|
||||
$group->users()->sync($associated_users);
|
||||
return redirect()->route('groups.index')->with('success', trans('admin/groups/message.success.update'));
|
||||
}
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ class UserSeeder extends Seeder
|
||||
]))
|
||||
->create();
|
||||
|
||||
User::factory()->count(50)->viewAssets()
|
||||
User::factory()->count(2000)->viewAssets()
|
||||
->state(new Sequence(fn($sequence) => [
|
||||
'company_id' => $companyIds->random(),
|
||||
'department_id' => $departmentIds->random(),
|
||||
|
||||
67
public/js/dist/all.js
vendored
67
public/js/dist/all.js
vendored
@@ -52902,6 +52902,73 @@ $(".admin").change(function () {
|
||||
}
|
||||
});
|
||||
|
||||
// Handle the select/deselect of the select boxes with the button from right to left
|
||||
|
||||
$(function () {
|
||||
function moveItems(origin, dest) {
|
||||
$(origin).find(':selected').appendTo(dest);
|
||||
$(dest).attr('selected', true);
|
||||
$(dest).sort_select_box();
|
||||
// $('#user_id_box').val($('#selected-select').val());
|
||||
}
|
||||
function moveAllItems(origin, dest) {
|
||||
$(origin).children("option:visible").appendTo(dest);
|
||||
$(dest).attr('selected', true);
|
||||
$(dest).sort_select_box();
|
||||
// $('#user_id_box').val($('#selected-select').val());
|
||||
}
|
||||
$('.left').on('click', function () {
|
||||
var container = $(this).closest('.addremove-multiselect');
|
||||
moveItems($(container).find('select.multiselect.selected'), $(container).find('select.multiselect.available'));
|
||||
});
|
||||
$('.right').on('click', function () {
|
||||
var container = $(this).closest('.addremove-multiselect');
|
||||
moveItems($(container).find('select.multiselect.available'), $(container).find('select.multiselect.selected'));
|
||||
});
|
||||
$('.leftall').on('click', function () {
|
||||
var container = $(this).closest('.addremove-multiselect');
|
||||
moveAllItems($(container).find('select.multiselect.selected'), $(container).find('select.multiselect.available'));
|
||||
// $('#user_id_box').val($('#selected-select').val());
|
||||
});
|
||||
$('.rightall').on('click', function () {
|
||||
var container = $(this).closest('.addremove-multiselect');
|
||||
moveAllItems($(container).find('select.multiselect.available'), $(container).find('select.multiselect.selected'));
|
||||
// $('#user_id_box').val($('#selected-select').val());
|
||||
});
|
||||
$('select.multiselect.selected').on('dblclick keyup', function (e) {
|
||||
if (e.which == 13 || e.type == 'dblclick') {
|
||||
var container = $(this).closest('.addremove-multiselect');
|
||||
moveItems($(container).find('select.multiselect.selected'), $(container).find('select.multiselect.available'));
|
||||
// $('#user_id_box').val($('#selected-select').val());
|
||||
}
|
||||
});
|
||||
$('select.multiselect.available').on('dblclick keyup', function (e) {
|
||||
if (e.which == 13 || e.type == 'dblclick') {
|
||||
var container = $(this).closest('.addremove-multiselect');
|
||||
moveItems($(container).find('select.multiselect.available'), $(container).find('select.multiselect.selected'));
|
||||
$('#user_id_box').val($('#selected-select').val());
|
||||
}
|
||||
});
|
||||
});
|
||||
$.fn.sort_select_box = function () {
|
||||
// Get options from select box
|
||||
var selected_options = $(this).children('option');
|
||||
// sort alphabetically
|
||||
selected_options.sort(function (a, b) {
|
||||
if (a.text > b.text) return 1;else if (a.text < b.text) return -1;else return 0;
|
||||
});
|
||||
//replace with sorted my_options;
|
||||
$(this).empty().append(selected_options);
|
||||
var selected_in_box = $('#selected-select').children("option:selected").val();
|
||||
var not_selected_in_box = $('#selected-select option').not(':selected').val();
|
||||
$('#user_id_box').empty().append(selected_in_box).append(not_selected_in_box);
|
||||
$('#user_count_selected_box').html($('#selected-select option').length);
|
||||
$('#user_count_unselected_box').html($('#available-select option').length);
|
||||
|
||||
// clearing any selections
|
||||
$("#" + this.attr('id') + " option").attr('selected', true);
|
||||
};
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./resources/assets/js/snipeit_modals.js":
|
||||
|
||||
2
public/js/dist/all.js.map
vendored
2
public/js/dist/all.js.map
vendored
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"/js/dist/all.js": "/js/dist/all.js?id=e78128438f0b07a393dc7947ef453b5f",
|
||||
"/js/dist/all.js": "/js/dist/all.js?id=3c3ff12f52c1cec46ad05c9665793b81",
|
||||
"/css/dist/skins/skin-black-dark.css": "/css/dist/skins/skin-black-dark.css?id=42f97cd5b9ee7521b04a448e7fc16ac9",
|
||||
"/css/dist/skins/_all-skins.css": "/css/dist/skins/_all-skins.css?id=3e8b8221c159b829a0edd562eb717563",
|
||||
"/css/build/overrides.css": "/css/build/overrides.css?id=31f0c9a27245a3b3a37a7d08ba914311",
|
||||
|
||||
@@ -625,6 +625,7 @@ $('.header-row input:radio').change(function() {
|
||||
|
||||
// Generic toggleable callouts with remember state
|
||||
$(".remember-toggle").on("click",function(){
|
||||
|
||||
var toggleable_callout_id = $(this).attr('id');
|
||||
var toggle_content_class = 'toggle-content-'+$(this).attr('id');
|
||||
var toggle_arrow = '#toggle-arrow-' + toggleable_callout_id;
|
||||
@@ -714,3 +715,87 @@ $(".admin").change(function() {
|
||||
}
|
||||
});
|
||||
|
||||
// Handle the select/deselect of the select boxes with the button from right to left
|
||||
|
||||
$(function () {
|
||||
|
||||
function moveItems(origin, dest) {
|
||||
$(origin).find(':selected').appendTo(dest);
|
||||
$(dest).attr('selected', true);
|
||||
$(dest).sort_select_box();
|
||||
// $('#user_id_box').val($('#selected-select').val());
|
||||
}
|
||||
|
||||
function moveAllItems(origin, dest) {
|
||||
$(origin).children("option:visible").appendTo(dest);
|
||||
$(dest).attr('selected', true);
|
||||
$(dest).sort_select_box();
|
||||
// $('#user_id_box').val($('#selected-select').val());
|
||||
}
|
||||
|
||||
$('.left').on('click', function () {
|
||||
var container = $(this).closest('.addremove-multiselect');
|
||||
moveItems($(container).find('select.multiselect.selected'), $(container).find('select.multiselect.available'));
|
||||
});
|
||||
|
||||
$('.right').on('click', function () {
|
||||
var container = $(this).closest('.addremove-multiselect');
|
||||
moveItems($(container).find('select.multiselect.available'), $(container).find('select.multiselect.selected'));
|
||||
|
||||
});
|
||||
|
||||
$('.leftall').on('click', function () {
|
||||
var container = $(this).closest('.addremove-multiselect');
|
||||
moveAllItems($(container).find('select.multiselect.selected'), $(container).find('select.multiselect.available'));
|
||||
// $('#user_id_box').val($('#selected-select').val());
|
||||
});
|
||||
|
||||
$('.rightall').on('click', function () {
|
||||
var container = $(this).closest('.addremove-multiselect');
|
||||
moveAllItems($(container).find('select.multiselect.available'), $(container).find('select.multiselect.selected'));
|
||||
// $('#user_id_box').val($('#selected-select').val());
|
||||
});
|
||||
|
||||
$('select.multiselect.selected').on('dblclick keyup',function(e){
|
||||
if(e.which == 13 || e.type == 'dblclick') {
|
||||
var container = $(this).closest('.addremove-multiselect');
|
||||
moveItems($(container).find('select.multiselect.selected'), $(container).find('select.multiselect.available'));
|
||||
// $('#user_id_box').val($('#selected-select').val());
|
||||
}
|
||||
});
|
||||
|
||||
$('select.multiselect.available').on('dblclick keyup',function(e){
|
||||
if(e.which == 13 || e.type == 'dblclick') {
|
||||
var container = $(this).closest('.addremove-multiselect');
|
||||
moveItems($(container).find('select.multiselect.available'), $(container).find('select.multiselect.selected'));
|
||||
$('#user_id_box').val($('#selected-select').val());
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
$.fn.sort_select_box = function(){
|
||||
// Get options from select box
|
||||
var selected_options = $(this).children('option');
|
||||
// sort alphabetically
|
||||
selected_options.sort(function(a,b) {
|
||||
if (a.text > b.text) return 1;
|
||||
else if (a.text < b.text) return -1;
|
||||
else return 0
|
||||
})
|
||||
//replace with sorted my_options;
|
||||
$(this).empty().append(selected_options);
|
||||
|
||||
var selected_in_box = $('#selected-select').children("option:selected").val();
|
||||
var not_selected_in_box = $('#selected-select option').not(':selected').val();
|
||||
|
||||
$('#user_id_box').empty().append(selected_in_box).append(not_selected_in_box);
|
||||
|
||||
$('#user_count_selected_box').html($('#selected-select option').length);
|
||||
$('#user_count_unselected_box').html($('#available-select option').length);
|
||||
|
||||
|
||||
// clearing any selections
|
||||
$("#"+this.attr('id')+" option").attr('selected', true);
|
||||
}
|
||||
@@ -41,40 +41,65 @@
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group{{ $errors->has('associated_users') ? ' has-error' : '' }}">
|
||||
<div class="callout callout-legend col-md-12">
|
||||
<h4>{{ trans('general.users') }}</h4>
|
||||
</div>
|
||||
|
||||
<label for="associated_users[]" class="col-md-3 control-label">
|
||||
{{ trans('general.users') }}
|
||||
</label>
|
||||
<!-- this is a temp fix for the select2 not working inside modals -->
|
||||
|
||||
<div class="col-md-7">
|
||||
<select class="js-data-ajax"
|
||||
data-endpoint="users"
|
||||
data-placeholder="{{ trans('general.select_user') }}"
|
||||
name="associated_users[]"
|
||||
style="width: 100%"
|
||||
id="associated_users[]"
|
||||
aria-label="associated_users[]" multiple>
|
||||
|
||||
<option value="" role="option">{{ trans('general.select_user') }}</option>
|
||||
@if(isset($associated_users))
|
||||
@foreach($associated_users as $associated_user)
|
||||
<option value="{{ $associated_user->id }}" selected="selected" role="option" aria-selected="true"
|
||||
role="option">
|
||||
{{ $associated_user->present()->fullName }} ({{ $associated_user->username }})
|
||||
</option>
|
||||
@endforeach
|
||||
@endif
|
||||
</select>
|
||||
<div class="form-group">
|
||||
<div class="col-md-12">
|
||||
|
||||
<!-- This hidden input will store the selected user IDs as a comma-separated string to avoid max_input_vars and max_multipart_body_parts php.ini issues -->
|
||||
<input type="text" name="users_to_add" id="user_id_box" class="form-control" value="{{ implode(",", $associated_users->pluck('id')->toArray()) }}"/>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="row addremove-multiselect">
|
||||
<div class="col-lg-5 col-sm-5 col-xs-12">
|
||||
<h4>Available</h4>
|
||||
<select id="available-select" class="multiselect available form-control" size="8" multiple="multiple">
|
||||
@foreach($unselected_users as $unselected_user)
|
||||
<option value="{{ $unselected_user->id }}" role="option">
|
||||
ID: {{ $unselected_user->id }}
|
||||
{{ $unselected_user->present()->fullName }} ({{ $unselected_user->username }})
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<p class="help-block"><span id="user_count_unselected_box">{{ count($unselected_users) }}</span> users </p>
|
||||
</div>
|
||||
|
||||
<div class="multiselect-controls col-lg-2 col-sm-2 col-xs-12">
|
||||
<br><br>
|
||||
<button type="button" id="rightall" class="rightall btn btn-block">Add All <i class="fa-solid fa-angles-right"></i></button>
|
||||
<button type="button" id="right" class="right btn btn-block">Add <i class="fa-solid fa-angle-right"></i></button>
|
||||
<button type="button" id="left" class="left btn btn-block"><i class="fa-solid fa-angle-left"></i> Remove</button>
|
||||
<button type="button" id="leftall" class="leftall btn btn-block"><i class="fa-solid fa-angles-left"></i> Remove All</button>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-5 col-sm-5 col-xs-12">
|
||||
<h4>In Group</h4>
|
||||
<select id="selected-select" class="multiselect selected form-control" size="8" multiple="multiple">
|
||||
@foreach($associated_users as $associated_user)
|
||||
<option value="{{ $associated_user->id }}" aria-selected="true" selected="selected" role="option">
|
||||
ID: {{ $associated_user->id }}
|
||||
{{ $associated_user->present()->fullName }} ({{ $associated_user->username }})
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<p class="help-block"><span id="user_count_selected_box">{{ count($associated_users) }}</span> in this group</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{!! $errors->first('associated_users', '<div class="col-md-8 col-md-offset-3"><span class="alert-msg" aria-hidden="true"><i class="fas fa-times" aria-hidden="true"></i> :message</span></div>') !!}
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-12">
|
||||
@include ('partials.forms.edit.permissions-base', ['use_inherit' => false])
|
||||
</div>
|
||||
|
||||
@stop
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
<!-- col-md-8 -->
|
||||
<div class="{{ isset($container_classes) ? $container_classes : 'col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1 col-sm-12 col-sm-offset-0'}}">
|
||||
|
||||
<form id="create-form" class="form-horizontal" method="post" action="{{ (isset($formAction)) ? $formAction : \Request::url() }}" autocomplete="off" role="form" enctype="multipart/form-data">
|
||||
<form id="create-form" class="form-horizontal" method="post" action="{{ (isset($formAction)) ? $formAction : \Request::url() }}" autocomplete="off" role="form">
|
||||
|
||||
<!-- box -->
|
||||
<div class="box box-default">
|
||||
|
||||
Reference in New Issue
Block a user