<?php if (!defined('PmWiki')) exit();

/* serial.php  for PmWiki 2.2.0 +
	Copyright Hans Bracker 2007
	
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published
   by the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

	A number of markup expression definitions for creating
	serial number page names, to produce auto-increasing page names
	with a form processor.
*/
$RecipeInfo['SerialPageNames']['Version'] = '2008-05-25';

SDV($SerialStart,'0001');

# add markup expression {(serialname Group Name)}
# creates auto increasing pagename of format 
# Group.Name0001 (appended 4-digit number defined by $SerialStart
# incrementing number of Group.Name1234 pages 
$MarkupExpr['serialname'] = 'MakeSerialPageName($pagename, $args[0], $args[1])';
function MakeSerialPageName($pagename, $grp="", $name="" ) {
   global $SerialStart;
   $len = strlen($SerialStart);
   if (!$grp) $grp = PageVar($pagename, '$Group');
   $n = $SerialStart-1;
   foreach(ListPages("/^$grp.$name\\d/") as $p) { 
      preg_match("/.*[^\\d](\\d+)$/",$p, $m);
		$mlen = strlen($m[1]);
		if($mlen>$len) $len = $mlen;
		$n = max($n,$m[1]);
   }
   $target= $grp.".".$name.sprintf("%0{$len}d",$n+1);
   return $target;
}

# add markup expression {(serial Group Name)}
# creates auto increasing number only  defined by $SerialStart
# incrementing number of Group.Name1234 pages 
$MarkupExpr['serial'] = 'MakeSerialNumber($pagename, $args[0], $args[1])';
function MakeSerialNumber($pagename, $grp="", $name="" ) {
   global $SerialStart;
   $len = strlen($SerialStart);
   if (!$grp) $grp = PageVar($pagename, '$Group');
   $n = $SerialStart-1;
   foreach(ListPages("/^$grp.$name\\d/") as $p) { 
      preg_match("/.*[^\\d](\\d+)$/",$p, $m);
		$mlen = strlen($m[1]);
		if($mlen>$len) $len = $mlen;
		$n = max($n,$m[1]);
   }
   return sprintf("%0{$len}d",$n+1);
}

# add markup expression {(newticket Group)}
# creates auto increasing pagename of format  
# Group.20061220001 (date and 3 digit number)
$MarkupExpr['newticket'] = 'MakeNewTicket($pagename, $args[0])';
function MakeNewTicket($pagename, $grp) {
   if (!$grp) $grp = PageVar($pagename, '$Group');
   foreach(ListPages("/^$grp.\\d{11}/") as $p) 
       $issue = max(@$issue,substr($p,-11)); 
   $issueday = substr($issue,0,8);
   $today = strftime("%Y%m%d", time());
   if($issueday==$today) {
      $nextissue = $issue+1;
      $target = $grp.".".$nextissue;
   }
   else $target = $grp.".".$today."001";
   return $target;    
}