openrat-cms

OpenRat Content Management System
git clone http://git.code.weiherhei.de/openrat-cms.git
Log | Files | Refs | README

commit b4ad4c952fa97d9b6b30f5048a08207102c76ada
parent decbc2395e0cab1a805ef4aef1c3328c3d301d79
Author: Jan Dankert <develop@jandankert.de>
Date:   Sun, 14 Mar 2021 01:33:16 +0100

Fix: Transformer should not throw an exception if any linktarget could
not be found. Fix: SearchIndex must use the correct pageContext.

Diffstat:
Mmodules/cms/generator/ValueGenerator.class.php | 1+
Mmodules/cms/macros/macro/SearchIndex.class.php | 14+++++++++-----
Mmodules/util/Transformer.class.php | 24++++++++++--------------
3 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/modules/cms/generator/ValueGenerator.class.php b/modules/cms/generator/ValueGenerator.class.php @@ -776,6 +776,7 @@ class ValueGenerator extends BaseGenerator $runner = new MacroRunner(); try { + //$inhalt .= print_r($pageContext,true); $inhalt .= $runner->executeMacro( $macroName, $macroSettings,$page, $pageContext ); } catch( \Exception $e ) { diff --git a/modules/cms/macros/macro/SearchIndex.class.php b/modules/cms/macros/macro/SearchIndex.class.php @@ -1,6 +1,7 @@ <?php namespace cms\macros\macro; +use cms\generator\PageContext; use cms\generator\ValueContext; use cms\generator\ValueGenerator; use cms\model\Element; @@ -43,28 +44,31 @@ class SearchIndex extends Macro $tf = new Folder($fid); $tf->load(); - foreach( $tf->getPages() as $pageid ) + foreach( $tf->getPages() as $pageObjectId ) { - $page = new Page( $pageid ); + $page = new Page( $pageObjectId ); $page->load(); // Generating all values $values = []; /** @var Element $element */ foreach($page->getWritableElements() as $element ) { - $valueContext = new ValueContext($this->pageContext); + $pageContext = clone $this->pageContext; + $pageContext->objectId = $pageObjectId; + $valueContext = new ValueContext($pageContext); $valueContext->elementid = $element->elementid; $generator = new ValueGenerator( $valueContext ); $values[] = $generator->getCache()->get(); + //$values[] = print_r($valueContext,true); } $name = $page->getNameForLanguage( $this->pageContext->languageId ); $searchIndex[] = array( - 'id' => $pageid, + 'id' => $pageObjectId, 'title' => $name->name, 'filename'=> $page->filename, - 'url' => $this->pathToObject( $pageid ), + 'url' => $this->pathToObject( $pageObjectId ), 'content' => $this->truncate(array_reduce( $values, function($act, $value) diff --git a/modules/util/Transformer.class.php b/modules/util/Transformer.class.php @@ -80,29 +80,25 @@ class Transformer foreach ($linkedObjectIds as $objectId) { $linkFormat = $this->pageContext->getLinkScheme(); $target = new BaseObject($objectId); - $target->load(); - - $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. - // Der Renderer kann dies nicht tun, denn der erzeugt nur "object://..."-URLs. - // Beispiel: "...?a=1&b=2" wird zu "...?a=1&amp;b=2" - $o = new BaseObject($objectId); try { - $o->load(); - if ($o->isUrl) { + $target->load(); + $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. + // Der Renderer kann dies nicht tun, denn der erzeugt nur "object://..."-URLs. + // Beispiel: "...?a=1&b=2" wird zu "...?a=1&amp;b=2" + if ($target->isUrl) { $l = new MUrl($objectId); $l->load(); if ($this->page->mimeType() == 'text/html') $targetPath = htmlspecialchars($targetPath); } } catch (ObjectNotFoundException $e) { - $targetPath = 'javascript:alert("object ' . $objectId . ' not found");'; + $targetPath = ''; } - $text = str_replace('object:' . $objectId, $targetPath, $text); $text = str_replace('object://' . $objectId, $targetPath, $text); }