Skip to content

Commit

Permalink
Ignore small & own changes in digest & list mails
Browse files Browse the repository at this point in the history
  • Loading branch information
adrianheine committed Aug 10, 2010
1 parent 45c5ecd commit 41c1411
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 31 deletions.
4 changes: 2 additions & 2 deletions inc/lang/de/lang.php
Expand Up @@ -239,8 +239,8 @@
$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';
Expand Down
21 changes: 10 additions & 11 deletions inc/subscription.php
Expand Up @@ -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 <lang@cosmocode.de>
*/
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)) {
Expand All @@ -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 <lang@cosmocode.de>
*/
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');
}

Expand Down
46 changes: 28 additions & 18 deletions lib/exe/indexer.php
Expand Up @@ -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);
}
Expand Down

0 comments on commit 41c1411

Please sign in to comment.