Skip to content

Commit

Permalink
added support for dc multilingual utils published fields
Browse files Browse the repository at this point in the history
  • Loading branch information
Dennis Patzer committed Feb 21, 2019
1 parent 2df7f0c commit 0900188
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 4 deletions.
2 changes: 1 addition & 1 deletion src/Item/ItemInterface.php
Expand Up @@ -108,7 +108,7 @@ public function getModule(): array;
*
* @param bool $external Determine if external urls should be returned as well (required by search index)
*
* @return null|string
* @return string|null
*/
public function getDetailsUrl(bool $external = true): ?string;

Expand Down
40 changes: 40 additions & 0 deletions src/Manager/ReaderManager.php
Expand Up @@ -14,6 +14,7 @@
use Contao\CoreBundle\Framework\ContaoFrameworkInterface;
use Contao\Database;
use Contao\DataContainer;
use Contao\Date;
use Contao\Model;
use Contao\StringUtil;
use Contao\System;
Expand Down Expand Up @@ -589,6 +590,13 @@ public function isDcMultilingualActive(ReaderConfigModel $readerConfig, array $d
'Terminal42\DcMultilingualBundle\Terminal42DcMultilingualBundle');
}

public function isDcMultilingualUtilsActive(ReaderConfigModel $readerConfig, array $dca)
{
return $GLOBALS['TL_LANGUAGE'] !== $dca['config']['fallbackLang'] &&
$readerConfig->addDcMultilingualSupport && System::getContainer()->get('huh.utils.container')->isBundleActive(
'HeimrichHannot\DcMultilingualUtilsBundle\ContaoDcMultilingualUtilsBundle');
}

/**
* Modify current page title.
*
Expand Down Expand Up @@ -729,6 +737,38 @@ protected function addDcMultilingualSupport(ReaderConfigModel $readerConfig, Que
}

$fields = implode(', ', $fieldNames);

// add support for dc multilingual utils
if ($this->isDcMultilingualUtilsActive($readerConfig, $dca)) {
if (isset($dca['config']['langPublished']) && isset($dca['fields'][$dca['config']['langPublished']]) && \is_array($dca['fields'][$dca['config']['langPublished']])) {
$and = $queryBuilder->expr()->andX();

if (isset($dca['config']['langStart']) && isset($dca['fields'][$dca['config']['langStart']]) && \is_array($dca['fields'][$dca['config']['langStart']]) &&
isset($dca['config']['langStop']) && isset($dca['fields'][$dca['config']['langStop']]) && \is_array($dca['fields'][$dca['config']['langStop']])) {
$time = Date::floorToMinute();

$orStart = $queryBuilder->expr()->orX(
$queryBuilder->expr()->eq($suffixedTable.'.'.$dca['config']['langStart'], '""'),
$queryBuilder->expr()->lte($suffixedTable.'.'.$dca['config']['langStart'], ':'.$dca['config']['langStart'].'_time')
);

$and->add($orStart);
$queryBuilder->setParameter(':'.$dca['config']['langStart'].'_time', $time);

$orStop = $queryBuilder->expr()->orX(
$queryBuilder->expr()->eq($suffixedTable.'.'.$dca['config']['langStop'], '""'),
$queryBuilder->expr()->gt($suffixedTable.'.'.$dca['config']['langStop'], ':'.$dca['config']['langStop'].'_time')
);

$and->add($orStop);
$queryBuilder->setParameter(':'.$dca['config']['langStop'].'_time', $time + 60);
}

$and->add($queryBuilder->expr()->eq($suffixedTable.'.'.$dca['config']['langPublished'], 1));

$queryBuilder->andWhere($and);
}
}
} else {
$fields = implode(', ', array_map(function ($field) use ($readerConfig) {
return $readerConfig->dataContainer.'.'.$field;
Expand Down
2 changes: 1 addition & 1 deletion src/Manager/ReaderManagerInterface.php
Expand Up @@ -102,7 +102,7 @@ public function setDataContainer(DataContainer $dc): void;
/**
* Get the current data container.
*
* @return null|DataContainer
* @return DataContainer|null
*/
public function getDataContainer(): ?DataContainer;

Expand Down
2 changes: 1 addition & 1 deletion src/Registry/ReaderConfigRegistry.php
Expand Up @@ -184,7 +184,7 @@ public function computeReaderConfig(int $readerConfigPk)
*
* @throws \Exception
*
* @return null|ReaderManagerInterface
* @return ReaderManagerInterface|null
*/
public function getReaderManagerByName(string $name): ?ReaderManagerInterface
{
Expand Down
2 changes: 1 addition & 1 deletion tests/Manager/ReaderManagerTest.php
Expand Up @@ -462,7 +462,7 @@ function ($class) use ($databaseAdapter) {

$this->manager->setModuleData(['id' => 1, 'readerConfig' => 1]);

if (!\interface_exists('listable')) {
if (!interface_exists('listable')) {
include_once __DIR__.'/../../vendor/contao/core-bundle/src/Resources/contao/helper/interface.php';
}

Expand Down

0 comments on commit 0900188

Please sign in to comment.