getName() != 'site') {
return true;
}
//Replace src links
$base = JURI::base(true).'/';
$buffer = JResponse::getBody();
// pull out contents of editor to prevent URL changes inside edit area
$editor =& JFactory::getEditor();
$regex = '#'.$editor->_tagForSEF['start'].'(.*)'.$editor->_tagForSEF['end'].'#Us';
preg_match_all($regex, $buffer, $editContents, PREG_PATTERN_ORDER);
// create an array to hold the placeholder text (in case there are more than one editor areas)
$placeholders = array();
for ($i = 0; $i < count($editContents[0]); $i++) {
$placeholders[] = $editor->_tagForSEF['start'].$i.$editor->_tagForSEF['end'];
}
// replace editor contents with placeholder text
$buffer = str_replace($editContents[0], $placeholders, $buffer);
// do the SEF substitutions
$regex = '#href="index.php\?([^"]*)#m';
$buffer = preg_replace_callback( $regex, array('plgSystemSEF', 'route'), $buffer );
$protocols = '[a-zA-Z0-9]+:'; //To check for all unknown protocals (a protocol must contain at least one alpahnumeric fillowed by :
$regex = '#(src|href)="(?!/|'.$protocols.'|\#|\')([^"]*)"#m';
$buffer = preg_replace($regex, "$1=\"$base\$2\"", $buffer);
$regex = '#(onclick="window.open\(\')(?!/|'.$protocols.'|\#)([^/]+[^\']*?\')#m';
$buffer = preg_replace($regex, '$1'.$base.'$2', $buffer);
// ONMOUSEOVER / ONMOUSEOUT
$regex = '#(onmouseover|onmouseout)="this.src=([\']+)(?!/|'.$protocols.'|\#|\')([^"]+)"#m';
$buffer = preg_replace($regex, '$1="this.src=$2'. $base .'$3$4"', $buffer);
// Background image
$regex = '#style\s*=\s*[\'\"](.*):\s*url\s*\([\'\"]?(?!/|'.$protocols.'|\#)([^\)\'\"]+)[\'\"]?\)#m';
$buffer = preg_replace($regex, 'style="$1: url(\''. $base .'$2$3\')', $buffer);
// OBJECT -- fix it only inside the tag
$regex = '#(]\s*value\s*=\s*"(?!/|'.$protocols.'|\#|\')([^"]*)"#m';
$buffer = preg_replace($regex, '$1name="$2" value="' . $base . '$3"', $buffer);
// OBJECT -- fix it only inside the tag
$regex = '#(]*)value\s*=\s*"(?!/|'.$protocols.'|\#|\')([^"]*)"\s*name\s*=\s*"(movie|src|url)"#m';
$buffer = preg_replace($regex, ']*)data\s*=\s*"(?!/|'.$protocols.'|\#|\')([^"]*)"#m';
$buffer = preg_replace($regex, '$1data="' . $base . '$2"$3', $buffer);
// restore the editor contents
$buffer = str_replace($placeholders, $editContents[0], $buffer);
JResponse::setBody($buffer);
return true;
}
/**
* Replaces the matched tags
*
* @param array An array of matches (see preg_match_all)
* @return string
*/
function route( &$matches )
{
$original = $matches[0];
$url = $matches[1];
$url = str_replace('&','&',$url);
$route = JRoute::_('index.php?'.$url);
return 'href="'.$route;
}
}