Skip to content

Commit

Permalink
add support for news
Browse files Browse the repository at this point in the history
  • Loading branch information
gebi84 committed Oct 11, 2024
1 parent 0985661 commit 0268fe6
Show file tree
Hide file tree
Showing 11 changed files with 243 additions and 1 deletion.
7 changes: 6 additions & 1 deletion src/ContaoManager/Plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use Contao\ManagerPlugin\Config\ContainerBuilder;
use Contao\ManagerPlugin\Config\ExtensionPluginInterface;
use Contao\ManagerPlugin\Routing\RoutingPluginInterface;
use Contao\NewsBundle\ContaoNewsBundle;
use Guave\DeeplBundle\GuaveDeeplBundle;
use Symfony\Component\Config\Loader\LoaderResolverInterface;
use Symfony\Component\HttpKernel\KernelInterface;
Expand All @@ -21,7 +22,11 @@ public function getBundles(ParserInterface $parser)
{
return [
BundleConfig::create(GuaveDeeplBundle::class)
->setLoadAfter([ContaoCoreBundle::class]),
->setLoadAfter([
ContaoCoreBundle::class,
ContaoNewsBundle::class,
])
,
];
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

declare(strict_types=1);

namespace Guave\DeeplBundle\EventListener\DataContainer;

use Contao\Controller;
use Contao\CoreBundle\DependencyInjection\Attribute\AsCallback;
use Contao\DataContainer;
use Contao\NewsArchiveModel;

#[AsCallback(table: 'tl_news_archive', target: 'fields.langPid.options')]
class NewsArchiveLangPidOptionsCallbackListener
{
public function __invoke(DataContainer $dataContainer): array
{
Controller::loadDataContainer(NewsArchiveModel::class);

$array = [];

$archives = NewsArchiveModel::findAll();
if ($archives) {
foreach ($archives as $a) {
$array[$a->id] = $a->title . ' (' . $a->language . ')';
}
}

return $array;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

declare(strict_types=1);

namespace Guave\DeeplBundle\EventListener\DataContainer;

use Contao\CoreBundle\DependencyInjection\Attribute\AsCallback;
use Contao\DataContainer;
use Guave\DeeplBundle\Model\MultilingualModel;

#[AsCallback(table: 'tl_news_archive', target: 'fields.language.options')]
class NewsArchiveLanguageOptionsCallbackListener
{
public function __invoke(DataContainer $dataContainer): array
{
return MultilingualModel::getRootPageLanguages();
}
}
17 changes: 17 additions & 0 deletions src/Model/MultilingualModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,4 +77,21 @@ public function findOneByIdAndFallbackLanguage(int $id)

return $models[0] ?? [];
}

public static function getRootPageLanguages(): array
{
$objPages = Database::getInstance()->execute("SELECT DISTINCT language FROM tl_page WHERE type='root' AND language != ''");
$languages = $objPages->fetchEach('language');

array_walk(
$languages,
function (&$value) {
$value = str_replace('-', '_', $value);
}
);

asort($languages);

return $languages;
}
}
29 changes: 29 additions & 0 deletions src/Resolver/ActiveLanguageByNewsArchiveLanguageResolver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

declare(strict_types=1);

namespace Guave\DeeplBundle\Resolver;

use Contao\DataContainer;
use Contao\Input;
use Contao\NewsArchiveModel;

class ActiveLanguageByNewsArchiveLanguageResolver implements ActiveLanguageResolverInterface
{
public function supports(DataContainer $dataContainer): bool
{
if ($dataContainer->table === NewsArchiveModel::getTable() && Input::get('do') === 'news' && Input::get('act') === 'edit') {
return true;
}

return false;
}

public function resolve(DataContainer $dataContainer): ?string
{
$newsArchive = NewsArchiveModel::findOneBy('id', (int) Input::get('id'));

return $newsArchive->language ?? null;
}

}
34 changes: 34 additions & 0 deletions src/Resolver/ActiveLanguageByNewsContentLanguageResolver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

declare(strict_types=1);

namespace Guave\DeeplBundle\Resolver;

use Contao\ContentModel;
use Contao\DataContainer;
use Contao\NewsArchiveModel;
use Contao\NewsModel;

class ActiveLanguageByNewsContentLanguageResolver implements ActiveLanguageResolverInterface
{
public function supports(DataContainer $dataContainer): bool
{
if ($dataContainer->table === ContentModel::getTable() && \Input::get('do') === 'news') {
return true;
}

return false;
}

public function resolve(DataContainer $dataContainer): ?string
{
$content = ContentModel::findOneBy('id', (int) \Input::get('id'));

$news = NewsModel::findOneBy('id', (int) $content->pid);

$newsArchive = NewsArchiveModel::findOneBy('id', (int) $news->pid);

return $newsArchive->language ?? null;
}

}
35 changes: 35 additions & 0 deletions src/Resolver/ActiveLanguageByNewsLanguageResolver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?php

declare(strict_types=1);

namespace Guave\DeeplBundle\Resolver;

use Contao\DataContainer;
use Contao\NewsArchiveModel;
use Contao\NewsModel;

class ActiveLanguageByNewsLanguageResolver implements ActiveLanguageResolverInterface
{
public function supports(DataContainer $dataContainer): bool
{
if ($dataContainer->table === NewsModel::getTable() && \Input::get('do') === 'news') {
return true;
}

return false;
}

public function resolve(DataContainer $dataContainer): ?string
{
$news = NewsModel::findOneBy('id', (int) \Input::get('id'));

if ($news) {
$newsArchive = NewsArchiveModel::findOneBy('id', (int) $news->pid);

return $newsArchive->language ?? null;
}

return null;
}

}
16 changes: 16 additions & 0 deletions src/Resources/config/services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,24 @@ services:
tags:
- { name: 'deepl.resolver', priority: 19 }

Guave\DeeplBundle\Resolver\ActiveLanguageByNewsContentLanguageResolver:
public: true
tags:
- { name: 'deepl.resolver', priority: 18 }

Guave\DeeplBundle\Resolver\ActiveLanguageByNewsLanguageResolver:
public: true
tags:
- { name: 'deepl.resolver', priority: 17 }

Guave\DeeplBundle\Resolver\ActiveLanguageByNewsArchiveLanguageResolver:
public: true
tags:
- { name: 'deepl.resolver', priority: 16 }

Guave\DeeplBundle\Config\Config:
public: true

Guave\DeeplBundle\Translate\TranslateDCA:
public: true

40 changes: 40 additions & 0 deletions src/Resources/contao/dca/tl_news_archive.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

declare(strict_types=1);

use Contao\Controller;
use Contao\CoreBundle\DataContainer\PaletteManipulator;
use Contao\NewsArchiveModel;

$table = NewsArchiveModel::getTable();
Controller::loadLanguageFile($table);

PaletteManipulator::create()
->addField('language', 'title_legend', PaletteManipulator::POSITION_APPEND)
->addField('langPid', 'title_legend', PaletteManipulator::POSITION_APPEND)
->applyToPalette('default', 'tl_news_archive')
;

/**
* LIST
*/
$GLOBALS['TL_DCA'][$table]['list']['label']['fields'] = ['title', 'language'];
$GLOBALS['TL_DCA'][$table]['list']['label']['format'] = '%s <span style="color:#999;">(%s)</span>';

/**
* FIELDS
*/
$GLOBALS['TL_DCA'][$table]['fields']['language'] = [
'label' => &$GLOBALS['TL_LANG'][$table]['language'],
'exclude' => true,
'inputType' => 'select',
'filter' => true,
'eval' => [
'mandatory' => true,
'tl_class' => 'w50 clr',
'chosen' => true,
'includeBlankOption' => true,
],
'sql' => ['type' => 'string', 'length' => 2, 'default' => ''],
];

9 changes: 9 additions & 0 deletions src/Resources/contao/languages/de/tl_news_archive.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php

declare(strict_types=1);

use Contao\NewsArchiveModel;

$table = NewsArchiveModel::getTable();

$GLOBALS['TL_DCA'][$table]['language'] = ['Sprache'];
9 changes: 9 additions & 0 deletions src/Resources/contao/languages/en/tl_news_archive.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php

declare(strict_types=1);

use Contao\NewsArchiveModel;

$table = NewsArchiveModel::getTable();

$GLOBALS['TL_DCA'][$table]['language'] = ['language'];

0 comments on commit 0268fe6

Please sign in to comment.