Better location handling
This commit is contained in:
parent
fede941163
commit
6a071c1c5f
5 changed files with 50 additions and 30 deletions
|
@ -1,11 +1,11 @@
|
|||
<?php
|
||||
// Copyright (c) 2013 Datenstrom, http://datenstrom.se
|
||||
// Copyright (c) 2013-2014 Datenstrom, http://datenstrom.se
|
||||
// This file may be used and distributed under the terms of the public license.
|
||||
|
||||
// Markdown extra core plugin
|
||||
class YellowMarkdownExtra
|
||||
{
|
||||
const Version = "0.2.5";
|
||||
const Version = "0.2.6";
|
||||
var $yellow; //access to API
|
||||
var $textHtml; //generated text (HTML format)
|
||||
|
||||
|
@ -16,10 +16,10 @@ class YellowMarkdownExtra
|
|||
}
|
||||
|
||||
// Handle text parsing
|
||||
function onParse($text)
|
||||
function onParse($page, $text)
|
||||
{
|
||||
$markdown = new YellowMarkdownExtraParser($this->yellow);
|
||||
return $this->textHtml = $markdown->transform($text);
|
||||
$this->textHtml = $markdown->transform($page, $text);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -35,12 +35,14 @@ class YellowMarkdownExtraParser extends MarkdownExtraParser
|
|||
}
|
||||
|
||||
// Transform text
|
||||
function transform($text)
|
||||
function transform($page, $text)
|
||||
{
|
||||
$text = preg_replace("/@pageRead/i", $this->yellow->page->get("pageRead"), $text);
|
||||
$text = preg_replace("/@pageEdit/i", $this->yellow->page->get("pageEdit"), $text);
|
||||
$text = preg_replace("/@pageError/i", $this->yellow->page->get("pageError"), $text);
|
||||
return parent::transform($text);
|
||||
$location = $this->yellow->toolbox->getDirectoryLocation($page->getLocation());
|
||||
$text = preg_replace("/@pageRead/i", $page->get("pageRead"), $text);
|
||||
$text = preg_replace("/@pageEdit/i", $page->get("pageEdit"), $text);
|
||||
$text = preg_replace("/@pageError/i", $page->get("pageError"), $text);
|
||||
return preg_replace("/<a(.*?)href=\"(?!javascript:)([^\/\"]+)\"(.*?)>/i",
|
||||
"<a$1href=\"$location$2\"$3>", parent::transform($text));
|
||||
}
|
||||
|
||||
// Handle links
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<?php
|
||||
// Copyright (c) 2013 Datenstrom, http://datenstrom.se
|
||||
// Copyright (c) 2013-2014 Datenstrom, http://datenstrom.se
|
||||
// This file may be used and distributed under the terms of the public license.
|
||||
|
||||
// Web interface core plugin
|
||||
class YellowWebinterface
|
||||
{
|
||||
const Version = "0.2.4";
|
||||
const Version = "0.2.5";
|
||||
var $yellow; //access to API
|
||||
var $users; //web interface users
|
||||
var $activeLocation; //web interface location? (boolean)
|
||||
|
@ -45,19 +45,26 @@ class YellowWebinterface
|
|||
return $statusCode;
|
||||
}
|
||||
|
||||
// Handle page meta data parsing
|
||||
function onParseMeta($page, $text)
|
||||
{
|
||||
if($this->isWebinterfaceLocation() && $this->isUser())
|
||||
{
|
||||
if($page == $this->yellow->page)
|
||||
{
|
||||
if(empty($this->rawDataOriginal)) $this->rawDataOriginal = $page->rawData;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Handle page content parsing
|
||||
function onParseContent($page, $text)
|
||||
{
|
||||
$output = NULL;
|
||||
if($this->isWebinterfaceLocation() && $this->isUser())
|
||||
{
|
||||
$serverBase = $this->yellow->config->get("serverBase");
|
||||
$webinterfaceLocation = trim($this->yellow->config->get("webinterfaceLocation"), '/');
|
||||
$output = preg_replace("#<a(.*?)href=\"$serverBase/(?!$webinterfaceLocation)(.*?)\"(.*?)>#",
|
||||
"<a$1href=\"$serverBase/$webinterfaceLocation/$2\"$3>", $text);
|
||||
if($page == $this->yellow->page)
|
||||
{
|
||||
if(empty($this->rawDataOriginal)) $this->rawDataOriginal = $page->rawData;
|
||||
switch($page->statusCode)
|
||||
{
|
||||
case 424: $language = $this->isUser() ? $this->users->getLanguage($this->activeUserEmail) : $page->get("language");
|
||||
|
@ -70,6 +77,14 @@ class YellowWebinterface
|
|||
case 500: $page->rawData = $this->rawDataOriginal; break;
|
||||
}
|
||||
}
|
||||
$serverBase = $this->yellow->config->get("serverBase");
|
||||
$location = trim($this->yellow->config->get("webinterfaceLocation"), '/');
|
||||
$callback = function($matches) use ($serverBase, $location)
|
||||
{
|
||||
$matches[2] = preg_replace("#^$serverBase/(?!$location)(.*)$#", "$serverBase/$location/$1", $matches[2]);
|
||||
return "<a$matches[1]href=\"$matches[2]\"$matches[3]>";
|
||||
};
|
||||
$output = preg_replace_callback("/<a(.*?)href=\"([^\"]+)\"(.*?)>/i", $callback, $text);
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
// Yellow main class
|
||||
class Yellow
|
||||
{
|
||||
const Version = "0.2.6";
|
||||
const Version = "0.2.7";
|
||||
var $page; //current page data
|
||||
var $pages; //current page tree from file system
|
||||
var $config; //configuration
|
||||
|
@ -224,8 +224,7 @@ class Yellow
|
|||
$fileName = $this->toolbox->findFileFromLocation($location,
|
||||
$this->config->get("contentDir"), $this->config->get("contentHomeDir"),
|
||||
$this->config->get("contentDefaultFile"), $this->config->get("contentExtension"));
|
||||
if(!$this->toolbox->isFileLocation($location) && !is_file($fileName) &&
|
||||
preg_match("/[^\/]+:.*/", rawurldecode($this->toolbox->getLocation())))
|
||||
if(!is_file($fileName) && $this->toolbox->isLocationArgs($this->toolbox->getLocation()))
|
||||
{
|
||||
$location = rtrim($location, '/');
|
||||
$fileName = $this->toolbox->findFileFromLocation($location,
|
||||
|
@ -446,10 +445,7 @@ class YellowPage
|
|||
if(method_exists($plugin["obj"], "onParse"))
|
||||
{
|
||||
$this->parser = $plugin["obj"];
|
||||
$this->parser->onParse($this->getContent(true));
|
||||
$location = $this->yellow->toolbox->getDirectoryLocation($this->getLocation());
|
||||
$this->parser->textHtml = preg_replace("#<a(.*?)href=\"(?!javascript:)([^\/\"]+)\"(.*?)>#",
|
||||
"<a$1href=\"$location$2\"$3>", $this->parser->textHtml);
|
||||
$this->parser->onParse($this, $this->getContent(true));
|
||||
foreach($this->yellow->plugins->plugins as $key=>$value)
|
||||
{
|
||||
if(method_exists($value["obj"], "onParseContent"))
|
||||
|
@ -466,7 +462,7 @@ class YellowPage
|
|||
{
|
||||
$this->set("keywords", $this->yellow->toolbox->createTextKeywords($this->get("title"), 10));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(defined("DEBUG") && DEBUG>=2) echo "YellowPage::parseContent location:".$this->location."<br/>\n";
|
||||
}
|
||||
|
@ -1207,13 +1203,13 @@ class YellowToolbox
|
|||
function getLocation()
|
||||
{
|
||||
$uri = $_SERVER["REQUEST_URI"];
|
||||
return ($pos = strposu($uri, '?')) ? substru($uri, 0, $pos) : $uri;
|
||||
return rawurldecode(($pos = strposu($uri, '?')) ? substru($uri, 0, $pos) : $uri);
|
||||
}
|
||||
|
||||
// Return location from current HTTP request, remove unwanted path tokens and location arguments
|
||||
// Return location from current HTTP request, remove unwanted path tokens
|
||||
function getLocationNormalised()
|
||||
{
|
||||
$string = rawurldecode($this->getLocation());
|
||||
$string = $this->getLocation();
|
||||
$location = ($string[0]=='/') ? '' : '/';
|
||||
for($pos=0; $pos<strlenb($string); ++$pos)
|
||||
{
|
||||
|
@ -1246,6 +1242,7 @@ class YellowToolbox
|
|||
}
|
||||
}
|
||||
}
|
||||
if(!preg_match("/^HTTP\//", $_SERVER["SERVER_PROTOCOL"])) $_SERVER["SERVER_PROTOCOL"] = "HTTP/1.1";
|
||||
return $location;
|
||||
}
|
||||
|
||||
|
@ -1253,7 +1250,7 @@ class YellowToolbox
|
|||
function getLocationArgs($location, $arg = "")
|
||||
{
|
||||
preg_match("/^(.*?):(.*)$/", $arg, $args);
|
||||
if(preg_match("/^(.*?\/)([^\/]+:.*)$/", rawurldecode($this->getLocation()), $matches))
|
||||
if(preg_match("/^(.*?\/)([^\/]+:.*)$/", $this->getLocation(), $matches))
|
||||
{
|
||||
foreach(explode('/', $matches[2]) as $token)
|
||||
{
|
||||
|
@ -1299,6 +1296,12 @@ class YellowToolbox
|
|||
}
|
||||
return $locationArgs;
|
||||
}
|
||||
|
||||
// Check if location contains location arguments
|
||||
function isLocationArgs($location)
|
||||
{
|
||||
return preg_match("/[^\/]+:.*$/", $location);
|
||||
}
|
||||
|
||||
// Check if file is unmodified since last HTTP request
|
||||
function isFileNotModified($lastModified)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<div class="footer">
|
||||
© 2014 <?php echo $yellow->page->getHtml("sitename") ?>. Built with <a href="https://github.com/markseu/yellowcms">Yellow</a>
|
||||
© 2014 <?php echo $yellow->page->getHtml("sitename") ?>. <a href="https://github.com/markseu/yellowcms">Built with Yellow</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
|
|
@ -12,5 +12,5 @@
|
|||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
<div class="header"><h1><a href="<?php echo $yellow->config->get("serverBase")."/" ?>"><?php echo $yellow->page->getHtml("sitename") ?></a></h1></div>
|
||||
<div class="header"><h1><a href="<?php echo $yellow->pages->serverBase."/" ?>"><?php echo $yellow->page->getHtml("sitename") ?></a></h1></div>
|
||||
<div class="header-banner"></div>
|
||||
|
|
Loading…
Add table
Reference in a new issue