====== Clean notification scheme ======
To make the notification system lighter (read: sending less notifications) I modified the notifications to be sent according to the following scheme:
- namespace subscribers get notified for new pages in the current namespace
- page subscribers get notified for major page modifications (they are likely subscribed to namespace as well)
- no one is notified for minor modifications
===== inc/common.php =====
2 small changes need to be brought to //inc/common.php//
1. find
subscriber_addresslist($id,false);
and change it to
//subscriber_addresslist($id,false); //replaced to clean notification scheme, more info at http://www.dokuwiki.org/tips:cleannotificationscheme
restricted_subscriber_addresslist($id,false,$rev);
2. add the following function (heavy copy-paste of existing code by Steven Danz), for instance before the //function subscriber_addresslist($id)// declaration.
/**
* Return a string with the email addresses of all the
* users subscribed to a page
*
* if $rev is set, the list of page subscribers is returned (for page update notification)
* if $rev is not set, the list of namespace subsribers is returned (for new page notification)
*
* @author Berteh
* @info http://www.dokuwiki.org/tips:cleannotificationscheme
*/
function restricted_subscriber_addresslist($id,$self=true,$rev=''){
global $conf;
global $auth;
if (!$conf['subscribers']) return '';
$users = array();
$emails = array();
$mlist = array();
if($rev) { //only direct page subscribers
// load the page mlist file content
$file=metaFN($id,'.mlist');
if (@file_exists($file)) {
$mlist = file($file);
foreach ($mlist as $who) {
$who = rtrim($who);
if(!$self && $who == $_SERVER['REMOTE_USER']) continue;
$users[$who] = true;
}
}
}
else { //rev not set - only namespace subscribers
// load also the namespace mlist file content
$ns = getNS($id);
while ($ns) {
$nsfile = metaFN($ns,'/.mlist');
if (@file_exists($nsfile)) {
$mlist = file($nsfile);
foreach ($mlist as $who) {
$who = rtrim($who);
if(!$self && $who == $_SERVER['REMOTE_USER']) continue;
$users[$who] = true;
}
}
$ns = getNS($ns);
}
// root namespace
$nsfile = metaFN('','.mlist');
if (@file_exists($nsfile)) {
$mlist = file($nsfile);
foreach ($mlist as $who) {
$who = rtrim($who);
if(!$self && $who == $_SERVER['REMOTE_USER']) continue;
$users[$who] = true;
}
}
}
if(!empty($users)) {
foreach (array_keys($users) as $who) {
$info = $auth->getUserData($who);
if($info === false) continue;
$level = auth_aclcheck($id,$who,$info['grps']);
if ($level >= AUTH_READ) {
if (strcasecmp($info['mail'],$conf['notify']) != 0) {
$emails[] = $info['mail'];
}
}
}
}
return implode(',',$emails);
}
This hack has been tested on dokuwiki-2009-02-14, and nicely combines with the [[betteremailnotifications]] tip.
An [[http://www.dokuwiki.org/tips:cleannotificationscheme?rev=1225368669|older version]] was working on dokuwiki-2008-05-05.
===== Comments - feedback =====
Please give comments / feedback!
> Any idea on how to implement this in Ponder Stibbons? I believe the changes to how subscriptions work has made this irrelevant :-(
> Feel free to correct me if I'm wrong, I'd **love** to get this working!
> --- [[user>absolutejam|absolutejam]] //2014-06-11 23:20//