From 67efe4ee7cce69e02dbf148ddc8dc6fbde745743 Mon Sep 17 00:00:00 2001
From: Fritz Michael Gschwantner <fmg@inspiredminds.at>
Date: Mon, 11 Oct 2021 09:41:41 +0200
Subject: [PATCH] change template variable instead

---
 composer.json                                 |  6 +++-
 .../ContaoChangeNewsMoreExtension.php         | 26 ++++++++++++++++
 src/EventListener/ParseArticlesListener.php   | 29 ++++++++++++++++++
 src/NewsHelper.php                            | 30 +++++++++++++++++++
 src/Resources/config/services.yaml            |  3 ++
 src/Resources/contao/config/config.php        |  5 ++++
 .../contao/templates/news/news_latest.html5   | 28 -----------------
 .../contao/templates/news/news_short.html5    | 24 ---------------
 8 files changed, 98 insertions(+), 53 deletions(-)
 create mode 100644 src/DependencyInjection/ContaoChangeNewsMoreExtension.php
 create mode 100644 src/EventListener/ParseArticlesListener.php
 create mode 100644 src/NewsHelper.php
 create mode 100644 src/Resources/config/services.yaml
 create mode 100644 src/Resources/contao/config/config.php
 delete mode 100644 src/Resources/contao/templates/news/news_latest.html5
 delete mode 100644 src/Resources/contao/templates/news/news_short.html5

diff --git a/composer.json b/composer.json
index 66391a4..0fb91e1 100755
--- a/composer.json
+++ b/composer.json
@@ -18,8 +18,12 @@
         "forum": "https://community.contao.org/de"
     },
     "require": {
+        "php": "^7.1",
         "contao/core-bundle": "~4.4",
-        "contao/news-bundle": "~4.4"
+        "contao/news-bundle": "~4.4",
+        "symfony/config": "^3.4 || ^4.4 || ^5.1",
+        "symfony/dependency-injection": "^3.4 || ^4.4 || ^5.1",
+        "symfony/http-kernel": "^3.4 || ^4.4 || ^5.1"
     },
     "require-dev": {
         "contao/manager-plugin": "^2.0"
diff --git a/src/DependencyInjection/ContaoChangeNewsMoreExtension.php b/src/DependencyInjection/ContaoChangeNewsMoreExtension.php
new file mode 100644
index 0000000..e32cc42
--- /dev/null
+++ b/src/DependencyInjection/ContaoChangeNewsMoreExtension.php
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ * This file is part of the ContaoChangeNewsMore Bundle.
+ *
+ * (c) Nicolas Görlach <https://github.com/ngdot>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace ContaoChangeNewsMoreBundle\DependencyInjection;
+
+use Symfony\Component\Config\FileLocator;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Extension\Extension;
+use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
+
+class ContaoChangeNewsMoreExtension extends Extension
+{
+    public function load(array $configs, ContainerBuilder $container): void
+    {
+        $loader = new YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
+        $loader->load('services.yaml');
+    }
+}
diff --git a/src/EventListener/ParseArticlesListener.php b/src/EventListener/ParseArticlesListener.php
new file mode 100644
index 0000000..25b5ff5
--- /dev/null
+++ b/src/EventListener/ParseArticlesListener.php
@@ -0,0 +1,29 @@
+<?php
+
+/*
+ * This file is part of the ContaoChangeNewsMore Bundle.
+ *
+ * (c) Nicolas Görlach <https://github.com/ngdot>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace ContaoChangeNewsMoreBundle\EventListener;
+
+use Contao\FrontendTemplate;
+use Contao\Module;
+use Contao\NewsModel;
+use ContaoChangeNewsMoreBundle\NewsHelper;
+
+class ParseArticlesListener
+{
+    public function __invoke(FrontendTemplate $template, array $newsEntry, Module $module): void
+    {
+        if (empty($newsEntry['linktext'])) {
+            return;
+        }
+
+        $template->more = (new NewsHelper())->getReadMoreLink($newsEntry['linktext'], NewsModel::findByPk($newsEntry['id']));
+    }
+}
diff --git a/src/NewsHelper.php b/src/NewsHelper.php
new file mode 100644
index 0000000..980e9eb
--- /dev/null
+++ b/src/NewsHelper.php
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ * This file is part of the ContaoChangeNewsMore Bundle.
+ *
+ * (c) Nicolas Görlach <https://github.com/ngdot>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace ContaoChangeNewsMoreBundle;
+
+use Contao\ModuleNews;
+use Contao\NewsModel;
+
+/**
+ * Helper class to expose ModuleNews::generateLink()
+ */
+class NewsHelper extends ModuleNews
+{
+    public function __construct() {}
+
+    public function compile() {}
+
+    public function getReadMoreLink(string $linkText, NewsModel $news): string
+    {
+        return $this->generateLink($linkText, $news, false, true);
+    }
+}
diff --git a/src/Resources/config/services.yaml b/src/Resources/config/services.yaml
new file mode 100644
index 0000000..af945cc
--- /dev/null
+++ b/src/Resources/config/services.yaml
@@ -0,0 +1,3 @@
+services:
+    ContaoChangeNewsMoreBundle\EventListener\ParseArticlesListener:
+        public: true
diff --git a/src/Resources/contao/config/config.php b/src/Resources/contao/config/config.php
new file mode 100644
index 0000000..4be195b
--- /dev/null
+++ b/src/Resources/contao/config/config.php
@@ -0,0 +1,5 @@
+<?php
+
+use ContaoChangeNewsMoreBundle\EventListener\ParseArticlesListener;
+
+$GLOBALS['TL_HOOKS']['parseArticles'][] = [ParseArticlesListener::class, '__invoke'];
diff --git a/src/Resources/contao/templates/news/news_latest.html5 b/src/Resources/contao/templates/news/news_latest.html5
deleted file mode 100644
index 961defd..0000000
--- a/src/Resources/contao/templates/news/news_latest.html5
+++ /dev/null
@@ -1,28 +0,0 @@
-
-<div class="layout_latest arc_<?= $this->archive->id ?> block<?= $this->class ?>" itemscope itemtype="http://schema.org/Article">
-
-  <?php if ($this->hasMetaFields): ?>
-    <p class="info"><time datetime="<?= $this->datetime ?>" itemprop="datePublished"><?= $this->date ?></time> <?= $this->author ?> <?= $this->commentCount ?></p>
-  <?php endif; ?>
-
-  <?php if ($this->addImage): ?>
-    <?php $this->insert('image', $this->arrData); ?>
-  <?php endif; ?>
-
-  <h2 itemprop="name"><?= $this->linkHeadline ?></h2>
-
-  <div class="ce_text block" itemprop="description">
-    <?= $this->teaser ?>
-  </div>
-
-  <?php if ($this->hasText || $this->hasTeaser): ?>
-    <?php if ($this->linktext): ?>
-    <div class="ce_hyperlink">
-      <a href="<?= $this->link ?>" <?php if ($this->target == 1): ?>target="_blank" <?php endif; ?>title="<?= $this->headline ?>" itemprop="url"><?= $this->linktext ?><span class="invisible"><?= $this->headline ?></span></a>
-    </div>
-    <?php else: ?>
-    <div class="ce_hyperlink"><?= $this->more ?></div>
-    <?php endif; ?>
-  <?php endif; ?>
-
-</div>
\ No newline at end of file
diff --git a/src/Resources/contao/templates/news/news_short.html5 b/src/Resources/contao/templates/news/news_short.html5
deleted file mode 100644
index 3d21eb0..0000000
--- a/src/Resources/contao/templates/news/news_short.html5
+++ /dev/null
@@ -1,24 +0,0 @@
-
-<div class="layout_short arc_<?= $this->archive->id ?> block<?= $this->class ?>" itemscope itemtype="http://schema.org/Article">
-
-  <?php if ($this->hasMetaFields): ?>
-    <p class="info"><time datetime="<?= $this->datetime ?>" itemprop="datePublished"><?= $this->date ?></time> <?= $this->author ?> <?= $this->commentCount ?></p>
-  <?php endif; ?>
-
-  <h2 itemprop="name"><?= $this->linkHeadline ?></h2>
-
-  <div class="ce_text block" itemprop="description">
-    <?= $this->teaser ?>
-  </div>
-
-  <?php if ($this->hasText || $this->hasTeaser): ?>
-    <?php if ($this->linktext): ?>
-    <div class="ce_hyperlink">
-      <a href="<?= $this->link ?>" <?php if ($this->target == 1): ?>target="_blank" <?php endif; ?>title="<?= $this->headline ?>" itemprop="url"><?= $this->linktext ?><span class="invisible"><?= $this->headline ?></span></a>
-    </div>
-    <?php else: ?>
-    <div class="ce_hyperlink"><?= $this->more ?></div>
-    <?php endif; ?>
-  <?php endif; ?>
-
-</div>