"ReminderNext('$1', '$2', '$3', '$4')") ); SDV($RemindersLogs, array("\$SiteGroup.AllReminders")); $MarkupExpr['remtoday'] = 'Keep(str_replace("\'", "'", FmtReminder($args[0], "$args[0] today=$args[1] pastdays=0 futuredays=0 dayheaders=0 liststyle=0" ) ))'; function FmtReminder($pagename, $args, $content='') { global $Now, $InputValues, $ReminderPastDays, $ReminderFutureDays, $ReminderLocale,$ReminderDayMonth,$ReminderDateFormat, $ReminderIncludeSuffix, $EnableReminderEmptyDays, $SiteAllReminders, $QualifyPatterns; $opt = ParseArgs($args); $TodayNow = IsEnabled($opt['today'], strftime('%Y-%m-%d', $Now)); $TodayNow2 = IsEnabled($opt['today'], strftime('%Y%m%d', $Now)); if(! strpos($TodayNow, '-') ) $TodayNow = strftime('%Y-%m-%d', strtotime($TodayNow) ); $dayheaders = IsEnabled($opt['dayheaders'], 1); $liststyle = IsEnabled($opt['liststyle'], 1); $expired = IsEnabled($opt['expired'], 1); $pastdays = IsEnabled($opt['pastdays'], $ReminderPastDays); $futuredays = IsEnabled($opt['futuredays'], $ReminderFutureDays); $locale = IsEnabled($opt['locale'], $ReminderLocale); $emptydays = (@$opt['emptydays']>'')? $opt['emptydays'] : $EnableReminderEmptyDays; $df = explode('/', $ReminderDayMonth); $onemonth = intval(IsEnabled($opt['onemonth'], @$_REQUEST['onemonth'])); if(@$opt[''][0]>'')$content .= "\n". IncludeText($pagename, $opt[''][0]); if($locale)setlocale(LC_TIME, $locale); $_DATES = array(); $lines = explode("\n", $content); $out = ""; if($ReminderIncludeSuffix) { $QP = array('/(REM)?$/m'=>'$1'.$ReminderIncludeSuffix) +$QualifyPatterns; $QualifyPatterns = $QP; } $restart=1; while($restart) { $restart=0; foreach($lines as $i=>$line) if(preg_match("/^#include (.*?)$/", $line, $m)) { array_splice($lines, count($lines), 0, explode("\n", IncludeText($pagename, PSS($m[1])))); $lines[$i]=''; $restart=1; } } if($ReminderIncludeSuffix) unset($QualifyPatterns['/(REM)?$/m']); foreach($lines as $line) { if($line{0}!='*') continue; list($when, $what) = explode(' ', preg_replace("/^\\* */", '', $line), 2); $time = 1500; if(preg_match('/\\b([012]?\\d)[h:]([0-5]\\d)?(\\s+[ap]m)?\\b/i', $what, $m) ) { $time = 60*intval($m[1])+intval($m[2]); if($time<720 && strpos(' '.strtolower($m[3]) , 'pm')) $time+=720; } if( preg_match('/^w(\\d+)$/i', $when, $m)) for($i=0; $i"$what [$when]", 'time'=>$time); elseif(preg_match('/^(-?\\d+)$/i', $when, $m)&&$m[1]<32) $_DATES["m".intval($m[1])][] = array('what'=>"$what [$when]", 'time'=>$time); elseif( preg_match('/^=(\\d{4}-(\\d\\d-\\d\\d))$/i', $when, $iso)) { if($iso[1]< $TodayNow ) { $_DATES['overdue'][] = "$what [$when]"; } else { $_DATES[ $iso[2] ][] = array('what'=>"$what [$when]", 'time'=>$time); } } elseif(preg_match('/^(\\d+)\\/(\\d+)(?:\\/(\\d+))?$/i', $when, $m) || preg_match('/^(\\d{4})-?(\\d\\d)-?(\\d\\d)?$/i', $when, $iso)) { if(@$iso[0]) { $x = array('m'=>intval($iso[2]), 'd'=>intval($iso[3])); $m = array(3=>$iso[1]); } else $x=array($df[0]=>intval($m[1]),$df[1]=>intval($m[2])); $st = strftime('%m-%d', strtotime("2000-{$x['m']}-{$x['d']}")); $st2 = sprintf("%02d-%02d", $x['m'], $x['d']); if($st!=$st2) $_DATES['unknown'][] = "$what [$when]"; else $_DATES[ $st ][] = array('y'=>$m[3],'what'=>"$what [$when]", 'time'=>$time); } elseif(preg_match('/^(\\d{1,2})\\/(\\d{1,2})\\.\\.(\\d{1,2})\\/(\\d{1,2})(?:\\/(\\d{4}))?$/i', $when, $m)) { $x=array($df[0]=>intval($m[1]),$df[1]=>intval($m[2])); $x2=array($df[0]=>intval($m[3]),$df[1]=>intval($m[4])); $y = @$m[5]? $m[5] : 2000; $T1 = strtotime("$y-{$x['m']}-{$x['d']}"); $T2 = strtotime("$y-{$x2['m']}-{$x2['d']}"); if($T1>$T2) { if(@$m[5] || $x2['m']>2) $T1 = strtotime( ($y-1) ."-{$x['m']}-{$x['d']}"); else $T2 = strtotime( ($y+1) ."-{$x2['m']}-{$x2['d']}"); } if( strftime('%m-%d', $T1)!=sprintf("%02d-%02d", $x['m'], $x['d']) || strftime('%m-%d', $T2)!=sprintf("%02d-%02d", $x2['m'], $x2['d'])) { $_DATES['unknown'][] = "$what [$when] " .strftime('%m-%d', $T1).'!='.sprintf("%02d-%02d", $x['m'], $x['d']) ." " .strftime('%m-%d', $T2).'!='.sprintf("%02d-%02d", $x2['m'], $x2['d']); continue; } if(@$m[5] && strftime('%Y-%m-%d', $T2)< $TodayNow) { $_DATES['overdue'][] = "$what [$when]"; continue; } $T0 = 0; for($i=0; $T0<$T2; $i++) { $T0 = strtotime("+$i days", $T1); $st = strftime('%m-%d', $T0); $_DATES[ "M$st" ][] = array('what'=>"$what [$when]", 'time'=>$time+1); } } else $_DATES['unknown'][] = "$what [$when]"; } if($expired && count($_DATES['overdue']) ) { $out.="\n* %list reminder% %item date overdue% $[Expired]\n"; foreach($_DATES['overdue'] as $v)$out.="** $v\n"; } if($onemonth && $onemonth<13) { $y = $onemonth0) { asort($out); $ret = implode('', array_keys($out)); } if(!$liststyle) $ret = preg_replace("/%(list|item).*?%/", '', $ret); if($ret>'' || $emptydays) return ($dayheaders? "* %list reminder% %item date $class w$w%" . strftime($ReminderDateFormat, $T). "\n":'') .$ret; } array_unshift($EditFunctions, "ReminderLogAll"); function ReminderLogAll($pagename,&$page,&$new) { global $EnablePost, $RecentChangesFmt, $RemindersLogs, $ReminderSPat, $ReminderLogKeyword; if (!$EnablePost) return; foreach((array)@$ReminderSPat as $pat=>$rep) $new['text'] = preg_replace($pat, $rep, $new['text']); if (!@$RemindersLogs[0]) return; $pslash = str_replace('.', '/', $pagename); $pslashE = preg_quote("[[$pslash]]"); $oldmatch = preg_match("/^:?{$ReminderLogKeyword}:.*$/m", $page['text']); $newmatch = preg_match_all("/^:?{$ReminderLogKeyword}:(.*)$/m", $new['text'], $m, PREG_PATTERN_ORDER); if( $oldmatch || $newmatch ) { foreach((array)$RemindersLogs as $p) { $rcpage = ReadPage($p); if($oldmatch) $rcpage['text'] = preg_replace("!^\\*.* {$pslashE}\n!m", '', @$rcpage['text']); if($newmatch) foreach($m[1] as $v) $rcpage['text'] .= "* ". trim($v). " . . [[$pslash]]\n"; WritePage($p, $rcpage); } } } function ReminderNext($prefix, $a, $b=0, $y=0) { global $ReminderDayMonth, $Now; if($a{0}=='w') { $days = explode(' ', 'Sun Mon Tues Wednes Thurs Fri Satur'); $day = $days[ $a{1}%7 ]; return "$prefix =".strftime("%Y-%m-%d", strtotime("{$day}day") )." "; } $df = explode('/', $ReminderDayMonth); $x[$df[0]]=$a; $x[$df[1]]=$b; if($a && $b && $y) return "$prefix =".strftime("%Y-%m-%d", strtotime("$y-{$x['m']}-{$x['d']}") )." "; if($b==0) { $x['d'] = $a; $x['m'] = 0; } $delta = "years"; if($x['m']==0){$delta = "months"; $x['m'] = date('n');} if($y==0)$y =date('Y'); $Today = strtotime( strftime("%Y-%m-%d")); $Then = strtotime("$y-{$x['m']}-{$x['d']}"); for($i=0; $i<13; $i++) { $Current = strtotime( "+$i $delta", $Then ); if($Today<=$Current) return "$prefix =".strftime("%Y-%m-%d", $Current)." "; } }