Completed
Push — master ( d39d8c...23993f )
by Radosław
01:45
created

Field::setValueAutodetect()   B

Complexity

Conditions 5
Paths 5

Size

Total Lines 14
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 14
rs 8.8571
c 0
b 0
f 0
cc 5
eloc 11
nc 5
nop 1
1
<?php
2
3
namespace Radowoj\Yaah;
4
5
class Field
6
{
7
    const VALUE_IMAGE = 'fvalueImage';
8
9
    /**
10
     * Allegro WebAPI fid
11
     * @var integer
12
     */
13
    protected $fid = null;
14
15
    /**
16
     * String value of given field
17
     * @var string
18
     */
19
    protected $fvalueString = '';
20
21
    /**
22
     * Integer value of given field
23
     * @var integer
24
     */
25
    protected $fvalueInt = 0;
26
27
28
    /**
29
     * Float value of given field
30
     * @var float
31
     */
32
    protected $fvalueFloat = 0;
33
34
    /**
35
     * Image (image file content)
36
     * @var mixed
37
     */
38
    protected $fvalueImage = 0;
39
40
    /**
41
     * Unix time
42
     * @var float
43
     */
44
    protected $fvalueDatetime = 0;
45
46
    /**
47
     * Date (dd-mm-yyyy)
48
     * @var string
49
     */
50
    protected $fvalueDate = '';
51
52
    /**
53
     * Integer range
54
     * @var array
55
     */
56
    protected $fvalueRangeInt = [
57
        'fvalueRangeIntMin' => 0,
58
        'fvalueRangeIntMax' => 0,
59
    ];
60
61
    /**
62
     * Float range
63
     * @var array
64
     */
65
    protected $fvalueRangeFloat = [
66
        'fvalueRangeFloatMin' => 0,
67
        'fvalueRangeFloatMax' => 0,
68
    ];
69
70
    /**
71
     * Date range
72
     * @var array
73
     */
74
    protected $fvalueRangeDate = [
75
        'fvalueRangeDateMin' => '',
76
        'fvalueRangeDateMax' => '',
77
    ];
78
79
    /**
80
     * @param integer $fid WebAPI fid for given field
81
     * @param mixed $value value for given field
82
     * @param string $forceValueType value type to force (i.e. fvalueImage)
83
     */
84
    public function __construct($fid, $value = null, $forceValueType = '')
85
    {
86
        $this->fid = $fid;
87
88
        //if value type was specified (useful for fvalueImage, fvalueDatetime etc.)
89
        if ($forceValueType) {
90
            $this->setValueForced($forceValueType, $value);
91
            return;
92
        }
93
94
        //if no forced value type is given, autodetect it
95
        $this->setValueAutodetect($value);
96
    }
97
98
99
    protected function setValueAutodetect($value)
100
    {
101
        if (is_integer($value)) {
102
            $this->fvalueInt = $value;
103
        } elseif (is_float($value)) {
104
            $this->fvalueFloat = $value;
105
        } elseif (is_string($value)) {
106
            $this->setValueStringAutodetect($value);
107
        } elseif (is_array($value)) {
108
            $this->setValueRangeAutodetect($value);
109
        } else {
110
            throw new Exception('Not supported value type: ' . gettype($value) . "; fid={$fid}");
111
        }
112
    }
113
114
115
    /**
116
     * Detect type of string value (date or normal string)
117
     * @param string $value value to detect type
118
     */
119
    protected function setValueStringAutodetect($value)
120
    {
121
        if (preg_match('/^\d{2}\-\d{2}\-\d{4}$/', $value)) {
122
            $this->fvalueDate = $value;
123
        } else {
124
            $this->fvalueString = $value;
125
        }
126
    }
127
128
    /**
129
     * Detect type of range passed as argument (int, float, date)
130
     * @param array $value value to detect type
131
     */
132
    protected function setValueRangeAutodetect(array $value)
133
    {
134
        if (count($value) !== 2) {
135
            throw new Exception('Range array must have exactly 2 elements');
136
        }
137
    }
138
139
140
    protected function setValueForced($forceValueType, $value)
141
    {
142
        if (!property_exists($this, $forceValueType)) {
143
            throw new Exception("Class " . get_class($this) . " does not have property: {$forceValueType}");
144
        }
145
146
        $this->{$forceValueType} = $value;
147
    }
148
149
    /**
150
     * Returns WebAPI representation of Field
151
     * @return array field
152
     */
153
    public function toArray()
154
    {
155
        return [
156
            'fid' => $this->fid,
157
            'fvalueString' => $this->fvalueString,
158
            'fvalueInt' => $this->fvalueInt,
159
            'fvalueFloat' => $this->fvalueFloat,
160
            'fvalueImage' => $this->fvalueImage,
161
            'fvalueDatetime' => $this->fvalueDatetime,
162
            'fvalueDate' => $this->fvalueDate,
163
            'fvalueRangeInt' => $this->fvalueRangeInt,
164
            'fvalueRangeFloat' => $this->fvalueRangeFloat,
165
            'fvalueRangeDate' => $this->fvalueRangeDate,
166
        ];
167
    }
168
169
170
}
171