<?php
/**
* xoAppUrl Smarty compiler plug-in
*
* See the enclosed file LICENSE for licensing information.
* If you did not receive this file, get it at http://www.gnu.org/licenses/gpl-2.0.html
*
* @copyright (c) 2000-2016 XOOPS Project (www.xoops.org)
* @license GNU GPL 2 (http://www.gnu.org/licenses/gpl-2.0.html)
* @author Skalpa Keo <skalpa@xoops.org>
* @package xos_opal
* @subpackage xos_opal_Smarty
* @since 2.0.14
*/
/**
* Inserts the URL of an application page
*
* This plug-in allows you to generate a module location URL. It uses any URL rewriting
* mechanism and rules you'll have configured for the system.
*
* To ensure this can be as optimized as possible, it accepts 2 modes of operation:
*
* <b>Static address generation</b>:<br>
* This is the default mode and fastest mode. When used, the URL is generated during
* the template compilation, and statically written in the compiled template file.
* To use it, you just need to provide a location in a format XOOPS understands.
*
* <code>
* // Generate an URL using a physical path
* ([xoAppUrl modules/something/yourpage.php])
* // Generate an URL using a module+location identifier (2.3+)
* ([xoAppUrl mod_xoops_Identification#logout])
* </code>
*
* <b>Dynamic address generation</b>:<br>
* The is the slowest mode, and its use should be prevented unless necessary. Here,
* the URL is generated dynamically each time the template is displayed, thus allowing
* you to use the value of a template variable in the location string. To use it, you
* must surround your location with double-quotes ("), and use the
* {@link http://smarty.php.net/manual/en/language.syntax.quotes.php Smarty quoted strings}
* syntax to insert variables values.
*
* <code>
* // Use the value of the $sortby template variable in the URL
* ([xoAppUrl "modules/something/yourpage.php?order=`$sortby`"])
* </code>
* @param $argStr
* @param $compiler
* @return string
*/
function smarty_compiler_xoAppUrl($argStr, &$compiler)
{
global $xoops;
$argStr = trim($argStr);
@list($url, $params) = explode(' ', $argStr, 2);
if (substr($url, 0, 1) === '/') {
$url = 'www' . $url;
}
// Static URL generation
if (strpos($argStr, '$') === false && $url !== '.') {
if (isset($params)) {
$params = $compiler->_parse_attrs($params, false);
foreach ($params as $k => $v) {
if (in_array(substr($v, 0, 1), array('"', "'"))) {
$params[$k] = substr($v, 1, -1);
}
}
$url = $xoops->buildUrl($url, $params);
}
$url = $xoops->path($url, true);
return "echo '" . addslashes(htmlspecialchars($url)) . "';";
}
// Dynamic URL generation
$str = "\$xoops->path('$url', true)";
if ($url === '.') {
$str = "\$_SERVER['REQUEST_URI']";
}
if (isset($params)) {
$params = $compiler->_parse_attrs($params, false);
$str = "\$xoops->buildUrl($str, array(\n";
foreach ($params as $k => $v) {
$str .= var_export($k, true) . " => $v,\n";
}
$str .= '))';
}
return "echo htmlspecialchars($str);";
}
|