commit ac40092f45820cb1f60f507a12ed29f36f4320ee
parent d2efb1a339c86b93a0d1a9765d6a305c3202a7f4
Author: Jan Dankert <develop@jandankert.de>
Date: Sat, 27 Feb 2021 02:40:09 +0100
Fix: Use the sourceObjectId from the pageContext for links.
Diffstat:
5 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/modules/cms/action/PageAction.class.php b/modules/cms/action/PageAction.class.php
@@ -105,7 +105,6 @@ class PageAction extends ObjectAction
protected function createPageContext( $scheme ) {
$context = new PageContext( $this->page->objectid,$scheme );
- $context->sourceObjectId = $this->page->objectid;
if ( $this->request->hasLanguageId())
$context->languageId = $this->request->getLanguageId();
diff --git a/modules/cms/action/page/PagePubAction.class.php b/modules/cms/action/page/PagePubAction.class.php
@@ -18,6 +18,7 @@ class PagePubAction extends PageAction implements Method {
}
public function post() {
+
if ( !$this->page->hasRight( Permission::ACL_PUBLISH ) )
throw new \util\exception\SecurityException( 'no right for publish' );
diff --git a/modules/cms/generator/ValueGenerator.class.php b/modules/cms/generator/ValueGenerator.class.php
@@ -260,11 +260,12 @@ class ValueGenerator extends BaseGenerator
}
else
{
- $linkScheme = $pageContext->getLinkScheme();
- $target = new BaseObject( $objectid );
+ $sourcePage = new Page( $pageContext->sourceObjectId ); // the source page
+ $target = new BaseObject( $objectid );
$target->load();
- $inhalt = $linkScheme->linkToObject( $page, $target );
+ $linkScheme = $pageContext->getLinkScheme();
+ $inhalt = $linkScheme->linkToObject( $sourcePage, $target );
}
break;
@@ -677,7 +678,9 @@ class ValueGenerator extends BaseGenerator
$linkFormat = $pageContext->getLinkScheme();
$target = new BaseObject($oid);
$target->load();
- $url = $linkFormat->linkToObject($page,$target);
+
+ $sourcePage = new Page( $pageContext->sourceObjectId );
+ $url = $linkFormat->linkToObject($sourcePage,$target);
foreach( $t as $match )
$inhalt = str_replace($match,$url,$inhalt);
diff --git a/modules/cms/generator/link/PublicLink.class.php b/modules/cms/generator/link/PublicLink.class.php
@@ -11,6 +11,7 @@ use cms\model\Language;
use cms\model\Link;
use cms\model\Page;
use cms\model\Project;
+use cms\model\Template;
use cms\model\TemplateModel;
use cms\model\Url;
use cms\generator\target\Dav;
@@ -107,6 +108,14 @@ class PublicLink implements LinkFormat
$page = new Page($to->objectid);
$page->load();
+ $template = new Template( $page->templateid );
+ $template->load();
+
+ if ( ! $template->publish ) {
+ // fixme: target page is not publishable - what to do here?
+ return '';
+ }
+
$parentFolder = new Folder($page->parentid);
$parentFolder->load();
diff --git a/modules/util/Transformer.class.php b/modules/util/Transformer.class.php
@@ -3,6 +3,7 @@
namespace util;
use cms\model\BaseObject;
+use cms\model\Page;
use cms\model\Url as MUrl;
use \util\exception\ObjectNotFoundException;
use wikiparser\model\DocumentElement;
@@ -80,7 +81,9 @@ class Transformer
$linkFormat = $this->pageContext->getLinkScheme();
$target = new BaseObject($objectId);
$target->load();
- $targetPath = $linkFormat->linkToObject( $this->page, $target );
+
+ $sourcePage = new Page( $this->pageContext->sourceObjectId );
+ $targetPath = $linkFormat->linkToObject( $sourcePage, $target );
// Hack: Sonderzeichen muessen in URLs maskiert werden, aber nur bei URLs die aus Link-Objekten kommen, bei allem
// anderen (insbesondere Preview-Links zu andereen Seiten) darf die Umsetzung nicht erfolgen.