/** * display the RSS of the forum */ public function read_rss() { $ftitle = jUrl::escape($this->param('ftitle'), true); $id_forum = (int) $this->param('id_forum'); if (!jAcl2::check('hfnu.posts.list', 'forum' . $id_forum)) { $rep = $this->getResponse('redirect'); $rep->action = 'default:index'; return $rep; } if ($id_forum == 0) { $rep = $this->getResponse('redirect'); $rep->action = 'default:index'; return $rep; } $forum = jClasses::getService('havefnubb~hfnuforum')->getForum($id_forum); if (jUrl::escape($forum->forum_name, true) != $ftitle) { $rep = $this->getResponse('redirect'); $rep->action = jApp::config()->urlengine['notfoundAct']; return $rep; } jApp::coord()->getPlugin('history')->change('label', htmlentities($forum->forum_name, ENT_COMPAT, 'UTF-8')); $feed_reader = new jFeedReader(); $feed_reader->setCacheDir(jApp::varPath('feeds')); $feed_reader->setTimeout(2); $feed_reader->setUserAgent('HaveFnuBB - http://www.havefnubb.org/'); $feed = $feed_reader->parse($forum->forum_url); $rep = $this->getResponse('html'); $tpl = new jTpl(); $tpl->assign('feed', $feed); $tpl->assign('forum', $forum); $rep->title = $forum->forum_name; $rep->body->assign('MAIN', $tpl->fetch('havefnubb~forum_rss.view')); return $rep; }
/** * View a given Category of forum then the list of forums */ function view() { $ctitle = $this->param('ctitle'); $id_cat = (int) $this->param('id_cat'); if ($id_cat == 0) { $rep = $this->getResponse('redirect'); $rep->action = 'havefnubb~default:index'; return $rep; } // add the category name in the page title // so // 1) get the category record $category = jClasses::getService('havefnubb~hfnucat')->getCat($id_cat); // check that the title of the category exist // if not => error404 if (jUrl::escape($ctitle, true) != jUrl::escape($category->cat_name, true)) { $rep = $this->getResponse('redirect'); $rep->action = jApp::config()->urlengine['notfoundAct']; return $rep; } $rep = $this->getResponse('html'); // 2) assign the title page $rep->title = $category->cat_name; $historyPlugin = jApp::coord()->getPlugin('history'); $histname = ucfirst(htmlentities($category->cat_name, ENT_COMPAT, 'UTF-8')); $historyPlugin->change('label', $histname); $historyPlugin->change('title', $histname); $categories = jDao::get('havefnubb~forum')->findParentByCatId($id_cat); foreach ($categories as $cat) { if (jAcl2::check('hfnu.forum.list', 'forum' . $cat->id_forum)) { // get the list of forum to build the RSS link $url = jUrl::get('havefnubb~posts:rss', array('ftitle' => $cat->forum_name, 'id_forum' => $cat->id_forum)); $rep->addHeadContent('<link rel="alternate" type="application/rss+xml" title="' . $cat->forum_name . '" href="' . htmlentities($url) . '" />'); } } $tpl = new jTpl(); $tpl->assign('action', 'view'); $tpl->assign('cat_name', $category->cat_name); $tpl->assign('categories', $categories); $tpl->assign('currentIdForum', 0); $rep->body->assign('MAIN', $tpl->fetch('index')); return $rep; }
/** * Create a jurl object with the given action data * @param jUrlAction $url information about the action * @return jUrl the url correspondant to the action * @author Laurent Jouanneau * @copyright 2005 CopixTeam, 2005-2006 Laurent Jouanneau * very few lines of code are copyrighted by CopixTeam, written by Laurent Jouanneau * and released under GNU Lesser General Public Licence, * in an experimental version of Copix Framework v2.3dev20050901, * http://www.copix.org. */ public function create($urlact) { if ($this->dataCreateUrl == null) { $sel = new jSelectorUrlCfgSig(jApp::config()->urlengine['significantFile']); jIncluder::inc($sel); $this->dataCreateUrl =& $GLOBALS['SIGNIFICANT_CREATEURL']; } $url = new jUrl('', $urlact->params, ''); $module = $url->getParam('module', jApp::getCurrentModule()); $action = $url->getParam('action'); // let's try to retrieve informations corresponding // to the given action. this informations will allow us to build // the url $id = $module . '~' . $action . '@' . $urlact->requestType; $urlinfo = null; if (isset($this->dataCreateUrl[$id])) { $urlinfo = $this->dataCreateUrl[$id]; $url->delParam('module'); $url->delParam('action'); } else { $id = $module . '~*@' . $urlact->requestType; if (isset($this->dataCreateUrl[$id])) { $urlinfo = $this->dataCreateUrl[$id]; if ($urlinfo[0] != 3 || $urlinfo[3] === true) { $url->delParam('module'); } } else { $id = '@' . $urlact->requestType; if (isset($this->dataCreateUrl[$id])) { $urlinfo = $this->dataCreateUrl[$id]; } else { throw new Exception("Significant url engine doesn't find corresponding url to this action :" . $module . '~' . $action . '@' . $urlact->requestType); } } } /* urlinfo = or array(0,'entrypoint', https true/false, 'handler selector', 'basepathinfo') or array(1,'entrypoint', https true/false, array('year','month',), // list of dynamic values included in the url array(true, false..), // list of integers which indicates for each // dynamic value: 0: urlencode, 1:urlencode except '/', 2:escape "/news/%1/%2/", // the url true/false, // false : this is a secondary action array('bla'=>'whatIWant' ) // list of static values ) or array(2,'entrypoint', https true/false), // for the patterns "@request" or array(3,'entrypoint', https true/false), // for the patterns "module~@request" or array(4, array(1,...), array(1,...)...) */ if ($urlinfo[0] == 4) { // an action is mapped to several urls // so it isn't finished. Let's find building information // into the array $l = count($urlinfo); $urlinfofound = null; for ($i = 1; $i < $l; $i++) { $ok = true; // verify that given static parameters of the action correspond // to those defined for this url foreach ($urlinfo[$i][7] as $n => $v) { // specialStatic are static values for which the url engine // can compare not only with a given url parameter value, but // also with a value stored some where (typically, a configuration value) $specialStatic = !empty($v) && $v[0] == '$'; $paramStatic = $url->getParam($n, null); if ($specialStatic) { // special statique value $typePS = $v[1]; $v = substr($v, 2); if ($typePS == 'l') { if ($paramStatic === null) { $paramStatic = jLocale::getCurrentLang(); } else { if (preg_match('/^(\\w{2,3})_\\w{2,3}$/', $paramStatic, $m)) { // if the value is a locale instead of lang, translate it $paramStatic = $m[1]; } } } elseif ($typePS == 'L') { if ($paramStatic === null) { $paramStatic = jApp::config()->locale; } else { if (preg_match('/^\\w{2,3}$/', $paramStatic, $m)) { // if the value is a lang instead of locale, translate it $paramStatic = jLocale::langToLocale($paramStatic); } } } } if ($paramStatic != $v) { $ok = false; break; } } if ($ok) { // static parameters correspond: we found our informations $urlinfofound = $urlinfo[$i]; break; } } if ($urlinfofound !== null) { $urlinfo = $urlinfofound; } else { $urlinfo = $urlinfo[1]; } } // at this step, we have informations to build the url $url->scriptName = jApp::config()->urlengine['basePath'] . $urlinfo[1]; if ($urlinfo[2]) { $url->scriptName = jApp::coord()->request->getServerURI(true) . $url->scriptName; } if ($urlinfo[1] && !jApp::config()->urlengine['multiview']) { $url->scriptName .= '.php'; } // for some request types, parameters aren't in the url // so we remove them // it's a bit dirty to do that hardcoded here, but it would be a pain // to load the request class to check whether we can remove or not if (in_array($urlact->requestType, array('xmlrpc', 'jsonrpc', 'soap'))) { $url->clearParam(); return $url; } if ($urlinfo[0] == 0) { $s = new jSelectorUrlHandler($urlinfo[3]); $c = $s->resource . 'UrlsHandler'; $handler = new $c(); $handler->create($urlact, $url); if ($urlinfo[4] != '') { $url->pathInfo = $urlinfo[4] . $url->pathInfo; } } elseif ($urlinfo[0] == 1) { $pi = $urlinfo[5]; foreach ($urlinfo[3] as $k => $param) { $typeParam = $urlinfo[4][$k]; $value = $url->getParam($param, ''); if ($typeParam & 2) { $value = jUrl::escape($value, true); } else { if ($typeParam & 1) { $value = str_replace('%2F', '/', urlencode($value)); } else { if ($typeParam & 4) { if ($value == '') { $value = jLocale::getCurrentLang(); } else { if (preg_match('/^(\\w{2,3})_\\w{2,3}$/', $value, $m)) { $value = $m[1]; } } } else { if ($typeParam & 8) { if ($value == '') { $value = jApp::config()->locale; } else { if (preg_match('/^\\w{2,3}$/', $value, $m)) { $value = jLocale::langToLocale($value); } } } else { $value = urlencode($value); } } } } $pi = str_replace(':' . $param, $value, $pi); $url->delParam($param); } $url->pathInfo = $pi; if ($urlinfo[6]) { $url->setParam('action', $action); } // removed parameters corresponding to static values foreach ($urlinfo[7] as $name => $value) { $url->delParam($name); } } elseif ($urlinfo[0] == 3) { if ($urlinfo[3]) { $url->delParam('module'); } } return $url; }
/** * @param array $urlinfo * array(1,'entrypoint', https true/false, * array('year','month',), // list of dynamic values included in the url * array(true, false..), // list of integers which indicates for each * // dynamic value: 0: urlencode, 1:urlencode except '/', 2:escape * "/news/%1/%2/", // the url * true/false, // false : this is a secondary action * array('bla'=>'whatIWant' ) // list of static values * ) */ protected function buildWithSpecificPathinfo(\jUrlAction $urlact, \jUrl $url, $urlinfo) { $pi = $urlinfo[5]; foreach ($urlinfo[3] as $k => $param) { $escape = $urlinfo[4][$k]; $value = $url->getParam($param, ''); if ($escape & self::ESCAPE_NON_ASCII) { $value = \jUrl::escape($value, true); } elseif ($escape & self::ESCAPE_SLASH) { $value = str_replace('%2F', '/', urlencode($value)); } elseif ($escape & self::ESCAPE_LANG) { if ($value == '') { $value = Locale::getCurrentLang(); } elseif (preg_match('/^(\\w{2,3})_\\w{2,3}$/', $value, $m)) { $value = $m[1]; } } elseif ($escape & self::ESCAPE_LOCALE) { if ($value == '') { $value = App::config()->locale; } elseif (preg_match('/^\\w{2,3}$/', $value, $m)) { $value = Locale::langToLocale($value); } } else { $value = urlencode($value); } $pi = str_replace(':' . $param, $value, $pi); $url->delParam($param); } $url->pathInfo = $pi != '/' ? $pi : ''; if ($urlinfo[6]) { $url->setParam('action', $urlact->getParam('action')); } // removed parameters corresponding to static values foreach ($urlinfo[7] as $name => $value) { $url->delParam($name); } }
/** * Create a jurl object with the given action data * @param jUrlAction $url information about the action * @return jUrl the url correspondant to the action * @author Laurent Jouanneau * @copyright 2005 CopixTeam, 2005-2006 Laurent Jouanneau * very few lines of code are copyrighted by CopixTeam, written by Laurent Jouanneau * and released under GNU Lesser General Public Licence, * in an experimental version of Copix Framework v2.3dev20050901, * http://www.copix.org. */ public function create($urlact) { if ($this->dataCreateUrl == null) { $sel = new jSelectorUrlCfgSig($GLOBALS['gJConfig']->urlengine['significantFile']); jIncluder::inc($sel); $this->dataCreateUrl =& $GLOBALS['SIGNIFICANT_CREATEURL']; } $url = new jUrl('', $urlact->params, ''); $module = $url->getParam('module', jContext::get()); $action = $url->getParam('action'); // let's try to retrieve informations corresponding // to the given action. this informations will allow us to build // the url $id = $module . '~' . $action . '@' . $urlact->requestType; $urlinfo = null; if (isset($this->dataCreateUrl[$id])) { $urlinfo = $this->dataCreateUrl[$id]; $url->delParam('module'); $url->delParam('action'); } else { $id = $module . '~*@' . $urlact->requestType; if (isset($this->dataCreateUrl[$id])) { $urlinfo = $this->dataCreateUrl[$id]; if ($urlinfo[0] != 3 || $urlinfo[3] === true) { $url->delParam('module'); } } else { $id = '@' . $urlact->requestType; if (isset($this->dataCreateUrl[$id])) { $urlinfo = $this->dataCreateUrl[$id]; } else { throw new Exception("Significant url engine doesn't find corresponding url to this action :" . $module . '~' . $action . '@' . $urlact->requestType); } } } /* urlinfo = or array(0,'entrypoint', https true/false, 'handler selector', 'basepathinfo') or array(1,'entrypoint', https true/false, array('year','month',), // list of dynamic values included in the url array(true, false..), // list of integers which indicates for each // dynamic value: 0: urlencode, 1:urlencode except '/', 2:escape "/news/%1/%2/", // the url true/false, // false : this is a secondary action array('bla'=>'whatIWant' ) // list of static values ) or array(2,'entrypoint', https true/false), // for the patterns "@request" or array(3,'entrypoint', https true/false), // for the patterns "module~@request" or array(4, array(1,...), array(1,...)...) */ if ($urlinfo[0] == 4) { // an action is mapped to several urls // so it isn't finished. Let's find building information // into the array $l = count($urlinfo); $urlinfofound = null; for ($i = 1; $i < $l; $i++) { $ok = true; // verify that given static parameters of the action correspond // to those defined for this url foreach ($urlinfo[$i][7] as $n => $v) { if ($url->getParam($n, '') != $v) { $ok = false; break; } } if ($ok) { // static parameters correspond: we found our informations $urlinfofound = $urlinfo[$i]; break; } } if ($urlinfofound !== null) { $urlinfo = $urlinfofound; } else { $urlinfo = $urlinfo[1]; } } // at this step, we have informations to build the url $url->scriptName = $GLOBALS['gJConfig']->urlengine['basePath'] . $urlinfo[1]; if ($urlinfo[2]) { $url->scriptName = $GLOBALS['gJCoord']->request->getServerURI(true) . $url->scriptName; } if ($urlinfo[1] && !$GLOBALS['gJConfig']->urlengine['multiview']) { $url->scriptName .= $GLOBALS['gJConfig']->urlengine['entrypointExtension']; } // pour certains types de requete, les paramètres ne sont pas dans l'url // donc on les supprime // c'est un peu crade de faire ça en dur ici, mais ce serait lourdingue // de charger la classe request pour savoir si on peut supprimer ou pas if (in_array($urlact->requestType, array('xmlrpc', 'jsonrpc', 'soap'))) { $url->clearParam(); return $url; } if ($urlinfo[0] == 0) { $s = new jSelectorUrlHandler($urlinfo[3]); $c = $s->resource . 'UrlsHandler'; $handler = new $c(); $handler->create($urlact, $url); if ($urlinfo[4] != '') { $url->pathInfo = $urlinfo[4] . $url->pathInfo; } } elseif ($urlinfo[0] == 1) { $pi = $urlinfo[5]; foreach ($urlinfo[3] as $k => $param) { switch ($urlinfo[4][$k]) { case 2: $value = jUrl::escape($url->getParam($param, ''), true); break; case 1: $value = str_replace('%2F', '/', urlencode($url->getParam($param, ''))); break; default: $value = urlencode($url->getParam($param, '')); break; } $pi = str_replace(':' . $param, $value, $pi); $url->delParam($param); } $url->pathInfo = $pi; if ($urlinfo[6]) { $url->setParam('action', $action); } // removed parameters corresponding to static values foreach ($urlinfo[7] as $name => $value) { $url->delParam($name); } } elseif ($urlinfo[0] == 3) { if ($urlinfo[3]) { $url->delParam('module'); } } return $url; }
/** * Create a jurl object with the given action data * @param jUrlAction $url information about the action * @return jUrl the url correspondant to the action * @author Laurent Jouanneau * @copyright 2005 CopixTeam, 2005-2006 Laurent Jouanneau * very few lines of code are copyrighted by CopixTeam, written by Laurent Jouanneau * and released under GNU Lesser General Public Licence, * in an experimental version of Copix Framework v2.3dev20050901, * http://www.copix.org. */ public function create($urlact) { if ($this->dataCreateUrl == null) { $sel = new jSelectorUrlCfgSig($GLOBALS['gJConfig']->urlengine['significantFile']); jIncluder::inc($sel); $this->dataCreateUrl =& $GLOBALS['SIGNIFICANT_CREATEURL']; } /* a) recupere module~action@request -> obtient les infos pour la creation de l'url b) récupère un à un les parametres indiqués dans params à partir de jUrl c) remplace la valeur récupérée dans le result et supprime le paramètre de l'url d) remplace scriptname de jUrl par le resultat */ $url = new jUrl('', $urlact->params, ''); $module = $url->getParam('module', jContext::get()); $action = $url->getParam('action'); $id = $module . '~' . $action . '@' . $urlact->requestType; $urlinfo = null; if (isset($this->dataCreateUrl[$id])) { $urlinfo = $this->dataCreateUrl[$id]; $url->delParam('module'); $url->delParam('action'); } else { $id = $module . '~*@' . $urlact->requestType; if (isset($this->dataCreateUrl[$id])) { $urlinfo = $this->dataCreateUrl[$id]; $url->delParam('module'); } else { $id = '@' . $urlact->requestType; if (isset($this->dataCreateUrl[$id])) { $urlinfo = $this->dataCreateUrl[$id]; } else { throw new Exception("Significant url engine doesn't find corresponding url to this action :" . $module . '~' . $action . '@' . $urlact->requestType); } } } /* urlinfo = array(0,'entrypoint', https true/false,'selecteur handler') ou array(1,'entrypoint', https true/false, array('annee','mois','jour','id','titre'), // liste des paramètres de l'url à prendre en compte array(true, false..), // valeur des escapes "/news/%1/%2/%3/%4-%5", // forme de l'url false, //indique si c'est une action surchargeante ) ou array(2,'entrypoint', https true/false,); pour les clés du type "@request" array(3,'entrypoint', https true/false); pour les clés du type "module~@request" array(4, array(1,..), array(1,..)...); */ if ($urlinfo[0] == 4) { $l = count($urlinfo); $urlinfofound = null; for ($i = 1; $i < $l; $i++) { $ok = true; foreach ($urlinfo[$i][7] as $n => $v) { if ($url->getParam($n, '') != $v) { $ok = false; break; } } if ($ok) { $urlinfofound = $urlinfo[$i]; break; } } if ($urlinfofound !== null) { $urlinfo = $urlinfofound; } else { $urlinfo = $urlinfo[1]; } } $url->scriptName = $GLOBALS['gJConfig']->urlengine['basePath'] . $urlinfo[1]; if ($urlinfo[2]) { $url->scriptName = 'https://' . $_SERVER['HTTP_HOST'] . $url->scriptName; } if ($urlinfo[1] && !$GLOBALS['gJConfig']->urlengine['multiview']) { $url->scriptName .= $GLOBALS['gJConfig']->urlengine['entrypointExtension']; } // pour certains types de requete, les paramètres ne sont pas dans l'url // donc on les supprime // c'est un peu crade de faire ça en dur ici, mais ce serait lourdingue // de charger la classe request pour savoir si on peut supprimer ou pas if (in_array($urlact->requestType, array('xmlrpc', 'jsonrpc', 'soap'))) { $url->clearParam(); return $url; } if ($urlinfo[0] == 0) { $s = new jSelectorUrlHandler($urlinfo[3]); $c = $s->resource . 'UrlsHandler'; $handler = new $c(); $handler->create($urlact, $url); } elseif ($urlinfo[0] == 1) { $pi = $urlinfo[5]; foreach ($urlinfo[3] as $k => $param) { if ($urlinfo[4][$k]) { $pi = str_replace(':' . $param, jUrl::escape($url->getParam($param, ''), true), $pi); } else { $pi = str_replace(':' . $param, $url->getParam($param, ''), $pi); } $url->delParam($param); } $url->pathInfo = $pi; if ($urlinfo[6]) { $url->setParam('action', $action); } // removed parameters corresponding to static values foreach ($urlinfo[7] as $name => $value) { $url->delParam($name); } } elseif ($urlinfo[0] == 3) { $url->delParam('module'); } return $url; }
/** * provide a atom feeds for each forum */ function atom() { $ftitle = jUrl::unescape($this->param('ftitle'), true); $id_forum = $this->intParam('id_forum'); // if the forum is accessible by anonymous then the Atom will be available // otherwise NO Atom will be available if (!jAcl2::check('hfnu.posts.rss', 'forum' . $id_forum)) { jMessage::add(jLocale::get('havefnubb~main.permissions.denied'), 'error'); $rep = $this->getResponse('html'); $tpl = new jTpl(); $rep->body->assign('MAIN', $tpl->fetch('havefnubb~403.html')); $rep->setHttpStatus('403', 'Permission denied'); return $rep; } if ($id_forum == 0) { jLog::log(__METHOD__ . ' line : ' . __LINE__ . ' [this should not be 0] $id_forum', 'DEBUG'); $rep = $this->getResponse('html'); $tpl = new jTpl(); $rep->body->assign('MAIN', $tpl->fetch('havefnubb~404.html')); $rep->setHttpStatus('404', 'Not found'); return $rep; } $rep = $this->getResponse('atom1.0'); $gJConfig = jApp::config(); // entete du flux atom $rep->infos->title = $gJConfig->havefnubb['title']; $rep->infos->webSiteUrl = (empty($_SERVER['HTTPS']) ? 'http' : 'https') . '://' . $_SERVER['HTTP_HOST']; $rep->infos->copyright = $gJConfig->havefnubb['title']; $rep->infos->description = $gJConfig->havefnubb['description']; $rep->infos->updated = date('Y-m-d H:i:s'); $rep->infos->published = date('Y-m-d H:i:s'); $rep->infos->selfLink = jUrl::get('havefnubb~posts:atom', array('ftitle' => $ftitle, 'id_forum' => $fid_forum)); $rep->infos->ttl = 60; $dao = jDao::get('havefnubb~forum'); $forum = $dao->get($id_forum); if (jUrl::escape($forum->forum_name, true) != $ftitle) { jLog::log(__METHOD__ . ' line : ' . __LINE__ . ' [this should not be different] $forum->forum_name and $ftitle', 'DEBUG'); $rep = $this->getResponse('html'); $tpl = new jTpl(); $rep->body->assign('MAIN', $tpl->fetch('havefnubb~404.html')); $rep->setHttpStatus('404', 'Not found'); return $rep; } // 1- limit of posts $nbPostPerPage = 0; $nbPostPerPage = (int) $gJConfig->havefnubb['posts_per_page']; // 2- get the posts of the current forum, limited by point 1 // get all the posts of the current Forum by its Id list($page, $nbPosts, $posts) = jClasses::getService('havefnubb~hfnuposts')->getThreads($id_forum, 0, $nbPostPerPage); $first = true; foreach ($posts as $post) { if ($first) { // le premier enregistrement permet de connaitre // la date du channel $rep->infos->updated = date('Y-m-d H:i:s', $post->date_created); $rep->infos->published = date('Y-m-d H:i:s', $post->date_created); $first = false; } $url = jUrl::getFull('havefnubb~posts:view', array('id_post' => $post->id_post, 'thread_id' => $post->thread_id, 'ftitle' => $post->forum_name, 'id_forum' => $post->id_forum, 'ptitle' => $post->subject)); $item = $rep->createItem($post->subject, $url, date('Y-m-d H:i:s', $post->date_created)); $item->authorName = $post->login; $render = new jWiki(); $item->content = $render->render($post->message); $item->contentType = 'html'; $item->idIsPermalink = true; // on ajoute l'item dans le fil atom $rep->addItem($item); } return $rep; }
public function create($urlact) { if ($this->dataCreateUrl == null) { $sel = new jSelectorUrlCfgSig(jApp::config()->urlengine['significantFile']); jIncluder::inc($sel); $this->dataCreateUrl =& $GLOBALS['SIGNIFICANT_CREATEURL']; } $url = new jUrl('', $urlact->params, ''); $module = $url->getParam('module', jContext::get()); $action = $url->getParam('action'); $id = $module . '~' . $action . '@' . $urlact->requestType; $urlinfo = null; if (isset($this->dataCreateUrl[$id])) { $urlinfo = $this->dataCreateUrl[$id]; $url->delParam('module'); $url->delParam('action'); } else { $id = $module . '~*@' . $urlact->requestType; if (isset($this->dataCreateUrl[$id])) { $urlinfo = $this->dataCreateUrl[$id]; if ($urlinfo[0] != 3 || $urlinfo[3] === true) { $url->delParam('module'); } } else { $id = '@' . $urlact->requestType; if (isset($this->dataCreateUrl[$id])) { $urlinfo = $this->dataCreateUrl[$id]; } else { throw new Exception("Significant url engine doesn't find corresponding url to this action :" . $module . '~' . $action . '@' . $urlact->requestType); } } } if ($urlinfo[0] == 4) { $l = count($urlinfo); $urlinfofound = null; for ($i = 1; $i < $l; $i++) { $ok = true; foreach ($urlinfo[$i][7] as $n => $v) { $specialStatic = $v[0] == '$'; $paramStatic = $url->getParam($n, null); if ($specialStatic) { $typePS = $v[1]; $v = substr($v, 2); if ($typePS == 'l') { if ($paramStatic === null) { $paramStatic = jLocale::getCurrentLang(); } else { if (preg_match('/^(\\w{2,3})_\\w{2,3}$/', $paramStatic, $m)) { $paramStatic = $m[1]; } } } elseif ($typePS == 'L') { if ($paramStatic === null) { $paramStatic = jApp::config()->locale; } else { if (preg_match('/^\\w{2,3}$/', $paramStatic, $m)) { $paramStatic = jLocale::langToLocale($paramStatic); } } } } if ($paramStatic != $v) { $ok = false; break; } } if ($ok) { $urlinfofound = $urlinfo[$i]; break; } } if ($urlinfofound !== null) { $urlinfo = $urlinfofound; } else { $urlinfo = $urlinfo[1]; } } $url->scriptName = jApp::config()->urlengine['basePath'] . $urlinfo[1]; if ($urlinfo[2]) { $url->scriptName = jApp::coord()->request->getServerURI(true) . $url->scriptName; } if ($urlinfo[1] && !jApp::config()->urlengine['multiview']) { $url->scriptName .= jApp::config()->urlengine['entrypointExtension']; } if (in_array($urlact->requestType, array('xmlrpc', 'jsonrpc', 'soap'))) { $url->clearParam(); return $url; } if ($urlinfo[0] == 0) { $s = new jSelectorUrlHandler($urlinfo[3]); $c = $s->resource . 'UrlsHandler'; $handler = new $c(); $handler->create($urlact, $url); if ($urlinfo[4] != '') { $url->pathInfo = $urlinfo[4] . $url->pathInfo; } } elseif ($urlinfo[0] == 1) { $pi = $urlinfo[5]; foreach ($urlinfo[3] as $k => $param) { $typeParam = $urlinfo[4][$k]; $value = $url->getParam($param, ''); if ($typeParam & 2) { $value = jUrl::escape($value, true); } else { if ($typeParam & 1) { $value = str_replace('%2F', '/', urlencode($value)); } else { if ($typeParam & 4) { if ($value == '') { $value = jLocale::getCurrentLang(); } else { if (preg_match('/^(\\w{2,3})_\\w{2,3}$/', $value, $m)) { $value = $m[1]; } } } else { if ($typeParam & 8) { if ($value == '') { $value = jApp::config()->locale; } else { if (preg_match('/^\\w{2,3}$/', $value, $m)) { $value = jLocale::langToLocale($value); } } } else { $value = urlencode($value); } } } } $pi = str_replace(':' . $param, $value, $pi); $url->delParam($param); } $url->pathInfo = $pi; if ($urlinfo[6]) { $url->setParam('action', $action); } foreach ($urlinfo[7] as $name => $value) { $url->delParam($name); } } elseif ($urlinfo[0] == 3) { if ($urlinfo[3]) { $url->delParam('module'); } } return $url; }