mirror of
https://github.com/Codappix/search_core.git
synced 2024-11-22 16:16:12 +01:00
Merge pull request #152 from Codappix/feature/148-keep-syslanguageuid-integer
FEATURE: Keep sys_language_uid while indexing
This commit is contained in:
commit
117842d473
8 changed files with 126 additions and 6 deletions
|
@ -37,7 +37,8 @@ class RelationResolver implements Singleton
|
||||||
{
|
{
|
||||||
foreach (array_keys($record) as $column) {
|
foreach (array_keys($record) as $column) {
|
||||||
// TODO: Define / configure fields to exclude?!
|
// TODO: Define / configure fields to exclude?!
|
||||||
if ($column === 'pid') {
|
if (in_array($column, ['pid', $service->getLanguageUidColumn()])) {
|
||||||
|
$record[$column] = (int) $record[$column];
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -283,6 +283,15 @@ class TcaTableService implements TcaTableServiceInterface
|
||||||
return $this->tca['columns'][$columnName]['config'];
|
return $this->tca['columns'][$columnName]['config'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getLanguageUidColumn() : string
|
||||||
|
{
|
||||||
|
if (!isset($this->tca['ctrl']['languageField'])) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->tca['ctrl']['languageField'];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the given record was blacklisted by root line.
|
* Checks whether the given record was blacklisted by root line.
|
||||||
* This can be configured by typoscript as whole root lines can be black listed.
|
* This can be configured by typoscript as whole root lines can be black listed.
|
||||||
|
|
|
@ -290,6 +290,15 @@ class TcaTableService76 implements TcaTableServiceInterface
|
||||||
return $this->tca['columns'][$columnName]['config'];
|
return $this->tca['columns'][$columnName]['config'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getLanguageUidColumn() : string
|
||||||
|
{
|
||||||
|
if (!isset($this->tca['ctrl']['languageField'])) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->tca['ctrl']['languageField'];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the given record was blacklisted by root line.
|
* Checks whether the given record was blacklisted by root line.
|
||||||
* This can be configured by typoscript as whole root lines can be black listed.
|
* This can be configured by typoscript as whole root lines can be black listed.
|
||||||
|
|
|
@ -41,4 +41,6 @@ interface TcaTableServiceInterface
|
||||||
public function getRecords(int $offset, int $limit) : array;
|
public function getRecords(int $offset, int $limit) : array;
|
||||||
|
|
||||||
public function getRecord(int $identifier) : array;
|
public function getRecord(int $identifier) : array;
|
||||||
|
|
||||||
|
public function getLanguageUidColumn() : string;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ Changelog
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
:glob:
|
:glob:
|
||||||
|
|
||||||
|
changelog/20180410-148-keep-sys_language_uid
|
||||||
changelog/20180315-134-make-conent-fields-configurable
|
changelog/20180315-134-make-conent-fields-configurable
|
||||||
changelog/20180309-25-provide-sys-language-uid
|
changelog/20180309-25-provide-sys-language-uid
|
||||||
changelog/20180308-131-respect-page-cache-clear
|
changelog/20180308-131-respect-page-cache-clear
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
Feature 148 "Cast sys_language_uid to int"
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
While resolving relations the configured language uid field, fetched from TCA, will
|
||||||
|
be casted to integer and returned immediately.
|
||||||
|
|
||||||
|
This change prevents the bug mentioned in :issue:`148`, where `0` is casted to an
|
||||||
|
empty string, which makes filtering hard.
|
||||||
|
|
||||||
|
See :issue:`148`.
|
|
@ -103,11 +103,7 @@ class TcaIndexerTest extends AbstractFunctionalTestCase
|
||||||
->with(
|
->with(
|
||||||
$this->stringContains('tt_content'),
|
$this->stringContains('tt_content'),
|
||||||
$this->callback(function ($documents) {
|
$this->callback(function ($documents) {
|
||||||
if ($this->isLegacyVersion()) {
|
|
||||||
return isset($documents[0]['sys_language_uid']) && $documents[0]['sys_language_uid'] === '2';
|
|
||||||
} else {
|
|
||||||
return isset($documents[0]['sys_language_uid']) && $documents[0]['sys_language_uid'] === 2;
|
return isset($documents[0]['sys_language_uid']) && $documents[0]['sys_language_uid'] === 2;
|
||||||
}
|
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
92
Tests/Unit/Domain/Index/TcaIndexer/RelationResolverTest.php
Normal file
92
Tests/Unit/Domain/Index/TcaIndexer/RelationResolverTest.php
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
<?php
|
||||||
|
namespace Codappix\SearchCore\Tests\Unit\Domain\Index\TcaIndexer;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Daniel Siepmann <coding@daniel-siepmann.de>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
* 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
use Codappix\SearchCore\Domain\Index\TcaIndexer\RelationResolver;
|
||||||
|
use Codappix\SearchCore\Domain\Index\TcaIndexer\TcaTableServiceInterface;
|
||||||
|
use Codappix\SearchCore\Tests\Unit\AbstractUnitTestCase;
|
||||||
|
|
||||||
|
class RelationResolverTest extends AbstractUnitTestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var RelationResolver
|
||||||
|
*/
|
||||||
|
protected $subject;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
$this->subject = new RelationResolver();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function sysLanguageUidZeroIsKept()
|
||||||
|
{
|
||||||
|
$record = [
|
||||||
|
'sys_language_uid' => '0',
|
||||||
|
];
|
||||||
|
$GLOBALS['TCA'] = [
|
||||||
|
'tt_content' => [
|
||||||
|
'columns' => [
|
||||||
|
'sys_language_uid' => [
|
||||||
|
'config' => [
|
||||||
|
'default' => 0,
|
||||||
|
'items' => [
|
||||||
|
[
|
||||||
|
'LLL:EXT:lang/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages',
|
||||||
|
'-1',
|
||||||
|
'flags-multiple',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'renderType' => 'selectSingle',
|
||||||
|
'special' => 'languages',
|
||||||
|
'type' => 'select',
|
||||||
|
'exclude' => '1',
|
||||||
|
'label' => 'LLL:EXT:lang/Resources/Private/Language/locallang_general.xlf:LGL.language',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
$tableServiceMock = $this->getMockBuilder(TcaTableServiceInterface::class)->getMock();
|
||||||
|
$tableServiceMock->expects($this->any())
|
||||||
|
->method('getTableName')
|
||||||
|
->willReturn('tt_content');
|
||||||
|
$tableServiceMock->expects($this->any())
|
||||||
|
->method('getLanguageUidColumn')
|
||||||
|
->willReturn('sys_language_uid');
|
||||||
|
$tableServiceMock->expects($this->any())
|
||||||
|
->method('getColumnConfig')
|
||||||
|
->willReturn($GLOBALS['TCA']['tt_content']['columns']['sys_language_uid']['config']);
|
||||||
|
|
||||||
|
$this->subject->resolveRelationsForRecord($tableServiceMock, $record);
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
[
|
||||||
|
'sys_language_uid' => 0,
|
||||||
|
],
|
||||||
|
$record,
|
||||||
|
'sys_language_uid was not kept as zero.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue