summaryrefslogtreecommitdiff
path: root/vendor/ruflin/elastica/lib/Elastica/Param.php
blob: 38a45d14825d879c7de92be04cd011557f8a6f84 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
<?php

namespace Elastica;
use Elastica\Exception\InvalidException;

/**
 * Class to handle params
 *
 * This function can be used to handle params for queries, filter, facets
 *
 * @category Xodoa
 * @package Elastica
 * @author Nicolas Ruflin <spam@ruflin.com>
 */
class Param
{
    /**
     * Params
     *
     * @var array
     */
    protected $_params = array();

    /**
     * Raw Params
     *
     * @var array
     */
    protected $_rawParams = array();

    /**
     * Converts the params to an array. A default implementation exist to create
     * the an array out of the class name (last part of the class name)
     * and the params
     *
     * @return array Filter array
     */
    public function toArray()
    {
        $data = array($this->_getBaseName() => $this->getParams());

        if (!empty($this->_rawParams)) {
            $data = array_merge($data, $this->_rawParams);
        }

        return $data;
    }

    /**
     * Param's name
     * Picks the last part of the class name and makes it snake_case
     * You can override this method if you want to change the name
     *
     * @return string name
     */
    protected function _getBaseName()
    {
        return Util::getParamName($this);
    }

    /**
     * Sets params not inside params array
     *
     * @param  string         $key
     * @param  mixed          $value
     * @return \Elastica\Param
     */
    protected function _setRawParam($key, $value)
    {
        $this->_rawParams[$key] = $value;

        return $this;
    }

    /**
     * Sets (overwrites) the value at the given key
     *
     * @param  string         $key   Key to set
     * @param  mixed          $value Key Value
     * @return \Elastica\Param
     */
    public function setParam($key, $value)
    {
        $this->_params[$key] = $value;

        return $this;
    }

    /**
     * Sets (overwrites) all params of this object
     *
     * @param  array          $params Parameter list
     * @return \Elastica\Param
     */
    public function setParams(array $params)
    {
        $this->_params = $params;

        return $this;
    }

    /**
     * Adds a param to the list.
     *
     * This function can be used to add an array of params
     *
     * @param  string         $key   Param key
     * @param  mixed          $value Value to set
     * @return \Elastica\Param
     */
    public function addParam($key, $value)
    {
        if($key != null) {
            if (!isset($this->_params[$key])) {
                $this->_params[$key] = array();
            }

            $this->_params[$key][] = $value;
        } else {
            $this->_params = $value;            
        }

        return $this;
    }

    /**
     * Returns a specific param
     *
     * @param  string                              $key Key to return
     * @return mixed                               Key value
     * @throws \Elastica\Exception\InvalidException If requested key is not set
     */
    public function getParam($key)
    {
        if (!$this->hasParam($key)) {
            throw new InvalidException('Param ' . $key . ' does not exist');
        }

        return $this->_params[$key];
    }

    /**
     * Test if a param is set
     *
     * @param  string  $key Key to test
     * @return boolean True if the param is set, false otherwise
     */
    public function hasParam($key)
    {
        return isset($this->_params[$key]);
    }

    /**
     * Returns the params array
     *
     * @return array Params
     */
    public function getParams()
    {
        return $this->_params;
    }
}