From 41c141178e9733bbf38f8e937d3dea63058af0dc Mon Sep 17 00:00:00 2001 From: Adrian Lang Date: Tue, 10 Aug 2010 12:26:19 +0200 Subject: Ignore small & own changes in digest & list mails --- inc/lang/de/lang.php | 4 ++-- inc/subscription.php | 21 ++++++++++----------- lib/exe/indexer.php | 46 ++++++++++++++++++++++++++++------------------ 3 files changed, 40 insertions(+), 31 deletions(-) diff --git a/inc/lang/de/lang.php b/inc/lang/de/lang.php index dcc5c5a3f..c5c65abca 100644 --- a/inc/lang/de/lang.php +++ b/inc/lang/de/lang.php @@ -239,8 +239,8 @@ $lang['subscr_m_unsubscribe'] = 'Löschen'; $lang['subscr_m_subscribe'] = 'Abonnieren'; $lang['subscr_m_receive'] = 'Benachrichtigung'; $lang['subscr_style_every'] = 'Email bei jeder Bearbeitung'; -$lang['subscr_style_digest'] = 'Zusammenfassung der Änderungen für jede veränderte Seite'; -$lang['subscr_style_list'] = 'Liste der geänderten Seiten'; +$lang['subscr_style_digest'] = 'Zusammenfassung der Änderungen für jede veränderte Seite (Alle %.2f Tage)'; +$lang['subscr_style_list'] = 'Liste der geänderten Seiten (Alle %.2f Tage)'; $lang['authmodfailed'] = 'Benutzerüberprüfung nicht möglich. Bitte wenden Sie sich an den Systembetreuer.'; $lang['authtempfail'] = 'Benutzerüberprüfung momentan nicht möglich. Falls das Problem andauert, wenden Sie sich an den Systembetreuer.'; $lang['i_chooselang'] = 'Wählen Sie Ihre Sprache'; diff --git a/inc/subscription.php b/inc/subscription.php index ce5da4cd4..22d8fccd5 100644 --- a/inc/subscription.php +++ b/inc/subscription.php @@ -284,20 +284,18 @@ function subscription_addresslist(&$data){ * Sends a digest mail showing a bunch of changes. * * @param string $subscriber_mail The target mail address - * @param array $change The newest change + * @param array $id The ID * @param int $lastupdate Time of the last notification * * @author Adrian Lang */ -function subscription_send_digest($subscriber_mail, $change, $lastupdate) { - $id = $change['id']; +function subscription_send_digest($subscriber_mail, $id, $lastupdate) { $n = 0; do { $rev = getRevisions($id, $n++, 1); $rev = (count($rev) > 0) ? $rev[0] : null; } while (!is_null($rev) && $rev > $lastupdate); - $ip = $change['ip']; $replaces = array('NEWPAGE' => wl($id, '', true, '&'), 'SUBSCRIBE' => wl($id, array('do' => 'subscribe'), true, '&')); if (!is_null($rev)) { @@ -322,24 +320,25 @@ function subscription_send_digest($subscriber_mail, $change, $lastupdate) { * Sends a list mail showing a list of changed pages. * * @param string $subscriber_mail The target mail address - * @param array $changes Array of changes - * @param string $id The id of the namespace + * @param array $ids Array of ids + * @param string $ns_id The id of the namespace * * @author Adrian Lang */ -function subscription_send_list($subscriber_mail, $changes, $id) { +function subscription_send_list($subscriber_mail, $ids, $ns_id) { + if (count($ids) === 0) return; global $conf; $list = ''; - foreach ($changes as $change) { - $list .= '* ' . wl($change['id'], array(), true) . NL; + foreach ($ids as $id) { + $list .= '* ' . wl($id, array(), true) . NL; } subscription_send($subscriber_mail, array('DIFF' => rtrim($list), - 'SUBSCRIBE' => wl($id . $conf['start'], + 'SUBSCRIBE' => wl($ns_id . $conf['start'], array('do' => 'subscribe'), true, '&')), 'subscribe_list', - prettyprint_id($id), + prettyprint_id($ns_id), 'subscr_list'); } diff --git a/lib/exe/indexer.php b/lib/exe/indexer.php index 75228779e..f8e2f7981 100644 --- a/lib/exe/indexer.php +++ b/lib/exe/indexer.php @@ -363,30 +363,40 @@ function sendDigest() { if (substr($id, -1, 1) === ':') { // The subscription target is a namespace $changes = getRecentsSince($lastupdate, null, getNS($id)); - if (count($changes) === 0) { - continue; - } - if ($style === 'digest') { - foreach($changes as $change) { - subscription_send_digest($USERINFO['mail'], $change, - $lastupdate); - } - } elseif ($style === 'list') { - subscription_send_list($USERINFO['mail'], $changes, $id); - } - // TODO: Handle duplicate subscriptions. } else { if(auth_quickaclcheck($id) < AUTH_READ) continue; $meta = p_get_metadata($id); - $rev = $meta['last_change']['date']; - if ($rev < $lastupdate) { - // There is no new revision. - continue; + $changes = array($meta['last_change']); + } + + // Filter out pages only changed in small and own edits + $change_ids = array(); + foreach($changes as $rev) { + $n = 0; + while (!is_null($rev) && $rev['date'] >= $lastupdate && + ($_SERVER['REMOTE_USER'] === $rev['user'] || + $rev['type'] === DOKU_CHANGE_TYPE_MINOR_EDIT)) { + $rev = getRevisions($rev['id'], $n++, 1); + $rev = (count($rev) > 0) ? $rev[0] : null; + } + + if (!is_null($rev) && $rev['date'] >= $lastupdate) { + // Some change was not a minor one and not by myself + $change_ids[] = $rev['id']; } - subscription_send_digest($USERINFO['mail'], $meta['last_change'], - $lastupdate); } + + if ($style === 'digest') { + foreach($change_ids as $change_id) { + subscription_send_digest($USERINFO['mail'], $change_id, + $lastupdate); + } + } elseif ($style === 'list') { + subscription_send_list($USERINFO['mail'], $change_ids, $id); + } + // TODO: Handle duplicate subscriptions. + // Update notification time. subscription_set($user, $id, $style, time(), true); } -- cgit v1.2.3