a:8:{s:4:"name";s:15:"sgb_url_handler";s:6:"author";s:3:"sgb";s:10:"author_uri";s:23:"http://mighthitgold.net";s:7:"version";s:5:"0.1.1";s:11:"description";s:43:"support all url variations at the same time";s:4:"help";s:1081:"

	<h3>sgb_url_handler</h3>
	<p>TxP 1.0 RC3 introduced a number of (long-awaited) URL options, however there were no options to preserver backwards compatibility with existing links (e.g. off-site links, forums, search engines, etc.). This plugin evolved to filled that gap, allowing authors the option of selecting, newer, cleaner schemes while still supporting existing links. This plugin also introduces the option to add additional link formats. Although manual edits will need to be made to several files for complete support.</p>

	<h3>Configuration</h3>
	<p>There are no configuration options for this plugin. Activate and you're ready to go.</p>

	<p>This plugin runs on top of the existing TxP URL parsing code. It parses URLs and adds the values to the super globals <code>$_GET</code>, <code>$_POST</code> and <code>$_REQUEST</code>. Typically TxP will see these requests values and runs as if it were in "messy" mode. If for some reason the plugin is unable to parse the URL it is designed to no alter anything and allow TxP to handle the URL normally.</p>
	
";s:4:"code";s:3469:"
function sgb_url_set($key = null, $value = null) // void
{
	$_GET[$key]     = $value;
	$_POST[$key]    = $value;
	$_REQUEST[$key] = $value;
}

function sgb_url_doTrigger($trigger = 'none', $parts = array()) // void
{
	switch ($trigger)
	{
		case 'atom':
			include txpath.'/publish/atom.php'; exit(atom());

		case 'rss':
			include txpath.'/publish/rss.php'; exit(rss());
		
		case 'section':
			sgb_url_set('s', ((ckEx('section', $parts[1])) ? $parts[1] : 'default'));
		break;
		
		case 'category':
			sgb_url_set('c', ((ckEx('category', $parts[1])) ? $parts[1] : ''));
		break;
		
		case 'author': // right now this can't handle authors so don't do anything and let the regular stuff handle it
		break;
		
		case 'p':
			sgb_url_set('p', ((is_numeric($parts[1])) ? $parts[1] : ''));
		break;
	}
}

function sgb_url_checkPath() // void
{
	global $timeoffset;

	if ($_SERVER['PATH_INFO']) {
		$request = trim($_SERVER['PATH_INFO'], '/');
	} else {
		$raw_uri     = trim(array_shift(explode('?', $_SERVER['REQUEST_URI'])), '/');
		$script_path = trim(dirname($_SERVER['SCRIPT_NAME']), '/');
		$request     = trim(substr($raw_uri, strlen($script_path)), '/');
	}

	$parts = explode('/', $request);
	$partsCount = count($parts);

	$triggers = array(
		strtolower(gTxt('section'))  => 'section', 
		strtolower(gTxt('category')) => 'category', 
		strtolower(gTxt('author'))   => 'author', 
		'atom' => 'atom', 
		'rss' => 'rss'
	);

	if (!empty($parts[0])) {
		/*
		** Run against know triggers
		*/
		foreach ($triggers as $trigger) {
			if ($parts[0] == $trigger) {
				sgb_url_doTrigger($trigger, $parts);
				return;
			}
		}

		/*
		** Nothing "tripped" our trigger, so we'll try against one of the URL 
		** cases
		*/

		// Could be /Title or /Section
		if ($partsCount < 2) {
			$rs = lookupByTitle($parts[0]);

			// Treat as /Section
			if (empty($rs['ID'])) {
				$s  = (ckEx('section', $parts[0])) ? $parts[0] : 'default';
				$id = null;

			// Treat as /Title
			} else {
				$id = (!empty($rs['ID'])) ? $rs['ID'] : '';
				$s  = (!empty($rs['Section'])) ? $rs['Section'] : '';
			}
		
		// Could be /ID/Title, /Section/Title
		} else if ($partsCount < 3) {

			// Treat as /ID/Title
			if (is_numeric($parts[0])) {
				$rs = lookupByID($parts[0]);
				$id = (!empty($rs['ID'])) ? $rs['ID'] : '';
				$s  = (!empty($rs['Section'])) ? $rs['Section'] : '';
			
			// Treat as /Section/Title
			} else {
				$rs = lookupByTitle($parts[1]);
				$s  = (ckEx('section',$parts[0])) ? $parts[0] : $rs['Section'];
				$id = (!empty($rs['ID'])) ? $rs['ID'] : '';
			}
		
		// Could be /Section/ID/Title (Classic URL)
		} else if ($partsCount < 4) {
			$s  = (ckEx('section', $parts[0])) ? $parts[0] : 'default';
			$id = (ckExID($parts[1])) ? $parts[1] : '';
		
		// Could be /Year/Month/Day/Title
		} else if ($partsCount > 4) {
			$when = date("Y-m-d",strtotime("$parts[0]-$parts[1]-$parts[2]") + $timeoffset);
			$rs = lookupByDateTitle($when, $parts[3]);
			$id = (!empty($rs['ID'])) ? $rs['ID'] : '';
			$s  = (!empty($rs['Section'])) ? $rs['Section'] : '';
		}
	}

	$id = (empty($id)) ? null : $id;
	$s  = (empty($s)) ? 'default' : $s;

	if (empty($_GET['id']) && empty($_POST['id'])) {
		sgb_url_set('id', $id);
	}

	if (empty($_GET['s']) && empty($_POST['s'])) {
		sgb_url_set('s',  $s);
	}

	return;
}

sgb_url_checkPath();
";s:3:"md5";s:32:"37211a6deed80f8c3fb90aecccb506ff";}