mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Enhancement Add setter and getter for certain classes, so that LeftAndMain no longer updates config during init
This commit is contained in:
parent
da27948777
commit
7e92b053f4
@ -42,10 +42,10 @@ Or, a better way is to call this just for the rendering phase of this particular
|
|||||||
```php
|
```php
|
||||||
public function RenderCustomTemplate()
|
public function RenderCustomTemplate()
|
||||||
{
|
{
|
||||||
Config::inst()->update('SSViewer', 'rewrite_hash_links', false);
|
SSViewer::setRewriteHashLinks(false);
|
||||||
$html = $this->renderWith('MyCustomTemplate');
|
$html = $this->renderWith('MyCustomTemplate');
|
||||||
Config::inst()->update('SSViewer', 'rewrite_hash_links', true);
|
SSViewer::setRewriteHashLinks(true);
|
||||||
|
|
||||||
return $html;
|
return $html;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
@ -57,6 +57,13 @@ class ContentNegotiator
|
|||||||
* @var bool
|
* @var bool
|
||||||
*/
|
*/
|
||||||
private static $enabled = false;
|
private static $enabled = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @config
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
protected static $current_enabled = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @config
|
* @config
|
||||||
@ -84,12 +91,37 @@ class ContentNegotiator
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (static::config()->get('enabled')) {
|
if (ContentNegotiator::getEnabled()) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return (substr($response->getBody(), 0, 5) == '<' . '?xml');
|
return (substr($response->getBody(), 0, 5) == '<' . '?xml');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the current enabled status, if it is not set this will fallback to config
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function getEnabled()
|
||||||
|
{
|
||||||
|
if (!isset(self::$current_enabled)) {
|
||||||
|
self::$current_enabled = ContentNegotiator::config()->get('enabled');
|
||||||
|
}
|
||||||
|
return self::$current_enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the current enabled status
|
||||||
|
*
|
||||||
|
* @param bool $enabled
|
||||||
|
*/
|
||||||
|
public static function setEnabled($enabled)
|
||||||
|
{
|
||||||
|
if (isset($enabled)) {
|
||||||
|
self::$current_enabled = $enabled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param HTTPResponse $response
|
* @param HTTPResponse $response
|
||||||
|
@ -58,6 +58,13 @@ abstract class HTMLEditorConfig
|
|||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
private static $user_themes = [];
|
private static $user_themes = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of the current themes set for this config
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected static $current_themes = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the HTMLEditorConfig object for the given identifier. This is a correct way to get an HTMLEditorConfig
|
* Get the HTMLEditorConfig object for the given identifier. This is a correct way to get an HTMLEditorConfig
|
||||||
@ -95,7 +102,31 @@ abstract class HTMLEditorConfig
|
|||||||
}
|
}
|
||||||
return $config;
|
return $config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the current themes, if it is not set this will fallback to config
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getThemes()
|
||||||
|
{
|
||||||
|
if (!isset(self::$current_themes)) {
|
||||||
|
self::$current_themes = self::config()->get('user_themes');
|
||||||
|
}
|
||||||
|
return self::$current_themes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the current theme
|
||||||
|
*
|
||||||
|
* @param array $themes
|
||||||
|
*/
|
||||||
|
public static function setThemes($themes)
|
||||||
|
{
|
||||||
|
if (isset($themes)) {
|
||||||
|
self::$current_themes = $themes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the currently active configuration object. Note that the existing active
|
* Set the currently active configuration object. Note that the existing active
|
||||||
* config will not be renamed to the new identifier.
|
* config will not be renamed to the new identifier.
|
||||||
|
@ -635,7 +635,7 @@ class TinyMCEConfig extends HTMLEditorConfig
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Themed editor.css
|
// Themed editor.css
|
||||||
$themes = $this->config()->get('user_themes') ?: SSViewer::get_themes();
|
$themes = HTMLEditorConfig::getThemes() ?: SSViewer::get_themes();
|
||||||
$themedEditor = ThemeResourceLoader::inst()->findThemedCSS('editor', $themes);
|
$themedEditor = ThemeResourceLoader::inst()->findThemedCSS('editor', $themes);
|
||||||
if ($themedEditor) {
|
if ($themedEditor) {
|
||||||
$editor[] = Director::absoluteURL($themedEditor);
|
$editor[] = Director::absoluteURL($themedEditor);
|
||||||
|
@ -1213,7 +1213,7 @@ class SSTemplateParser extends Parser implements TemplateParser
|
|||||||
// TODO: This is pretty ugly & gets applied on all files not just html. I wonder if we can make this
|
// TODO: This is pretty ugly & gets applied on all files not just html. I wonder if we can make this
|
||||||
// non-dynamically calculated
|
// non-dynamically calculated
|
||||||
$code = <<<'EOC'
|
$code = <<<'EOC'
|
||||||
(\SilverStripe\View\SSViewer::config()->get('rewrite_hash_links')
|
(\SilverStripe\View\SSViewer::getRewriteHashLinksDefault()
|
||||||
? \SilverStripe\Core\Convert::raw2att( preg_replace("/^(\\/)+/", "/", $_SERVER['REQUEST_URI'] ) )
|
? \SilverStripe\Core\Convert::raw2att( preg_replace("/^(\\/)+/", "/", $_SERVER['REQUEST_URI'] ) )
|
||||||
: "")
|
: "")
|
||||||
EOC;
|
EOC;
|
||||||
|
@ -1118,7 +1118,7 @@ class SSTemplateParser extends Parser implements TemplateParser
|
|||||||
$matchrule = "QuotedString"; $result = $this->construct($matchrule, $matchrule, null);
|
$matchrule = "QuotedString"; $result = $this->construct($matchrule, $matchrule, null);
|
||||||
$_143 = NULL;
|
$_143 = NULL;
|
||||||
do {
|
do {
|
||||||
$stack[] = $result; $result = $this->construct( $matchrule, "q" );
|
$stack[] = $result; $result = $this->construct( $matchrule, "q" );
|
||||||
if (( $subres = $this->rx( '/[\'"]/' ) ) !== FALSE) {
|
if (( $subres = $this->rx( '/[\'"]/' ) ) !== FALSE) {
|
||||||
$result["text"] .= $subres;
|
$result["text"] .= $subres;
|
||||||
$subres = $result; $result = array_pop($stack);
|
$subres = $result; $result = array_pop($stack);
|
||||||
@ -1128,7 +1128,7 @@ class SSTemplateParser extends Parser implements TemplateParser
|
|||||||
$result = array_pop($stack);
|
$result = array_pop($stack);
|
||||||
$_143 = FALSE; break;
|
$_143 = FALSE; break;
|
||||||
}
|
}
|
||||||
$stack[] = $result; $result = $this->construct( $matchrule, "String" );
|
$stack[] = $result; $result = $this->construct( $matchrule, "String" );
|
||||||
if (( $subres = $this->rx( '/ (\\\\\\\\ | \\\\. | [^'.$this->expression($result, $stack, 'q').'\\\\])* /' ) ) !== FALSE) {
|
if (( $subres = $this->rx( '/ (\\\\\\\\ | \\\\. | [^'.$this->expression($result, $stack, 'q').'\\\\])* /' ) ) !== FALSE) {
|
||||||
$result["text"] .= $subres;
|
$result["text"] .= $subres;
|
||||||
$subres = $result; $result = array_pop($stack);
|
$subres = $result; $result = array_pop($stack);
|
||||||
@ -1481,7 +1481,7 @@ class SSTemplateParser extends Parser implements TemplateParser
|
|||||||
$pos_200 = $this->pos;
|
$pos_200 = $this->pos;
|
||||||
$_199 = NULL;
|
$_199 = NULL;
|
||||||
do {
|
do {
|
||||||
$stack[] = $result; $result = $this->construct( $matchrule, "Not" );
|
$stack[] = $result; $result = $this->construct( $matchrule, "Not" );
|
||||||
if (( $subres = $this->literal( 'not' ) ) !== FALSE) {
|
if (( $subres = $this->literal( 'not' ) ) !== FALSE) {
|
||||||
$result["text"] .= $subres;
|
$result["text"] .= $subres;
|
||||||
$subres = $result; $result = array_pop($stack);
|
$subres = $result; $result = array_pop($stack);
|
||||||
@ -1876,7 +1876,7 @@ class SSTemplateParser extends Parser implements TemplateParser
|
|||||||
else { $_275 = FALSE; break; }
|
else { $_275 = FALSE; break; }
|
||||||
if (( $subres = $this->whitespace( ) ) !== FALSE) { $result["text"] .= $subres; }
|
if (( $subres = $this->whitespace( ) ) !== FALSE) { $result["text"] .= $subres; }
|
||||||
else { $_275 = FALSE; break; }
|
else { $_275 = FALSE; break; }
|
||||||
$stack[] = $result; $result = $this->construct( $matchrule, "Call" );
|
$stack[] = $result; $result = $this->construct( $matchrule, "Call" );
|
||||||
$_271 = NULL;
|
$_271 = NULL;
|
||||||
do {
|
do {
|
||||||
$matcher = 'match_'.'Word'; $key = $matcher; $pos = $this->pos;
|
$matcher = 'match_'.'Word'; $key = $matcher; $pos = $this->pos;
|
||||||
@ -2363,7 +2363,7 @@ class SSTemplateParser extends Parser implements TemplateParser
|
|||||||
$_364 = NULL;
|
$_364 = NULL;
|
||||||
do {
|
do {
|
||||||
if (( $subres = $this->whitespace( ) ) !== FALSE) { $result["text"] .= $subres; }
|
if (( $subres = $this->whitespace( ) ) !== FALSE) { $result["text"] .= $subres; }
|
||||||
$stack[] = $result; $result = $this->construct( $matchrule, "Conditional" );
|
$stack[] = $result; $result = $this->construct( $matchrule, "Conditional" );
|
||||||
$_360 = NULL;
|
$_360 = NULL;
|
||||||
do {
|
do {
|
||||||
$_358 = NULL;
|
$_358 = NULL;
|
||||||
@ -2769,7 +2769,7 @@ class SSTemplateParser extends Parser implements TemplateParser
|
|||||||
if (( $subres = $this->literal( '<%' ) ) !== FALSE) { $result["text"] .= $subres; }
|
if (( $subres = $this->literal( '<%' ) ) !== FALSE) { $result["text"] .= $subres; }
|
||||||
else { $_492 = FALSE; break; }
|
else { $_492 = FALSE; break; }
|
||||||
if (( $subres = $this->whitespace( ) ) !== FALSE) { $result["text"] .= $subres; }
|
if (( $subres = $this->whitespace( ) ) !== FALSE) { $result["text"] .= $subres; }
|
||||||
$stack[] = $result; $result = $this->construct( $matchrule, "CacheTag" );
|
$stack[] = $result; $result = $this->construct( $matchrule, "CacheTag" );
|
||||||
$_445 = NULL;
|
$_445 = NULL;
|
||||||
do {
|
do {
|
||||||
$_443 = NULL;
|
$_443 = NULL;
|
||||||
@ -2828,7 +2828,7 @@ class SSTemplateParser extends Parser implements TemplateParser
|
|||||||
$_461 = NULL;
|
$_461 = NULL;
|
||||||
do {
|
do {
|
||||||
if (( $subres = $this->whitespace( ) ) !== FALSE) { $result["text"] .= $subres; }
|
if (( $subres = $this->whitespace( ) ) !== FALSE) { $result["text"] .= $subres; }
|
||||||
$stack[] = $result; $result = $this->construct( $matchrule, "Conditional" );
|
$stack[] = $result; $result = $this->construct( $matchrule, "Conditional" );
|
||||||
$_457 = NULL;
|
$_457 = NULL;
|
||||||
do {
|
do {
|
||||||
$_455 = NULL;
|
$_455 = NULL;
|
||||||
@ -3768,7 +3768,7 @@ class SSTemplateParser extends Parser implements TemplateParser
|
|||||||
unset( $pos_622 );
|
unset( $pos_622 );
|
||||||
}
|
}
|
||||||
if (( $subres = $this->whitespace( ) ) !== FALSE) { $result["text"] .= $subres; }
|
if (( $subres = $this->whitespace( ) ) !== FALSE) { $result["text"] .= $subres; }
|
||||||
$stack[] = $result; $result = $this->construct( $matchrule, "Zap" );
|
$stack[] = $result; $result = $this->construct( $matchrule, "Zap" );
|
||||||
if (( $subres = $this->literal( '%>' ) ) !== FALSE) {
|
if (( $subres = $this->literal( '%>' ) ) !== FALSE) {
|
||||||
$result["text"] .= $subres;
|
$result["text"] .= $subres;
|
||||||
$subres = $result; $result = array_pop($stack);
|
$subres = $result; $result = array_pop($stack);
|
||||||
@ -4178,7 +4178,7 @@ class SSTemplateParser extends Parser implements TemplateParser
|
|||||||
if (( $subres = $this->literal( '<%' ) ) !== FALSE) { $result["text"] .= $subres; }
|
if (( $subres = $this->literal( '<%' ) ) !== FALSE) { $result["text"] .= $subres; }
|
||||||
else { $_680 = FALSE; break; }
|
else { $_680 = FALSE; break; }
|
||||||
if (( $subres = $this->whitespace( ) ) !== FALSE) { $result["text"] .= $subres; }
|
if (( $subres = $this->whitespace( ) ) !== FALSE) { $result["text"] .= $subres; }
|
||||||
$stack[] = $result; $result = $this->construct( $matchrule, "Tag" );
|
$stack[] = $result; $result = $this->construct( $matchrule, "Tag" );
|
||||||
$_674 = NULL;
|
$_674 = NULL;
|
||||||
do {
|
do {
|
||||||
if (( $subres = $this->literal( 'end_' ) ) !== FALSE) { $result["text"] .= $subres; }
|
if (( $subres = $this->literal( 'end_' ) ) !== FALSE) { $result["text"] .= $subres; }
|
||||||
@ -4834,7 +4834,7 @@ class SSTemplateParser extends Parser implements TemplateParser
|
|||||||
// TODO: This is pretty ugly & gets applied on all files not just html. I wonder if we can make this
|
// TODO: This is pretty ugly & gets applied on all files not just html. I wonder if we can make this
|
||||||
// non-dynamically calculated
|
// non-dynamically calculated
|
||||||
$code = <<<'EOC'
|
$code = <<<'EOC'
|
||||||
(\SilverStripe\View\SSViewer::config()->get('rewrite_hash_links')
|
(\SilverStripe\View\SSViewer::getRewriteHashLinksDefault()
|
||||||
? \SilverStripe\Core\Convert::raw2att( preg_replace("/^(\\/)+/", "/", $_SERVER['REQUEST_URI'] ) )
|
? \SilverStripe\Core\Convert::raw2att( preg_replace("/^(\\/)+/", "/", $_SERVER['REQUEST_URI'] ) )
|
||||||
: "")
|
: "")
|
||||||
EOC;
|
EOC;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace SilverStripe\View;
|
namespace SilverStripe\View;
|
||||||
|
|
||||||
|
use SilverStripe\Core\Config\Config;
|
||||||
use SilverStripe\Core\Config\Configurable;
|
use SilverStripe\Core\Config\Configurable;
|
||||||
use SilverStripe\Core\ClassInfo;
|
use SilverStripe\Core\ClassInfo;
|
||||||
use Psr\SimpleCache\CacheInterface;
|
use Psr\SimpleCache\CacheInterface;
|
||||||
@ -49,27 +50,40 @@ class SSViewer implements Flushable
|
|||||||
const DEFAULT_THEME = '$default';
|
const DEFAULT_THEME = '$default';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @config
|
* A list (highest priority first) of themes to use
|
||||||
* @var string A list (highest priority first) of themes to use
|
|
||||||
* Only used when {@link $theme_enabled} is set to TRUE.
|
* Only used when {@link $theme_enabled} is set to TRUE.
|
||||||
|
*
|
||||||
|
* @config
|
||||||
|
* @var string
|
||||||
*/
|
*/
|
||||||
private static $themes = [];
|
private static $themes = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Overridden value of $themes config
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected static $current_themes = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The used "theme", which usually consists of templates, images and stylesheets.
|
||||||
|
* Only used when {@link $theme_enabled} is set to TRUE, and $themes is empty
|
||||||
|
*
|
||||||
* @deprecated 4.0..5.0
|
* @deprecated 4.0..5.0
|
||||||
* @config
|
* @config
|
||||||
* @var string The used "theme", which usually consists of templates, images and stylesheets.
|
* @var string
|
||||||
* Only used when {@link $theme_enabled} is set to TRUE, and $themes is empty
|
|
||||||
*/
|
*/
|
||||||
private static $theme = null;
|
private static $theme = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @config
|
* Use the theme. Set to FALSE in order to disable themes,
|
||||||
* @var boolean Use the theme. Set to FALSE in order to disable themes,
|
|
||||||
* which can be useful for scenarios where theme overrides are temporarily undesired,
|
* which can be useful for scenarios where theme overrides are temporarily undesired,
|
||||||
* such as an administrative interface separate from the website theme.
|
* such as an administrative interface separate from the website theme.
|
||||||
* It retains the theme settings to be re-enabled, for example when a website content
|
* It retains the theme settings to be re-enabled, for example when a website content
|
||||||
* needs to be rendered from within this administrative interface.
|
* needs to be rendered from within this administrative interface.
|
||||||
|
*
|
||||||
|
* @config
|
||||||
|
* @var bool
|
||||||
*/
|
*/
|
||||||
private static $theme_enabled = true;
|
private static $theme_enabled = true;
|
||||||
|
|
||||||
@ -83,53 +97,75 @@ class SSViewer implements Flushable
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @config
|
* @config
|
||||||
* @var boolean $source_file_comments
|
* @var bool
|
||||||
*/
|
*/
|
||||||
private static $source_file_comments = false;
|
private static $source_file_comments = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Set if hash links should be rewritten
|
||||||
|
*
|
||||||
* @config
|
* @config
|
||||||
* @var boolean
|
* @var bool
|
||||||
*/
|
*/
|
||||||
private static $rewrite_hash_links = true;
|
private static $rewrite_hash_links = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Overridden value of rewrite_hash_links config
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
protected static $current_rewrite_hash_links = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instance variable to disable rewrite_hash_links (overrides global default)
|
||||||
|
* Leave null to use global state.
|
||||||
|
*
|
||||||
|
* @var bool|null
|
||||||
|
*/
|
||||||
|
protected $rewriteHashlinks = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
* @ignore
|
* @ignore
|
||||||
*/
|
*/
|
||||||
private static $template_cache_flushed = false;
|
private static $template_cache_flushed = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @internal
|
||||||
* @ignore
|
* @ignore
|
||||||
*/
|
*/
|
||||||
private static $cacheblock_cache_flushed = false;
|
private static $cacheblock_cache_flushed = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array $topLevel List of items being processed
|
* List of items being processed
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected static $topLevel = [];
|
protected static $topLevel = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array $templates List of templates to select from
|
* List of templates to select from
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $templates = null;
|
protected $templates = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string $chosen Absolute path to chosen template file
|
* Absolute path to chosen template file
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $chosen = null;
|
protected $chosen = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array Templates to use when looking up 'Layout' or 'Content'
|
* Templates to use when looking up 'Layout' or 'Content'
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $subTemplates = null;
|
protected $subTemplates = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var boolean
|
* @var bool
|
||||||
*/
|
|
||||||
protected $rewriteHashlinks = true;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var boolean
|
|
||||||
*/
|
*/
|
||||||
protected $includeRequirements = true;
|
protected $includeRequirements = true;
|
||||||
|
|
||||||
@ -315,6 +351,55 @@ class SSViewer implements Flushable
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if rewrite hash links are enabled on this instance
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function getRewriteHashLinks()
|
||||||
|
{
|
||||||
|
if (isset($this->rewriteHashlinks)) {
|
||||||
|
return $this->rewriteHashlinks;
|
||||||
|
}
|
||||||
|
return static::getRewriteHashLinksDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set if hash links are rewritten for this instance
|
||||||
|
*
|
||||||
|
* @param bool $rewrite
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setRewriteHashLinks($rewrite)
|
||||||
|
{
|
||||||
|
$this->rewriteHashlinks = $rewrite;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get default value for rewrite hash links for all modules
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function getRewriteHashLinksDefault()
|
||||||
|
{
|
||||||
|
// Check if config overridden
|
||||||
|
if (isset(self::$current_rewrite_hash_links)) {
|
||||||
|
return self::$current_rewrite_hash_links;
|
||||||
|
}
|
||||||
|
return Config::inst()->get(static::class, 'rewrite_hash_links');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set default rewrite hash links
|
||||||
|
*
|
||||||
|
* @param bool $rewrite
|
||||||
|
*/
|
||||||
|
public static function setRewriteHashLinksDefault($rewrite)
|
||||||
|
{
|
||||||
|
self::$current_rewrite_hash_links = $rewrite;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string|array $templates
|
* @param string|array $templates
|
||||||
*/
|
*/
|
||||||
@ -364,7 +449,7 @@ class SSViewer implements Flushable
|
|||||||
*
|
*
|
||||||
* @param array|string $templates
|
* @param array|string $templates
|
||||||
*
|
*
|
||||||
* @return boolean
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function hasTemplate($templates)
|
public static function hasTemplate($templates)
|
||||||
{
|
{
|
||||||
@ -374,11 +459,12 @@ class SSViewer implements Flushable
|
|||||||
/**
|
/**
|
||||||
* Call this to disable rewriting of <a href="#xxx"> links. This is useful in Ajax applications.
|
* Call this to disable rewriting of <a href="#xxx"> links. This is useful in Ajax applications.
|
||||||
* It returns the SSViewer objects, so that you can call new SSViewer("X")->dontRewriteHashlinks()->process();
|
* It returns the SSViewer objects, so that you can call new SSViewer("X")->dontRewriteHashlinks()->process();
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
*/
|
*/
|
||||||
public function dontRewriteHashlinks()
|
public function dontRewriteHashlinks()
|
||||||
{
|
{
|
||||||
$this->rewriteHashlinks = false;
|
$this->setRewriteHashLinks(false);
|
||||||
SSViewer::config()->update('rewrite_hash_links', false);
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -467,7 +553,7 @@ class SSViewer implements Flushable
|
|||||||
/**
|
/**
|
||||||
* Flag whether to include the requirements in this response.
|
* Flag whether to include the requirements in this response.
|
||||||
*
|
*
|
||||||
* @param boolean
|
* @param bool
|
||||||
*/
|
*/
|
||||||
public function includeRequirements($incl = true)
|
public function includeRequirements($incl = true)
|
||||||
{
|
{
|
||||||
@ -528,6 +614,11 @@ class SSViewer implements Flushable
|
|||||||
*/
|
*/
|
||||||
public function process($item, $arguments = null, $inheritedScope = null)
|
public function process($item, $arguments = null, $inheritedScope = null)
|
||||||
{
|
{
|
||||||
|
// Set hashlinks and temporarily modify global state
|
||||||
|
$rewrite = $this->getRewriteHashLinks();
|
||||||
|
$origRewriteDefault = static::getRewriteHashLinksDefault();
|
||||||
|
static::setRewriteHashLinksDefault($rewrite);
|
||||||
|
|
||||||
SSViewer::$topLevel[] = $item;
|
SSViewer::$topLevel[] = $item;
|
||||||
|
|
||||||
$template = $this->chosen;
|
$template = $this->chosen;
|
||||||
@ -581,9 +672,7 @@ class SSViewer implements Flushable
|
|||||||
array_pop(SSViewer::$topLevel);
|
array_pop(SSViewer::$topLevel);
|
||||||
|
|
||||||
// If we have our crazy base tag, then fix # links referencing the current page.
|
// If we have our crazy base tag, then fix # links referencing the current page.
|
||||||
|
if ($rewrite) {
|
||||||
$rewrite = SSViewer::config()->uninherited('rewrite_hash_links');
|
|
||||||
if ($this->rewriteHashlinks && $rewrite) {
|
|
||||||
if (strpos($output, '<base') !== false) {
|
if (strpos($output, '<base') !== false) {
|
||||||
if ($rewrite === 'php') {
|
if ($rewrite === 'php') {
|
||||||
$thisURLRelativeToBase = <<<PHP
|
$thisURLRelativeToBase = <<<PHP
|
||||||
@ -599,6 +688,9 @@ PHP;
|
|||||||
|
|
||||||
/** @var DBHTMLText $html */
|
/** @var DBHTMLText $html */
|
||||||
$html = DBField::create_field('HTMLFragment', $output);
|
$html = DBField::create_field('HTMLFragment', $output);
|
||||||
|
|
||||||
|
// Reset global state
|
||||||
|
static::setRewriteHashLinksDefault($origRewriteDefault);
|
||||||
return $html;
|
return $html;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -678,6 +770,7 @@ PHP;
|
|||||||
*
|
*
|
||||||
* @param string $content The template contents
|
* @param string $content The template contents
|
||||||
* @param string $template The template file name
|
* @param string $template The template file name
|
||||||
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function parseTemplateContent($content, $template = "")
|
public function parseTemplateContent($content, $template = "")
|
||||||
{
|
{
|
||||||
|
@ -1679,7 +1679,7 @@ after'
|
|||||||
|
|
||||||
public function testRewriteHashlinks()
|
public function testRewriteHashlinks()
|
||||||
{
|
{
|
||||||
SSViewer::config()->update('rewrite_hash_links', true);
|
SSViewer::setRewriteHashLinksDefault(true);
|
||||||
|
|
||||||
$_SERVER['HTTP_HOST'] = 'www.mysite.com';
|
$_SERVER['HTTP_HOST'] = 'www.mysite.com';
|
||||||
$_SERVER['REQUEST_URI'] = '//file.com?foo"onclick="alert(\'xss\')""';
|
$_SERVER['REQUEST_URI'] = '//file.com?foo"onclick="alert(\'xss\')""';
|
||||||
@ -1744,7 +1744,7 @@ after'
|
|||||||
|
|
||||||
public function testRewriteHashlinksInPhpMode()
|
public function testRewriteHashlinksInPhpMode()
|
||||||
{
|
{
|
||||||
SSViewer::config()->update('rewrite_hash_links', 'php');
|
SSViewer::setRewriteHashLinksDefault('php');
|
||||||
|
|
||||||
$tmplFile = TEMP_FOLDER . '/SSViewerTest_testRewriteHashlinksInPhpMode_' . sha1(rand()) . '.ss';
|
$tmplFile = TEMP_FOLDER . '/SSViewerTest_testRewriteHashlinksInPhpMode_' . sha1(rand()) . '.ss';
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user