');
SDV($FoxRecipient, XL('Mail Recipient'));
SDV($FoxNotifyHeaders, '');
SDV($FoxNotifyParameters, '');
SDV($FoxNotifyBodyHeadingFmt, "Recent $WikiTitle posts: \n");
SDV($FoxNotifyBodyFmt,
"\$FoxNotifyBodyHeadingFmt\n"
."\$FoxNotifyItems\n");
SDV($FoxNotifyTimeFmt, $TimeFmt);
SDV($FoxNotifyTemplatePageFmt, "$FoxNotifyListsGroup.FoxNotifyTemplates");
SDV($FoxNotifyItemFmt,
"* $ScriptUrl/{\$FullName} . . . \$PostTime by {\$LastModifiedBy} \n");
if (@$EnableFoxNotifyHTMLEmail)
$FoxNotifyHeaders = 'MIME-Version: 1.0' . "\r\n"
. 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
if (@$FoxNotifyFrom)
$FoxNotifyHeaders = "From: $FoxNotifyFrom\r\n$FoxNotifyHeaders";
$EditFunctions[] = 'FoxPostNotify';
function FoxPostNotify($pagename) {
global $IsPagePosted;
$req = FoxRequestArgs($_POST);
if ($IsPagePosted) register_shutdown_function('FoxNotifyUpdate', $pagename, getcwd(), $req, '');
}
## check if we need to do notifications
if ($action != 'edit' && $action!='foxpost' && $action!='foxdelete' && $action!='comment')
FoxNotifyActionCheck($pagename);
function FoxNotifyActionCheck($pagename) {
global $FoxNotifyFile, $Now, $LastModTime;
$nfp = @fopen($FoxNotifyFile, 'r');
if (!$nfp) return;
$nextevent = fgets($nfp);
fclose($nfp);
if ($Now < $nextevent && $LastModTime < filemtime($FoxNotifyFile)) return;
register_shutdown_function('FoxNotifyUpdate', $pagename, getcwd(), '', '');
}
## handle mailing of notifications
function FoxNotifyUpdate($pagename, $dir, $fx, $targ) {
global $FoxDebug, $FoxNotifyList, $FoxNotifyLists, $FoxGeneralNotifyList, $FoxNotifyFile, $IsPagePosted,
$FmtV, $FoxNotifyTimeFmt, $FoxNotifyItemFmt, $FoxNotifyTemplatePageFmt, $FoxNotifyListsGroup,
$FoxNotifySquelch, $FoxNotifyDelay, $Now, $SearchPatterns, $WikiTitle, $FoxRecipient,
$FoxNotifySubjectFmt, $FoxNotifyBodyFmt, $FoxNotifyBodyHeadingFmt, $FoxNotifyHeaders,
$FoxNotifyParameters, $EnableFoxNotifyHTMLEmail, $WikiTitle;
if($FoxDebug>4) echo "FOXNOTIFY (mail)>
";
$abort = ignore_user_abort(true);
if ($dir) { flush(); chdir($dir); }
$GLOBALS['EnableRedirect'] = 0;
## Read in the current notify configuration, merge notify lines from all list pages
$fnlines = (array)@$FoxNotifyList;
$FoxNotifyLists[] = $FoxGeneralNotifyList;
foreach($FoxNotifyLists as $fnl) {
$pn = FmtPageName($fnl, $pagename);
$npage = ReadPage($pn, READPAGE_CURRENT);
preg_match_all('/^[\s*:#->]*(notify[:=].*)/m', $npage['text'], $nline);
$nline = $nline[1];
$fnlines = array_merge($fnlines, $nline);
if ($fnlines=="") return;
}
## make sure other processes are locked out
Lock(2);
## let's load the current .notifylist table
$nfile = FmtPageName($FoxNotifyFile, $pagename);
$nfp = @fopen($nfile, 'r');
if ($nfp) {
## get our current squelch and delay timestamps
clearstatcache();
$sz = filesize($nfile);
list($nextevent, $firstpost) = explode(' ', rtrim(fgets($nfp, $sz)));
## restore our notify array
$notify = unserialize(fgets($nfp, $sz));
fclose($nfp);
}
if (!is_array($notify)) $notify = array();
## get newly posted page information
if ($IsPagePosted) {
$page = ReadPage($pagename, READPAGE_CURRENT);
$FmtV['$PostTime'] = strftime($FoxNotifyTimeFmt, $Now);
if ($firstpost < 1) $firstpost = $Now;
// retrieve formats from template
$tpname = FmtPageName($FoxNotifyTemplatePageFmt, $pagename);
if(PageExists($tpname)) {
$tpage = ReadPage($tpname, READPAGE_CURRENT);
$tsubject = trim(TextSection($tpage['text'], '#subject'),"\r\n");
$tbodyheading = trim(TextSection($tpage['text'], '#heading'),"\r\n");
}
if(!$tsubject) $tsubject = $FoxNotifySubjectFmt;
$tsubject = FmtPageName($tsubject, $pagename);
$subject = FoxTemplateEngine($pagename, $tsubject, $fx, $targ,'', 'FoxNotify');
if($tbodyheading) $FoxNotifyBodyHeadingFmt = $tbodyheading;
}
foreach($fnlines as $n) {
$opt = ParseArgs($n);
$mailto = preg_split('/[\s,]+/', $opt['notify']);
if (isset($fx['foxsendto']) && in_array('foxsendto', $mailto)) {
$skey = array_search('foxsendto', $mailto);
$mailto[$skey] = $fx['foxsendto'];
}
if (!$mailto) continue;
if ($opt['recipient'])
foreach($mailto as $m) $toName[$m] = $opt['recipient'];
if ($opt['squelch'])
foreach($mailto as $m) $squelch[$m] = $opt['squelch'];
if (!$IsPagePosted) continue;
if ($opt['link']) {
$link = MakePageName($pagename, $opt['link']);
if (!preg_match("/(^|,)$link(,|$)/i", $page['targets'])) continue;
}
$pats = @(array)$SearchPatterns[$opt['list']];
if ($opt['group']) $pats[] = FixGlob($opt['group'], '$1$2.*');
if ($opt['name']) $pats[] = FixGlob($opt['name'], '$1*.$2');
if ($pats && !MatchPageNames($pagename, $pats)) continue;
if ($opt['trail']) {
$trail = ReadTrail($pagename, $opt['trail']);
for ($i=0; $i= count($trail)) continue;
}
//try to load template from template page
$tpl = @$opt['template'];
if (!$tpl) $tpl = @$opt['format'];
if (!$tpl) $tpl = '#default';
if($tpage) $titem = trim(TextSection($tpage['text'], $tpl),"\r\n");
// replace any {$$var} with values from input fields
global $EnablePostDirectives; $EnablePostDirectives = 1;
if(@$_GET['csum']) $_POST['csum'] = $_GET['csum'];
$titem = FoxTemplateEngine($pagename, $titem, $fx, $targ,'', 'FoxNotify');
if(!$titem) $titem = $FoxNotifyItemFmt;
$item = urlencode(FmtPageName($titem, $pagename));
foreach ($mailto as $m)
$notify[$m][] = $item;
}
$nnow = time();
if ($nnow < $firstpost + $FoxNotifyDelay)
$nextevent = $firstpost + $FoxNotifyDelay;
else {
$firstpost = 0;
$nextevent = $nnow + 86400;
$mailto = array_keys($notify);
$body = FmtPageName($FoxNotifyBodyFmt, $pagename);
$headers = FmtPageName($FoxNotifyHeaders, $pagename);
foreach ($mailto as $m) {
$msquelch = @$notify[$m]['lastmail'] +
((@$squelch[$m]) ? $squelch[$m] : $FoxNotifySquelch);
if ($nnow < $msquelch) {
if ($msquelch < $nextevent && count($notify[$m])>1)
$nextevent = $msquelch;
continue;
}
unset($notify[$m]['lastmail']);
if (!$notify[$m]) { unset($notify[$m]); continue; }
$item = urldecode(implode("\n", $notify[$m]));
$mbody = str_replace('$FoxNotifyItems', $item, $body);
if($toName[$m])
$mbody = str_replace($FoxRecipient, $toName[$m], $mbody);
if (@$EnableFoxNotifyHTMLEmail)
$mbody = MarkupToHTML($pagename, $mbody);
if ($FoxNotifyParameters)
mail($m, $subject, $mbody, $headers, $FoxNotifyParameters);
else
mail($m, $subject, $mbody, $headers);
$notify[$m] = array('lastmail' => $nnow);
}
}
## save the updated notify status
$nfp = @fopen($nfile, "w");
if($nfp) {
fputs($nfp, "$nextevent $firstpost\n");
fputs($nfp, serialize($notify) . "\n");
fclose($nfp);
}
Lock(0);
return true;
}
/// EOF