mirror of
https://github.com/Codappix/search_core.git
synced 2024-11-22 10:36:12 +01:00
FEATURE: Provide ContentObjectDataProcessorAdapterProcessor
Allow integrator to execute any existing data processor for content objects. Resolves: #118
This commit is contained in:
parent
f0e58afe01
commit
04aaad12fe
4 changed files with 148 additions and 1 deletions
|
@ -0,0 +1,59 @@
|
||||||
|
<?php
|
||||||
|
namespace Codappix\SearchCore\DataProcessing;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 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 TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||||
|
use TYPO3\CMS\Extbase\Service\TypoScriptService;
|
||||||
|
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes an existing TYPO3 DataProcessor on the given data.
|
||||||
|
*/
|
||||||
|
class ContentObjectDataProcessorAdapterProcessor implements ProcessorInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var TypoScriptService
|
||||||
|
*/
|
||||||
|
protected $typoScriptService;
|
||||||
|
|
||||||
|
public function __construct(TypoScriptService $typoScriptService)
|
||||||
|
{
|
||||||
|
$this->typoScriptService = $typoScriptService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function processData(array $data, array $configuration) : array
|
||||||
|
{
|
||||||
|
$dataProcessor = GeneralUtility::makeInstance($configuration['_dataProcessor']);
|
||||||
|
$contentObjectRenderer = GeneralUtility::makeInstance(ContentObjectRenderer::class);
|
||||||
|
|
||||||
|
$contentObjectRenderer->data = $data;
|
||||||
|
if (isset($configuration['_table'])) {
|
||||||
|
$contentObjectRenderer->start($data, $configuration['_table']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $dataProcessor->process(
|
||||||
|
$contentObjectRenderer,
|
||||||
|
[],
|
||||||
|
$this->typoScriptService->convertPlainArrayToTypoScriptArray($configuration),
|
||||||
|
$data
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
``Codappix\SearchCore\DataProcessing\ContentObjectDataProcessorAdapterProcessor``
|
||||||
|
=================================================================================
|
||||||
|
|
||||||
|
Will execute an existing TYPO3 data processor.
|
||||||
|
|
||||||
|
Possible Options:
|
||||||
|
|
||||||
|
``_dataProcessor``
|
||||||
|
Necessary, defined which data processor to apply. Provide the same as you would to call the
|
||||||
|
processor.
|
||||||
|
``_table``
|
||||||
|
Defines the "current" table as used by some processors, e.g.
|
||||||
|
``TYPO3\CMS\Frontend\DataProcessing\FilesProcessor``.
|
||||||
|
|
||||||
|
All further options are passed to the configured data processor. Therefore they are documented at
|
||||||
|
each data processor.
|
||||||
|
|
||||||
|
Example::
|
||||||
|
|
||||||
|
plugin.tx_searchcore.settings.searching.dataProcessing {
|
||||||
|
1 = Codappix\SearchCore\DataProcessing\ContentObjectDataProcessorAdapterProcessor
|
||||||
|
1 {
|
||||||
|
_table = pages
|
||||||
|
_dataProcessor = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||||
|
|
||||||
|
references.fieldName = media
|
||||||
|
as = images
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
The above example will create a new field ``images`` with resolved FAL relations from ``media``
|
||||||
|
field.
|
|
@ -4,9 +4,10 @@ The following Processor are available:
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
:glob:
|
:glob:
|
||||||
|
|
||||||
|
/configuration/dataProcessing/ContentObjectDataProcessorAdapterProcessor
|
||||||
/configuration/dataProcessing/CopyToProcessor
|
/configuration/dataProcessing/CopyToProcessor
|
||||||
/configuration/dataProcessing/RemoveProcessor
|
|
||||||
/configuration/dataProcessing/GeoPointProcessor
|
/configuration/dataProcessing/GeoPointProcessor
|
||||||
|
/configuration/dataProcessing/RemoveProcessor
|
||||||
|
|
||||||
The following Processor are planned:
|
The following Processor are planned:
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
<?php
|
||||||
|
namespace Codappix\SearchCore\Tests\Functional\DataProcessing;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 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\DataProcessing\ContentObjectDataProcessorAdapterProcessor;
|
||||||
|
use Codappix\SearchCore\Tests\Functional\AbstractFunctionalTestCase;
|
||||||
|
use TYPO3\CMS\Extbase\Service\TypoScriptService;
|
||||||
|
use TYPO3\CMS\Frontend\DataProcessing\SplitProcessor;
|
||||||
|
|
||||||
|
class ContentObjectDataProcessorAdapterProcessorTest extends AbstractFunctionalTestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function contentObjectDataProcessorIsExecuted()
|
||||||
|
{
|
||||||
|
$record = ['content' => 'value1, value2'];
|
||||||
|
$configuration = [
|
||||||
|
'_dataProcessor' => SplitProcessor::class,
|
||||||
|
'delimiter' => ',',
|
||||||
|
'fieldName' => 'content',
|
||||||
|
'as' => 'new_content',
|
||||||
|
];
|
||||||
|
$expectedData = [
|
||||||
|
'content' => 'value1, value2',
|
||||||
|
'new_content' => ['value1', 'value2'],
|
||||||
|
];
|
||||||
|
|
||||||
|
$subject = new ContentObjectDataProcessorAdapterProcessor(new TypoScriptService);
|
||||||
|
$processedData = $subject->processData($record, $configuration);
|
||||||
|
$this->assertSame(
|
||||||
|
$expectedData,
|
||||||
|
$processedData,
|
||||||
|
'The processor did not return the expected processed record.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue