<?php /** * JEvents Component for Joomla! 3.x * * @version $Id: modfunctions.php 3549 2012-04-20 09:26:21Z geraintedwards $ * @package JEvents * @copyright Copyright (C) 2008-2019 GWE Systems Ltd, 2006-2008 JEvents Project Group * @license GNU/GPLv2, see http://www.gnu.org/licenses/gpl-2.0.html * @link http://www.jevents.net */ // functions used by the modules defined( '_JEXEC' ) or die( 'Restricted access' ); use Joomla\Utilities\ArrayHelper; use Joomla\String\StringHelper; function findAppropriateMenuID (&$catidsOut, &$modcatids, &$catidList, $modparams, &$showall){ // Itemid, search for menuid with lowest access rights $user = JFactory::getUser(); $db = JFactory::getDbo(); $jinput = JFactory::getApplication()->input; // Do we ignore category filters? $ignorecatfilter = 0; if (isset($modparams->ignorecatfilter) && $modparams->ignorecatfilter){ $ignorecatfilter = $modparams->ignorecatfilter; $jinput->set("category_fv", 0); } $menu = JFactory::getApplication()->getMenu(); $menuitems = $menu->getItems("component",JEV_COM_COMPONENT); // restrict this list to those accessible by the user if (!is_null($menuitems)){ foreach ($menuitems as $index=>$menuitem) { if (version_compare(JVERSION, '1.6.0', '>=') ? !in_array($menuitem->access,JEVHelper::getAid($user, 'array')) : JEVHelper::getAid($user)<$menuitem->access){ unset($menuitems[$index]); } // also drop admin functions else if (array_key_exists("task",$menuitem->query) && strpos($menuitem->query['task'],'admin')===0){ unset($menuitems[$index]); } } } else { $menuitems = array(); } $activeMenu = $menu->getActive(); if (isset($modparams->target_itemid) && $modparams->target_itemid != '' && intval($modparams->target_itemid)>0){ $targetid = intval($modparams->target_itemid); $myItemid = 0; foreach ($menuitems as $item) { if ($targetid == $item->id) { $myItemid = $targetid; break; } } } else if ($activeMenu && $activeMenu->component==JEV_COM_COMPONENT){ // use result by reference $myItemid = $activeMenu->id; } else { if (count($menuitems)>0){ reset($menuitems); $myItemid = current($menuitems); $myItemid = $myItemid->id; } else { // if no menu pointing the JEvents use itemid of home page and set empty menu array $myItemid = 1; $menuitems = array(); } } // put the best guess first for checking category selections if ($myItemid>0){ $newmenuitems =array(); foreach ($menuitems as $item) { if ($myItemid == $item->id) { array_unshift($newmenuitems, $item); } else { array_push($newmenuitems, $item); } } $menuitems = $newmenuitems; } //Finds the first enclosing setof catids from menu item if it exists ! // // First of all get the module paramaters $c=0; $modcatids = array(); $catidList = ""; // New system $newcats = isset($modparams->catidnew)?$modparams->catidnew: false; if ($newcats && is_array($newcats )){ foreach ($newcats as $newcat){ if ( !in_array( $newcat,$modcatids )){ $modcatids[]=$newcat; $catidList .= (JString::strlen($catidList)>0?",":"").$newcat; } } } else { for ($c=0;$c<999;$c++){ $nextCID="catid$c"; // stop looking for more catids when you reach the last one! if (!isset($modparams->$nextCID)) break; if ($modparams->$nextCID>0 && !in_array($modparams->$nextCID,$modcatids)){ $modcatids[]=$modparams->$nextCID; $catidList .= (JString::strlen($catidList)>0?",":"").$modparams->$nextCID; } } } if (count($modcatids)==0){ $showall = true; } $catidsOut = str_replace(",","|",$catidList); $params = JComponentHelper::getParams(JEV_COM_COMPONENT); $separator = $params->get("catseparator","|"); $catidsOut = str_replace("|", $separator,$catidsOut); // Now check the catids from the URL $catidsin = JRequest::getString("catids",""); // if ignoring catid filter then force to blank if ($ignorecatfilter) $catidsin = ""; if (JString::strlen($catidsin)>0){ $catidsin = explode($separator,$catidsin); $catidsin = ArrayHelper::toInteger($catidsin); } else { // if no catids from the URL then stick to the module catids $catidsin = $modcatids; } // if we have no modcatids then the enclosing set MUST be all categories and catids must therefore also be empty! if (count($modcatids)==0){ if (count($catidsin)>0){ $modcatids=$catidsin; } //return $myItemid; } else { foreach ($modcatids as $key=>$modcatid) { if (!in_array($modcatid,$catidsin)){ unset($modcatids[$key]); } } // if we have no categories left then we have to force the result set to be empty so add a -1 category // since accessibleCategoryList uses a count of zero catids to allow them all! if (count($modcatids)==0){ $modcatids[]=-1; } } $catidsOut=implode("|",$modcatids); $catidList=implode(",",$modcatids); $catidsOut = str_replace("|", $separator,$catidsOut); if ($myItemid == 0){ // User has specified a non JEvents menu so catid filters won't work $myItemid = intval($modparams->target_itemid); return $myItemid; } // if we are not inside a real module i.e. in the legend beneath the calendar we just use the Itemid we are currently on if ((!isset($modparams->target_itemid) || $modparams->target_itemid=="") && $activeMenu && $activeMenu->component==JEV_COM_COMPONENT){ return $activeMenu->id; } // now find an appropriate enclosing set and associated menu item $possibleset = array(); foreach ($menuitems as $testparms) { $test = new JRegistry( $testparms->params); $c=0; $catids = array(); // New system $newcats = $test->get("catidnew", false); if ($newcats && is_array($newcats )){ foreach ($newcats as $newcat){ if ( !in_array( $newcat,$catids )){ $catids[]=$newcat; } } } else { while ($nextCatId = $test->get( "catid$c", null )){ if (!in_array($nextCatId,$catids)){ $catids[]=$nextCatId; } $c++; } } // Now check if its an enclosing set of catids so we use this one if the targetid has not been explicitly set if (count($catids)==0 && !isset($targetid) && !($activeMenu && $activeMenu->component==JEV_COM_COMPONENT)) { $Itemid = JEVHelper::getItemid(); $myItemid = intval($testparms->id); return $myItemid; break; } else { // if we have no modcatids then the enclosing set MUST be all categories and catids must therefore also be empty! if (count($modcatids)>0){ $enclosed = true; foreach ($modcatids as $cid){ if (!in_array($cid,$catids)) { $enclosed = false; } } // if enclosed or menu item is not constrained if ($enclosed) { $possibleset[]=intval($testparms->id); break; } else if ( count($catids)==0){ $possibleset[]=intval($testparms->id); } } } } if (in_array($myItemid,$possibleset)){ return $myItemid; } else if (count($possibleset)>0){ return $possibleset[0]; } return $myItemid; }