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

/* -[Feral:081/07@02:11]---------------------------------------------------
 *
 * To use:
 * In your config.php, place:
 * // (:pagelist group={$Group} list=normal fmt=bydays:)
 * include_once("$FarmD/cookbook/fplbydays.php");
 * Usage:
 * (:pagelist group={$Group} list=normal fmt=bydays:)
 *
 * With page names like:
 * * 200703220054
 * * 200703211934
 * * 200703211200
 * * AnExamplePage
 *
 * Page names are in the format YYYYMMDDHHMM, as produced by:
 * $FmtPV['$blogpagename'] = 'strftime("%Y%m%d%H%M", time() )';
 *
 * Results:
 * 2007-03-22 * 2007-03-21 * A
 * ----
 * ^ Thursday, March 22, 2007 (2007-03-22)
 *     12:54:AM, $Description
 * ^ Wednesday, March 21, 2007 (2007-03-21)
 *     7:34:PM, $Description
 *     12:00:PM, $Description
 * ^ A
 *     An Example Page
 *
 * --------------------------------------------------------------------- */


//Based on: extdictindex.php, original notice below:
/*  Copyright 2004 Patrick R. Michaud (pmichaud@pobox.com).

    This file adds a "dictindex" (dictionary index) format for
    the (:pagelist:) and (:searchresults:) directives.  To see results
    in dictionary format, simply add fmt=dictindex to the directive, as in

        (:pagelist group=Main fmt=dictindex:)

    By default the items are display as a simple definition list, but
    this can be controlled by $FPLDictIndex...Fmt variables:

        $FPLDictIndexStartFmt - start string
        $FPLDictIndexEndFmt   - end string
        $FPLDictIndexLFmt     - string to output for each new letter
        $FPLDictIndexIFmt     - string to output for each item in list

    To enable this module, simply add the following to config.php:

        include_once('cookbook/dictindex.php');
*/



$RecipeInfo['FplByDays']['Version'] = '2007-03-23';

/* -[Feral:082/07@22:24]---------------------------------------------------
 * History:
 * 2007-03-23 -- Bug fix; If no files are present, return "No files found.";
 * 2007-03-22 -- Initial.
 * --------------------------------------------------------------------- */





$FPLFunctions['bydays'] = 'FPLByDays';


// Link format; we do not want underlines;
SDV($HTMLStylesFmt['fplbydays'], "
a.bydaysdate,
a.bydaysnorm
{
	text-decoration:none;
}

");
//a:link {}
//a:visited {}
//a:hover {}
//a:active {}


SDV($FPLByDaysStartFmt,"<a name='searchheader'></a><dl class='fplByDays'><span style='font-size:83%'>\$IndexLinks</span><hr><p class='vspace'></p>");
SDV($FPLByDaysEndFmt,'</dl>');
SDV($FPLByDaysHeaderLink,'<a href="#$IndexLetter">$IndexLetter</a>');


SDV($FPLByDaysLDateFmt,"<dt><a href='#searchheader'>&#9650;</a> <a name='\$IndexLetter'></a><span style=color:springgreen;>\$DisplayText</span></dt>");
//SDV($FPLByDaysIDateFmt,"<dd><a class=bydaysdate href='\$PageUrl'>\$Name</a></dd>");
//SDV($FPLByDaysIDateFmt,"<dd><a class=bydaysdate href='\$PageUrl'>\$Title</a></dd>");
//SDV($FPLByDaysIDateFmt,"<dd><a class=bydaysdate href='\$PageUrl'>\$Description</a></dd>");
SDV($FPLByDaysIDateFmt,"<dd><a class=bydaysdate href='\$PageUrl'>\$TimeFromName, \$Description</a></dd>");

SDV($FPLByDaysLNormFmt,"<dt><a href='#searchheader'>&#9650;</a> <a name='\$IndexLetter'></a><span style='color:lime; font-weight:bold;'>\$IndexLetter</span></dt>");
SDV($FPLByDaysINormFmt,"<dd><a class=bydaysnorm href='\$PageUrl'>\$Namespaced</a></dd>");


function FPLByDays($pagename,&$matches,$opt)
{
	global $FPLByDaysStartFmt;
	global $FPLByDaysEndFmt;
	global $FPLByDaysHeaderLink;
	global $FPLByDaysLDateFmt;
	global $FPLByDaysIDateFmt;
	global $FPLByDaysLNormFmt;
	global $FPLByDaysINormFmt;
	global $FmtV;

	$matches = MakePageList($pagename, $opt);

//	var_dump($matches[1]);
//	die;


	$DatePages = array(); // for: 200703171520
	$NormPages = array(); // for: everything not in $DatePages
	foreach($matches as $item)
	{
		$workname = FmtPageName('$Name',$item['pagename']);
		if	(	preg_match("/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/", $workname, $m) )
		{
//			// 2007 - 03 - 17 - 15 - 20
//			// Array (
//			// [0] => 200703171520
//			// [1] => 2007
//			// [2] => 03
//			// [3] => 17
//			// [4] => 15
//			// [5] => 20
//			// )

			$timestamp = mktime($m[4], $m[5], 0, $m[2], $m[3], $m[1]);
//			$text = strftime("%A, %B %#d, %Y at %#I:%M:%p", $timestamp);

//			$index = "{$m[1]}-{$m[2]}-{$m[3]}"
			$index = $m[1].'-'.$m[2].'-'.$m[3];
			$text  = strftime("%A, %B %#d, %Y", $timestamp);
			$text .= " <span style='font-size:xx-small;'><sup>($index)</sup></span>";

			$DatePages[] = array (
				'index' => $index,
				'display' => $text,
				'pagename' => $item['pagename'],

				// [Feral:082/07@23:55] name is in essence the ctime, except for back dated things...
				// [Feral:083/07@02:21] Or entries entered in the wrong order (I.e. back dated)
//				'sortkey' => $item['ctime'],
				'sortkey' => $item['name'],

				'timefromname' => strftime("%#I:%M:%p", $timestamp)
			);

		}
		else
		{
			$NormPages[] = array (
				'index' => substr($workname,0,1), // first letter of our display name.
				'display' => $workname,
				'pagename' => $item['pagename'],
			);
		}
	}

	// [Feral:082/07@22:18] Empty guard
	if	(	(count($DatePages) + count($NormPages) ) == 0)
	{
		return "No files found.";
	}



	$cmp = create_function('$x,$y', "return (\$x['sortkey'] < \$y['sortkey']);"); // newest first
//	$cmp = create_function('$x,$y', "return (\$x['ctime'] > \$y['ctime']);"); // oldest first
	usort($DatePages,$cmp);


	$cmp = create_function('$x,$y', "return strcasecmp(\$x['display'],\$y['display']);");
	usort($NormPages,$cmp);




//			$DatePages[] = array (
//				'index' => $index,
//				'display' => $text,
//				'pagename' => $item['pagename'],
//				'sortkey' => $item['ctime']
//			);
	$lletter = null;
	foreach($DatePages as $item)
	{
		$FmtV['$IndexLetter'] = $item['index'];
		$FmtV['$DisplayText'] = $item['display'];
		$FmtV['$TimeFromName'] = $item['timefromname'];
		if ($item['index'] != @$lletter)
		{
			$out[] = FmtPageName($FPLByDaysLDateFmt,$item['pagename']);
			$headerlinks[] = FmtPageName($FPLByDaysHeaderLink,$item['pagename']);
			$lletter = $item['index'];
		}

		$out[] = FmtPageName($FPLByDaysIDateFmt,$item['pagename']);
	}

//			$NormPages[] = array (
//				'index' => substr($workname,0,1), // first letter of our display name.
//				'display' => $workname,
//				'pagename' => $item['pagename'],
//			);
	$lletter = null;
	foreach($NormPages as $item)
	{
		$FmtV['$IndexLetter'] = $item['index'];
		$FmtV['$DisplayText'] = $item['display'];
		if ($item['index'] != @$lletter)
		{
			$out[] = FmtPageName($FPLByDaysLNormFmt,$item['pagename']);
			$headerlinks[] = FmtPageName($FPLByDaysHeaderLink,$item['pagename']);
			$lletter = $item['index'];
		}

		$out[] = FmtPageName($FPLByDaysINormFmt,$item['pagename']);
	}


	$FmtV['$IndexLinks']=implode(' &#9679; ',$headerlinks);

	return FmtPageName($FPLByDaysStartFmt,$pagename).implode('',$out).FmtPageName($FPLByDaysEndFmt,$pagename);
}