XOOPS 2.5.6  Final
 All Classes Namespaces Files Functions Variables Pages
criteria.php
Go to the documentation of this file.
1 <?php
22 defined('XOOPS_ROOT_PATH') or die('Restricted access');
23 
32 {
38  var $order = 'ASC';
39 
44  var $sort = '';
45 
51  var $limit = 0;
52 
58  var $start = 0;
59 
64  var $groupby = '';
65 
69  function CriteriaElement()
70  {
71  }
72 
76  function render()
77  {
78  }
79 
84  function setSort($sort)
85  {
86  $this->sort = $sort;
87  }
88 
93  function getSort()
94  {
95  return $this->sort;
96  }
97 
102  function setOrder($order)
103  {
104  if ('DESC' == strtoupper($order)) {
105  $this->order = 'DESC';
106  }
107  }
108 
113  function getOrder()
114  {
115  return $this->order;
116  }
117 
122  function setLimit($limit = 0)
123  {
124  $this->limit = intval($limit);
125  }
126 
131  function getLimit()
132  {
133  return $this->limit;
134  }
135 
140  function setStart($start = 0)
141  {
142  $this->start = intval($start);
143  }
144 
149  function getStart()
150  {
151  return $this->start;
152  }
153 
158  function setGroupby($group)
159  {
160  $this->groupby = $group;
161  }
162 
167  function getGroupby()
168  {
169  return $this->groupby ? " GROUP BY {$this->groupby}" : "";
170  }
174 }
175 
181 {
187  var $criteriaElements = array();
188 
194  var $conditions = array();
195 
202  function CriteriaCompo($ele = null, $condition = 'AND')
203  {
204  if (isset($ele)) {
205  $this->add($ele, $condition);
206  }
207  }
208 
216  function &add(&$criteriaElement, $condition = 'AND')
217  {
218  if (is_object($criteriaElement)) {
219  $this->criteriaElements[] =& $criteriaElement;
220  $this->conditions[] = $condition;
221  }
222  return $this;
223  }
224 
230  function render()
231  {
232  $ret = '';
233  $count = count($this->criteriaElements);
234  if ($count > 0) {
235  $render_string = $this->criteriaElements[0]->render();
236  for($i = 1; $i < $count; $i++) {
237  if (!$render = $this->criteriaElements[$i]->render())
238  continue;
239  $render_string .= (empty($render_string) ? "" : ' ' . $this->conditions[$i] . ' ') . $render;
240  }
241  $ret = empty($render_string) ? '' : "({$render_string})";
242  }
243  return $ret;
244  }
245 
251  function renderWhere()
252  {
253  $ret = $this->render();
254  $ret = ($ret != '') ? 'WHERE ' . $ret : $ret;
255  return $ret;
256  }
257 
264  function renderLdap()
265  {
266  $retval = '';
267  $count = count($this->criteriaElements);
268  if ($count > 0) {
269  $retval = $this->criteriaElements[0]->renderLdap();
270  for($i = 1; $i < $count; $i++) {
271  $cond = strtoupper($this->conditions[$i]);
272  $op = ($cond == "OR") ? "|" : "&";
273  $retval = "({$op}{$retval}" . $this->criteriaElements[$i]->renderLdap() . ")";
274  }
275  }
276  return $retval;
277  }
278 }
279 
285 {
290  var $prefix;
292  var $column;
294  var $value;
295 
303  function Criteria($column, $value = '', $operator = '=', $prefix = '', $function = '')
304  {
305  $this->prefix = $prefix;
306  $this->function = $function;
307  $this->column = $column;
308  $this->value = $value;
309  $this->operator = $operator;
310  }
311 
317  function render()
318  {
319  $clause = (!empty($this->prefix) ? "{$this->prefix}." : "") . $this->column;
320  if (!empty($this->function)) {
321  $clause = sprintf($this->function, $clause);
322  }
323  if (in_array(strtoupper($this->operator), array('IS NULL' , 'IS NOT NULL'))) {
324  $clause .= ' ' . $this->operator;
325  } else {
326  if ('' === ($value = trim($this->value))) {
327  return '';
328  }
329  if (!in_array(strtoupper($this->operator), array('IN' , 'NOT IN'))) {
330  if ((substr($value, 0, 1) != '`') && (substr($value, - 1) != '`')) {
331  $value = "'{$value}'";
332  } else if (!preg_match('/^[a-zA-Z0-9_\.\-`]*$/', $value)) {
333  $value = '``';
334  }
335  }
336  $clause .= " {$this->operator} {$value}";
337  }
338  return $clause;
339  }
340 
347  function renderLdap()
348  {
349  if ($this->operator == '>') {
350  $this->operator = '>=';
351  }
352  if ($this->operator == '<') {
353  $this->operator = '<=';
354  }
355 
356  if ($this->operator == '!=' || $this->operator == '<>') {
357  $operator = '=';
358  $clause = "(!(" . $this->column . $operator . $this->value . "))";
359  } else {
360  if ($this->operator == 'IN') {
361  $newvalue = str_replace(array('(' , ')'), '', $this->value);
362  $tab = explode(',', $newvalue);
363  foreach ($tab as $uid) {
364  $clause .= "({$this->column}={$uid})";
365  }
366  $clause = '(|' . $clause . ')';
367  } else {
368  $clause = "(" . $this->column . $this->operator . $this->value . ")";
369  }
370  }
371  return $clause;
372  }
373 
379  function renderWhere()
380  {
381  $cond = $this->render();
382  return empty($cond) ? '' : "WHERE {$cond}";
383  }
384 }
385 
386 ?>