FEATURE: Provide ContentObjectDataProcessorAdapterProcessor

Allow integrator to execute any existing data processor for content
objects.

Resolves: #118
This commit is contained in:
Daniel Siepmann 2018-03-06 11:16:00 +01:00
parent f0e58afe01
commit 04aaad12fe
Signed by: Daniel Siepmann
GPG key ID: 33D6629915560EF4
4 changed files with 148 additions and 1 deletions

View file

@ -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
);
}
}

View file

@ -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.

View file

@ -4,9 +4,10 @@ The following Processor are available:
:maxdepth: 1
:glob:
/configuration/dataProcessing/ContentObjectDataProcessorAdapterProcessor
/configuration/dataProcessing/CopyToProcessor
/configuration/dataProcessing/RemoveProcessor
/configuration/dataProcessing/GeoPointProcessor
/configuration/dataProcessing/RemoveProcessor
The following Processor are planned:

View file

@ -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.'
);
}
}