@owner Deutsche Gesellschaft für International Zusammenarbeit (GIZ) Gmb @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html /-------------------------------------------------------------------------------------------------------/ Cost Benefit Projection Tool. /------------------------------------------------------------------------------------------------------*/ // No direct access to this file defined('_JEXEC') or die('Restricted access'); /** * Routing class from com_costbenefitprojection * * @since 3.3 */ class CostbenefitprojectionRouter extends JComponentRouterBase { /** * Build the route for the com_costbenefitprojection component * * @param array &$query An array of URL arguments * * @return array The URL arguments to use to assemble the subsequent URL. * * @since 3.3 */ public function build(&$query) { $segments = array(); // Get a menu item based on Itemid or currently active $params = JComponentHelper::getParams('com_costbenefitprojection'); if (empty($query['Itemid'])) { $menuItem = $this->menu->getActive(); } else { $menuItem = $this->menu->getItem($query['Itemid']); } $mView = (empty($menuItem->query['view'])) ? null : $menuItem->query['view']; $mId = (empty($menuItem->query['id'])) ? null : $menuItem->query['id']; if (isset($query['view'])) { $view = $query['view']; if (empty($query['Itemid'])) { $segments[] = $query['view']; } unset($query['view']); } // Are we dealing with a item that is attached to a menu item? if (isset($view) && ($mView == $view) and (isset($query['id'])) and ($mId == (int) $query['id'])) { unset($query['view']); unset($query['catid']); unset($query['id']); return $segments; } if (isset($view) && isset($query['id']) && ($view == 'company' || $view == 'scaling_factor' || $view == 'intervention' || $view == 'cpanel' || $view == 'publicresults' || $view == 'createaccount' || $view == 'companyresults' || $view == 'combinedresults')) { if ($mId != (int) $query['id'] || $mView != $view) { if (($view == 'company' || $view == 'scaling_factor' || $view == 'intervention' || $view == 'cpanel' || $view == 'publicresults' || $view == 'createaccount' || $view == 'companyresults' || $view == 'combinedresults')) { $segments[] = $view; $id = explode(':', $query['id']); if (count($id) == 2) { $segments[] = $id[1]; } else { $segments[] = $id[0]; } } } unset($query['id']); } $total = count($segments); for ($i = 0; $i < $total; $i++) { $segments[$i] = str_replace(':', '-', $segments[$i]); } return $segments; } /** * Parse the segments of a URL. * * @param array &$segments The segments of the URL to parse. * * @return array The URL attributes to be used by the application. * * @since 3.3 */ public function parse(&$segments) { //var_dump($segments); //$app = JFactory::getApplication(); //$menu = $app->getMenu(); //$item = $menu->getActive(); $count = count($segments); $vars = array(); //var_dump($item->query['view']); //Handle View and Identifier switch($segments[0]) { case 'company': $vars['view'] = 'company'; if (is_numeric($segments[$count-1])) { $vars['id'] = (int) $segments[$count-1]; } else { $id = $this->getVar('company', $segments[$count-1], 'alias', 'id'); if($id) { $vars['id'] = $id; } } break; case 'scaling_factor': $vars['view'] = 'scaling_factor'; if (is_numeric($segments[$count-1])) { $vars['id'] = (int) $segments[$count-1]; } else { $id = $this->getVar('scaling_factor', $segments[$count-1], 'alias', 'id'); if($id) { $vars['id'] = $id; } } break; case 'intervention': $vars['view'] = 'intervention'; if (is_numeric($segments[$count-1])) { $vars['id'] = (int) $segments[$count-1]; } else { $id = $this->getVar('intervention', $segments[$count-1], 'alias', 'id'); if($id) { $vars['id'] = $id; } } break; case 'cpanel': $vars['view'] = 'cpanel'; if (is_numeric($segments[$count-1])) { $vars['id'] = (int) $segments[$count-1]; } else { $id = $this->getVar('cpanel', $segments[$count-1], 'alias', 'id'); if($id) { $vars['id'] = $id; } } break; case 'publicresults': $vars['view'] = 'publicresults'; if (is_numeric($segments[$count-1])) { $vars['id'] = (int) $segments[$count-1]; } else { $id = $this->getVar('publicresults', $segments[$count-1], 'alias', 'id'); if($id) { $vars['id'] = $id; } } break; case 'createaccount': $vars['view'] = 'createaccount'; if (is_numeric($segments[$count-1])) { $vars['id'] = (int) $segments[$count-1]; } else { $id = $this->getVar('createaccount', $segments[$count-1], 'alias', 'id'); if($id) { $vars['id'] = $id; } } break; case 'companyresults': $vars['view'] = 'companyresults'; if (is_numeric($segments[$count-1])) { $vars['id'] = (int) $segments[$count-1]; } else { $id = $this->getVar('companyresults', $segments[$count-1], 'alias', 'id'); if($id) { $vars['id'] = $id; } } break; case 'combinedresults': $vars['view'] = 'combinedresults'; if (is_numeric($segments[$count-1])) { $vars['id'] = (int) $segments[$count-1]; } else { $id = $this->getVar('combinedresults', $segments[$count-1], 'alias', 'id'); if($id) { $vars['id'] = $id; } } break; } return $vars; } protected function getVar($table, $where = null, $whereString = 'user', $what = 'id', $operator = '=', $main = 'costbenefitprojection') { if(!$where) { $where = JFactory::getUser()->id; } // Get a db connection. $db = JFactory::getDbo(); // Create a new query object. $query = $db->getQuery(true); $query->select($db->quoteName(array($what))); if ('categories' == $table || 'category' == $table) { $query->from($db->quoteName('#__categories')); } else { $query->from($db->quoteName('#__'.$main.'_'.$table)); } if (is_numeric($where)) { $query->where($db->quoteName($whereString) . ' '.$operator.' '.(int) $where); } elseif (is_string($where)) { $query->where($db->quoteName($whereString) . ' '.$operator.' '. $db->quote((string)$where)); } else { return false; } $db->setQuery($query); $db->execute(); if ($db->getNumRows()) { return $db->loadResult(); } return false; } } function CostbenefitprojectionBuildRoute(&$query) { $router = new CostbenefitprojectionRouter; return $router->build($query); } function CostbenefitprojectionParseRoute($segments) { $router = new ContentRouter; return $router->parse($segments); }