function generateMetadata() { $where = " WHERE params LIKE '%\"published\":1%' AND params LIKE '%\"trashed\":0%' AND params LIKE '%\"notfound\":0%'"; $rows = MijoDatabase::loadObjectList("SELECT url_sef, url_real FROM #__mijosef_urls {$where}"); if (!is_array($rows) || empty($rows)) { return false; } jimport('joomla.language.helper'); $ret = false; foreach ($rows as $row) { $component = Mijosef::get('utility')->getOptionFromRealURL($row->url_real); if (file_exists(JPATH_MIJOSEF_ADMIN . '/extensions/' . $component . '.php')) { $mijosef_ext = Mijosef::getExtension($component); $uri = Mijosef::get('uri')->_createURI($row->url_real); $mijosef_ext->beforeBuild($uri); $segments = array(); $do_sef = true; $meta = null; $item_limitstart = false; $vars = $uri->getQuery(true); $mijosef_ext->build($vars, $segments, $do_sef, $meta, $item_limitstart); if (is_array($meta) && count($meta) > 0) { Mijosef::get('metadata')->autoMetadata($row->url_sef, $meta); $ret = true; } } } return $ret; }
function getInput() { $attribs = 'class="inputbox" size="10" multiple="multiple"'; // Get rows static $tree; if (!isset($tree)) { $extension = Mijosef::get('utility')->getExtensionFromRequest(); $mijosef_ext = Mijosef::getExtension($extension); $db_query = ""; if ($this->element['db_query']) { $db_query = $this->element['db_query']; } $rows = $mijosef_ext->getCategoryList($db_query); // Collect childrens $children = array(); if (!empty($rows)) { foreach ($rows as $row) { // Not subcategories if (empty($row->parent)) { $row->parent = 0; } $pt = $row->parent; $list = @$children[$pt] ? $children[$pt] : array(); array_push($list, $row); $children[$pt] = $list; } } // Not subcategories if (empty($rows[0]->parent)) { $rows[0]->parent = 0; } // Build Tree $tree = self::_buildTree(intval($rows[0]->parent), '', array(), $children); } $options = array(); $options[] = array('id' => 'all', 'name' => JText::_('COM_MIJOSEF_PARAMS_ALL_CATS')); /*foreach ($node->children() as $option) { $options[] = array('id' => $option->attributes('value'), 'name' => $option->data()); }*/ foreach ($tree as $item) { $options[] = array('id' => $item->id, 'name' => $item->name); } return JHTML::_('select.genericlist', $options, $this->name, $attribs, 'id', 'name', $this->value, $this->name); }
function update($where = "", $fields) { // Get records $urls = MijoDatabase::loadObjectList("SELECT m.id, m.url_sef, u.url_real FROM #__mijosef_metadata AS m, #__mijosef_urls AS u WHERE m.url_sef = u.url_sef {$where}"); if (!empty($urls)) { $ret = ""; foreach ($urls as $i => $record) { $id = $record->id; $sef_url = $record->url_sef; $real_url = $record->url_real; if (!strpos($real_url, "option=")) { continue; } $component = Mijosef::get('utility')->getOptionFromRealURL($real_url); if (file_exists(JPATH_MIJOSEF_ADMIN . '/extensions/' . $component . '.php')) { $mijosef_ext = Mijosef::getExtension($component); $uri = Mijosef::get('uri')->_createURI($real_url); $mijosef_ext->beforeBuild($uri); $segments = array(); $do_sef = true; $meta = null; $item_limitstart = false; $vars = $uri->getQuery(true); $mijosef_ext->build($vars, $segments, $do_sef, $meta, $item_limitstart); if (is_array($meta) && count($meta) > 0 && !empty($fields) && is_array($fields)) { $metadata = ""; foreach ($fields as $index => $field) { if (!empty($meta[$field])) { $metadata .= "{$field} = '{$meta[$field]}', "; } } if (!empty($metadata)) { $metadata = rtrim($metadata, ', '); MijoDatabase::query("UPDATE #__mijosef_metadata SET {$metadata} WHERE id = {$id}"); $ret .= $sef_url . ' ===> ' . JText::_('COM_MIJOSEF_METADATA_UPDATED_OK') . '<br/>'; } else { $ret .= $sef_url . ' ===> ' . JText::_('COM_MIJOSEF_METADATA_UPDATED_CANT') . '<br/>'; } } else { $ret .= JText::_('COM_MIJOSEF_METADATA_UPDATED_NO'); } } else { $ret .= $sef_url . ' ===> ' . JText::_('COM_MIJOSEF_METADATA_UPDATED_NO_EXTENSION') . '<br/>'; } } return $ret; } else { return JText::_('COM_MIJOSEF_METADATA_UPDATED_NO'); } }
function &build(&$siteRouter, &$uri) { $sef_url = ""; $orig_path = $uri->getPath(); $url = ExtURI::getURL($uri); $real_url = str_replace('&', '&', $url); // Security - only allow colon in protocol part if (strpos($real_url, ':') !== false) { $offset = 0; if (substr($real_url, 0, 5) == 'http:') { $offset = 5; } elseif (substr($real_url, 0, 6) == 'https:') { $offset = 6; } $real_url = substr($real_url, 0, $offset) . str_replace(':', '%3A', substr($real_url, $offset)); } // Create URI object $uri = $this->_createURI($real_url); $org_uri = clone $uri; // For disable router option and dosef_false if (substr($real_url, 0, 10) != 'index.php?') { return $uri; } $menu = Mijosef::get('utility')->getMenu(); // Make some fixes on URI if ($real_url != 'index.php') { // Get the itemid from the URI $Itemid = $uri->getVar('Itemid'); if (is_null($Itemid)) { if ($option = $uri->getVar('option')) { $item = $menu->getItem(intval($this->getVar('Itemid'))); if (isset($item) && $item->component == $option) { $uri->setVar('Itemid', $item->id); } } else { if ($Itemid = intval($this->getVar('Itemid'))) { $uri->setVar('Itemid', $Itemid); } } } // If there is no option specified, try to get the query from menu item if (is_null($uri->getVar('option'))) { if (count($vars = $uri->getQuery(true)) == 2 && isset($vars['Itemid']) && isset($vars['limitstart'])) { foreach ($this->getVars() as $name => $value) { if ($name != 'limitstart' && $name != 'start') { $uri->setVar($name, $value); } } if ($uri->getVar('limitstart') == 0) { $uri->delVar('limitstart'); } } elseif (!is_null($uri->getVar('Itemid'))) { $item = $menu->getItem($uri->getVar('Itemid')); if (is_object($item)) { foreach ($item->query as $k => $v) { $uri->setVar($k, $v); } } } else { // There is no option or Itemid specified, assume frontpage $item = Mijosef::get('uri')->getDefaultMenuItem(); if (is_object($item)) { foreach ($item->query as $k => $v) { $uri->setVar($k, $v); } // Set Itemid $uri->setVar('Itemid', $item->id); } } } } $mainframe = JFactory::getApplication(); $router = $mainframe->getRouter(); $router->setMode(JROUTER_MODE_SEF); $prev_lang = ''; $vars = $uri->getQuery(true); // If site is root, do not do anything else if (empty($vars) && (!Mijosef::get('utility')->JoomfishInstalled() && !Mijosef::get('utility')->FalangInstalled() || $this->MijosefConfig->joomfish_lang_code == '0')) { $uri = new JURI(JURI::root()); return $uri; } $lang = Mijosef::get('language')->getLang($uri); // Add JoomFish/FaLang lang code if (Mijosef::get('utility')->JoomfishInstalled() || Mijosef::get('utility')->FalangInstalled()) { // If lang not set if (empty($lang)) { $uri->setVar('lang', Mijosef::get('uri')->getLangCode()); } // Get the URL's language and set it as global language (for correct translation) $lang = $uri->getVar('lang'); $code = ''; if (!empty($lang)) { $code = Mijosef::get('uri')->getLangLongCode($lang); if (!is_null($code)) { if ($code != Mijosef::get('uri')->getLangLongCode()) { $language = JFactory::getLanguage(); $prev_lang = $language->setLanguage($code); $language->load(); } } } } // Set active ItemID if set to $Itemid = intval($uri->getVar('Itemid')); if (empty($Itemid) && $this->MijosefConfig->insert_active_itemid == 1) { $active = $menu->getActive(); if (is_object($active) && isset($active->id)) { $uri->setVar('Itemid', $active->id); } } $vars = $uri->getQuery(true); // if there are no variables and only single language is used if (empty($vars) && !isset($lang)) { $org_uri = Mijosef::get('uri')->createUri($org_uri); Mijosef::get('uri')->restoreLang($prev_lang); $router->setMode(JROUTER_MODE_RAW); return $org_uri; } // Check if we should prepend the lang code to SEF URL $lang_code = ""; $lang = $uri->getVar('lang'); $add_code = $this->MijosefConfig->joomfish_lang_code; $main_lang = $this->MijosefConfig->joomfish_main_lang; $main_lang_del = $this->MijosefConfig->joomfish_main_lang_del; //if (Mijosef::get('utility')->JoomFishInstalled() && !empty($lang)) { if (!empty($lang)) { // Add lang code if set to if ($add_code != '0' && ($main_lang == '0' || $lang != $main_lang) && !strpos($sef_url, $lang)) { $lang_code = $lang; } // Remove main lang variable if set to if ($lang == $main_lang && $main_lang_del == 1) { $uri->delVar('lang'); } } // Get option $component = $uri->getVar('option'); // Set attributes Mijosef::get('uri')->attributes->meta = null; Mijosef::get('uri')->attributes->params = new JRegistry(""); Mijosef::get('uri')->attributes->non_sef_part = ""; Mijosef::get('uri')->attributes->item_limitstart = false; // Home Page ? if (Mijosef::get('uri')->_isHomePage($uri)) { // Check if URL exists if (Mijosef::get('uri')->_checkDB($uri, $prev_lang)) { return $uri; } // Check if we should create new SEF URLs if ($this->MijosefConfig->generate_sef == 0) { return $uri; } $real_url = Mijosef::get('uri')->sortURItoString($uri); $sef_url = Mijosef::get('uri')->_finalizeSEF($uri, $sef_url, $real_url, $component, $lang_code); $uri = Mijosef::get('uri')->_finalizeURI($uri, $sef_url); Mijosef::get('uri')->restoreLang($prev_lang); return $uri; } else { $default = $menu->getDefault(); $checkup = is_object($default) && !is_null(intval($uri->getVar('Itemid'))); if ($checkup && is_null($uri->getVar('limitstart')) && $uri->getVar('Itemid') == $default->id && $this->MijosefConfig->insert_active_itemid != 1) { $uri->delVar('Itemid'); } } // Lets do this job, start routing $routed = false; if (!is_null($component)) { // Get params $ext_params = Mijosef::get('cache')->getExtensionParams($component); // Component not installed if (!$ext_params) { $org_uri = Mijosef::get('uri')->createUri($org_uri); Mijosef::get('uri')->restoreLang($prev_lang); $router->setMode(JROUTER_MODE_RAW); return $org_uri; } // Get params Mijosef::get('uri')->attributes->params = $ext_params; // Get router type $routing = Mijosef::get('uri')->attributes->params->get('router', '0'); // // Start routing... // // Routing disabled if ($routing == 0) { $org_uri = Mijosef::get('uri')->createUri($org_uri); Mijosef::get('uri')->restoreLang($prev_lang); $router->setMode(JROUTER_MODE_RAW); return $org_uri; } else { // Check if we should return the URI directly $dosef = Mijosef::get('uri')->disableSefVars($uri); if ($dosef == false) { $org_uri = Mijosef::get('uri')->createUri($org_uri); Mijosef::get('uri')->restoreLang($prev_lang); $router->setMode(JROUTER_MODE_RAW); return $org_uri; } // Reorder URI (ksort) $uri = $this->_createURI(Mijosef::get('uri')->sortURItoString($uri, true)); // non-SEF Vars Mijosef::get('uri')->attributes->non_sef_part = Mijosef::get('uri')->nonSefVars($uri); // Backup variables to use later $backup_vars = $uri->getQuery(true); // Remove session IDs, if set to if ($this->MijosefConfig->remove_sid == 1 && !is_null($uri->getVar('sid'))) { $uri->delVar('sid'); } // Ensure that the mosmsg are removed if (!empty($mosmsg)) { $uri->delVar('mosmsg'); } // Delete limistart var if empty $_lmtstrt = $uri->getVar('limitstart'); if (empty($_lmtstrt) && $component != 'com_virtuemart') { $uri->delVar('limitstart'); } else { //Mijosef::get('uri')->fixPaginationURI($uri); } // Smart Itemid $skipped_components = array('com_wrapper'); if (!in_array($component, $skipped_components) && Mijosef::get('utility')->getConfigState(Mijosef::get('uri')->attributes->params, 'global_smart_itemid')) { $s_vars = $uri->getQuery(true); unset($s_vars['Itemid']); unset($s_vars['lang']); unset($s_vars['limit']); unset($s_vars['limitstart']); $menu_item = Mijosef::get('uri')->findItemid($s_vars); if (is_object($menu_item)) { $uri->setVar('Itemid', $menu_item->id); } } $lang = JFactory::getLanguage(); $lang->load('com_mijosef', JPATH_SITE, 'en-GB', true); $lang->load('com_mijosef', JPATH_SITE, $lang->getDefault(), true); $lang->load('com_mijosef', JPATH_SITE, null, true); // MijoSEF extension $extension = JPATH_ADMINISTRATOR . '/components/com_mijosef/extensions/' . $component . '.php'; if (!$routed && file_exists($extension) && $routing == 3) { $mijosef_ext = Mijosef::getExtension($component); // Fix : for ids Mijosef::get('uri')->fixUriVariables($uri); // Override menu item id if set to if (Mijosef::get('uri')->attributes->params->get('override', '1') != '1' && Mijosef::get('uri')->attributes->params->get('override_id', '') != '') { $uri->setVar('Itemid', Mijosef::get('uri')->attributes->params->get('override_id')); } // Make changes on URI before building route $mijosef_ext->beforeBuild($uri); // Category status $real_url = Mijosef::get('uri')->sortURItoString($uri); $mijosef_ext->catParam($uri->getQuery(true), $real_url); // Check if URL exists if (Mijosef::get('uri')->_checkDB($uri, $prev_lang)) { return $uri; } // Load language file $lang_file = JFactory::getLanguage(); $lang_file->load($component, JPATH_SITE); // Prepare vars $vars = $uri->getQuery(true); $segments = array(); $do_sef = true; Mijosef::get('uri')->attributes->meta = null; Mijosef::get('uri')->attributes->item_limitstart = false; // Build $mijosef_ext->build($vars, $segments, $do_sef, Mijosef::get('uri')->attributes->meta, Mijosef::get('uri')->attributes->item_limitstart); // Check if do_sef is false if ($do_sef == false) { $org_uri = Mijosef::get('uri')->createUri($org_uri); Mijosef::get('uri')->restoreLang($prev_lang); $router->setMode(JROUTER_MODE_RAW); return $org_uri; // To obtain original URI, not sorted } // Append as non-SEF all non-proccessed vars if ($this->MijosefConfig->append_non_sef == 1) { Mijosef::get('uri')->attributes->non_sef_part = Mijosef::get('uri')->nonSefVars($uri, $vars, Mijosef::get('uri')->attributes->non_sef_part); } if (!empty($segments) && in_array('mijosef_url', $segments)) { $url_found = Mijosef::get('cache')->checkURL($uri->getVar('id'), false, true); if (is_object($url_found)) { // Check if it is blocked if (Mijosef::get('utility')->getParam($url_found->params, 'blocked') == '1') { $route = $url_found->url_real; } else { $route = $url_found->url_sef; } $uri = Mijosef::get('uri')->_finalizeURI($uri, $route); Mijosef::get('uri')->restoreLang($prev_lang); return $uri; } else { $segments = array(); } } // Check if URL exists unset($vars['option']); unset($vars['Itemid']); unset($vars['lang']); if (!empty($vars) && $this->MijosefConfig->prevent_dup_error == 1 && Mijosef::get('uri')->_checkDB($uri, $prev_lang)) { return $uri; } // Load segments as string if (!empty($segments)) { $sef_url = implode('/', $segments); } $routed = true; } // router.php $router_file = JPATH_BASE . '/components/' . $component . '/router.php'; if (!$routed && file_exists($router_file) && $routing == 2) { // Check if URL exists if (Mijosef::get('uri')->_checkDB($uri, $prev_lang)) { return $uri; } // Prepare routing require_once $router_file; $function = substr($component, 4) . 'buildRoute'; // Get vars array $vars = $uri->getQuery(true); // Run BuildRoute function $segments = $function($vars); // Append as non-SEF the non-proccessed vars if ($this->MijosefConfig->append_non_sef == 1) { Mijosef::get('uri')->attributes->non_sef_part = Mijosef::get('uri')->nonSefVars($uri, $vars, Mijosef::get('uri')->attributes->non_sef_part); } // Check if URL exists unset($vars['option']); unset($vars['Itemid']); unset($vars['lang']); if (!empty($vars) && $this->MijosefConfig->prevent_dup_error == 1 && Mijosef::get('uri')->_checkDB($uri, $prev_lang)) { return $uri; } // Prevent metadata of the previous component Mijosef::get('uri')->attributes->meta = null; // Replace : with - $segments = $this->_encodeSegments($segments); // Load segments as string if (!empty($segments)) { if (substr($sef_url, -1) != '/') { $sef_url .= '/'; } $sef_url .= implode('/', $segments); } $routed = true; } // Basic routing if (!$routed && $routing == 1) { // Check if URL exists if (Mijosef::get('uri')->_checkDB($uri, $prev_lang)) { return $uri; } // Prevent metadata of the previous component Mijosef::get('uri')->attributes->meta = null; // Get vars array $vars = $uri->getQuery(true); // Add all values to new url $filter = array('option', 'Itemid', 'lang', 'limitstart'); foreach ($vars as $name => $value) { if (in_array($name, $filter)) { continue; } if (substr($sef_url, -1) != '/') { $sef_url .= '/'; } $sef_url .= $value; } // Replace : with - if (!empty($sef_url)) { $url_array = explode('/', $sef_url); $url_array = $this->_encodeSegments($url_array); $sef_url = implode('/', $url_array); } $routed = true; } } // Reconnect Session ID to real url if (!empty($backup_vars['sid']) && $this->MijosefConfig->remove_sid == 1) { $uri->setVar('sid', $var_sid); } // Reconnect mosmsg to real url if (!empty($backup_vars['mosmsg'])) { $uri->setVar('mosmsg', $var_mosmsg); } } // Prevent recording the edit url of 404 page if ($sef_url == '404/edit' || $sef_url == '404/edit' . $this->MijosefConfig->url_suffix) { $routed = false; } // Finalize this job if ($routed) { // Check if we should create new SEF URLs if ($this->MijosefConfig->generate_sef == 0) { return $uri; } $real_url = Mijosef::get('uri')->sortURItoString($uri); $sef_url = Mijosef::get('uri')->_finalizeSEF($uri, $sef_url, $real_url, $component, $lang_code); $uri = Mijosef::get('uri')->_finalizeURI($uri, $sef_url); } Mijosef::get('uri')->restoreLang($prev_lang); // Combine original path with new path $path = $uri->getPath(); if ($path != "") { if (substr($orig_path, 0, 10) == 'index.php/') { $orig_path = substr($orig_path, 10); } $path = rtrim($orig_path, '/') . $path; $uri->setPath($path); } return $uri; }