--- dokuwiki-2013-05-10/inc/common.php~ 2013-05-28 22:43:32.565530521 +0300 +++ dokuwiki-2013-05-10/inc/common.php 2013-05-28 22:47:27.455072897 +0300 @@ -902,6 +902,34 @@ return $date; } + +/** + * Returns notify address for page $id + * + * @param string $id The changed page + * @param mixed $notify The address (string) or rules where to notify + * + * @author Elan Ruusamäe + */ +function notifyNS($id, $notify) { + if (empty($notify)) { + return ''; + } + + if (is_string($notify)) { + return $notify; + } + + // process $notify for pages + foreach ($notify as $rule => $address) { + if (preg_match('/'.$rule.'/ui',':'.$id)) { + return $address; + } + } + + return ''; +} + /** * Sends a notify mail on page change * @@ -1162,10 +1162,10 @@ // decide if there is something to do, eg. whom to mail if($who == 'admin') { - if(empty($conf['notify'])) return false; //notify enabled? if($conf['useacl'] && $_SERVER['REMOTE_USER'] && $minor) return; //skip minors $tpl = 'mailtext'; - $to = $conf['notify']; + $to = notifyNS($id, $conf['notify']); + if(empty($to)) return; //notify enabled? } elseif($who == 'subscribers') { if(!actionOK('subscribe')) return false; //subscribers enabled? if($conf['useacl'] && $_SERVER['REMOTE_USER'] && $minor) return false; //skip minors --- dokuwiki-2014-05-06/inc/media.php~ 2014-05-06 15:09:52.000000000 +0300 +++ dokuwiki-2014-05-06/inc/media.php 2014-05-08 11:24:16.977561680 +0300 @@ -573,10 +573,11 @@ */ function media_notify($id,$file,$mime,$old_rev=false){ global $conf; - if(empty($conf['notify'])) return false; //notify enabled? + $to = notifyNS($id, $conf['notify']); + if(empty($to)) return false; //notify enabled? $subscription = new Subscription(); - return $subscription->send_media_diff($conf['notify'], 'uploadmail', $id, $old_rev); + return $subscription->send_media_diff($to, 'uploadmail', $id, $old_rev); } /** --- dokuwiki-2013-05-10/inc/subscription.php~ 2013-05-10 15:45:54.000000000 +0300 +++ dokuwiki-2013-05-10/inc/subscription.php 2013-05-28 22:50:30.872112776 +0300 @@ -484,7 +484,8 @@ */ public function send_register($login, $fullname, $email) { global $conf; - if(empty($conf['registernotify'])) return false; + $to = notifyNS($id, $conf['registernotify']); + if(empty($to)) return false; $trep = array( 'NEWUSER' => $login, @@ -493,7 +494,7 @@ ); return $this->send( - $conf['registernotify'], + $to, 'new_user', $login, 'registermail', @@ -672,7 +672,8 @@ $level = auth_aclcheck($id, $user, $userinfo['grps']); if($level >= AUTH_READ) { - if(strcasecmp($userinfo['mail'], $conf['notify']) != 0) { //skip user who get notified elsewhere + $to = notifyNS($id, $conf['notify']); + if(strcasecmp($userinfo['mail'], $to) != 0) { //skip user who get notified elsewhere $result[$user] = $userinfo['mail']; } }