diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..218b5ddf --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,52 @@ +name: CI + +on: [ push, pull_request ] + +jobs: + build: + runs-on: ubuntu-latest + + continue-on-error: ${{ matrix.env.experimental == true }} + strategy: + fail-fast: false + matrix: + env: + - { php: 7.4 } + + env: ${{ matrix.env }} + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.env.php }} + tools: composer + extensions: pdo, sqlite3 + + # composer + - name: Update Composer + run: | + sudo composer self-update + composer --version + - name: Validate composer.json and composer.lock + run: composer validate + + - name: Cache dependencies + uses: actions/cache@v1 + with: + path: ~/.composer/cache + key: dependencies-composer-${{ hashFiles('composer.json') }} + + - name: Install dependencies + run: composer install + + - name: Check coding style + run: composer lint + + - name: Run Unit Tests + run: | + echo "Running unit tests with $(which php)"; + .Build/bin/phpunit --colors -c .Build/vendor/nimut/testing-framework/res/Configuration/UnitTests.xml Tests/Unit/; diff --git a/.gitignore b/.gitignore index ff5a085e..6ad5a38c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ vendor/* /composer.lock /.Build /.php_cs.cache +/.php-cs-fixer.cache +var diff --git a/.php_cs b/.php-cs-fixer.php similarity index 100% rename from .php_cs rename to .php-cs-fixer.php diff --git a/.php-version b/.php-version new file mode 100644 index 00000000..37722ebb --- /dev/null +++ b/.php-version @@ -0,0 +1 @@ +7.4 diff --git a/.travis.yml b/.travis.yml deleted file mode 100755 index c95fd82f..00000000 --- a/.travis.yml +++ /dev/null @@ -1,46 +0,0 @@ -language: php - -os: - - linux - -dist: "xenial" - -jobs: - fast_finish: true - include: - - php: 7.4 - env: TYPO3_VERSION=^10 - - php: 7.3 - env: TYPO3_VERSION=^10 - - php: 7.2 - env: TYPO3_VERSION=^10 - - php: 7.2 - env: TYPO3_VERSION=^9 -addons: - apt: - packages: - - parallel - -cache: - directories: - - "$HOME/.composer/cache" - -before_install: - - composer self-update - - composer --version - -install: - - composer require --no-update "typo3/minimal:$TYPO3_VERSION" - - composer require --no-update "solarium/solarium" - - composer install --prefer-dist - - export TYPO3_PATH_WEB=$PWD/.Build/Web - -script: - - > - echo; - echo "Running php lint"; - find . -name \*.php ! -path "./.Build/*" | parallel --gnu php -d display_errors=stderr -l {} > /dev/null \; - - > - echo; - echo "Running unit tests"; - .Build/bin/phpunit --colors -c .Build/vendor/nimut/testing-framework/res/Configuration/UnitTests.xml Tests/Unit/ diff --git a/Classes/Controller/SearchController.php b/Classes/Controller/SearchController.php index 26586558..234d8c66 100644 --- a/Classes/Controller/SearchController.php +++ b/Classes/Controller/SearchController.php @@ -39,20 +39,11 @@ class SearchController extends ActionController { - /** - * @var array - */ - protected $requestArguments; + protected array $requestArguments = []; - /** - * @var ServiceProviderInterface - */ - protected $searchProvider; + protected ?object $searchProvider = null; - /** - * @var \Psr\Log\LoggerInterface - */ - private $logger; + private \Psr\Log\LoggerInterface $logger; public function __construct(LogManagerInterface $logManager) { @@ -79,6 +70,7 @@ public function detailAction(string $id) ) ); } + $this->addStandardAssignments(); $this->view->assignMultiple($detail); @@ -103,9 +95,7 @@ public function indexAction() $this->settings, null, $this->searchProvider->getRequestArguments() - ), - false, - true + ) ); $this->addStandardAssignments(); @@ -124,7 +114,7 @@ public function indexAction() /** * Initialisation and setup. */ - public function initializeAction() + protected function initializeAction() { ksort($this->settings['queryFields']); @@ -132,6 +122,7 @@ public function initializeAction() $this->requestArguments = $this->request->getArguments(); $this->requestArguments = ArrayUtility::cleanArgumentsArray($this->requestArguments); + $this->searchProvider->setRequestArguments($this->requestArguments); $this->searchProvider->setAction($this->request->getControllerActionName()); $this->searchProvider->setControllerExtensionKey($this->request->getControllerExtensionKey()); diff --git a/Classes/Hooks/RealUrl.php b/Classes/Hooks/RealUrl.php index 3adcb481..82634b31 100644 --- a/Classes/Hooks/RealUrl.php +++ b/Classes/Hooks/RealUrl.php @@ -37,7 +37,6 @@ class RealUrl * Create automatic RealUrl Configuratoin. * * @param $params - * @param $pObj * * @return array */ diff --git a/Classes/Service/AbstractServiceProvider.php b/Classes/Service/AbstractServiceProvider.php index 25f3ca06..c8bc50f8 100644 --- a/Classes/Service/AbstractServiceProvider.php +++ b/Classes/Service/AbstractServiceProvider.php @@ -8,31 +8,18 @@ abstract class AbstractServiceProvider implements ServiceProviderInterface { - /** - * @var string - */ - protected $connectionName; + protected string $connectionName; /** * @var LogManagerInterface */ protected $logger; - /** - * @var array - */ - protected $requestArguments; + protected array $requestArguments = []; - /** - * @var array - */ - protected $settings; + protected array $settings = []; - /** - * @param string $connectionName - * @param array $settings - */ - public function __construct($connectionName, $settings) + public function __construct(string $connectionName, array $settings) { $this->connectionName = $connectionName; $this->settings = $settings; diff --git a/Classes/Service/ServiceProviderInterface.php b/Classes/Service/ServiceProviderInterface.php index 800e8a44..646ff2ba 100644 --- a/Classes/Service/ServiceProviderInterface.php +++ b/Classes/Service/ServiceProviderInterface.php @@ -32,11 +32,7 @@ */ interface ServiceProviderInterface { - /** - * @param string $connectionName - * @param array $settings - */ - public function __construct($connectionName, $settings); + public function __construct(string $connectionName, array $settings); public function connect(); diff --git a/Classes/Service/SolrServiceProvider.php b/Classes/Service/SolrServiceProvider.php index d718f5c2..08f6902d 100644 --- a/Classes/Service/SolrServiceProvider.php +++ b/Classes/Service/SolrServiceProvider.php @@ -28,11 +28,15 @@ * ************************************************************* */ use Solarium\Client; +use Solarium\Core\Client\Adapter\Curl; +use Solarium\Core\Client\Adapter\Http; use Solarium\Exception\HttpException; use Solarium\QueryType\Select\Query\Query; use Subugoe\Find\Utility\FrontendUtility; use Subugoe\Find\Utility\LoggerUtility; use Subugoe\Find\Utility\SettingsUtility; +use Subugoe\Find\Utility\UpgradeUtility; +use Symfony\Component\EventDispatcher\EventDispatcher; use TYPO3\CMS\Extbase\Utility\LocalizationUtility; /** @@ -40,66 +44,62 @@ */ class SolrServiceProvider extends AbstractServiceProvider { - /** - * @var string - */ - protected $action; + protected ?string $action = null; - /** - * @var array - */ - protected $configuration = []; - /** - * @var Client - */ - protected $connection; + protected array $configuration = []; - /** - * @var string - */ - protected $controllerExtensionKey; + protected Client $connection; - /** - * @var \Solarium\QueryType\Select\Query\Query - */ - protected $query; + protected ?string $controllerExtensionKey = null; + + protected Query $query; public function connect() { $currentConnectionSettings = $this->settings['connections'][$this->connectionName]['options']; + // Upgrading to Solarium >= 5 + if (!array_key_exists('core', $currentConnectionSettings)) { + $currentConnectionSettings = UpgradeUtility::handleSolariumUpgrade($currentConnectionSettings); + } + $connectionSettings = [ 'endpoint' => [ - 'localhost' => [ + $this->connectionName => [ 'host' => $currentConnectionSettings['host'], 'port' => (int) $currentConnectionSettings['port'], 'path' => $currentConnectionSettings['path'], - 'timeout' => $currentConnectionSettings['timeout'], 'scheme' => $currentConnectionSettings['scheme'], + 'core' => $currentConnectionSettings['core'], ], ], ]; - $client = new Client($connectionSettings); - if ($currentConnectionSettings['username'] && $currentConnectionSettings['password']) { - $client->getEndpoint()->setAuthentication($currentConnectionSettings['username'], $currentConnectionSettings['password']); - } + // create an HTTP adapter instance + $adapter = new Curl(); + $eventDispatcher = new EventDispatcher(); + $adapter->setTimeout((int) $currentConnectionSettings['timeout']); + // create a client instance + $client = new Client($adapter, $eventDispatcher, $connectionSettings); + $this->setConnection($client); + $this->testConnection(); } - /** - * @return array - */ - public function getConfiguration() + private function testConnection(): void + { + $ping = $this->connection->createPing(); + $this->connection->ping($ping); + } + + public function getConfiguration(): array { return $this->configuration; } /** * Main starting point for blank index action. - * - * @return array */ - public function getDefaultQuery() + public function getDefaultQuery(): array { $this->createQueryForArguments($this->getRequestArguments()); $error = null; @@ -107,15 +107,15 @@ public function getDefaultQuery() try { $resultSet = $this->connection->execute($this->query); - } catch (HttpException $exception) { + } catch (HttpException $httpException) { $this->logger->error('Solr Exception (Timeout?)', [ 'requestArguments' => $this->getRequestArguments(), - 'exception' => LoggerUtility::exceptionToArray($exception), + 'exception' => LoggerUtility::exceptionToArray($httpException), ] ); - $error = ['solr' => $exception]; + $error = ['solr' => $httpException]; } return [ @@ -124,12 +124,7 @@ public function getDefaultQuery() ]; } - /** - * @return array - * - * @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException - */ - public function getDocumentById(string $id) + public function getDocumentById(string $id): array { $arguments = $this->getRequestArguments(); @@ -168,27 +163,24 @@ public function isExtendedSearch() if (array_key_exists('extended', $this->requestArguments)) { // Show extended search when told so by the »extended« argument. - $result = (true == $this->requestArguments['extended']); - } else { - // Show extended search when any of the »extended« fields are used. - if (array_key_exists('q', $this->requestArguments)) { - foreach ($this->settings['queryFields'] as $fieldInfo) { - if ($fieldInfo['extended'] - && array_key_exists($fieldInfo['id'], $this->requestArguments['q']) - && $this->requestArguments['q'][$fieldInfo['id']] - ) { - // Check if the request argument is an array itself (appies to field type "Range") - if (is_array($this->requestArguments['q'][$fieldInfo['id']])) { - foreach ($this->requestArguments['q'][$fieldInfo['id']] as $key => $value) { - if ('' !== $value) { - $result = true; - break; - } + $result = ((bool) $this->requestArguments['extended']); + } elseif (array_key_exists('q', $this->requestArguments)) { + foreach ($this->settings['queryFields'] as $fieldInfo) { + if ($fieldInfo['extended'] + && array_key_exists($fieldInfo['id'], $this->requestArguments['q']) + && $this->requestArguments['q'][$fieldInfo['id']] + ) { + // Check if the request argument is an array itself (appies to field type "Range") + if (is_array($this->requestArguments['q'][$fieldInfo['id']])) { + foreach ($this->requestArguments['q'][$fieldInfo['id']] as $key => $value) { + if ('' !== $value) { + $result = true; + break; } - } else { - $result = true; - break; } + } else { + $result = true; + break; } } } @@ -246,21 +238,19 @@ public function setCounter() /** * @param array $arguments - * - * @return array */ - public function suggestQuery($arguments) + public function suggestQuery($arguments): array { - $this->query = $this->getConnection()->createSuggester(); + $query = $this->getConnection()->createSuggester(); $results = []; if (array_key_exists('q', $arguments)) { - $this->query->setQuery($arguments['q']); + $query->setQuery($arguments['q']); if ($arguments['dictionary']) { - $this->query->setDictionary($arguments['dictionary']); + $query->setDictionary($arguments['dictionary']); } $this->addFacetFilters($arguments); - $solrResults = $this->getConnection()->execute($this->query)->getResults(); + $solrResults = $this->getConnection()->execute($query)->getResults(); foreach ($solrResults as $suggestions) { $results = array_merge($results, $suggestions->getSuggestions()); } @@ -271,7 +261,7 @@ public function suggestQuery($arguments) return $results; } - protected function addEDisMax() + protected function addEDisMax(): void { $this->query->getEDisMax(); } @@ -280,10 +270,8 @@ protected function addEDisMax() * Adds filter queries for active facets to $query. * * @param array $arguments request arguments - * - * @return array */ - protected function addFacetFilters($arguments) + protected function addFacetFilters(array $arguments): array { $activeFacets = $this->getActiveFacets($arguments); $activeFacetsForTemplate = []; @@ -297,8 +285,9 @@ protected function addFacetFilters($arguments) // records instead of the joined ones. $queryString = $this->query->getQuery(); if ($queryString) { - $queryString = $queryString.' '.Query::QUERY_OPERATOR_AND.' '; + $queryString .= ' '.Query::QUERY_OPERATOR_AND.' '; } + $queryString .= $facetQuery; $this->query->setQuery($queryString); } else { @@ -315,6 +304,7 @@ protected function addFacetFilters($arguments) $this->query->createFilterQuery($queryInfo) ->setQuery($facetQuery); } + $activeFacetsForTemplate[$facetID][$facetTerm] = $facetInfo; } } @@ -327,7 +317,7 @@ protected function addFacetFilters($arguments) * Provides the facet setup enriched with the default values when no configuration * is present in the »facets« template variable. */ - protected function addFacetQueries() + protected function addFacetQueries(): void { $facetConfiguration = $this->settings['facets']; @@ -356,17 +346,17 @@ protected function addFacetQueries() ); } } + + if (1 === (int) $facet['excludeOwnFilter']) { + $queryForFacet->addExclude($this->tagForFacet($facetID)); + } } else { $queryForFacet = $facetSet->createFacetField($facetID); - $queryForFacet->setField($facet['field'] ? $facet['field'] : $facetID) + $queryForFacet->setField($facet['field'] ?: $facetID) ->setMinCount($facet['fetchMinimum']) ->setLimit($facet['fetchMaximum']) ->setSort($facet['sortOrder']); } - - if (1 == $facet['excludeOwnFilter']) { - $queryForFacet->addExclude($this->tagForFacet($facetID)); - } } else { $this->logger->warning(sprintf('TypoScript facet %s does not have the required key »id«. Ignoring this facet.', $key), [ @@ -381,7 +371,7 @@ protected function addFacetQueries() $this->setConfigurationValue('facets', $facetConfiguration); } - protected function addFeatures() + protected function addFeatures(): void { if ($this->settings['features']['eDisMax']) { $this->addEDisMax(); @@ -396,7 +386,7 @@ protected function addFeatures() * * @param array $arguments request arguments */ - protected function addHighlighting($arguments) + protected function addHighlighting(array $arguments): void { $highlightConfig = SettingsUtility::getMergedSettings('highlight', $this->settings); @@ -435,6 +425,7 @@ protected function addHighlighting($arguments) $queryTerm = $this->query->getHelper()->escapeTerm($queryTerm); } } + $queryWords[] = $queryTerm; } } @@ -455,6 +446,7 @@ protected function addHighlighting($arguments) foreach ($queryWords as $queryWord) { $queryComponents[] = '('.sprintf($highlightConfig['query'], $queryWord).')'; } + $queryString = implode(' OR ', $queryComponents); $highlight->setQuery($queryString); @@ -463,14 +455,16 @@ protected function addHighlighting($arguments) // Configure highlight fields. $highlight->addFields(implode(',', $highlightConfig['fields'])); - // Configure the fragement length. - $highlight->setFragSize($highlightConfig['fragsize']); + // Configure the fragment length. + $highlight->setFragSize((int) $highlightConfig['fragsize']); // Set up alternative fields. if ($highlightConfig['alternateFields']) { foreach ($highlightConfig['alternateFields'] as $fieldName => $alternateFieldName) { $highlightField = $highlight->getField($fieldName); - $highlightField->setAlternateField($alternateFieldName); + if (null !== $highlightField) { + $highlightField->setAlternateField($alternateFieldName); + } } } @@ -492,7 +486,7 @@ protected function addHighlighting($arguments) * * @param array $arguments request arguments */ - protected function addResultCountOptionsToTemplate($arguments) + protected function addResultCountOptionsToTemplate(array $arguments): void { $resultCountOptions = ['menu' => []]; @@ -525,7 +519,7 @@ protected function addResultCountOptionsToTemplate($arguments) * * @param array $arguments request arguments */ - protected function addSortOrdersToTemplate($arguments) + protected function addSortOrdersToTemplate(array $arguments): void { $sortOptions = ['menu' => []]; @@ -541,6 +535,7 @@ protected function addSortOrdersToTemplate($arguments) if (!$localisedLabel) { $localisedLabel = $sortOption['id']; } + $sortOptions['menu'][$sortOption['sortCriteria']] = $localisedLabel; if ('default' === $sortOption['id']) { @@ -569,10 +564,8 @@ protected function addSortOrdersToTemplate($arguments) * Checks that $sortString is well-formatted and adds the sort conidition * defined by it to $query. * Adds feedback about invalid sort string format to the page. - * - * @param string $sortString */ - protected function addSortStringForQuery($sortString) + protected function addSortStringForQuery(string $sortString): void { if (!empty($sortString)) { $sortCriteria = explode(',', $sortString); @@ -582,11 +575,9 @@ protected function addSortStringForQuery($sortString) $sortDirection = Query::SORT_ASC; if ('desc' === $sortCriterionParts[1]) { $sortDirection = Query::SORT_DESC; - } else { - if ('asc' !== $sortCriterionParts[1]) { - $this->logger->warning(sprintf('sort criterion »%s«’s sort direction is »%s« It should be »asc« or »desc«. Ignoring it.', $sortCriterion, $sortCriterionParts[1])); - continue; - } + } elseif ('asc' !== $sortCriterionParts[1]) { + $this->logger->warning(sprintf('sort criterion »%s«’s sort direction is »%s« It should be »asc« or »desc«. Ignoring it.', $sortCriterion, $sortCriterionParts[1])); + continue; } $this->query->addSort($sortCriterionParts[0], $sortDirection); @@ -602,7 +593,7 @@ protected function addSortStringForQuery($sortString) * * @return $this */ - protected function addTypoScriptFilters() + protected function addTypoScriptFilters(): SolrServiceProvider { if (!empty($this->settings['additionalFilters'])) { foreach ($this->settings['additionalFilters'] as $key => $filterQuery) { @@ -616,20 +607,16 @@ protected function addTypoScriptFilters() /** * Returns the number of the last result on the page. - * - * @return int */ - protected function counterEnd() + protected function counterEnd(): int { return $this->getOffset() + $this->getCount(); } /** * Returns the number of the first result on the page. - * - * @return int */ - protected function counterStart() + protected function counterStart(): int { return $this->getOffset() + 1; } @@ -637,7 +624,7 @@ protected function counterStart() /** * Creates a blank query, sets up TypoScript filters and adds it to the view. */ - protected function createQuery() + protected function createQuery(): void { $this->query = $this->connection->createSelect(); $this->addFeatures(); @@ -651,7 +638,7 @@ protected function createQuery() * * @param array $arguments request arguments */ - protected function createQueryForArguments($arguments) + protected function createQueryForArguments(array $arguments): void { $this->createQuery(); @@ -665,7 +652,7 @@ protected function createQueryForArguments($arguments) $queryParameters = []; if (is_array($rawQueryParameters) && [] !== $rawQueryParameters) { foreach ($rawQueryParameters as $key => $value) { - if (is_array($value) && count(array_filter($value)) > 0) { + if (is_array($value) && [] !== array_filter($value)) { $queryParameters[$key] = array_filter($value); } elseif (!empty($value) && !is_array($value)) { $queryParameters[$key] = $value; @@ -693,7 +680,7 @@ protected function createQueryForArguments($arguments) /** * @return string */ - protected function getAction() + protected function getAction(): ?string { return $this->action; } @@ -705,7 +692,7 @@ protected function getAction() * * @return array of arrays with information about active facets */ - protected function getActiveFacets($arguments) + protected function getActiveFacets(array $arguments): array { $activeFacets = []; @@ -726,10 +713,7 @@ protected function getActiveFacets($arguments) return $activeFacets; } - /** - * @return Client - */ - protected function getConnection() + protected function getConnection(): Client { return $this->connection; } @@ -737,7 +721,7 @@ protected function getConnection() /** * @return string */ - protected function getControllerExtensionKey() + protected function getControllerExtensionKey(): ?string { return $this->controllerExtensionKey; } @@ -748,11 +732,9 @@ protected function getControllerExtensionKey() * * TypoScript setting »paging.perPage« * limited by the setting »paging.maximumPerPage«. * - * @param array $arguments overrides $this->requestArguments if set - * - * @return int + * @param array|null $arguments overrides $this->requestArguments if set */ - protected function getCount($arguments = null) + protected function getCount(?array $arguments = null): int { if (null === $arguments) { $arguments = $this->getRequestArguments(); @@ -775,20 +757,16 @@ protected function getCount($arguments = null) /** * Returns the facet configuration for the given $id. * - * @param string $id - * * @return array */ - protected function getFacetConfig($id) + protected function getFacetConfig(string $id): ?array { $config = null; foreach ($this->settings['facets'] as $facet) { - if (array_key_exists('id', $facet)) { - if ($facet['id'] === $id) { - $config = $facet; - break; - } + if (array_key_exists('id', $facet) && $facet['id'] === $id) { + $config = $facet; + break; } } @@ -799,16 +777,13 @@ protected function getFacetConfig($id) * Returns query for the given facet $ID and $term based on the facet’s * configuration. * - * @param array $facetConfig - * @param string $queryTerm - * * @return string query string */ - protected function getFacetQuery($facetConfig, $queryTerm) + protected function getFacetQuery(array $facetConfig, string $queryTerm): ?string { $queryString = null; - if ($facetConfig) { + if ([] !== $facetConfig) { if (array_key_exists('facetQuery', $facetConfig)) { // Facet queries are configured: use one of them. foreach ($facetConfig['facetQuery'] as $facetQueryConfig) { @@ -817,6 +792,7 @@ protected function getFacetQuery($facetConfig, $queryTerm) break; } } + if (null === $queryString) { $this->logger->info(sprintf('Results for Facet »%s« with facetQuery ID »%s« were requested, but this facetQuery is not configured. Building a generic facet query instead.', $facetConfig['id'], $queryTerm), [ @@ -833,12 +809,12 @@ protected function getFacetQuery($facetConfig, $queryTerm) if (array_key_exists('query', $facetConfig)) { $queryPattern = $facetConfig['query']; } else { - $queryPattern = ($facetConfig['field'] ? $facetConfig['field'] : $facetConfig['id']).':'.'%s'; + $queryPattern = ($facetConfig['field'] ?: $facetConfig['id']).':'.'%s'; } // Hack: convert strings »RANGE XX TO YY« Solr style range queries »[XX TO YY]« // (because PHP loses ] in array keys during URL parsing) - $queryTerm = preg_replace('/RANGE (.*) TO (.*)/', '[\1 TO \2]', $queryTerm); + $queryTerm = preg_replace('#RANGE (.*) TO (.*)#', '[\1 TO \2]', $queryTerm); $queryString = sprintf($queryPattern, $queryTerm); } } else { @@ -853,11 +829,9 @@ protected function getFacetQuery($facetConfig, $queryTerm) /** * Returns the index of the first row to return. * - * @param array $arguments overrides $this->requestArguments if set - * - * @return int + * @param array|null $arguments overrides $this->requestArguments if set */ - protected function getOffset($arguments = null) + protected function getOffset(?array $arguments = null): int { if (null === $arguments) { $arguments = $this->requestArguments; @@ -867,10 +841,8 @@ protected function getOffset($arguments = null) if (array_key_exists('start', $arguments)) { $offset = (int) $arguments['start']; - } else { - if (array_key_exists('page', $arguments)) { - $offset = ((int) $arguments['page'] - 1) * $this->getCount(); - } + } elseif (array_key_exists('page', $arguments)) { + $offset = ((int) $arguments['page'] - 1) * $this->getCount(); } $this->setConfigurationValue('offset', $offset); @@ -879,13 +851,10 @@ protected function getOffset($arguments = null) } /** - * @param $assignments * @param $id * @param $arguments - * - * @return mixed */ - protected function getRecordsWithUnderlyingQuery(array $assignments, array $index, $id, $arguments) + protected function getRecordsWithUnderlyingQuery(array $assignments, array $index, $id, $arguments): array { $connection = $this->getConnection(); @@ -905,6 +874,7 @@ protected function getRecordsWithUnderlyingQuery(array $assignments, array $inde $assignments['document-previous'] = $resultSet[0]; $assignments['document-previous-number'] = $index['previousIndex'] + 1; } + $nextResultIndex = 1 + $index['resultIndexOffset']; if (count($resultSet) > $nextResultIndex) { $assignments['document-next'] = $resultSet[$nextResultIndex]; @@ -918,11 +888,11 @@ protected function getRecordsWithUnderlyingQuery(array $assignments, array $inde } else { $this->logger->error('»detail« action query with underlying query returned no results.', ['arguments' => $arguments]); } - } catch (HttpException $exception) { + } catch (HttpException $httpException) { $this->logger->error('Solr Exception (Timeout?)', [ 'arguments' => $arguments, - 'exception' => LoggerUtility::exceptionToArray($exception), + 'exception' => LoggerUtility::exceptionToArray($httpException), ] ); } @@ -954,11 +924,11 @@ protected function getTheRecordSpecified($id, $assignments) } else { $this->logger->error(sprintf('»detail« action query for id »%d« returned no results.', $id), ['arguments' => $this->getRequestArguments()]); } - } catch (HttpException $exception) { + } catch (HttpException $httpException) { $this->logger->error('Solr Exception (Timeout?)', [ 'arguments' => $this->getRequestArguments(), - 'exception' => LoggerUtility::exceptionToArray($exception), + 'exception' => LoggerUtility::exceptionToArray($httpException), ] ); } @@ -970,12 +940,8 @@ protected function getTheRecordSpecified($id, $assignments) * Takes the array of search query parameters and builds an array of Solr * search strings from it, using the »queryFields« configuration from TypoScript. * These search strings need to be ANDed together for the complete query. - * - * @param array $queryParameters - * - * @return array */ - protected function queryComponentsForQueryParameters($queryParameters) + protected function queryComponentsForQueryParameters(array $queryParameters): array { $queryComponents = []; @@ -1009,6 +975,7 @@ protected function queryComponentsForQueryParameters($queryParameters) if (!is_array($defaults)) { $defaults = [$defaults]; } + foreach ($defaults as $defaultKey => $default) { if (!array_key_exists($defaultKey, $queryTerms)) { $queryTerms[$defaultKey] = $default; @@ -1027,6 +994,7 @@ protected function queryComponentsForQueryParameters($queryParameters) $escapedQueryTerms[$key] = $this->query->getHelper()->escapeTerm($term); } } + $queryTerms = $escapedQueryTerms; } } @@ -1035,11 +1003,10 @@ protected function queryComponentsForQueryParameters($queryParameters) $queryFormat = ''; if (!$queryAlternate) { $queryFormat = $fieldInfo['query']; - } else { - if (array_key_exists($queryAlternate, $fieldInfo['queryAlternate'])) { - $queryFormat = $fieldInfo['queryAlternate'][$queryAlternate]; - } + } elseif (array_key_exists($queryAlternate, $fieldInfo['queryAlternate'])) { + $queryFormat = $fieldInfo['queryAlternate'][$queryAlternate]; } + if (empty($queryFormat)) { $queryFormat = $fieldID.':%s'; } @@ -1048,7 +1015,7 @@ protected function queryComponentsForQueryParameters($queryParameters) $magicFieldPrefix = ''; - if ( (array_key_exists('luceneMatchVersionNumber', $this->settings) && (int) $this->settings['luceneMatchVersionNumber'] < 8) || (!array_key_exists('luceneMatchVersionNumber', $this->settings)) ) { + if ((array_key_exists('luceneMatchVersionNumber', $this->settings) && (int) $this->settings['luceneMatchVersionNumber'] < 8) || (!array_key_exists('luceneMatchVersionNumber', $this->settings))) { $magicFieldPrefix = '_query_:'; } @@ -1059,14 +1026,14 @@ protected function queryComponentsForQueryParameters($queryParameters) $queryPart = $magicFieldPrefix.$this->query->getHelper()->escapePhrase(vsprintf($queryFormat, $queryTerms)); } - if ($queryPart) { + if ('' !== $queryPart && '0' !== $queryPart) { $queryComponents[$fieldID] = $queryPart; } } } // Ask for all results if there is no query. - if (0 === count($queryComponents)) { + if ([] === $queryComponents) { $queryComponents[] = $this->settings['defaultQuery']; } @@ -1076,15 +1043,14 @@ protected function queryComponentsForQueryParameters($queryParameters) /** * Adds information about the selected items for a given facet to $activeFacets. * - * @param array $activeFacets * @param string $facetID ID of the facet to set * @param array $facetSelection array of selected items for the facet */ - protected function setActiveFacetSelectionForID(&$activeFacets, $facetID, $facetSelection) + protected function setActiveFacetSelectionForID(array &$activeFacets, string $facetID, array $facetSelection): void { $facetQueries = []; $facetConfig = $this->getFacetConfig($facetID); - foreach ($facetSelection as $facetTerm => $facetStatus) { + foreach (array_keys($facetSelection) as $facetTerm) { $facetInfo = [ 'id' => $facetID, 'config' => $facetConfig, @@ -1093,7 +1059,8 @@ protected function setActiveFacetSelectionForID(&$activeFacets, $facetID, $facet ]; $facetQueries[$facetTerm] = $facetInfo; } - if (count($facetQueries) > 0) { + + if ([] !== $facetQueries) { $activeFacets[$facetID] = $facetQueries; } } @@ -1101,7 +1068,7 @@ protected function setActiveFacetSelectionForID(&$activeFacets, $facetID, $facet /** * @param mixed $connection */ - protected function setConnection($connection) + protected function setConnection($connection): void { $this->connection = $connection; } @@ -1111,7 +1078,7 @@ protected function setConnection($connection) * * @param array $arguments request arguments */ - protected function setFields($arguments) + protected function setFields(array $arguments): void { $fieldsConfig = SettingsUtility::getMergedSettings('dataFields', $this->settings, $this->getAction()); $fields = []; @@ -1119,10 +1086,8 @@ protected function setFields($arguments) // Use field list from query parameters or from defaults. if (array_key_exists('data-fields', $arguments) && $arguments['data-fields']) { $fields = explode(',', $arguments['data-fields']); - } else { - if ($fieldsConfig['default']) { - $fields = array_values($fieldsConfig['default']); - } + } elseif ($fieldsConfig['default']) { + $fields = array_values($fieldsConfig['default']); } // If allowed fields are configured, keep only those. @@ -1138,7 +1103,7 @@ protected function setFields($arguments) } // Only set fields of the query if there is a result. Otherwise use the default setting. - if ($fields) { + if ([] !== $fields) { $this->query->setFields($fields); } } @@ -1148,7 +1113,7 @@ protected function setFields($arguments) * * @param array $arguments request arguments */ - protected function setRange($arguments) + protected function setRange(array $arguments): void { $this->query->setStart($this->getOffset($arguments)); $this->query->setRows($this->getCount($arguments)); @@ -1159,18 +1124,16 @@ protected function setRange($arguments) * * @param array $arguments request arguments */ - protected function setSortOrder($arguments) + protected function setSortOrder(array $arguments): void { $sortString = ''; if (!empty($arguments['sort'])) { $sortString = $arguments['sort']; - } else { - if (!empty($this->settings['sort'])) { - foreach ($this->settings['sort'] as $sortSetting) { - if ('default' === $sortSetting['id']) { - $sortString = $sortSetting['sortCriteria']; - break; - } + } elseif (!empty($this->settings['sort'])) { + foreach ($this->settings['sort'] as $sortSetting) { + if ('default' === $sortSetting['id']) { + $sortString = $sortSetting['sortCriteria']; + break; } } } @@ -1181,12 +1144,8 @@ protected function setSortOrder($arguments) /** * Returns the facet/filter key for the given $facetID. - * - * @param string $facetID - * - * @return string */ - protected function tagForFacet($facetID) + protected function tagForFacet(string $facetID): string { return 'facet-'.$facetID; } diff --git a/Classes/Utility/FrontendUtility.php b/Classes/Utility/FrontendUtility.php index 2852b234..20a33fac 100644 --- a/Classes/Utility/FrontendUtility.php +++ b/Classes/Utility/FrontendUtility.php @@ -56,15 +56,19 @@ public static function addQueryInformationAsJavaScript($query, array $settings, if (array_key_exists('facet', $arguments)) { $underlyingQuery['facet'] = $arguments['facet']; } + if (null !== $position) { $underlyingQuery['position'] = $position; } + if ($arguments['count']) { $underlyingQuery['count'] = $arguments['count']; } + if ($arguments['sort']) { $underlyingQuery['sort'] = $arguments['sort']; } + $scriptTag->setContent('var underlyingQuery = '.json_encode($underlyingQuery).';'); return $scriptTag->render(); @@ -80,13 +84,6 @@ public static function addQueryInformationAsJavaScript($query, array $settings, */ public static function getIndexes($underlyingQueryInfo) { - // These indexes are 0-based for Solr & PHP. The user visible numbering is 1-based. - $index = []; - $index['positionIndex'] = $underlyingQueryInfo['position'] - 1; - $index['previousIndex'] = max([$index['positionIndex'] - 1, 0]); - $index['nextIndex'] = $index['positionIndex'] + 1; - $index['resultIndexOffset'] = (0 === $index['positionIndex']) ? 0 : 1; - - return $index; + return ['positionIndex' => $underlyingQueryInfo['position'] - 1, 'previousIndex' => max([$index['positionIndex'] - 1, 0]), 'nextIndex' => $index['positionIndex'] + 1, 'resultIndexOffset' => (0 === $index['positionIndex']) ? 0 : 1]; } } diff --git a/Classes/Utility/UpgradeUtility.php b/Classes/Utility/UpgradeUtility.php new file mode 100644 index 00000000..c9813c72 --- /dev/null +++ b/Classes/Utility/UpgradeUtility.php @@ -0,0 +1,21 @@ + 0) { + if (is_array($array) && [] !== $array) { $arrayKeys = array_keys($array); $firstKey = $arrayKeys[0]; $result = $array[$firstKey]; diff --git a/Classes/ViewHelpers/Data/NewArrayViewHelper.php b/Classes/ViewHelpers/Data/NewArrayViewHelper.php index 3073cb7b..94f5ed68 100644 --- a/Classes/ViewHelpers/Data/NewArrayViewHelper.php +++ b/Classes/ViewHelpers/Data/NewArrayViewHelper.php @@ -86,6 +86,7 @@ public static function renderStatic(array $arguments, \Closure $renderChildrenCl if ($renderingContext->getVariableProvider()->exists($variableName)) { $renderingContext->getVariableProvider()->remove($variableName); } + $renderingContext->getVariableProvider()->add($variableName, $result); $result = $renderChildrenClosure(); if (true !== $arguments['global']) { diff --git a/Classes/ViewHelpers/Data/SplitViewHelper.php b/Classes/ViewHelpers/Data/SplitViewHelper.php index cfaba07f..28c73779 100644 --- a/Classes/ViewHelpers/Data/SplitViewHelper.php +++ b/Classes/ViewHelpers/Data/SplitViewHelper.php @@ -37,7 +37,10 @@ */ class SplitViewHelper extends AbstractViewHelper { - const DEFAULT_SEPARATOR = ', '; + /** + * @var string + */ + public const DEFAULT_SEPARATOR = ', '; /** * Register arguments. diff --git a/Classes/ViewHelpers/Data/TransposeViewHelper.php b/Classes/ViewHelpers/Data/TransposeViewHelper.php index 9abe14f6..f48ca253 100644 --- a/Classes/ViewHelpers/Data/TransposeViewHelper.php +++ b/Classes/ViewHelpers/Data/TransposeViewHelper.php @@ -70,6 +70,7 @@ public static function renderStatic( foreach ($arrays as $key => $array) { $row[$key] = $array[$rowIndex]; } + $rows[] = $row; } @@ -105,11 +106,9 @@ protected static function identicalLengths($arrays) foreach ($arrays as $array) { if (null === $length) { $length = count($array); - } else { - if ($length !== count($array)) { - $result = false; - break; - } + } elseif ($length !== count($array)) { + $result = false; + break; } } diff --git a/Classes/ViewHelpers/Data/ValueForKeyViewHelper.php b/Classes/ViewHelpers/Data/ValueForKeyViewHelper.php index a8fe26d2..df70a041 100644 --- a/Classes/ViewHelpers/Data/ValueForKeyViewHelper.php +++ b/Classes/ViewHelpers/Data/ValueForKeyViewHelper.php @@ -54,10 +54,8 @@ public static function renderStatic( ) { $result = null; - if ($arguments['array']) { - if (array_key_exists($arguments['key'], $arguments['array'])) { - $result = $arguments['array'][$arguments['key']]; - } + if ($arguments['array'] && array_key_exists($arguments['key'], $arguments['array'])) { + $result = $arguments['array'][$arguments['key']]; } return $result; diff --git a/Classes/ViewHelpers/Find/FacetLinkArgumentsViewHelper.php b/Classes/ViewHelpers/Find/FacetLinkArgumentsViewHelper.php index e009c892..ad6dda1b 100644 --- a/Classes/ViewHelpers/Find/FacetLinkArgumentsViewHelper.php +++ b/Classes/ViewHelpers/Find/FacetLinkArgumentsViewHelper.php @@ -84,8 +84,10 @@ public static function renderStatic( if (array_key_exists($facetTerm, $activeFacets[$facetID])) { $itemToRemove .= '['.$facetTerm.']'; } + $result[] = $itemToRemove; } + // Go back to page 1. $result[] = 'tx_find_find[page]'; } elseif ('add' === $mode) { diff --git a/Classes/ViewHelpers/Find/HighlightFieldViewHelper.php b/Classes/ViewHelpers/Find/HighlightFieldViewHelper.php index 34045a73..41f8deb9 100644 --- a/Classes/ViewHelpers/Find/HighlightFieldViewHelper.php +++ b/Classes/ViewHelpers/Find/HighlightFieldViewHelper.php @@ -51,8 +51,8 @@ class HighlightFieldViewHelper extends AbstractViewHelper public function initializeArguments() { parent::initializeArguments(); - $this->registerArgument('results', '\Solarium\QueryType\Select\Result\Result', 'Query results', true); - $this->registerArgument('document', '\Solarium\QueryType\Select\Result\Document', 'Result document to work on', + $this->registerArgument('results', \Solarium\QueryType\Select\Result\Result::class, 'Query results', true); + $this->registerArgument('document', \Solarium\QueryType\Select\Result\Document::class, 'Result document to work on', true); $this->registerArgument('field', 'string', 'name of field in document to highlight', true); $this->registerArgument('alternateField', 'string', @@ -175,11 +175,7 @@ protected static function highlightSingleField($fieldString, $highlightInfo, $ar // If no highlighted string is present, use the original one. if (null === $result) { - if ($arguments['raw']) { - $result = $fieldString; - } else { - $result = htmlspecialchars($fieldString); - } + $result = $arguments['raw'] ? $fieldString : htmlspecialchars($fieldString); } return $result; diff --git a/Classes/ViewHelpers/Find/LocalizedFacetDataViewHelper.php b/Classes/ViewHelpers/Find/LocalizedFacetDataViewHelper.php index 10368fb9..448ea0cd 100644 --- a/Classes/ViewHelpers/Find/LocalizedFacetDataViewHelper.php +++ b/Classes/ViewHelpers/Find/LocalizedFacetDataViewHelper.php @@ -91,7 +91,8 @@ public static function renderStatic( $localizationsForFacet[$facetEntryID] = $localizedFacetEntryName; } } - if (count($localizationsForFacet) > 0) { + + if ([] !== $localizationsForFacet) { $facetEntryNames[$facetID] = $localizationsForFacet; } } diff --git a/Classes/ViewHelpers/Find/PageListViewHelper.php b/Classes/ViewHelpers/Find/PageListViewHelper.php index 526cb0a8..6cd3a58d 100644 --- a/Classes/ViewHelpers/Find/PageListViewHelper.php +++ b/Classes/ViewHelpers/Find/PageListViewHelper.php @@ -69,33 +69,24 @@ public static function renderStatic( if ($pageIndex === $currentPage) { $pageInfo['status'] = 'current'; $pageInfo['current'] = true; + } elseif ((1 === $pageIndex | $pageIndex === $numberOfPages) !== 0) { + $pageInfo['status'] = 'edge'; + } elseif (abs($pageIndex - $currentPage) <= $adjacentPages) { + $pageInfo['status'] = 'adjacent'; + } elseif (($pageIndex < $adjacentFirst && $adjacentFirst <= 1 + $minimumGapSize) + || ($pageIndex > $adjacentLast && $numberOfPages - $adjacentLast <= $minimumGapSize)) { + $pageInfo['status'] = 'gapfiller'; } else { - if (1 === $pageIndex | $pageIndex === $numberOfPages) { - $pageInfo['status'] = 'edge'; - } else { - if (abs($pageIndex - $currentPage) <= $adjacentPages) { - $pageInfo['status'] = 'adjacent'; - } else { - if (($pageIndex < $adjacentFirst && $adjacentFirst <= 1 + $minimumGapSize) - || ($pageIndex > $adjacentLast && $numberOfPages - $adjacentLast <= $minimumGapSize) - ) { - $pageInfo['status'] = 'gapfiller'; - } else { - $pageInfo['status'] = 'gap'; - $pageInfo['gap'] = true; - } - } - } + $pageInfo['status'] = 'gap'; + $pageInfo['gap'] = true; } if ('gap' === $pageInfo['status']) { $pageInfo['text'] = '…'; if ($pageIndex < $currentPage) { $pageIndex = $currentPage - $adjacentPages; - } else { - if ($pageIndex > $currentPage) { - $pageIndex = $numberOfPages; - } + } elseif ($pageIndex > $currentPage) { + $pageIndex = $numberOfPages; } } else { $pageInfo['text'] = (string) $pageIndex; diff --git a/Classes/ViewHelpers/Find/PageNumberForResultNumberViewHelper.php b/Classes/ViewHelpers/Find/PageNumberForResultNumberViewHelper.php index b004d19d..76353473 100644 --- a/Classes/ViewHelpers/Find/PageNumberForResultNumberViewHelper.php +++ b/Classes/ViewHelpers/Find/PageNumberForResultNumberViewHelper.php @@ -39,8 +39,10 @@ class PageNumberForResultNumberViewHelper extends AbstractViewHelper { /** * Avoid divisions by zero. + * + * @var int */ - const DEFAULT_RESULTS_PER_PAGE = 20; + public const DEFAULT_RESULTS_PER_PAGE = 20; /** * Registers own arguments. @@ -64,8 +66,6 @@ public static function renderStatic( $arguments['resultsPerPage'] = self::DEFAULT_RESULTS_PER_PAGE; } - $pageNumber = (int) ceil($arguments['resultNumber'] / $arguments['resultsPerPage']); - - return $pageNumber; + return (int) ceil($arguments['resultNumber'] / $arguments['resultsPerPage']); } } diff --git a/Classes/ViewHelpers/Find/SelectOptionsForFacetViewHelper.php b/Classes/ViewHelpers/Find/SelectOptionsForFacetViewHelper.php index 215a1b98..63573c81 100644 --- a/Classes/ViewHelpers/Find/SelectOptionsForFacetViewHelper.php +++ b/Classes/ViewHelpers/Find/SelectOptionsForFacetViewHelper.php @@ -95,6 +95,7 @@ public static function renderStatic( $valueParts = explode($arguments['sortPrefixSeparator'], $value, 2); $strippedResult[$key] = $valueParts[count($valueParts) - 1]; } + $result = $strippedResult; } diff --git a/Classes/ViewHelpers/Format/RegexpViewHelper.php b/Classes/ViewHelpers/Format/RegexpViewHelper.php index 94b477a5..a4a595a0 100644 --- a/Classes/ViewHelpers/Format/RegexpViewHelper.php +++ b/Classes/ViewHelpers/Format/RegexpViewHelper.php @@ -66,12 +66,10 @@ public static function renderStatic( $result = null; if (null === $arguments['replace']) { $result = preg_match($arguments['match'], $input); + } elseif (!$arguments['useMBEreg']) { + $result = preg_replace($arguments['match'], $arguments['replace'], $input); } else { - if (!$arguments['useMBEreg']) { - $result = preg_replace($arguments['match'], $arguments['replace'], $input); - } else { - $result = mb_ereg_replace($arguments['match'], $arguments['replace'], $input); - } + $result = mb_ereg_replace($arguments['match'], $arguments['replace'], $input); } return $result; diff --git a/Classes/ViewHelpers/Format/SolrEscapeViewHelper.php b/Classes/ViewHelpers/Format/SolrEscapeViewHelper.php index a1b972b0..086ed510 100644 --- a/Classes/ViewHelpers/Format/SolrEscapeViewHelper.php +++ b/Classes/ViewHelpers/Format/SolrEscapeViewHelper.php @@ -61,12 +61,6 @@ public static function renderStatic( $solariumHelper = new \Solarium\Core\Query\Helper(); - if ($arguments['phrase']) { - $escapedString = $solariumHelper->escapePhrase($string); - } else { - $escapedString = $solariumHelper->escapeTerm($string); - } - - return $escapedString; + return $arguments['phrase'] ? $solariumHelper->escapePhrase($string) : $solariumHelper->escapeTerm($string); } } diff --git a/Classes/ViewHelpers/Format/StripViewHelper.php b/Classes/ViewHelpers/Format/StripViewHelper.php index 74fb8188..9b794ef8 100644 --- a/Classes/ViewHelpers/Format/StripViewHelper.php +++ b/Classes/ViewHelpers/Format/StripViewHelper.php @@ -63,12 +63,6 @@ public static function renderStatic( $string = $renderChildrenClosure(); } - if (null === $arguments['strip']) { - $string = trim($string); - } else { - $string = trim($string, $arguments['strip']); - } - - return $string; + return null === $arguments['strip'] ? trim($string) : trim($string, $arguments['strip']); } } diff --git a/Classes/ViewHelpers/Format/XMLViewHelper.php b/Classes/ViewHelpers/Format/XMLViewHelper.php index db7043d6..38ac1831 100644 --- a/Classes/ViewHelpers/Format/XMLViewHelper.php +++ b/Classes/ViewHelpers/Format/XMLViewHelper.php @@ -59,14 +59,9 @@ public static function renderStatic( $XML->formatOutput = true; $XML->encoding = 'UTF-8'; $XML->loadXML($input); - if ($arguments['htmloutput']) { - $result = $XML->saveHTML(); - } else { - $result = $XML->saveXML(); - } // TODO: Error handling? - return $result; + return $arguments['htmloutput'] ? $XML->saveHTML() : $XML->saveXML(); } } diff --git a/Classes/ViewHelpers/LinkedData/ContainerViewHelper.php b/Classes/ViewHelpers/LinkedData/ContainerViewHelper.php index 268cdf3a..247c16aa 100644 --- a/Classes/ViewHelpers/LinkedData/ContainerViewHelper.php +++ b/Classes/ViewHelpers/LinkedData/ContainerViewHelper.php @@ -66,8 +66,7 @@ public static function renderStatic( $LDRenderer = Renderer\AbstractRenderer::instantiateSubclassForType($arguments['format']); $LDRenderer->setPrefixes($arguments['prefixes']); - $result = $LDRenderer->renderItems($items); - return $result; + return $LDRenderer->renderItems($items); } } diff --git a/Classes/ViewHelpers/LinkedData/Renderer/AbstractRenderer.php b/Classes/ViewHelpers/LinkedData/Renderer/AbstractRenderer.php index bc0124fa..ec0826b3 100644 --- a/Classes/ViewHelpers/LinkedData/Renderer/AbstractRenderer.php +++ b/Classes/ViewHelpers/LinkedData/Renderer/AbstractRenderer.php @@ -34,15 +34,9 @@ */ abstract class AbstractRenderer { - /** - * @var array - */ - protected $prefixes = []; + protected array $prefixes = []; - /** - * @var array - */ - protected $usedPrefixes = []; + protected array $usedPrefixes = []; /** * @param $type @@ -53,12 +47,10 @@ public static function instantiateSubclassForType($type) { if ('rdf' === $type) { $instance = GeneralUtility::makeInstance(RDFRenderer::class); + } elseif ('json-ld' === $type) { + $instance = GeneralUtility::makeInstance(JSONLDRenderer::class); } else { - if ('json-ld' === $type) { - $instance = GeneralUtility::makeInstance(JSONLDRenderer::class); - } else { - $instance = GeneralUtility::makeInstance(TurtleRenderer::class); - } + $instance = GeneralUtility::makeInstance(TurtleRenderer::class); } return $instance; diff --git a/Classes/ViewHelpers/LinkedData/Renderer/JSONLDRenderer.php b/Classes/ViewHelpers/LinkedData/Renderer/JSONLDRenderer.php index 57be2173..1c78286c 100644 --- a/Classes/ViewHelpers/LinkedData/Renderer/JSONLDRenderer.php +++ b/Classes/ViewHelpers/LinkedData/Renderer/JSONLDRenderer.php @@ -57,6 +57,7 @@ public function renderItems($items) if ($properties['language']) { $object['@language'] = $properties['language']; } + if ($properties['type']) { $object['@type'] = $properties['type']; } @@ -104,11 +105,9 @@ protected function prefixedName($name) $name = str_replace($URI, $acronym.':', $name); $this->usedPrefixes[$acronym] = true; break; - } else { - if (0 === strpos($name, $acronym.':')) { - $this->usedPrefixes[$acronym] = true; - break; - } + } elseif (0 === strpos($name, $acronym.':')) { + $this->usedPrefixes[$acronym] = true; + break; } } diff --git a/Classes/ViewHelpers/LinkedData/Renderer/RDFRenderer.php b/Classes/ViewHelpers/LinkedData/Renderer/RDFRenderer.php index 3de226f3..bfcd51a2 100644 --- a/Classes/ViewHelpers/LinkedData/Renderer/RDFRenderer.php +++ b/Classes/ViewHelpers/LinkedData/Renderer/RDFRenderer.php @@ -40,7 +40,7 @@ class RDFRenderer extends AbstractRenderer implements RendererInterface */ public function renderItems($items) { - $doc = new \DomDocument(); + $doc = new \DOMDocument(); $this->prefixes['rdf'] = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'; $rdf = $doc->createElement($this->prefixedName('rdf:RDF')); $doc->appendChild($rdf); @@ -62,12 +62,14 @@ public function renderItems($items) if ($this->prefixes[$objectParts[0]] && 2 === count($objectParts)) { $object = $this->prefixes[$objectParts[0]].$objectParts[1]; } + $predicateElement->setAttribute($this->prefixedName('rdf:resource'), $this->prefixedName($object, true)); } else { if ($properties['language']) { $predicateElement->setAttribute($this->prefixedName('xml:lang'), $properties['language']); } + if ($properties['type']) { $predicateElement->setAttribute($this->prefixedName('rdf:datatype'), $this->prefixedName($properties['type'], true)); diff --git a/Classes/ViewHelpers/LinkedData/Renderer/TurtleRenderer.php b/Classes/ViewHelpers/LinkedData/Renderer/TurtleRenderer.php index 44edf143..ce606fdf 100644 --- a/Classes/ViewHelpers/LinkedData/Renderer/TurtleRenderer.php +++ b/Classes/ViewHelpers/LinkedData/Renderer/TurtleRenderer.php @@ -59,29 +59,28 @@ public function renderItems($items) $objectString = $this->turtleString($object); } else { if (false === strpos($object, '"') && false === strpos($object, "\r") && false === strpos($object, - "\n") - ) { + "\n")) { $objectString = '"'.$object.'"'; + } elseif (false === strpos($object, '"""')) { + $objectString = '"""'.$object.'"""'; + } elseif (false === strpos($object, "'''")) { + $objectString = "'''".$object."'''"; } else { - if (false === strpos($object, '"""')) { - $objectString = '"""'.$object.'"""'; - } else { - if (false === strpos($object, "'''")) { - $objectString = "'''".$object."'''"; - } else { - // TODO: Error Handling for could not escape. - } - } + // TODO: Error Handling for could not escape. } + if ($properties['language']) { $objectString .= '@'.$properties['language']; } + if ($properties['type']) { $objectString .= '^^'.$this->turtleString($properties['type']); } } + $objectArray[] = $objectString; } + $predicateString .= implode(', ', $objectArray); $predicateArray[] = $predicateString; } @@ -89,6 +88,7 @@ public function renderItems($items) $subjectString .= implode(" ;\n\t", $predicateArray); $subjectArray[] = $subjectString; } + $result .= implode(' .'.PHP_EOL.PHP_EOL, $subjectArray).' .'.PHP_EOL; // Prepend the prefixes that are used. @@ -99,9 +99,7 @@ public function renderItems($items) } } - $result = PHP_EOL.implode('', $prefixes).PHP_EOL.$result; - - return $result; + return PHP_EOL.implode('', $prefixes).PHP_EOL.$result; } /** @@ -117,23 +115,18 @@ protected function turtleString($item, $usePrefixes = true) $itemParts = explode(':', $item, 2); $rdfTypeURI = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'; if ($item === $rdfTypeURI - || (count($itemParts) > 1 && $this->prefixes[$itemParts[0]].$itemParts[1] === $rdfTypeURI) - ) { + || (count($itemParts) > 1 && $this->prefixes[$itemParts[0]].$itemParts[1] === $rdfTypeURI)) { $result = 'a'; - } else { - if ($usePrefixes) { - foreach ($this->prefixes as $acronym => $prefix) { - if (0 === strpos($item, $prefix)) { - $result = str_replace($prefix, $acronym.':', $item); - $this->usedPrefixes[$acronym] = true; - break; - } else { - if ($itemParts[0] === $acronym) { - $result = $item; - $this->usedPrefixes[$acronym] = true; - break; - } - } + } elseif ($usePrefixes) { + foreach ($this->prefixes as $acronym => $prefix) { + if (0 === strpos($item, $prefix)) { + $result = str_replace($prefix, $acronym.':', $item); + $this->usedPrefixes[$acronym] = true; + break; + } elseif ($itemParts[0] === $acronym) { + $result = $item; + $this->usedPrefixes[$acronym] = true; + break; } } } diff --git a/Classes/ViewHelpers/Logic/NotViewHelper.php b/Classes/ViewHelpers/Logic/NotViewHelper.php index 11185f7c..2337d07a 100644 --- a/Classes/ViewHelpers/Logic/NotViewHelper.php +++ b/Classes/ViewHelpers/Logic/NotViewHelper.php @@ -46,14 +46,11 @@ public function initializeArguments() $this->registerArgument('condition', 'string|int|float|array', 'the condition to NOT', true); } - /** - * @return bool - */ public static function renderStatic( array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext - ) { - return !(true == $arguments['condition']); + ): bool { + return true != $arguments['condition']; } } diff --git a/Configuration/TCA/Overrides/tt_content.php b/Configuration/TCA/Overrides/tt_content.php index ed89ae3d..94f70a1a 100644 --- a/Configuration/TCA/Overrides/tt_content.php +++ b/Configuration/TCA/Overrides/tt_content.php @@ -1,7 +1,7 @@ fixture = $this->getMockBuilder(SearchController::class) ->disableOriginalConstructor() diff --git a/Tests/Unit/Service/SolrServiceProviderTest.php b/Tests/Unit/Service/SolrServiceProviderTest.php index 4e760a9b..a38bc48f 100644 --- a/Tests/Unit/Service/SolrServiceProviderTest.php +++ b/Tests/Unit/Service/SolrServiceProviderTest.php @@ -40,7 +40,7 @@ class SolrServiceProviderTest extends UnitTestCase */ protected $fixture; - public function setUp() + protected function setUp(): void { $this->fixture = $this->getMockBuilder(SolrServiceProvider::class) ->setMethods(['dummy']) diff --git a/Tests/Unit/Utility/UpgradeUtilityTest.php b/Tests/Unit/Utility/UpgradeUtilityTest.php new file mode 100644 index 00000000..88515e92 --- /dev/null +++ b/Tests/Unit/Utility/UpgradeUtilityTest.php @@ -0,0 +1,72 @@ + 'solr', + 'port' => 8983, + 'path' => '/solr/core_en', + 'scheme' => 'http', + ], + [ + 'host' => 'solr', + 'port' => 8983, + 'path' => '/', + 'scheme' => 'http', + 'core' => 'core_en', + ], + ], + [ + [ + 'host' => 'solr', + 'port' => 8983, + 'path' => '/solr/core_en/', + 'scheme' => 'http', + ], + [ + 'host' => 'solr', + 'port' => 8983, + 'path' => '/', + 'scheme' => 'http', + 'core' => 'core_en', + ], + ], + [ + [ + 'host' => 'solr.local', + 'port' => 8983, + 'path' => '/', + 'scheme' => 'http', + 'core' => 'core_en', + ], + [ + 'host' => 'solr.local', + 'port' => 8983, + 'path' => '/', + 'scheme' => 'http', + 'core' => 'core_en', + ], + ], + ]; + } + + /** + * @test + * @dataProvider settingsProvider + */ + public function configurationIsAutomaticallyUpgraded(array $settings, $expected): void + { + self::assertSame($expected, UpgradeUtility::handleSolariumUpgrade($settings)); + } +} diff --git a/Tests/Unit/ViewHelpers/Data/ArrayFirstViewHelperTest.php b/Tests/Unit/ViewHelpers/Data/ArrayFirstViewHelperTest.php index 5a0f4957..243ad201 100644 --- a/Tests/Unit/ViewHelpers/Data/ArrayFirstViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Data/ArrayFirstViewHelperTest.php @@ -39,7 +39,7 @@ class ArrayFirstViewHelperTest extends ViewHelperBaseTestcase */ public $fixture; - public function setUp() + protected function setUp(): void { parent::setUp(); $this->fixture = $this->getMockBuilder(ArrayFirstViewHelper::class) diff --git a/Tests/Unit/ViewHelpers/Data/IsArrayViewHelperTest.php b/Tests/Unit/ViewHelpers/Data/IsArrayViewHelperTest.php index 2cf783f6..aac1d2eb 100644 --- a/Tests/Unit/ViewHelpers/Data/IsArrayViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Data/IsArrayViewHelperTest.php @@ -39,7 +39,7 @@ class IsArrayViewHelperTest extends ViewHelperBaseTestcase */ public $fixture; - public function setUp() + protected function setUp(): void { parent::setUp(); $this->fixture = $this->getMockBuilder(IsArrayViewHelper::class) diff --git a/Tests/Unit/ViewHelpers/Data/NewArrayViewHelperTest.php b/Tests/Unit/ViewHelpers/Data/NewArrayViewHelperTest.php index 091da8a4..cfbbb40d 100644 --- a/Tests/Unit/ViewHelpers/Data/NewArrayViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Data/NewArrayViewHelperTest.php @@ -39,7 +39,7 @@ class NewArrayViewHelperTest extends ViewHelperBaseTestcase */ public $fixture; - public function setUp() + protected function setUp(): void { parent::setUp(); $this->fixture = $this->getMockBuilder(NewArrayViewHelper::class) diff --git a/Tests/Unit/ViewHelpers/Data/SplitViewHelperTest.php b/Tests/Unit/ViewHelpers/Data/SplitViewHelperTest.php index 8f9aa509..e0355f57 100644 --- a/Tests/Unit/ViewHelpers/Data/SplitViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Data/SplitViewHelperTest.php @@ -39,7 +39,7 @@ class SplitViewHelperTest extends ViewHelperBaseTestcase */ public $fixture; - public function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/Tests/Unit/ViewHelpers/Data/TransposeViewHelperTest.php b/Tests/Unit/ViewHelpers/Data/TransposeViewHelperTest.php index e518e8f3..ab428788 100644 --- a/Tests/Unit/ViewHelpers/Data/TransposeViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Data/TransposeViewHelperTest.php @@ -45,7 +45,7 @@ class TransposeViewHelperTest extends ViewHelperBaseTestcase */ public $templateVariableContainer; - public function setUp() + protected function setUp(): void { parent::setUp(); $this->fixture = $this->getMockBuilder(TransposeViewHelper::class) @@ -97,7 +97,7 @@ public function anErrorIsReportedWhenArraysDoNotMatchInLength() ]; $this->fixture->setArguments($arguments); - self::assertContains('The arrays passed in the »arrays« argument do not have identical numbers of values', + self::assertStringContainsStringIgnoringCase('The arrays passed in the »arrays« argument do not have identical numbers of values', $this->fixture->initializeArgumentsAndRender()); } } diff --git a/Tests/Unit/ViewHelpers/Data/ValueForKeyViewHelperTest.php b/Tests/Unit/ViewHelpers/Data/ValueForKeyViewHelperTest.php index a49a61e0..182e4f6f 100644 --- a/Tests/Unit/ViewHelpers/Data/ValueForKeyViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Data/ValueForKeyViewHelperTest.php @@ -42,7 +42,7 @@ class ValueForKeyViewHelperTest extends ViewHelperBaseTestcase */ public $fixture; - public function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/Tests/Unit/ViewHelpers/Find/FacetIsActiveViewHelperTest.php b/Tests/Unit/ViewHelpers/Find/FacetIsActiveViewHelperTest.php index 9aa46f56..f92bba0b 100644 --- a/Tests/Unit/ViewHelpers/Find/FacetIsActiveViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Find/FacetIsActiveViewHelperTest.php @@ -39,7 +39,7 @@ class FacetIsActiveViewHelperTest extends ViewHelperBaseTestcase */ public $fixture; - public function setUp() + protected function setUp(): void { parent::setUp(); $this->fixture = $this->getAccessibleMock(FacetIsActiveViewHelper::class, ['renderChildren']); diff --git a/Tests/Unit/ViewHelpers/Find/FacetLinkArgumentsViewHelperTest.php b/Tests/Unit/ViewHelpers/Find/FacetLinkArgumentsViewHelperTest.php index e7b86693..274cba03 100644 --- a/Tests/Unit/ViewHelpers/Find/FacetLinkArgumentsViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Find/FacetLinkArgumentsViewHelperTest.php @@ -42,7 +42,7 @@ class FacetLinkArgumentsViewHelperTest extends ViewHelperBaseTestcase */ public $fixture; - public function setUp() + protected function setUp(): void { parent::setUp(); $this->fixture = $this->getMockBuilder(FacetLinkArgumentsViewHelper::class) diff --git a/Tests/Unit/ViewHelpers/Find/HighlightFieldViewHelperTest.php b/Tests/Unit/ViewHelpers/Find/HighlightFieldViewHelperTest.php index 58a137d7..67f3e34c 100644 --- a/Tests/Unit/ViewHelpers/Find/HighlightFieldViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Find/HighlightFieldViewHelperTest.php @@ -43,7 +43,7 @@ class HighlightFieldViewHelperTest extends ViewHelperBaseTestcase protected $solariumResponse; - public function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/Tests/Unit/ViewHelpers/Find/PageNumberForResultNumberViewHelperTest.php b/Tests/Unit/ViewHelpers/Find/PageNumberForResultNumberViewHelperTest.php index b259ac6e..f14b7480 100644 --- a/Tests/Unit/ViewHelpers/Find/PageNumberForResultNumberViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Find/PageNumberForResultNumberViewHelperTest.php @@ -42,7 +42,7 @@ class PageNumberForResultNumberViewHelperTest extends ViewHelperBaseTestcase */ public $fixture; - public function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/Tests/Unit/ViewHelpers/Find/PathExistsViewHelperTest.php b/Tests/Unit/ViewHelpers/Find/PathExistsViewHelperTest.php index 61f70914..f6885b83 100644 --- a/Tests/Unit/ViewHelpers/Find/PathExistsViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Find/PathExistsViewHelperTest.php @@ -39,7 +39,7 @@ class PathExistsViewHelperTest extends ViewHelperBaseTestcase */ public $fixture; - public function setUp() + protected function setUp(): void { parent::setUp(); $this->fixture = $this->getAccessibleMock(PathExistsViewHelper::class, ['renderChildren']); diff --git a/Tests/Unit/ViewHelpers/Find/SelectOptionsForFacetViewHelperTest.php b/Tests/Unit/ViewHelpers/Find/SelectOptionsForFacetViewHelperTest.php index 862d99d6..e45e0db3 100644 --- a/Tests/Unit/ViewHelpers/Find/SelectOptionsForFacetViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Find/SelectOptionsForFacetViewHelperTest.php @@ -39,7 +39,7 @@ class SelectOptionsForFacetViewHelperTest extends ViewHelperBaseTestcase */ public $fixture; - public function setUp() + protected function setUp(): void { parent::setUp(); $this->fixture = $this->getMockBuilder(SelectOptionsForFacetViewHelper::class) diff --git a/Tests/Unit/ViewHelpers/Format/CSVLineViewHelperTest.php b/Tests/Unit/ViewHelpers/Format/CSVLineViewHelperTest.php index c96f4259..42599266 100644 --- a/Tests/Unit/ViewHelpers/Format/CSVLineViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Format/CSVLineViewHelperTest.php @@ -40,7 +40,7 @@ class CSVLineViewHelperTest extends ViewHelperBaseTestcase */ protected $fixture; - public function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/Tests/Unit/ViewHelpers/Format/JoinViewHelperTest.php b/Tests/Unit/ViewHelpers/Format/JoinViewHelperTest.php index 30df1365..6fefb146 100644 --- a/Tests/Unit/ViewHelpers/Format/JoinViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Format/JoinViewHelperTest.php @@ -40,7 +40,7 @@ class JoinViewHelperTest extends ViewHelperBaseTestcase */ protected $fixture; - public function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/Tests/Unit/ViewHelpers/Format/RegexpViewHelperTest.php b/Tests/Unit/ViewHelpers/Format/RegexpViewHelperTest.php index 396893f6..f79906ed 100644 --- a/Tests/Unit/ViewHelpers/Format/RegexpViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Format/RegexpViewHelperTest.php @@ -68,7 +68,7 @@ public function regexProvider() ]; } - public function setUp() + protected function setUp(): void { parent::setUp(); $this->fixture = $this->getMockBuilder(RegexpViewHelper::class) diff --git a/Tests/Unit/ViewHelpers/Format/StripViewHelperTest.php b/Tests/Unit/ViewHelpers/Format/StripViewHelperTest.php index eab288e9..1da5152d 100644 --- a/Tests/Unit/ViewHelpers/Format/StripViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Format/StripViewHelperTest.php @@ -53,7 +53,7 @@ public function stringProvider() ]; } - public function setUp() + protected function setUp(): void { parent::setUp(); $this->fixture = $this->getMockBuilder(StripViewHelper::class) diff --git a/Tests/Unit/ViewHelpers/Format/XMLViewHelperTest.php b/Tests/Unit/ViewHelpers/Format/XMLViewHelperTest.php index b1a3b08d..fee95797 100644 --- a/Tests/Unit/ViewHelpers/Format/XMLViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Format/XMLViewHelperTest.php @@ -61,7 +61,7 @@ public function stringProvider() ]; } - public function setUp() + protected function setUp(): void { parent::setUp(); $this->fixture = $this->getMockBuilder(XMLViewHelper::class) diff --git a/Tests/Unit/ViewHelpers/LinkedData/ItemViewHelperTest.php b/Tests/Unit/ViewHelpers/LinkedData/ItemViewHelperTest.php index a4e072a0..7ae456c2 100644 --- a/Tests/Unit/ViewHelpers/LinkedData/ItemViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/LinkedData/ItemViewHelperTest.php @@ -59,7 +59,7 @@ public function linkedDataProvider() ]; } - public function setUp() + protected function setUp(): void { parent::setUp(); $this->fixture = $this->getMockBuilder(ItemViewHelper::class) diff --git a/Tests/Unit/ViewHelpers/Logic/AndViewHelperTest.php b/Tests/Unit/ViewHelpers/Logic/AndViewHelperTest.php index 20943ddd..563bfe71 100644 --- a/Tests/Unit/ViewHelpers/Logic/AndViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Logic/AndViewHelperTest.php @@ -61,7 +61,7 @@ public function conditionProvider() (true === true), (1 === 1), ('hrdr' === 'hrdr'), - ('hrdr' == 'hrdr'), + ('hrdr' === 'hrdr'), (true == 1), ], true, @@ -71,7 +71,7 @@ public function conditionProvider() (true === true), (1 === 2), ('hrdr' === 'hrdr'), - ('hrdr' == 'hrdr'), + ('hrdr' === 'hrdr'), (true == 1), ], false, @@ -87,7 +87,7 @@ public function conditionProvider() (true === true), (1 === 1), ('hrdr' === 'hrdr'), - ('hrdr' == 'hrdr'), + ('hrdr' === 'hrdr'), (true == 0), ], false, @@ -95,7 +95,7 @@ public function conditionProvider() ]; } - public function setUp() + protected function setUp(): void { parent::setUp(); $this->fixture = $this->getMockBuilder(AndViewHelper::class) diff --git a/Tests/Unit/ViewHelpers/Logic/NotViewHelperTest.php b/Tests/Unit/ViewHelpers/Logic/NotViewHelperTest.php index b4a5395f..dd98d15f 100644 --- a/Tests/Unit/ViewHelpers/Logic/NotViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Logic/NotViewHelperTest.php @@ -40,10 +40,7 @@ class NotViewHelperTest extends ViewHelperBaseTestcase */ protected $fixture; - /** - * @return array - */ - public function conditionProvider() + public function conditionProvider(): array { return [ [ @@ -51,7 +48,7 @@ public function conditionProvider() true, ], [ - 1, + (bool) 1, true, ], [ @@ -65,7 +62,7 @@ public function conditionProvider() ]; } - public function setUp() + protected function setUp(): void { parent::setUp(); $this->fixture = $this->getMockBuilder(NotViewHelper::class) @@ -78,7 +75,7 @@ public function setUp() * @test * @dataProvider conditionProvider */ - public function conditionIsMet(bool $conditions, bool $expected) + public function conditionIsMet(bool $conditions, bool $expected): void { $this->fixture->setArguments([ 'conditions' => $conditions, diff --git a/Tests/Unit/ViewHelpers/Logic/OrViewHelperTest.php b/Tests/Unit/ViewHelpers/Logic/OrViewHelperTest.php index d3860515..01956bca 100644 --- a/Tests/Unit/ViewHelpers/Logic/OrViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Logic/OrViewHelperTest.php @@ -51,7 +51,7 @@ public function conditionProvider() (true === true), (1 === 1), ('hrdr' === 'hrdr'), - ('hrdr' == 'hrdr'), + ('hrdr' === 'hrdr'), (true == 1), ], true, @@ -61,7 +61,7 @@ public function conditionProvider() (true === true), (1 === 1), ('hrdr' === 'hrdr'), - ('hrdr' == 'hrdr'), + ('hrdr' === 'hrdr'), (true == 'hrdr'), ], true, @@ -91,7 +91,7 @@ public function conditionProvider() ]; } - public function setUp() + protected function setUp(): void { parent::setUp(); $this->fixture = $this->getMockBuilder(OrViewHelper::class) diff --git a/UPGRADING.md b/UPGRADING.md new file mode 100644 index 00000000..1261a97f --- /dev/null +++ b/UPGRADING.md @@ -0,0 +1,44 @@ +# Upgrading the find extension + +## Solarium upgrade + +The underlying solarium library has been updated. Find tries so do this as smooth as possible +for you. + +Solr has a slightly changed syntax for connecting now, see [here](https://solarium.readthedocs.io/en/stable/getting-started/#pitfall-when-upgrading-from-earlier-versions-to-5x). + +This is the actual syntax: + +``` +plugin.tx_find.settings { + connections { + default { + options { + host = solr.local + port = 8983 + path = / + scheme = http + core = myIndex + } + } + } +} +``` + + +The connection configuration below may still work, but a deprecation notice is thrown - so +please change the settings. + +``` +plugin.tx_find.settings { + connections { + default { + options { + host = solr.local + port = 8080 + path = /solr/myIndex + } + } + } +} +``` diff --git a/composer.json b/composer.json index cbb9d04d..bf3aad53 100644 --- a/composer.json +++ b/composer.json @@ -26,27 +26,46 @@ } }, "replace": { - "typo3-ter/find": "self.version", - "subugoe/find": "self.version" + "typo3-ter/find": "self.version" }, "require": { + "php": "^7.4", + "ext-curl": "*", "ext-json": "*", - "typo3/cms-core": "^9.5 || ^10.4.10", - "typo3/cms-felogin": "^9.5 || ^10.4.10" + "solarium/solarium": ">=6.0 <7.0", + "typo3/cms-core": "^10.4.10", + "typo3/cms-felogin": "^10.4.10" }, "require-dev": { - "solarium/solarium": "~4.2 || ^5.1", - "nimut/testing-framework": "^5.1", - "friendsofphp/php-cs-fixer": "^2.13" + "nimut/testing-framework": "^6.0", + "friendsofphp/php-cs-fixer": "^3.0", + "phpunit/phpunit": "^8.5", + "rector/rector": "^0.12.5" }, "config": { "vendor-dir": ".Build/vendor", - "bin-dir": ".Build/bin" + "bin-dir": ".Build/bin", + "allow-plugins": { + "typo3/class-alias-loader": true, + "typo3/cms-composer-installers": true + } }, "scripts": { "post-autoload-dump": [ "mkdir -p .Build/Web/typo3conf/ext/", "[ -L .Build/Web/typo3conf/ext/find ] || ln -snvf ../../../../. .Build/Web/typo3conf/ext/find" + ], + "rector-lint": ".Build/bin/rector process --dry-run", + "rector-fix": ".Build/bin/rector process", + "php-cs-lint": ".Build/bin/php-cs-fixer fix --dry-run", + "php-cs-fix": ".Build/bin/php-cs-fixer fix", + "lint": [ + "@php-cs-lint", + "@rector-lint" + ], + "fix": [ + "@php-cs-fix", + "@rector-fix" ] }, "suggest": { diff --git a/ext_emconf.php b/ext_emconf.php index bb28ea85..1678f26c 100755 --- a/ext_emconf.php +++ b/ext_emconf.php @@ -1,30 +1,20 @@ 'Find', 'description' => 'A frontend for Solr indexes', 'version' => '3.1.1', 'state' => 'stable', 'category' => 'frontend', - 'shy' => 0, - 'priority' => '', - 'loadOrder' => '', - 'module' => '', - 'uploadfolder' => 0, - 'createDirs' => '', - 'modify_tables' => '', - 'clearcacheonload' => 1, - 'lockType' => '', + 'clearCacheOnLoad' => true, 'author' => 'Sven-S. Porst, Ingo Pfennigstorf', 'author_email' => 'pfennigstorf@sub.uni-goettingen.de', 'author_company' => 'SUB Göttingen', - 'dependencies' => '', - 'conflicts' => '', 'constraints' => [ 'depends' => [ - 'php' => '7.2.0-7.4.99', - 'typo3' => '9.5.0-10.4.99', - 'felogin' => '9.5.0-10.4.99', + 'php' => '7.4.0-8.0.99', + 'typo3' => '10.4.0-10.4.99', + 'felogin' => '10.4.0-10.4.99', ], 'conflicts' => [], 'suggests' => [], diff --git a/ext_localconf.php b/ext_localconf.php index 30adbaa0..f6a7f216 100644 --- a/ext_localconf.php +++ b/ext_localconf.php @@ -1,17 +1,17 @@ 'index, detail, suggest', + \Subugoe\Find\Controller\SearchController::class => 'index, detail, suggest', ], [ - 'Search' => 'index, detail, suggest', + \Subugoe\Find\Controller\SearchController::class => 'index, detail, suggest', ] ); diff --git a/rector.php b/rector.php new file mode 100644 index 00000000..8ce7ad68 --- /dev/null +++ b/rector.php @@ -0,0 +1,31 @@ +paths([ + __DIR__.'/Classes', + __DIR__.'/Tests', + __DIR__.'/Configuration', + __DIR__.'/Resources', + __DIR__.'/*.php', + ]); + $containerConfigurator->skip([ + __DIR__.'/.Build/vendor', + __DIR__.'/var', + __DIR__.'/*.cache', + ]); + + // Define what rule sets will be applied + $containerConfigurator->sets([ + SetList::CODING_STYLE, + SetList::CODE_QUALITY, + SetList::PHP_74, + Typo3SetList::TYPO3_104, + Typo3SetList::TYPOSCRIPT_CONDITIONS_104, + ]); +};