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:
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&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&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);
}