/components/com_contact/helpers/route.php
https://github.com/pjwiseman/joomla-cms · PHP · 212 lines · 129 code · 28 blank · 55 comment · 33 complexity · 62330e6306b79d6442aefd9c528bdab3 MD5 · raw file
- <?php
- /**
- * @package Joomla.Site
- * @subpackage com_contact
- *
- * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
- * @license GNU General Public License version 2 or later; see LICENSE.txt
- */
- defined('_JEXEC') or die;
- /**
- * Contact Component Route Helper
- *
- * @static
- * @package Joomla.Site
- * @subpackage com_contact
- * @since 1.5
- */
- abstract class ContactHelperRoute
- {
- protected static $lookup;
- /**
- * Get the URL route for a contact from a contact ID, contact category ID and language
- *
- * @param integer $id The id of the contact
- * @param integer $catid The id of the contact's category
- * @param mixed $language The id of the language being used.
- *
- * @return string The link to the contact
- *
- * @since 1.5
- */
- public static function getContactRoute($id, $catid, $language = 0)
- {
- $needles = array(
- 'contact' => array((int) $id)
- );
- // Create the link
- $link = 'index.php?option=com_contact&view=contact&id=' . $id;
- if ($catid > 1)
- {
- $categories = JCategories::getInstance('Contact');
- $category = $categories->get($catid);
- if ($category)
- {
- $needles['category'] = array_reverse($category->getPath());
- $needles['categories'] = $needles['category'];
- $link .= '&catid=' . $catid;
- }
- }
- if ($language && $language != "*" && JLanguageMultilang::isEnabled())
- {
- $link .= '&lang=' . $language;
- $needles['language'] = $language;
- }
- if ($item = self::_findItem($needles))
- {
- $link .= '&Itemid=' . $item;
- }
- return $link;
- }
- /**
- * Get the URL route for a contact category from a contact category ID and language
- *
- * @param mixed $catid The id of the contact's category either an integer id or a instance of JCategoryNode
- * @param mixed $language The id of the language being used.
- *
- * @return string The link to the contact
- *
- * @since 1.5
- */
- public static function getCategoryRoute($catid, $language = 0)
- {
- if ($catid instanceof JCategoryNode)
- {
- $id = $catid->id;
- $category = $catid;
- }
- else
- {
- $id = (int) $catid;
- $category = JCategories::getInstance('Contact')->get($id);
- }
- if ($id < 1 || !($category instanceof JCategoryNode))
- {
- $link = '';
- }
- else
- {
- $needles = array();
- // Create the link
- $link = 'index.php?option=com_contact&view=category&id=' . $id;
- $catids = array_reverse($category->getPath());
- $needles['category'] = $catids;
- $needles['categories'] = $catids;
- if ($language && $language != "*" && JLanguageMultilang::isEnabled())
- {
- $link .= '&lang=' . $language;
- $needles['language'] = $language;
- }
- if ($item = self::_findItem($needles))
- {
- $link .= '&Itemid=' . $item;
- }
- }
- return $link;
- }
- /**
- * Find an item ID.
- *
- * @param array $needles An array of language codes.
- *
- * @return mixed The ID found or null otherwise.
- *
- * @since 1.6
- */
- protected static function _findItem($needles = null)
- {
- $app = JFactory::getApplication();
- $menus = $app->getMenu('site');
- $language = isset($needles['language']) ? $needles['language'] : '*';
- // Prepare the reverse lookup array.
- if (!isset(self::$lookup[$language]))
- {
- self::$lookup[$language] = array();
- $component = JComponentHelper::getComponent('com_contact');
- $attributes = array('component_id');
- $values = array($component->id);
- if ($language != '*')
- {
- $attributes[] = 'language';
- $values[] = array($needles['language'], '*');
- }
- $items = $menus->getItems($attributes, $values);
- foreach ($items as $item)
- {
- if (isset($item->query) && isset($item->query['view']))
- {
- $view = $item->query['view'];
- if (!isset(self::$lookup[$language][$view]))
- {
- self::$lookup[$language][$view] = array();
- }
- if (isset($item->query['id']))
- {
- /**
- * Here it will become a bit tricky
- * language != * can override existing entries
- * language == * cannot override existing entries
- */
- if (!isset(self::$lookup[$language][$view][$item->query['id']]) || $item->language != '*')
- {
- self::$lookup[$language][$view][$item->query['id']] = $item->id;
- }
- }
- }
- }
- }
- if ($needles)
- {
- foreach ($needles as $view => $ids)
- {
- if (isset(self::$lookup[$language][$view]))
- {
- foreach ($ids as $id)
- {
- if (isset(self::$lookup[$language][$view][(int) $id]))
- {
- return self::$lookup[$language][$view][(int) $id];
- }
- }
- }
- }
- }
- // Check if the active menuitem matches the requested language
- $active = $menus->getActive();
- if ($active && ($language == '*' || in_array($active->language, array('*', $language)) || !JLanguageMultilang::isEnabled()))
- {
- return $active->id;
- }
- // If not found, return language specific home link
- $default = $menus->getDefault($language);
- return !empty($default->id) ? $default->id : null;
- }
- }