| Current Path : /home/megadansyp/www/components/com_jevents/ |
| Current File : /home/megadansyp/www/components/com_jevents/router.php |
<?php
/**
* JEvents Component for Joomla! 3.x
*
* @version $Id: router.php 3578 2012-05-01 14:25:28Z geraintedwards $
* @package JEvents
* @copyright Copyright (C) 2008-2025 GWESystems Ltd, 2006-2008 JEvents Project Group
* @license GNU/GPLv2, see http://www.gnu.org/licenses/gpl-2.0.html
* @link http://www.jevents.net
*/
defined( '_JEXEC' ) or die( 'No Direct Access' );
use Joomla\CMS\Application\ApplicationHelper;
use Joomla\CMS\Language\Language;
use Joomla\CMS\Language\LanguageHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Document\FeedDocument;
use Joomla\CMS\Factory;
use Joomla\String\StringHelper;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Component\ComponentHelper;
JLoader::register( 'JEVConfig', JPATH_ADMINISTRATOR . "/components/com_jevents/libraries/config.php" );
JLoader::register( 'JEVHelper', JPATH_SITE . "/components/com_jevents/libraries/helper.php" );
JLoader::register( 'JSite', JPATH_SITE . '/includes/application.php' );
function JEventsBuildRoute( &$query ) {
$params = ComponentHelper::getParams( "com_jevents" );
// Must also load backend language files
$lang = Factory::getLanguage();
$lang->load( "com_jevents", JPATH_SITE );
$segments = array();
// sometimes the task is not set but view and layout are so tackle this!
if ( ! isset( $query['task'] ) && isset( $query['view'] ) && isset( $query['layout'] ) )
{
$query['task'] = $query['view'] . "." . $query['layout'];
}
// We don't need the view - its only used to manipulate parameters
if ( isset( $query['view'] ) )
{
unset( $query['view'] );
}
if ( isset( $query['layout'] ) )
{
unset( $query['layout'] );
}
$task = false;
$task = false;
if ( ! isset( $query['task'] ) )
{
if ( isset( $query["Itemid"] ) )
{
$menu = Factory::getApplication()->getMenu();
$menuitem = $menu->getItem( $query["Itemid"] );
if ( ! is_null( $menuitem ) && isset( $menuitem->query["task"] ) )
{
$task = $menuitem->query["task"];
return $segments;
}
else if ( ! is_null( $menuitem ) && isset( $menuitem->query["layout"] ) && isset( $menuitem->query["view"] ) )
{
// we put the xml file in the wrong folder - stupid. Hard to move now!
if ( $menuitem->query["view"] == "icalrepeat" )
{
$menuitem->query["view"] = "icalevent";
}
$task = $menuitem->query["view"] . "." . $menuitem->query["layout"];
}
}
if ( ! $task )
{
$task = 'month.calendar';
}
}
else
{
$task = $query['task'];
unset( $query['task'] );
}
PluginHelper::importPlugin( "jevents" );
Factory::getApplication()->triggerEvent( 'onJEventsRoute' );
// Translatable URLs
if ( $params->get( "newsef", 1 ) )
{
return JEventsBuildRouteNew( $query, $task );
}
switch ( $task )
{
case "year.listevents":
case "month.calendar":
case "week.listevents":
case "day.listevents":
case "cat.listevents":
case "jevent.detail":
case "icalevent.detail":
case "icalrepeat.detail":
case "search.form":
case "search.results":
case "admin.listevents":
{
$segments[] = $task;
$config = Factory::getConfig();
$t_datenow = JEVHelper::getNow();
// if no date in the query then use TODAY not the calendar date
$nowyear = JevDate::strftime( '%Y', $t_datenow->toUnix( true ) );
$nowmonth = JevDate::strftime( '%m', $t_datenow->toUnix( true ) );
$nowday = JevDate::strftime( '%d', $t_datenow->toUnix( true ) );
if ( isset( $query['year'] ) )
{
$segments[] = $query['year'];
unset( $query['year'] );
}
else
{
// if no date in the query then use TODAY not the calendar date
$segments[] = $nowyear;
}
if ( isset( $query['month'] ) )
{
$segments[] = $query['month'];
unset( $query['month'] );
}
else
{
// if no date in the query then use TODAY not the calendar date
$segments[] = $nowmonth;
}
if ( isset( $query['day'] ) )
{
$segments[] = $query['day'];
unset( $query['day'] );
}
else
{
// if no date in the query then use TODAY not the calendar date
$segments[] = $nowday;
}
switch ( $task )
{
case "jevent.detail":
case "icalevent.detail":
case "icalrepeat.detail":
if ( isset( $query['jevtype'] ) )
{
unset( $query['jevtype'] );
}
if ( isset( $query['evid'] ) )
{
$segments[] = $query['evid'];
unset( $query['evid'] );
}
else
{
if ( isset( $query["Itemid"] ) )
{
// event detail menu item
$menu = Factory::getApplication()->getMenu();
$menuitem = $menu->getItem( $query["Itemid"] );
if ( ! is_null( $menuitem ) && isset( $menuitem->query["evid"] ) )
{
$segments[] = $menuitem->query["evid"];
if ( ! isset( $query['title'] ) )
{
//$query['title'] = StringHelper::substr(ApplicationHelper::stringURLSafe($query['title']), 0, 150);
}
}
else
{
$segments[] = "0";
}
}
else
{
$segments[] = "0";
}
}
/*
// Can we drop the use of uid?
if(isset($query['title'])) {
$segments[] = ApplicationHelper::stringURLSafe($query['title']);
unset($query['title']);
}
else {
$segments[] = "-";
}
*/
break;
default:
break;
}
if ( isset( $query['catids'] ) && StringHelper::strlen( $query['catids'] ) > 0 )
{
$segments[] = $query['catids'];
unset( $query['catids'] );
}
else
{
$segments[] = "-";
}
switch ( $task )
{
case "icalrepeat.detail":
if ( isset( $query['uid'] ) )
{
// Some remote UIDs have @ and other dodgy characters in them so encode them for safety
//$segments[] = base64_encode($query['uid']);
unset( $query['uid'] );
}
if ( isset( $query['title'] ) )
{
$segments[] = StringHelper::substr( ApplicationHelper::stringURLSafe( $query['title'] ), 0, 150 );
unset( $query['title'] );
}
else
{
$segments[] = "-";
}
break;
default:
break;
}
}
break;
case "jevent.edit":
case "icalevent.edit":
case "icalevent.publish":
case "icalevent.unpublish":
case "icalevent.editcopy":
case "icalrepeat.edit":
case "jevent.delete":
case "icalevent.delete":
case "icalrepeat.delete":
case "icalrepeat.deletefuture":
$segments[] = $task;
if ( isset( $query['jevtype'] ) )
{
unset( $query['jevtype'] );
}
if ( isset( $query['evid'] ) )
{
$segments[] = $query['evid'];
unset( $query['evid'] );
}
else
{
if ( isset( $query["Itemid"] ) )
{
// event detail menu item
$menu = Factory::getApplication()->getMenu();
$menuitem = $menu->getItem( $query["Itemid"] );
if ( ! is_null( $menuitem ) && isset( $menuitem->query["evid"] ) )
{
$segments[] = $menuitem->query["evid"];
if ( ! isset( $query['title'] ) )
{
//$query['title'] = StringHelper::substr(ApplicationHelper::stringURLSafe($query['title']), 0, 150);
}
}
else
{
$segments[] = "0";
}
}
else
{
$segments[] = "0";
}
}
break;
case "modlatest.rss":
$segments[] = $task;
// assume implicit feed document
//unset($query['format']);
// feed type
if ( isset( $query['type'] ) )
{
$segments[] = $query['type'];
unset( $query['type'] );
}
else
{
$segments[] = 'rss';
}
// modid
if ( isset( $query['modid'] ) )
{
$segments[] = $query['modid'];
unset( $query['modid'] );
}
else
{
$segments[] = "0";
}
break;
case "icalrepeat.vcal":
case "icalevent.vcal":
$segments[] = $task;
if ( isset( $query['evid'] ) )
{
$segments[] = $query['evid'];
unset( $query['evid'] );
}
else
{
$segments[] = "0";
}
if ( isset( $query['catids'] ) )
{
$segments[] = $query['catids'];
unset( $query['catids'] );
}
else
{
$segments[] = "0";
}
break;
default:
$segments[] = $task;
$segments[] = "-";
break;
}
return $segments;
}
function JEventsParseRoute( &$segments ) {
$vars = array();
static $translatedTasks = false;
static $tasks;
if ( ! $translatedTasks )
{
// Must also load backend language files
$lang = Factory::getLanguage();
$lang->load( "com_jevents", JPATH_SITE );
$translatedTasks = array();
$tasks = array(
"year.listevents",
"month.calendar",
"week.listevents",
"day.listevents",
"range.listevents",
"cat.listevents",
"jevent.detail",
"icalevent.detail",
"icalrepeat.detail",
"search.form",
"search.results",
"admin.listevents",
"jevent.edit",
"icalevent.edit",
"icalevent.publish",
"icalevent.unpublish",
"icalevent.editcopy",
"icalrepeat.edit",
"jevent.delete",
"icalevent.delete",
"icalrepeat.delete",
"icalrepeat.deletefuture",
"modlatest.rss",
"icalrepeat.vcal",
"icalevent.vcal",
"list.events"
);
foreach ( $tasks as $tt )
{
$translatedTasks[translatetask( $tt )] = $tt;
// backup for sites that hadn't translated but now have
$translatedTasks[str_replace( ".", "_", $tt )] = $tt;
}
}
//Get the active menu item
$menu = Factory::getApplication()->getMenu();
$item = $menu->getActive();
// Count route segments
$count = count( $segments );
if ( $count > 0 )
{
if ( is_numeric( $segments[0] ) )
{
array_unshift( $segments, translatetask( "icalrepeat.detail" ) );
}
// task
$task = $segments[0];
// note that URI decoding swaps /-/ for :
if ( strpos( $task, ":" ) > 0 )
{
$task = str_replace( ":", "-", $task );
}
if ( translatetask( "icalrepeat.detail" ) == "" && ! in_array( $task, $tasks ) && ! array_key_exists( $task, $translatedTasks ) )
{
//array_unshift($segments, "icalrepeat.detail");
array_unshift( $segments, "" );
if ( count( $segments ) == 3 )
{
$title = $segments[1];
$segments[1] = $segments[2];
$segments[2] = "-";
$segments[3] = $title;
}
else if ( $segments > 3 )
{
$title = $segments[2];
$catid = $segments[1];
$evid = $segments[3];
$segments[1] = $evid;
$segments[2] = $catid;
$segments[3] = $title;
}
$task = $segments[0];
}
$newsef = false;
if ( array_key_exists( $task, $translatedTasks ) )
{
$task = $translatedTasks[$task];
return JEventsParseRouteNew( $segments, $task );
}
$vars["task"] = $task;
switch ( $task )
{
case "year.listevents":
case "month.calendar":
case "week.listevents":
case "day.listevents":
case "range.listevents":
case "cat.listevents":
case "jevent.detail":
case "icalevent.detail":
case "icalrepeat.detail":
case "view_cat":
if ( strpos( $task, "jevent" ) === 0 )
{
$vars['jevtype'] = "jevent";
}
else if ( strpos( $task, "icalevent" ) === 0 )
{
$vars['jevtype'] = "icaldb";
}
if ( $count > 1 )
{
$vars['year'] = $segments[1];
}
if ( $count > 2 )
{
$vars['month'] = $segments[2];
}
if ( $count > 3 )
{
$vars['day'] = $segments[3];
}
if ( $count > 4 )
{
switch ( $task )
{
case "jevent.detail":
case "icalevent.detail":
case "icalrepeat.detail":
// special case where the target menu item is icalrepeat.detail - we need to make sure the link is to the actual event and not the menu event!
if ( $task === "icalrepeat.detail" && ( $item->query['view'] ?? 'missing' ) . '.' . ( $item->query['layout'] ?? 'missing' ) === $task )
{
$vars['rp_id'] = $segments[4];
}
$vars['evid'] = $segments[4];
// note that URI decoding swaps /-/ for :
if ( count( $segments ) > 5 && $segments[5] != ":" )
{
$vars['catids'] = $segments[5];
}
break;
default:
// note that URI decoding swaps /-/ for :
if ( $segments[4] != ":" )
{
$vars['catids'] = $segments[4];
}
break;
}
}
if ( $count > 6 )
{
switch ( $task )
{
case "icalrepeat.detail":
//$vars['uid'] = base64_decode($segments[6]);
break;
default:
break;
}
}
break;
case "jevent.edit":
case "icalevent.editcopy":
case "icalevent.edit":
case "icalevent.publish":
case "icalevent.unpublish":
case "icalrepeat.edit":
case "icalevent.delete":
case "icalrepeat.delete":
case "icalrepeat.deletefuture":
if ( $count > 1 )
{
$vars['evid'] = $segments[1];
}
break;
case "modlatest.rss":
// URI = /task/feedtype/modid
// force FeedDocument
$vars['format'] = 'feed';
//feed type
if ( $count > 1 )
{
$vars['type'] = $segments[1];
}
else
{
$vars['type'] = "rss";
}
// modid
if ( $count > 2 )
{
$vars['modid'] = $segments[2];
}
else
{
$vars['modid'] = "0";
}
break;
case "icalrepeat.vcal":
case "icalevent.vcal":
if ( $count > 1 )
{
$vars['evid'] = $segments[1];
}
else
{
$vars['evid'] = "0";
}
// modid
if ( $count > 2 )
{
$vars['catids'] = $segments[2];
}
else
{
$vars['catids'] = "0";
}
break;
default:
$app = Factory::getApplication();
$input = $app->input;
if ( $task !== "" )
{
if ( strpos( $task, '.' ) == false )
{
$view = $input->getCmd( 'view', false );
$layout = $input->getCmd( 'layout', "show" );
if ( $view && $layout )
{
$task = $view . '.' . $layout;
}
}
if ( strpos( $task, 'plugin.' ) === 0 )
{
break;
}
$lang = Factory::getLanguage();
$lang->load( "com_jevents", JPATH_ADMINISTRATOR );
if ( strpos( $task, '.' ) == false )
{
throw new Exception( Text::_( 'COM_JEVENTS_UNKNOWN_TASK' ), 404 );
return false;
}
list( $controllerName, $cmd ) = explode( '.', $task );
$controllerName = strtolower( $controllerName );
$controllerPath = JPATH_SITE . '/components/com_jevents/controllers/' . $controllerName . '.php';
if ( ! file_exists( $controllerPath ) )
{
throw new Exception( Text::_( 'COM_JEVENTS_UNKNOWN_TASK' ), 404 );
return false;
}
}
break;
}
}
// J4 router is different and we must clean out the $segments;
$segments = array();
/*
if (count($vars) < count($segments) && $segments[count($segments) - 1] == ":" )
{
unset( $segments[count($segments) - 1]);
}
if (count($vars) == count($segments))
{
$segments = array();
}
*/
return $vars;
}
function JEventsBuildRouteNew( &$query, $task ) {
$transtask = translatetask( $task, $query );
$params = ComponentHelper::getParams( "com_jevents" );
$noeventdetailinurl = $params->get( "noeventdetailinurl", 0 );
// get a menu item based on Itemid or currently active
$app = Factory::getApplication();
$menu = $app->getMenu();
// we need a menu item. Either the one specified in the query, or the current active one if none specified
if ( empty( $query['Itemid'] ) )
{
$menuItem = $menu->getActive();
$menuItemGiven = false;
}
else
{
$menuItem = $menu->getItem( $query['Itemid'] );
$menuItemGiven = true;
}
$cfg = JEVConfig::getInstance();
$segments = array();
if ( ( count( $query ) == 2 && isset( $query['Itemid'] ) && isset( $query['option'] ) ) || ( count( $query ) == 3 && isset( $query['Itemid'] ) && isset( $query['lang'] ) && isset( $query['option'] ) ) )
{
// special case where we do not need any information since its a menu item
// as long as the task matches up!
$menu = Factory::getApplication()->getMenu();
$menuitem = $menu->getItem( $query["Itemid"] );
if ( ! is_null( $menuitem ) && ( isset( $menuitem->query["task"] ) || ( isset( $menuitem->query["view"] ) && isset( $menuitem->query["layout"] ) ) ) )
{
if ( ! isset( $query['lang'] ) || $menuitem->language == $query['lang'] || $menuitem->language == "*" )
{
if ( isset( $menuitem->query["task"] ) && $task == $menuitem->query["task"] )
{
return $segments;
}
else if ( isset( $menuitem->query["view"] ) && isset( $menuitem->query["layout"] ) && $task == $menuitem->query["view"] . "." . $menuitem->query["layout"] )
{
return $segments;
}
else
{
$segments[] = $transtask;
}
}
}
}
switch ( $task )
{
case "year.listevents":
case "month.calendar":
case "week.listevents":
case "day.listevents":
case "cat.listevents":
case "jevent.detail":
case "icalevent.detail":
case "icalrepeat.detail":
case "search.form":
case "search.results":
case "admin.listevents":
{
if ( ! in_array( $transtask, $segments ) )
{
$segments[] = $transtask;
}
$config = Factory::getConfig();
$t_datenow = JEVHelper::getNow();
// if no date in the query then use TODAY not the calendar date
$nowyear = JevDate::strftime( '%Y', $t_datenow->toUnix( true ) );
$nowmonth = JevDate::strftime( '%m', $t_datenow->toUnix( true ) );
$nowday = JevDate::strftime( '%d', $t_datenow->toUnix( true ) );
if ( isset( $query['year'] ) )
{
$year = ( $query['year'] == "YYYYyyyy" ) ? "YYYYyyyy" : intval( $query['year'] );
unset( $query['year'] );
}
else
{
$year = $nowyear;
}
if ( isset( $query['month'] ) )
{
$month = ( $query['month'] == "MMMMmmmm" ) ? "MMMMmmmm" : intval( $query['month'] );
unset( $query['month'] );
}
else
{
$month = $nowmonth;
}
if ( isset( $query['day'] ) )
{
$day = intval( $query['day'] );
unset( $query['day'] );
}
else
{
// if no date in the query then use TODAY not the calendar date
$day = $nowday;
}
// for week data always go to the start of the week
if ( $task == "week.listevents" && is_int( $month ) )
{
$startday = $cfg->get( 'com_starday' );
if ( ! $startday )
{
$startday = 0;
}
$date = mktime( 5, 5, 5, $month, $day, $year );
$currentday = date( "w", $date );
if ( $currentday > $startday )
{
$date -= ( $currentday - $startday ) * 86400;
list( $year, $month, $day ) = explode( "-", date( "Y-m-d", $date ) );
}
else if ( $currentday < $startday )
{
$date -= ( 7 + $currentday - $startday ) * 86400;
list( $year, $month, $day ) = explode( "-", date( "Y-m-d", $date ) );
}
}
// only include the year in the date and list views
if ( in_array( $task, array(
"year.listevents",
"month.calendar",
"week.listevents",
"day.listevents"
) ) )
{
$segments[] = $year;
}
// only include the month in the date and list views (excluding year)
if ( in_array( $task, array( "month.calendar", "week.listevents", "day.listevents" ) ) )
{
$segments[] = $month;
}
// only include the day in the week and day views (excluding year and month)
if ( in_array( $task, array( "week.listevents", "day.listevents" ) ) )
{
$segments[] = $day;
}
switch ( $task )
{
case "jevent.detail":
case "icalevent.detail":
case "icalrepeat.detail":
if ( isset( $query['jevtype'] ) )
{
unset( $query['jevtype'] );
}
if ( $transtask != "" )
{
if ( isset( $query['evid'] ) )
{
$segments[] = $query['evid'];
unset( $query['evid'] );
}
else
{
$segments[] = "0";
}
}
if ( $params->get( "nocatindetaillink", 0 ) && isset( $query['catids'] ) && StringHelper::strlen( $query['catids'] ) > 0 )
{
unset( $query['catids'] );
}
break;
default:
break;
}
if ( isset( $query['catids'] ) && StringHelper::strlen( $query['catids'] ) > 0 )
{
$segments[] = $query['catids'];
}
else
{
if ( $transtask != "" )
{
if ( ! $params->get( "nocatindetaillink", 0 ) )
{
$segments[] = "-";
}
}
}
unset( $query['catids'] );
switch ( $task )
{
case "icalrepeat.detail":
if ( isset( $query['uid'] ) )
{
// Some remote UIDs have @ and other dodgy characters in them so encode them for safety
//$segments[] = base64_encode($query['uid']);
unset( $query['uid'] );
}
if ( isset( $query['title'] ) )
{
$segments[] = StringHelper::substr( ApplicationHelper::stringURLSafe( $query['title'] ), 0, 150 );
unset( $query['title'] );
}
else
{
$segments[] = "-";
}
if ( $transtask == "" )
{
if ( isset( $query['evid'] ) )
{
$segments[] = $query['evid'];
unset( $query['evid'] );
}
else
{
$segments[] = "0";
}
}
break;
default:
break;
}
}
break;
case "jevent.edit":
case "icalevent.edit":
case "icalevent.publish":
case "icalevent.unpublish":
case "icalevent.editcopy":
case "icalrepeat.edit":
case "jevent.delete":
case "icalevent.delete":
case "icalrepeat.delete":
case "icalrepeat.deletefuture":
$segments[] = $transtask;
if ( isset( $query['jevtype'] ) )
{
unset( $query['jevtype'] );
}
if ( isset( $query['evid'] ) )
{
$segments[] = $query['evid'];
unset( $query['evid'] );
}
else
{
$segments[] = "0";
}
break;
case "modlatest.rss":
$segments[] = $transtask;
// assume implicit feed document
//unset($query['format']);
// feed type
if ( isset( $query['type'] ) )
{
$segments[] = $query['type'];
unset( $query['type'] );
}
else
{
$segments[] = 'rss';
}
// modid
if ( isset( $query['modid'] ) )
{
$segments[] = $query['modid'];
unset( $query['modid'] );
}
else
{
$segments[] = "0";
}
break;
case "icalrepeat.vcal":
case "icalevent.vcal":
$segments[] = $transtask;
if ( isset( $query['evid'] ) )
{
$segments[] = $query['evid'];
unset( $query['evid'] );
}
else
{
$segments[] = "0";
}
if ( isset( $query['catids'] ) )
{
$segments[] = $query['catids'];
unset( $query['catids'] );
}
else
{
$segments[] = "0";
}
break;
default:
if ( ! in_array( $transtask, $segments ) )
{
$segments[] = $transtask;
}
$segments[] = "-";
break;
}
if ( $task == "icalrepeat.detail" )
{
if ( $noeventdetailinurl )
{
array_shift( $segments );
}
}
return $segments;
}
function JEventsParseRouteNew( &$segments, $task ) {
//Get the active menu item
$menu = Factory::getApplication()->getMenu();
$item = $menu->getActive();
$vars = array();
$vars["task"] = $task;
$params = ComponentHelper::getParams( "com_jevents" );
// Count route segments
$count = count( $segments );
$slugcount = 1;
switch ( $task )
{
case "year.listevents":
case "month.calendar":
case "week.listevents":
case "day.listevents":
case "range.listevents":
case "cat.listevents":
case "jevent.detail":
case "icalevent.detail":
case "icalrepeat.detail":
case "view_cat":
if ( strpos( $task, "jevent" ) === 0 )
{
$vars['jevtype'] = "jevent";
}
else if ( strpos( $task, "icalevent" ) === 0 )
{
$vars['jevtype'] = "icaldb";
}
// only include the year in the date and list views
if ( in_array( $task, array( "year.listevents", "month.calendar", "week.listevents", "day.listevents" ) ) )
{
if ( $count > $slugcount )
{
$vars['year'] = $segments[1];
}
$slugcount ++;
}
// only include the month in the date and list views (excluding year)
if ( in_array( $task, array( "month.calendar", "week.listevents", "day.listevents" ) ) )
{
if ( $count > $slugcount )
{
$vars['month'] = $segments[2];
}
$slugcount ++;
}
// only include the day in the week and day views (excluding year and month)
if ( in_array( $task, array( "week.listevents", "day.listevents" ) ) )
{
if ( $count > $slugcount )
{
$vars['day'] = $segments[3];
}
$slugcount ++;
}
if ( $count > $slugcount )
{
switch ( $task )
{
case "jevent.detail":
case "icalevent.detail":
case "icalrepeat.detail":
$vars['evid'] = $segments[$slugcount];
// special case where the target menu item is icalrepeat.detail - we need to make sure the link is to the actual event and not the menu event!
if ( $task === "icalrepeat.detail" && ( $item->query['view'] ?? 'missing' ) . '.' . ( $item->query['layout'] ?? 'missing' ) === $task )
{
$vars['rp_id'] = $segments[$slugcount];
}
unset( $segments[$slugcount] );
$slugcount ++;
if ( ! $params->get( "nocatindetaillink", 0 ) )
{
// note that URI decoding swaps /-/ for :
if ( count( $segments ) > $slugcount && $segments[$slugcount] != ":" )
{
$vars['catids'] = $segments[$slugcount];
unset( $segments[$slugcount] );
$slugcount ++;
}
if ( count( $segments ) > $slugcount && $segments[$slugcount] == ":" )
{
unset( $segments[$slugcount] );
$slugcount ++;
}
}
// do we have the title?
if ( count( $segments ) > $slugcount && $segments[$slugcount] != "" && $segments[$slugcount] != "-" )
{
$vars['title'] = $segments[$slugcount];
unset( $segments[$slugcount] );
$slugcount ++;
}
break;
default:
// note that URI decoding swaps /-/ for :
if ( $segments[$slugcount] != ":" )
{
$vars['catids'] = $segments[$slugcount];
unset( $segments[$slugcount] );
}
break;
}
}
break;
case "jevent.edit":
case "icalevent.editcopy":
case "icalevent.edit":
case "icalevent.publish":
case "icalevent.unpublish":
case "icalrepeat.edit":
case "icalevent.delete":
case "icalrepeat.delete":
case "icalrepeat.deletefuture":
if ( $count > 1 )
{
$vars['evid'] = $segments[1];
}
break;
case "modlatest.rss":
// URI = /task/feedtype/modid
// force FeedDocument
$vars['format'] = 'feed';
//feed type
if ( $count > 1 )
{
$vars['type'] = $segments[1];
}
else
{
$vars['type'] = "rss";
}
// modid
if ( $count > 2 )
{
$vars['modid'] = $segments[2];
}
else
{
$vars['modid'] = "0";
}
break;
case "icalrepeat.vcal":
case "icalevent.vcal":
if ( $count > 1 )
{
$vars['evid'] = $segments[1];
}
else
{
$vars['evid'] = "0";
}
// modid
if ( $count > 2 )
{
$vars['catids'] = $segments[2];
}
else
{
$vars['catids'] = "0";
}
break;
default:
break;
}
// J4 router is different and we must clean out the $segments;
$segments = array();
/*
if (count($vars) < count($segments) && $segments[count($segments) - 1] == ":" )
{
unset( $segments[count($segments) - 1]);
}
if (count($vars) == count($segments))
{
$segments = array();
}
*/
return $vars;
}
function translatetask( $task, $query = false ) {
$tasks = array(
"year.listevents",
"month.calendar",
"week.listevents",
"day.listevents",
"range.listevents",
"cat.listevents",
"jevent.detail",
"icalevent.detail",
"icalrepeat.detail",
"search.form",
"search.results",
"admin.listevents",
"jevent.edit",
"icalevent.edit",
"icalevent.publish",
"icalevent.unpublish",
"icalevent.editcopy",
"icalrepeat.edit",
"jevent.delete",
"icalevent.delete",
"icalrepeat.delete",
"icalrepeat.deletefuture",
"modlatest.rss",
"icalrepeat.vcal",
"icalevent.vcal"
);
if ( ! in_array( $task, $tasks ) )
{
return $task;
}
// if not translated then just drop the . and use _ instead
$task = str_replace( ".", "_", $task );
$transtask = Text::_( "JEV_SEF_" . $task );
// does it need a translated task in another language
$lang = Factory::getLanguage();
if ( $query && isset( $query["lang"] ) && $lang->get( "tag" ) != $query["lang"] )
{
$sefs = LanguageHelper::getLanguages( 'sef' );
$lang_code = $query["lang"];
if ( array_key_exists( $query["lang"], $sefs ) )
{
$lang_code = $sefs[$query["lang"]]->lang_code;
}
$newlang = Language::getInstance( $lang_code );
$newlang->load( "com_jevents", JPATH_SITE );
$transtask = $newlang->_( "JEV_SEF_" . $task );
}
$transtask = strpos( $transtask, "JEV_SEF_" ) === 0 ? $task : $transtask;
return $transtask;
}