<?php
/**
* @version $Id: mossef.php 4068 2006-06-20 15:31:09Z stingrey $
* @package Joomla
* @copyright Copyright (C) 2005 Open Source Matters. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/

// no direct access
defined( '_VALID_MOS' ) or die( 'Restricted access' );

$_MAMBOTS->registerFunction( 'onPrepareContent', 'botMosSef' );

/**
* Converting internal relative links to SEF URLs
*
* <b>Usage:</b>
* <code><a href="...relative link..."></code>
*/
function botMosSef( $published, &$row, &$params, $page=0 ) {
	global $mosConfig_sef;
	
	// check whether mambot has been unpublished
	if ( !$published ) {
		return true;
	}
	
	// check whether SEF is off
	if ( !$mosConfig_sef ) {
		return true;
	}
	
	// simple performance check to determine whether bot should process further
	if ( strpos( $row->text, 'href="' ) === false ) {
		return true;
	}
	
	// define the regular expression for the bot
	$regex = "#href=\"(.*?)\"#s";

	// perform the replacement
	$row->text = preg_replace_callback( $regex, 'botMosSef_replacer', $row->text );

	return true;
}

/**
* Replaces the matched tags
* @param array An array of matches (see preg_match_all)
* @return string
*/
function botMosSef_replacer( &$matches ) {
	// original text that might be replaced
	$original = 'href="'. $matches[1] .'"';

	// array list of non http/https	URL schemes
	$url_schemes = explode( ', ', _URL_SCHEMES );
	
	foreach ( $url_schemes as $url ) {
		// disable bot from being applied to specific URL Scheme tag
		if ( strpos( $matches[1], $url ) !== false ) {
			return $original;
		}
	}

	if ( strpos( $matches[1], 'index.php?option' ) !== false  ) {
	// links containing 'index.php?option
		// convert url to SEF link
		$link 		= sefRelToAbs( $matches[1] );
		// reconstruct html output
		$replace 	= 'href="'. $link .'"';
		
		return $replace;
	} else if ( strpos( $matches[1], '#' ) === 0 ) {
	// special handling for anchor only links
		$url = $_SERVER['REQUEST_URI'];
		$url = explode( '?option', $url );
		
		if (is_array($url) && isset($url[1])) {
			$link = 'index.php?option'. $url[1] . $matches[1];
		} else {
			$link = $matches[1];
		}		
		// convert url to SEF link
		$link 		= sefRelToAbs( $link );
		// reconstruct html output
		$replace 	= 'href="'. $link .'"';
		
		return $replace;
	} else {
		return $original;
	}
}
?>