! Auto closing tickets. (Purge is disabled anyway now, as opposed to just not enabled, subtle difference!) The setting is per department, set in the department itself, defaults to 0 to mean 'never close'. It's no-frills, it logs it in the action log, but doesn't notify and doesn't post or anything. These can be nice enhancements for 2.1, to be honest. [Feature 134]
gruffen

gruffen commited on 2011-05-27 03:59:03
Showing 7 changed files, with 33 additions and 17 deletions.

... ...
@@ -431,6 +431,7 @@ $tables[] = array(
431 431
 		db_field('before_after', 'tinyint'),
432 432
 		db_field('dept_order', 'smallint'),
433 433
 		db_field('dept_theme', 'tinyint'),
434
+		db_field('autoclose_days', 'smallint'),
434 435
 	),
435 436
 	'indexes' => array(
436 437
 		array(
... ...
@@ -387,6 +387,8 @@ $txt['shd_admin_cannot_move_dept_down'] = 'You cannot move that department down;
387 387
 $txt['shd_dept_theme'] = 'Use a specific theme in this department?';
388 388
 $txt['shd_dept_theme_note'] = 'You can set a theme for the helpdesk that differs to the main forum theme. This setting lets you override either the helpdesk or forum theme just within this department, for perhaps department specific branding.';
389 389
 $txt['shd_dept_theme_use_default'] = 'Use the helpdesk/forum default theme';
390
+$txt['shd_dept_autoclose_days'] = 'Number of days after which to automatically close a ticket?';
391
+$txt['shd_dept_autoclose_days_note'] = 'Use 0 to indicate that tickets in this department should never be automatically marked closed, no matter how old they are.';
390 392
 //@}
391 393
 
392 394
 //! Plugins
... ...
@@ -571,7 +571,7 @@ function shd_modify_actionlog_options($return_config)
571 571
 		array('check', 'shd_logopt_newposts', 'disabled' => !empty($modSettings['shd_disable_action_log'])),
572 572
 		array('check', 'shd_logopt_editposts', 'disabled' => !empty($modSettings['shd_disable_action_log'])),
573 573
 		array('check', 'shd_logopt_resolve', 'disabled' => !empty($modSettings['shd_disable_action_log'])),
574
-		array('check', 'shd_logopt_autoclose', 'disabled' => !empty($modSettings['shd_disable_action_log']) || empty($modSettings['shd_autoclose_tickets']) || empty($modSettings['shd_autoclose_tickets_days'])),
574
+		array('check', 'shd_logopt_autoclose', 'disabled' => !empty($modSettings['shd_disable_action_log'])),
575 575
 		array('checkall', 'shd_logopt_1', array('shd_logopt_newposts', 'shd_logopt_editposts', 'shd_logopt_resolve', 'shd_logopt_autoclose')),
576 576
 		'',
577 577
 		array('check', 'shd_logopt_assign', 'disabled' => !empty($modSettings['shd_disable_action_log'])),
... ...
@@ -239,7 +239,7 @@ function shd_admin_edit_dept()
239 239
 
240 240
 	// Get the current department
241 241
 	$query = $smcFunc['db_query']('', '
242
-		SELECT id_dept, dept_name, description, board_cat, before_after, dept_theme
242
+		SELECT id_dept, dept_name, description, board_cat, before_after, dept_theme, autoclose_days
243 243
 		FROM {db_prefix}helpdesk_depts
244 244
 		WHERE id_dept = {int:dept}',
245 245
 		array(
... ...
@@ -426,6 +426,12 @@ function shd_admin_save_dept()
426 426
 	shd_get_dept_theme_list();
427 427
 	$_POST['dept_theme'] = isset($_POST['dept_theme']) && isset($context['dept_theme_list'][$_POST['dept_theme']]) ? (int) $_POST['dept_theme'] : 0;
428 428
 
429
+	$_POST['autoclose_days'] = isset($_POST['autoclose_days']) ? (int) $_POST['autoclose_days'] : 0;
430
+	if ($_POST['autoclose_days'] < 0)
431
+		$_POST['autoclose_days'] = 0;
432
+	if ($_POST['autoclose_days'] > 9999)
433
+		$_POST['autoclose_days'] = 9999;
434
+
429 435
 	// 6. Commit that to DB.
430 436
 	$smcFunc['db_query']('', '
431 437
 		UPDATE {db_prefix}helpdesk_depts
... ...
@@ -433,7 +439,8 @@ function shd_admin_save_dept()
433 439
 			description = {string:description},
434 440
 			board_cat = {int:board_cat},
435 441
 			before_after = {int:before_after},
436
-			dept_theme = {int:dept_theme}
442
+			dept_theme = {int:dept_theme},
443
+			autoclose_days = {int:autoclose_days}
437 444
 		WHERE id_dept = {int:id_dept}',
438 445
 		array(
439 446
 			'id_dept' => $_REQUEST['dept'],
... ...
@@ -442,6 +449,7 @@ function shd_admin_save_dept()
442 449
 			'board_cat' => $_POST['dept_cat'],
443 450
 			'before_after' => $_POST['dept_beforeafter'],
444 451
 			'dept_theme' => $_POST['dept_theme'],
452
+			'autoclose_days' => $_POST['autoclose_days'],
445 453
 		)
446 454
 	);
447 455
 
... ...
@@ -21,7 +21,7 @@
21 21
  *	This file handles the scheduled tasks that can come along.
22 22
  *
23 23
  *	@package source
24
- *	@since 1.0
24
+ *	@since 2.0
25 25
 */
26 26
 
27 27
 if (!defined('SMF'))
... ...
@@ -41,7 +41,7 @@ function shd_scheduled()
41 41
 	global $smcFunc, $modSettings;
42 42
 
43 43
 	shd_scheduled_close_tickets();
44
-	shd_scheduled_purge_tickets();
44
+	//shd_scheduled_purge_tickets();
45 45
 	return true;
46 46
 }
47 47
 
... ...
@@ -49,21 +49,19 @@ function shd_scheduled_close_tickets()
49 49
 {
50 50
 	global $modSettings, $smcFunc, $txt;
51 51
 
52
-	if (empty($modSettings['shd_autoclose_tickets']) || empty($modSettings['shd_autoclose_tickets_days']))
53
-		return;
54
-
55 52
 	@set_time_limit(600); // Ten minutes. Is a big job, possibly.
56 53
 
57 54
 	// 1. Get the list of tickets.
58 55
 	$query = $smcFunc['db_query']('', '
59
-		SELECT hdt.id_ticket, hdt.subject, hdt.id_member_started, hdt.id_member_updated, hdtr_last.poster_time
60
-		FROM {db_prefix}helpdesk_tickets AS hdt
61
-			INNER JOIN {db_prefix}helpdesk_ticket_replies AS hdtr_last ON (hdt.id_last_msg = hdtr_last.id_msg)
62
-		WHERE hdt.status IN ({array_int:open})
63
-			AND poster_time <= {int:old_time}',
56
+		SELECT hdt.id_ticket, hdt.subject, hdt.id_member_started, hdt.id_member_updated
57
+		FROM {db_prefix}helpdesk_depts AS hdd
58
+			INNER JOIN {db_prefix}helpdesk_tickets AS hdt ON (hdd.id_dept = hdt.id_dept)
59
+		WHERE hdd.autoclose_days > 0
60
+			AND hdt.last_updated <= {int:time} - (86400 * hdd.autoclose_days)
61
+			AND hdt.status IN ({array_int:open})',
64 62
 		array(
65 63
 			'open' => array(TICKET_STATUS_NEW, TICKET_STATUS_PENDING_STAFF, TICKET_STATUS_PENDING_USER),
66
-			'old_time' => time() - 86400 * $modSettings['shd_autoclose_tickets_days'],
64
+			'time' => time(),
67 65
 		)
68 66
 	);
69 67
 	$tickets = array();
... ...
@@ -85,11 +83,13 @@ function shd_scheduled_close_tickets()
85 83
 	// 2. Update the tickets.
86 84
 	$query = $smcFunc['db_query']('', '
87 85
 		UPDATE {db_prefix}helpdesk_tickets
88
-		SET status = {int:closed}
86
+		SET status = {int:closed},
87
+			last_updated = {int:time}
89 88
 		WHERE id_ticket IN ({array_int:tickets})',
90 89
 		array(
91 90
 			'closed' => TICKET_STATUS_CLOSED,
92 91
 			'tickets' => $tickets,
92
+			'time' => time(),
93 93
 		)
94 94
 	);
95 95
 
... ...
@@ -233,6 +233,13 @@ function template_shd_edit_dept()
233 233
 
234 234
 	echo '
235 235
 								</dd>
236
+								<dt>
237
+									<strong>', $txt['shd_dept_autoclose_days'], '</strong>
238
+									<div class="smalltext">', $txt['shd_dept_autoclose_days_note'], '</div>
239
+								</dt>
240
+								<dd>
241
+									<input type="text" name="autoclose_days" id="autoclose_days" value="', $context['shd_dept']['autoclose_days'], '" class="input_text" size="5" /></dd>
242
+								</dd>
236 243
 							</dl>
237 244
 						</div>
238 245
 					</div>
... ...
@@ -102,8 +102,6 @@ $to_remove = array(
102 102
 	'shd_notify_assign_me',
103 103
 	'shd_notify_assign_own',
104 104
 	// Scheduled tasks
105
-	'shd_autoclose_tickets',
106
-	'shd_autoclose_tickets_days',
107 105
 	'shd_autopurge_tickets',
108 106
 	'shd_autopurge_tickets_days',
109 107
 );
110 108