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 /* This file is all about mail, how we love it so. In particular it handles the admin side of
|
Chris@76
|
18 mail configuration, as well as reviewing the mail queue - if enabled.
|
Chris@76
|
19
|
Chris@76
|
20 void ManageMail()
|
Chris@76
|
21 // !!
|
Chris@76
|
22
|
Chris@76
|
23 void BrowseMailQueue()
|
Chris@76
|
24 // !!
|
Chris@76
|
25
|
Chris@76
|
26 void ModifyMailSettings()
|
Chris@76
|
27 // !!
|
Chris@76
|
28
|
Chris@76
|
29 void ClearMailQueue()
|
Chris@76
|
30 // !!
|
Chris@76
|
31
|
Chris@76
|
32 */
|
Chris@76
|
33
|
Chris@76
|
34 // This function passes control through to the relevant section
|
Chris@76
|
35 function ManageMail()
|
Chris@76
|
36 {
|
Chris@76
|
37 global $context, $txt, $scripturl, $modSettings, $sourcedir;
|
Chris@76
|
38
|
Chris@76
|
39 // You need to be an admin to edit settings!
|
Chris@76
|
40 isAllowedTo('admin_forum');
|
Chris@76
|
41
|
Chris@76
|
42 loadLanguage('Help');
|
Chris@76
|
43 loadLanguage('ManageMail');
|
Chris@76
|
44
|
Chris@76
|
45 // We'll need the utility functions from here.
|
Chris@76
|
46 require_once($sourcedir . '/ManageServer.php');
|
Chris@76
|
47
|
Chris@76
|
48 $context['page_title'] = $txt['mailqueue_title'];
|
Chris@76
|
49 $context['sub_template'] = 'show_settings';
|
Chris@76
|
50
|
Chris@76
|
51 $subActions = array(
|
Chris@76
|
52 'browse' => 'BrowseMailQueue',
|
Chris@76
|
53 'clear' => 'ClearMailQueue',
|
Chris@76
|
54 'settings' => 'ModifyMailSettings',
|
Chris@76
|
55 );
|
Chris@76
|
56
|
Chris@76
|
57 // By default we want to browse
|
Chris@76
|
58 $_REQUEST['sa'] = isset($_REQUEST['sa']) && isset($subActions[$_REQUEST['sa']]) ? $_REQUEST['sa'] : 'browse';
|
Chris@76
|
59 $context['sub_action'] = $_REQUEST['sa'];
|
Chris@76
|
60
|
Chris@76
|
61 // Load up all the tabs...
|
Chris@76
|
62 $context[$context['admin_menu_name']]['tab_data'] = array(
|
Chris@76
|
63 'title' => $txt['mailqueue_title'],
|
Chris@76
|
64 'help' => '',
|
Chris@76
|
65 'description' => $txt['mailqueue_desc'],
|
Chris@76
|
66 );
|
Chris@76
|
67
|
Chris@76
|
68 // Call the right function for this sub-acton.
|
Chris@76
|
69 $subActions[$_REQUEST['sa']]();
|
Chris@76
|
70 }
|
Chris@76
|
71
|
Chris@76
|
72 // Display the mail queue...
|
Chris@76
|
73 function BrowseMailQueue()
|
Chris@76
|
74 {
|
Chris@76
|
75 global $scripturl, $context, $modSettings, $txt, $smcFunc;
|
Chris@76
|
76 global $sourcedir;
|
Chris@76
|
77
|
Chris@76
|
78 // First, are we deleting something from the queue?
|
Chris@76
|
79 if (isset($_REQUEST['delete']))
|
Chris@76
|
80 {
|
Chris@76
|
81 checkSession('post');
|
Chris@76
|
82
|
Chris@76
|
83 $smcFunc['db_query']('', '
|
Chris@76
|
84 DELETE FROM {db_prefix}mail_queue
|
Chris@76
|
85 WHERE id_mail IN ({array_int:mail_ids})',
|
Chris@76
|
86 array(
|
Chris@76
|
87 'mail_ids' => $_REQUEST['delete'],
|
Chris@76
|
88 )
|
Chris@76
|
89 );
|
Chris@76
|
90 }
|
Chris@76
|
91
|
Chris@76
|
92 // How many items do we have?
|
Chris@76
|
93 $request = $smcFunc['db_query']('', '
|
Chris@76
|
94 SELECT COUNT(*) AS queue_size, MIN(time_sent) AS oldest
|
Chris@76
|
95 FROM {db_prefix}mail_queue',
|
Chris@76
|
96 array(
|
Chris@76
|
97 )
|
Chris@76
|
98 );
|
Chris@76
|
99 list ($mailQueueSize, $mailOldest) = $smcFunc['db_fetch_row']($request);
|
Chris@76
|
100 $smcFunc['db_free_result']($request);
|
Chris@76
|
101
|
Chris@76
|
102 $context['oldest_mail'] = empty($mailOldest) ? $txt['mailqueue_oldest_not_available'] : time_since(time() - $mailOldest);
|
Chris@76
|
103 $context['mail_queue_size'] = comma_format($mailQueueSize);
|
Chris@76
|
104
|
Chris@76
|
105 $listOptions = array(
|
Chris@76
|
106 'id' => 'mail_queue',
|
Chris@76
|
107 'title' => $txt['mailqueue_browse'],
|
Chris@76
|
108 'items_per_page' => 20,
|
Chris@76
|
109 'base_href' => $scripturl . '?action=admin;area=mailqueue',
|
Chris@76
|
110 'default_sort_col' => 'age',
|
Chris@76
|
111 'no_items_label' => $txt['mailqueue_no_items'],
|
Chris@76
|
112 'get_items' => array(
|
Chris@76
|
113 'function' => 'list_getMailQueue',
|
Chris@76
|
114 ),
|
Chris@76
|
115 'get_count' => array(
|
Chris@76
|
116 'function' => 'list_getMailQueueSize',
|
Chris@76
|
117 ),
|
Chris@76
|
118 'columns' => array(
|
Chris@76
|
119 'subject' => array(
|
Chris@76
|
120 'header' => array(
|
Chris@76
|
121 'value' => $txt['mailqueue_subject'],
|
Chris@76
|
122 ),
|
Chris@76
|
123 'data' => array(
|
Chris@76
|
124 'function' => create_function('$rowData', '
|
Chris@76
|
125 global $smcFunc;
|
Chris@76
|
126 return $smcFunc[\'strlen\']($rowData[\'subject\']) > 50 ? sprintf(\'%1$s...\', htmlspecialchars($smcFunc[\'substr\']($rowData[\'subject\'], 0, 47))) : htmlspecialchars($rowData[\'subject\']);
|
Chris@76
|
127 '),
|
Chris@76
|
128 'class' => 'smalltext',
|
Chris@76
|
129 ),
|
Chris@76
|
130 'sort' => array(
|
Chris@76
|
131 'default' => 'subject',
|
Chris@76
|
132 'reverse' => 'subject DESC',
|
Chris@76
|
133 ),
|
Chris@76
|
134 ),
|
Chris@76
|
135 'recipient' => array(
|
Chris@76
|
136 'header' => array(
|
Chris@76
|
137 'value' => $txt['mailqueue_recipient'],
|
Chris@76
|
138 ),
|
Chris@76
|
139 'data' => array(
|
Chris@76
|
140 'sprintf' => array(
|
Chris@76
|
141 'format' => '<a href="mailto:%1$s">%1$s</a>',
|
Chris@76
|
142 'params' => array(
|
Chris@76
|
143 'recipient' => true,
|
Chris@76
|
144 ),
|
Chris@76
|
145 ),
|
Chris@76
|
146 'class' => 'smalltext',
|
Chris@76
|
147 ),
|
Chris@76
|
148 'sort' => array(
|
Chris@76
|
149 'default' => 'recipient',
|
Chris@76
|
150 'reverse' => 'recipient DESC',
|
Chris@76
|
151 ),
|
Chris@76
|
152 ),
|
Chris@76
|
153 'priority' => array(
|
Chris@76
|
154 'header' => array(
|
Chris@76
|
155 'value' => $txt['mailqueue_priority'],
|
Chris@76
|
156 ),
|
Chris@76
|
157 'data' => array(
|
Chris@76
|
158 'function' => create_function('$rowData', '
|
Chris@76
|
159 global $txt;
|
Chris@76
|
160
|
Chris@76
|
161 // We probably have a text label with your priority.
|
Chris@76
|
162 $txtKey = sprintf(\'mq_mpriority_%1$s\', $rowData[\'priority\']);
|
Chris@76
|
163
|
Chris@76
|
164 // But if not, revert to priority 0.
|
Chris@76
|
165 return isset($txt[$txtKey]) ? $txt[$txtKey] : $txt[\'mq_mpriority_1\'];
|
Chris@76
|
166 '),
|
Chris@76
|
167 'class' => 'smalltext',
|
Chris@76
|
168 ),
|
Chris@76
|
169 'sort' => array(
|
Chris@76
|
170 'default' => 'priority',
|
Chris@76
|
171 'reverse' => 'priority DESC',
|
Chris@76
|
172 ),
|
Chris@76
|
173 ),
|
Chris@76
|
174 'age' => array(
|
Chris@76
|
175 'header' => array(
|
Chris@76
|
176 'value' => $txt['mailqueue_age'],
|
Chris@76
|
177 ),
|
Chris@76
|
178 'data' => array(
|
Chris@76
|
179 'function' => create_function('$rowData', '
|
Chris@76
|
180 return time_since(time() - $rowData[\'time_sent\']);
|
Chris@76
|
181 '),
|
Chris@76
|
182 'class' => 'smalltext',
|
Chris@76
|
183 ),
|
Chris@76
|
184 'sort' => array(
|
Chris@76
|
185 'default' => 'time_sent',
|
Chris@76
|
186 'reverse' => 'time_sent DESC',
|
Chris@76
|
187 ),
|
Chris@76
|
188 ),
|
Chris@76
|
189 'check' => array(
|
Chris@76
|
190 'header' => array(
|
Chris@76
|
191 'value' => '<input type="checkbox" onclick="invertAll(this, this.form);" class="input_check" />',
|
Chris@76
|
192 ),
|
Chris@76
|
193 'data' => array(
|
Chris@76
|
194 'function' => create_function('$rowData', '
|
Chris@76
|
195 return \'<input type="checkbox" name="delete[]" value="\' . $rowData[\'id_mail\'] . \'" class="input_check" />\';
|
Chris@76
|
196 '),
|
Chris@76
|
197 'class' => 'smalltext',
|
Chris@76
|
198 ),
|
Chris@76
|
199 ),
|
Chris@76
|
200 ),
|
Chris@76
|
201 'form' => array(
|
Chris@76
|
202 'href' => $scripturl . '?action=admin;area=mailqueue',
|
Chris@76
|
203 'include_start' => true,
|
Chris@76
|
204 'include_sort' => true,
|
Chris@76
|
205 ),
|
Chris@76
|
206 'additional_rows' => array(
|
Chris@76
|
207 array(
|
Chris@76
|
208 'position' => 'below_table_data',
|
Chris@76
|
209 'value' => '[<a href="' . $scripturl . '?action=admin;area=mailqueue;sa=clear;' . $context['session_var'] . '=' . $context['session_id'] . '" onclick="return confirm(\'' . $txt['mailqueue_clear_list_warning'] . '\');">' . $txt['mailqueue_clear_list'] . '</a>] <input type="submit" name="delete_redirects" value="' . $txt['delete'] . '" onclick="return confirm(\'' . $txt['quickmod_confirm'] . '\');" class="button_submit" />',
|
Chris@76
|
210 ),
|
Chris@76
|
211 ),
|
Chris@76
|
212 );
|
Chris@76
|
213
|
Chris@76
|
214 require_once($sourcedir . '/Subs-List.php');
|
Chris@76
|
215 createList($listOptions);
|
Chris@76
|
216
|
Chris@76
|
217 loadTemplate('ManageMail');
|
Chris@76
|
218 $context['sub_template'] = 'browse';
|
Chris@76
|
219 }
|
Chris@76
|
220
|
Chris@76
|
221 function list_getMailQueue($start, $items_per_page, $sort)
|
Chris@76
|
222 {
|
Chris@76
|
223 global $smcFunc, $txt;
|
Chris@76
|
224
|
Chris@76
|
225 $request = $smcFunc['db_query']('', '
|
Chris@76
|
226 SELECT
|
Chris@76
|
227 id_mail, time_sent, recipient, priority, private, subject
|
Chris@76
|
228 FROM {db_prefix}mail_queue
|
Chris@76
|
229 ORDER BY {raw:sort}
|
Chris@76
|
230 LIMIT {int:start}, {int:items_per_page}',
|
Chris@76
|
231 array(
|
Chris@76
|
232 'start' => $start,
|
Chris@76
|
233 'sort' => $sort,
|
Chris@76
|
234 'items_per_page' => $items_per_page,
|
Chris@76
|
235 )
|
Chris@76
|
236 );
|
Chris@76
|
237 $mails = array();
|
Chris@76
|
238 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
239 {
|
Chris@76
|
240 // Private PM/email subjects and similar shouldn't be shown in the mailbox area.
|
Chris@76
|
241 if (!empty($row['private']))
|
Chris@76
|
242 $row['subject'] = $txt['personal_message'];
|
Chris@76
|
243
|
Chris@76
|
244 $mails[] = $row;
|
Chris@76
|
245 }
|
Chris@76
|
246 $smcFunc['db_free_result']($request);
|
Chris@76
|
247
|
Chris@76
|
248 return $mails;
|
Chris@76
|
249 }
|
Chris@76
|
250
|
Chris@76
|
251 function list_getMailQueueSize()
|
Chris@76
|
252 {
|
Chris@76
|
253 global $smcFunc;
|
Chris@76
|
254
|
Chris@76
|
255 // How many items do we have?
|
Chris@76
|
256 $request = $smcFunc['db_query']('', '
|
Chris@76
|
257 SELECT COUNT(*) AS queue_size
|
Chris@76
|
258 FROM {db_prefix}mail_queue',
|
Chris@76
|
259 array(
|
Chris@76
|
260 )
|
Chris@76
|
261 );
|
Chris@76
|
262 list ($mailQueueSize) = $smcFunc['db_fetch_row']($request);
|
Chris@76
|
263 $smcFunc['db_free_result']($request);
|
Chris@76
|
264
|
Chris@76
|
265 return $mailQueueSize;
|
Chris@76
|
266 }
|
Chris@76
|
267
|
Chris@76
|
268 function ModifyMailSettings($return_config = false)
|
Chris@76
|
269 {
|
Chris@76
|
270 global $txt, $scripturl, $context, $settings, $birthdayEmails, $modSettings;
|
Chris@76
|
271
|
Chris@76
|
272 loadLanguage('EmailTemplates');
|
Chris@76
|
273
|
Chris@76
|
274 $body = $birthdayEmails[empty($modSettings['birthday_email']) ? 'happy_birthday' : $modSettings['birthday_email']]['body'];
|
Chris@76
|
275 $subject = $birthdayEmails[empty($modSettings['birthday_email']) ? 'happy_birthday' : $modSettings['birthday_email']]['subject'];
|
Chris@76
|
276
|
Chris@76
|
277 $emails = array();
|
Chris@76
|
278 foreach ($birthdayEmails as $index => $dummy)
|
Chris@76
|
279 $emails[$index] = $index;
|
Chris@76
|
280
|
Chris@76
|
281 $config_vars = array(
|
Chris@76
|
282 // Mail queue stuff, this rocks ;)
|
Chris@76
|
283 array('check', 'mail_queue'),
|
Chris@76
|
284 array('int', 'mail_limit'),
|
Chris@76
|
285 array('int', 'mail_quantity'),
|
Chris@76
|
286 '',
|
Chris@76
|
287 // SMTP stuff.
|
Chris@76
|
288 array('select', 'mail_type', array($txt['mail_type_default'], 'SMTP')),
|
Chris@76
|
289 array('text', 'smtp_host'),
|
Chris@76
|
290 array('text', 'smtp_port'),
|
Chris@76
|
291 array('text', 'smtp_username'),
|
Chris@76
|
292 array('password', 'smtp_password'),
|
Chris@76
|
293 '',
|
Chris@76
|
294 array('select', 'birthday_email', $emails, 'value' => empty($modSettings['birthday_email']) ? 'happy_birthday' : $modSettings['birthday_email'], 'javascript' => 'onchange="fetch_birthday_preview()"'),
|
Chris@76
|
295 'birthday_subject' => array('var_message', 'birthday_subject', 'var_message' => $birthdayEmails[empty($modSettings['birthday_email']) ? 'happy_birthday' : $modSettings['birthday_email']]['subject'], 'disabled' => true, 'size' => strlen($subject) + 3),
|
Chris@76
|
296 'birthday_body' => array('var_message', 'birthday_body', 'var_message' => nl2br($body), 'disabled' => true, 'size' => ceil(strlen($body) / 25)),
|
Chris@76
|
297 );
|
Chris@76
|
298
|
Chris@76
|
299 if ($return_config)
|
Chris@76
|
300 return $config_vars;
|
Chris@76
|
301
|
Chris@76
|
302 // Saving?
|
Chris@76
|
303 if (isset($_GET['save']))
|
Chris@76
|
304 {
|
Chris@76
|
305 // Make the SMTP password a little harder to see in a backup etc.
|
Chris@76
|
306 if (!empty($_POST['smtp_password'][1]))
|
Chris@76
|
307 {
|
Chris@76
|
308 $_POST['smtp_password'][0] = base64_encode($_POST['smtp_password'][0]);
|
Chris@76
|
309 $_POST['smtp_password'][1] = base64_encode($_POST['smtp_password'][1]);
|
Chris@76
|
310 }
|
Chris@76
|
311 checkSession();
|
Chris@76
|
312
|
Chris@76
|
313 // We don't want to save the subject and body previews.
|
Chris@76
|
314 unset($config_vars['birthday_subject'], $config_vars['birthday_body']);
|
Chris@76
|
315
|
Chris@76
|
316 saveDBSettings($config_vars);
|
Chris@76
|
317 redirectexit('action=admin;area=mailqueue;sa=settings');
|
Chris@76
|
318 }
|
Chris@76
|
319
|
Chris@76
|
320 $context['post_url'] = $scripturl . '?action=admin;area=mailqueue;save;sa=settings';
|
Chris@76
|
321 $context['settings_title'] = $txt['mailqueue_settings'];
|
Chris@76
|
322
|
Chris@76
|
323 prepareDBSettingContext($config_vars);
|
Chris@76
|
324
|
Chris@76
|
325 $context['settings_insert_above'] = '
|
Chris@76
|
326 <script type="text/javascript"><!-- // --><![CDATA[
|
Chris@76
|
327 var bDay = {';
|
Chris@76
|
328
|
Chris@76
|
329 $i = 0;
|
Chris@76
|
330 foreach ($birthdayEmails as $index => $email)
|
Chris@76
|
331 {
|
Chris@76
|
332 $is_last = ++$i == count($birthdayEmails);
|
Chris@76
|
333 $context['settings_insert_above'] .= '
|
Chris@76
|
334 ' . $index . ': {
|
Chris@76
|
335 subject: ' . JavaScriptEscape($email['subject']) . ',
|
Chris@76
|
336 body: ' . JavaScriptEscape(nl2br($email['body'])) . '
|
Chris@76
|
337 }' . (!$is_last ? ',' : '');
|
Chris@76
|
338 }
|
Chris@76
|
339 $context['settings_insert_above'] .= '
|
Chris@76
|
340 };
|
Chris@76
|
341 function fetch_birthday_preview()
|
Chris@76
|
342 {
|
Chris@76
|
343 var index = document.getElementById(\'birthday_email\').value;
|
Chris@76
|
344 document.getElementById(\'birthday_subject\').innerHTML = bDay[index].subject;
|
Chris@76
|
345 document.getElementById(\'birthday_body\').innerHTML = bDay[index].body;
|
Chris@76
|
346 }
|
Chris@76
|
347 // ]]></script>';
|
Chris@76
|
348 }
|
Chris@76
|
349
|
Chris@76
|
350 // This function clears the mail queue of all emails, and at the end redirects to browse.
|
Chris@76
|
351 function ClearMailQueue()
|
Chris@76
|
352 {
|
Chris@76
|
353 global $sourcedir, $smcFunc;
|
Chris@76
|
354
|
Chris@76
|
355 checkSession('get');
|
Chris@76
|
356
|
Chris@76
|
357 // This is certainly needed!
|
Chris@76
|
358 require_once($sourcedir . '/ScheduledTasks.php');
|
Chris@76
|
359
|
Chris@76
|
360 // If we don't yet have the total to clear, find it.
|
Chris@76
|
361 if (!isset($_GET['te']))
|
Chris@76
|
362 {
|
Chris@76
|
363 // How many items do we have?
|
Chris@76
|
364 $request = $smcFunc['db_query']('', '
|
Chris@76
|
365 SELECT COUNT(*) AS queue_size
|
Chris@76
|
366 FROM {db_prefix}mail_queue',
|
Chris@76
|
367 array(
|
Chris@76
|
368 )
|
Chris@76
|
369 );
|
Chris@76
|
370 list ($_GET['te']) = $smcFunc['db_fetch_row']($request);
|
Chris@76
|
371 $smcFunc['db_free_result']($request);
|
Chris@76
|
372 }
|
Chris@76
|
373 else
|
Chris@76
|
374 $_GET['te'] = (int) $_GET['te'];
|
Chris@76
|
375
|
Chris@76
|
376 $_GET['sent'] = isset($_GET['sent']) ? (int) $_GET['sent'] : 0;
|
Chris@76
|
377
|
Chris@76
|
378 // Send 50 at a time, then go for a break...
|
Chris@76
|
379 while (ReduceMailQueue(50, true, true) === true)
|
Chris@76
|
380 {
|
Chris@76
|
381 // Sent another 50.
|
Chris@76
|
382 $_GET['sent'] += 50;
|
Chris@76
|
383 pauseMailQueueClear();
|
Chris@76
|
384 }
|
Chris@76
|
385
|
Chris@76
|
386 return BrowseMailQueue();
|
Chris@76
|
387 }
|
Chris@76
|
388
|
Chris@76
|
389 // Used for pausing the mail queue.
|
Chris@76
|
390 function pauseMailQueueClear()
|
Chris@76
|
391 {
|
Chris@76
|
392 global $context, $txt, $time_start;
|
Chris@76
|
393
|
Chris@76
|
394 // Try get more time...
|
Chris@76
|
395 @set_time_limit(600);
|
Chris@76
|
396 if (function_exists('apache_reset_timeout'))
|
Chris@76
|
397 @apache_reset_timeout();
|
Chris@76
|
398
|
Chris@76
|
399 // Have we already used our maximum time?
|
Chris@76
|
400 if (time() - array_sum(explode(' ', $time_start)) < 5)
|
Chris@76
|
401 return;
|
Chris@76
|
402
|
Chris@76
|
403 $context['continue_get_data'] = '?action=admin;area=mailqueue;sa=clear;te=' . $_GET['te'] . ';sent=' . $_GET['sent'] . ';' . $context['session_var'] . '=' . $context['session_id'];
|
Chris@76
|
404 $context['page_title'] = $txt['not_done_title'];
|
Chris@76
|
405 $context['continue_post_data'] = '';
|
Chris@76
|
406 $context['continue_countdown'] = '2';
|
Chris@76
|
407 $context['sub_template'] = 'not_done';
|
Chris@76
|
408
|
Chris@76
|
409 // Keep browse selected.
|
Chris@76
|
410 $context['selected'] = 'browse';
|
Chris@76
|
411
|
Chris@76
|
412 // What percent through are we?
|
Chris@76
|
413 $context['continue_percent'] = round(($_GET['sent'] / $_GET['te']) * 100, 1);
|
Chris@76
|
414
|
Chris@76
|
415 // Never more than 100%!
|
Chris@76
|
416 $context['continue_percent'] = min($context['continue_percent'], 100);
|
Chris@76
|
417
|
Chris@76
|
418 obExit();
|
Chris@76
|
419 }
|
Chris@76
|
420
|
Chris@76
|
421 // Little function to calculate how long ago a time was.
|
Chris@76
|
422 function time_since($time_diff)
|
Chris@76
|
423 {
|
Chris@76
|
424 global $txt;
|
Chris@76
|
425
|
Chris@76
|
426 if ($time_diff < 0)
|
Chris@76
|
427 $time_diff = 0;
|
Chris@76
|
428
|
Chris@76
|
429 // Just do a bit of an if fest...
|
Chris@76
|
430 if ($time_diff > 86400)
|
Chris@76
|
431 {
|
Chris@76
|
432 $days = round($time_diff / 86400, 1);
|
Chris@76
|
433 return sprintf($days == 1 ? $txt['mq_day'] : $txt['mq_days'], $time_diff / 86400);
|
Chris@76
|
434 }
|
Chris@76
|
435 // Hours?
|
Chris@76
|
436 elseif ($time_diff > 3600)
|
Chris@76
|
437 {
|
Chris@76
|
438 $hours = round($time_diff / 3600, 1);
|
Chris@76
|
439 return sprintf($hours == 1 ? $txt['mq_hour'] : $txt['mq_hours'], $hours);
|
Chris@76
|
440 }
|
Chris@76
|
441 // Minutes?
|
Chris@76
|
442 elseif ($time_diff > 60)
|
Chris@76
|
443 {
|
Chris@76
|
444 $minutes = (int) ($time_diff / 60);
|
Chris@76
|
445 return sprintf($minutes == 1 ? $txt['mq_minute'] : $txt['mq_minutes'], $minutes);
|
Chris@76
|
446 }
|
Chris@76
|
447 // Otherwise must be second
|
Chris@76
|
448 else
|
Chris@76
|
449 return sprintf($time_diff == 1 ? $txt['mq_second'] : $txt['mq_seconds'], $time_diff);
|
Chris@76
|
450 }
|
Chris@76
|
451
|
Chris@76
|
452 ?> |