AbstractResultWidget::getViewFilePath()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
/**
3
 *
4
 * @author Mihkel Viilveer <[email protected]>
5
 * @date 2.09.2014
6
 */
7
8
namespace opus\elastic\search;
9
10
use yii\base\InvalidValueException;
11
use yii\base\Model;
12
use yii\base\Widget;
13
use yii\helpers\ArrayHelper;
14
15
/**
16
 * Class AbstractResultWidget
17
 *
18
 * @author Mihkel Viilveer <[email protected]>
19
 * @package opus\elastic\search\hit
20
 */
21
abstract class AbstractResultWidget extends Widget
22
{
23
    /**
24
     * @var Model|null
25
     */
26
    public $source = null;
27
28
    /**
29
     * Result numerical identity, this is result number not source ID
30
     * @var int
31
     */
32
    public $resultId;
33
34
    /**
35
     * User search params
36
     * @var string
37
     */
38
    public $searchParams;
39
40
    /**
41
     * View path
42
     *
43
     * @var string
44
     */
45
    protected $viewPath = null;
46
47
    /**
48
     * Active record model where source is stored
49
     *
50
     * @return Model
51
     */
52
    abstract protected function getModel();
53
54
    /**
55
     * Returns source attribute
56
     *
57
     * @param string $attribute
58
     * @throws InvalidValueException
59
     * @return mixed
60
     */
61
    public function getAttribute($attribute)
62
    {
63
        if ($this->source->canGetProperty($attribute)) {
64
            return $this->source->$attribute;
65
        }
66
        throw new InvalidValueException('Unknown attribute: ' . $attribute);
67
    }
68
69
    /**
70
     * Generates source model and sets attributes into model
71
     *
72
     * @param array $source
73
     * @return $this
74
     */
75
    public function setSource(array $source)
76
    {
77
        $model = $this->getModel();
78
        $model->setAttributes($source, false);
79
        $this->source = $model;
80
        return $this;
81
    }
82
83
    /**
84
     * Overridden to set view file path
85
     *
86
     * @param string $view
87
     * @param array $params
88
     * @return string
89
     */
90
    public function render($view, $params = [])
91
    {
92
        $renderParams = ArrayHelper::merge(
93
            [
94
                'source' => $this->source,
95
                'resultId' => $this->resultId,
96
            ],
97
            $params
98
        );
99
        return parent::render($view, $renderParams);
100
    }
101
102
    /**
103
     * Sets template
104
     *
105
     * @param string $template
106
     * @return AbstractResultWidget
107
     */
108
    public function setTemplate($template)
109
    {
110
        $this->template = $template;
0 ignored issues
show
Documentation introduced by
The property template does not exist on object<opus\elastic\search\AbstractResultWidget>. Since you implemented __set, maybe consider adding a @property annotation.

Since your code implements the magic setter _set, this function will be called for any write access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

Since the property has write access only, you can use the @property-write annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
111
        return $this;
112
    }
113
114
    /**
115
     * Returns path alias
116
     *
117
     * @return string
118
     */
119
    public function getViewFilePath()
120
    {
121
        return sprintf('%s/%s', $this->viewPath, $this->id);
122
    }
123
124
    /**
125
     * @param string $viewPath
126
     * @return AbstractResultWidget
127
     */
128
    public function setViewPath($viewPath)
129
    {
130
        $this->viewPath = $viewPath;
131
        return $this;
132
    }
133
134
    /**
135
     * @param int $resultId
136
     * @return AbstractResultWidget
137
     */
138
    public function setResultId($resultId)
139
    {
140
        $this->resultId = $resultId;
141
        return $this;
142
    }
143
}
144