Chris@76
|
1 <?php
|
Chris@76
|
2
|
Chris@76
|
3 /**
|
Chris@76
|
4 * Simple Machines Forum (SMF)
|
Chris@76
|
5 *
|
Chris@76
|
6 * @package SMF
|
Chris@76
|
7 * @author Simple Machines http://www.simplemachines.org
|
Chris@76
|
8 * @copyright 2011 Simple Machines
|
Chris@76
|
9 * @license http://www.simplemachines.org/about/smf/license.php BSD
|
Chris@76
|
10 *
|
Chris@76
|
11 * @version 2.0
|
Chris@76
|
12 */
|
Chris@76
|
13
|
Chris@76
|
14 if (!defined('SMF'))
|
Chris@76
|
15 die('Hacking attempt...');
|
Chris@76
|
16
|
Chris@76
|
17 /* /!!!
|
Chris@76
|
18
|
Chris@76
|
19 void ManageScheduledTasks()
|
Chris@76
|
20 // !!!
|
Chris@76
|
21
|
Chris@76
|
22 void ScheduledTasks()
|
Chris@76
|
23 // !!!
|
Chris@76
|
24
|
Chris@76
|
25 array list_getScheduledTasks()
|
Chris@76
|
26 // !!!
|
Chris@76
|
27
|
Chris@76
|
28 void EditTask()
|
Chris@76
|
29 // !!!
|
Chris@76
|
30
|
Chris@76
|
31 void TaskLog()
|
Chris@76
|
32 // !!!
|
Chris@76
|
33
|
Chris@76
|
34 array list_getTaskLogEntries()
|
Chris@76
|
35 // !!!
|
Chris@76
|
36
|
Chris@76
|
37 array list_getNumTaskLog()
|
Chris@76
|
38 // !!!
|
Chris@76
|
39 */
|
Chris@76
|
40
|
Chris@76
|
41 // !!!
|
Chris@76
|
42 function ManageScheduledTasks()
|
Chris@76
|
43 {
|
Chris@76
|
44 global $context, $txt, $modSettings;
|
Chris@76
|
45
|
Chris@76
|
46 isAllowedTo('admin_forum');
|
Chris@76
|
47
|
Chris@76
|
48 loadLanguage('ManageScheduledTasks');
|
Chris@76
|
49 loadTemplate('ManageScheduledTasks');
|
Chris@76
|
50
|
Chris@76
|
51 $subActions = array(
|
Chris@76
|
52 'taskedit' => 'EditTask',
|
Chris@76
|
53 'tasklog' => 'TaskLog',
|
Chris@76
|
54 'tasks' => 'ScheduledTasks',
|
Chris@76
|
55 );
|
Chris@76
|
56
|
Chris@76
|
57 // We need to find what's the action.
|
Chris@76
|
58 if (isset($_REQUEST['sa']) && isset($subActions[$_REQUEST['sa']]))
|
Chris@76
|
59 $context['sub_action'] = $_REQUEST['sa'];
|
Chris@76
|
60 else
|
Chris@76
|
61 $context['sub_action'] = 'tasks';
|
Chris@76
|
62
|
Chris@76
|
63 // Now for the lovely tabs. That we all love.
|
Chris@76
|
64 $context[$context['admin_menu_name']]['tab_data'] = array(
|
Chris@76
|
65 'title' => $txt['scheduled_tasks_title'],
|
Chris@76
|
66 'help' => '',
|
Chris@76
|
67 'description' => $txt['maintain_info'],
|
Chris@76
|
68 'tabs' => array(
|
Chris@76
|
69 'tasks' => array(
|
Chris@76
|
70 'description' => $txt['maintain_tasks_desc'],
|
Chris@76
|
71 ),
|
Chris@76
|
72 'tasklog' => array(
|
Chris@76
|
73 'description' => $txt['scheduled_log_desc'],
|
Chris@76
|
74 ),
|
Chris@76
|
75 ),
|
Chris@76
|
76 );
|
Chris@76
|
77
|
Chris@76
|
78 // Call it.
|
Chris@76
|
79 $subActions[$context['sub_action']]();
|
Chris@76
|
80 }
|
Chris@76
|
81
|
Chris@76
|
82 // List all the scheduled task in place on the forum.
|
Chris@76
|
83 function ScheduledTasks()
|
Chris@76
|
84 {
|
Chris@76
|
85 global $context, $txt, $sourcedir, $smcFunc, $user_info, $modSettings, $scripturl;
|
Chris@76
|
86
|
Chris@76
|
87 // Mama, setup the template first - cause it's like the most important bit, like pickle in a sandwich.
|
Chris@76
|
88 // ... ironically I don't like pickle. </grudge>
|
Chris@76
|
89 $context['sub_template'] = 'view_scheduled_tasks';
|
Chris@76
|
90 $context['page_title'] = $txt['maintain_tasks'];
|
Chris@76
|
91
|
Chris@76
|
92 // Saving changes?
|
Chris@76
|
93 if (isset($_REQUEST['save']) && isset($_POST['enable_task']))
|
Chris@76
|
94 {
|
Chris@76
|
95 checkSession();
|
Chris@76
|
96
|
Chris@76
|
97 // We'll recalculate the dates at the end!
|
Chris@76
|
98 require_once($sourcedir . '/ScheduledTasks.php');
|
Chris@76
|
99
|
Chris@76
|
100 // Enable and disable as required.
|
Chris@76
|
101 $enablers = array(0);
|
Chris@76
|
102 foreach ($_POST['enable_task'] as $id => $enabled)
|
Chris@76
|
103 if ($enabled)
|
Chris@76
|
104 $enablers[] = (int) $id;
|
Chris@76
|
105
|
Chris@76
|
106 // Do the update!
|
Chris@76
|
107 $smcFunc['db_query']('', '
|
Chris@76
|
108 UPDATE {db_prefix}scheduled_tasks
|
Chris@76
|
109 SET disabled = CASE WHEN id_task IN ({array_int:id_task_enable}) THEN 0 ELSE 1 END',
|
Chris@76
|
110 array(
|
Chris@76
|
111 'id_task_enable' => $enablers,
|
Chris@76
|
112 )
|
Chris@76
|
113 );
|
Chris@76
|
114
|
Chris@76
|
115 // Pop along...
|
Chris@76
|
116 CalculateNextTrigger();
|
Chris@76
|
117 }
|
Chris@76
|
118
|
Chris@76
|
119 // Want to run any of the tasks?
|
Chris@76
|
120 if (isset($_REQUEST['run']) && isset($_POST['run_task']))
|
Chris@76
|
121 {
|
Chris@76
|
122 // Lets figure out which ones they want to run.
|
Chris@76
|
123 $tasks = array();
|
Chris@76
|
124 foreach ($_POST['run_task'] as $task => $dummy)
|
Chris@76
|
125 $tasks[] = (int) $task;
|
Chris@76
|
126
|
Chris@76
|
127 // Load up the tasks.
|
Chris@76
|
128 $request = $smcFunc['db_query']('', '
|
Chris@76
|
129 SELECT id_task, task
|
Chris@76
|
130 FROM {db_prefix}scheduled_tasks
|
Chris@76
|
131 WHERE id_task IN ({array_int:tasks})
|
Chris@76
|
132 LIMIT ' . count($tasks),
|
Chris@76
|
133 array(
|
Chris@76
|
134 'tasks' => $tasks,
|
Chris@76
|
135 )
|
Chris@76
|
136 );
|
Chris@76
|
137
|
Chris@76
|
138 // Lets get it on!
|
Chris@76
|
139 require_once($sourcedir . '/ScheduledTasks.php');
|
Chris@76
|
140 ignore_user_abort(true);
|
Chris@76
|
141 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
142 {
|
Chris@76
|
143 $start_time = microtime();
|
Chris@76
|
144 // The functions got to exist for us to use it.
|
Chris@76
|
145 if (!function_exists('scheduled_' . $row['task']))
|
Chris@76
|
146 continue;
|
Chris@76
|
147
|
Chris@76
|
148 // Try to stop a timeout, this would be bad...
|
Chris@76
|
149 @set_time_limit(300);
|
Chris@76
|
150 if (function_exists('apache_reset_timeout'))
|
Chris@76
|
151 @apache_reset_timeout();
|
Chris@76
|
152
|
Chris@76
|
153 // Do the task...
|
Chris@76
|
154 $completed = call_user_func('scheduled_' . $row['task']);
|
Chris@76
|
155
|
Chris@76
|
156 // Log that we did it ;)
|
Chris@76
|
157 if ($completed)
|
Chris@76
|
158 {
|
Chris@76
|
159 $total_time = round(array_sum(explode(' ', microtime())) - array_sum(explode(' ', $start_time)), 3);
|
Chris@76
|
160 $smcFunc['db_insert']('',
|
Chris@76
|
161 '{db_prefix}log_scheduled_tasks',
|
Chris@76
|
162 array('id_task' => 'int', 'time_run' => 'int', 'time_taken' => 'float'),
|
Chris@76
|
163 array($row['id_task'], time(), $total_time),
|
Chris@76
|
164 array('id_task')
|
Chris@76
|
165 );
|
Chris@76
|
166 }
|
Chris@76
|
167 }
|
Chris@76
|
168 $smcFunc['db_free_result']($request);
|
Chris@76
|
169 redirectexit('action=admin;area=scheduledtasks;done');
|
Chris@76
|
170 }
|
Chris@76
|
171
|
Chris@76
|
172 $listOptions = array(
|
Chris@76
|
173 'id' => 'scheduled_tasks',
|
Chris@76
|
174 'title' => $txt['maintain_tasks'],
|
Chris@76
|
175 'base_href' => $scripturl . '?action=admin;area=scheduledtasks',
|
Chris@76
|
176 'get_items' => array(
|
Chris@76
|
177 'function' => 'list_getScheduledTasks',
|
Chris@76
|
178 ),
|
Chris@76
|
179 'columns' => array(
|
Chris@76
|
180 'name' => array(
|
Chris@76
|
181 'header' => array(
|
Chris@76
|
182 'value' => $txt['scheduled_tasks_name'],
|
Chris@76
|
183 'style' => 'width: 40%;',
|
Chris@76
|
184 ),
|
Chris@76
|
185 'data' => array(
|
Chris@76
|
186 'sprintf' => array(
|
Chris@76
|
187 'format' => '
|
Chris@76
|
188 <a href="' . $scripturl . '?action=admin;area=scheduledtasks;sa=taskedit;tid=%1$d">%2$s</a><br /><span class="smalltext">%3$s</span>',
|
Chris@76
|
189 'params' => array(
|
Chris@76
|
190 'id' => false,
|
Chris@76
|
191 'name' => false,
|
Chris@76
|
192 'desc' => false,
|
Chris@76
|
193 ),
|
Chris@76
|
194 ),
|
Chris@76
|
195 ),
|
Chris@76
|
196 ),
|
Chris@76
|
197 'next_due' => array(
|
Chris@76
|
198 'header' => array(
|
Chris@76
|
199 'value' => $txt['scheduled_tasks_next_time'],
|
Chris@76
|
200 ),
|
Chris@76
|
201 'data' => array(
|
Chris@76
|
202 'db' => 'next_time',
|
Chris@76
|
203 'class' => 'smalltext',
|
Chris@76
|
204 ),
|
Chris@76
|
205 ),
|
Chris@76
|
206 'regularity' => array(
|
Chris@76
|
207 'header' => array(
|
Chris@76
|
208 'value' => $txt['scheduled_tasks_regularity'],
|
Chris@76
|
209 ),
|
Chris@76
|
210 'data' => array(
|
Chris@76
|
211 'db' => 'regularity',
|
Chris@76
|
212 'class' => 'smalltext',
|
Chris@76
|
213 ),
|
Chris@76
|
214 ),
|
Chris@76
|
215 'enabled' => array(
|
Chris@76
|
216 'header' => array(
|
Chris@76
|
217 'value' => $txt['scheduled_tasks_enabled'],
|
Chris@76
|
218 'style' => 'width: 6%;',
|
Chris@76
|
219 ),
|
Chris@76
|
220 'data' => array(
|
Chris@76
|
221 'sprintf' => array(
|
Chris@76
|
222 'format' =>
|
Chris@76
|
223 '<input type="hidden" name="enable_task[%1$d]" id="task_%1$d" value="0" /><input type="checkbox" name="enable_task[%1$d]" id="task_check_%1$d" %2$s class="input_check" />',
|
Chris@76
|
224 'params' => array(
|
Chris@76
|
225 'id' => false,
|
Chris@76
|
226 'checked_state' => false,
|
Chris@76
|
227 ),
|
Chris@76
|
228 ),
|
Chris@76
|
229 'style' => 'text-align: center;',
|
Chris@76
|
230 ),
|
Chris@76
|
231 ),
|
Chris@76
|
232 'run_now' => array(
|
Chris@76
|
233 'header' => array(
|
Chris@76
|
234 'value' => $txt['scheduled_tasks_run_now'],
|
Chris@76
|
235 'style' => 'width: 12%;',
|
Chris@76
|
236 ),
|
Chris@76
|
237 'data' => array(
|
Chris@76
|
238 'sprintf' => array(
|
Chris@76
|
239 'format' =>
|
Chris@76
|
240 '<input type="checkbox" name="run_task[%1$d]" id="run_task_%1$d" class="input_check" />',
|
Chris@76
|
241 'params' => array(
|
Chris@76
|
242 'id' => false,
|
Chris@76
|
243 ),
|
Chris@76
|
244 ),
|
Chris@76
|
245 'style' => 'text-align: center;',
|
Chris@76
|
246 ),
|
Chris@76
|
247 ),
|
Chris@76
|
248 ),
|
Chris@76
|
249 'form' => array(
|
Chris@76
|
250 'href' => $scripturl . '?action=admin;area=scheduledtasks',
|
Chris@76
|
251 ),
|
Chris@76
|
252 'additional_rows' => array(
|
Chris@76
|
253 array(
|
Chris@76
|
254 'position' => 'below_table_data',
|
Chris@76
|
255 'value' => '
|
Chris@76
|
256 <input type="submit" name="save" value="' . $txt['scheduled_tasks_save_changes'] . '" class="button_submit" />
|
Chris@76
|
257 <input type="submit" name="run" value="' . $txt['scheduled_tasks_run_now'] . '" class="button_submit" />',
|
Chris@76
|
258 'class' => 'floatright',
|
Chris@76
|
259 'style' => 'text-align: right;',
|
Chris@76
|
260 ),
|
Chris@76
|
261 array(
|
Chris@76
|
262 'position' => 'after_title',
|
Chris@76
|
263 'value' => '
|
Chris@76
|
264 <span class="smalltext">' . $txt['scheduled_tasks_time_offset'] . '</span>',
|
Chris@76
|
265 'class' => 'windowbg2',
|
Chris@76
|
266 ),
|
Chris@76
|
267 ),
|
Chris@76
|
268 );
|
Chris@76
|
269
|
Chris@76
|
270 require_once($sourcedir . '/Subs-List.php');
|
Chris@76
|
271 createList($listOptions);
|
Chris@76
|
272
|
Chris@76
|
273 $context['sub_template'] = 'view_scheduled_tasks';
|
Chris@76
|
274
|
Chris@76
|
275 $context['tasks_were_run'] = isset($_GET['done']);
|
Chris@76
|
276 }
|
Chris@76
|
277
|
Chris@76
|
278 function list_getScheduledTasks($start, $items_per_page, $sort)
|
Chris@76
|
279 {
|
Chris@76
|
280 global $smcFunc, $txt, $scripturl;
|
Chris@76
|
281
|
Chris@76
|
282 $request = $smcFunc['db_query']('', '
|
Chris@76
|
283 SELECT id_task, next_time, time_offset, time_regularity, time_unit, disabled, task
|
Chris@76
|
284 FROM {db_prefix}scheduled_tasks',
|
Chris@76
|
285 array(
|
Chris@76
|
286 )
|
Chris@76
|
287 );
|
Chris@76
|
288 $known_tasks = array();
|
Chris@76
|
289 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
290 {
|
Chris@76
|
291 // Find the next for regularity - don't offset as it's always server time!
|
Chris@76
|
292 $offset = sprintf($txt['scheduled_task_reg_starting'], date('H:i', $row['time_offset']));
|
Chris@76
|
293 $repeating = sprintf($txt['scheduled_task_reg_repeating'], $row['time_regularity'], $txt['scheduled_task_reg_unit_' . $row['time_unit']]);
|
Chris@76
|
294
|
Chris@76
|
295 $known_tasks[] = array(
|
Chris@76
|
296 'id' => $row['id_task'],
|
Chris@76
|
297 'function' => $row['task'],
|
Chris@76
|
298 'name' => isset($txt['scheduled_task_' . $row['task']]) ? $txt['scheduled_task_' . $row['task']] : $row['task'],
|
Chris@76
|
299 'desc' => isset($txt['scheduled_task_desc_' . $row['task']]) ? $txt['scheduled_task_desc_' . $row['task']] : '',
|
Chris@76
|
300 'next_time' => $row['disabled'] ? $txt['scheduled_tasks_na'] : timeformat(($row['next_time'] == 0 ? time() : $row['next_time']), true, 'server'),
|
Chris@76
|
301 'disabled' => $row['disabled'],
|
Chris@76
|
302 'checked_state' => $row['disabled'] ? '' : 'checked="checked"',
|
Chris@76
|
303 'regularity' => $offset . ', ' . $repeating,
|
Chris@76
|
304 );
|
Chris@76
|
305 }
|
Chris@76
|
306 $smcFunc['db_free_result']($request);
|
Chris@76
|
307
|
Chris@76
|
308 return $known_tasks;
|
Chris@76
|
309 }
|
Chris@76
|
310
|
Chris@76
|
311 // Function for editing a task.
|
Chris@76
|
312 function EditTask()
|
Chris@76
|
313 {
|
Chris@76
|
314 global $context, $txt, $sourcedir, $smcFunc, $user_info, $modSettings;
|
Chris@76
|
315
|
Chris@76
|
316 // Just set up some lovely context stuff.
|
Chris@76
|
317 $context[$context['admin_menu_name']]['current_subsection'] = 'tasks';
|
Chris@76
|
318 $context['sub_template'] = 'edit_scheduled_tasks';
|
Chris@76
|
319 $context['page_title'] = $txt['scheduled_task_edit'];
|
Chris@76
|
320 $context['server_time'] = timeformat(time(), false, 'server');
|
Chris@76
|
321
|
Chris@76
|
322 // Cleaning...
|
Chris@76
|
323 if (!isset($_GET['tid']))
|
Chris@76
|
324 fatal_lang_error('no_access', false);
|
Chris@76
|
325 $_GET['tid'] = (int) $_GET['tid'];
|
Chris@76
|
326
|
Chris@76
|
327 // Saving?
|
Chris@76
|
328 if (isset($_GET['save']))
|
Chris@76
|
329 {
|
Chris@76
|
330 checkSession();
|
Chris@76
|
331
|
Chris@76
|
332 // We'll need this for calculating the next event.
|
Chris@76
|
333 require_once($sourcedir . '/ScheduledTasks.php');
|
Chris@76
|
334
|
Chris@76
|
335 // Do we have a valid offset?
|
Chris@76
|
336 preg_match('~(\d{1,2}):(\d{1,2})~', $_POST['offset'], $matches);
|
Chris@76
|
337
|
Chris@76
|
338 // If a half is empty then assume zero offset!
|
Chris@76
|
339 if (!isset($matches[2]) || $matches[2] > 59)
|
Chris@76
|
340 $matches[2] = 0;
|
Chris@76
|
341 if (!isset($matches[1]) || $matches[1] > 23)
|
Chris@76
|
342 $matches[1] = 0;
|
Chris@76
|
343
|
Chris@76
|
344 // Now the offset is easy; easy peasy - except we need to offset by a few hours...
|
Chris@76
|
345 $offset = $matches[1] * 3600 + $matches[2] * 60 - date('Z');
|
Chris@76
|
346
|
Chris@76
|
347 // The other time bits are simple!
|
Chris@76
|
348 $interval = max((int) $_POST['regularity'], 1);
|
Chris@76
|
349 $unit = in_array(substr($_POST['unit'], 0, 1), array('m', 'h', 'd', 'w')) ? substr($_POST['unit'], 0, 1) : 'd';
|
Chris@76
|
350
|
Chris@76
|
351 // Don't allow one minute intervals.
|
Chris@76
|
352 if ($interval == 1 && $unit == 'm')
|
Chris@76
|
353 $interval = 2;
|
Chris@76
|
354
|
Chris@76
|
355 // Is it disabled?
|
Chris@76
|
356 $disabled = !isset($_POST['enabled']) ? 1 : 0;
|
Chris@76
|
357
|
Chris@76
|
358 // Do the update!
|
Chris@76
|
359 $smcFunc['db_query']('', '
|
Chris@76
|
360 UPDATE {db_prefix}scheduled_tasks
|
Chris@76
|
361 SET disabled = {int:disabled}, time_offset = {int:time_offset}, time_unit = {string:time_unit},
|
Chris@76
|
362 time_regularity = {int:time_regularity}
|
Chris@76
|
363 WHERE id_task = {int:id_task}',
|
Chris@76
|
364 array(
|
Chris@76
|
365 'disabled' => $disabled,
|
Chris@76
|
366 'time_offset' => $offset,
|
Chris@76
|
367 'time_regularity' => $interval,
|
Chris@76
|
368 'id_task' => $_GET['tid'],
|
Chris@76
|
369 'time_unit' => $unit,
|
Chris@76
|
370 )
|
Chris@76
|
371 );
|
Chris@76
|
372
|
Chris@76
|
373 // Check the next event.
|
Chris@76
|
374 CalculateNextTrigger($_GET['tid'], true);
|
Chris@76
|
375
|
Chris@76
|
376 // Return to the main list.
|
Chris@76
|
377 redirectexit('action=admin;area=scheduledtasks');
|
Chris@76
|
378 }
|
Chris@76
|
379
|
Chris@76
|
380 // Load the task, understand? Que? Que?
|
Chris@76
|
381 $request = $smcFunc['db_query']('', '
|
Chris@76
|
382 SELECT id_task, next_time, time_offset, time_regularity, time_unit, disabled, task
|
Chris@76
|
383 FROM {db_prefix}scheduled_tasks
|
Chris@76
|
384 WHERE id_task = {int:id_task}',
|
Chris@76
|
385 array(
|
Chris@76
|
386 'id_task' => $_GET['tid'],
|
Chris@76
|
387 )
|
Chris@76
|
388 );
|
Chris@76
|
389
|
Chris@76
|
390 // Should never, ever, happen!
|
Chris@76
|
391 if ($smcFunc['db_num_rows']($request) == 0)
|
Chris@76
|
392 fatal_lang_error('no_access', false);
|
Chris@76
|
393
|
Chris@76
|
394 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
395 {
|
Chris@76
|
396 $context['task'] = array(
|
Chris@76
|
397 'id' => $row['id_task'],
|
Chris@76
|
398 'function' => $row['task'],
|
Chris@76
|
399 'name' => isset($txt['scheduled_task_' . $row['task']]) ? $txt['scheduled_task_' . $row['task']] : $row['task'],
|
Chris@76
|
400 'desc' => isset($txt['scheduled_task_desc_' . $row['task']]) ? $txt['scheduled_task_desc_' . $row['task']] : '',
|
Chris@76
|
401 'next_time' => $row['disabled'] ? $txt['scheduled_tasks_na'] : timeformat($row['next_time'] == 0 ? time() : $row['next_time'], true, 'server'),
|
Chris@76
|
402 'disabled' => $row['disabled'],
|
Chris@76
|
403 'offset' => $row['time_offset'],
|
Chris@76
|
404 'regularity' => $row['time_regularity'],
|
Chris@76
|
405 'offset_formatted' => date('H:i', $row['time_offset']),
|
Chris@76
|
406 'unit' => $row['time_unit'],
|
Chris@76
|
407 );
|
Chris@76
|
408 }
|
Chris@76
|
409 $smcFunc['db_free_result']($request);
|
Chris@76
|
410 }
|
Chris@76
|
411
|
Chris@76
|
412 // Show the log of all tasks that have taken place.
|
Chris@76
|
413 function TaskLog()
|
Chris@76
|
414 {
|
Chris@76
|
415 global $scripturl, $context, $txt, $smcFunc, $sourcedir;
|
Chris@76
|
416
|
Chris@76
|
417 // Lets load the language just incase we are outside the Scheduled area.
|
Chris@76
|
418 loadLanguage('ManageScheduledTasks');
|
Chris@76
|
419
|
Chris@76
|
420 // Empty the log?
|
Chris@76
|
421 if (!empty($_POST['removeAll']))
|
Chris@76
|
422 {
|
Chris@76
|
423 checkSession();
|
Chris@76
|
424
|
Chris@76
|
425 $smcFunc['db_query']('truncate_table', '
|
Chris@76
|
426 TRUNCATE {db_prefix}log_scheduled_tasks',
|
Chris@76
|
427 array(
|
Chris@76
|
428 )
|
Chris@76
|
429 );
|
Chris@76
|
430 }
|
Chris@76
|
431
|
Chris@76
|
432 // Setup the list.
|
Chris@76
|
433 $listOptions = array(
|
Chris@76
|
434 'id' => 'task_log',
|
Chris@76
|
435 'items_per_page' => 30,
|
Chris@76
|
436 'title' => $txt['scheduled_log'],
|
Chris@76
|
437 'no_items_label' => $txt['scheduled_log_empty'],
|
Chris@76
|
438 'base_href' => $context['admin_area'] == 'scheduledtasks' ? $scripturl . '?action=admin;area=scheduledtasks;sa=tasklog' : $scripturl . '?action=admin;area=logs;sa=tasklog',
|
Chris@76
|
439 'default_sort_col' => 'date',
|
Chris@76
|
440 'get_items' => array(
|
Chris@76
|
441 'function' => 'list_getTaskLogEntries',
|
Chris@76
|
442 ),
|
Chris@76
|
443 'get_count' => array(
|
Chris@76
|
444 'function' => 'list_getNumTaskLogEntries',
|
Chris@76
|
445 ),
|
Chris@76
|
446 'columns' => array(
|
Chris@76
|
447 'name' => array(
|
Chris@76
|
448 'header' => array(
|
Chris@76
|
449 'value' => $txt['scheduled_tasks_name'],
|
Chris@76
|
450 ),
|
Chris@76
|
451 'data' => array(
|
Chris@76
|
452 'db' => 'name'
|
Chris@76
|
453 ),
|
Chris@76
|
454 ),
|
Chris@76
|
455 'date' => array(
|
Chris@76
|
456 'header' => array(
|
Chris@76
|
457 'value' => $txt['scheduled_log_time_run'],
|
Chris@76
|
458 ),
|
Chris@76
|
459 'data' => array(
|
Chris@76
|
460 'function' => create_function('$rowData', '
|
Chris@76
|
461 return timeformat($rowData[\'time_run\'], true);
|
Chris@76
|
462 '),
|
Chris@76
|
463 ),
|
Chris@76
|
464 'sort' => array(
|
Chris@76
|
465 'default' => 'lst.id_log DESC',
|
Chris@76
|
466 'reverse' => 'lst.id_log',
|
Chris@76
|
467 ),
|
Chris@76
|
468 ),
|
Chris@76
|
469 'time_taken' => array(
|
Chris@76
|
470 'header' => array(
|
Chris@76
|
471 'value' => $txt['scheduled_log_time_taken'],
|
Chris@76
|
472 ),
|
Chris@76
|
473 'data' => array(
|
Chris@76
|
474 'sprintf' => array(
|
Chris@76
|
475 'format' => $txt['scheduled_log_time_taken_seconds'],
|
Chris@76
|
476 'params' => array(
|
Chris@76
|
477 'time_taken' => false,
|
Chris@76
|
478 ),
|
Chris@76
|
479 ),
|
Chris@76
|
480 ),
|
Chris@76
|
481 'sort' => array(
|
Chris@76
|
482 'default' => 'lst.time_taken',
|
Chris@76
|
483 'reverse' => 'lst.time_taken DESC',
|
Chris@76
|
484 ),
|
Chris@76
|
485 ),
|
Chris@76
|
486 ),
|
Chris@76
|
487 'form' => array(
|
Chris@76
|
488 'href' => $context['admin_area'] == 'scheduledtasks' ? $scripturl . '?action=admin;area=scheduledtasks;sa=tasklog' : $scripturl . '?action=admin;area=logs;sa=tasklog',
|
Chris@76
|
489 ),
|
Chris@76
|
490 'additional_rows' => array(
|
Chris@76
|
491 array(
|
Chris@76
|
492 'position' => 'below_table_data',
|
Chris@76
|
493 'value' => '
|
Chris@76
|
494 <input type="submit" name="removeAll" value="' . $txt['scheduled_log_empty_log'] . '" class="button_submit" />',
|
Chris@76
|
495 'style' => 'text-align: right;',
|
Chris@76
|
496 ),
|
Chris@76
|
497 array(
|
Chris@76
|
498 'position' => 'after_title',
|
Chris@76
|
499 'value' => $txt['scheduled_tasks_time_offset'],
|
Chris@76
|
500 'class' => 'smalltext',
|
Chris@76
|
501 ),
|
Chris@76
|
502 ),
|
Chris@76
|
503 );
|
Chris@76
|
504
|
Chris@76
|
505 require_once($sourcedir . '/Subs-List.php');
|
Chris@76
|
506 createList($listOptions);
|
Chris@76
|
507
|
Chris@76
|
508 $context['sub_template'] = 'show_list';
|
Chris@76
|
509 $context['default_list'] = 'task_log';
|
Chris@76
|
510
|
Chris@76
|
511 // Make it all look tify.
|
Chris@76
|
512 $context[$context['admin_menu_name']]['current_subsection'] = 'tasklog';
|
Chris@76
|
513 $context['page_title'] = $txt['scheduled_log'];
|
Chris@76
|
514 }
|
Chris@76
|
515
|
Chris@76
|
516 function list_getTaskLogEntries($start, $items_per_page, $sort)
|
Chris@76
|
517 {
|
Chris@76
|
518 global $smcFunc, $txt;
|
Chris@76
|
519
|
Chris@76
|
520 $request = $smcFunc['db_query']('', '
|
Chris@76
|
521 SELECT lst.id_log, lst.id_task, lst.time_run, lst.time_taken, st.task
|
Chris@76
|
522 FROM {db_prefix}log_scheduled_tasks AS lst
|
Chris@76
|
523 INNER JOIN {db_prefix}scheduled_tasks AS st ON (st.id_task = lst.id_task)
|
Chris@76
|
524 ORDER BY ' . $sort . '
|
Chris@76
|
525 LIMIT ' . $start . ', ' . $items_per_page,
|
Chris@76
|
526 array(
|
Chris@76
|
527 )
|
Chris@76
|
528 );
|
Chris@76
|
529 $log_entries = array();
|
Chris@76
|
530 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
531 $log_entries[] = array(
|
Chris@76
|
532 'id' => $row['id_log'],
|
Chris@76
|
533 'name' => isset($txt['scheduled_task_' . $row['task']]) ? $txt['scheduled_task_' . $row['task']] : $row['task'],
|
Chris@76
|
534 'time_run' => $row['time_run'],
|
Chris@76
|
535 'time_taken' => $row['time_taken'],
|
Chris@76
|
536 );
|
Chris@76
|
537 $smcFunc['db_free_result']($request);
|
Chris@76
|
538
|
Chris@76
|
539 return $log_entries;
|
Chris@76
|
540 }
|
Chris@76
|
541
|
Chris@76
|
542 function list_getNumTaskLogEntries()
|
Chris@76
|
543 {
|
Chris@76
|
544 global $smcFunc;
|
Chris@76
|
545
|
Chris@76
|
546 $request = $smcFunc['db_query']('', '
|
Chris@76
|
547 SELECT COUNT(*)
|
Chris@76
|
548 FROM {db_prefix}log_scheduled_tasks',
|
Chris@76
|
549 array(
|
Chris@76
|
550 )
|
Chris@76
|
551 );
|
Chris@76
|
552 list ($num_entries) = $smcFunc['db_fetch_row']($request);
|
Chris@76
|
553 $smcFunc['db_free_result']($request);
|
Chris@76
|
554
|
Chris@76
|
555 return $num_entries;
|
Chris@76
|
556 }
|
Chris@76
|
557
|
Chris@76
|
558 ?> |