public function display($cachable = false, $urlparams = false) { $menu = $this->app->getMenu (); $home = $menu->getActive (); if (!$home) { JRequest::setVar ( 'view', 'category' ); JRequest::setVar ( 'layout', 'list' ); //JError::raiseError ( 500, JText::_ ( 'COM_KUNENA_NO_ACCESS' ) ); } else { // Find default menu item $default = $this->_getDefaultMenuItem($menu, $home); if (!$default || $default->id == $home->id) { // There is no default menu item, use category view instead $default = $menu->getItem ( KunenaRoute::getItemID("index.php?option=com_kunena&view=category&layout=list") ); if ($default) { $default = clone $default; $defhome = KunenaRoute::getHome($default); if (!$defhome || $defhome->id != $home->id) $default = clone $home; $default->query['view'] = 'category'; $default->query['layout'] = 'list'; } } if (!$default) { JError::raiseError ( 500, JText::_ ( 'COM_KUNENA_NO_ACCESS' ) ); } // Add query variables from shown menu item foreach ( $default->query as $var => $value ) { JRequest::setVar ( $var, $value ); } // Remove query variables coming from the home menu item JRequest::setVar ( 'defaultmenu', null ); // Set active menu item to point the real page $menu->setActive ( $default->id ); } // Reset our router KunenaRoute::initialize(); // Run display task from our new controller $controller = KunenaController::getInstance(); $controller->execute ('display'); // Set redirect and message $this->setRedirect ($controller->getRedirect(), $controller->getMessage(), $controller->getMessageType()); }
/** * Redirect to home page. * * @return KunenaLayout * * @throws KunenaExceptionAuthorise */ public function execute() { $menu = $this->app->getMenu(); $home = $menu->getActive(); if (!$home) { $this->input->set('view', 'category'); $this->input->set('layout', 'list'); // throw new KunenaExceptionAuthorise(JText::_('COM_KUNENA_NO_ACCESS'), 500); } else { // Find default menu item. $default = $this->getDefaultMenuItem($menu, $home); if (!$default || $default->id == $home->id) { // There is no default menu item, use category view instead. $default = $menu->getItem(KunenaRoute::getItemID('index.php?option=com_kunena&view=category&layout=list')); if ($default) { $default = clone $default; $defhome = KunenaRoute::getHome($default); if (!$defhome || $defhome->id != $home->id) { $default = clone $home; } $default->query['view'] = 'category'; $default->query['layout'] = 'list'; } } if (!$default) { throw new KunenaExceptionAuthorise(JText::_('COM_KUNENA_NO_ACCESS'), 500); } // Add query variables from shown menu item. foreach ($default->query as $var => $value) { $this->input->set($var, $value); } // Remove query variables coming from the home menu item. $this->input->set('defaultmenu', null); // Set active menu item to point the real page. $this->input->set('Itemid', $default->id); $menu->setActive($default->id); } // Reset our router. KunenaRoute::initialize(); // Get HMVC controller for the current page. $controller = KunenaControllerApplication::getInstance($this->input->getCmd('view'), $this->input->getCmd('layout', 'default'), $this->input->getCmd('task', 'display'), $this->input, $this->app); if (!$controller) { throw new KunenaExceptionAuthorise(JText::_('COM_KUNENA_NO_ACCESS'), 404); } return $controller->execute(); }
?> </label> <?php } ?> <a href="index.php?option=com_kunena&view=topic&layout=reply&catid=<?php echo $message->catid; ?> &id=<?php echo $message->thread; ?> &mesid=<?php echo $message->id; ?> &Itemid=<?php echo KunenaRoute::getItemID(); ?> " role="button" class="btn btn-default btn-small btn-link pull-right" rel="nofollow"><?php echo JText::_('COM_KUNENA_GO_TO_EDITOR'); ?> </a> </div> <?php if (!empty($this->captchaEnabled)) { ?> <div class="control-group"> <label class="control-label"><?php echo JText::_('COM_KUNENA_CAPDESC'); ?> </label> <div class="controls"> <div id="dynamic_recaptcha_<?php
/** * Prepare category list display. * * @return void */ protected function before() { parent::before(); require_once KPATH_SITE . '/models/topics.php'; $this->model = new KunenaModelTopics(array(), $this->input); $this->model->initialize($this->getOptions(), $this->getOptions()->get('embedded', false)); $this->state = $this->model->getState(); $this->me = KunenaUserHelper::getMyself(); $this->moreUri = null; $this->embedded = $this->getOptions()->get('embedded', false); if ($this->embedded) { $this->moreUri = new JUri('index.php?option=com_kunena&view=topics&layout=posts&mode=' . $this->state->get('list.mode') . '&userid=' . $this->state->get('user') . '&sel=' . $this->state->get('list.time') . '&limit=' . $this->state->get('list.limit')); $this->moreUri->setVar('Itemid', KunenaRoute::getItemID($this->moreUri)); } $start = $this->state->get('list.start'); $limit = $this->state->get('list.limit'); // Handle &sel=x parameter. $time = $this->state->get('list.time'); if ($time < 0) { $time = null; } elseif ($time == 0) { $time = new JDate(KunenaFactory::getSession()->lasttime); } else { $time = new JDate(JFactory::getDate()->toUnix() - $time * 3600); } $userid = $this->state->get('user'); $user = is_numeric($userid) ? KunenaUserHelper::get($userid) : null; // Get categories for the filter. $categoryIds = $this->state->get('list.categories'); $reverse = !$this->state->get('list.categories.in'); $authorise = 'read'; $order = 'time'; $finder = new KunenaForumMessageFinder(); $finder->filterByTime($time); switch ($this->state->get('list.mode')) { case 'unapproved': $authorise = 'topic.post.approve'; $finder->filterByUser(null, 'author')->filterByHold(array(1)); break; case 'deleted': $authorise = 'topic.post.undelete'; $finder->filterByUser($user, 'author')->filterByHold(array(2, 3)); break; case 'mythanks': $finder->filterByUser($user, 'thanker')->filterByHold(array(0)); break; case 'thankyou': $finder->filterByUser($user, 'thankee')->filterByHold(array(0)); break; default: $finder->filterByUser($user, 'author')->filterByHold(array(0)); break; } $categories = KunenaForumCategoryHelper::getCategories($categoryIds, $reverse, $authorise); $finder->filterByCategories($categories); $this->pagination = new KunenaPagination($finder->count(), $start, $limit); if ($this->moreUri) { $this->pagination->setUri($this->moreUri); } $this->messages = $finder->order($order, -1)->start($this->pagination->limitstart)->limit($this->pagination->limit)->find(); // Load topics... $topicIds = array(); foreach ($this->messages as $message) { $topicIds[(int) $message->thread] = (int) $message->thread; } $this->topics = KunenaForumTopicHelper::getTopics($topicIds, 'none'); $userIds = $mesIds = array(); foreach ($this->messages as $message) { $userIds[(int) $message->userid] = (int) $message->userid; $mesIds[(int) $message->id] = (int) $message->id; } if ($this->topics) { $this->prepareTopics($userIds, $mesIds); } switch ($this->state->get('list.mode')) { case 'unapproved': $this->headerText = JText::_('COM_KUNENA_VIEW_TOPICS_POSTS_MODE_UNAPPROVED'); $actions = array('approve', 'delete', 'permdelete'); break; case 'deleted': $this->headerText = JText::_('COM_KUNENA_VIEW_TOPICS_POSTS_MODE_DELETED'); $actions = array('undelete', 'delete', 'permdelete'); break; case 'mythanks': $this->headerText = JText::_('COM_KUNENA_VIEW_TOPICS_POSTS_MODE_MYTHANKS'); $actions = array('approve', 'delete', 'permdelete'); break; case 'thankyou': $this->headerText = JText::_('COM_KUNENA_VIEW_TOPICS_POSTS_MODE_THANKYOU'); $actions = array('approve', 'delete', 'permdelete'); break; case 'recent': default: $this->headerText = JText::_('COM_KUNENA_VIEW_TOPICS_POSTS_MODE_DEFAULT'); $actions = array('delete', 'permdelete'); } $this->actions = $this->getMessageActions($this->messages, $actions); }
/** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array|bool $urlparams An array of safe url parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JControllerLegacy A JControllerLegacy object to support chaining. */ public function display($cachable = false, $urlparams = false) { KUNENA_PROFILER ? $this->profiler->mark('beforeDisplay') : null; KUNENA_PROFILER ? KunenaProfiler::instance()->start('function ' . __CLASS__ . '::' . __FUNCTION__ . '()') : null; // Get the document object. $document = JFactory::getDocument(); // Set the default view name and format from the Request. $vName = JRequest::getWord('view', $this->app->isAdmin() ? 'cpanel' : 'home'); $lName = JRequest::getWord('layout', 'default'); $vFormat = $document->getType(); if ($this->app->isAdmin()) { // Load admin language files KunenaFactory::loadLanguage('com_kunena.install', 'admin'); KunenaFactory::loadLanguage('com_kunena.views', 'admin'); // Load last to get deprecated language files to work KunenaFactory::loadLanguage('com_kunena', 'admin'); // Version warning require_once KPATH_ADMIN . '/install/version.php'; $version = new KunenaVersion(); $version_warning = $version->getVersionWarning(); if (!empty($version_warning)) { $this->app->enqueueMessage($version_warning, 'notice'); } } else { // Load site language files KunenaFactory::loadLanguage('com_kunena.views'); KunenaFactory::loadLanguage('com_kunena.templates'); // Load last to get deprecated language files to work KunenaFactory::loadLanguage('com_kunena'); $menu = $this->app->getMenu(); $active = $menu->getActive(); // Check if menu item was correctly routed $routed = $menu->getItem(KunenaRoute::getItemID()); if ($vFormat == 'html' && !empty($routed->id) && (empty($active->id) || $active->id != $routed->id)) { // Routing has been changed, redirect // FIXME: check possible redirect loops! $route = KunenaRoute::_(null, false); $activeId = !empty($active->id) ? $active->id : 0; JLog::add("Redirect from " . JUri::getInstance()->toString(array('path', 'query')) . " ({$activeId}) to {$route} ({$routed->id})", JLog::DEBUG, 'kunena'); $this->app->redirect($route); } // Joomla 2.5+ multi-language support /* // FIXME: if (isset($active->language) && $active->language != '*') { $language = JFactory::getDocument()->getLanguage(); if (strtolower($active->language) != strtolower($language)) { $route = KunenaRoute::_(null, false); JLog::add("Language redirect from ".JUri::getInstance()->toString(array('path', 'query'))." to {$route}", JLog::DEBUG, 'kunena'); $this->redirect ($route); } } */ } $view = $this->getView($vName, $vFormat); if ($view) { if ($this->app->isSite() && $vFormat == 'html') { $common = $this->getView('common', $vFormat); $model = $this->getModel('common'); $common->setModel($model, true); $view->ktemplate = $common->ktemplate = KunenaFactory::getTemplate(); $view->common = $common; } // Set the view layout. $view->setLayout($lName); // Get the appropriate model for the view. $model = $this->getModel($vName); // Push the model into the view (as default). $view->setModel($model, true); // Push document object into the view. $view->document = $document; // Render the view. if ($vFormat == 'html') { JPluginHelper::importPlugin('kunena'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('onKunenaDisplay', array('start', $view)); $view->displayAll(); $dispatcher->trigger('onKunenaDisplay', array('end', $view)); } else { $view->displayLayout(); } } KUNENA_PROFILER ? KunenaProfiler::instance()->stop('function ' . __CLASS__ . '::' . __FUNCTION__ . '()') : null; return $this; }
public static function getCategoryItemid(KunenaForumCategory $category) { return KunenaRoute::getItemID("index.php?option=com_kunena&view=category&catid={$category->id}"); }
/** * Prepare user's topic list. * * @return void */ protected function before() { parent::before(); require_once KPATH_SITE . '/models/topics.php'; $this->model = new KunenaModelTopics(array(), $this->input); $this->model->initialize($this->getOptions(), $this->getOptions()->get('embedded', false)); $this->state = $this->model->getState(); $this->me = KunenaUserHelper::getMyself(); $this->moreUri = null; $this->embedded = $this->getOptions()->get('embedded', false); if ($this->embedded) { $this->moreUri = new JUri('index.php?option=com_kunena&view=topics&layout=user&mode=' . $this->state->get('list.mode') . '&userid=' . $this->state->get('user') . '&sel=' . $this->state->get('list.time') . '&limit=' . $this->state->get('list.limit')); $this->moreUri->setVar('Itemid', KunenaRoute::getItemID($this->moreUri)); } $start = $this->state->get('list.start'); $limit = $this->state->get('list.limit'); // Handle &sel=x parameter. $time = $this->state->get('list.time'); if ($time < 0) { $time = null; } elseif ($time == 0) { $time = new JDate(KunenaFactory::getSession()->lasttime); } else { $time = new JDate(JFactory::getDate()->toUnix() - ($time * 3600)); } $user = KunenaUserHelper::get($this->state->get('user')); // Get categories for the filter. $categoryIds = $this->state->get('list.categories'); $reverse = !$this->state->get('list.categories.in'); $authorise = 'read'; $order = 'last_post_time'; $finder = new KunenaForumTopicFinder; $finder ->filterByMoved(false) ->filterByHold(array(0)) ->filterByTime($time); switch ($this->state->get('list.mode')) { case 'posted' : $finder ->filterByUser($user, 'posted') ->order('last_post_id', -1, 'ut'); break; case 'started' : $finder->filterByUser($user, 'owner'); break; case 'favorites' : $finder->filterByUser($user, 'favorited'); break; case 'subscriptions' : $finder->filterByUser($user, 'subscribed'); break; default : $finder ->filterByUser($user, 'involved') ->order('favorite', -1, 'ut'); break; } $categories = KunenaForumCategoryHelper::getCategories($categoryIds, $reverse, $authorise); $finder->filterByCategories($categories); $this->pagination = new KunenaPagination($finder->count(), $start, $limit); if ($this->moreUri) { $this->pagination->setUri($this->moreUri); } $this->topics = $finder ->order($order, -1) ->start($this->pagination->limitstart) ->limit($this->pagination->limit) ->find(); if ($this->topics) { $this->prepareTopics(); } $actions = array('delete', 'approve', 'undelete', 'move', 'permdelete'); switch ($this->state->get('list.mode')) { case 'posted' : $this->headerText = JText::_('COM_KUNENA_VIEW_TOPICS_USERS_MODE_POSTED'); break; case 'started' : $this->headerText = JText::_('COM_KUNENA_VIEW_TOPICS_USERS_MODE_STARTED'); break; case 'favorites' : $this->headerText = JText::_('COM_KUNENA_VIEW_TOPICS_USERS_MODE_FAVORITES'); $actions = array('unfavorite'); break; case 'subscriptions' : $this->headerText = JText::_('COM_KUNENA_VIEW_TOPICS_USERS_MODE_SUBSCRIPTIONS'); $actions = array('unsubscribe'); break; case 'plugin' : $this->headerText = JText::_('COM_KUNENA_VIEW_TOPICS_USERS_MODE_PLUGIN_' . strtoupper($this->state->get('list.modetype'))); break; default : $this->headerText = JText::_('COM_KUNENA_VIEW_TOPICS_USERS_MODE_DEFAULT'); } $this->actions = $this->getTopicActions($this->topics, $actions); }
/** * Method to display a view. * * @return void * @since 1.6 */ public function display($cachable = false, $urlparams = false) { KUNENA_PROFILER ? $this->profiler->mark('beforeDisplay') : null; KUNENA_PROFILER ? KunenaProfiler::instance()->start('function ' . __CLASS__ . '::' . __FUNCTION__ . '()') : null; $app = JFactory::getApplication(); if ($app->isAdmin()) { // Version warning require_once KPATH_ADMIN . '/install/version.php'; $version = new KunenaVersion(); $version_warning = $version->getVersionWarning(); if (!empty($version_warning)) { $app->enqueueMessage($version_warning, 'notice'); } } else { $menu = $app->getMenu(); $active = $menu->getActive(); // Check if menu item was correctly routed $routed = $menu->getItem(KunenaRoute::getItemID()); /* if (!$active) { // FIXME: we may want to resctrict access only to menu items JError::raiseError ( 500, JText::_ ( 'COM_KUNENA_NO_ACCESS' ) ); } */ if ($active->id != $routed->id) { // Routing has been changed, redirect // FIXME: check possible redirect loops! $app->redirect(KunenaRoute::_(null, false)); } // Joomla 1.6+ multi-language support /* // FIXME: if (isset($active->language) && $active->language != '*') { $language = JFactory::getDocument()->getLanguage(); if (strtolower($active->language) != strtolower($language)) { $this->redirect (KunenaRoute::_(null, false)); } } */ } // Get the document object. $document = JFactory::getDocument(); // Set the default view name and format from the Request. $vName = JRequest::getWord('view', 'none'); $lName = JRequest::getWord('layout', 'default'); $vFormat = $document->getType(); $view = $this->getView($vName, $vFormat); if ($view) { if ($app->isSite() && $vFormat == 'html') { $common = $this->getView('common', $vFormat); $model = $this->getModel('common'); $common->setModel($model, true); $view->ktemplate = $common->ktemplate = KunenaFactory::getTemplate(); $view->common = $common; } // Get the appropriate model for the view. $model = $this->getModel($vName); // Push the model into the view (as default). $view->setModel($model, true); // Set the view layout. $view->setLayout($lName); // Push document object into the view. $view->document = $document; // Render the view. if ($vFormat == 'html') { JPluginHelper::importPlugin('kunena'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('onKunenaDisplay', array('start', $view)); $view->displayAll(); $dispatcher->trigger('onKunenaDisplay', array('end', $view)); } else { $view->displayLayout(); } } KUNENA_PROFILER ? KunenaProfiler::instance()->stop('function ' . __CLASS__ . '::' . __FUNCTION__ . '()') : null; }
echo 'checked="checked"'; } ?> /> <label class="string optional" for="subscribeMe"><?php echo JText::_('COM_KUNENA_POST_NOTIFIED'); ?></label> </div> <?php if ($me->exists() && $category->allow_anonymous) : ?> <div class="controls"> <input type="checkbox" id="kanonymous<?php echo $message->displayField('id'); ?>" name="anonymous" value="1" class="kinputbox postinput" <?php if ($category->post_anonymous) echo 'checked="checked"'; ?> /> <label for="kanonymous<?php echo intval($message->id); ?>"> <?php echo JText::_('COM_KUNENA_POST_AS_ANONYMOUS_DESC'); ?> </label> </div> <?php endif; ?> </div> <?php endif; ?> <a href="index.php?option=com_kunena&view=topic&layout=reply&catid=<?php echo $message->catid;?>&id=<?php echo $message->thread;?>&mesid=<?php echo $message->id;?>&Itemid=<?php echo KunenaRoute::getItemID();?>" role="button" class="btn btn-small btn-link pull-right" rel="nofollow"><?php echo JText::_('COM_KUNENA_GO_TO_EDITOR'); ?></a> </div> <?php if (!empty($this->captchaEnabled) && version_compare(JVERSION, '3.5', '<')) : ?> <div class="control-group"> <div id="dynamic_recaptcha_<?php echo $this->message->id; ?>"> </div> </div> <?php else : ?> <?php // Fixme: can't get the controller working on this if ($me->canDoCaptcha() ) { if (JPluginHelper::isEnabled('captcha')) { $plugin = JPluginHelper::getPlugin('captcha'); $params = new JRegistry($plugin[0]->params); $captcha_pubkey = $params->get('public_key');
static private function getItemid( $htmlspecialchars = false ) { static $Itemid = null; if ( ! isset( $Itemid ) ) { $Itemid = KunenaRoute::getItemID(); } if ( $Itemid ) { if ( is_bool( $htmlspecialchars ) ) { return ( $htmlspecialchars ? '&' : '&' ) . 'Itemid=' . $Itemid; } else { return $Itemid; } } }
function __construct() { ob_start(); // Display time it took to create the entire page in the footer jimport('joomla.error.profiler'); $__kstarttime = JProfiler::getmicrotime(); $kunena_config = KunenaFactory::getConfig(); kimport('error'); KunenaError::initialize(); // First of all take a profiling information snapshot for JFirePHP if (JDEBUG) { require_once JPATH_COMPONENT . '/lib/kunena.profiler.php'; $__profiler = KProfiler::GetInstance(); $__profiler->mark('Start'); } $func = JString::strtolower(JRequest::getCmd('func', JRequest::getCmd('view', ''))); $do = JRequest::getCmd('do', ''); $task = JRequest::getCmd('task', ''); $format = JRequest::getCmd('format', 'html'); JRequest::setVar('func', $func); // Workaround for Joomla 1.7.3 login bug, see: https://github.com/joomla/joomla-platform/pull/740 if ($func == 'profile' && ($task == 'login' || $task == 'logout')) { require_once KUNENA_PATH_FUNCS . '/profile.php'; $page = new CKunenaProfile(JFactory::getUser()->id, $task); } require_once KUNENA_PATH . '/router.php'; if ($func && !isset(KunenaRouter::$functions[$func])) { // If func is not legal, raise joomla error return JError::raiseError(404, 'Kunena function "' . $func . '" not found'); } $kunena_app = JFactory::getApplication(); if (empty($_POST) && $format == 'html') { $me = KunenaFactory::getUser(); $menu = JSite::getMenu(); $active = $menu->getActive(); // Joomla 1.6+ multi-language support if (isset($active->language) && $active->language != '*') { $language = JFactory::getDocument()->getLanguage(); if (strtolower($active->language) != strtolower($language)) { $this->redirect(KunenaRoute::_(null, false)); } } // Legacy menu item and Itemid=0 support with redirect and notice if (empty($active->query['view'])) { $new = $menu->getItem(KunenaRoute::getItemID()); if ($new) { if ($active) { if ($active->route == $new->route) { KunenaError::warning(JText::sprintf('COM_KUNENA_WARNING_MENU_CONFLICT', $active->route, $active->id, $new->id), 'menu'); $menu->setActive($new->id); $active = $new; } else { KunenaError::warning(JText::sprintf('COM_KUNENA_WARNING_MENU_LEGACY', $active->route, $active->id, $new->route, $new->id), 'menu'); $this->redirect(KunenaRoute::_(null, false)); } } else { KunenaError::warning(JText::sprintf('COM_KUNENA_WARNING_MENU_NO_ITEM_REDIRECT', $new->route, $new->id)); $this->redirect(KunenaRoute::_(null, false)); } } elseif (!$active) { KunenaError::warning(JText::sprintf('COM_KUNENA_WARNING_MENU_NO_ITEM')); } } if (!$func || $func == 'entrypage') { // If we are currently in entry page, we need to show and highlight default menu item if (!empty($active->query['defaultmenu'])) { $defaultitem = $active->query['defaultmenu']; if ($defaultitem > 0) { $newitem = $menu->getItem($defaultitem); if (!$newitem) { KunenaError::warning(JText::sprintf('COM_KUNENA_WARNING_MENU_NOT_EXISTS'), 'menu'); } elseif (empty($newitem->component) || $newitem->component != 'com_kunena') { KunenaError::warning(JText::sprintf('COM_KUNENA_WARNING_MENU_NOT_KUNENA'), 'menu'); } elseif ($active->route == $newitem->route) { // Special case: we are using Entry Page instead of menu alias and we have identical menu alias if ($active->id != $newitem->id) { $defaultitem = !empty($newitem->query['defaultmenu']) ? $newitem->query['defaultmenu'] : $newitem->id; $newitem2 = $menu->getItem($defaultitem); if (empty($newitem2->component) || $newitem2->component != 'com_kunena') { $defaultitem = $newitem->id; } if ($defaultitem) { $menu->setActive($defaultitem); $active = $menu->getActive(); } } } else { $oldlocation = KunenaRoute::getCurrentMenu(); $menu->setActive($defaultitem); $active = $menu->getActive(); $newlocation = KunenaRoute::getCurrentMenu(); if (!$oldlocation || $oldlocation->id != $newlocation->id) { // Follow Default Menu Item if it's not in the same menu $this->redirect(KunenaRoute::_($defaultitem, false)); } } if (is_object($active)) { foreach ($active->query as $var => $value) { if ($var == 'view') { $var = 'func'; } if ($var == 'func' && $value == 'entrypage') { $value = $func; } JRequest::setVar($var, $value); } $func = JRequest::getCmd('func'); } } } } $newItemid = KunenaRoute::getItemid(); if ($active && $newItemid && !KunenaRoute::getCurrentMenu() && $active->id != $newItemid) { $newroute = KunenaRoute::_($newItemid, false); if (strpos('/' . $active->route, $newroute) === 0) { $menu->setActive($newItemid); $active = $menu->getActive(); } else { $this->redirect(KunenaRoute::_(null, false)); } } } global $message; global $kunena_this_cat; // Get all the variables we need and strip them in case $action = JRequest::getCmd('action', ''); $catid = JRequest::getInt('catid', 0); $contentURL = JRequest::getVar('contentURL', ''); $email = JRequest::getVar('email', ''); $favoriteMe = JRequest::getVar('favoriteMe', ''); $fb_authorname = JRequest::getVar('fb_authorname', ''); $fb_thread = JRequest::getInt('fb_thread', 0); $id = JRequest::getInt('id', 0); $mesid = JRequest::getInt('mesid', 0); $limit = JRequest::getInt('limit', 0); $limitstart = JRequest::getInt('limitstart', 0); $markaction = JRequest::getVar('markaction', ''); $message = JRequest::getVar('message', ''); $page = JRequest::getInt('page', 0); $parentid = JRequest::getInt('parentid', 0); $pid = JRequest::getInt('pid', 0); $replyto = JRequest::getInt('replyto', 0); $resubject = JRequest::getVar('resubject', ''); $rowid = JRequest::getInt('rowid', 0); $rowItemid = JRequest::getInt('rowItemid', 0); $subject = JRequest::getVar('subject', ''); $subscribeMe = JRequest::getVar('subscribeMe', ''); $thread = JRequest::getInt('thread', 0); $topic_emoticon = JRequest::getVar('topic_emoticon', ''); $userid = JRequest::getInt('userid', 0); $no_html = JRequest::getBool('no_html', 0); // If JFirePHP is installed and enabled, leave a trace of the Kunena startup if (JDEBUG == 1 && defined('JFIREPHP')) { // FB::trace("Kunena Startup"); } // Redirect Forum Jump if (isset($_POST['func']) && $func == "showcat") { header("HTTP/1.1 303 See Other"); header("Location: " . KunenaRoute::_('index.php?option=com_kunena&func=showcat&catid=' . $catid, false)); $kunena_app->close(); } $kunena_my =& JFactory::getUser(); $kunena_db =& JFactory::getDBO(); $document = JFactory::getDocument(); $document->addScriptDeclaration('// <![CDATA[ var kunena_toggler_close = "' . JText::_('COM_KUNENA_TOGGLER_COLLAPSE') . '"; var kunena_toggler_open = "' . JText::_('COM_KUNENA_TOGGLER_EXPAND') . '"; // ]]>'); global $lang, $topic_emoticons; // Class structure should be used after this and all the common task should be moved to this class require_once JPATH_COMPONENT . '/class.kunena.php'; // Central Location for all internal links require_once JPATH_COMPONENT . '/lib/kunena.link.class.php'; require_once JPATH_COMPONENT . '/lib/kunena.smile.class.php'; // Redirect profile (menu item) to the right component if ($func == 'profile' && !$do && empty($_POST)) { $redirect = 1; if (!empty($active)) { $params = new JParameter($active->params); $redirect = $params->get('integration', 1); } if ($redirect) { $profileIntegration = KunenaFactory::getProfile(); if (!$profileIntegration instanceof KunenaProfileKunena) { $url = CKunenaLink::GetProfileURL($kunena_my->id, false); if ($url) { $this->redirect($url); } } } } // Check for JSON request if ($func == "json") { if (JDEBUG == 1 && defined('JFIREPHP')) { FB::log('Kunena JSON request'); } // URL format for JSON requests: e.g: index.php?option=com_kunena&func=json&action=autocomplete&do=getcat require_once JPATH_COMPONENT . '/lib/kunena.ajax.helper.php'; $ajaxHelper =& CKunenaAjaxHelper::getInstance(); // Get the document object. $document =& JFactory::getDocument(); // Set the MIME type for JSON output. $document->setMimeEncoding('application/json'); // Change the suggested filename. if ($action != 'uploadfile') { JResponse::setHeader('Content-Disposition', 'attachment; filename="kunena.json"'); } $value = JRequest::getVar('value', ''); JResponse::sendHeaders(); if ($kunena_config->board_offline && !CKunenaTools::isAdmin()) { // when the forum is offline, we don't entertain json requests json_encode(array('status' => '0', 'error' => @sprintf(_KUNENA_FORUM_OFFLINE))); } else { // Generate reponse echo $ajaxHelper->generateJsonResponse($action, $do, $value); } $kunena_app->close(); } if ($kunena_config->board_offline && !CKunenaTools::isAdmin()) { // if the board is offline echo $kunena_config->offline_message; } else { if ($kunena_config->regonly && !$kunena_my->id) { // if we only allow registered users if (file_exists(KUNENA_JTEMPLATEPATH . '/css/kunena.forum-min.css')) { CKunenaTools::addStyleSheet(KUNENA_JTEMPLATEURL . '/css/kunena.forum-min.css'); } else { CKunenaTools::addStyleSheet(KUNENA_TMPLTCSSURL); } echo '<div id="Kunena">'; $this->header = JText::_('COM_KUNENA_LOGIN_NOTIFICATION'); $this->body = JText::_('COM_KUNENA_LOGIN_FORUM'); CKunenaTools::loadTemplate('/login.php'); echo '</div>'; } else { // ======================================================================================= // Forum is online: //intercept the RSS request; we should stop afterwards if ($func == 'rss') { require_once JPATH_COMPONENT . '/funcs/rss.php'; $feed = new CKunenaRSSView($catid); $feed->display(); $kunena_app->close(); } if ($func == 'fb_pdf' || $func == 'pdf') { $httpReferer = JRequest::getVar('HTTP_REFERER', JURI::base(true), 'server'); if (KUNENA_JOOMLA_COMPAT == '1.5') { include JPATH_COMPONENT . '/lib/kunena.pdf.php'; $kunena_app->close(); } } $format = JRequest::getCmd('format', 'html'); if ($format != 'html') { echo "Kunena: Unsupported output format {$format}, please use only format=html or .html"; $kunena_app->close(); } $integration = KunenaFactory::getProfile(); $integration->open(); //time format include_once JPATH_COMPONENT . '/lib/kunena.timeformat.class.php'; $document =& JFactory::getDocument(); if (file_exists(KUNENA_ABSTMPLTPATH . '/initialize.php')) { require_once KUNENA_ABSTMPLTPATH . '/initialize.php'; } else { require_once KPATH_SITE . '/template/default/initialize.php'; } // Insert WhoIsOnlineDatas require_once KUNENA_PATH_LIB . '/kunena.who.class.php'; $who =& CKunenaWhoIsOnline::getInstance(); $who->insertOnlineDatas(); // include required libraries jimport('joomla.template.template'); // Kunena Current Template Icons Pack if (file_exists(KUNENA_ABSTMPLTPATH . '/icons.php')) { include KUNENA_ABSTMPLTPATH . '/icons.php'; } else { include KUNENA_PATH_TEMPLATE_DEFAULT . '/icons.php'; } if (JDEBUG) { $__profiler->mark('Session Start'); } // We only save session for registered users $kunena_session = KunenaFactory::getSession(true); if ($kunena_my->id > 0) { // new indicator handling if ($markaction == "allread") { if (!JRequest::checkToken()) { $kunena_app->enqueueMessage(JText::_('COM_KUNENA_ERROR_TOKEN'), 'error'); while (@ob_end_clean()) { } $kunena_app->redirect(CKunenaLink::GetCategoryURL('listcat', $catid, false)); } $kunena_session->markAllCategoriesRead(); } if (!$kunena_session->save()) { $kunena_app->enqueueMessage(JText::_('COM_KUNENA_ERROR_SESSION_SAVE_FAILED'), 'error'); } if ($markaction == "allread") { while (@ob_end_clean()) { } $kunena_app->redirect(CKunenaLink::GetCategoryURL('listcat', $catid, false), JText::_('COM_KUNENA_GEN_ALL_MARKED')); } $userprofile = KunenaFactory::getUser(); if (!$userprofile->exists()) { $userprofile->save(); } // Assign previous visit without user offset to variable for templates to decide $this->prevCheck = $kunena_session->lasttime; } else { // For guests we don't show new posts $this->prevCheck = CKunenaTimeformat::internalTime() + 60; } if (JDEBUG) { $__profiler->mark('Session End'); } //Get the topics this user has already read this session from #__kunena_sessions $this->read_topics = explode(',', $kunena_session->readtopics); /* _\|/_ (o o) +----oOO-{_}-OOo--------------------------------+ | Until this section we have included the | | necessary files and gathered the required | | variables. Now let's start processing | | them | +----------------------------------------------*/ //Check if the catid requested is a parent category, because if it is //the only thing we can do with it is 'listcat' and nothing else if ($func == "showcat") { if ($catid != 0) { $kunena_db->setQuery("SELECT parent FROM #__kunena_categories WHERE id='{$catid}'"); $catParent = intval($kunena_db->loadResult()); if (KunenaError::checkDatabaseError()) { return; } } if ($catid == 0 || $catParent == 0) { $this->redirect(CKunenaLink::GetCategoryURL('listcat', $catid, false)); } } $kunena_app->setUserState('com_kunena.redirect', null); ?> <div id="Kunena"><?php if ($kunena_config->board_offline) { ?> <span id="fbOffline"><?php echo JText::_('COM_KUNENA_FORUM_IS_OFFLINE'); ?> </span> <?php } ?> <?php if (JDEBUG) { $__profiler->mark('Profilebox Start'); } CKunenaTools::loadTemplate('/menu.php'); CKunenaTools::displayLoginBox(); if (JDEBUG) { $__profiler->mark('Profilebox End'); } // Handle help / rules menuitems if ($func == 'article') { $func = $do; } if (JDEBUG) { $__profiler->mark('$func Start'); } switch ($func) { case 'who': require_once KUNENA_PATH_LIB . '/kunena.who.class.php'; $online =& CKunenaWhoIsOnline::getInstance(); $online->displayWho(); break; case 'announcement': require_once KUNENA_PATH_LIB . '/kunena.announcement.class.php'; $ann = CKunenaAnnouncement::getInstance(); $ann->display(); break; case 'poll': require_once KUNENA_PATH_LIB . '/kunena.poll.class.php'; $kunena_polls =& CKunenaPolls::getInstance(); $kunena_polls->display(); break; case 'polls': require_once KUNENA_PATH_LIB . '/kunena.poll.class.php'; $kunena_polls =& CKunenaPolls::getInstance(); $kunena_polls->polldo(); break; case 'stats': require_once KUNENA_PATH_LIB . '/kunena.stats.class.php'; $kunena_stats = new CKunenaStats(); $kunena_stats->showStats(); break; case 'myprofile': case 'userprofile': case 'fbprofile': case 'profile': case 'moderateuser': require_once KUNENA_PATH_FUNCS . '/profile.php'; $page = new CKunenaProfile($userid, $task ? $task : $do); $page->display(); break; case 'userlist': require_once KUNENA_PATH_FUNCS . '/userlist.php'; $page = new CKunenaUserlist(); $page->display(); break; case 'post': require_once KUNENA_PATH_FUNCS . '/post.php'; $page = new CKunenaPost(); $page->display(); break; case 'view': require_once KUNENA_PATH_FUNCS . '/view.php'; $layout = $kunena_app->getUserStateFromRequest("com_kunena.view_layout", 'layout', 'view'); $page = new CKunenaView($layout, $catid, $id, $limitstart, $limit, $mesid); $page->display(true, true); break; case 'showcat': require_once KUNENA_PATH_FUNCS . '/showcat.php'; $page = new CKunenaShowcat($catid, $page); $page->display(); break; case 'listcat': require_once KUNENA_PATH_FUNCS . '/listcat.php'; $page = new CKunenaListcat($catid); $page->display(); break; case 'review': require_once KUNENA_PATH_LIB . '/kunena.review.php'; $review = new CKunenaReview($catid); $review->display(); break; case 'rules': case 'help': CKunenaTools::loadTemplate('/' . $func . '.php'); break; case 'report': require_once KUNENA_PATH_LIB . '/kunena.report.class.php'; $report = new CKunenaReport(); $report->display(); break; case 'latest': case 'mylatest': case 'noreplies': case 'subscriptions': case 'favorites': case 'userposts': case 'unapproved': case 'deleted': require_once KUNENA_PATH_FUNCS . '/latestx.php'; if ($do) { $func = $do; } $page = new CKunenaLatestX($func, $page); $page->display(); break; case 'search': case 'advsearch': require_once JPATH_COMPONENT . '/lib/kunena.search.class.php'; $kunenaSearch = new CKunenaSearch(); $kunenaSearch->show(); break; case 'markthisread': if (!JRequest::checkToken('get')) { $kunena_app->enqueueMessage(JText::_('COM_KUNENA_ERROR_TOKEN'), 'error'); while (@ob_end_clean()) { } $kunena_app->redirect(CKunenaLink::GetCategoryURL('showcat', $catid, false), JText::_('COM_KUNENA_GEN_FORUM_MARKED')); } // Mark all unread topics in the category to read $readTopics = $kunena_session->readtopics; $kunena_db->setQuery("SELECT thread FROM #__kunena_messages WHERE catid='{$catid}' AND parent=0 AND thread NOT IN ({$readTopics})"); $readForum = $kunena_db->loadResultArray(); if (KunenaError::checkDatabaseError()) { return; } $readTopics = implode(',', array_merge(explode(',', $readTopics), $readForum)); $kunena_db->setQuery("UPDATE #__kunena_sessions set readtopics='{$readTopics}' WHERE userid={$kunena_my->id}"); $kunena_db->query(); if (KunenaError::checkDatabaseError()) { return; } while (@ob_end_clean()) { } $kunena_app->redirect(CKunenaLink::GetCategoryURL('showcat', $catid, false), JText::_('COM_KUNENA_GEN_FORUM_MARKED')); break; case 'subscribecat': if (!JRequest::checkToken('get')) { $kunena_app->enqueueMessage(JText::_('COM_KUNENA_ERROR_TOKEN'), 'error'); if ($userid == 0) { while (@ob_end_clean()) { } $kunena_app->redirect(CKunenaLink::GetCategoryURL('showcat', $catid, false)); } else { while (@ob_end_clean()) { } $kunena_app->redirect(CKunenaLink::GetProfileURL($userid, false)); } } $success_msg = ''; if ($catid && $kunena_my->id) { $query = "INSERT INTO #__kunena_subscriptions_categories (catid, userid) VALUES ('{$catid}','{$kunena_my->id}')"; $kunena_db->setQuery($query); if (@$kunena_db->query() && $kunena_db->getAffectedRows() == 1) { $success_msg = JText::_('COM_KUNENA_GEN_CATEGORY_SUBCRIBED'); } KunenaError::checkDatabaseError(); } while (@ob_end_clean()) { } $kunena_app->redirect(CKunenaLink::GetCategoryURL('showcat', $catid, false), $success_msg); break; case 'unsubscribecat': if (!JRequest::checkToken('get')) { $kunena_app->enqueueMessage(JText::_('COM_KUNENA_ERROR_TOKEN'), 'error'); if ($userid == 0) { while (@ob_end_clean()) { } $kunena_app->redirect(CKunenaLink::GetCategoryURL('showcat', $catid, false), $success_msg); } else { while (@ob_end_clean()) { } $kunena_app->redirect(CKunenaLink::GetProfileURL($userid, false), $success_msg); } } $success_msg = ''; if ($catid && $kunena_my->id) { $query = "DELETE FROM #__kunena_subscriptions_categories WHERE catid={$catid} AND userid={$kunena_my->id}"; $kunena_db->setQuery($query); if ($kunena_db->query() && $kunena_db->getAffectedRows() == 1) { $success_msg = JText::_('COM_KUNENA_GEN_CATEGORY_UNSUBCRIBED'); } KunenaError::checkDatabaseError(); } if ($userid == 0) { while (@ob_end_clean()) { } $kunena_app->redirect(CKunenaLink::GetCategoryURL('showcat', $catid, false), $success_msg); } else { while (@ob_end_clean()) { } $kunena_app->redirect(CKunenaLink::GetProfileURL($userid, false), $success_msg); } break; case 'karma': include JPATH_COMPONENT . '/lib/kunena.karma.php'; break; case 'thankyou': require_once JPATH_COMPONENT . '/lib/kunena.thankyou.php'; $thankyou = new CKunenaThankyou(); $thankyou->setThankyou(); break; case 'bulkactions': switch ($do) { case "bulkDel": CKunenaTools::KDeletePosts(); break; case "bulkMove": CKunenaTools::KMovePosts($catid); break; case "bulkFavorite": if (!JRequest::checkToken()) { $kunena_app->enqueueMessage(JText::_('COM_KUNENA_ERROR_TOKEN'), 'error'); while (@ob_end_clean()) { } $kunena_app->redirect(CKunenaLink::GetProfileURL($kunena_my->id, false)); } require_once JPATH_ROOT . '/administrator/components/com_kunena/libraries/api.php'; $KunenaUserAPI = new KunenaUserAPI(); $cb = KGetArrayReverseInts("cb"); $result = $KunenaUserAPI->unfavoriteThreads($kunena_my->id, $cb); if ($result) { $message = JText::_('COM_KUNENA_USER_UNFAVORITE_YES'); } else { $message = JText::_('COM_KUNENA_POST_UNFAVORITED_TOPIC'); } while (@ob_end_clean()) { } $kunena_app->redirect(CKunenaLink::GetProfileURL($kunena_my->id, false), $message); break; case "bulkSub": if (!JRequest::checkToken()) { $kunena_app->enqueueMessage(JText::_('COM_KUNENA_ERROR_TOKEN'), 'error'); while (@ob_end_clean()) { } $kunena_app->redirect(CKunenaLink::GetProfileURL($kunena_my->id, false)); } require_once JPATH_ROOT . '/administrator/components/com_kunena/libraries/api.php'; $KunenaUserAPI = new KunenaUserAPI(); $cb = KGetArrayReverseInts("cb"); $result = $KunenaUserAPI->unsubscribeThreads($kunena_my->id, $cb); if ($result) { $message = JText::_('COM_KUNENA_USER_UNSUBSCRIBE_YES'); } else { $message = JText::_('COM_KUNENA_POST_NO_UNSUBSCRIBED_TOPIC'); } while (@ob_end_clean()) { } $kunena_app->redirect(CKunenaLink::GetProfileURL($kunena_my->id, false), $message); break; case "bulkDelPerm": CKunenaTools::KDeletePerm(); break; case "bulkRestore": CKunenaTools::KUndelete(); break; } break; case 'template': jimport('joomla.filesystem.path'); $name = JRequest::getString('name', JRequest::getString('kunena_template', '', 'COOKIE')); while (@ob_end_clean()) { } if ($name) { $name = JPath::clean($name); if (!is_readable(KPATH_SITE . "/template/{$name}/template.xml")) { $name = 'default'; } setcookie('kunena_template', $name, 0, JURI::root(true) . '/'); } else { setcookie('kunena_template', null, time() - 3600, JURI::root(true) . '/'); } $kunena_app->redirect(CKunenaLink::GetKunenaURL(false)); break; case 'credits': include JPATH_COMPONENT . '/lib/kunena.credits.php'; break; default: require_once KUNENA_PATH_FUNCS . '/listcat.php'; $page = new CKunenaListcat($catid); $page->display(); break; } if (JDEBUG) { $__profiler->mark('$func End'); } // Bottom Module CKunenaTools::showModulePosition('kunena_bottom'); // PDF and RSS if ($kunena_config->enablerss || $kunena_config->enablepdf) { if ($catid > 0) { kimport('category'); $category = KunenaCategory::getInstance($catid); if ($category->pub_access == 0 && $category->parent) { $rss_params = '&catid=' . (int) $catid; } } else { $rss_params = ''; } if (isset($rss_params) || $kunena_config->enablepdf) { echo '<div class="krss-block">'; if ($kunena_config->enablepdf && $func == 'view' && KUNENA_JOOMLA_COMPAT == '1.5') { // FIXME: add better translation: echo CKunenaLink::GetPDFLink($catid, $limit, $limitstart, $id, CKunenaTools::showIcon('kpdf', JText::_('PDF')), 'nofollow', '', JText::_('PDF')); } if ($kunena_config->enablerss && isset($rss_params)) { if ($kunena_config->rss_specification == 'atom1.0') { $rss_specification = 'application/atom+xml'; } else { $rss_specification = 'application/rss+xml'; } $document->addCustomTag('<link rel="alternate" type="' . $rss_specification . '" title="' . JText::_('COM_KUNENA_LISTCAT_RSS') . '" href="' . CKunenaLink::GetRSSURL($rss_params) . '" />'); echo CKunenaLink::GetRSSLink(CKunenaTools::showIcon('krss', JText::_('COM_KUNENA_LISTCAT_RSS')), 'follow', $rss_params); } echo '</div>'; } } $template = KunenaFactory::getTemplate(); $this->params = $template->params; // Credits echo '<div class="kcredits kms"> ' . CKunenaLink::GetTeamCreditsLink($catid, JText::_('COM_KUNENA_POWEREDBY')) . ' ' . CKunenaLink::GetCreditsLink(); if ($this->params->get('templatebyText') != '') { echo ' :: <a href ="' . $this->params->get('templatebyLink') . '" rel="follow">' . $this->params->get('templatebyText'); if ($this->params->get('templatebyName')) { echo ' ' . $this->params->get('templatebyName') . '</a>'; } else { echo '</a>'; } } echo '</div>'; // display footer // Show total time it took to create the page $__ktime = JProfiler::getmicrotime() - $__kstarttime; ?> <div class="kfooter"> <span class="kfooter-time"><?php echo JText::_('COM_KUNENA_FOOTER_TIME_TO_CREATE') . ' ' . sprintf('%0.2f', $__ktime) . ' ' . JText::_('COM_KUNENA_FOOTER_TIME_SECONDS'); ?> </span> </div> </div> <!-- closes Kunena div --> <?php $document->addHeadLink(KunenaRoute::_(), 'canonical', 'rel', ''); $integration = KunenaFactory::getProfile(); $integration->close(); //$params = JComponentHelper::getParams( 'com_kunena' ); //if ($params->get( 'show_page_title' )) $document->setTitle ( $params->get( 'page_title' ) ); if (empty($_POST) && $format == 'html') { $default = KunenaRoute::getDefault(); if ($default) { $menu->setActive($default->id); } } } } // end of online if (JDEBUG == 1) { $__profiler->mark('Done'); $__queries = $__profiler->getQueryCount(); if (defined('JFIREPHP')) { FB::log($__profiler->getBuffer(), 'Kunena Profiler'); if ($__queries > 50) { FB::error($__queries, 'Kunena Queries'); } else { if ($__queries > 35) { FB::warn($__queries, 'Kunena Queries'); } else { FB::log($__queries, 'Kunena Queries'); } } } } ob_end_flush(); }
public function display() { global $Itemid; $menu = JFactory::getApplication ()->getMenu (); $home = $menu->getActive (); // TODO: maybe add error if (!$home) return; // Find default menu item $default = $this->_getDefaultMenuItem($menu, $home); if (!$default) { // There is no default menu item, use category view instead $default = clone $menu->getItem ( KunenaRoute::getItemID("index.php?option=com_kunena&view=category&layout=index") ); $default->query['view'] = 'category'; $default->query['layout'] = 'index'; } if (!$default) { JError::raiseError ( 500, JText::_ ( 'COM_KUNENA_NO_ACCESS' ) ); } // Check if menu item was correctly routed $active = $menu->getItem ( KunenaRoute::getItemID() ); if (!$active || ($active->id != $home->id && $active->id != $default->id)) { // Routing has been changed, redirect or fail if ($active) { JRequest::setVar ( 'defaultmenu', null ); // FIXME: chack possible redirect loops! $this->setRedirect (KunenaRoute::_(null, false)); } return; } // Check if we are using default menu item if (!isset($default->query['layout'])) $default->query['layout'] = 'default'; foreach ( $default->query as $var => $value ) { $cmp = JRequest::getVar($var, null); if ($var == 'defaultmenu') continue; if ($var == 'view' && $cmp == 'home') continue; if ($cmp !== null && $value != $cmp) { $default = $home; break; } } // Add query variables from shown menu item if ($default != $home) { foreach ( $default->query as $var => $value ) { JRequest::setVar ( $var, $value ); } } // Set active menu item to point the real page $menu->setActive ( $default->id ); // Joomla 1.5 hack: $Itemid = $default->id; KunenaRoute::initialize(); if (JRequest::getVar ( 'view' ) != 'home') { // Run display task from our new controller $controller = KunenaController::getInstance(true); $controller->execute ('display'); // Set redirect and message $this->setRedirect ($controller->getRedirect(), $controller->getMessage(), $controller->getMessageType()); } }
/** * Get item id for forum * * @param boolean $htmlspecialchars * @return string|null */ public static function getItemid($htmlspecialchars = false) { if (!class_exists('KunenaRoute')) { return null; } static $Itemid = null; if (!isset($Itemid)) { $Itemid = KunenaRoute::getItemID(); } if ($Itemid) { if (is_bool($htmlspecialchars)) { return ($htmlspecialchars ? '&' : '&') . 'Itemid=' . (int) $Itemid; } else { return $Itemid; } } return null; }