! Juggle how caching is cleared in the scheduled task that was causing it not to report it in the task log when the task had completed and actually updated at least one ticket. [Bug 709]
gruffen

gruffen commited on 2011-06-09 07:25:29
Showing 2 changed files, with 19 additions and 8 deletions.

... ...
@@ -53,7 +53,7 @@ function shd_scheduled_close_tickets()
53 53
 
54 54
 	// 1. Get the list of tickets.
55 55
 	$query = $smcFunc['db_query']('', '
56
-		SELECT hdt.id_ticket, hdt.subject, hdt.id_member_started, hdt.id_member_updated
56
+		SELECT hdt.id_ticket, hdt.subject, hdt.id_member_started, hdt.id_member_updated, hdt.id_dept
57 57
 		FROM {db_prefix}helpdesk_depts AS hdd
58 58
 			INNER JOIN {db_prefix}helpdesk_tickets AS hdt ON (hdd.id_dept = hdt.id_dept)
59 59
 		WHERE hdd.autoclose_days > 0
... ...
@@ -67,21 +67,24 @@ function shd_scheduled_close_tickets()
67 67
 	$tickets = array();
68 68
 	$subjects = array();
69 69
 	$members = array();
70
+	$depts = array();
70 71
 	while ($row = $smcFunc['db_fetch_assoc']($query))
71 72
 	{
72 73
 		$tickets[$row['id_ticket']] = $row['id_ticket'];
73 74
 		$subjects[$row['id_ticket']] = $row['subject'];
74 75
 		$members[] = $row['id_member_started'];
75 76
 		$members[] = $row['id_member_updated'];
77
+		$depts[$row['id_dept']] = $row['id_dept'];
76 78
 	}
77 79
 	$smcFunc['db_free_result']($query);
78 80
 
79 81
 	// Any to do?
80
-	if (empty($tickets))
81
-		return;
82
+	if (!empty($tickets))
83
+	{
84
+		$time = time();
82 85
 
83 86
 		// 2. Update the tickets.
84
-	$query = $smcFunc['db_query']('', '
87
+		$smcFunc['db_query']('', '
85 88
 			UPDATE {db_prefix}helpdesk_tickets
86 89
 			SET status = {int:closed},
87 90
 				last_updated = {int:time}
... ...
@@ -89,7 +92,7 @@ function shd_scheduled_close_tickets()
89 92
 			array(
90 93
 				'closed' => 3, // TICKET_STATUS_CLOSED isn't defined here either.
91 94
 				'tickets' => $tickets,
92
-			'time' => time(),
95
+				'time' => $time,
93 96
 			)
94 97
 		);
95 98
 
... ...
@@ -97,7 +100,6 @@ function shd_scheduled_close_tickets()
97 100
 		if (empty($modSettings['shd_disable_action_log']) && !empty($modSettings['shd_logopt_autoclose']))
98 101
 		{
99 102
 			$rows = array();
100
-		$time = time();
101 103
 			foreach ($tickets as $ticket)
102 104
 			{
103 105
 				$rows[] = array(
... ...
@@ -126,7 +128,10 @@ function shd_scheduled_close_tickets()
126 128
 
127 129
 		// 4. If caching is enabled, make sure to purge the cache for members so their number of tickets will be recalculated.
128 130
 		// No need to dump all SD cache items though, though we have to get all those whose tickets were affected, plus all staff.
129
-	shd_clear_active_tickets();
131
+		$depts = array_flip($depts);
132
+		foreach ($depts as $dept)
133
+			shd_clear_active_tickets($dept);
134
+	}
130 135
 }
131 136
 
132 137
 function shd_scheduled_purge_tickets()
... ...
@@ -359,15 +359,20 @@ function shd_get_active_tickets()
359 359
 function shd_clear_active_tickets($dept = 0)
360 360
 {
361 361
 	global $modSettings;
362
+	static $done_all = false;
362 363
 
363 364
 	// This isn't very nice, unfortunately. But it's the only way to ensure that caches are flushed as necessary and to prevent us having to query so much more on every page.
364 365
 	// Firstly, the active ticket count. Needs to be for every person that can see this department.
365 366
 	$members = shd_members_allowed_to('access_helpdesk', $dept);
367
+	if (!$done_all)
368
+	{
366 369
 		foreach ($members as $member)
367 370
 		{
368 371
 			cache_put_data('shd_active_tickets_' . $member, null, 120);
369 372
 			cache_put_data('shd_ticket_count_' . $member, null, 120);
370 373
 		}
374
+		$done_all = true;
375
+	}
371 376
 
372 377
 	// This is going to hurt.
373 378
 	if ($dept == 0)
... ...
@@ -1571,7 +1576,8 @@ function scheduled_simpledesk()
1571 1576
 		return;
1572 1577
 
1573 1578
 	require($sourcedir . '/sd_source/SimpleDesk-Scheduled.php');
1574
-	return shd_scheduled();
1579
+	shd_scheduled();
1580
+	return true;
1575 1581
 }
1576 1582
 
1577 1583
 /**
1578 1584