@@ -15,17 +15,14 @@ class FiltersController extends Controller
1515 use CacheVars, TicketFilters;
1616
1717 // $a_filters is in TicketFilters trait
18-
19- // Filters that can be called via /filteronly/
20- private $ a_only_filters = ['category ' , 'owner ' , 'agent ' ];
21-
18+
2219 // Ticket list names and related route name
2320 private $ a_lists = [
2421 'newest ' => '-newest ' ,
2522 'active ' => '.index ' ,
2623 'complete ' => '-complete '
2724 ];
28-
25+
2926 /*
3027 * Update a single filter
3128 */
@@ -37,10 +34,10 @@ public function manage(Request $request, $filter, $value)
3734 if ($ value == 'remove ' ) {
3835 // Delete filter
3936 $ request ->session ()->forget ('panichd_filter_ ' .$ filter );
40-
37+
4138 // Check all filters
4239 $ this ->validateFilters ($ request );
43-
40+
4441 } else {
4542 // Validate and add a filter
4643 $ this ->addAFilter ($ request , $ filter , $ value );
@@ -49,29 +46,89 @@ public function manage(Request $request, $filter, $value)
4946
5047 return \Redirect::back ();
5148 }
52-
49+
5350 /*
5451 * Delete all filters and apply only the selected one
5552 */
5653 public function only (Request $ request , $ filter , $ value , $ list )
5754 {
58- if (in_array ($ filter , $ this -> a_only_filters ) and in_array ( $ list , array_keys ($ this ->a_lists ))){
59-
55+ if (in_array ($ list , array_keys ($ this ->a_lists ))){
56+
6057 // Delete each filter from session
6158 foreach ($ this ->a_filters as $ delete ){
6259 $ request ->session ()->forget ('panichd_filter_ ' .$ delete );
6360 }
64-
61+
6562 // Validate and add a filter
6663 if ($ this ->addAFilter ($ request , $ filter , $ value )){
6764 // Redirect to specified route
6865 return redirect ()->route (Setting::grab ('main_route ' ).$ this ->a_lists [$ list ]);
6966 }
7067 }
71-
68+
7269 return \Redirect::back ();
7370 }
74-
71+
72+ /*
73+ * Delete all previous filters and apply just the valid ones from the requested
74+ * You may specify a ticket list as a final parameter (like URL/complete) o as key/value (like URL/list/complete)
75+ */
76+ public function just (Request $ request , $ parameters )
77+ {
78+ // Get URL parameters and replace a_current array with them
79+ $ a_temp = explode ('/ ' , $ parameters );
80+ $ a_valid = [];
81+ $ list = false ;
82+
83+ $ i = 0 ;
84+ $ filter = "" ;
85+ foreach ($ a_temp as $ param ){
86+ $ i ++;
87+ if ($ filter == "" ){
88+ if (!$ list and $ i == count ($ a_temp ) and array_key_exists ($ param , $ this ->a_lists )){
89+ // Allow ticket list as a last parameter if not set as list/list_key in previous parameters
90+ $ list = $ param ;
91+ }else
92+ $ filter = $ param ;
93+ }else {
94+ if (in_array ($ filter , $ this ->a_filters )){
95+ // Add filter to validate
96+ $ a_valid [$ filter ] = $ param ;
97+ }elseif ($ filter == 'list ' and array_key_exists ($ param , $ this ->a_lists )){
98+ // Select ticket list
99+ $ list = $ param ;
100+ }
101+ $ filter = "" ;
102+ }
103+ }
104+
105+ // Delete each filter from session
106+ foreach ($ this ->a_filters as $ delete ){
107+ $ request ->session ()->forget ('panichd_filter_ ' .$ delete );
108+ }
109+
110+ if ($ a_valid ){
111+ foreach ($ a_valid as $ filter => $ value ){
112+ // Add filter
113+ $ request ->session ()->put ('panichd_filter_ ' .$ filter , $ value );
114+ }
115+
116+ // Check all filters
117+ list ($ request , $ filters_count ) = $ this ->validateFilters ($ request );
118+
119+ if ($ filters_count > 0 ) {
120+ // General filter check
121+ $ request ->session ()->put ('panichd_filters ' ,'yes ' );
122+ }
123+ }
124+
125+ if ($ list ){
126+ // Redirect to specified list
127+ return redirect ()->route (Setting::grab ('main_route ' ) . $ this ->a_lists [$ list ]);
128+ }else
129+ return redirect ()->route (Setting::grab ('main_route ' ) . '.index ' );
130+ }
131+
75132 /*
76133 * Add a filter and validate it
77134 *
@@ -81,18 +138,18 @@ public function addAFilter($request, $filter, $value)
81138 {
82139 // Add filter
83140 $ request ->session ()->put ('panichd_filter_ ' .$ filter , $ value );
84-
141+
85142 // Check all filters
86143 list ($ request , $ filters_count ) = $ this ->validateFilters ($ request );
87-
144+
88145 if ($ filters_count > 0 ) {
89146 // General filter check
90147 $ request ->session ()->put ('panichd_filters ' ,'yes ' );
91148 }
92-
149+
93150 return $ request ->session ()->exists ('panichd_filter_ ' .$ filter );
94151 }
95-
152+
96153 /*
97154 * Remove all filters
98155 */
@@ -102,15 +159,15 @@ public function removeall(Request $request, $list = null)
102159 foreach ($ this ->a_filters as $ filter ){
103160 $ request ->session ()->forget ('panichd_filter_ ' .$ filter );
104161 }
105-
162+
106163 // General filter uncheck
107164 $ request ->session ()->forget ('panichd_filters ' );
108-
165+
109166 if ($ list != "" and array_key_exists ($ list , $ this ->a_lists )){
110167 // Redirect to specified route
111168 return redirect ()->route (Setting::grab ('main_route ' ).$ this ->a_lists [$ list ]);
112169 }
113-
170+
114171 return \Redirect::back ();
115172 }
116- }
173+ }
0 commit comments