git-svn-id: https://192.168.0.254/svn/Proyectos.FundacionLQDVI_WebCongresos/trunk@2 94ccb1af-fd9d-d947-8d90-7f70ea60afc8
529 lines
17 KiB
PHP
529 lines
17 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @version $Id: backlink.php 14401 2010-01-26 14:10:00Z louis $
|
|
* @package Joomla
|
|
* @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
|
|
* @license 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('_JEXEC') or die('Restricted access');
|
|
|
|
jimport('joomla.application.menu');
|
|
jimport( 'joomla.plugin.plugin' );
|
|
|
|
class plgSystemBacklink extends JPlugin
|
|
{
|
|
|
|
var $_db = null;
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* For php4 compatability we must not use the __constructor as a constructor for plugins
|
|
* because func_get_args ( void ) returns a copy of all passed arguments NOT references.
|
|
* This causes problems with cross-referencing necessary for the observer design pattern.
|
|
*
|
|
* @access protected
|
|
* @param object $subject The object to observe
|
|
* @param array $config An array that holds the plugin configuration
|
|
* @since 1.0
|
|
*/
|
|
function plgSystemBacklink(& $subject, $config)
|
|
{
|
|
$this->_db = JFactory::getDBO();
|
|
parent :: __construct($subject, $config);
|
|
}
|
|
|
|
function onAfterInitialise()
|
|
{
|
|
global $mainframe;
|
|
if ($mainframe->isAdmin()) {
|
|
return; // Dont run in admin
|
|
}
|
|
|
|
$sef = $this->params->get('sef', 1);
|
|
$url = $this->params->get('url', 1);
|
|
|
|
$legacysef = $this->params->get('legacysef', 1);
|
|
if (!$sef && !$url && !$legacysef)
|
|
return; // None of the options enabled, bail!
|
|
|
|
// Grab the system as early as possible, we're going to terminate it potentially
|
|
// Case 1: Query string match (shouldn't need this but its here anyway)
|
|
if ($url && isset ($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) && strpos($_SERVER['QUERY_STRING'], '&')) {
|
|
$query_string = $_SERVER['QUERY_STRING'];
|
|
$this->_lookup($query_string);
|
|
}
|
|
|
|
// Case 2: SEF or similar match
|
|
if ($sef && isset ($_SERVER['SCRIPT_NAME']) && isset ($_SERVER['REQUEST_URI'])) {
|
|
$part = str_replace('index.php', '', $_SERVER['SCRIPT_NAME']);
|
|
if($part != '/') {
|
|
$search = str_replace($part, '', $_SERVER['REQUEST_URI']);
|
|
} else {
|
|
$search = ltrim($_SERVER['REQUEST_URI'],'/');
|
|
}
|
|
$this->_lookup($search);
|
|
}
|
|
// Case 3: Old school core sef; used to backlink
|
|
// Enable only if:
|
|
// 1: SEF is enabled
|
|
// 2: Legacy SEF Plugin Param is set
|
|
// 3: And there is no backlink
|
|
if ($mainframe->getCfg('sef')
|
|
&& $legacysef
|
|
&& !strstr($_SERVER['REQUEST_URI'],'nobacklink')
|
|
&& !strlen($_SERVER['QUERY_STRING'])) {
|
|
$this->_legacysef();
|
|
}
|
|
|
|
}
|
|
|
|
function _lookup($searchstring)
|
|
{
|
|
// return blank strings and just index.php on its own...
|
|
if (!strlen($searchstring) || $searchstring == trim('index.php',' ?')) {
|
|
return;
|
|
}
|
|
|
|
$sef = $this->params->get('sef', 1);
|
|
$url = $this->params->get('url', 1);
|
|
|
|
if (!$sef && !$url) {
|
|
return; // Neither option enabled, bail!
|
|
}
|
|
|
|
$query = 'SELECT * FROM #__migration_backlinks WHERE ';
|
|
$where = Array ();
|
|
$search = $this->_db->Quote( $this->_db->getEscaped( $searchstring, true ).'%', false );
|
|
|
|
if ($url) {
|
|
$where[] = 'url LIKE ' . $search;
|
|
}
|
|
if ($sef) {
|
|
$where[] = 'sefurl LIKE ' . $search;
|
|
}
|
|
|
|
$query .= implode(' OR ', $where);
|
|
$this->_db->setQuery($query);
|
|
$results = $this->_db->loadAssocList();
|
|
|
|
if (count($results)) {
|
|
// Get the first one...
|
|
$this->_redirect($results[0]['itemid'], $results[0]['name'], $results[0]['newurl']);
|
|
}
|
|
}
|
|
|
|
function _redirect($Itemid, $name, $url = null)
|
|
{
|
|
global $mainframe;
|
|
if (!strlen($url))
|
|
{
|
|
$menu = & JSite :: getMenu();
|
|
$item = $menu->getItem($Itemid);
|
|
//$url = $item->link;
|
|
|
|
switch ($item->type)
|
|
{
|
|
case 'url' :
|
|
if ((strpos($item->link, 'index.php?') !== false) && (strpos($item->link, 'Itemid=') === false)) {
|
|
$url = $item->link . '&Itemid=' . $item->id;
|
|
} else {
|
|
$url = $item->link;
|
|
}
|
|
break;
|
|
|
|
default :
|
|
$url = 'index.php?Itemid=' . $item->id;
|
|
//$url = $item->link . '&Itemid='.$item->id;
|
|
break;
|
|
}
|
|
$url = JRoute :: _($url);
|
|
//$url = JURI :: base() . $url; // was $surl with third option of below being url and second being surl
|
|
$name = $item->name;
|
|
}
|
|
// Check we're not redirecting to ourselves
|
|
if(!stristr($url,$_SERVER['REQUEST_URI']) && !stristr($url,$_SERVER['SCRIPT_NAME'].'/'.$_SERVER['QUERY_STRING'])) {
|
|
return;
|
|
}
|
|
|
|
$name = $name ? $name : "Unknown";
|
|
|
|
header('Location: ' . str_replace('&','&',$url), true, '301'); // redirect and kill of and &
|
|
jexit(JText :: sprintf('"%s" has moved to <a href="%s">%s</a>. Click the link if your browser does not redirect you automatically.', $name, $url, $url));
|
|
}
|
|
|
|
function _legacysef()
|
|
{
|
|
$mosConfig_absolute_path = JPATH_SITE;
|
|
$mosConfig_live_site = JURI :: base();
|
|
$url_array = explode('/', $_SERVER['REQUEST_URI']);
|
|
|
|
if (in_array('content', $url_array))
|
|
{
|
|
/**
|
|
* Content
|
|
* http://www.domain.com/$option/$task/$sectionid/$id/$Itemid/$limit/$limitstart
|
|
*/
|
|
|
|
$uri = explode('content/', $_SERVER['REQUEST_URI']);
|
|
$option = 'com_content';
|
|
$_GET['option'] = $option;
|
|
$_REQUEST['option'] = $option;
|
|
$pos = array_search('content', $url_array);
|
|
|
|
// language hook for content
|
|
$lang = '';
|
|
foreach ($url_array as $key => $value)
|
|
{
|
|
if (!strcasecmp(substr($value, 0, 5), 'lang,'))
|
|
{
|
|
$temp = explode(',', $value);
|
|
if (isset ($temp[0]) && $temp[0] != '' && isset ($temp[1]) && $temp[1] != '')
|
|
{
|
|
$_GET['lang'] = $temp[1];
|
|
$_REQUEST['lang'] = $temp[1];
|
|
$lang = $temp[1];
|
|
}
|
|
unset ($url_array[$key]);
|
|
}
|
|
}
|
|
|
|
if (isset ($url_array[$pos +8]) && $url_array[$pos +8] != '' && in_array('category', $url_array) && (strpos($url_array[$pos +5], 'order,') !== false) && (strpos($url_array[$pos +6], 'filter,') !== false))
|
|
{
|
|
// $option/$task/$sectionid/$id/$Itemid/$order/$filter/$limit/$limitstart
|
|
$task = $url_array[$pos +1];
|
|
$sectionid = $url_array[$pos +2];
|
|
$id = $url_array[$pos +3];
|
|
$Itemid = $url_array[$pos +4];
|
|
$order = str_replace('order,', '', $url_array[$pos +5]);
|
|
$filter = str_replace('filter,', '', $url_array[$pos +6]);
|
|
$limit = $url_array[$pos +7];
|
|
$limitstart = $url_array[$pos +8];
|
|
|
|
// pass data onto global variables
|
|
$_GET['task'] = $task;
|
|
$_REQUEST['task'] = $task;
|
|
$_GET['sectionid'] = $sectionid;
|
|
$_REQUEST['sectionid'] = $sectionid;
|
|
$_GET['id'] = $id;
|
|
$_REQUEST['id'] = $id;
|
|
$_GET['Itemid'] = $Itemid;
|
|
$_REQUEST['Itemid'] = $Itemid;
|
|
$_GET['order'] = $order;
|
|
$_REQUEST['order'] = $order;
|
|
$_GET['filter'] = $filter;
|
|
$_REQUEST['filter'] = $filter;
|
|
$_GET['limit'] = $limit;
|
|
$_REQUEST['limit'] = $limit;
|
|
$_GET['limitstart'] = $limitstart;
|
|
$_REQUEST['limitstart'] = $limitstart;
|
|
|
|
$QUERY_STRING = "option=com_content&task=$task§ionid=$sectionid&id=$id&Itemid=$Itemid&order=$order&filter=$filter&limit=$limit&limitstart=$limitstart";
|
|
}
|
|
else if (isset ($url_array[$pos +7]) && $url_array[$pos +7] != '' && $url_array[$pos +5] > 1000 && (in_array('archivecategory', $url_array) || in_array('archivesection', $url_array)))
|
|
{
|
|
// $option/$task/$id/$limit/$limitstart/year/month/module
|
|
$task = $url_array[$pos +1];
|
|
$id = $url_array[$pos +2];
|
|
$limit = $url_array[$pos +3];
|
|
$limitstart = $url_array[$pos +4];
|
|
$year = $url_array[$pos +5];
|
|
$month = $url_array[$pos +6];
|
|
$module = $url_array[$pos +7];
|
|
|
|
// pass data onto global variables
|
|
$_GET['task'] = $task;
|
|
$_REQUEST['task'] = $task;
|
|
$_GET['id'] = $id;
|
|
$_REQUEST['id'] = $id;
|
|
$_GET['limit'] = $limit;
|
|
$_REQUEST['limit'] = $limit;
|
|
$_GET['limitstart'] = $limitstart;
|
|
$_REQUEST['limitstart'] = $limitstart;
|
|
$_GET['year'] = $year;
|
|
$_REQUEST['year'] = $year;
|
|
$_GET['month'] = $month;
|
|
$_REQUEST['month'] = $month;
|
|
$_GET['module'] = $module;
|
|
$_REQUEST['module'] = $module;
|
|
|
|
$QUERY_STRING = "option=com_content&task=$task&id=$id&limit=$limit&limitstart=$limitstart&year=$year&month=$month&module=$module";
|
|
}
|
|
else if (isset ($url_array[$pos +7]) && $url_array[$pos +7] != '' && $url_array[$pos +6] > 1000 && (in_array('archivecategory', $url_array) || in_array('archivesection', $url_array)))
|
|
{
|
|
// $option/$task/$id/$Itemid/$limit/$limitstart/year/month
|
|
$task = $url_array[$pos +1];
|
|
$id = $url_array[$pos +2];
|
|
$Itemid = $url_array[$pos +3];
|
|
$limit = $url_array[$pos +4];
|
|
$limitstart = $url_array[$pos +5];
|
|
$year = $url_array[$pos +6];
|
|
$month = $url_array[$pos +7];
|
|
|
|
// pass data onto global variables
|
|
$_GET['task'] = $task;
|
|
$_REQUEST['task'] = $task;
|
|
$_GET['id'] = $id;
|
|
$_REQUEST['id'] = $id;
|
|
$_GET['Itemid'] = $Itemid;
|
|
$_REQUEST['Itemid'] = $Itemid;
|
|
$_GET['limit'] = $limit;
|
|
$_REQUEST['limit'] = $limit;
|
|
$_GET['limitstart'] = $limitstart;
|
|
$_REQUEST['limitstart'] = $limitstart;
|
|
$_GET['year'] = $year;
|
|
$_REQUEST['year'] = $year;
|
|
$_GET['month'] = $month;
|
|
$_REQUEST['month'] = $month;
|
|
|
|
$QUERY_STRING = "option=com_content&task=$task&id=$id&Itemid=$Itemid&limit=$limit&limitstart=$limitstart&year=$year&month=$month";
|
|
}
|
|
else if (isset ($url_array[$pos +7]) && $url_array[$pos +7] != '' && in_array('category', $url_array) && (strpos($url_array[$pos +5], 'order,') !== false))
|
|
{
|
|
// $option/$task/$sectionid/$id/$Itemid/$order/$limit/$limitstart
|
|
$task = $url_array[$pos +1];
|
|
$sectionid = $url_array[$pos +2];
|
|
$id = $url_array[$pos +3];
|
|
$Itemid = $url_array[$pos +4];
|
|
$order = str_replace('order,', '', $url_array[$pos +5]);
|
|
$limit = $url_array[$pos +6];
|
|
$limitstart = $url_array[$pos +7];
|
|
|
|
// pass data onto global variables
|
|
$_GET['task'] = $task;
|
|
$_REQUEST['task'] = $task;
|
|
$_GET['sectionid'] = $sectionid;
|
|
$_REQUEST['sectionid'] = $sectionid;
|
|
$_GET['id'] = $id;
|
|
$_REQUEST['id'] = $id;
|
|
$_GET['Itemid'] = $Itemid;
|
|
$_REQUEST['Itemid'] = $Itemid;
|
|
$_GET['order'] = $order;
|
|
$_REQUEST['order'] = $order;
|
|
$_GET['limit'] = $limit;
|
|
$_REQUEST['limit'] = $limit;
|
|
$_GET['limitstart'] = $limitstart;
|
|
$_REQUEST['limitstart'] = $limitstart;
|
|
|
|
$QUERY_STRING = "option=com_content&task=$task§ionid=$sectionid&id=$id&Itemid=$Itemid&order=$order&limit=$limit&limitstart=$limitstart";
|
|
}
|
|
else if (isset ($url_array[$pos +6]) && $url_array[$pos +6] != '')
|
|
{
|
|
// $option/$task/$sectionid/$id/$Itemid/$limit/$limitstart
|
|
$task = $url_array[$pos +1];
|
|
$sectionid = $url_array[$pos +2];
|
|
$id = $url_array[$pos +3];
|
|
$Itemid = $url_array[$pos +4];
|
|
$limit = $url_array[$pos +5];
|
|
$limitstart = $url_array[$pos +6];
|
|
|
|
// pass data onto global variables
|
|
$_GET['task'] = $task;
|
|
$_REQUEST['task'] = $task;
|
|
$_GET['sectionid'] = $sectionid;
|
|
$_REQUEST['sectionid'] = $sectionid;
|
|
$_GET['id'] = $id;
|
|
$_REQUEST['id'] = $id;
|
|
$_GET['Itemid'] = $Itemid;
|
|
$_REQUEST['Itemid'] = $Itemid;
|
|
$_GET['limit'] = $limit;
|
|
$_REQUEST['limit'] = $limit;
|
|
$_GET['limitstart'] = $limitstart;
|
|
$_REQUEST['limitstart'] = $limitstart;
|
|
|
|
$QUERY_STRING = "option=com_content&task=$task§ionid=$sectionid&id=$id&Itemid=$Itemid&limit=$limit&limitstart=$limitstart";
|
|
}
|
|
else if (isset ($url_array[$pos +5]) && $url_array[$pos +5] != '')
|
|
{
|
|
// $option/$task/$id/$Itemid/$limit/$limitstart
|
|
$task = $url_array[$pos +1];
|
|
$id = $url_array[$pos +2];
|
|
$Itemid = $url_array[$pos +3];
|
|
$limit = $url_array[$pos +4];
|
|
$limitstart = $url_array[$pos +5];
|
|
|
|
// pass data onto global variables
|
|
$_GET['task'] = $task;
|
|
$_REQUEST['task'] = $task;
|
|
$_GET['id'] = $id;
|
|
$_REQUEST['id'] = $id;
|
|
$_GET['Itemid'] = $Itemid;
|
|
$_REQUEST['Itemid'] = $Itemid;
|
|
$_GET['limit'] = $limit;
|
|
$_REQUEST['limit'] = $limit;
|
|
$_GET['limitstart'] = $limitstart;
|
|
$_REQUEST['limitstart'] = $limitstart;
|
|
|
|
$QUERY_STRING = "option=com_content&task=$task&id=$id&Itemid=$Itemid&limit=$limit&limitstart=$limitstart";
|
|
}
|
|
else if (isset ($url_array[$pos +4]) && $url_array[$pos +4] != '' && (in_array('archivecategory', $url_array) || in_array('archivesection', $url_array)))
|
|
{
|
|
// $option/$task/$year/$month/$module
|
|
$task = $url_array[$pos +1];
|
|
$year = $url_array[$pos +2];
|
|
$month = $url_array[$pos +3];
|
|
$module = $url_array[$pos +4];
|
|
|
|
// pass data onto global variables
|
|
$_GET['task'] = $task;
|
|
$_REQUEST['task'] = $task;
|
|
$_GET['year'] = $year;
|
|
$_REQUEST['year'] = $year;
|
|
$_GET['month'] = $month;
|
|
$_REQUEST['month'] = $month;
|
|
$_GET['module'] = $module;
|
|
$_REQUEST['module'] = $module;
|
|
|
|
$QUERY_STRING = "option=com_content&task=$task&year=$year&month=$month&module=$module";
|
|
}
|
|
else if (!(isset ($url_array[$pos +5]) && $url_array[$pos +5] != '') && isset ($url_array[$pos +4]) && $url_array[$pos +4] != '')
|
|
{
|
|
// $option/$task/$sectionid/$id/$Itemid
|
|
$task = $url_array[$pos +1];
|
|
$sectionid = $url_array[$pos +2];
|
|
$id = $url_array[$pos +3];
|
|
$Itemid = $url_array[$pos +4];
|
|
|
|
// pass data onto global variables
|
|
$_GET['task'] = $task;
|
|
$_REQUEST['task'] = $task;
|
|
$_GET['sectionid'] = $sectionid;
|
|
$_REQUEST['sectionid'] = $sectionid;
|
|
$_GET['id'] = $id;
|
|
$_REQUEST['id'] = $id;
|
|
$_GET['Itemid'] = $Itemid;
|
|
$_REQUEST['Itemid'] = $Itemid;
|
|
|
|
$QUERY_STRING = "option=com_content&task=$task§ionid=$sectionid&id=$id&Itemid=$Itemid";
|
|
}
|
|
else if (!(isset ($url_array[$pos +4]) && $url_array[$pos +4] != '') && (isset ($url_array[$pos +3]) && $url_array[$pos +3] != ''))
|
|
{
|
|
// $option/$task/$id/$Itemid
|
|
$task = $url_array[$pos +1];
|
|
$id = $url_array[$pos +2];
|
|
$Itemid = $url_array[$pos +3];
|
|
|
|
// pass data onto global variables
|
|
$_GET['task'] = $task;
|
|
$_REQUEST['task'] = $task;
|
|
$_GET['id'] = $id;
|
|
$_REQUEST['id'] = $id;
|
|
$_GET['Itemid'] = $Itemid;
|
|
$_REQUEST['Itemid'] = $Itemid;
|
|
|
|
$QUERY_STRING = "option=com_content&task=$task&id=$id&Itemid=$Itemid";
|
|
}
|
|
else if (!(isset ($url_array[$pos +3]) && $url_array[$pos +3] != '') && (isset ($url_array[$pos +2]) && $url_array[$pos +2] != ''))
|
|
{
|
|
// $option/$task/$id
|
|
$task = $url_array[$pos +1];
|
|
$id = $url_array[$pos +2];
|
|
|
|
// pass data onto global variables
|
|
$_GET['task'] = $task;
|
|
$_REQUEST['task'] = $task;
|
|
$_GET['id'] = $id;
|
|
$_REQUEST['id'] = $id;
|
|
|
|
$QUERY_STRING = "option=com_content&task=$task&id=$id";
|
|
}
|
|
else if (!(isset ($url_array[$pos +2]) && $url_array[$pos +2] != '') && (isset ($url_array[$pos +1]) && $url_array[$pos +1] != ''))
|
|
{
|
|
// $option/$task
|
|
$task = $url_array[$pos +1];
|
|
|
|
$_GET['task'] = $task;
|
|
$_REQUEST['task'] = $task;
|
|
|
|
$QUERY_STRING = 'option=com_content&task=' . $task;
|
|
}
|
|
|
|
if ($lang != '') {
|
|
$QUERY_STRING .= '&lang=' . $lang;
|
|
}
|
|
|
|
$_SERVER['QUERY_STRING'] = $QUERY_STRING;
|
|
$REQUEST_URI = $uri[0] . 'index.php?' . $QUERY_STRING;
|
|
$_SERVER['REQUEST_URI'] = $REQUEST_URI;
|
|
|
|
}
|
|
else if (in_array('component', $url_array))
|
|
{
|
|
$name = 'component';
|
|
/*
|
|
Components
|
|
http://www.domain.com/component/$name,$value
|
|
*/
|
|
$uri = explode('component/', $_SERVER['REQUEST_URI']);
|
|
$uri_array = explode('/', $uri[1]);
|
|
$QUERY_STRING = '';
|
|
|
|
// needed for check if component exists
|
|
$path = $mosConfig_absolute_path . '/components';
|
|
$dirlist = array ();
|
|
if (is_dir($path))
|
|
{
|
|
$base = opendir($path);
|
|
while (false !== ($dir = readdir($base)))
|
|
{
|
|
if ($dir !== '.' && $dir !== '..' && is_dir($path . '/' . $dir) && strtolower($dir) !== 'cvs' && strtolower($dir) !== '.svn') {
|
|
$dirlist[] = $dir;
|
|
}
|
|
}
|
|
closedir($base);
|
|
}
|
|
|
|
foreach ($uri_array as $value)
|
|
{
|
|
$temp = explode(',', $value);
|
|
if (isset ($temp[0]) && $temp[0] != '' && isset ($temp[1]) && $temp[1] != '')
|
|
{
|
|
$_GET[$temp[0]] = $temp[1];
|
|
$_REQUEST[$temp[0]] = $temp[1];
|
|
|
|
// check to ensure component actually exists
|
|
if ($temp[0] == 'option')
|
|
{
|
|
$check = '';
|
|
if (count($dirlist)) {
|
|
foreach ($dirlist as $dir) {
|
|
if ($temp[1] == $dir) {
|
|
$check = 1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
// redirect to 404 page if no component found to match url
|
|
if (!$check)
|
|
{
|
|
header('HTTP/1.0 404 Not Found');
|
|
require_once ($mosConfig_absolute_path . '/templates/404.php');
|
|
exit (404);
|
|
}
|
|
}
|
|
|
|
if ($QUERY_STRING == '') {
|
|
$QUERY_STRING .= "$temp[0]=$temp[1]";
|
|
} else {
|
|
$QUERY_STRING .= "&$temp[0]=$temp[1]";
|
|
}
|
|
}
|
|
}
|
|
|
|
$_SERVER['QUERY_STRING'] = $QUERY_STRING;
|
|
$REQUEST_URI = $uri[0] . 'index.php?' . $QUERY_STRING;
|
|
$_SERVER['REQUEST_URI'] = $REQUEST_URI;
|
|
|
|
}
|
|
// let this go through and the rest of the system should handle it properly
|
|
}
|
|
|
|
} |