Skip to content

Commit 45b472b

Browse files
committed
Ticket filters: Move filter validation to TicketFilters trait. Unificate validation code in FiltersController to use the trait main function. Use validation in ticket list
1 parent 9d5cf01 commit 45b472b

3 files changed

Lines changed: 111 additions & 76 deletions

File tree

src/Controllers/FiltersController.php

Lines changed: 34 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77
use PanicHD\PanicHD\Models;
88
use PanicHD\PanicHD\Models\Setting;
99
use PanicHD\PanicHD\Traits\CacheVars;
10+
use PanicHD\PanicHD\Traits\TicketFilters;
1011

1112

1213
class FiltersController extends Controller
1314
{
14-
use CacheVars;
15+
use CacheVars, TicketFilters;
1516

16-
// Available ticket filters
17-
private $a_filters = ['currentLevel', 'owner', 'calendar', 'year', 'category', 'agent'];
17+
// $a_filters is in TicketFilters trait
1818

1919
// Filters that can be called via /filteronly/
2020
private $a_only_filters = ['category', 'owner', 'agent'];
@@ -31,60 +31,19 @@ class FiltersController extends Controller
3131
*/
3232
public function manage(Request $request, $filter, $value)
3333
{
34-
3534
//### PENDING: User permissions check or redirect back
3635

3736
if (in_array($filter, $this->a_filters) == true) {
3837
if ($value == 'remove') {
3938
// Delete filter
4039
$request->session()->forget('panichd_filter_'.$filter);
4140

42-
// General filter uncheck if none
43-
$current = false;
44-
foreach ($this->a_filters as $single){
45-
if ($request->session()->exists('panichd_filter_'.$single)){
46-
$current = true;
47-
break;
48-
}
49-
}
50-
if (!$current){
51-
$request->session()->forget('panichd_filters');
52-
}
53-
} else {
54-
$add = false;
55-
56-
// Filter checks
57-
if ($filter=='currentLevel' and in_array($value,[1,2,3])){
58-
$add = true;
59-
}
60-
61-
if ($filter == 'owner' and $value == 'me') {
62-
$add = true;
63-
}
64-
65-
if ($filter == 'calendar' and in_array($value, ['expired', 'today', 'tomorrow', 'week', 'month', 'within-7-days', 'within-14-days', 'not-scheduled'])){
66-
$add = true;
67-
}
41+
// Check all filters
42+
$this->validateFilters($request);
6843

69-
if ($filter == 'year' and ($value == 'all' or in_array($value, range($this->getFirstTicketCompleteYear(), date('Y'))))){
70-
$add = true;
71-
}
72-
73-
if ($filter == 'category' and Models\Category::where('id', $value)->count() == 1) {
74-
$add = true;
75-
}
76-
77-
if ($filter == 'agent' and Models\Member::where('id', $value)->count() == 1) {
78-
$add = true;
79-
}
80-
81-
// Add filter
82-
if ($add) {
83-
$request->session()->put('panichd_filter_'.$filter, $value);
84-
85-
// General filter check
86-
$request->session()->put('panichd_filters','yes');
87-
}
44+
} else {
45+
// Validate and add a filter
46+
$this->addAFilter($request, $filter, $value);
8847
}
8948
}
9049

@@ -98,34 +57,13 @@ public function only(Request $request, $filter, $value, $list)
9857
{
9958
if (in_array($filter, $this->a_only_filters) and in_array($list, array_keys($this->a_lists))){
10059

101-
$apply = false;
102-
103-
if (in_array($filter, ['owner', 'agent'])){
104-
$member = Models\Member::where('id', $value);
60+
// Delete each filter from session
61+
foreach ($this->a_filters as $delete){
62+
$request->session()->forget('panichd_filter_'.$delete);
10563
}
10664

107-
if (($filter == "owner" and $member->count() == 1)
108-
or ($filter == "agent" and $member->count() == 1 and $member->first()->isAgent())){
109-
110-
$apply = true;
111-
112-
}elseif($filter == "category" and Models\Category::where('id', $value)->count() == 1){
113-
114-
$apply = true;
115-
}
116-
117-
if ($apply){
118-
// Delete each filter from session
119-
foreach ($this->a_filters as $delete){
120-
$request->session()->forget('panichd_filter_'.$delete);
121-
}
122-
123-
// Add single filter
124-
$request->session()->put('panichd_filter_'.$filter, $value);
125-
126-
// General filter check
127-
$request->session()->put('panichd_filters','yes');
128-
65+
// Validate and add a filter
66+
if ($this->addAFilter($request, $filter, $value)){
12967
// Redirect to specified route
13068
return redirect()->route(Setting::grab('main_route').$this->a_lists[$list]);
13169
}
@@ -134,6 +72,27 @@ public function only(Request $request, $filter, $value, $list)
13472
return \Redirect::back();
13573
}
13674

75+
/*
76+
* Add a filter and validate it
77+
*
78+
* @Return bool
79+
*/
80+
public function addAFilter($request, $filter, $value)
81+
{
82+
// Add filter
83+
$request->session()->put('panichd_filter_'.$filter, $value);
84+
85+
// Check all filters
86+
list($request, $filters_count) = $this->validateFilters($request);
87+
88+
if ($filters_count > 0) {
89+
// General filter check
90+
$request->session()->put('panichd_filters','yes');
91+
}
92+
93+
return $request->session()->exists('panichd_filter_'.$filter);
94+
}
95+
13796
/*
13897
* Remove all filters
13998
*/

src/Controllers/TicketsController.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@
2323
use PanicHD\PanicHD\Traits\Attachments;
2424
use PanicHD\PanicHD\Traits\CacheVars;
2525
use PanicHD\PanicHD\Traits\Purifiable;
26+
use PanicHD\PanicHD\Traits\TicketFilters;
2627

2728
class TicketsController extends Controller
2829
{
29-
use Attachments, CacheVars, Purifiable;
30+
use Attachments, CacheVars, Purifiable, TicketFilters;
3031

3132
protected $tickets;
3233
protected $member;
@@ -405,6 +406,9 @@ public function indexProcess($request, $ticketList)
405406
'ticketList'=>$ticketList,
406407
'a_cat_agents'=>$a_cat_agents
407408
];
409+
410+
$this->validateFilters($request);
411+
408412
$data = array_merge ($data, $this->ticketCounts($request, $ticketList));
409413

410414
return view('panichd::tickets.index', $data);

src/Traits/TicketFilters.php

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
3+
namespace PanicHD\PanicHD\Traits;
4+
5+
use PanicHD\PanicHD\Models;
6+
7+
trait TicketFilters
8+
{
9+
// Available ticket filters
10+
private $a_filters = ['currentLevel', 'owner', 'calendar', 'year', 'category', 'agent'];
11+
12+
/*
13+
* Validate all present filters. Delete ones with no valid data
14+
*/
15+
public function validateFilters($request)
16+
{
17+
$filters_count = 0;
18+
19+
if (session('panichd_filter_currentLevel') != ""){
20+
if(!in_array(session('panichd_filter_currentLevel'),[1,2,3])){
21+
$request->session()->forget('panichd_filter_currentLevel');
22+
}else
23+
$filters_count++;
24+
}
25+
26+
if (session('panichd_filter_owner') != ""){
27+
$owner = session('panichd_filter_owner');
28+
if ($owner != "me" and is_null(Models\Member::find($owner))){
29+
$request->session()->forget('panichd_filter_owner');
30+
}else
31+
$filters_count++;
32+
}
33+
34+
if (session('panichd_filter_calendar') != ""){
35+
if (!in_array(session('panichd_filter_calendar'), ['expired', 'today', 'tomorrow', 'week', 'month', 'within-7-days', 'within-14-days', 'not-scheduled'])){
36+
$request->session()->forget('panichd_filter_calendar');
37+
}else
38+
$filters_count++;
39+
}
40+
41+
if (session('panichd_filter_year') != ""){
42+
$year = session('panichd_filter_year');
43+
if ($year != 'all' and !in_array($year, range($this->getFirstTicketCompleteYear(), date('Y')))){
44+
$request->session()->forget('panichd_filter_year');
45+
}else
46+
$filters_count++;
47+
}
48+
49+
50+
if (session('panichd_filter_category') != ""){
51+
if (is_null(Models\Category::find(session('panichd_filter_category')))){
52+
$request->session()->forget('panichd_filter_year');
53+
}else
54+
$filters_count++;
55+
}
56+
57+
if (session('panichd_filter_agent') != ""){
58+
$member = Models\Member::find(session('panichd_filter_agent'));
59+
if (is_null($member) or !$member->isAgent()){
60+
$request->session()->forget('panichd_filter_agent');
61+
}else
62+
$filters_count++;
63+
}
64+
65+
// General filter uncheck if none
66+
if ($filters_count == 0){
67+
$request->session()->forget('panichd_filters');
68+
}
69+
70+
return [$request, $filters_count];
71+
}
72+
}

0 commit comments

Comments
 (0)