! Make sure closed or deleted tickets cannot be reassigned, they need to be reopened first. [Bug 654]
gruffen

gruffen commited on 2011-05-16 02:29:40
Showing 3 changed files, with 17 additions and 11 deletions.

... ...
@@ -380,7 +380,7 @@ function shd_ajax_assign()
380 380
 	if (!empty($context['ticket_id']))
381 381
 	{
382 382
 		$query = shd_db_query('', '
383
-			SELECT hdt.private, hdt.id_member_started, id_member_assigned, id_dept, 1 AS valid
383
+			SELECT hdt.private, hdt.id_member_started, id_member_assigned, id_dept, hdt.status, 1 AS valid
384 384
 			FROM {db_prefix}helpdesk_tickets AS hdt
385 385
 			WHERE {query_see_ticket}
386 386
 				AND hdt.id_ticket = {int:ticket}',
... ...
@@ -389,7 +389,7 @@ function shd_ajax_assign()
389 389
 			)
390 390
 		);
391 391
 		if ($smcFunc['db_num_rows']($query) != 0)
392
-			list($private, $ticket_starter, $ticket_assigned, $dept, $valid) = $smcFunc['db_fetch_row']($query);
392
+			list($private, $ticket_starter, $ticket_assigned, $dept, $status, $valid) = $smcFunc['db_fetch_row']($query);
393 393
 		$smcFunc['db_free_result']($query);
394 394
 	}
395 395
 	if (empty($valid))
... ...
@@ -402,7 +402,7 @@ function shd_ajax_assign()
402 402
 	if (empty($assignees))
403 403
 		return $context['ajax_return'] = array('error' => $txt['shd_no_staff_assign']);
404 404
 
405
-	if (!shd_allowed_to('shd_assign_ticket_any', $dept))
405
+	if (!shd_allowed_to('shd_assign_ticket_any', $dept) || $status == TICKET_STATUS_CLOSED || $status == TICKET_STATUS_DELETED)
406 406
 		return $context['ajax_return'] = array('error' => $txt['shd_cannot_assign']);
407 407
 
408 408
 	// OK, so we have the general values we need. Let's get user names, and get ready to kick this back to the user. We'll build the XML here though.
... ...
@@ -440,7 +440,7 @@ function shd_ajax_assign2()
440 440
 	if (!empty($context['ticket_id']))
441 441
 	{
442 442
 		$query = shd_db_query('', '
443
-			SELECT hdt.private, hdt.id_member_started, id_member_assigned, subject, id_dept, 1 AS valid
443
+			SELECT hdt.private, hdt.id_member_started, id_member_assigned, subject, id_dept, hdt.status, 1 AS valid
444 444
 			FROM {db_prefix}helpdesk_tickets AS hdt
445 445
 			WHERE {query_see_ticket}
446 446
 				AND hdt.id_ticket = {int:ticket}',
... ...
@@ -449,7 +449,7 @@ function shd_ajax_assign2()
449 449
 			)
450 450
 		);
451 451
 		if ($smcFunc['db_num_rows']($query) != 0)
452
-			list($private, $ticket_starter, $ticket_assigned, $subject, $dept, $valid) = $smcFunc['db_fetch_row']($query);
452
+			list($private, $ticket_starter, $ticket_assigned, $subject, $dept, $status, $valid) = $smcFunc['db_fetch_row']($query);
453 453
 		$smcFunc['db_free_result']($query);
454 454
 	}
455 455
 	if (empty($valid))
... ...
@@ -458,7 +458,7 @@ function shd_ajax_assign2()
458 458
 	if (!isset($_GET['to_user']) || !is_numeric($_GET['to_user']))
459 459
 		return $context['ajax_return'] = array('error' => $txt['shd_assigned_not_permitted'] . 'line459');
460 460
 
461
-	if (!shd_allowed_to('shd_assign_ticket_any', $dept))
461
+	if (!shd_allowed_to('shd_assign_ticket_any', $dept) || $status == TICKET_STATUS_CLOSED || $status == TICKET_STATUS_DELETED)
462 462
 		return $context['ajax_return'] = array('error' => $txt['shd_cannot_assign']);
463 463
 
464 464
 	$_GET['to_user'] = isset($_GET['to_user']) ? (int) $_GET['to_user'] : 0;
... ...
@@ -61,7 +61,7 @@ function shd_assign()
61 61
 
62 62
 	// Get ticket details - and kick it out if they shouldn't be able to see it.
63 63
 	$query = shd_db_query('', '
64
-		SELECT id_member_started, id_member_assigned, private, subject, hdt.id_dept, hdd.dept_name
64
+		SELECT id_member_started, id_member_assigned, private, subject, hdt.id_dept, hdt.status, hdd.dept_name
65 65
 		FROM {db_prefix}helpdesk_tickets AS hdt
66 66
 			INNER JOIN {db_prefix}helpdesk_depts AS hdd ON (hdt.id_dept = hdd.id_dept)
67 67
 		WHERE {query_see_ticket} AND id_ticket = {int:ticket}',
... ...
@@ -73,7 +73,7 @@ function shd_assign()
73 73
 	$log_params = array();
74 74
 	if ($row = $smcFunc['db_fetch_row']($query))
75 75
 	{
76
-		list($ticket_starter, $ticket_owner, $private, $subject, $dept, $dept_name) = $row;
76
+		list($ticket_starter, $ticket_owner, $private, $subject, $dept, $status, $dept_name) = $row;
77 77
 		$log_params = array(
78 78
 			'subject' => $subject,
79 79
 			'ticket' => $context['ticket_id'],
... ...
@@ -85,6 +85,9 @@ function shd_assign()
85 85
 		fatal_lang_error('shd_no_ticket');
86 86
 	}
87 87
 
88
+	if ($status == TICKET_STATUS_CLOSED || $status == TICKET_STATUS_DELETED)
89
+		fatal_lang_error('shd_cannot_assign', false);
90
+
88 91
 	if (shd_allowed_to('shd_assign_ticket_any', $dept)) // can regularly assign? If so, load up potential candidates and throw it at the template.
89 92
 	{
90 93
 		$members = shd_get_possible_assignees($private, $ticket_starter, $dept);
... ...
@@ -184,7 +187,7 @@ function shd_assign2()
184 187
 
185 188
 	// Get ticket details - and kick it out if they shouldn't be able to see it.
186 189
 	$query = shd_db_query('', '
187
-		SELECT id_member_started, id_member_assigned, private, subject, id_dept
190
+		SELECT id_member_started, id_member_assigned, private, subject, status, id_dept
188 191
 		FROM {db_prefix}helpdesk_tickets AS hdt
189 192
 		WHERE {query_see_ticket} AND id_ticket = {int:ticket}',
190 193
 		array(
... ...
@@ -196,7 +199,7 @@ function shd_assign2()
196 199
 
197 200
 	if ($row = $smcFunc['db_fetch_row']($query))
198 201
 	{
199
-		list($ticket_starter, $ticket_owner, $private, $subject, $dept) = $row;
202
+		list($ticket_starter, $ticket_owner, $private, $subject, $status, $dept) = $row;
200 203
 
201 204
 		// The core details that we'll be logging
202 205
 		$log_params = array(
... ...
@@ -214,6 +217,9 @@ function shd_assign2()
214 217
 	if (isset($_REQUEST['cancel']))
215 218
 		redirectexit('action=helpdesk;sa=ticket;ticket=' . $context['ticket_id']);
216 219
 
220
+	if ($status == TICKET_STATUS_CLOSED || $status == TICKET_STATUS_DELETED)
221
+		fatal_lang_error('shd_cannot_assign', false);
222
+
217 223
 	if (shd_allowed_to('shd_assign_ticket_any', $dept)) // can regularly assign? If so, see if our requested member is staff and can see the ticket
218 224
 	{
219 225
 		if ($assignee == 0) // can always unassign a ticket
... ...
@@ -585,7 +585,7 @@ function shd_view_ticket()
585 585
 	{
586 586
 		$assign_nav['display'] = shd_allowed_to('shd_staff', $context['ticket']['dept']) && !$context['ticket']['closed'] && !$context['ticket']['deleted'];
587 587
 		$assign_nav['text'] = empty($context['ticket']['id_member_assigned']) ? 'shd_ticket_assign' : 'shd_ticket_reassign';
588
-		$context['ajax_assign'] = true;
588
+		$context['ajax_assign'] = $assign_nav['display'];
589 589
 	}
590 590
 	elseif (shd_allowed_to('shd_assign_ticket_own', $context['ticket']['dept']))
591 591
 	{
592 592