Passed
Push — master ( ae3f68...4bca36 )
by Timo
24:00
created

getValueByPathWithFallbackOrDefaultValueAndApplyStdWrap()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2.0185

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 9
ccs 5
cts 6
cp 0.8333
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 3
crap 2.0185
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 321
    public function __construct(array $configuration, $contextPageId = 0, ContentObjectService $contentObjectService = null)
87
    {
88 321
        $this->configurationAccess = new ArrayAccessor($configuration, '.', true);
89 321
        $this->contextPageId = $contextPageId;
90 321
        $this->contentObjectService = $contentObjectService ?? GeneralUtility::makeInstance(ContentObjectService::class);
91 321
    }
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 311
    public function getValueByPath($path)
144
    {
145 311
        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 311
        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 308
    public function getValueByPathOrDefaultValue($path, $defaultValue)
161
    {
162 308
        $value = $this->getValueByPath($path);
163 308
        if (is_null($value)) {
164 298
            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 21
    public function mergeSolrConfiguration(array $configurationToMerge, $addKeys = true, $includeEmptyValues = true, $enableUnsetFeature = true)
252
    {
253 21
        $data = $this->configurationAccess->getData();
254 21
        ArrayUtility::mergeRecursiveWithOverrule(
255 21
            $data['plugin.']['tx_solr.'],
256 21
            $configurationToMerge,
257 21
            $addKeys,
258 21
            $includeEmptyValues,
259 21
            $enableUnsetFeature
260
        );
261
262 21
        $this->configurationAccess->setData($data);
263
264 21
        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);
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 string|array 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 70
    public function getSearchFacetingShowEmptyFacetsByName($facetName = '', $defaultIfEmpty = false)
1845
    {
1846 70
        $facetSpecificPath = 'plugin.tx_solr.search.faceting.facets.' . $facetName . '.showEvenWhenEmpty';
1847 70
        $specificShowWhenEmpty = $this->getValueByPathOrDefaultValue($facetSpecificPath, null);
1848
1849
        // if we have a concrete setting, use it
1850 70
        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 70
        $commonPath = 'plugin.tx_solr.search.faceting.showEmptyFacets';
1856 70
        $commonIfEmptyOrDefaultValue = $this->getValueByPathOrDefaultValue($commonPath, $defaultIfEmpty);
1857 70
        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
     * Returns if the singleFacetMode is active or not.
1961
     *
1962
     * plugin.tx_solr.search.faceting.singleFacetMode
1963
     *
1964
     * @param bool $defaultIfEmpty
1965
     * @return bool
1966
     */
1967
    public function getSearchFacetingSingleFacetMode($defaultIfEmpty = false)
1968
    {
1969
        $singleFacetMode = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.faceting.singleFacetMode', $defaultIfEmpty);
1970
        return $this->getBool($singleFacetMode);
1971
    }
1972
1973
    /**
1974
     * Return the configured faceting sortBy value.
1975
     *
1976
     * plugin.tx_solr.search.faceting.sortBy
1977
     *
1978
     * @param string $defaultIfEmpty
1979
     * @return string
1980
     */
1981 46
    public function getSearchFacetingSortBy($defaultIfEmpty = '')
1982
    {
1983 46
        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...
1984
    }
1985
1986
    /**
1987
     * Returns if a facets should be kept on selection. Global faceting setting
1988
     * can also be configured on facet level by using
1989
     * (plugin.tx_solr.search.faceting.facets.<fieldName>.keepAllOptionsOnSelection)
1990
     *
1991
     * plugin.tx_solr.search.faceting.keepAllFacetsOnSelection
1992
     *
1993
     * @param bool $defaultIfEmpty
1994
     * @return bool
1995
     */
1996 46
    public function getSearchFacetingKeepAllFacetsOnSelection($defaultIfEmpty = false)
1997
    {
1998 46
        $keepAllOptionsOnSelection = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.faceting.keepAllFacetsOnSelection', $defaultIfEmpty);
1999 46
        return $this->getBool($keepAllOptionsOnSelection);
2000
    }
2001
2002
    /**
2003
     * Returns if the facet count should be calculated based on the facet selection when
2004
     * plugin.tx_solr.search.faceting.keepAllFacetsOnSelection has been enabled
2005
     *
2006
     * plugin.tx_solr.search.faceting.countAllFacetsForSelection
2007
     *
2008
     * @param bool $defaultIfEmpty
2009
     * @return bool
2010
     */
2011 2
    public function getSearchFacetingCountAllFacetsForSelection($defaultIfEmpty = false)
2012
    {
2013 2
        $countAllFacetsForSelection = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.faceting.countAllFacetsForSelection', $defaultIfEmpty);
2014 2
        return $this->getBool($countAllFacetsForSelection);
2015
    }
2016
2017
    /**
2018
     * Returns the configured faceting configuration.
2019
     *
2020
     * plugin.tx_solr.search.faceting.facets
2021
     *
2022
     * @param array $defaultIfEmpty
2023
     * @return array
2024
     */
2025 73
    public function getSearchFacetingFacets(array $defaultIfEmpty = [])
2026
    {
2027 73
        return $this->getObjectByPathOrDefault('plugin.tx_solr.search.faceting.facets.', $defaultIfEmpty);
2028
    }
2029
2030
    /**
2031
     * Returns the configuration of a single facet by facet name.
2032
     *
2033
     * plugin.tx_solr.search.faceting.facets.<facetName>
2034
     *
2035
     * @param string $facetName
2036
     * @param array $defaultIfEmpty
2037
     * @return array
2038
     */
2039 46
    public function getSearchFacetingFacetByName($facetName, $defaultIfEmpty = [])
2040
    {
2041 46
        return $this->getObjectByPathOrDefault('plugin.tx_solr.search.faceting.facets.' . $facetName . '.', $defaultIfEmpty);
2042
    }
2043
2044
    /**
2045
     * Indicates if statistics is enabled or not.
2046
     *
2047
     * plugin.tx_solr.statistics
2048
     *
2049
     * @param bool $defaultIfEmpty
2050
     * @return bool
2051
     */
2052 40
    public function getStatistics($defaultIfEmpty = false)
2053
    {
2054 40
        $isStatisticsEnabled = $this->getValueByPathOrDefaultValue('plugin.tx_solr.statistics', $defaultIfEmpty);
2055 40
        return $this->getBool($isStatisticsEnabled);
2056
    }
2057
2058
    /**
2059
     * Indicates to which length an ip should be anonymized in the statistics
2060
     *
2061
     * plugin.tx_solr.statistics.anonymizeIP
2062
     *
2063
     * @param int $defaultIfEmpty
2064
     * @return int
2065
     */
2066 29
    public function getStatisticsAnonymizeIP($defaultIfEmpty = 0)
2067
    {
2068 29
        $anonymizeToLength = $this->getValueByPathOrDefaultValue('plugin.tx_solr.statistics.anonymizeIP', $defaultIfEmpty);
2069 29
        return (int)$anonymizeToLength;
2070
    }
2071
2072
    /**
2073
     * Indicates if additional debug Data should be added to the statistics
2074
     *
2075
     * plugin.tx_solr.statistics.addDebugData
2076
     *
2077
     * @param bool $defaultIfEmpty
2078
     * @return bool
2079
     */
2080 35
    public function getStatisticsAddDebugData($defaultIfEmpty = false)
2081
    {
2082 35
        $statisticsAddDebugDataEnabled = $this->getValueByPathOrDefaultValue('plugin.tx_solr.statistics.addDebugData', $defaultIfEmpty);
2083 35
        return $this->getBool($statisticsAddDebugDataEnabled);
2084
    }
2085
2086
    /**
2087
     * Indicates if suggestion is enabled or not.
2088
     *
2089
     * plugin.tx_solr.suggest
2090
     *
2091
     * @param bool $defaultIfEmpty
2092
     * @return bool
2093
     */
2094
    public function getSuggest($defaultIfEmpty = false)
2095
    {
2096
        $isSuggestionEnabled = $this->getValueByPathOrDefaultValue('plugin.tx_solr.suggest', $defaultIfEmpty);
2097
        return $this->getBool($isSuggestionEnabled);
2098
    }
2099
2100
    /**
2101
     * Indicates if https should be used for the suggest form.
2102
     *
2103
     * plugin.tx_solr.suggest.forceHttps
2104
     *
2105
     * @param bool $defaultIfEmpty
2106
     * @return bool
2107
     */
2108
    public function getSuggestForceHttps($defaultIfEmpty = false)
2109
    {
2110
        $isHttpsForced = $this->getValueByPathOrDefaultValue('plugin.tx_solr.suggest.forceHttps', $defaultIfEmpty);
2111
        return $this->getBool($isHttpsForced);
2112
    }
2113
2114
    /**
2115
     * Returns the allowed number of suggestions.
2116
     *
2117
     * plugin.tx_solr.suggest.numberOfSuggestions
2118
     *
2119
     * @param int $defaultIfEmpty
2120
     * @return int
2121
     */
2122 1
    public function getSuggestNumberOfSuggestions($defaultIfEmpty = 10)
2123
    {
2124 1
        $numberOfSuggestions = $this->getValueByPathOrDefaultValue('plugin.tx_solr.suggest.numberOfSuggestions', $defaultIfEmpty);
2125 1
        return (int)$numberOfSuggestions;
2126
    }
2127
2128
    /**
2129
     * Indicates if the topResults should be shown or not
2130
     *
2131
     * plugin.tx_solr.suggest.showTopResults
2132
     *
2133
     * @param bool $defaultIfEmpty
2134
     * @return bool
2135
     */
2136 1
    public function getSuggestShowTopResults($defaultIfEmpty = true)
2137
    {
2138 1
        $showTopResults = $this->getValueByPathOrDefaultValue('plugin.tx_solr.suggest.showTopResults', $defaultIfEmpty);
2139 1
        return $this->getBool($showTopResults);
2140
    }
2141
2142
    /**
2143
     * Returns the configured number of top results to show
2144
     *
2145
     * plugin.tx_solr.suggest.numberOfTopResults
2146
     *
2147
     * @param int $defaultIfEmpty
2148
     * @return int
2149
     */
2150 1
    public function getSuggestNumberOfTopResults($defaultIfEmpty = 5)
2151
    {
2152 1
        $numberOfTopResults = $this->getValueByPathOrDefaultValue('plugin.tx_solr.suggest.numberOfTopResults', $defaultIfEmpty);
2153 1
        return (int)$numberOfTopResults;
2154
    }
2155
2156
    /**
2157
     * Returns the configured template for a specific template fileKey.
2158
     *
2159
     * plugin.tx_solr.view.templateFiles.<fileKey>
2160
     *
2161
     * @param string $fileKey
2162
     * @param string $defaultIfEmpty
2163
     * @return string
2164
     */
2165 42
    public function getViewTemplateByFileKey($fileKey, $defaultIfEmpty = '')
2166
    {
2167 42
        $templateFileName = $this->getValueByPathOrDefaultValue('plugin.tx_solr.view.templateFiles.' . $fileKey, $defaultIfEmpty);
2168 42
        return (string)$templateFileName;
2169
    }
2170
2171
    /**
2172
     * Returns the configured available template files for the flexform.
2173
     *
2174
     * plugin.tx_solr.view.templateFiles.[fileKey].availableTemplates.
2175
     *
2176
     * @param string $fileKey
2177
     * @return array
2178
     */
2179
    public function getAvailableTemplatesByFileKey($fileKey)
2180
    {
2181
        $path = 'plugin.tx_solr.view.templateFiles.' . $fileKey . '.availableTemplates.';
2182
        return (array)$this->getObjectByPathOrDefault($path, []);
2183
    }
2184
2185
    /**
2186
     * Returns the configuration of the crop view helper.
2187
     *
2188
     * plugin.tx_solr.viewHelpers.crop.
2189
     *
2190
     * @param array $defaultIfEmpty
2191
     * @return array
2192
     */
2193
    public function getViewHelpersCropConfiguration(array $defaultIfEmpty = [])
2194
    {
2195
        $cropViewHelperConfiguration = $this->getObjectByPathOrDefault('plugin.tx_solr.viewHelpers.crop.', $defaultIfEmpty);
2196
        return $cropViewHelperConfiguration;
2197
    }
2198
2199
    /**
2200
     * Returns the configuration of the sorting view helper.
2201
     *
2202
     * plugin.tx_solr.viewHelpers.sortIndicator.
2203
     *
2204
     * @param array $defaultIfEmpty
2205
     * @return array
2206
     */
2207
    public function getViewHelpersSortIndicatorConfiguration(array $defaultIfEmpty = [])
2208
    {
2209
        $sortingViewHelperConfiguration = $this->getObjectByPathOrDefault('plugin.tx_solr.viewHelpers.sortIndicator.', $defaultIfEmpty);
2210
        return $sortingViewHelperConfiguration;
2211
    }
2212
2213
    /**
2214
     * Controls whether ext-solr will send commits to solr.
2215
     * Beware: If you disable this, you need to ensure
2216
     * that some other mechanism will commit your changes
2217
     * otherwise they will never be searchable.
2218
     * A good way to achieve this is enabling the solr
2219
     * daemons autoCommit feature.
2220
     *
2221
     * plugin.tx_solr.index.enableCommits
2222
     *
2223
     * @param bool $defaultIfEmpty
2224
     * @return bool
2225
     */
2226 16
    public function getEnableCommits($defaultIfEmpty = true)
2227
    {
2228 16
        $enableCommits = $this->getValueByPathOrDefaultValue('plugin.tx_solr.index.enableCommits', $defaultIfEmpty);
2229 16
        return $this->getBool($enableCommits);
2230
    }
2231
2232
    /**
2233
     * Returns the url namespace that is used for the arguments.
2234
     *
2235
     * plugin.tx_solr.view.pluginNamespace
2236
     *
2237
     * @param string $defaultIfEmpty
2238
     * @return string
2239
     */
2240 44
    public function getSearchPluginNamespace($defaultIfEmpty = 'tx_solr')
2241
    {
2242 44
        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...
2243
    }
2244
2245
    /**
2246
     * Returns true if the global url parameter q, that indicates the query should be used.
2247
     *
2248
     * Should be set to false, when multiple instance on the same page should have their querystring.
2249
     *
2250
     * plugin.tx_solr.search.ignoreGlobalQParameter
2251
     *
2252
     * @param bool $defaultIfEmpty
2253
     * @return bool
2254
     */
2255 30
    public function getSearchIgnoreGlobalQParameter($defaultIfEmpty = false)
2256
    {
2257 30
        $enableQParameter = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.ignoreGlobalQParameter', $defaultIfEmpty);
2258 30
        return $this->getBool($enableQParameter);
2259
2260
    }
2261
2262
    /**
2263
     * Returns the argument names, that should be added to the persistent arguments, as array.
2264
     *
2265
     * plugin.tx_solr.search.additionalPersistentArgumentNames
2266
     *
2267
     * @param array $defaultIfEmpty
2268
     * @return array
2269
     */
2270 44
    public function getSearchAdditionalPersistentArgumentNames($defaultIfEmpty = [])
2271
    {
2272 44
        $additionalPersistentArgumentNames = $this->getValueByPathOrDefaultValue('plugin.tx_solr.search.additionalPersistentArgumentNames', '');
2273
2274 44
        if ($additionalPersistentArgumentNames === '') {
2275 43
            return $defaultIfEmpty;
2276
        }
2277
2278 1
        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

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