Skip to content

Commit 20bba89

Browse files
committed
Merge branch 'dev' of https://github.com/panichelpdesk/panichd into dev
2 parents 3bafc5d + 45b472b commit 20bba89

42 files changed

Lines changed: 1057 additions & 586 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/Controllers/CategoriesController.php

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,12 @@ public function create()
4646
*/
4747
public function store(Request $request)
4848
{
49-
list($request, $reason_rules, $a_reasons) = $this->add_reasons_to($request);
49+
list($request, $reason_rules, $reason_messages, $a_reasons) = $this->add_reasons_to($request);
5050

51-
list($request, $tag_rules, $a_tags_new, $a_tags_update) = $this->add_tags_to($request);
51+
list($request, $tag_rules, $tag_messages, $a_tags_new, $a_tags_update) = $this->add_tags_to($request);
5252

53-
// Do Laravel validation
54-
$rules = array_merge($reason_rules, $tag_rules);
55-
$this->do_validate($request, $rules);
53+
// Do Laravel validation
54+
$this->do_validate($request, array_merge($reason_rules, $tag_rules), array_merge($reason_messages, $tag_messages));
5655

5756
$category = new Category();
5857

@@ -136,13 +135,12 @@ protected function Statuses()
136135
*/
137136
public function update(Request $request, $id)
138137
{
139-
list($request, $reason_rules, $a_reasons) = $this->add_reasons_to($request);
138+
list($request, $reason_rules, $reason_messages, $a_reasons) = $this->add_reasons_to($request);
140139

141-
list($request, $tag_rules, $a_tags_new, $a_tags_update) = $this->add_tags_to($request);
140+
list($request, $tag_rules, $tag_messages, $a_tags_new, $a_tags_update) = $this->add_tags_to($request);
142141

143142
// Do Laravel validation
144-
$rules = array_merge($reason_rules, $tag_rules);
145-
$this->do_validate($request, $rules);
143+
$this->do_validate($request, array_merge($reason_rules, $tag_rules), array_merge($reason_messages, $tag_messages));
146144

147145
$category = Category::findOrFail($id);
148146

@@ -173,9 +171,11 @@ public function update(Request $request, $id)
173171
*/
174172
protected function add_reasons_to($request)
175173
{
176-
$rules = $a_new = $a_update = $a_delete = [];
174+
$reason_rules = $reason_messages = $a_new = $a_update = $a_delete = [];
177175
$regex_text = trans('panichd::lang.regex-text-inline');
178176

177+
$min_chars = "5";
178+
179179
if ($request->exists('reason_ordering')){
180180
foreach ($request->input('reason_ordering') as $ordering=>$i){
181181
if ($request->has('jquery_delete_reason_'.$i)){
@@ -187,23 +187,33 @@ protected function add_reasons_to($request)
187187
];
188188
if ($request->exists('jquery_reason_text_'.$i)){
189189
$reason['text'] = $request->input('jquery_reason_text_'.$i);
190-
$rules['jquery_reason_text_'.$i] = "required|min:5|regex:".$regex_text;
190+
$reason_rules['jquery_reason_text_'.$i] = "required|min:$min_chars|regex:".$regex_text;
191+
192+
// Reason message
193+
$reason_messages['jquery_reason_text_'.$i.'.required'] = trans('panichd::admin.category-reason-is-empty', ['number' => $i+1]);
194+
$reason_messages['jquery_reason_text_'.$i.'.min'] = trans('panichd::admin.category-reason-too-short', ['number' => $i+1, 'name'=>$reason['text'], 'min' => $min_chars]);
191195
}
196+
192197
if ($request->exists('jquery_reason_status_id_'.$i)){
193198
$reason['status_id'] = $request->input('jquery_reason_status_id_'.$i);
194-
$rules['jquery_reason_status_id_'.$i] = "required|exists:panichd_statuses,id";
199+
$reason_rules['jquery_reason_status_id_'.$i] = "required|exists:panichd_statuses,id";
200+
201+
// Reason message
202+
$reason_messages['jquery_reason_status_id_'.$i.'.required'] = trans('panichd::admin.category-reason-no-status', ['number' => $i+1,'name'=>$reason['text']]);
195203
}
196204

197205
if ($request->input('jquery_reason_id_'.$i) == "new"){
198206
$a_new[] = $reason;
199207
}else{
200208
$a_update[$request->input('jquery_reason_id_'.$i)] = $reason;
201-
}
209+
}
202210
}
203211
}
204212
}
205213

206-
return [$request, $rules, ['new'=>$a_new, 'update'=>$a_update, 'delete'=>$a_delete]];
214+
$a_reasons = ['new'=>$a_new, 'update'=>$a_update, 'delete'=>$a_delete];
215+
216+
return [$request, $reason_rules, $reason_messages, $a_reasons];
207217
}
208218

209219
/**
@@ -215,7 +225,7 @@ protected function add_reasons_to($request)
215225
*/
216226
protected function add_tags_to($request)
217227
{
218-
$rules = [];
228+
$tag_rules = $tag_messages = [];
219229

220230
// Allow alphanumeric and the following: ? @ / - _
221231
$tag_rule = "required|regex:/^[A-Za-z0-9?@\/\-_\s]+$/";
@@ -227,7 +237,8 @@ protected function add_tags_to($request)
227237
foreach ($request->input('new_tags') as $tag) {
228238
$a_tags_new[] = $tag;
229239
$request['tag'.++$i] = $tag;
230-
$rules['tag'.$i] = $tag_rule;
240+
$tag_rules['tag'.$i] = $tag_rule;
241+
$tag_messages['tag'.$i.'.regex'] = trans('panichd::admin.category-tag-not-valid-format', ['tag'=>$tag]);
231242
}
232243
}
233244

@@ -240,7 +251,8 @@ protected function add_tags_to($request)
240251
$request->merge(['jquery_tag_name_'.$i=>$tag]);
241252
$a_tags_update[$request->input('jquery_tag_id_'.$i)]['name'] = $tag;
242253
$request['jquery_tag_name_'.$i] = $tag;
243-
$rules['jquery_tag_name_'.$i] = $tag_rule;
254+
$tag_rules['jquery_tag_name_'.$i] = $tag_rule;
255+
$tag_messages['jquery_tag_name_'.$i.'.regex'] = trans('panichd::admin.category-tag-not-valid-format', ['tag'=>$tag]);
244256
}
245257

246258
// Add colors for tag update
@@ -250,15 +262,15 @@ protected function add_tags_to($request)
250262
}
251263
}
252264

253-
return [$request, $rules, $a_tags_new, $a_tags_update];
265+
return [$request, $tag_rules, $tag_messages, $a_tags_new, $a_tags_update];
254266
}
255267

256268
/**
257269
* Does the request validation.
258270
*
259271
* @param Request $request
260272
*/
261-
protected function do_validate($request, $rules)
273+
protected function do_validate($request, $rules, $reason_messages)
262274
{
263275
$rules = array_merge($rules, [
264276
'name' => 'required',
@@ -273,7 +285,7 @@ protected function do_validate($request, $rules)
273285
]);
274286
}
275287

276-
$this->validate($request, $rules);
288+
$this->validate($request, $rules, $reason_messages);
277289
}
278290

279291
/*

src/Controllers/ConfigurationsController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public function index()
2828
'email.google_plus_link', 'email.facebook_link', 'email.twitter_link', 'email.footer', 'email.footer_link',
2929
'email.color_body_bg', 'email.color_header_bg', 'email.color_content_bg', 'email.color_footer_bg',
3030
'email.color_button_bg', 'email.account.name', 'email.account.mailbox' ];
31-
$tickets_section = ['default_status_id', 'default_close_status_id', 'default_reopen_status_id', 'subject_content_column', 'paginate_items', 'attachments_ticket_max_size', 'attachments_ticket_max_files_num', 'attachments_mimes', 'attachments_path', 'thumbnails_path', 'oldest_year', 'user_route'];
31+
$tickets_section = ['default_priority_id', 'default_status_id', 'default_close_status_id', 'default_reopen_status_id', 'subject_content_column', 'paginate_items', 'attachments_ticket_max_size', 'attachments_ticket_max_files_num', 'attachments_mimes', 'attachments_path', 'thumbnails_path', 'oldest_year', 'user_route', 'html_replacements'];
3232
$perms_section = ['agent_restrict', 'close_ticket_perm', 'reopen_ticket_perm'];
3333
$editor_section = ['editor_enabled', 'include_font_awesome', 'editor_html_highlighter', 'codemirror_theme',
3434
'summernote_locale', 'summernote_options_json_file', 'summernote_options_user', 'purifier_config', ];

src/Controllers/DashboardController.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,11 @@ public function index($indicator_period = 2)
2424

2525
// Load Dashboard info
2626
$tickets_count = Ticket::count();
27-
$open_tickets_count = Ticket::whereNull('completed_at')->count();
28-
$closed_tickets_count = $tickets_count - $open_tickets_count;
27+
$a_tickets_count = [
28+
'newest' => Ticket::newest()->count(),
29+
'active' => Ticket::active()->count(),
30+
'complete' => Ticket::complete()->count()
31+
];
2932

3033
// Per Category pagination
3134
$categories = Category::paginate(10, ['*'], 'cat_page');
@@ -70,8 +73,8 @@ public function index($indicator_period = 2)
7073
return view('panichd::admin.index',
7174
compact(
7275
'open_tickets_count',
73-
'closed_tickets_count',
7476
'tickets_count',
77+
'a_tickets_count',
7578
'categories',
7679
'agents',
7780
'users',

src/Controllers/FiltersController.php

Lines changed: 90 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -5,85 +5,112 @@
55
use App\Http\Controllers\Controller;
66
use Illuminate\Http\Request;
77
use PanicHD\PanicHD\Models;
8+
use PanicHD\PanicHD\Models\Setting;
89
use PanicHD\PanicHD\Traits\CacheVars;
10+
use PanicHD\PanicHD\Traits\TicketFilters;
911

1012

1113
class FiltersController extends Controller
1214
{
13-
use CacheVars;
15+
use CacheVars, TicketFilters;
16+
17+
// $a_filters is in TicketFilters trait
18+
19+
// Filters that can be called via /filteronly/
20+
private $a_only_filters = ['category', 'owner', 'agent'];
21+
22+
// Ticket list names and related route name
23+
private $a_lists = [
24+
'newest' => '-newest',
25+
'active' => '.index',
26+
'complete' => '-complete'
27+
];
1428

29+
/*
30+
* Update a single filter
31+
*/
1532
public function manage(Request $request, $filter, $value)
1633
{
17-
$a_filters = ['currentLevel', 'owner', 'calendar', 'year', 'category', 'agent'];
18-
//### PENDING: User permissions check or redirect back
34+
//### PENDING: User permissions check or redirect back
1935

20-
if ($filter=="removeall"){
21-
// Delete each filter from session
22-
foreach ($a_filters as $single){
23-
$request->session()->forget('panichd_filter_'.$single);
24-
}
25-
26-
// General filter uncheck
27-
$request->session()->forget('panichd_filters');
28-
29-
// Redirect to specified list
30-
return \Redirect::route(Models\Setting::grab('main_route').($value=="complete" ? '-complete' : '.index'));
31-
}
32-
33-
if (in_array($filter, $a_filters) == true) {
36+
if (in_array($filter, $this->a_filters) == true) {
3437
if ($value == 'remove') {
3538
// Delete filter
3639
$request->session()->forget('panichd_filter_'.$filter);
3740

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

69-
if ($filter == 'category' and Models\Category::where('id', $value)->count() == 1) {
70-
$add = true;
71-
}
72-
73-
if ($filter == 'agent' and Models\Member::where('id', $value)->count() == 1) {
74-
$add = true;
75-
}
76-
77-
// Add filter
78-
if ($add) {
79-
$request->session()->put('panichd_filter_'.$filter, $value);
80-
81-
// General filter check
82-
$request->session()->put('panichd_filters','yes');
83-
}
44+
} else {
45+
// Validate and add a filter
46+
$this->addAFilter($request, $filter, $value);
8447
}
8548
}
8649

8750
return \Redirect::back();
8851
}
89-
}
52+
53+
/*
54+
* Delete all filters and apply only the selected one
55+
*/
56+
public function only(Request $request, $filter, $value, $list)
57+
{
58+
if (in_array($filter, $this->a_only_filters) and in_array($list, array_keys($this->a_lists))){
59+
60+
// Delete each filter from session
61+
foreach ($this->a_filters as $delete){
62+
$request->session()->forget('panichd_filter_'.$delete);
63+
}
64+
65+
// Validate and add a filter
66+
if ($this->addAFilter($request, $filter, $value)){
67+
// Redirect to specified route
68+
return redirect()->route(Setting::grab('main_route').$this->a_lists[$list]);
69+
}
70+
}
71+
72+
return \Redirect::back();
73+
}
74+
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+
96+
/*
97+
* Remove all filters
98+
*/
99+
public function removeall(Request $request, $list = null)
100+
{
101+
// Delete each filter from session
102+
foreach ($this->a_filters as $filter){
103+
$request->session()->forget('panichd_filter_'.$filter);
104+
}
105+
106+
// General filter uncheck
107+
$request->session()->forget('panichd_filters');
108+
109+
if ($list != "" and array_key_exists($list, $this->a_lists)){
110+
// Redirect to specified route
111+
return redirect()->route(Setting::grab('main_route').$this->a_lists[$list]);
112+
}
113+
114+
return \Redirect::back();
115+
}
116+
}

src/Controllers/NoticesController.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@ public function index()
2525
$a_users = Models\Member::whereNotNull('ticketit_department')->orderBy('name')->get();
2626

2727
// All departments
28-
$a_depts = Models\Department::orderBy('department')->orderBy('sub1')->get();
28+
$departments = Models\Department::doesntHave('ancestor')->with(['descendants' => function($query){
29+
$query->orderBy('name');
30+
}])->orderBy('name')->get();
2931

30-
return view('panichd::admin.notice.index', compact('a_users', 'a_depts'));
32+
return view('panichd::admin.notice.index', compact('a_users', 'departments'));
3133
}
3234

3335
/**

0 commit comments

Comments
 (0)