/** * @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); } }