Passed
Push — master ( 30aafa...437b56 )
by Timo
12:12
created

getSearchFacetingSingleFacetMode()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 6
rs 10
c 0
b 0
f 0
ccs 0
cts 2
cp 0
cc 1
nc 1
nop 1
crap 2
1
<?php
2
namespace ApacheSolrForTypo3\Solr\System\Configuration;
3
4
/***************************************************************
5
 *  Copyright notice
6
 *
7
 *  (c) 2016 Timo Schmidt <[email protected]>
8
 *  All rights reserved
9
 *
10
 *  This script is part of the TYPO3 project. The TYPO3 project is
11
 *  free software; you can redistribute it and/or modify
12
 *  it under the terms of the GNU General Public License as published by
13
 *  the Free Software Foundation; either version 3 of the License, or
14
 *  (at your option) any later version.
15
 *
16
 *  The GNU General Public License can be found at
17
 *  http://www.gnu.org/copyleft/gpl.html.
18
 *  A copy is found in the textfile GPL.txt and important notices to the license
19
 *  from the author is found in LICENSE.txt distributed with these scripts.
20
 *
21
 *
22
 *  This script is distributed in the hope that it will be useful,
23
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
24
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
25
 *  GNU General Public License for more details.
26
 *
27
 *  This copyright notice MUST APPEAR in all copies of the script!
28
 ***************************************************************/
29
30
use ApacheSolrForTypo3\Solr\IndexQueue\Indexer;
31
use ApacheSolrForTypo3\Solr\IndexQueue\Initializer\Record;
32
use ApacheSolrForTypo3\Solr\System\ContentObject\ContentObjectService;
33
use ApacheSolrForTypo3\Solr\System\Util\ArrayAccessor;
34
use InvalidArgumentException;
35
use TYPO3\CMS\Core\Utility\ArrayUtility;
36
use TYPO3\CMS\Core\Utility\GeneralUtility;
37
38
/**
39
 * TypoScript configuration object, used to read all TypoScript configuration.
40
 *
41
 * The TypoScriptConfiguration was introduced in order to be able to replace the old,
42
 * array based configuration with one configuration object.
43
 *
44
 * To read the configuration, you should use
45
 *
46
 * $configuration->getValueByPath
47
 *
48
 * or
49
 *
50
 * $configuration->isValidPath
51
 *
52
 * to check if an configuration path exists.
53
 *
54
 * To ensure Backwards compatibility the TypoScriptConfiguration object implements the
55
 * ArrayAccess interface (offsetGet,offsetExists,offsetUnset and offsetSet)
56
 *
57
 * This was only introduced to be backwards compatible in logTerm only "getValueByPath", "isValidPath" or
58
 * speaking methods for configuration settings should be used!
59
 *
60
 * @author Marc Bastian Heinrichs <[email protected]>
61
 * @author Timo Schmidt <[email protected]>
62
 */
63
class TypoScriptConfiguration
64
{
65
    /**
66
     * @var \ApacheSolrForTypo3\Solr\System\Util\ArrayAccessor|null
67
     */
68
    protected $configurationAccess = null;
69
70
    /**
71
     * Holds the pageId in which context the configuration was parsed
72
     * (normally $GLOBALS['TSFE']->id)
73
     */
74
    protected $contextPageId = 0;
75
76
    /**
77
     * @var ContentObjectService
78
     */
79
    protected $contentObjectService;
80
81
    /**
82
     * @param array $configuration
83
     * @param int $contextPageId
84
     * @param ContentObjectService $contentObjectService
85
     */
86 323
    public function __construct(array $configuration, $contextPageId = 0, ContentObjectService $contentObjectService = null)
87
    {
88 323
        $this->configurationAccess = new ArrayAccessor($configuration, '.', true);
89 323
        $this->contextPageId = $contextPageId;
90 323
        $this->contentObjectService = $contentObjectService ?? GeneralUtility::makeInstance(ContentObjectService::class);
91 323
    }
92
93
    /**
94
     * Checks if a value is 1, '1', 'true'
95
     * @param mixed $value
96
     * @return bool
97
     */
98 269
    protected function getBool($value)
99
    {
100 269
        return filter_var($value, FILTER_VALIDATE_BOOLEAN);
101
    }
102
103
    /**
104
     * This method can be used to only retrieve array keys where the value is not an array.
105
     *
106
     * This can be very handy in the configuration when only keys should ne taken into account
107
     * where the value is not a subconfiguration (typically an typoscript object path).
108
     *
109
     * @param $inputArray
110
     * @return array
111
     */
112 50
    protected function getOnlyArrayKeysWhereValueIsNotAnArray($inputArray)
113
    {
114 50
        $keysWithNonArrayValue = [];
115
116 50
        foreach ($inputArray as $key => $value) {
117 50
            if (is_array($value)) {
118
                // configuration for a content object, skipping
119 44
                continue;
120
            }
121
122 50
            $keysWithNonArrayValue[] = $key;
123
        }
124
125 50
        return $keysWithNonArrayValue;
126
    }
127
128
    /**
129
     * Gets the value from a given TypoScript path.
130
     *
131
     * In the context of an frontend content element the path plugin.tx_solr is
132
     * merged recursive with overrule with the content element specific typoscript
133
     * settings, like plugin.tx_solr_PiResults_Results, and possible flex form settings
134
     * (depends on the solr plugin).
135
     *
136
     * Example: plugin.tx_solr.search.targetPage
137
     * returns $GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_solr.']['search.']['targetPage']
138
     *
139
     * @param string $path TypoScript path
140
     * @return mixed The TypoScript object defined by the given path
141
     * @throws InvalidArgumentException
142
     */
143 312
    public function getValueByPath($path)
144
    {
145 312
        if (!is_string($path)) {
0 ignored issues
show
introduced by
The condition is_string($path) is always true.
Loading history...
146
            throw new InvalidArgumentException('Parameter $path is not a string',
147
                1325623321);
148
        }
149 312
        return $this->configurationAccess->get($path);
0 ignored issues
show
Bug introduced by
The method get() does not exist on null. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

149
        return $this->configurationAccess->/** @scrutinizer ignore-call */ get($path);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
150
    }
151
152
    /**
153
     * This method can be used to get  a configuration value by path if it exists or return a
154
     * default value when it does not exist.
155
     *
156
     * @param string $path
157
     * @param mixed $defaultValue
158
     * @return mixed
159
     */
160 309
    public function getValueByPathOrDefaultValue($path, $defaultValue)
161
    {
162 309
        $value = $this->getValueByPath($path);
163 309
        if (is_null($value)) {
164 299
            return $defaultValue;
165
        }
166
167 186
        return $value;
168
    }
169
170
    /**
171
     * Gets the parent TypoScript Object from a given TypoScript path.
172
     *
173
     * In the context of an frontend content element the path plugin.tx_solr is
174
     * merged recursive with overrule with the content element specific typoscript
175
     * settings, like plugin.tx_solr_PiResults_Results, and possible flex form settings
176
     * (depends on the solr plugin).
177
     *
178
     * Example: plugin.tx_solr.index.queue.tt_news.fields.content
179
     * returns $GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_solr.']['index.']['queue.']['tt_news.']['fields.']['content.']
180
     * which is a SOLR_CONTENT cObj.
181
     *
182
     * @param string $path TypoScript path
183
     * @return array The TypoScript object defined by the given path
184
     * @throws InvalidArgumentException
185
     */
186 290
    public function getObjectByPath($path)
187
    {
188 290
        if (substr($path, -1) !== '.') {
189 1
            $path = rtrim($path, '.');
190 1
            $path = substr($path, 0, strrpos($path, '.') + 1);
191
        }
192
193 290
        if (!is_string($path)) {
0 ignored issues
show
introduced by
The condition is_string($path) is always true.
Loading history...
194
            throw new InvalidArgumentException('Parameter $path is not a string', 1325627243);
195
        }
196
197 290
        return $this->configurationAccess->get($path);
198
    }
199
200
    /**
201
     * Gets the parent TypoScript Object from a given TypoScript path and if not present return
202
     * the default value
203
     *
204
     * @see getObjectByPath
205
     * @param string $path
206
     * @param array $defaultValue
207
     * @return array
208
     */
209 286
    public function getObjectByPathOrDefault($path, array $defaultValue)
210
    {
211
        try {
212 286
            $object = $this->getObjectByPath($path);
213
        } catch (\InvalidArgumentException $e) {
214
            return $defaultValue;
215
        }
216
217 286
        if (!is_array($object)) {
0 ignored issues
show
introduced by
The condition is_array($object) is always true.
Loading history...
218 139
            return $defaultValue;
219
        }
220
221 208
        return $object;
222
    }
223
224
    /**
225
     * Checks whether a given TypoScript path is valid.
226
     *
227
     * @param string $path TypoScript path
228
     * @return bool TRUE if the path resolves, FALSE otherwise
229
     */
230
    public function isValidPath($path)
231
    {
232
        $isValidPath = false;
233
234
        $pathValue = $this->getValueByPath($path);
235
        if (!is_null($pathValue)) {
236
            $isValidPath = true;
237
        }
238
239
        return $isValidPath;
240
    }
241
242
    /**
243
     * Merges a configuration with another configuration a
244
     *
245
     * @param array $configurationToMerge
246
     * @param bool $addKeys If set to FALSE, keys that are NOT found in $original will not be set. Thus only existing value can/will be overruled from overrule array.
247
     * @param bool $includeEmptyValues If set, values from $overrule will overrule if they are empty or zero.
248
     * @param bool $enableUnsetFeature If set, special values "__UNSET" can be used in the overrule array in order to unset array keys in the original array.
249
     * @return TypoScriptConfiguration
250
     */
251 22
    public function mergeSolrConfiguration(array $configurationToMerge, $addKeys = true, $includeEmptyValues = true, $enableUnsetFeature = true)
252
    {
253 22
        $data = $this->configurationAccess->getData();
254 22
        ArrayUtility::mergeRecursiveWithOverrule(
255 22
            $data['plugin.']['tx_solr.'],
256 22
            $configurationToMerge,
257 22
            $addKeys,
258 22
            $includeEmptyValues,
259 22
            $enableUnsetFeature
260
        );
261
262 22
        $this->configurationAccess->setData($data);
263
264 22
        return $this;
265
    }
266
267
    /**
268
     * Returns true when ext_solr is enabled
269
     *
270
     * @param boolean $defaultIfEmpty
271
     * @return boolean
272
     */
273 3
    public function getEnabled($defaultIfEmpty = false)
274
    {
275 3
        $path = 'plugin.tx_solr.enabled';
276 3
        $result = $this->getValueByPathOrDefaultValue($path, $defaultIfEmpty);
277 3
        return $this->getBool($result);
278
    }
279
280
    /**
281
     * Returns the configured additionalFields configured for the indexing.
282
     *
283
     * plugin.tx_solr.index.additionalFields.
284
     *
285
     * @param array $defaultIfEmpty
286
     * @return array
287
     */
288 3
    public function getIndexAdditionalFieldsConfiguration($defaultIfEmpty = [])
289
    {
290 3
        $result = $this->getObjectByPathOrDefault('plugin.tx_solr.index.additionalFields.', $defaultIfEmpty);
291 3
        return $result;
292
    }
293
294
    /**
295
     * Returns all solr fields names where a mapping is configured in index.additionalFields
296
     *
297
     * Returns all keys from
298
     * plugin.tx_solr.index.additionalFields.
299
     *
300
     * @param array $defaultIfEmpty
301
     * @return array
302
     */
303 2
    public function getIndexMappedAdditionalFieldNames($defaultIfEmpty = [])
304
    {
305 2
        $mappingConfiguration = $this->getIndexAdditionalFieldsConfiguration();
306 2
        $mappedFieldNames = $this->getOnlyArrayKeysWhereValueIsNotAnArray($mappingConfiguration);
307 2
        return count($mappedFieldNames) == 0 ? $defaultIfEmpty : $mappedFieldNames;
308
    }
309
310
    /**
311
     * Returns the fieldProcessingInstructions configuration array
312
     *
313
     * plugin.tx_solr.index.fieldProcessingInstructions.
314
     *
315
     * @param array $defaultIfEmpty
316
     * @return array
317
     */
318 88
    public function getIndexFieldProcessingInstructionsConfiguration(array $defaultIfEmpty = [])
319
    {
320 88
        $result = $this->getObjectByPathOrDefault('plugin.tx_solr.index.fieldProcessingInstructions.', $defaultIfEmpty);
321 88
        return $result;
322
    }
323
324
    /**
325
     * Retrieves the indexing configuration array for an indexing queue by configuration name.
326
     *
327
     * plugin.tx_solr.index.queue.<configurationName>.
328
     *
329
     * @param string $configurationName
330
     * @param array $defaultIfEmpty
331
     * @return array
332
     */
333 7
    public function getIndexQueueConfigurationByName($configurationName, array $defaultIfEmpty = [])
334
    {
335 7
        $path = 'plugin.tx_solr.index.queue.' . $configurationName . '.';
336 7
        $result = $this->getObjectByPathOrDefault($path, $defaultIfEmpty);
337 7
        return $result;
338
    }
339
340
    /**
341
     * Returns an array of all additionalPageIds by index configuration name.
342
     *
343
     * plugin.tx_solr.index.queue.pages.additionalPageIds
344
     *
345
     * @param string $configurationName
346
     * @param array $defaultIfEmpty
347
     * @return array
348
     */
349 43
    public function getIndexQueueAdditionalPageIdsByConfigurationName($configurationName = 'pages', $defaultIfEmpty = [])
350
    {
351 43
        $path = 'plugin.tx_solr.index.queue.' . $configurationName . '.additionalPageIds';
352 43
        $result = $this->getValueByPathOrDefaultValue($path, '');
353 43
        if (trim($result) === '') {
0 ignored issues
show
Bug introduced by
It seems like $result can also be of type array; however, parameter $str of trim() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

353
        if (trim(/** @scrutinizer ignore-type */ $result) === '') {
Loading history...
354 39
            return $defaultIfEmpty;
355
        }
356
357 4
        return GeneralUtility::trimExplode(',', $result);
0 ignored issues
show
Bug introduced by
It seems like $result can also be of type array; however, parameter $string of TYPO3\CMS\Core\Utility\G...lUtility::trimExplode() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

357
        return GeneralUtility::trimExplode(',', /** @scrutinizer ignore-type */ $result);
Loading history...
358
    }
359
360
    /**
361
     * Returns an array of all allowedPageTypes.
362
     *
363
     * plugin.tx_solr.index.queue.pages.allowedPageTypes
364
     *
365
     * @param string $configurationName The configuration name of the queue to use.
366
     * @param array $defaultIfEmpty
367
     * @return array
368
     */
369 30
    public function getIndexQueueAllowedPageTypesArrayByConfigurationName($configurationName = 'pages', $defaultIfEmpty = [])
370
    {
371 30
        $path = 'plugin.tx_solr.index.queue.' . $configurationName . '.allowedPageTypes';
372 30
        $result = $this->getValueByPathOrDefaultValue($path, '');
373 30
        if (trim($result) === '') {
0 ignored issues
show
Bug introduced by
It seems like $result can also be of type array; however, parameter $str of trim() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

373
        if (trim(/** @scrutinizer ignore-type */ $result) === '') {
Loading history...
374
            return $defaultIfEmpty;
375
        }
376
377 30
        return GeneralUtility::trimExplode(',', $result);
0 ignored issues
show
Bug introduced by
It seems like $result can also be of type array; however, parameter $string of TYPO3\CMS\Core\Utility\G...lUtility::trimExplode() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

377
        return GeneralUtility::trimExplode(',', /** @scrutinizer ignore-type */ $result);
Loading history...
378
    }
379
380
    /**
381
     * Returns the configured excludeContentByClass patterns as array.
382
     *
383
     * plugin.tx_solr.index.queue.pages.excludeContentByClass
384
     *
385
     * @param array $defaultIfEmpty
386
     * @return array
387
     */
388 52
    public function getIndexQueuePagesExcludeContentByClassArray($defaultIfEmpty = [])
389
    {
390 52
        $path = 'plugin.tx_solr.index.queue.pages.excludeContentByClass';
391 52
        $result = $this->getValueByPathOrDefaultValue($path, '');
392
393 52
        if (trim($result) === '') {
0 ignored issues
show
Bug introduced by
It seems like $result can also be of type array; however, parameter $str of trim() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

393
        if (trim(/** @scrutinizer ignore-type */ $result) === '') {
Loading history...
394 7
            return $defaultIfEmpty;
395
        }
396
397 45
        return GeneralUtility::trimExplode(',', $result);
0 ignored issues
show
Bug introduced by
It seems like $result can also be of type array; however, parameter $string of TYPO3\CMS\Core\Utility\G...lUtility::trimExplode() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

397
        return GeneralUtility::trimExplode(',', /** @scrutinizer ignore-type */ $result);
Loading history...
398
    }
399
400
    /**
401
     * Returns the configured database table for an indexing queue configuration or
402
     * the configurationName itself that is used by convention as tableName when no
403
     * other tablename is present.
404
     *
405
     * plugin.tx_solr.index.queue.<configurationName>.table or configurationName
406
     *
407
     * @param string $configurationName
408
     * @return string
409
     */
410 73
    public function getIndexQueueTableNameOrFallbackToConfigurationName($configurationName = '')
411
    {
412 73
        $path = 'plugin.tx_solr.index.queue.' . $configurationName . '.table';
413 73
        $result = $this->getValueByPathOrDefaultValue($path, $configurationName);
414 73
        return $result;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $result also could return the type array which is incompatible with the documented return type string.
Loading history...
415
    }
416
417
    /**
418
     * Returns the field configuration for a specific index queue.
419
     *
420
     * plugin.tx_solr.index.queue.<configurationName>.fields.
421
     *
422
     * @param string $configurationName
423
     * @param array $defaultIfEmpty
424
     * @return array
425
     */
426 70
    public function getIndexQueueFieldsConfigurationByConfigurationName($configurationName = '', $defaultIfEmpty = [])
427
    {
428 70
        $path = 'plugin.tx_solr.index.queue.' . $configurationName . '.fields.';
429 70
        $result = $this->getObjectByPathOrDefault($path, $defaultIfEmpty);
430 70
        return $result;
431
    }
432
433
    /**
434
     * Gets an array of tables configured for indexing by the Index Queue. Since the
435
     * record monitor must watch these tables for manipulation.
436
     *
437
     * @return array Array of table names to be watched by the record monitor.
438
     */
439 35
    public function getIndexQueueMonitoredTables()
440
    {
441 35
        $monitoredTables = [];
442
443 35
        $indexingConfigurations = $this->getEnabledIndexQueueConfigurationNames();
444 35
        foreach ($indexingConfigurations as $indexingConfigurationName) {
445 35
            $monitoredTable = $this->getIndexQueueTableNameOrFallbackToConfigurationName($indexingConfigurationName);
446 35
            $monitoredTables[] = $monitoredTable;
447 35
            if ($monitoredTable === 'pages') {
448
                // when monitoring pages, also monitor creation of translations
449 35
                $monitoredTables[] = 'pages_language_overlay';
450
            }
451
        }
452
453 35
        return array_values(array_unique($monitoredTables));
454
    }
455
456
    /**
457
     * This method can be used to check if a table is configured to be monitored by the record monitor.
458
     *
459
     * @param string $tableName
460
     * @return bool
461
     */
462 34
    public function getIndexQueueIsMonitoredTable($tableName)
463
    {
464 34
        return in_array($tableName, $this->getIndexQueueMonitoredTables(), true);
465
    }
466
467
    /**
468
     * Returns the configured indexer class that should be used for a certain indexingConfiguration.
469
     * By default "ApacheSolrForTypo3\Solr\IndexQueue\Indexer" will be returned.
470
     *
471
     * plugin.tx_solr.index.queue.<configurationName>.indexer
472
     *
473
     * @param string $configurationName
474
     * @param string $defaultIfEmpty
475
     * @return string
476
     */
477 5
    public function getIndexQueueIndexerByConfigurationName($configurationName, $defaultIfEmpty = Indexer::class)
478
    {
479 5
        $path = 'plugin.tx_solr.index.queue.' . $configurationName . '.indexer';
480 5
        $result = $this->getValueByPathOrDefaultValue($path, $defaultIfEmpty);
481 5
        return $result;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $result also could return the type array which is incompatible with the documented return type string.
Loading history...
482
    }
483
484
    /**
485
     * Returns the configuration of an indexer for a special indexingConfiguration. By default an empty
486
     * array is returned.
487
     *
488
     * plugin.tx_solr.index.queue.<configurationName>.indexer.
489
     *
490
     * @param string $configurationName
491
     * @param array $defaultIfEmpty
492
     * @return array
493
     */
494 5
    public function getIndexQueueIndexerConfigurationByConfigurationName($configurationName, $defaultIfEmpty = [])
495
    {
496 5
        $path = 'plugin.tx_solr.index.queue.' . $configurationName . '.indexer.';
497 5
        $result = $this->getObjectByPathOrDefault($path, $defaultIfEmpty);
498 5
        return $result;
499
    }
500
501
    /**
502
     * Returns all solr fields names where a mapping configuration is set for a certain index configuration
503
     *
504
     * Returns all keys from
505
     * plugin.tx_solr.index.queue.<configurationName>.fields.
506
     *
507
     * @param string $configurationName
508
     * @param array $defaultIfEmpty
509
     * @return array
510
     */
511 49
    public function getIndexQueueMappedFieldsByConfigurationName($configurationName = '', $defaultIfEmpty = [])
512
    {
513 49
        $mappingConfiguration = $this->getIndexQueueFieldsConfigurationByConfigurationName($configurationName);
514 49
        $mappedFieldNames = $this->getOnlyArrayKeysWhereValueIsNotAnArray($mappingConfiguration);
515 49
        return count($mappedFieldNames) == 0 ? $defaultIfEmpty : $mappedFieldNames;
516
    }
517
518
    /**
519
     * This method is used to check if an index queue configuration is enabled or not
520
     *
521
     * plugin.tx_solr.index.queue.<configurationName> = 1
522
     *
523
     * @param string $configurationName
524
     * @param bool $defaultIfEmpty
525
     * @return bool
526
     */
527 67
    public function getIndexQueueConfigurationIsEnabled($configurationName, $defaultIfEmpty = false)
528
    {
529 67
        $path = 'plugin.tx_solr.index.queue.' . $configurationName;
530 67
        $result = $this->getValueByPathOrDefaultValue($path, $defaultIfEmpty);
531 67
        return $this->getBool($result);
532
    }
533
534
    /**
535
     * Retrieves an array of enabled index queue configurations.
536
     *
537
     * plugin.tx_solr.index.queue.<configurationName>
538
     *
539
     * @param array $defaultIfEmpty
540
     * @return array
541
     */
542 75
    public function getEnabledIndexQueueConfigurationNames($defaultIfEmpty = [])
543
    {
544 75
        $tablesToIndex = [];
545 75
        $path = 'plugin.tx_solr.index.queue.';
546 75
        $indexQueueConfiguration = $this->getObjectByPathOrDefault($path, []);
547 75
        foreach ($indexQueueConfiguration as $configurationName => $indexingEnabled) {
548 73
            if (substr($configurationName, -1) != '.' && $indexingEnabled) {
549 73
                $tablesToIndex[] = $configurationName;
550
            }
551
        }
552
553 75
        return count($tablesToIndex) == 0 ? $defaultIfEmpty : $tablesToIndex;
554
    }
555
556
    /**
557
     * Retrieves an array of additional fields that will trigger an recursive update of pages
558
     * when some of the fields on that page are modified.
559
     *
560
     * plugin.tx_solr.index.queue.recursiveUpdateFields
561
     *
562
     * @param string $configurationName
563
     * @param array $defaultIfEmpty
564
     * @return array
565
     */
566 26
    public function getIndexQueueConfigurationRecursiveUpdateFields($configurationName, $defaultIfEmpty = [])
567
    {
568 26
        $path = 'plugin.tx_solr.index.queue.' . $configurationName . '.recursiveUpdateFields';
569 26
        $recursiveUpdateFieldsString = $this->getValueByPathOrDefaultValue($path, '');
570 26
        if (trim($recursiveUpdateFieldsString) === '') {
0 ignored issues
show
Bug introduced by
It seems like $recursiveUpdateFieldsString can also be of type array; however, parameter $str of trim() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

570
        if (trim(/** @scrutinizer ignore-type */ $recursiveUpdateFieldsString) === '') {
Loading history...
571 20
            return $defaultIfEmpty;
572
        }
573 7
        $recursiveUpdateFields = GeneralUtility::trimExplode(',', $recursiveUpdateFieldsString);
0 ignored issues
show
Bug introduced by
It seems like $recursiveUpdateFieldsString can also be of type array; however, parameter $string of TYPO3\CMS\Core\Utility\G...lUtility::trimExplode() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

573
        $recursiveUpdateFields = GeneralUtility::trimExplode(',', /** @scrutinizer ignore-type */ $recursiveUpdateFieldsString);
Loading history...
574
        // For easier check later on we return an array by combining $recursiveUpdateFields
575 7
        return array_combine($recursiveUpdateFields, $recursiveUpdateFields);
0 ignored issues
show
Bug Best Practice introduced by
The expression return array_combine($re...$recursiveUpdateFields) could also return false which is incompatible with the documented return type array. Did you maybe forget to handle an error condition?

If the returned type also contains false, it is an indicator that maybe an error condition leading to the specific return statement remains unhandled.

Loading history...
576
    }
577
578
579
    /**
580
     * Retrieves and initialPagesAdditionalWhereClause where clause when configured or an empty string.
581
     *
582
     * plugin.tx_solr.index.queue.<configurationName>.initialPagesAdditionalWhereClause
583
     *
584
     * @param string $configurationName
585
     * @return string
586
     */
587 13
    public function getInitialPagesAdditionalWhereClause($configurationName)
588
    {
589 13
        $path = 'plugin.tx_solr.index.queue.' . $configurationName . '.initialPagesAdditionalWhereClause';
590 13
        $initialPagesAdditionalWhereClause = $this->getValueByPathOrDefaultValue($path, '');
591
592 13
        if (trim($initialPagesAdditionalWhereClause) === '') {
0 ignored issues
show
Bug introduced by
It seems like $initialPagesAdditionalWhereClause can also be of type array; however, parameter $str of trim() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

592
        if (trim(/** @scrutinizer ignore-type */ $initialPagesAdditionalWhereClause) === '') {
Loading history...
593 13
            return '';
594
        }
595
596 1
        return trim($initialPagesAdditionalWhereClause);
597
    }
598
599
    /**
600
     * Retrieves and additional where clause when configured or an empty string.
601
     *
602
     * plugin.tx_solr.index.queue.<configurationName>.additionalWhereClause
603
     *
604
     * @param string $configurationName
605
     * @return string
606
     */
607 70
    public function getIndexQueueAdditionalWhereClauseByConfigurationName($configurationName)
608
    {
609 70
        $path = 'plugin.tx_solr.index.queue.' . $configurationName . '.additionalWhereClause';
610 70
        $additionalWhere = $this->getValueByPathOrDefaultValue($path, '');
611
612 70
        if (trim($additionalWhere) === '') {
0 ignored issues
show
Bug introduced by
It seems like $additionalWhere can also be of type array; however, parameter $str of trim() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

612
        if (trim(/** @scrutinizer ignore-type */ $additionalWhere) === '') {
Loading history...
613 25
            return '';
614
        }
615
616 46
        return ' AND ' . $additionalWhere;
0 ignored issues
show
Bug introduced by
Are you sure $additionalWhere of type array|string can be used in concatenation? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

616
        return ' AND ' . /** @scrutinizer ignore-type */ $additionalWhere;
Loading history...
617
    }
618
619
    /**
620
     * This method can be used to retrieve all index queue configuration names, where
621
     * a certain table is used. It can be configured with the property "table" or is using the configuration
622
     * key a fallback for the table name.
623
     *
624
     * plugin.tx_solr.index.queue.<configurationName>.
625
     *
626
     * @param string $tableName
627
     * @param array $defaultIfEmpty
628
     * @return array
629
     */
630 1
    public function getIndexQueueConfigurationNamesByTableName($tableName, $defaultIfEmpty = [])
631
    {
632 1
        $path = 'plugin.tx_solr.index.queue.';
633 1
        $configuration = $this->getObjectByPathOrDefault($path, []);
634 1
        $possibleConfigurations = [];
635
636 1
        foreach ($configuration as $configurationName => $indexingEnabled) {
637 1
            $isObject = substr($configurationName, -1) === '.';
638 1
            if ($isObject || !$indexingEnabled) {
639 1
                continue;
640
            }
641
642
            // when the configuration name equals the tableName we have a fallback
643 1
            $hasTableNameAsConfigurationName = $configurationName == $tableName;
644 1
            $hasTableAssignedInQueueConfiguration = isset($configuration[$configurationName . '.']['table']) &&
645 1
                                                    $configuration[$configurationName . '.']['table'] == $tableName;
646 1
            if ($hasTableNameAsConfigurationName || $hasTableAssignedInQueueConfiguration) {
647 1
                $possibleConfigurations[] = $configurationName;
648
            }
649
        }
650
651 1
        return count($possibleConfigurations) > 0 ? $possibleConfigurations : $defaultIfEmpty;
652
    }
653
654
    /**
655
     * This method is used to retrieve the className of a queue initializer for a certain indexing configuration
656
     * of returns the default initializer class, when noting is configured.
657
     *
658
     * plugin.tx_solr.index.queue.<configurationName>.initialization
659
     *
660
     * @param string $configurationName
661
     * @param string $defaultIfEmpty
662
     * @return string
663
     */
664 7
    public function getIndexQueueInitializerClassByConfigurationName($configurationName, $defaultIfEmpty = Record::class)
665
    {
666 7
        $path = 'plugin.tx_solr.index.queue.' . $configurationName . '.initialization';
667 7
        $className = $this->getValueByPathOrDefaultValue($path, $defaultIfEmpty);
668
669 7
        return $className;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $className also could return the type array which is incompatible with the documented return type string.
Loading history...
670
    }
671
672
    /**
673
     * Returns the _LOCAL_LANG configuration from the TypoScript.
674
     *
675
     * plugin.tx_solr._LOCAL_LANG.
676
     *
677
     * @param array $defaultIfEmpty
678
     * @return array
679
     */
680
    public function getLocalLangConfiguration(array $defaultIfEmpty = [])
681
    {
682
        $result = $this->getObjectByPathOrDefault('plugin.tx_solr._LOCAL_LANG.', $defaultIfEmpty);
683
        return $result;
684
    }
685
686
    /**
687
     * When this is enabled the output of the devlog, will be printed as debug output.
688
     *
689
     * @param bool $defaultIfEmpty
690
     * @return bool
691
     */
692
    public function getLoggingDebugOutput($defaultIfEmpty = false)
693
    {
694
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.logging.debugOutput', $defaultIfEmpty);
695
        return $this->getBool($result);
696
    }
697
698
    /**
699
     * Returns if query filters should be written to the log.
700
     *
701
     * plugin.tx_solr.logging.query.filters
702
     *
703
     * @param bool $defaultIfEmpty
704
     * @return bool
705
     */
706
    public function getLoggingQueryFilters($defaultIfEmpty = false)
707
    {
708
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.logging.query.filters', $defaultIfEmpty);
709
        return $this->getBool($result);
710
    }
711
712
    /**
713
     * Returns if the querystring should be logged or not.
714
     *
715
     * plugin.tx_solr.logging.query.queryString
716
     *
717
     * @param bool $defaultIfEmpty
718
     * @return bool
719
     */
720 50
    public function getLoggingQueryQueryString($defaultIfEmpty = false)
721
    {
722 50
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.logging.query.queryString', $defaultIfEmpty);
723 50
        return $this->getBool($result);
724
    }
725
726
    /**
727
     * Returns if the searchWords should be logged or not.
728
     *
729
     * plugin.tx_solr.logging.query.searchWords
730
     *
731
     * @param bool $defaultIfEmpty
732
     * @return bool
733
     */
734 120
    public function getLoggingQuerySearchWords($defaultIfEmpty = false)
735
    {
736 120
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.logging.query.searchWords', $defaultIfEmpty);
737 120
        return $this->getBool($result);
738
    }
739
740
    /**
741
     * Returns if the rawGet requests should be logged or not.
742
     *
743
     * plugin.tx_solr.logging.query.rawGet
744
     *
745
     * @param bool $defaultIfEmpty
746
     * @return bool
747
     */
748
    public function getLoggingQueryRawGet($defaultIfEmpty = false)
749
    {
750
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.logging.query.rawGet', $defaultIfEmpty);
751
        return $this->getBool($result);
752
    }
753
754
    /**
755
     * Returns if the rawPost requests should be logged or not.
756
     *
757
     * plugin.tx_solr.logging.query.rawPost
758
     *
759
     * @param bool $defaultIfEmpty
760
     * @return bool
761
     */
762 17
    public function getLoggingQueryRawPost($defaultIfEmpty = false)
763
    {
764 17
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.logging.query.rawPost', $defaultIfEmpty);
765 17
        return $this->getBool($result);
766
    }
767
768
    /**
769
     * Returns if the rawDelete requests should be logged or not.
770
     *
771
     * plugin.tx_solr.logging.query.rawDelete
772
     *
773
     * @param bool $defaultIfEmpty
774
     * @return bool
775
     */
776
    public function getLoggingQueryRawDelete($defaultIfEmpty = false)
777
    {
778
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.logging.query.rawDelete', $defaultIfEmpty);
779
        return $this->getBool($result);
780
    }
781
782
    /**
783
     * Returns if exceptions should be logged or not.
784
     *
785
     * plugin.tx_solr.logging.exceptions
786
     *
787
     * @param bool $defaultIfEmpty
788
     * @return bool
789
     */
790 4
    public function getLoggingExceptions($defaultIfEmpty = true)
791
    {
792 4
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.logging.exceptions', $defaultIfEmpty);
793 4
        return $this->getBool($result);
794
    }
795
796
    /**
797
     * Returns if indexing operations should be logged or not.
798
     *
799
     * plugin.tx_solr.logging.indexing
800
     *
801
     * @param bool $defaultIfEmpty
802
     * @return bool
803
     */
804 23
    public function getLoggingIndexing($defaultIfEmpty = false)
805
    {
806 23
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.logging.indexing', $defaultIfEmpty);
807 23
        return $this->getBool($result);
808
    }
809
810
    /**
811
     * Returns if indexing queue operations should be logged or not.
812
     *
813
     * plugin.tx_solr.logging.indexing.queue
814
     *
815
     * @param bool $defaultIfEmpty
816
     * @return bool
817
     */
818 22
    public function getLoggingIndexingQueue($defaultIfEmpty = false)
819
    {
820 22
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.logging.indexing.queue', $defaultIfEmpty);
821 22
        return $this->getBool($result);
822
    }
823
824
    /**
825
     * This method can be used to check if the logging during indexing should be done.
826
     * It takes the specific configuration by indexQueueConfiguration into account or is using the
827
     * fallback when the logging is enabled on queue or indexing level.
828
     *
829
     * plugin.tx_solr.logging.indexing.queue.<indexQueueConfiguration>
830
     *
831
     * @param string $indexQueueConfiguration
832
     * @param bool $defaultIfEmpty
833
     * @return bool
834
     */
835 23
    public function getLoggingIndexingQueueOperationsByConfigurationNameWithFallBack($indexQueueConfiguration, $defaultIfEmpty = false)
836
    {
837
        // when logging is globally enabled we do not need to check the specific configuration
838 23
        if ($this->getLoggingIndexing()) {
839 1
            return true;
840
        }
841
842
        // when the logging for indexing is enabled on queue level we also do not need to check the specific configuration
843 22
        if ($this->getLoggingIndexingQueue()) {
844
            return true;
845
        }
846
847 22
        $path = 'plugin.tx_solr.logging.indexing.queue.' . $indexQueueConfiguration;
848 22
        $result = $this->getValueByPathOrDefaultValue($path, $defaultIfEmpty);
849 22
        return $this->getBool($result);
850
    }
851
852
    /**
853
     * Returns if a log message should be written when a page was indexed.
854
     *
855
     * plugin.tx_solr.logging.indexing.pageIndexed
856
     *
857
     * @param bool $defaultIfEmpty
858
     * @return bool
859
     */
860 10
    public function getLoggingIndexingPageIndexed($defaultIfEmpty = false)
861
    {
862 10
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.logging.indexing.pageIndexed', $defaultIfEmpty);
863 10
        return $this->getBool($result);
864
    }
865
866
    /**
867
     * Returns if a log message should be written when the TYPO3 search markers are missing in the page.
868
     *
869
     * plugin.tx_solr.logging.indexing.missingTypo3SearchMarkers
870
     *
871
     * @param bool $defaultIfEmpty
872
     * @return bool
873
     */
874 17
    public function getLoggingIndexingMissingTypo3SearchMarkers($defaultIfEmpty = true)
875
    {
876 17
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.logging.indexing.missingTypo3SearchMarkers', $defaultIfEmpty);
877 17
        return $this->getBool($result);
878
    }
879
880
    /**
881
     * Returns if the initialization of an indexqueue should be logged.
882
     *
883
     * plugin.tx_solr.logging.indexing.indexQueueInitialization
884
     *
885
     * @param bool $defaultIfEmpty
886
     * @return bool
887
     */
888 12
    public function getLoggingIndexingIndexQueueInitialization($defaultIfEmpty = false)
889
    {
890 12
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.logging.indexing.indexQueueInitialization', $defaultIfEmpty);
891 12
        return $this->getBool($result);
892
    }
893
894
    /**
895
     * Indicates if the debug mode is enabled or not.
896
     *
897
     * plugin.tx_solr.enableDebugMode
898
     *
899
     * @param bool $defaultIfEmpty
900
     * @return bool
901
     */
902 39
    public function getEnabledDebugMode($defaultIfEmpty = false)
903
    {
904 39
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.enableDebugMode', $defaultIfEmpty);
905 39
        return $this->getBool($result);
906
    }
907
908
    /**
909
     * Returns true or false if something is configured below plugin.tx_solr.solr.
910
     *
911
     * plugin.tx_solr.solr.
912
     *
913
     * @param boolean $defaultIfEmpty
914
     * @return boolean
915
     */
916 3
    public function getSolrHasConnectionConfiguration($defaultIfEmpty = false)
917
    {
918 3
        $configuration = $this->getObjectByPathOrDefault('plugin.tx_solr.solr.', []);
919 3
        return $configuration !== [] ? true : $defaultIfEmpty;
920
    }
921
922
    /**
923
     * Returns the defaultTimeout used for requests to the Solr server
924
     *
925
     * plugin.tx_solr.solr.timeout
926
     *
927
     * @param int $defaultIfEmpty
928
     * @return int
929
     */
930 3
    public function getSolrTimeout($defaultIfEmpty = 0, $scope = 'read')
931
    {
932 3
        $scopePath = 'plugin.tx_solr.solr.' . $scope . '.timeout';
933 3
        $fallbackPath = 'plugin.tx_solr.solr.timeout';
934 3
        $result = (int)$this->getValueByPathOrDefaultValue($scopePath, -1);
935 3
        if($result !== -1) {
936
            return $result;
937
        }
938
939 3
        return (int)$this->getValueByPathOrDefaultValue($fallbackPath, $defaultIfEmpty);
940
    }
941
942
    /**
943
     * Returns the scheme used for requests to the Solr server
944
     *
945
     * plugin.tx_solr.solr.scheme
946
     *
947
     * Applies stdWrap on the configured setting
948
     *
949
     * @param string $defaultIfEmpty
950
     * @param string $scope read or write, read by default
951
     * @return string
952
     */
953 3
    public function getSolrScheme($defaultIfEmpty = 'http', $scope = 'read')
954
    {
955 3
        $scopePath = 'plugin.tx_solr.solr.' . $scope . '.scheme';
956 3
        $fallbackPath = 'plugin.tx_solr.solr.scheme';
957
958 3
        return $this->getValueByPathWithFallbackOrDefaultValueAndApplyStdWrap($scopePath, $fallbackPath, $defaultIfEmpty);
959
    }
960
961
    /**
962
     * Returns the hostname used for requests to the Solr server
963
     *
964
     * plugin.tx_solr.solr.host
965
     *
966
     * Applies stdWrap on the configured setting
967
     *
968
     * @param string $defaultIfEmpty
969
     * @param string $scope read or write, read by default
970
     * @return string
971
     */
972 6
    public function getSolrHost($defaultIfEmpty = 'localhost', $scope = 'read')
973
    {
974 6
        $scopePath = 'plugin.tx_solr.solr.' . $scope . '.host';
975 6
        $fallbackPath = 'plugin.tx_solr.solr.host';
976
977 6
        return $this->getValueByPathWithFallbackOrDefaultValueAndApplyStdWrap($scopePath, $fallbackPath, $defaultIfEmpty);
978
    }
979
980
    /**
981
     * Returns the port used for requests to the Solr server
982
     *
983
     * plugin.tx_solr.solr.port
984
     *
985
     * Applies stdWrap on the configured setting
986
     *
987
     * @param int $defaultIfEmpty
988
     * @param string $scope read or write, read by default
989
     * @return int
990
     */
991 3
    public function getSolrPort($defaultIfEmpty = 8983, $scope = 'read')
992
    {
993 3
        $scopePath = 'plugin.tx_solr.solr.' . $scope . '.port';
994 3
        $fallbackPath = 'plugin.tx_solr.solr.port';
995
996 3
        return (int)$this->getValueByPathWithFallbackOrDefaultValueAndApplyStdWrap($scopePath, $fallbackPath, $defaultIfEmpty);
997
    }
998
999
    /**
1000
     * Returns the path used for requests to the Solr server
1001
     *
1002
     * plugin.tx_solr.solr.path
1003
     *
1004
     * Applies stdWrap on the configured setting
1005
     *
1006
     * @param string $defaultIfEmpty
1007
     * @param string $scope read or write, read by default
1008
     * @return string
1009
     */
1010 6
    public function getSolrPath($defaultIfEmpty = '/solr/core_en/', $scope = 'read')
1011
    {
1012 6
        $scopePath = 'plugin.tx_solr.solr.' . $scope . '.path';
1013 6
        $fallbackPath = 'plugin.tx_solr.solr.path';
1014
1015 6
        $solrPath =  $this->getValueByPathWithFallbackOrDefaultValueAndApplyStdWrap($scopePath, $fallbackPath, $defaultIfEmpty);
1016
1017 6
        $solrPath = trim($solrPath, '/');
1018 6
        $solrPath = '/' . $solrPath . '/';
1019
1020 6
        return $solrPath;
1021
    }
1022
1023
    /**
1024
     * Returns the username used for requests to the Solr server
1025
     *
1026
     * plugin.tx_solr.solr.username
1027
     *
1028
     * Applies stdWrap on the configured setting
1029
     *
1030
     * @param string $defaultIfEmpty
1031
     * @param string $scope read or write, read by default
1032
     * @return string
1033
     */
1034 3
    public function getSolrUsername($defaultIfEmpty = '', $scope = 'read')
1035
    {
1036 3
        $scopePath = 'plugin.tx_solr.solr.' . $scope . '.username';
1037 3
        $fallbackPath = 'plugin.tx_solr.solr.username';
1038
1039 3
        return $this->getValueByPathWithFallbackOrDefaultValueAndApplyStdWrap($scopePath, $fallbackPath, $defaultIfEmpty);
1040
    }
1041
1042
    /**
1043
     * Returns the password used for requests to the Solr server
1044
     *
1045
     * plugin.tx_solr.solr.password
1046
     *
1047
     * Applies stdWrap on the configured setting
1048
     *
1049
     * @param string $defaultIfEmpty
1050
     * @param string $scope read or write, read by default
1051
     * @return string
1052
     */
1053 3
    public function getSolrPassword($defaultIfEmpty = '', $scope = 'read')
1054
    {
1055 3
        $scopePath = 'plugin.tx_solr.solr.' . $scope . '.password';
1056 3
        $fallbackPath = 'plugin.tx_solr.solr.password';
1057
1058 3
        return $this->getValueByPathWithFallbackOrDefaultValueAndApplyStdWrap($scopePath, $fallbackPath, $defaultIfEmpty);
1059
    }
1060
1061
    /**
1062
     * @param $path
1063
     * @param $fallbackPath
1064
     * @param $defaultIfBothIsEmpty
1065
     * @return mixed
1066
     */
1067 6
    public function getValueByPathWithFallbackOrDefaultValueAndApplyStdWrap($path, $fallbackPath, $defaultIfBothIsEmpty)
1068
    {
1069 6
        $result = (string)$this->getValueByPathOrDefaultValue($path, '');
1070 6
        if($result !== '') {
1071
            return $this->renderContentElementOfConfigured($path, $result);
1072
        }
1073
1074 6
        $result = (string)$this->getValueByPathOrDefaultValue($fallbackPath, $defaultIfBothIsEmpty);
1075 6
        return $this->renderContentElementOfConfigured($fallbackPath, $result);
1076
    }
1077
1078
    /**
1079
     * Retrieves the complete search configuration
1080
     *
1081
     * plugin.tx_solr.search.
1082
     *
1083
     * @param array $defaultIfEmpty
1084
     * @return array
1085
     */
1086 52
    public function getSearchConfiguration(array $defaultIfEmpty = [])
1087
    {
1088 52
        $result = $this->getObjectByPathOrDefault('plugin.tx_solr.search.', $defaultIfEmpty);
1089 52
        return $result;
1090
    }
1091
1092
    /**
1093
     * Indicates if elevation should be used or not
1094
     *
1095
     * plugin.tx_solr.search.elevation
1096
     *
1097
     * @param bool $defaultIfEmpty
1098
     * @return bool
1099
     */
1100 39
    public function getSearchElevation($defaultIfEmpty = false)
1101
    {
1102 39
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.elevation', $defaultIfEmpty);
1103 39
        return $this->getBool($result);
1104
    }
1105
1106
    /**
1107
     * Indicates if elevated results should be marked
1108
     *
1109
     * plugin.tx_solr.search.elevation.markElevatedResults
1110
     *
1111
     * @param bool $defaultIfEmpty
1112
     * @return bool
1113
     */
1114 34
    public function getSearchElevationMarkElevatedResults($defaultIfEmpty = true)
1115
    {
1116 34
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.elevation.markElevatedResults', $defaultIfEmpty);
1117 34
        return $this->getBool($result);
1118
    }
1119
1120
    /**
1121
     * Indicates if elevation should be forced
1122
     *
1123
     *plugin.tx_solr.search.elevation.forceElevation
1124
     *
1125
     * @param bool $defaultIfEmpty
1126
     * @return bool
1127
     */
1128 34
    public function getSearchElevationForceElevation($defaultIfEmpty = true)
1129
    {
1130 34
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.elevation.forceElevation', $defaultIfEmpty);
1131 34
        return $this->getBool($result);
1132
    }
1133
1134
    /**
1135
     * Indicates if collapsing on a certain field should be used to build variants or not.
1136
     *
1137
     * plugin.tx_solr.search.variants
1138
     *
1139
     * @param bool $defaultIfEmpty
1140
     * @return bool
1141
     */
1142 120
    public function getSearchVariants($defaultIfEmpty = false)
1143
    {
1144 120
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.variants', $defaultIfEmpty);
1145 120
        return $this->getBool($result);
1146
    }
1147
1148
    /**
1149
     * Indicates if collapsing on a certain field should be used or not
1150
     *
1151
     * plugin.tx_solr.search.variants.variantField
1152
     *
1153
     * @param string $defaultIfEmpty
1154
     * @return string
1155
     */
1156 5
    public function getSearchVariantsField($defaultIfEmpty = 'variantId')
1157
    {
1158 5
        return $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.variants.variantField', $defaultIfEmpty);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->getValueBy...ield', $defaultIfEmpty) also could return the type array which is incompatible with the documented return type string.
Loading history...
1159
    }
1160
1161
    /**
1162
     * Indicates if expanding of collapsed items it activated.
1163
     *
1164
     * plugin.tx_solr.search.variants.expand
1165
     *
1166
     * @param bool $defaultIfEmpty
1167
     * @return bool
1168
     */
1169 5
    public function getSearchVariantsExpand($defaultIfEmpty = false)
1170
    {
1171 5
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.variants.expand', $defaultIfEmpty);
1172 5
        return $this->getBool($result);
1173
    }
1174
1175
    /**
1176
     * Retrieves the number of elements that should be expanded.
1177
     *
1178
     * plugin.tx_solr.search.variants.limit
1179
     *
1180
     * @param int $defaultIfEmpty
1181
     * @return int
1182
     */
1183 5
    public function getSearchVariantsLimit($defaultIfEmpty = 10)
1184
    {
1185 5
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.variants.limit', $defaultIfEmpty);
1186 5
        return (int)$result;
1187
    }
1188
1189
    /**
1190
     * Indicates if frequent searches should be show or not.
1191
     *
1192
     * plugin.tx_solr.search.frequentSearches
1193
     *
1194
     * @param bool $defaultIfEmpty
1195
     * @return bool
1196
     */
1197 31
    public function getSearchFrequentSearches($defaultIfEmpty = false)
1198
    {
1199 31
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.frequentSearches', $defaultIfEmpty);
1200 31
        return $this->getBool($result);
1201
    }
1202
1203
    /**
1204
     * Returns the sub configuration of the frequentSearches
1205
     *
1206
     * plugin.tx_solr.search.frequentSearches.
1207
     *
1208
     * @param array $defaultIfEmpty
1209
     * @return array
1210
     */
1211 34
    public function getSearchFrequentSearchesConfiguration($defaultIfEmpty = [])
1212
    {
1213 34
        $result = $this->getObjectByPathOrDefault('plugin.tx_solr.search.frequentSearches.', $defaultIfEmpty);
1214 34
        return $result;
1215
    }
1216
1217
    /**
1218
     * Retrieves the minimum font size that should be used for the frequentSearches.
1219
     *
1220
     * plugin.tx_solr.search.frequentSearches.minSize
1221
     *
1222
     * @param int $defaultIfEmpty
1223
     * @return int
1224
     */
1225 34
    public function getSearchFrequentSearchesMinSize($defaultIfEmpty = 14)
1226
    {
1227 34
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.frequentSearches.minSize', $defaultIfEmpty);
1228 34
        return (int)$result;
1229
    }
1230
1231
    /**
1232
     * Retrieves the maximum font size that should be used for the frequentSearches.
1233
     *
1234
     * plugin.tx_solr.search.frequentSearches.minSize
1235
     *
1236
     * @param int $defaultIfEmpty
1237
     * @return int
1238
     */
1239 34
    public function getSearchFrequentSearchesMaxSize($defaultIfEmpty = 32)
1240
    {
1241 34
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.frequentSearches.maxSize', $defaultIfEmpty);
1242 34
        return (int)$result;
1243
    }
1244
1245
    /**
1246
     * Indicates if frequent searches should be show or not.
1247
     *
1248
     * plugin.tx_solr.search.frequentSearches.useLowercaseKeywords
1249
     *
1250
     * @param bool $defaultIfEmpty
1251
     * @return bool
1252
     */
1253 33
    public function getSearchFrequentSearchesUseLowercaseKeywords($defaultIfEmpty = false)
1254
    {
1255 33
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.frequentSearches.useLowercaseKeywords', $defaultIfEmpty);
1256 33
        return $this->getBool($result);
1257
    }
1258
1259
    /**
1260
     * Returns the configuration if the search should be initialized with an empty query.
1261
     *
1262
     * plugin.tx_solr.search.initializeWithEmptyQuery
1263
     *
1264
     * @param bool $defaultIfEmpty
1265
     * @return bool
1266
     */
1267 122
    public function getSearchInitializeWithEmptyQuery($defaultIfEmpty = false)
1268
    {
1269 122
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.initializeWithEmptyQuery', $defaultIfEmpty);
1270 122
        return $this->getBool($result);
1271
    }
1272
1273
    /**
1274
     * Returns the configured initial query
1275
     *
1276
     * plugin.tx_solr.search.initializeWithQuery
1277
     *
1278
     * @param string $defaultIfEmpty
1279
     * @return string
1280
     */
1281 122
    public function getSearchInitializeWithQuery($defaultIfEmpty = '')
1282
    {
1283 122
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.initializeWithQuery', $defaultIfEmpty);
1284 122
        return (string)$result;
1285
    }
1286
1287
    /**
1288
     * Returns if the last searches should be displayed or not.
1289
     *
1290
     * plugin.tx_solr.search.lastSearches
1291
     *
1292
     * @param bool $defaultIfEmpty
1293
     * @return bool
1294
     */
1295 31
    public function getSearchLastSearches($defaultIfEmpty = false)
1296
    {
1297 31
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.lastSearches', $defaultIfEmpty);
1298 31
        return $this->getBool($result);
1299
    }
1300
1301
    /**
1302
     * Returns the lastSearch mode. "user" for user specific
1303
     *
1304
     * plugin.tx_solr.search.lastSearches.mode
1305
     *
1306
     * @param string $defaultIfEmpty
1307
     * @return string
1308
     */
1309 35
    public function getSearchLastSearchesMode($defaultIfEmpty = 'user')
1310
    {
1311 35
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.lastSearches.mode', $defaultIfEmpty);
1312 35
        return (string)$result;
1313
    }
1314
1315
    /**
1316
     * Returns the lastSearch limit
1317
     *
1318
     * plugin.tx_solr.search.lastSearches.limit
1319
     *
1320
     * @param int $defaultIfEmpty
1321
     * @return int
1322
     */
1323 35
    public function getSearchLastSearchesLimit($defaultIfEmpty = 10)
1324
    {
1325 35
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.lastSearches.limit', $defaultIfEmpty);
1326 35
        return (int)$result;
1327
    }
1328
1329
    /**
1330
     * Indicates if the results of an initial empty query should be shown or not.
1331
     *
1332
     * plugin.tx_solr.search.showResultsOfInitialEmptyQuery
1333
     *
1334
     * @param bool $defaultIfEmpty
1335
     * @return bool
1336
     */
1337 7
    public function getSearchShowResultsOfInitialEmptyQuery($defaultIfEmpty = false)
1338
    {
1339 7
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.showResultsOfInitialEmptyQuery', $defaultIfEmpty);
1340 7
        return $this->getBool($result);
1341
    }
1342
1343
    /**
1344
     * Indicates if the results of an initial search query should be shown.
1345
     *
1346
     * plugin.tx_solr.search.showResultsOfInitialQuery
1347
     *
1348
     * @param bool $defaultIfEmpty
1349
     * @return bool
1350
     */
1351 5
    public function getSearchShowResultsOfInitialQuery($defaultIfEmpty = false)
1352
    {
1353 5
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.showResultsOfInitialQuery', $defaultIfEmpty);
1354 5
        return $this->getBool($result);
1355
    }
1356
1357
    /**
1358
     * Indicates if sorting was enabled or not.
1359
     *
1360
     * plugin.tx_solr.search.sorting
1361
     *
1362
     * @param bool $defaultIfEmpty
1363
     * @return bool
1364
     */
1365 66
    public function getSearchSorting($defaultIfEmpty = false)
1366
    {
1367 66
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.sorting', $defaultIfEmpty);
1368 66
        return $this->getBool($result);
1369
    }
1370
1371
    /**
1372
     * Returns the sorting options configurations.
1373
     *
1374
     * plugin.tx_solr.search.sorting.options.
1375
     *
1376
     * @param array $defaultIfEmpty
1377
     * @return array
1378
     */
1379 35
    public function getSearchSortingOptionsConfiguration($defaultIfEmpty = [])
1380
    {
1381 35
        $result = $this->getObjectByPathOrDefault('plugin.tx_solr.search.sorting.options.', $defaultIfEmpty);
1382 35
        return $result;
1383
    }
1384
1385
    /**
1386
     * Retrieves the sorting default order for a sort option.
1387
     *
1388
     * plugin.tx_solr.search.sorting.options.<sortOptionName>.defaultOrder
1389
     *
1390
     * or
1391
     *
1392
     * plugin.tx_solr.search.sorting.defaultOrder
1393
     *
1394
     *
1395
     * @param string $sortOptionName
1396
     * @param string $defaultIfEmpty
1397
     * @return string
1398
     */
1399 38
    public function getSearchSortingDefaultOrderBySortOptionName($sortOptionName = '', $defaultIfEmpty = 'asc')
1400
    {
1401 38
        $sortOrderSpecificPath = 'plugin.tx_solr.search.sorting.options.' . $sortOptionName . '.defaultOrder';
1402 38
        $specificSortOrder = $this->getValueByPathOrDefaultValue($sortOrderSpecificPath, null);
1403
1404
        // if we have a concrete setting, use it
1405 38
        if ($specificSortOrder !== null) {
1406 2
            return mb_strtolower($specificSortOrder);
0 ignored issues
show
Bug introduced by
$specificSortOrder of type array is incompatible with the type string expected by parameter $str of mb_strtolower(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1406
            return mb_strtolower(/** @scrutinizer ignore-type */ $specificSortOrder);
Loading history...
1407
        }
1408
1409
        // no specific setting, check common setting
1410 36
        $commonPath = 'plugin.tx_solr.search.sorting.defaultOrder';
1411 36
        $commonATagParamOrDefaultValue = $this->getValueByPathOrDefaultValue($commonPath, $defaultIfEmpty);
1412 36
        return mb_strtolower($commonATagParamOrDefaultValue);
1413
    }
1414
1415
    /**
1416
     * Returns the trusted fields configured for the search that do not need to be escaped.
1417
     *
1418
     * @param array $defaultIfEmpty
1419
     * @return array
1420
     */
1421 42
    public function getSearchTrustedFieldsArray($defaultIfEmpty = ['url'])
1422
    {
1423 42
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.trustedFields', '');
1424
1425 42
        if (trim($result) === '') {
0 ignored issues
show
Bug introduced by
It seems like $result can also be of type array; however, parameter $str of trim() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1425
        if (trim(/** @scrutinizer ignore-type */ $result) === '') {
Loading history...
1426 3
            return $defaultIfEmpty;
1427
        }
1428
1429 39
        return GeneralUtility::trimExplode(',', $result);
0 ignored issues
show
Bug introduced by
It seems like $result can also be of type array; however, parameter $string of TYPO3\CMS\Core\Utility\G...lUtility::trimExplode() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1429
        return GeneralUtility::trimExplode(',', /** @scrutinizer ignore-type */ $result);
Loading history...
1430
    }
1431
1432
    /**
1433
     * Indicates if the plugin arguments should be kept in the search form for a second submission.
1434
     *
1435
     * plugin.tx_solr.search.keepExistingParametersForNewSearches
1436
     *
1437
     * @param bool $defaultIfEmpty
1438
     * @return bool
1439
     */
1440
    public function getSearchKeepExistingParametersForNewSearches($defaultIfEmpty = false)
1441
    {
1442
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.keepExistingParametersForNewSearches', $defaultIfEmpty);
1443
        return $this->getBool($result);
1444
    }
1445
1446
    /**
1447
     * Returns if an empty query is allowed on the query level.
1448
     *
1449
     * plugin.tx_solr.search.query.allowEmptyQuery
1450
     *
1451
     * @param string $defaultIfEmpty
1452
     * @return bool
1453
     */
1454 117
    public function getSearchQueryAllowEmptyQuery($defaultIfEmpty = '')
1455
    {
1456 117
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.query.allowEmptyQuery', $defaultIfEmpty);
1457 117
        return $this->getBool($result);
1458
    }
1459
1460
    /**
1461
     * Returns the filter configuration array
1462
     *
1463
     * plugin.tx_solr.search.query.filter.
1464
     *
1465
     * @param array $defaultIfEmpty
1466
     * @return array
1467
     */
1468 130
    public function getSearchQueryFilterConfiguration(array $defaultIfEmpty = [])
1469
    {
1470 130
        $result = $this->getObjectByPathOrDefault('plugin.tx_solr.search.query.filter.', $defaultIfEmpty);
1471 130
        return $result;
1472
    }
1473
1474
    /**
1475
     * Can be used to overwrite the filterConfiguration.
1476
     *
1477
     * plugin.tx_solr.search.query.filter.
1478
     *
1479
     * @param array $configuration
1480
     */
1481 1
    public function setSearchQueryFilterConfiguration(array $configuration)
1482
    {
1483 1
        $this->configurationAccess->set('plugin.tx_solr.search.query.filter.', $configuration);
1484 1
    }
1485
1486
    /**
1487
     * Removes the pageSections filter setting.
1488
     *
1489
     * @return void
1490
     */
1491 3
    public function removeSearchQueryFilterForPageSections()
1492
    {
1493 3
        $this->configurationAccess->reset('plugin.tx_solr.search.query.filter.__pageSections');
1494 3
    }
1495
1496
    /**
1497
     * Returns the configured queryFields from TypoScript
1498
     *
1499
     * plugin.tx_solr.search.query.queryFields
1500
     *
1501
     * @param string $defaultIfEmpty
1502
     * @return string
1503
     */
1504 120
    public function getSearchQueryQueryFields($defaultIfEmpty = '')
1505
    {
1506 120
        return $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.query.queryFields', $defaultIfEmpty);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->getValueBy...elds', $defaultIfEmpty) also could return the type array which is incompatible with the documented return type string.
Loading history...
1507
    }
1508
1509
    /**
1510
     * This method is used to check if a phrase search is enabled or not
1511
     *
1512
     * plugin.tx_solr.search.query.phrase = 1
1513
     *
1514
     * @param bool $defaultIfEmpty
1515
     * @return bool
1516
     */
1517 120
    public function getPhraseSearchIsEnabled(bool $defaultIfEmpty = false)
1518
    {
1519 120
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.query.phrase', $defaultIfEmpty);
1520 120
        return $this->getBool($result);
1521
    }
1522
1523
    /**
1524
     * Returns the configured phrase fields from TypoScript
1525
     *
1526
     * plugin.tx_solr.search.query.phrase.fields
1527
     *
1528
     * @param string $defaultIfEmpty
1529
     * @return string
1530
     */
1531 2
    public function getSearchQueryPhraseFields(string $defaultIfEmpty = '')
1532
    {
1533 2
        return $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.query.phrase.fields', $defaultIfEmpty);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->getValueBy...elds', $defaultIfEmpty) also could return the type array which is incompatible with the documented return type string.
Loading history...
1534
    }
1535
1536
    /**
1537
     * This method is used to check if a bigram phrase search is enabled or not
1538
     *
1539
     * plugin.tx_solr.search.query.bigramPhrase = 1
1540
     *
1541
     * @param bool $defaultIfEmpty
1542
     * @return bool
1543
     */
1544 120
    public function getBigramPhraseSearchIsEnabled(bool $defaultIfEmpty = false)
1545
    {
1546 120
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.query.bigramPhrase', $defaultIfEmpty);
1547 120
        return $this->getBool($result);
1548
    }
1549
1550
    /**
1551
     * Returns the configured phrase fields from TypoScript
1552
     *
1553
     * plugin.tx_solr.search.query.bigramPhrase.fields
1554
     *
1555
     * @param string $defaultIfEmpty
1556
     * @return string
1557
     */
1558 2
    public function getSearchQueryBigramPhraseFields(string $defaultIfEmpty = '')
1559
    {
1560 2
        return $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.query.bigramPhrase.fields', $defaultIfEmpty);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->getValueBy...elds', $defaultIfEmpty) also could return the type array which is incompatible with the documented return type string.
Loading history...
1561
    }
1562
1563
    /**
1564
     * This method is used to check if a trigram phrase search is enabled or not
1565
     *
1566
     * plugin.tx_solr.search.query.trigramPhrase = 1
1567
     *
1568
     * @param bool $defaultIfEmpty
1569
     * @return bool
1570
     */
1571 120
    public function getTrigramPhraseSearchIsEnabled(bool $defaultIfEmpty = false)
1572
    {
1573 120
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.query.trigramPhrase', $defaultIfEmpty);
1574 120
        return $this->getBool($result);
1575
    }
1576
1577
    /**
1578
     * Returns the configured trigram phrase fields from TypoScript
1579
     *
1580
     * plugin.tx_solr.search.query.trigramPhrase.fields
1581
     *
1582
     * @param string $defaultIfEmpty
1583
     * @return string
1584
     */
1585 2
    public function getSearchQueryTrigramPhraseFields(string $defaultIfEmpty = '')
1586
    {
1587 2
        return $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.query.trigramPhrase.fields', $defaultIfEmpty);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->getValueBy...elds', $defaultIfEmpty) also could return the type array which is incompatible with the documented return type string.
Loading history...
1588
    }
1589
1590
    /**
1591
     * Returns the configured returnFields as array.
1592
     *
1593
     * plugin.tx_solr.search.query.returnFields
1594
     *
1595
     * @param array $defaultIfEmpty
1596
     * @return array
1597
     */
1598 122
    public function getSearchQueryReturnFieldsAsArray($defaultIfEmpty = [])
1599
    {
1600 122
        $returnFields = $this->getValueByPath('plugin.tx_solr.search.query.returnFields');
1601 122
        if (is_null($returnFields)) {
1602 82
            return $defaultIfEmpty;
1603
        }
1604
1605 40
        return GeneralUtility::trimExplode(',', $returnFields);
0 ignored issues
show
Bug introduced by
$returnFields of type array is incompatible with the type string expected by parameter $string of TYPO3\CMS\Core\Utility\G...lUtility::trimExplode(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1605
        return GeneralUtility::trimExplode(',', /** @scrutinizer ignore-type */ $returnFields);
Loading history...
1606
    }
1607
1608
    /**
1609
     * Returns the configured target page for the search.
1610
     * By default the contextPageId will be used
1611
     *
1612
     * plugin.tx_solr.search.targetPage
1613
     *
1614
     * @return int
1615
     */
1616 37
    public function getSearchTargetPage()
1617
    {
1618 37
        $targetPage = (int)$this->getValueByPathOrDefaultValue('plugin.tx_solr.search.targetPage', 0);
1619 37
        if ($targetPage === 0) {
1620
            // when no specific page was configured we use the contextPageId (which is usual $GLOBALS['TSFE']->id)
1621 37
            $targetPage = $this->contextPageId;
1622
        }
1623
1624 37
        return $targetPage;
1625
    }
1626
1627
    /**
1628
     * Retrieves the targetPage configuration.
1629
     *
1630
     * plugin.tx_solr.search.targetPage.
1631
     *
1632
     * @param array $defaultIfEmpty
1633
     * @return array
1634
     */
1635
    public function getSearchTargetPageConfiguration(array $defaultIfEmpty = [])
1636
    {
1637
        $result = $this->getObjectByPathOrDefault('plugin.tx_solr.search.targetPage.', $defaultIfEmpty);
1638
        return $result;
1639
    }
1640
1641
    /**
1642
     * Method to check if the site highlighting is enabled. When the siteHighlighting is enabled the
1643
     * sword_list parameter is added to the results link.
1644
     *
1645
     * plugin.tx_solr.searcb.results.siteHighlighting
1646
     *
1647
     * @param bool $defaultIfEmpty
1648
     * @return bool
1649
     */
1650 27
    public function getSearchResultsSiteHighlighting($defaultIfEmpty = true)
1651
    {
1652 27
        $isSiteHightlightingEnabled = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.results.siteHighlighting', $defaultIfEmpty);
1653 27
        return $this->getBool($isSiteHightlightingEnabled);
1654
    }
1655
1656
1657
    /**
1658
     * Can be used to check if the highlighting is enabled
1659
     *
1660
     * plugin.tx_solr.search.results.resultsHighlighting
1661
     *
1662
     * @param boolean $defaultIfEmpty
1663
     * @return boolean
1664
     */
1665 120
    public function getSearchResultsHighlighting($defaultIfEmpty = false)
1666
    {
1667 120
        $isHighlightingEnabled = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.results.resultsHighlighting', $defaultIfEmpty);
1668 120
        return $this->getBool($isHighlightingEnabled);
1669
    }
1670
1671
    /**
1672
     * Returns the result highlighting fields.
1673
     *
1674
     * plugin.tx_solr.search.results.resultsHighlighting.highlightFields
1675
     *
1676
     * @param string $defaultIfEmpty
1677
     * @return string
1678
     */
1679 42
    public function getSearchResultsHighlightingFields($defaultIfEmpty = '')
1680
    {
1681 42
        return $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.results.resultsHighlighting.highlightFields', $defaultIfEmpty);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->getValueBy...elds', $defaultIfEmpty) also could return the type array which is incompatible with the documented return type string.
Loading history...
1682
    }
1683
1684
    /**
1685
     * Returns the result highlighting fields as array.
1686
     *
1687
     * plugin.tx_solr.search.results.resultsHighlighting.highlightFields
1688
     *
1689
     * @param array $defaultIfEmpty
1690
     * @return array
1691
     */
1692
    public function getSearchResultsHighlightingFieldsAsArray($defaultIfEmpty = [])
1693
    {
1694
        $highlightingFields = $this->getSearchResultsHighlightingFields('');
1695
1696
        if ($highlightingFields === '') {
1697
            return $defaultIfEmpty;
1698
        }
1699
1700
        return GeneralUtility::trimExplode(',', $highlightingFields, true);
1701
    }
1702
1703
    /**
1704
     * Returns the fragmentSize for highlighted segments.
1705
     *
1706
     * plugin.tx_solr.search.results.resultsHighlighting.fragmentSize
1707
     *
1708
     * @param int $defaultIfEmpty
1709
     * @return int
1710
     */
1711 42
    public function getSearchResultsHighlightingFragmentSize($defaultIfEmpty = 200)
1712
    {
1713 42
        return (int)$this->getValueByPathOrDefaultValue('plugin.tx_solr.search.results.resultsHighlighting.fragmentSize', $defaultIfEmpty);
1714
    }
1715
1716
    /**
1717
     * Returns the fragmentSeparator for highlighted segments.
1718
     *
1719
     * plugin.tx_solr.search.results.resultsHighlighting.fragmentSeparator
1720
     *
1721
     * @param string $defaultIfEmpty
1722
     * @return string
1723
     */
1724 27
    public function getSearchResultsHighlightingFragmentSeparator($defaultIfEmpty = '[...]')
1725
    {
1726 27
        return $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.results.resultsHighlighting.fragmentSeparator', $defaultIfEmpty);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->getValueBy...ator', $defaultIfEmpty) also could return the type array which is incompatible with the documented return type string.
Loading history...
1727
    }
1728
1729
    /**
1730
     * Returns the number of results that should be shown per page.
1731
     *
1732
     * plugin.tx_solr.search.results.resultsPerPage
1733
     *
1734
     * @param int $defaultIfEmpty
1735
     * @return int
1736
     */
1737 36
    public function getSearchResultsPerPage($defaultIfEmpty = 10)
1738
    {
1739 36
        return (int)$this->getValueByPathOrDefaultValue('plugin.tx_solr.search.results.resultsPerPage', $defaultIfEmpty);
1740
    }
1741
1742
    /**
1743
     * Returns the available options for the per page switch.
1744
     *
1745
     * plugin.tx_solr.search.results.resultsPerPageSwitchOptions
1746
     *
1747
     * @param array $defaultIfEmpty
1748
     * @return array
1749
     */
1750 36
    public function getSearchResultsPerPageSwitchOptionsAsArray($defaultIfEmpty = [])
1751
    {
1752 36
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.results.resultsPerPageSwitchOptions', '');
1753
1754 36
        if (trim($result) === '') {
0 ignored issues
show
Bug introduced by
It seems like $result can also be of type array; however, parameter $str of trim() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1754
        if (trim(/** @scrutinizer ignore-type */ $result) === '') {
Loading history...
1755
            return $defaultIfEmpty;
1756
        }
1757
1758 36
        return GeneralUtility::intExplode(',', $result, true);
0 ignored issues
show
Bug introduced by
It seems like $result can also be of type array; however, parameter $string of TYPO3\CMS\Core\Utility\G...alUtility::intExplode() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1758
        return GeneralUtility::intExplode(',', /** @scrutinizer ignore-type */ $result, true);
Loading history...
1759
    }
1760
1761
    /**
1762
     * Returns the configured wrap for the resultHighlighting.
1763
     *
1764
     * plugin.tx_solr.search.results.resultsHighlighting.wrap
1765
     *
1766
     * @param string $defaultIfEmpty
1767
     * @return string
1768
     */
1769 42
    public function getSearchResultsHighlightingWrap($defaultIfEmpty = '')
1770
    {
1771 42
        return $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.results.resultsHighlighting.wrap', $defaultIfEmpty);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->getValueBy...wrap', $defaultIfEmpty) also could return the type array which is incompatible with the documented return type string.
Loading history...
1772
    }
1773
1774
    /**
1775
     * Indicates if spellchecking is enabled or not.
1776
     *
1777
     * plugin.tx_solr.search.spellchecking
1778
     *
1779
     * @param bool $defaultIfEmpty
1780
     * @return bool
1781
     */
1782 35
    public function getSearchSpellchecking($defaultIfEmpty = false)
1783
    {
1784 35
        $isFacetingEnabled = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.spellchecking', $defaultIfEmpty);
1785 35
        return $this->getBool($isFacetingEnabled);
1786
    }
1787
1788
    /**
1789
     * Returns the numberOfSuggestionsToTry that should be used for the spellchecking.
1790
     *
1791
     * plugin.tx_solr.search.spellchecking.numberOfSuggestionsToTry
1792
     *
1793
     * @param int $defaultIfEmpty
1794
     * @return int
1795
     */
1796 35
    public function getSearchSpellcheckingNumberOfSuggestionsToTry($defaultIfEmpty = 1)
1797
    {
1798 35
        return (int)$this->getValueByPathOrDefaultValue('plugin.tx_solr.search.spellchecking.numberOfSuggestionsToTry', $defaultIfEmpty);
1799
    }
1800
1801
    /**
1802
     * Indicates if a second search should be fired from the spellchecking suggestion if no results could be found.
1803
     *
1804
     * plugin.tx_solr.search.spellchecking.searchUsingSpellCheckerSuggestion
1805
     *
1806
     * @param bool $defaultIfEmpty
1807
     * @return bool
1808
     */
1809 38
    public function getSearchSpellcheckingSearchUsingSpellCheckerSuggestion($defaultIfEmpty = false)
1810
    {
1811 38
        $result = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.spellchecking.searchUsingSpellCheckerSuggestion', $defaultIfEmpty);
1812 38
        return $this->getBool($result);
1813
    }
1814
1815
    /**
1816
     * Indicates if faceting is enabled or not.
1817
     *
1818
     * plugin.tx_solr.search.faceting
1819
     *
1820
     * @param bool $defaultIfEmpty
1821
     * @return bool
1822
     */
1823 120
    public function getSearchFaceting($defaultIfEmpty = false)
1824
    {
1825 120
        $isFacetingEnabled = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.faceting', $defaultIfEmpty);
1826 120
        return $this->getBool($isFacetingEnabled);
1827
    }
1828
1829
    /**
1830
     * Retrieves the showEvenWhenEmpty for a facet by facet name. If nothing specific is configured
1831
     * the global showEmptyFacets with be returned.
1832
     *
1833
     * plugin.tx_solr.search.faceting.facets.<facetName>.showEvenWhenEmpty
1834
     *
1835
     * or
1836
     *
1837
     * plugin.tx_solr.search.faceting.showEmptyFacets
1838
     *
1839
     *
1840
     * @param string $facetName
1841
     * @param bool $defaultIfEmpty
1842
     * @return bool
1843
     */
1844 71
    public function getSearchFacetingShowEmptyFacetsByName($facetName = '', $defaultIfEmpty = false)
1845
    {
1846 71
        $facetSpecificPath = 'plugin.tx_solr.search.faceting.facets.' . $facetName . '.showEvenWhenEmpty';
1847 71
        $specificShowWhenEmpty = $this->getValueByPathOrDefaultValue($facetSpecificPath, null);
1848
1849
        // if we have a concrete setting, use it
1850 71
        if ($specificShowWhenEmpty !== null) {
1851 2
            return $specificShowWhenEmpty;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $specificShowWhenEmpty returns the type array which is incompatible with the documented return type boolean.
Loading history...
1852
        }
1853
1854
        // no specific setting, check common setting
1855 71
        $commonPath = 'plugin.tx_solr.search.faceting.showEmptyFacets';
1856 71
        $commonIfEmptyOrDefaultValue = $this->getValueByPathOrDefaultValue($commonPath, $defaultIfEmpty);
1857 71
        return $commonIfEmptyOrDefaultValue;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $commonIfEmptyOrDefaultValue also could return the type array which is incompatible with the documented return type boolean.
Loading history...
1858
    }
1859
1860
    /**
1861
     * Returns the wrap for the faceting show all link
1862
     *
1863
     * plugin.tx_solr.search.faceting.showAllLink.wrap
1864
     *
1865
     * @param string $defaultIfEmpty
1866
     * @return string
1867
     */
1868
    public function getSearchFacetingShowAllLinkWrap($defaultIfEmpty = '')
1869
    {
1870
        return (string)$this->getValueByPathOrDefaultValue('plugin.tx_solr.search.faceting.showAllLink.wrap', $defaultIfEmpty);
1871
    }
1872
1873
    /**
1874
     * Returns the link url parameters that should be added to a facet.
1875
     *
1876
     * plugin.tx_solr.search.faceting.facetLinkUrlParameters
1877
     *
1878
     * @param string $defaultIfEmpty
1879
     * @return string
1880
     */
1881 30
    public function getSearchFacetingFacetLinkUrlParameters($defaultIfEmpty = '')
1882
    {
1883 30
        $linkUrlParameters = trim($this->getValueByPathOrDefaultValue('plugin.tx_solr.search.faceting.facetLinkUrlParameters', $defaultIfEmpty));
0 ignored issues
show
Bug introduced by
It seems like $this->getValueByPathOrD...ters', $defaultIfEmpty) can also be of type array; however, parameter $str of trim() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1883
        $linkUrlParameters = trim(/** @scrutinizer ignore-type */ $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.faceting.facetLinkUrlParameters', $defaultIfEmpty));
Loading history...
1884
1885 30
        return $linkUrlParameters;
1886
    }
1887
1888
    /**
1889
     * Returns if the facetLinkUrlsParameters should be included in the reset link.
1890
     *
1891
     * plugin.tx_solr.search.faceting.facetLinkUrlParameters.useForFacetResetLinkUrl
1892
     *
1893
     * @param bool $defaultIfEmpty
1894
     * @return bool
1895
     */
1896 4
    public function getSearchFacetingFacetLinkUrlParametersUseForFacetResetLinkUrl($defaultIfEmpty = true)
1897
    {
1898 4
        $useForFacetResetLinkUrl = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.faceting.facetLinkUrlParameters.useForFacetResetLinkUrl', $defaultIfEmpty);
1899 4
        return $this->getBool($useForFacetResetLinkUrl);
1900
    }
1901
1902
    /**
1903
     * Returns the link url parameters that should be added to a facet as array.
1904
     *
1905
     * plugin.tx_solr.search.faceting.facetLinkUrlParameters
1906
     *
1907
     * @param array $defaultIfEmpty
1908
     * @return array
1909
     */
1910 30
    public function getSearchFacetingFacetLinkUrlParametersAsArray($defaultIfEmpty = [])
1911
    {
1912 30
        $linkUrlParameters = $this->getSearchFacetingFacetLinkUrlParameters();
1913 30
        if ($linkUrlParameters === '') {
1914
            return $defaultIfEmpty;
1915
        }
1916
1917 30
        return GeneralUtility::explodeUrl2Array($linkUrlParameters);
1918
    }
1919
1920
    /**
1921
     * Return the configured minimumCount value for facets.
1922
     *
1923
     * plugin.tx_solr.search.faceting.minimumCount
1924
     *
1925
     * @param int $defaultIfEmpty
1926
     * @return int
1927
     */
1928 46
    public function getSearchFacetingMinimumCount($defaultIfEmpty = 1)
1929
    {
1930 46
        return (int)$this->getValueByPathOrDefaultValue('plugin.tx_solr.search.faceting.minimumCount', $defaultIfEmpty);
1931
    }
1932
1933
    /**
1934
     * Return the configured limit value for facets, used for displaying.
1935
     *
1936
     * plugin.tx_solr.search.faceting.limit
1937
     *
1938
     * @param int $defaultIfEmpty
1939
     * @return int
1940
     */
1941
    public function getSearchFacetingLimit($defaultIfEmpty = 10)
1942
    {
1943
        return (int)$this->getValueByPathOrDefaultValue('plugin.tx_solr.search.faceting.limit', $defaultIfEmpty);
1944
    }
1945
1946
    /**
1947
     * Return the configured limit value for facets, used for the response.
1948
     *
1949
     * plugin.tx_solr.search.faceting.facetLimit
1950
     *
1951
     * @param int $defaultIfEmpty
1952
     * @return int
1953
     */
1954 46
    public function getSearchFacetingFacetLimit($defaultIfEmpty = 100)
1955
    {
1956 46
        return (int)$this->getValueByPathOrDefaultValue('plugin.tx_solr.search.faceting.facetLimit', $defaultIfEmpty);
1957
    }
1958
1959
    /**
1960
     * Return the configured faceting sortBy value.
1961
     *
1962
     * plugin.tx_solr.search.faceting.sortBy
1963
     *
1964
     * @param string $defaultIfEmpty
1965
     * @return string
1966
     */
1967
    public function getSearchFacetingSortBy($defaultIfEmpty = '')
1968
    {
1969
        return $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.faceting.sortBy', $defaultIfEmpty);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->getValueBy...rtBy', $defaultIfEmpty) also could return the type array which is incompatible with the documented return type string.
Loading history...
1970
    }
1971
1972
    /**
1973
     * Returns if a facets should be kept on selection. Global faceting setting
1974
     * can also be configured on facet level by using
1975
     * (plugin.tx_solr.search.faceting.facets.<fieldName>.keepAllOptionsOnSelection)
1976
     *
1977
     * plugin.tx_solr.search.faceting.keepAllFacetsOnSelection
1978
     *
1979
     * @param bool $defaultIfEmpty
1980
     * @return bool
1981 46
     */
1982
    public function getSearchFacetingKeepAllFacetsOnSelection($defaultIfEmpty = false)
1983 46
    {
1984
        $keepAllOptionsOnSelection = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.faceting.keepAllFacetsOnSelection', $defaultIfEmpty);
1985
        return $this->getBool($keepAllOptionsOnSelection);
1986
    }
1987
1988
    /**
1989
     * Returns if the facet count should be calculated based on the facet selection when
1990
     * plugin.tx_solr.search.faceting.keepAllFacetsOnSelection has been enabled
1991
     *
1992
     * plugin.tx_solr.search.faceting.countAllFacetsForSelection
1993
     *
1994
     * @param bool $defaultIfEmpty
1995
     * @return bool
1996 46
     */
1997
    public function getSearchFacetingCountAllFacetsForSelection($defaultIfEmpty = false)
1998 46
    {
1999 46
        $countAllFacetsForSelection = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.faceting.countAllFacetsForSelection', $defaultIfEmpty);
2000
        return $this->getBool($countAllFacetsForSelection);
2001
    }
2002
2003
    /**
2004
     * Returns the configured faceting configuration.
2005
     *
2006
     * plugin.tx_solr.search.faceting.facets
2007
     *
2008
     * @param array $defaultIfEmpty
2009
     * @return array
2010
     */
2011 2
    public function getSearchFacetingFacets(array $defaultIfEmpty = [])
2012
    {
2013 2
        return $this->getObjectByPathOrDefault('plugin.tx_solr.search.faceting.facets.', $defaultIfEmpty);
2014 2
    }
2015
2016
    /**
2017
     * Returns the configuration of a single facet by facet name.
2018
     *
2019
     * plugin.tx_solr.search.faceting.facets.<facetName>
2020
     *
2021
     * @param string $facetName
2022
     * @param array $defaultIfEmpty
2023
     * @return array
2024
     */
2025 73
    public function getSearchFacetingFacetByName($facetName, $defaultIfEmpty = [])
2026
    {
2027 73
        return $this->getObjectByPathOrDefault('plugin.tx_solr.search.faceting.facets.' . $facetName . '.', $defaultIfEmpty);
2028
    }
2029
2030
    /**
2031
     * Indicates if statistics is enabled or not.
2032
     *
2033
     * plugin.tx_solr.statistics
2034
     *
2035
     * @param bool $defaultIfEmpty
2036
     * @return bool
2037
     */
2038
    public function getStatistics($defaultIfEmpty = false)
2039 46
    {
2040
        $isStatisticsEnabled = $this->getValueByPathOrDefaultValue('plugin.tx_solr.statistics', $defaultIfEmpty);
2041 46
        return $this->getBool($isStatisticsEnabled);
2042
    }
2043
2044
    /**
2045
     * Indicates to which length an ip should be anonymized in the statistics
2046
     *
2047
     * plugin.tx_solr.statistics.anonymizeIP
2048
     *
2049
     * @param int $defaultIfEmpty
2050
     * @return int
2051
     */
2052 40
    public function getStatisticsAnonymizeIP($defaultIfEmpty = 0)
2053
    {
2054 40
        $anonymizeToLength = $this->getValueByPathOrDefaultValue('plugin.tx_solr.statistics.anonymizeIP', $defaultIfEmpty);
2055 40
        return (int)$anonymizeToLength;
2056
    }
2057
2058
    /**
2059
     * Indicates if additional debug Data should be added to the statistics
2060
     *
2061
     * plugin.tx_solr.statistics.addDebugData
2062
     *
2063
     * @param bool $defaultIfEmpty
2064
     * @return bool
2065
     */
2066 29
    public function getStatisticsAddDebugData($defaultIfEmpty = false)
2067
    {
2068 29
        $statisticsAddDebugDataEnabled = $this->getValueByPathOrDefaultValue('plugin.tx_solr.statistics.addDebugData', $defaultIfEmpty);
2069 29
        return $this->getBool($statisticsAddDebugDataEnabled);
2070
    }
2071
2072
    /**
2073
     * Indicates if suggestion is enabled or not.
2074
     *
2075
     * plugin.tx_solr.suggest
2076
     *
2077
     * @param bool $defaultIfEmpty
2078
     * @return bool
2079
     */
2080 35
    public function getSuggest($defaultIfEmpty = false)
2081
    {
2082 35
        $isSuggestionEnabled = $this->getValueByPathOrDefaultValue('plugin.tx_solr.suggest', $defaultIfEmpty);
2083 35
        return $this->getBool($isSuggestionEnabled);
2084
    }
2085
2086
    /**
2087
     * Indicates if https should be used for the suggest form.
2088
     *
2089
     * plugin.tx_solr.suggest.forceHttps
2090
     *
2091
     * @param bool $defaultIfEmpty
2092
     * @return bool
2093
     */
2094
    public function getSuggestForceHttps($defaultIfEmpty = false)
2095
    {
2096
        $isHttpsForced = $this->getValueByPathOrDefaultValue('plugin.tx_solr.suggest.forceHttps', $defaultIfEmpty);
2097
        return $this->getBool($isHttpsForced);
2098
    }
2099
2100
    /**
2101
     * Returns the allowed number of suggestions.
2102
     *
2103
     * plugin.tx_solr.suggest.numberOfSuggestions
2104
     *
2105
     * @param int $defaultIfEmpty
2106
     * @return int
2107
     */
2108
    public function getSuggestNumberOfSuggestions($defaultIfEmpty = 10)
2109
    {
2110
        $numberOfSuggestions = $this->getValueByPathOrDefaultValue('plugin.tx_solr.suggest.numberOfSuggestions', $defaultIfEmpty);
2111
        return (int)$numberOfSuggestions;
2112
    }
2113
2114
    /**
2115
     * Indicates if the topResults should be shown or not
2116
     *
2117
     * plugin.tx_solr.suggest.showTopResults
2118
     *
2119
     * @param bool $defaultIfEmpty
2120
     * @return bool
2121
     */
2122 1
    public function getSuggestShowTopResults($defaultIfEmpty = true)
2123
    {
2124 1
        $showTopResults = $this->getValueByPathOrDefaultValue('plugin.tx_solr.suggest.showTopResults', $defaultIfEmpty);
2125 1
        return $this->getBool($showTopResults);
2126
    }
2127
2128
    /**
2129
     * Returns the configured number of top results to show
2130
     *
2131
     * plugin.tx_solr.suggest.numberOfTopResults
2132
     *
2133
     * @param int $defaultIfEmpty
2134
     * @return int
2135
     */
2136 1
    public function getSuggestNumberOfTopResults($defaultIfEmpty = 5)
2137
    {
2138 1
        $numberOfTopResults = $this->getValueByPathOrDefaultValue('plugin.tx_solr.suggest.numberOfTopResults', $defaultIfEmpty);
2139 1
        return (int)$numberOfTopResults;
2140
    }
2141
2142
    /**
2143
     * Returns additional fields for the top results
2144
     *
2145
     * plugin.tx_solr.suggest.additionalTopResultsFields
2146
     *
2147
     * @param array $defaultIfEmpty
2148
     * @return array
2149
     */
2150 1
    public function getSuggestAdditionalTopResultsFields($defaultIfEmpty = [])
2151
    {
2152 1
        $additionalTopResultsFields = $this->getValueByPathOrDefaultValue('plugin.tx_solr.suggest.additionalTopResultsFields', '');
2153 1
        if ($additionalTopResultsFields === '') {
2154
            return $defaultIfEmpty;
2155
        }
2156
2157
        return GeneralUtility::trimExplode(',', $additionalTopResultsFields, true);
0 ignored issues
show
Bug introduced by
It seems like $additionalTopResultsFields can also be of type array; however, parameter $string of TYPO3\CMS\Core\Utility\G...lUtility::trimExplode() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

2157
        return GeneralUtility::trimExplode(',', /** @scrutinizer ignore-type */ $additionalTopResultsFields, true);
Loading history...
2158
    }
2159
2160
    /**
2161
     * Returns the configured template for a specific template fileKey.
2162
     *
2163
     * plugin.tx_solr.view.templateFiles.<fileKey>
2164 1
     *
2165
     * @param string $fileKey
2166 1
     * @param string $defaultIfEmpty
2167 1
     * @return string
2168 1
     */
2169
    public function getViewTemplateByFileKey($fileKey, $defaultIfEmpty = '')
2170
    {
2171
        $templateFileName = $this->getValueByPathOrDefaultValue('plugin.tx_solr.view.templateFiles.' . $fileKey, $defaultIfEmpty);
2172
        return (string)$templateFileName;
2173
    }
2174
2175
    /**
2176
     * Returns the configured available template files for the flexform.
2177
     *
2178
     * plugin.tx_solr.view.templateFiles.[fileKey].availableTemplates.
2179
     *
2180
     * @param string $fileKey
2181
     * @return array
2182
     */
2183 42
    public function getAvailableTemplatesByFileKey($fileKey)
2184
    {
2185 42
        $path = 'plugin.tx_solr.view.templateFiles.' . $fileKey . '.availableTemplates.';
2186 42
        return (array)$this->getObjectByPathOrDefault($path, []);
2187
    }
2188
2189
    /**
2190
     * Returns the configuration of the crop view helper.
2191
     *
2192
     * plugin.tx_solr.viewHelpers.crop.
2193
     *
2194
     * @param array $defaultIfEmpty
2195
     * @return array
2196
     */
2197
    public function getViewHelpersCropConfiguration(array $defaultIfEmpty = [])
2198
    {
2199
        $cropViewHelperConfiguration = $this->getObjectByPathOrDefault('plugin.tx_solr.viewHelpers.crop.', $defaultIfEmpty);
2200
        return $cropViewHelperConfiguration;
2201
    }
2202
2203
    /**
2204
     * Returns the configuration of the sorting view helper.
2205
     *
2206
     * plugin.tx_solr.viewHelpers.sortIndicator.
2207
     *
2208
     * @param array $defaultIfEmpty
2209
     * @return array
2210
     */
2211
    public function getViewHelpersSortIndicatorConfiguration(array $defaultIfEmpty = [])
2212
    {
2213
        $sortingViewHelperConfiguration = $this->getObjectByPathOrDefault('plugin.tx_solr.viewHelpers.sortIndicator.', $defaultIfEmpty);
2214
        return $sortingViewHelperConfiguration;
2215
    }
2216
2217
    /**
2218
     * Controls whether ext-solr will send commits to solr.
2219
     * Beware: If you disable this, you need to ensure
2220
     * that some other mechanism will commit your changes
2221
     * otherwise they will never be searchable.
2222
     * A good way to achieve this is enabling the solr
2223
     * daemons autoCommit feature.
2224
     *
2225
     * plugin.tx_solr.index.enableCommits
2226
     *
2227
     * @param bool $defaultIfEmpty
2228
     * @return bool
2229
     */
2230
    public function getEnableCommits($defaultIfEmpty = true)
2231
    {
2232
        $enableCommits = $this->getValueByPathOrDefaultValue('plugin.tx_solr.index.enableCommits', $defaultIfEmpty);
2233
        return $this->getBool($enableCommits);
2234
    }
2235
2236
    /**
2237
     * Returns the url namespace that is used for the arguments.
2238
     *
2239
     * plugin.tx_solr.view.pluginNamespace
2240
     *
2241
     * @param string $defaultIfEmpty
2242
     * @return string
2243
     */
2244 16
    public function getSearchPluginNamespace($defaultIfEmpty = 'tx_solr')
2245
    {
2246 16
        return $this->getValueByPathOrDefaultValue('plugin.tx_solr.view.pluginNamespace', $defaultIfEmpty);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->getValueBy...pace', $defaultIfEmpty) also could return the type array which is incompatible with the documented return type string.
Loading history...
2247 16
    }
2248
2249
    /**
2250
     * Returns true if the global url parameter q, that indicates the query should be used.
2251
     *
2252
     * Should be set to false, when multiple instance on the same page should have their querystring.
2253
     *
2254
     * plugin.tx_solr.search.ignoreGlobalQParameter
2255
     *
2256
     * @param bool $defaultIfEmpty
2257
     * @return bool
2258 44
     */
2259
    public function getSearchIgnoreGlobalQParameter($defaultIfEmpty = false)
2260 44
    {
2261
        $enableQParameter = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.ignoreGlobalQParameter', $defaultIfEmpty);
2262
        return $this->getBool($enableQParameter);
2263
2264
    }
2265
2266
    /**
2267
     * Returns the argument names, that should be added to the persistent arguments, as array.
2268
     *
2269
     * plugin.tx_solr.search.additionalPersistentArgumentNames
2270
     *
2271
     * @param array $defaultIfEmpty
2272
     * @return array
2273 30
     */
2274
    public function getSearchAdditionalPersistentArgumentNames($defaultIfEmpty = [])
2275 30
    {
2276 30
        $additionalPersistentArgumentNames = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.additionalPersistentArgumentNames', '');
2277
2278
        if ($additionalPersistentArgumentNames === '') {
2279
            return $defaultIfEmpty;
2280
        }
2281
2282
        return GeneralUtility::trimExplode(',', $additionalPersistentArgumentNames, true);
0 ignored issues
show
Bug introduced by
It seems like $additionalPersistentArgumentNames can also be of type array; however, parameter $string of TYPO3\CMS\Core\Utility\G...lUtility::trimExplode() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

2282
        return GeneralUtility::trimExplode(',', /** @scrutinizer ignore-type */ $additionalPersistentArgumentNames, true);
Loading history...
2283
2284
    }
2285
2286
    /**
2287
     * Method to check if grouping was enabled with typoscript.
2288 44
     *
2289
     * plugin.tx_solr.search.grouping
2290 44
     *
2291
     * @param bool $defaultIfEmpty
2292 44
     * @return bool
2293 43
     */
2294
    public function getSearchGrouping($defaultIfEmpty = false)
2295
    {
2296 1
        $groupingEnabled = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.grouping', $defaultIfEmpty);
2297
        return $this->getBool($groupingEnabled);
2298
    }
2299
2300
    /**
2301
     * Returns the configured numberOfGroups.
2302
     *
2303
     * plugin.tx_solr.search.grouping.numberOfGroups
2304
     *
2305
     * @param int $defaultIfEmpty
2306
     * @return int
2307
     */
2308 122
    public function getSearchGroupingNumberOfGroups($defaultIfEmpty = 5)
2309
    {
2310 122
        return (int)$this->getValueByPathOrDefaultValue('plugin.tx_solr.search.grouping.numberOfGroups', $defaultIfEmpty);
2311 122
    }
2312
2313
    /**
2314
     * Returns the sortBy configuration for the grouping.
2315
     *
2316
     * plugin.tx_solr.search.grouping.sortBy
2317
     *
2318
     * @param string $defaultIfEmpty
2319
     * @return string
2320
     */
2321
    public function getSearchGroupingSortBy($defaultIfEmpty = '')
2322 1
    {
2323
        return (string)$this->getValueByPathOrDefaultValue('plugin.tx_solr.search.grouping.sortBy', $defaultIfEmpty);
2324 1
    }
2325
2326
    /**
2327
     * Returns the highestValue of the numberOfResultsPerGroup configuration that is globally configured and
2328
     * for each group.
2329
     *
2330
     * plugin.tx_solr.search.grouping.
2331
     *
2332
     * @param int $defaultIfEmpty
2333
     * @return int
2334
     */
2335 1
    public function getSearchGroupingHighestGroupResultsLimit($defaultIfEmpty = 1)
2336
    {
2337 1
        $groupingConfiguration = $this->getObjectByPathOrDefault('plugin.tx_solr.search.grouping.', []);
2338
        $highestLimit = $defaultIfEmpty;
2339
        if (!empty($groupingConfiguration['numberOfResultsPerGroup'])) {
2340
            $highestLimit = $groupingConfiguration['numberOfResultsPerGroup'];
2341
        }
2342
2343
        $configuredGroups = $groupingConfiguration['groups.'];
2344
        if (!is_array($configuredGroups)) {
2345
            return $highestLimit;
2346
        }
2347
2348
        foreach ($configuredGroups as $groupName => $groupConfiguration) {
2349 3
            if (!empty($groupConfiguration['numberOfResultsPerGroup']) && $groupConfiguration['numberOfResultsPerGroup'] > $highestLimit) {
2350
                $highestLimit = $groupConfiguration['numberOfResultsPerGroup'];
2351 3
            }
2352 3
        }
2353 3
2354 2
        return $highestLimit;
2355
    }
2356
2357 3
    /**
2358 3
     * Returns the valid numberOfResultsPerGroup value for a group.
2359 1
     *
2360
     * Returns:
2361
     *
2362 2
     * plugin.tx_solr.search.grouping.groups.<groupName>.numberOfResultsPerGroup if it is set otherwise
2363 2
     * plugin.tx_solr.search.grouping.numberOfResultsPerGroup
2364 2
     *
2365
     * @param string $groupName
2366
     * @param int $defaultIfEmpty
2367
     * @return int
2368 2
     */
2369
    public function getSearchGroupingResultLimit($groupName, $defaultIfEmpty = 1)
2370
    {
2371
        $specificPath = 'plugin.tx_solr.search.grouping.groups.' . $groupName . 'numberOfResultsPerGroup';
2372
        $specificResultsPerGroup = $this->getValueByPathOrDefaultValue($specificPath, null);
2373
2374
        if ($specificResultsPerGroup !== null) {
2375
            return (int) $specificResultsPerGroup;
2376
        }
2377
2378
        $commonPath = 'plugin.tx_solr.search.grouping.numberOfResultsPerGroup';
2379
        $commonValue = $this->getValueByPathOrDefaultValue($commonPath, null);
2380
        if ($commonValue !== null) {
2381
            return (int) $commonValue;
2382
        }
2383
2384
        return $defaultIfEmpty;
2385
    }
2386
2387
    /**
2388
     * Returns everything that is configured for the groups (plugin.tx_solr.search.grouping.groups.)
2389
     *
2390
     * plugin.tx_solr.search.grouping.groups.
2391
     *
2392
     * @param array $defaultIfEmpty
2393
     * @return array
2394
     */
2395
    public function getSearchGroupingGroupsConfiguration($defaultIfEmpty = [])
2396
    {
2397
        return $this->getObjectByPathOrDefault('plugin.tx_solr.search.grouping.groups.', $defaultIfEmpty);
2398
    }
2399
2400
    /*
2401
     * Applies the stdWrap if it is configured for the path, otherwise the unprocessed value will be returned.
2402
     *
2403
     * @param string $valuePath
2404
     * @param mixed $value
2405
     * @return mixed
2406
     */
2407
    protected function renderContentElementOfConfigured($valuePath, $value)
2408
    {
2409 1
        $configurationPath = $valuePath . '.';
2410
        $configuration = $this->getObjectByPath($configurationPath);
2411 1
2412
        if ($configuration == null) {
2413
            return $value;
2414
        }
2415
2416
        return $this->contentObjectService->renderSingleContentObject($value, $configuration);
2417
    }
2418
}
2419