forked from MightyGorgon/icy_phoenix
-
Notifications
You must be signed in to change notification settings - Fork 0
/
mail_digests.php
617 lines (547 loc) · 21.4 KB
/
mail_digests.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
<?php
/**
*
* @package Icy Phoenix
* @version $Id$
* @copyright (c) 2008 Icy Phoenix
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
*
* @Extra credits for this file
* Mark D. Hamill ([email protected])
*
*/
// ----------------------------------------- WARNING ---------------------------------------------- //
// THIS PROGRAM SHOULD BE INVOKED TO RUN AUTOMATICALLY EVERY HOUR BY THE OPERATING SYSTEM USING AN
// OPERATING SYSTEM FEATURE LIKE CRONTAB. SEE BATCH_SCHEDULING.TXT!!!
// ------------------------------------------ EDIT ------------------------------------------------ //
// IN ACP THERE IS AN OPTION FOR TRYING TO EMULATE THE CRONTAB VIA PHP. NOT FULLY WORKING YET WITH
// SOME CONFIGURATIONS.
// ----------------------------------------- WARNING ---------------------------------------------- //
// Warning: this was only tested with MySQL. I don't have access to other databases. Consequently,
// the SQL may need tweaking for other relational databases.
if (!defined('PHP_DIGESTS_CRON'))
{
// Comment this line to allow execution of mail_digests.php from address bar.
// Decomment it to block the execution
die('This file cannot be run directly...');
define('IN_ICYPHOENIX', true);
if (!defined('IP_ROOT_PATH')) define('IP_ROOT_PATH', './');
if (!defined('PHP_EXT')) define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1));
include(IP_ROOT_PATH . 'common.' . PHP_EXT);
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
// End session management
if (empty($config['cron_digests_interval']) || ($config['cron_digests_interval'] == -1))
{
message_die(GENERAL_MESSAGE, $lang['Not_Auth_View']);
}
}
if (!defined('IN_ICYPHOENIX'))
{
die('Hacking attempt');
}
// COMMON INCLUSIONS WHERE NEEDED - BEGIN
// Comment at least the whole "IF" if you are going to run this file outside Icy Phoenix
if (!defined('IN_CRON'))
{
if (!defined('IP_ROOT_PATH')) define('IP_ROOT_PATH', './');
if (!defined('PHP_EXT')) define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1));
if (!defined('ICYPHOENIX_VERSION')) @include(IP_ROOT_PATH . 'includes/constants.' . PHP_EXT);
if (!function_exists('append_sid')) @include(IP_ROOT_PATH . 'includes/functions.' . PHP_EXT);
if (!function_exists('check_mem_limit')) @include(IP_ROOT_PATH . 'includes/functions_admin.' . PHP_EXT);
if (!function_exists('auth')) @include(IP_ROOT_PATH . 'includes/auth.' . PHP_EXT);
if (!defined('PHP_DIGESTS_FUNCTIONS_CRON')) @include(IP_ROOT_PATH . 'includes/functions_cron.' . PHP_EXT);
if (empty($user->data))
{
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
// End session management
}
if (($config['url_rw'] || $config['url_rw_guests']) && !function_exists('make_url_friendly'))
{
@include_once(IP_ROOT_PATH . 'includes/functions_rewrite.' . PHP_EXT);
}
}
if (!class_exists('bbcode') || empty($bbcode))
{
@include_once(IP_ROOT_PATH . 'includes/bbcode.' . PHP_EXT);
}
if (!class_exists('emailer')) @include(IP_ROOT_PATH . 'includes/emailer.' . PHP_EXT);
if (!defined('DIGEST_VERSION')) @include(IP_ROOT_PATH . 'includes/digest_constants.' . PHP_EXT);
setup_extra_lang(array('lang_digests'));
// COMMON INCLUSIONS WHERE NEEDED - BEGIN
@set_time_limit(0);
$mem_limit = check_mem_limit();
@ini_set('memory_limit', $mem_limit);
ignore_user_abort();
$link_tag = '';
$link_tag_unset = true;
//$break_type = (DIGEST_SHOW_SUMMARY_TYPE == 'html') ? "<br />\r\n" : "\r\n";
$break_type = (DIGEST_SHOW_SUMMARY_TYPE == 'html') ? "<br />\n" : "\n";
$line_break = "\n";
$digest_log_entry = '';
// Is today the day to run the weekly digest?
$today = @getdate();
$wday = $today['wday'];
$current_hour = $today['hours'];
$weekly_digest_text = ($wday == DIGEST_WEEKLY_DIGEST_DAY) ? " or (digest_type = 'WEEK' and send_hour = " . $current_hour . ")" : "";
// Retrieve a list of forum_ids that all registered users can access. Since digests go only to registered users it's important to include those forums not accessible to the general public but accessible to users.
$sql = 'SELECT forum_id FROM ' . FORUMS_TABLE . ' WHERE auth_read IN (' . AUTH_ALL . ', ' . AUTH_REG . ') AND forum_type = ' . FORUM_POST;
$result = $db->sql_query($sql);
$i = 0;
while ($row = $db->sql_fetchrow($result))
{
$valid_forums[$i] = $row['forum_id'];
$i++;
}
$db->sql_freeresult($result);
// Send a user a weekly digest only if it is the correct day and hour of the week for a weekly digest, and any daily digest if the current hour of the day is the same as the hour wanted for the digest.
/*
$sql = "SELECT s.user_id, u.username, u.user_email, u.user_lastvisit, u.user_lang, s.digest_type, s.format, s.show_text, s.show_mine, s.new_only, s.send_on_no_messages, s.send_hour, s.text_length
FROM " . DIGEST_SUBSCRIPTIONS_TABLE . ' s, ' . USERS_TABLE . " u
WHERE s.user_id = u.user_id
AND s.user_id = 2";
*/
$sql = "SELECT s.user_id, u.username, u.user_email, u.user_lastvisit, u.user_lang, s.digest_type, s.format, s.show_text, s.show_mine, s.new_only, s.send_on_no_messages, s.send_hour, s.text_length
FROM " . DIGEST_SUBSCRIPTIONS_TABLE . " s, " . USERS_TABLE . " u
WHERE s.user_id = u.user_id AND ((digest_type = 'DAY' AND send_hour = " . $current_hour . ")" . $weekly_digest_text . ")";
$result = $db->sql_query($sql);
// With each pass through the loop one user will receive a customized digest.
$digests_sent = 0;
while ($row = $db->sql_fetchrow($result))
{
// This logic ensures the hour the user wanted to receive the digest is reported correctly in the digest.
$user_timezone = (float) $row['user_timezone'];
$offset = $board_timezone - $user_timezone;
$send_hour = (float) $row['send_hour'] - $offset;
if ($send_hour < 0)
{
$send_hour = $send_hour + 24;
}
elseif ($send_hour >= 24)
{
$send_hour = $send_hour - 24;
}
if ($row['new_only'] == 'TRUE')
{
// To filter out any possible messages a user may have seen we need to examine a number of
// possibilities, including last user message date/time, date/time of last session, if it exists, and
// of course, the last access date/time in the USERS table. Of these 3 possibilities, whichever is
// the greatest value is the actual last accessed date, and we may need to filter out messages
// prior to this date and time. My experience is phpBB doesn't always get it right.
$sql3 = "SELECT max(post_time) AS last_post_date
FROM " . POSTS_TABLE . "
WHERE poster_id = " . $row['user_id'];
$result3 = $db->sql_query($sql3);
$row3 = $db->sql_fetchrow($result3);
$last_post_date = ($row3['last_post_date'] <> '') ? $row3['last_post_date'] : 0;
$db->sql_freeresult($result3);
// When did the user's last session accessed?
$sql3 = "SELECT max(session_time) AS last_session_date
FROM " . SESSIONS_TABLE . "
WHERE session_user_id = " . $row['user_id'];
$result3 = $db->sql_query($sql3);
$row3 = $db->sql_fetchrow($result3);
$last_session_date = ($row3['last_session_date'] <> '') ? $row3['last_session_date'] : 0;
$db->sql_freeresult($result3);
$last_visited_date = $row['user_lastvisit'];
if ($last_visited_date == '')
{
$last_visited_date = 0;
}
// The true last visit date is the greatest of: last_visited_date, last message posted, and last session date
$last_visited_date = max($last_post_date, $last_session_date, $last_visited_date);
}
// Get a list of forums that can only be read if user has been granted explicit permission
$i = 0;
$elected_forums = array();
$sql3 = "SELECT distinct a.forum_id
FROM " . AUTH_ACCESS_TABLE . " a, " . USER_GROUP_TABLE . " ug
WHERE ug.user_id = " . $row['user_id'] . "
AND ug.user_pending = 0
AND a.group_id = ug.group_id";
$result3 = $db->sql_query($sql3);
while ($row3 = $db->sql_fetchrow($result3))
{
$elected_forums [$i] = $row3['forum_id'];
$i++;
}
$db->sql_freeresult($result3);
// Get the union of the valid_forums array and the elected_formus array. The resulting elements are
// the forums that could be queried. This is necessary because MySQL doesn't support SQL Unions (yet).
$queried_forums = array_merge($valid_forums, $elected_forums);
$queried_forums = array_unique($queried_forums);
// Further filter the number of messages sent by including only forums from which the user
// specifically wants to get emails. If there are none, assume all.
$i = 0;
$subscribed_forums = '';
$sql3 = "SELECT forum_id
FROM " . DIGEST_SUBSCRIBED_FORUMS_TABLE . "
WHERE user_id = " . $row['user_id'];
$result3 = $db->sql_query($sql3);
while ($row3 = $db->sql_fetchrow($result3))
{
$subscribed_forums [$i] = $row3['forum_id'];
$i++;
}
$db->sql_freeresult($result3);
// If there are subscribed forums, we only want to see messages for these forums.
if ($i <> 0)
{
$queried_forums = array_intersect($queried_forums, $subscribed_forums);
}
// Create a list of forums to be queried from the database. This is a comma delimited list of all forums
// the user is allowed to read that can be used with the SQL IN operation.
$forums_list = implode(',', $queried_forums);
if (empty($forums_list))
{
continue;
}
// Format sender's email address (SMTP seems to have a problem with adding username)
$to = ($config['smtp_delivery']) ? $row['user_email'] : $row['username'] . ' <' . $row['user_email'] . '>';
// Show the text of the message?
$show_text = ($row['show_text'] == 'YES') ? true: false;
// Show messages written by this user?
$show_mine = ($row['show_mine'] == 'YES') ? true: false;
// Prepare to get digest type
if($row['digest_type'] == 'DAY')
{
$msg_period = $lang['digest_period_24_hrs'];
$period = time() - (24 * 60 * 60);
}
else
{
$msg_period = $lang['digest_period_1_week'];
$period = time() - (7 * 24 * 60 * 60);
}
// Format differently if HTML requests
if($row['format'] == 'HTML')
{
$html = true;
$parastart = '<p>';
$paraend = '</p>' . $line_break;
}
else
{
$html = false;
$parastart = '';
$paraend = $line_break . $line_break;
}
// Set part of SQL needed to retrieve new only, or messages through the selected period
if ($row['new_only'] == 'TRUE')
{
$code = max($period, $last_visited_date);
}
else
{
$code = $period;
}
// Filter out user's own postings, if they so elected
if ($show_mine == false)
{
$code .= ' and p.poster_id <> ' . $row['user_id'];
}
// The emailer class does not have the equivalent of the assign_block_vars operation, so the
// entire digest must be placed inside a variable.
$msg = '';
// Create a list of messages for this user that presumably have not been seen.
// Filter out unauthorized forums.
$sql2 = "SELECT f.forum_name, t.topic_title, u.username AS 'Posted by', p.post_time, p.post_text, p.post_id, t.topic_id, f.forum_id
FROM " . POSTS_TABLE . " p, " . TOPICS_TABLE . " t, " . FORUMS_TABLE . " f, " . USERS_TABLE . " u
WHERE p.topic_id = t.topic_id
AND t.forum_id = f.forum_id
AND p.poster_id = u.user_id
AND f.forum_type = " . FORUM_POST . "
AND p.post_time > " . $code . "
AND f.forum_id IN (" . $forums_list . ")
ORDER BY f.forum_order, t.topic_title, p.post_time";
// Uncomment next line to see SQL used
// $msg .= "**DEBUG**\r\n' . $sql2 . '\r\n**DEBUG**\r\n";
$result2 = $db->sql_query($sql2);
// Format all the mail for this user
$last_forum = '';
$last_topic = '';
$msg_count = 0;
while ($row2 = $db->sql_fetchrow($result2))
{
// Calculate Display Time
$display_time = date(DIGEST_DATE_FORMAT, $row2['post_time']);
// Format Post Text
$post_text = (strlen($row2['post_text']) <= $row['text_length']) ? $row2['post_text'] : substr($row2['post_text'], 0, $row['text_length']) . '...';
// Close table if topic is changed
if (($row2['topic_title'] <> $last_topic) && $html && ($last_topic <> ''))
{
$msg .= '</table><br /><br />' . $line_break;
}
// Show name of forum only if it changes
if ($row2['forum_name'] <> $last_forum)
{
if (!empty($config['url_rw']))
{
$forum_url = DIGEST_SITE_URL . str_replace ('--', '-', make_url_friendly($row2['forum_name']) . '-vf' . $row2['forum_id'] . '.html');
}
else
{
$forum_url = DIGEST_SITE_URL . CMS_PAGE_VIEWFORUM . '?' . POST_FORUM_URL . '=' . $row2['forum_id'];
}
if ($html)
{
if ($last_forum <> '')
{
//$msg .= '</table><br /><hr /><br />' . $line_break;
$msg .= '<br /><hr /><br />' . $line_break;
}
$msg .= '<h2>' . $lang['digest_forum'] . '<a href="' . $forum_url . '">' . $row2['forum_name'] . '</a></h2>' . $line_break;
}
else
{
$msg .= $line_break . "<<<< " . $lang['digest_forum'] . ' ' . $row2['forum_name'] . ', ' . $forum_url . " >>>>" . $line_break;
}
}
// Show name of topic only if it changes
if ($row2['topic_title'] <> $last_topic)
{
if (!empty($config['url_rw']))
{
$topic_url = DIGEST_SITE_URL . str_replace ('--', '-', make_url_friendly($row2['topic_title']) . '-vt' . $row2['topic_id'] . '.html');
}
else
{
$topic_url = DIGEST_SITE_URL . CMS_PAGE_VIEWTOPIC . '?' . POST_TOPIC_URL . '=' . $row2['topic_id'];
}
if ($html)
{
$msg .= '<h3>' . $lang['digest_topic'] . '<a href="' . $topic_url . '">' . $row2['topic_title'] . '</a></h3>' . $line_break;
$msg .= '<table class="forumline tw98pct">' . $line_break;
}
else
{
$msg .= $line_break . "<< " . $lang['digest_topic'] . ' ' . $row2['topic_title'] . ', ' . $topic_url . " >>" . $line_break . $line_break;
}
}
// Show message information
if (!empty($config['url_rw']))
{
$post_url = DIGEST_SITE_URL . str_replace ('--', '-', make_url_friendly($row2['topic_title']) . '-vp' . $row2['post_id'] . '.html#p' . $row2['post_id']);
}
else
{
$post_url = DIGEST_SITE_URL . CMS_PAGE_VIEWTOPIC . '?' . POST_POST_URL . '=' . $row2['post_id'] . '#p' . $row2['post_id'];
}
if ($html)
{
$msg .= '<tr>' . $line_break;
$msg .= '<th style="text-align: left;">' . $lang['digest_link'] . ': <a href="' . $post_url . '">' . $row2['post_id'] . '</a> - ' . $lang['digest_post_time'] . ': ' . $display_time . ' ' . gmdate('T', $row2['post_time']) . ' - ' . $lang['digest_author'] . ': ' . $row2['Posted by'] . '</th>' . $line_break;
$msg .= '</tr>' . $line_break;
if ($show_text)
{
/*
// Remove BBCode and replace \n with <br />, makes for nicer presentation
$this_msg = '<td>' . preg_replace('/\[\S+\]/', '', $post_text) . '</td>';
$this_msg = preg_replace('/\\n/', '<br />', $this_msg);
$msg .= $this_msg . $line_break;
*/
$bbcode->allow_html = (isset($config['allow_html']) ? $config['allow_html'] : false);
$bbcode->allow_bbcode = (isset($config['allow_bbcode']) ? $config['allow_bbcode'] : true);
$bbcode->allow_smilies = (isset($config['allow_smilies']) ? $config['allow_smilies'] : true);
$post_text = $bbcode->parse($post_text);
$this_msg = '<td class="row1"><div class="post-text">' . $post_text . '</div></td>';
if (empty($bbcode->allow_bbcode))
{
$this_msg = str_replace("\n", "<br />", preg_replace("/\r\n/", "\n", $this_msg));
}
$msg .= '<tr>' . $line_break;
$msg .= $this_msg . $line_break;
$msg .= '</tr>' . $line_break;
$msg .= '<tr>' . $line_break;
$msg .= '<td class="row2"><div class="post-text"> </div></td>' . $line_break;
$msg .= '</tr>' . $line_break;
}
}
else
{
$msg .= $lang['digest_posted_by'] . $row2['Posted by'] . $lang['digest_posted_at'] . $display_time . ' ' . gmdate('T', $row2['post_time']) .
', ' . $post_url . '' . $line_break;
// If requested to show the message text
if ($show_text)
{
if (strlen($post_text) < ($row['text_length'] + 3))
{
$msg .= $post_text . $line_break;
}
else
{
// Remove BBCode, makes for nicer presentation
$msg .= $lang['digest_message_excerpt'] . ': ' . preg_replace('/\[\S+\]/', '', $post_text) . $line_break;
}
$msg .= $line_break . '------------------------------' . $line_break;
}
}
// If the forum has changed, note the change
if ($row2['forum_name'] <> $last_forum)
{
$last_forum = $row2['forum_name'];
}
if ($row2['topic_title'] <> $last_topic)
{
$last_topic = $row2['topic_title'];
}
$msg_count++;
}
$db->sql_freeresult($result2);
if ($html && ($last_topic <> ''))
{
$msg .= '</table>' . $line_break;
}
if ($msg_count == 0)
{
$msg .= $parastart . $lang['digest_no_new_messages'] . $paraend;
}
// Send the email if there are messages or if user selected to send email anyhow
if (($msg_count > 0) || ($row['send_on_no_messages'] == 'YES'))
{
if (!is_object($emailer))
{
$emailer = new emailer();
}
$emailer->use_template('mail_digests', $row['user_lang']);
if ($html)
{
// Apply a style sheet if requested for HTML digest. If no style sheet is wanted then the
// link tag pointing to the style sheet is not displayed. A custom style sheet gets first priority.
/*
if ($link_tag_unset)
{
$stylesheet = '';
if (DIGEST_USE_CUSTOM_STYLESHEET)
{
$stylesheet = DIGEST_CUSTOM_STYLESHEET_PATH;
}
elseif (DIGEST_USE_DEFAULT_STYLESHEET)
{
// Get the default style sheet to apply to the HTML email
$sql2 = 'SELECT style_name, head_stylesheet
FROM ' . THEMES_TABLE . '
WHERE themes_id = ' . $config['default_style'];
$result2 = $db->sql_query($sql2);
$row2 = $db->sql_fetchrow($result2);
$stylesheet = 'templates/' . $row2['style_name'] . '/' . $row2['head_stylesheet'];
$db->sql_freeresult($result2);
}
if ($stylesheet <> '')
{
$link_tag = '<link rel="stylesheet" type="text/css" href="' . DIGEST_SITE_URL . $stylesheet . '" />';
}
$link_tag_unset = false;
}
*/
}
$encoding_charset = !empty($lang['ENCODING']) ? $lang['ENCODING'] : 'UTF-8';
$config['html_email'] = $html;
$emailer->from = $lang['digest_from_text_name'] . ' <' . $lang['digest_from_email_address'] . '>';
$emailer->to($to);
$emailer->set_subject($lang['digest_subject_line']);
$emailer->assign_vars(array(
'BOARD_URL' => DIGEST_SITE_URL,
'LINK' => $link_tag,
'L_SITENAME' => $config['sitename'],
'L_SALUTATION' => $lang['digest_salutation'],
'SALUTATION' => $row['username'],
'L_DIGEST_OPTIONS' => $lang['digest_your_digest_options'],
'L_INTRODUCTION' => $lang['digest_introduction'],
'L_FORMAT' => $lang['digest_format_short'],
'FORMAT' => $row['format'],
'L_MESSAGE_TEXT' => $lang['digest_show_message_text'],
'MESSAGE_TEXT' => $row['show_text'],
'L_MY_MESSAGES' => $lang['digest_show_my_messages'],
'MY_MESSAGES' => $row['show_mine'],
'L_FREQUENCY' => $lang['digest_frequency'],
'FREQUENCY' => $row['digest_type'],
'L_NEW_MESSAGES' => $lang['digest_show_only_new_messages'],
'NEW_MESSAGES' => $row['new_only'],
'L_SEND_DIGEST' => $lang['digest_send_if_no_new_messages'],
'SEND_DIGEST' => $row['send_on_no_messages'],
'L_SEND_TIME' => $lang['digest_hour_to_send_short'],
'SEND_TIME' => gmdate('g A', gmmktime($send_hour)),
'DIGEST_CONTENT' => $msg,
'DISCLAIMER' => ($html) ? $lang['digest_disclaimer_html'] : $lang['digest_disclaimer_text'],
'L_TEXT_LENGTH' => $lang['digest_message_size'],
'TEXT_LENGTH' => $row['text_length'],
'L_VERSION' => $lang['digest_version_text'],
'VERSION' => DIGEST_VERSION
)
);
$emailer->send($html);
$emailer->reset();
$digests_sent++;
}
// Normally this is run as a batch job, but it can be useful to get summary information of what was sent and to whom.
if (DIGEST_SHOW_SUMMARY)
{
$digest_log_entry .= $lang['digest_a_digest_containing'] . ' ' . $msg_count . ' ' . $lang['digest_posts_was_sent_to'] . ' ' . $row['user_email'] . $break_type;
}
}
$db->sql_freeresult($result);
// Summary information normally not seen, but can be captured via command line to a file
if (DIGEST_SHOW_SUMMARY)
{
$summary_content = '';
if (DIGEST_SHOW_SUMMARY_TYPE == 'html')
{
$summary_content .= '<html>' . $line_break;
$summary_content .= '<head>' . $line_break;
$summary_content .= '<title>' . $lang['digest_summary'] . '</title>' . $line_break;
$summary_content .= '</head>' . $line_break;
$summary_content .= '<body>' . $line_break;
$summary_content .= '<h1>' . $lang['digest_summary'] . '</h1>' . $line_break;
}
$summary_content .= $digest_log_entry;
if (DIGEST_SHOW_SUMMARY_TYPE == 'html')
{
$summary_content .= '<hr />' . $line_break;
}
$summary_content .= $lang['digest_a_total_of'] . ' ' . $digests_sent . ' ' . $lang['digest_were_emailed'] . $break_type;
$summary_content .= $lang['digest_server_date'] . ' ' . gmdate(DIGEST_SERVER_DATE_DISPLAY) . $break_type;
$summary_content .= $lang['digest_server_hour'] . ' ' . gmdate('H') . $break_type;
$summary_content .= $lang['digest_server_time_zone'] . ' ' . gmdate('Z') / 3600 . ' ' . $lang['digest_or'] . ' ' . gmdate('T') . $break_type;
if (DIGEST_SHOW_SUMMARY_TYPE == 'html')
{
$summary_content .= '</body>' . $line_break;
$summary_content .= '</html>' . $line_break;
}
if (!defined('PHP_DIGESTS_CRON'))
{
echo($summary_content);
}
else
{
// MG Digests LOG - BEGIN
if (!empty($config['write_digests_log']))
{
//echo($summary_content);
$datecode = gmdate('Ymd');
$logs_path = !empty($config['logs_path']) ? $config['logs_path'] : 'logs';
$logdigests = $logs_path . '/digests_' . $datecode . '.txt';
$date = gmdate('Y/m/d - H:i:s');
$log_message = '[' . $date . ']' . $line_break . $line_break;
$log_message .= $summary_content;
$log_message .= $line_break . $line_break;
$log_message .= '________________________________________________';
$log_message .= $line_break . $line_break;
$fp = fopen($logdigests, "a+");
fwrite($fp, $log_message);
fclose($fp);
}
// MG Digests LOG - END
}
}
set_config('cron_digests_last_run', time());
set_config('cron_lock_hour', 0);
?>