initial commit
[namibia] / module / Workspace / src / Workspace / UseCase / ConditionBase.php
1 <?php
2 namespace Workspace\UseCase;
3
4
5
6 /**
7  * Base condition set container.
8  * @author andre.fourie
9  */
10 abstract class ConditionBase
11 {
12
13         /**
14          * Usefull constants
15          */
16         const BASE_OR  = 'or';
17         const BASE_AND = 'and';
18
19         /**
20          * @var string
21          */
22         protected $base;
23         /**
24          * @var array
25          */
26         protected $conditionSet = array();
27
28
29
30         /**
31          * Retrieve condition set.
32          * @return array
33          */
34         public function getPrerequisites()
35         {
36                 return array(
37                                 'Operator' => $this->base,
38                                 'Conditions' => $this->conditionSet
39                 );
40         }
41
42         /**
43          * Add sub condition(s).
44          * @param \Workspace\UseCase\ConditionBase $condition
45          * @return \Workspace\UseCase\ConditionBase
46          */
47         public function addSubGroup(\Workspace\UseCase\ConditionBase $condition)
48         {
49                 $this->conditionSet[] = $condition->getPrerequisites();
50                 return $this;
51         }
52
53         /**
54          * Equals.
55          * @param string $input
56          * @param unknown $value
57          * @return \Workspace\UseCase\ConditionBase
58          */
59         public function equal($input, $value)
60         {
61                 return $this->addCondition('=', $input, $value);
62         }
63
64         /**
65          * Not equals.
66          * @param string $input
67          * @param unknown $value
68          * @return \Workspace\UseCase\ConditionBase
69          */
70         public function notEqual($input, $value)
71         {
72                 return $this->addCondition('!=', $input, $value);
73         }
74
75         /**
76          * Smaller than.
77          * @param string $input
78          * @param unknown $value
79          * @return \Workspace\UseCase\ConditionBase
80          */
81         public function smallerThan($input, $value)
82         {
83                 return $this->addCondition('<', $input, $value);
84         }
85
86         /**
87          * Greater than.
88          * @param string $input
89          * @param unknown $value
90          * @return \Workspace\UseCase\ConditionBase
91          */
92         public function greaterThan($input, $value)
93         {
94                 return $this->addCondition('>', $input, $value);
95         }
96
97         /**
98          * Is one of the specified values.
99          * @param string $input
100          * @param array $value
101          * @return \Workspace\UseCase\ConditionBase
102          */
103         public function oneOf($input, array $value)
104         {
105                 return $this->addCondition('IN', $input, $value);
106         }
107
108         /**
109          * Not one of the specified values.
110          * @param string $input
111          * @param array $value
112          * @return \Workspace\UseCase\ConditionBase
113          */
114         public function notOneOf($input, array $value)
115         {
116                 return $this->addCondition('NOT IN', $input, $value);
117         }
118
119         /**
120          * Add new condition.
121          * @param string $op
122          * @param string $input
123          * @param unknown $value
124          * @return \Workspace\UseCase\ConditionBase
125          */
126         protected function addCondition($op, $input, $value)
127         {
128                 $this->conditionSet[] = array(
129                                 'Input' => $input,
130                                 'Operator' => $op,
131                                 'Value' => $value
132                 );
133                 return $this;
134         }
135
136 }