Skip to content

Commit 27c4182

Browse files
committed
Search fields are registered via AJAX and datatable reload is done by AJAX too
1 parent f84c548 commit 27c4182

8 files changed

Lines changed: 103 additions & 88 deletions

File tree

src/Controllers/TicketsController.php

Lines changed: 48 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,12 @@ public function data($ticketList = 'active')
5858
$collection = Ticket::visible();
5959

6060
if ($ticketList == 'search'){
61-
// Filter by all specified fields
62-
if(session()->has('search_fields')){
61+
if(!session()->has('search_fields')){
62+
// Load an empty table
63+
$collection->where('panichd_tickets.id', '0');
64+
65+
}else{
66+
// Filter by all specified fields
6367
$search_fields = session()->get('search_fields');
6468
foreach ($search_fields as $field => $value){
6569
if ($field == 'list'){
@@ -722,46 +726,16 @@ protected function getCacheList($list)
722726
*/
723727
public function search_form()
724728
{
725-
$data = $this->search_form_defaults();
726-
727-
return view('panichd::tickets.search', $data);
728-
}
729-
730-
/**
731-
* Ticket search results
732-
*
733-
* @return Response
734-
*/
735-
public function search_results(Request $request)
736-
{
737-
$data = $this->search_form_defaults();
738-
739-
$data['ticketList'] = 'search';
740-
741729
// Forget last search
742730
session()->forget('search_fields');
731+
732+
$data = $this->search_form_defaults();
743733

744-
// Check all fields
745-
$a_fields = array_merge($this->a_search_fields_numeric, $this->a_search_fields_text, ['list', 'start_date', 'limit_date', 'comments', 'attachment_name', 'any_text_field']);
746-
foreach ($a_fields as $field){
747-
if($request->filled($field)){
748-
$search_fields[$field] = $request->{$field};
749-
}
750-
}
751-
752-
// Check ticket tags
753-
if ($request->filled('category_id') and $request->filled('category_' . $request->category_id . '_tags')){
754-
$search_fields['tags'] = $request->{'category_' . $request->category_id . '_tags'};
755-
}
756-
757-
if (isset($search_fields)){
758-
// Store search fields in session to use in datatable
759-
session(compact('search_fields'));
760-
}
734+
$data['ticketList'] = 'search';
761735

762-
return view('panichd::tickets.search.results', $data);
736+
return view('panichd::tickets.search', $data);
763737
}
764-
738+
765739
/**
766740
* Ticket search default data
767741
*
@@ -796,6 +770,43 @@ public function search_form_defaults()
796770
return compact('c_members', 'c_status', 'priorities', 'a_categories', 'c_visible_agents', 'c_cat_tags');
797771
}
798772

773+
/**
774+
* Register search fields in user session
775+
*
776+
* @return Response
777+
*/
778+
public function register_search_fields(Request $request)
779+
{
780+
$result = "error";
781+
$message = "No field was registered";
782+
783+
// Forget last search
784+
session()->forget('search_fields');
785+
786+
// Check all fields
787+
$a_fields = array_merge($this->a_search_fields_numeric, $this->a_search_fields_text, ['list', 'start_date', 'limit_date', 'comments', 'attachment_name', 'any_text_field']);
788+
foreach ($a_fields as $field){
789+
if($request->filled($field)){
790+
$search_fields[$field] = $request->{$field};
791+
}
792+
}
793+
794+
// Check ticket tags
795+
if ($request->filled('category_id') and $request->filled('category_' . $request->category_id . '_tags')){
796+
$search_fields['tags'] = $request->{'category_' . $request->category_id . '_tags'};
797+
}
798+
799+
if (isset($search_fields)){
800+
// Store search fields in session to use in datatable
801+
session(compact('search_fields'));
802+
803+
$result = "ok";
804+
$message = count($search_fields) . " fields registered";
805+
}
806+
807+
return response()->json(['result' => $result, 'messages' => [$message]]);
808+
}
809+
799810
/**
800811
* Open Ticket creation form with optional parameters pre-setted by URL
801812
*

src/Views/shared/common.blade.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@
1212

1313
@section('footer')
1414
<script type="text/javascript">
15+
16+
function success_ajax_callback() {
17+
// You may define a specific callback in any form to do additional actions on success
18+
}
19+
1520
$(function(){
1621
// Tooltips
1722
$('.tooltip-info, .tooltip-show').tooltip();
@@ -82,12 +87,16 @@ function ajax_form_submit(_this)
8287
form.find('.form-control[name='+field+']').closest('div').find('.jquery_error_text:first').text(error).show();
8388
}
8489
});
90+
8591
}else{
8692
$('#'+errors_div).hide();
87-
if (response.url != ""){
93+
if (response.hasOwnProperty('url') && response.url != ""){
8894
window.location.href=response.url;
8995
return false;
90-
}
96+
}
97+
98+
// Custom version in search form own script
99+
success_ajax_callback();
91100
}
92101
}
93102
});

src/Views/tickets/datatable/loader.blade.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
<script>
1+
<script type="text/javascript">
2+
var datatable = "";
23
$(function(){
34
// Ticket list load
4-
$('.table').DataTable({
5+
datatable = $('.table').DataTable({
56
processing: false,
67
serverSide: true,
78
responsive: true,

src/Views/tickets/search.blade.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,29 @@
11
@extends($master)
22
@section('page')
3-
Search tickets
3+
Search results
44
@endsection
55

66
@include('panichd::shared.common')
77

8+
@include('panichd::tickets.datatable.assets')
9+
810
@section('content')
9-
@include('panichd::tickets.search.form')
11+
@include('panichd::tickets.search.form')
12+
<div id="search_results" class="card bg-light" style="display: none">
13+
<div class="card-body">
14+
<h5 class="card-title mb-4">Search results
15+
<button type="button" id="edit_search" class="btn btn-default btn-sm ml-4">Edit search</button>
16+
</h5>
17+
@include('panichd::tickets.datatable.header')
18+
</div>
19+
</div>
1020
@endsection
1121

1222
@include('panichd::shared.datetimepicker')
1323

1424
@section('footer')
25+
@include('panichd::tickets.datatable.loader')
26+
@include('panichd::tickets.datatable.events')
1527
@include('panichd::tickets.partials.form_scripts')
1628
@include('panichd::tickets.search.scripts')
1729
@include('panichd::tickets.partials.tags_footer_script')

src/Views/tickets/search/form.blade.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
<div id="search_form" class="card bg-light mb-2" @if(isset($ticketList) && $ticketList == 'search') style="display: none" @endif><div class="card-body">
2-
{!! CollectiveForm::open(['route'=> $setting->grab('main_route').'.search.results', 'method' => 'POST']) !!}
1+
<div id="search_form" class="card bg-light mb-2"><div class="card-body">
2+
{!! CollectiveForm::open(['route'=> $setting->grab('main_route').'.search.register', 'method' => 'POST']) !!}
33

44
<legend>Search tickets</legend>
55

@@ -222,7 +222,8 @@
222222

223223
<div class="text-center"><!-- SUBMIT BUTTON -->
224224
{!! CollectiveForm::submit('Search', [
225-
'class' => 'btn btn-primary'
225+
'class' => 'btn btn-primary ajax_form_submit',
226+
'data-errors_div' => 'form_errors'
226227
]) !!}
227228
</div>
228229
{!! CollectiveForm::close() !!}

src/Views/tickets/search/results.blade.php

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/Views/tickets/search/scripts.blade.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
11
<script type="text/javascript">
2+
// After registering search fields
3+
function success_ajax_callback() {
4+
// Hide search form
5+
$('#search_form').hide();
6+
7+
// Load datatable with the new search fields
8+
datatable.ajax.reload();
9+
10+
// Show datatable container
11+
$('#search_results').show();
12+
}
13+
214
$(function(){
315
/* Category change:
416
- checks for permissions in new category
@@ -31,5 +43,13 @@
3143
$('#jquery_tag_category_'+$(this).val()).next().show();
3244
}
3345
});
46+
47+
// Edit search button
48+
$('#edit_search').click(function(e){
49+
e.preventDefault();
50+
51+
$('#search_results').hide();
52+
$('#search_form').slideDown();
53+
});
3454
});
3555
</script>

src/routes.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
->name("$main_route.search.form")
2323
->middleware('PanicHD\PanicHD\Middleware\IsAgentMiddleware');
2424

25-
// Search results
26-
Route::post("$main_route_path/search", 'PanicHD\PanicHD\Controllers\TicketsController@search_results')
27-
->name("$main_route.search.results")
25+
// Search register
26+
Route::post("$main_route_path/search", 'PanicHD\PanicHD\Controllers\TicketsController@register_search_fields')
27+
->name("$main_route.search.register")
2828
->middleware('PanicHD\PanicHD\Middleware\IsAgentMiddleware');
2929

3030
// Notice list

0 commit comments

Comments
 (0)