summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Lang <lang@cosmocode.de>2010-08-10 12:26:19 +0200
committerAdrian Lang <lang@cosmocode.de>2010-08-10 14:13:27 +0200
commit41c141178e9733bbf38f8e937d3dea63058af0dc (patch)
tree3816797f7ecce04d6e85231110bc2ac7268dc373
parent45c5ecdccdd251af3e9202f944fa8bf103c5db0f (diff)
downloadrpg-41c141178e9733bbf38f8e937d3dea63058af0dc.tar.gz
rpg-41c141178e9733bbf38f8e937d3dea63058af0dc.tar.bz2
Ignore small & own changes in digest & list mails
-rw-r--r--inc/lang/de/lang.php4
-rw-r--r--inc/subscription.php21
-rw-r--r--lib/exe/indexer.php46
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 <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)) {
@@ -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');
}
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);
}