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

/*
 * HgUrls.php for PmWiki 2
 *
 * HgUrls is a subset of the Hg hierarchical groups recipe, and should NOT be
 * used in conjunction with Hg, since this functionality is already included!
 * It translates pseudo-hierarchical URLs between hyphens "-" and slashes "/".
 * So, Group-SubGroup-SubSubGroup.Name resolves successfully as
 * Group/SubGroup/SubSubGroup/Name and vice-versa.  Idea for this recipe
 * originates from an email list discussion between ...
 * Dan Vis, http://www.pmwiki.org/wiki/Cookbook/Hg
 * Kathryn Andersen, http://www.pmwiki.org/wiki/Cookbook/Cluster
 * Patrick R. Michaud, creator of the PmWiki universe
 *
 * Based on Hg by Dan Vis  <editor àt fast döt st>, Copyright 2007.
 * Modified by: C.R. Andrews, Jr.
 */

$RecipeInfo['Hg_Urls']['Version'] = '2008-05-04';

####### Set up various variables
SDV($hgseparator, '-');
SDV($hglinkprefix, '');
SDV($EnableHgCleanUrls, false);

$pagename = hgResolvePageName($pagename);
$FmtPV['$PageUrl'] = 'PUE("$ScriptUrl?n=" . hgUrl($group, $name))';
$LinkPageCreateFmt = hgCreateFmt("{\$PageUrl}");
$PagePathFmt = array('{$Group}.$1', '$1.{$DefaultName}', '$1.$1');

####### Returns fixed page name 1) with prefixing, 2) if not cleanurls, and 3) if cleanurls
function hgResolvePageName($pagename) {
	global $hglinkprefix, $hgprefixcode, $hgseparator, $hgname, $hggroup;
	if (substr($pagename, 0, strlen($hgprefixcode)) == $hgprefixcode) $pagename = substr($pagename, strlen($hgprefixcode));
	$r = '/';
	if (! strpos($pagename, $r)) {
		$pagename = ResolvePageName($pagename);
		$hggroup = FmtPageName('$Group', $pagename);
		$hgname = FmtPageName('$Name', $pagename);
		return $pagename;
		}
	$hgpagename = explode($r, $pagename);
	if ($hgpagename[count($hgpagename) - 1 ] == '') array_pop($hgpagename);
	$hgname = $hgpagename[count($hgpagename) - 1];
	array_pop($hgpagename);
	$hggroup = implode($hgseparator, $hgpagename);
	$pagename = ResolvePageName("$hggroup.$hgname");
	return "$pagename";
	}

####### Fixes URL's to allow for prefixing and cleanurls, otherwise no effect
function hgURL($group, $name) {
	global $ScriptUrl, $hglinkprefix, $hgprefixcode, $EnableHgCleanUrls;
	$r = '/';
	if (substr($group, 0, strlen($hgprefixcode)) == $hgprefixcode) {
		$group = substr($group, strlen($hgprefixcode));
		if (substr($name, 0, strlen($hgprefixcode)) == $hgprefixcode) $name = substr($name, strlen($hgprefixcode));
		}
	elseif (($hglinkprefix != '') && (substr($group, 0, strlen($hglinkprefix)) != $hglinkprefix)) $group = $hglinkprefix . "-" . $group;
	if ($EnableHgCleanUrls == true) $group = str_replace("-", $r, $group);
	return "$group$r$name";
	}

####### Strips off prefix if linkprefixing is used from link display
function hgCreateFmt($x) {
	global $hglinkprefix;
	$x = substr($x, strlen($hglinkprefix));
	return "<a class='wikilink' rel='nofollow' href=$x>\$LinkText</a>";
	}