Current File : /home/pacjaorg/public_html/km/components/com_djclassifieds/router.php |
<?php
/**
* @package DJ-Classifieds
* @copyright Copyright (C) DJ-Extensions.com, All rights reserved.
* @license http://www.gnu.org/licenses GNU/GPL
* @author url: http://dj-extensions.com
* @author email contact@dj-extensions.com
*/
defined('_JEXEC') or die;
require_once(JPATH_ADMINISTRATOR.'/components/com_djclassifieds/lib/djseo.php');
require_once(JPATH_ADMINISTRATOR.'/components/com_djclassifieds/lib/djtheme.php');
use Joomla\CMS\Component\Router\RouterBase;
class DJClassifiedsRouter extends RouterBase
{
public function build(&$query)
{
$segments = array();
$app = JFactory::getApplication();
$menu = $app->getMenu('site');
$par = JComponentHelper::getParams('com_djclassifieds');
if(empty($query['rid'])){
unset($query['rid']);
}
if(empty($query['cid'])){
unset($query['cid']);
}
if(!empty($query['Itemid'])){
$menuItem = $menu->getItem($query['Itemid']);
if($menuItem && $menuItem->type == 'alias'){
$menuItem = null;
}
}
$mView = (empty($menuItem->query['view'])) ? null : $menuItem->query['view'];
$mLayout = (empty($menuItem->query['layout'])) ? null : $menuItem->query['layout'];
$mCatid = (empty($menuItem->query['cid'])) ? null : (int)$menuItem->query['cid'];
$mRegid = (empty($menuItem->query['rid'])) ? null : (int)$menuItem->query['rid'];
$mId = (empty($menuItem->query['id'])) ? null : (int)$menuItem->query['id'];
$view = !empty($query['view']) ? $query['view'] : null;
$layout = !empty($query['layout']) ? $query['layout'] : null;
$cid = !empty($query['cid']) ? $query['cid'] : null;
$rid = !empty($query['rid']) ? $query['rid'] : null;
$id = !empty($query['id']) ? $query['id'] : null;
$se = !empty($query['se']) ? $query['se'] : null;
$uid = !empty($query['uid']) ? $query['uid'] : null;
$order = !empty($query['order']) ? $query['order'] : null;
$menuDefault = $menu->getDefault();
// JoomSEF bug workaround
if (isset($query['start']) && isset($query['limitstart'])) {
if ((int)$query['limitstart'] != (int)$query['start'] && (int)$query['start'] > 0) {
// let's make it clear - 'limitstart' has higher priority than 'start' parameter,
// however ARTIO JoomSEF doesn't seem to respect that.
$query['start'] = $query['limitstart'];
unset($query['limitstart']);
}
}
// JoomSEF workaround - end
if ($view) {
if ($view == 'item') {
if ($view != $mView) {
$segments[] = $par->get('seo_view_item','ad');
}
unset($query['view']);
if ($view == $mView && intval($id) > 0 && intval($id) == $mId) {
unset($query['id']);
unset($query['cid']);
unset($query['rid']);
} else if (($mView == 'items' || $mView == 'categories') && intval($id) > 0) {
$segment_cid = '';
if (intval($cid) != intval($mCatid)) {
$segment_cid = DJClassifiedsSEO::getURLfromSlug($cid, 'category');
}
$segment_rid = '';
if (intval($rid) != intval($mRegid)) {
$segment_rid =DJClassifiedsSEO::getURLfromSlug($rid, 'region', 'l');
}
if($par->get('seo_item_url_structure',0)==1){ //region/category
if($segment_rid){
$segments[] = $segment_rid;
}
if($segment_cid){
$segments[] = $segment_cid;
}
}else if($par->get('seo_item_url_structure',0)==2){ //category/region
if($segment_cid){
$segments[] = $segment_cid;
}
if($segment_rid){
$segments[] = $segment_rid;
}
}else if($par->get('seo_item_url_structure',0)==0){ //only category
if($segment_cid){
$segments[] = $segment_cid;
}
}
$segments[] =DJClassifiedsSEO::getURLfromSlug($id, 'item');
unset($query['id']);
unset($query['cid']);
unset($query['rid']);
}
}else if ($view == 'items') {
if ($view != $mView) {
$segments[] = $par->get('seo_view_items','ads');
}
$segment_cid = '';
if($cid){
if (intval($cid) != intval($mCatid)) {
$segment_cid = DJClassifiedsSEO::getURLfromSlug($cid, 'category');
}
unset($query['cid']);
}
$segment_rid = '';
if($rid){
if (intval($rid) != intval($mRegid)) {
$segment_rid = DJClassifiedsSEO::getURLfromSlug($rid, 'region', 'l');
}
unset($query['rid']);
}
if($par->get('seo_items_url_structure',0)){ //category/region
if($segment_cid){
$segments[] = $segment_cid;
}
if($segment_rid){
$segments[] = $segment_rid;
}
}else{ //region/category
if($segment_rid){
$segments[] = $segment_rid;
}
if($segment_cid){
$segments[] = $segment_cid;
}
}
if($layout){
unset($query['layout']);
}
}elseif($query['view'] == 'additem'){
if ($view != $mView) {
$segments[] = $par->get('seo_view_additem','additem');
}
if(isset($query['id'])){
$segments[] = $query['id'];
unset($query['id']);
}
}elseif($query['view'] == 'useritems'){
if ($view != $mView) {
$segments[] = $par->get('seo_view_useritems','useritems');
}
if(isset($query['id'])){
$segments[] = $query['id'];
unset($query['id']);
}
}elseif($query['view'] == 'categories'){
if ($view != $mView) {
$segments[] = $par->get('seo_view_categories','categories');
}
}elseif($query['view'] == 'regions'){
if ($view != $mView) {
$segments[] = $par->get('seo_view_regions','regions');
}
}elseif($query['view'] == 'payment'){
$segments[] = 'payment';
if(isset($query['id'])){
$segments[] = $query['id'];
unset($query['id']);
}
if($layout && $layout!=$mLayout){
$segments[] = $layout;
unset($query['layout']);
}
}elseif($query['view'] == 'points'){
if ($view != $mView) {
$segments[] = 'points';
}
}elseif($query['view'] == 'userpoints'){
if ($view != $mView) {
$segments[] = 'userpoints';
}
}elseif($query['view'] == 'renewitem'){
$segments[] = 'renewitem';
if(isset($query['id'])){
$segments[] = $query['id'];
unset($query['id']);
}
}else if ($view == 'profile') {
if ($view != $mView) {
$segments[] = $par->get('seo_view_profile','profile');
}
if(isset($query['uid'])){
$segments[] =DJClassifiedsSEO::getURLfromSlug($uid, 'profile');
}
unset($query['uid']);
}elseif($query['view'] == 'profileedit'){
if ($view != $mView) {
$segments[] = $par->get('seo_view_profileedit','profileedit');
}
}elseif($query['view'] == 'contact'){
$segments[] = 'contact';
if(isset($query['id'])){
$segments[] = $query['id'];
unset($query['id']);
}
if(isset($query['bid'])){
$segments[] = $query['bid'];
unset($query['bid']);
}
}elseif($query['view'] == 'checkout'){
$segments[] = 'checkout';
if(isset($query['item_id'])){
$segments[] = $query['item_id'];
unset($query['item_id']);
}
if(isset($query['quantity'])){
$segments[] = $query['quantity'];
unset($query['quantity']);
}
}elseif($query['view'] == 'registration'){
if ($view != $mView) {
$segments[] = 'registration';
}
}elseif($query['view'] == 'userplans'){
if ($view != $mView) {
$segments[] = 'userplans';
}
}elseif($query['view'] == 'plans'){
if ($view != $mView) {
$segments[] = 'plans';
}
} else {
if ($view != $mView) {
$segments[] = $query['view'];
}
if(isset($query['id'])){
$segments[] = DJClassifiedsSEO::getURLfromSlug($id, $query['view']);
unset($query['id']);
}
}
unset($query['view']);
if($mView == $view && $mLayout == $layout && $mCatid == $cid && ($se || $order || $uid) && $menuItem && $menuDefault->id == $menuItem->id){
$segments[] = 'all';
}
}
return $segments;
}
public function parse(&$segments)
{
$app = JFactory::getApplication();
$menu = $app->getMenu();
$activemenu = $menu->getActive();
$par = JComponentHelper::getParams('com_djclassifieds');
$query = array();
if ($segments && $segments[0] != 'index.php') {
$temp_view = '';
if ($activemenu) {
$temp = array();
$temp[0] = $activemenu->query['view'];
$temp_view = $activemenu->query['view'];
switch ($temp_view) {
case 'item' : {
$temp[1] = @$activemenu->query['cid'];
$temp[2] = @$activemenu->query['id'];
break;
}
case 'items' : {
$temp[1] = @$activemenu->query['cid'];
$temp[2] = @$activemenu->query['rid'];
if(isset($activemenu->query['layout'])){
$temp[3] = @$activemenu->query['layout'];
}
break;
}
}
}
if (isset($segments[0])) {
if($segments[0] == $par->get('seo_view_item','ad') || $segments[0] == 'item') {
$query['view'] = 'item';
if(isset($segments[3])){
$item_id = DJClassifiedsSEO::getIDfromURL($segments[3], 'item');
$query['id'] = $item_id ? $item_id : $segments[3]; // ghostads
if(DJClassifiedsSEO::isIDRegion($segments[2])){
$query['rid'] = DJClassifiedsSEO::getIDfromURL($segments[2], 'region');
$query['cid'] = DJClassifiedsSEO::getIDfromURL($segments[1], 'category');
}else{
$query['cid'] = DJClassifiedsSEO::getIDfromURL($segments[2], 'category');
$query['rid'] = DJClassifiedsSEO::getIDfromURL($segments[1], 'region');
}
}else if(isset($segments[2])){
$item_id = DJClassifiedsSEO::getIDfromURL($segments[2], 'item');
$query['id'] = $item_id ? $item_id : $segments[2]; // ghostads
if(isset($temp[1])){
if($temp_view == 'items' || $temp_view == 'categories'){
if($temp[1] == 0){
$query['cid'] = DJClassifiedsSEO::getIDfromURL($segments[1], 'category');
$query['rid'] = $temp[2];
}else{
if($par->get('seo_item_url_structure',0)!=0){
$query['rid'] = DJClassifiedsSEO::getIDfromURL($segments[1], 'region');
}
$query['cid'] = $temp[1];
}
}else{
$query['cid'] = DJClassifiedsSEO::getIDfromURL($segments[1], 'category');
}
}else{
$query['cid'] = DJClassifiedsSEO::getIDfromURL($segments[1], 'category');
}
}else{
if(isset($segments[1])){
$item_id = DJClassifiedsSEO::getIDfromURL($segments[1], 'item');
$query['id'] = $item_id ? $item_id : $segments[1]; // ghostads
}
if(isset($temp[1])){
if($temp_view == 'items' || $temp_view == 'categories'){
$query['cid'] = $temp[1];
$query['rid'] = $temp[2];
}
}
}
}else if($segments[0] == $par->get('seo_view_profileedit','profileedit') || $segments[0] == 'profileedit') {
$query['view'] = 'profileedit';
}else if($segments[0] == $par->get('seo_view_additem','additem') || $segments[0] == 'additem') {
$query['view'] = 'additem';
if (isset($segments[1])) {
$query['id'] = $segments[1];
}
}
else if($segments[0] == $par->get('seo_view_useritems','useritems') || $segments[0] == 'useritems') {
$query['view'] = 'useritems';
if (isset($segments[1])) {
$query['id'] = $segments[1];
}
}
else if($segments[0] == $par->get('seo_view_categories','categories') || $segments[0] == 'categories') {
$query['view'] = 'categories';
}
else if($segments[0] == $par->get('seo_view_regions','regions') || $segments[0] == 'regions') {
$query['view'] = 'regions';
}
else if($segments[0] == 'payment') {
$query['view'] = 'payment';
if (isset($segments[1])) {
$query['id'] = $segments[1];
}
if (isset($segments[2])) {
$query['layout'] = $segments[2];
}
}else if($segments[0] == 'points') {
$query['view'] = 'points';
}else if($segments[0] == 'userpoints') {
$query['view'] = 'userpoints';
}else if($segments[0] == 'renewitem') {
$query['view'] = 'renewitem';
if (isset($segments[1])) {
$query['id'] = $segments[1];
}
}else if($segments[0] == 'checkout') {
$query['view'] = 'checkout';
if (isset($segments[1])) {
$query['item_id'] = $segments[1];
}
if (isset($segments[2])) {
$query['quantity'] = $segments[2];
}
}else if($segments[0] == 'registration') {
$query['view'] = 'registration';
}else if($segments[0] == 'plans') {
$query['view'] = 'plans';
}else if($segments[0] == 'userplans') {
$query['view'] = 'userplans';
}else if($segments[0] == $par->get('seo_view_profile','profile') || $segments[0] == 'profile' || $temp_view == 'profile') {
$query['view'] = 'profile';
if (isset($segments[1])) {
$query['uid'] = DJClassifiedsSEO::getIDfromURL($segments[1], 'profile');
}else{
$query['uid'] = DJClassifiedsSEO::getIDfromURL($segments[0], 'profile');
}
}else if($segments[0] == $par->get('seo_view_items','ads') || $segments[0] == 'items' || $temp_view == 'items') {
$query['view'] = 'items';
if (isset($segments[1])) {
if(DJClassifiedsSEO::isIDRegion($segments[1])){
$query['rid'] = DJClassifiedsSEO::getIDfromURL($segments[1], 'region');
}else{
$query['cid'] = DJClassifiedsSEO::getIDfromURL($segments[1], 'category');
}
}
if (isset($segments[2])) {
if(DJClassifiedsSEO::isIDRegion($segments[2])){
$query['rid'] = DJClassifiedsSEO::getIDfromURL($segments[2], 'region');
}else{
$query['cid'] = DJClassifiedsSEO::getIDfromURL($segments[2], 'category');
}
}
if($temp_view == 'items' && $segments[0] != 'items'){
if(DJClassifiedsSEO::isIDRegion($segments[0])){
$query['rid'] = DJClassifiedsSEO::getIDfromURL($segments[0], 'region');
}else{
$query['cid'] = DJClassifiedsSEO::getIDfromURL($segments[0], 'category');
}
}
if($segments[0] != 'all' && $segments[0] != $par->get('seo_view_items','ads') && empty($query['cid']) && empty($query['rid'])){
DJClassifiedsSEO::handleCategoryNotFound();
}
}else if(isset($temp[1]) && $temp_view == 'items'){
$query['view'] = 'items';
if(DJClassifiedsSEO::isIDRegion($segments[0])){
$query['rid'] = DJClassifiedsSEO::getIDfromURL($segments[0], 'region');
}else{
$query['cid'] = DJClassifiedsSEO::getIDfromURL($segments[0], 'category');
}
}else if($temp_view){
$query['view'] = $temp_view;
if(!isset($query['id']) && isset($segments[0])){
$query['id'] = $segments[0];
}
}else{
if(!isset($query['view']) && isset($segments[0])){
$query['view'] = $segments[0];
}
if(!isset($query['id']) && isset($segments[1])){
$query['id'] = $segments[1];
}
}
}
}
$segments = array();
return $query;
}
}