Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
DefaultSortSuggestionsBuilder
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 3
72
0.00% covered (danger)
0.00%
0 / 1
 getRequiredFields
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 build
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
30
 addInputToFST
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace CirrusSearch\BuildDocument\Completion;
4
5/**
6 * Extra builder that appends the defaultsort value to suggest and suggest-stop
7 * inputs on title suggestions
8 */
9class DefaultSortSuggestionsBuilder implements ExtraSuggestionsBuilder {
10    private const FIELD = 'defaultsort';
11
12    /**
13     * @inheritDoc
14     */
15    public function getRequiredFields() {
16        return [ self::FIELD ];
17    }
18
19    /**
20     * @param mixed[] $inputDoc
21     * @param string $suggestType (title or redirect)
22     * @param int $score
23     * @param \Elastica\Document $suggestDoc suggestion type (title or redirect)
24     * @param int $targetNamespace
25     */
26    public function build( array $inputDoc, $suggestType, $score, \Elastica\Document $suggestDoc, $targetNamespace ) {
27        if ( $targetNamespace != $inputDoc['namespace'] ) {
28            // This is a cross namespace redirect, we don't
29            // add defaultsort for this one.
30            return;
31        }
32        if ( $suggestType === SuggestBuilder::TITLE_SUGGESTION && isset( $inputDoc[ self::FIELD ] ) ) {
33            $value = $inputDoc[self::FIELD];
34            if ( is_string( $value ) ) {
35                $this->addInputToFST( $value, 'suggest', $suggestDoc );
36                $this->addInputToFST( $value, 'suggest-stop', $suggestDoc );
37            }
38        }
39    }
40
41    /**
42     * @param string $input the new input
43     * @param string $fstField field name
44     * @param \Elastica\Document $suggestDoc
45     */
46    private function addInputToFST( $input, $fstField, $suggestDoc ) {
47        if ( $suggestDoc->has( $fstField ) ) {
48            $entryDef = $suggestDoc->get( $fstField );
49            $entryDef['input'][] = $input;
50            $suggestDoc->set( $fstField, $entryDef );
51        }
52    }
53}