Skip to content

Commit aa2a0ef

Browse files
committed
Propagate content language to embedded objects in articles
1 parent bc94d77 commit aa2a0ef

7 files changed

Lines changed: 63 additions & 11 deletions

File tree

wcfsetup/install/files/lib/data/TCollectionEmbeddedObjects.class.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,22 @@ public function loadEmbeddedObjects(string $messageObjectType): void
3131

3232
MessageEmbeddedObjectManager::getInstance()->loadObjects(
3333
$messageObjectType,
34-
$objectIDs
34+
$objectIDs,
35+
$this->getContentLanguageID(),
3536
);
3637
}
3738

39+
protected function getContentLanguageID(): ?int
40+
{
41+
return null;
42+
}
43+
44+
protected function hasEmbeddedObjects(DatabaseObject $object): bool
45+
{
46+
// @phpstan-ignore property.notFound
47+
return $object->hasEmbeddedObjects === 1;
48+
}
49+
3850
/**
3951
* @return int[]
4052
*/
@@ -44,7 +56,7 @@ private function getEmbeddedObjectIDs(): array
4456

4557
return \array_map(
4658
static fn(DatabaseObject $object) => $object->getObjectID(),
47-
\array_filter($this->getObjects(), fn(DatabaseObject $object) => $object->hasEmbeddedObjects === 1)
59+
\array_filter($this->getObjects(), fn(DatabaseObject $object) => $this->hasEmbeddedObjects($object))
4860
);
4961
}
5062
}

wcfsetup/install/files/lib/data/article/Article.class.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ class Article extends CollectionDatabaseObject implements ILinkableObject, IPopo
6363
const DELAYED_PUBLICATION = 2;
6464

6565
protected int $effectiveVisitTime;
66+
protected int $activeLanguageID;
6667

6768
/**
6869
* Returns true if the active user can delete this article.
@@ -480,6 +481,26 @@ public function getEffectiveVisitTime(): int
480481
return $this->effectiveVisitTime;
481482
}
482483

484+
/**
485+
* @since 6.3
486+
*/
487+
public function setActiveLanguageID(int $languageID): void
488+
{
489+
$this->activeLanguageID = $languageID;
490+
}
491+
492+
/**
493+
* @since 6.3
494+
*/
495+
public function getActiveLanguageID(): ?int
496+
{
497+
if (isset($this->activeLanguageID)) {
498+
return $this->activeLanguageID;
499+
}
500+
501+
return null;
502+
}
503+
483504
/**
484505
* Returns the number of unread articles.
485506
*

wcfsetup/install/files/lib/data/article/ArticleCollection.class.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@ public function getArticleContent(Article $article): ?ArticleContent
4444
{
4545
$this->loadArticleContents();
4646

47-
/*if (
48-
$file->getActiveLanguageID() !== null
49-
&& isset($this->fileContents[$file->getObjectID()][$file->getActiveLanguageID()])
47+
if (
48+
$article->getActiveLanguageID() !== null
49+
&& isset($this->articleContents[$article->getObjectID()][$article->getActiveLanguageID()])
5050
) {
51-
return $this->fileContents[$file->getObjectID()][$file->getActiveLanguageID()];
52-
}*/
51+
return $this->articleContents[$article->getObjectID()][$article->getActiveLanguageID()];
52+
}
5353
if (isset($this->articleContents[$article->getObjectID()][WCF::getLanguage()->languageID])) {
5454
return $this->articleContents[$article->getObjectID()][WCF::getLanguage()->languageID];
5555
}

wcfsetup/install/files/lib/data/article/content/ArticleContentCollection.class.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ private function loadImages(): void
5757
$this->images = $mediaList->getObjects();
5858
}
5959

60-
private function getContentLanguageID(): ?int
60+
protected function getContentLanguageID(): ?int
6161
{
6262
$objects = $this->getObjects();
6363
if (\count($objects) === 1) {

wcfsetup/install/files/lib/page/ArticlePage.class.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,11 @@ public function readParameters(): void
7070
throw new PermissionDeniedException();
7171
}
7272

73-
// update interface language
73+
if ($this->articleContent->languageID !== null) {
74+
$this->article->setActiveLanguageID($this->articleContent->languageID);
75+
}
76+
77+
// update interface language to match the article's language
7478
if (
7579
WCF::getUser()->isGuest()
7680
&& $this->article->isMultilingual

wcfsetup/install/files/lib/system/endpoint/controller/core/articles/contents/GetArticleContentHeaderTitle.class.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ public function __invoke(ServerRequestInterface $request, array $variables): Res
3333

3434
$articleContent->getArticle()->getDiscussionProvider()->setArticleContent($articleContent);
3535

36+
if ($articleContent->languageID !== null) {
37+
$articleContent->getArticle()->setActiveLanguageID($articleContent->languageID);
38+
}
39+
3640
return new JsonResponse([
3741
'template' => WCF::getTPL()->render('wcf', 'articleContentHeaderTitle', [
3842
'articleContent' => $articleContent,

wcfsetup/install/files/lib/system/message/embedded/object/ArticleMessageEmbeddedObjectHandler.class.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
use wcf\data\article\AccessibleArticleList;
66
use wcf\data\article\Article;
7-
use wcf\system\cache\runtime\ArticleRuntimeCache;
87
use wcf\system\html\input\HtmlInputProcessor;
98

109
/**
@@ -32,7 +31,19 @@ public function parse(HtmlInputProcessor $htmlInputProcessor, array $embeddedDat
3231
#[\Override]
3332
public function loadObjects(array $objectIDs)
3433
{
35-
return ArticleRuntimeCache::getInstance()->getObjects($objectIDs);
34+
$objectList = new AccessibleArticleList();
35+
$objectList->setObjectIDs($objectIDs);
36+
$objectList->readObjects();
37+
$articles = $objectList->getObjects();
38+
39+
$contentLanguageID = MessageEmbeddedObjectManager::getInstance()->getContentLanguageID();
40+
if ($contentLanguageID !== null) {
41+
foreach ($articles as $article) {
42+
$article->setActiveLanguageID($contentLanguageID);
43+
}
44+
}
45+
46+
return $articles;
3647
}
3748

3849
#[\Override]

0 commit comments

Comments
 (0)