XpressEngine Core  1.11.2
 All Classes Namespaces Files Functions Variables Pages
Argument.class.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) NAVER <http://www.navercorp.com> */
3 
10 class Argument
11 {
12 
17  var $value;
18 
23  var $name;
24 
29  var $type;
30 
35  var $isValid;
36 
42 
47 
53 
58  var $_value; //
59 
68  {
69  $this->value = $value;
70  $this->name = $name;
71  $this->isValid = TRUE;
72  }
73 
74  function getType()
75  {
76  if(isset($this->type))
77  {
78  return $this->type;
79  }
80  if(is_string($this->value))
81  {
82  return 'column_name';
83  }
84 
85  return 'number';
86  }
87 
89  {
90  $this->type = $value;
91  }
92 
93  function setColumnOperation($operation)
94  {
95  $this->column_operation = $operation;
96  }
97 
98  function getName()
99  {
100  return $this->name;
101  }
102 
103  function getValue()
104  {
105  if(!isset($this->_value))
106  {
107  $value = $this->getEscapedValue();
108  $this->_value = $this->toString($value);
109  }
110  return $this->_value;
111  }
112 
113  function getPureValue()
114  {
115  return $this->value;
116  }
117 
119  {
121  }
122 
123  function getEscapedValue()
124  {
125  return $this->escapeValue($this->value);
126  }
127 
128  function getUnescapedValue()
129  {
130  if($this->value === 'null')
131  {
132  return null;
133  }
134  return $this->value;
135  }
136 
142  function toString($value)
143  {
144  if(is_array($value))
145  {
146  if(count($value) === 0)
147  {
148  return '';
149  }
150  if(count($value) === 1 && $value[0] === '')
151  {
152  return '';
153  }
154  return '(' . implode(',', $value) . ')';
155  }
156  return $value;
157  }
158 
164  function escapeValue($value)
165  {
166  $column_type = $this->getType();
167  if($column_type == 'column_name')
168  {
169  $dbParser = DB::getParser();
170  return $dbParser->parseExpression($value);
171  }
172  if(!isset($value))
173  {
174  return null;
175  }
176 
177  $columnTypeList = array('date' => 1, 'varchar' => 1, 'char' => 1, 'text' => 1, 'bigtext' => 1);
178  if(isset($columnTypeList[$column_type]))
179  {
180  if(!is_array($value))
181  {
182  $value = $this->_escapeStringValue($value);
183  }
184  else
185  {
186  foreach($value as $key=>$val)
187  {
188  $value[$key] = $this->_escapeStringValue($val);
189  }
190  }
191  }
192  if($this->uses_default_value)
193  {
194  return $value;
195  }
196  if($column_type == 'number')
197  {
198  if(is_array($value))
199  {
200  foreach($value AS $key => $val)
201  {
202  if(isset($val) && $val !== '')
203  {
204  $value[$key] = (int) $val;
205  }
206  }
207  }
208  else
209  {
210  $value = (int) $value;
211  }
212  }
213 
214  return $value;
215  }
216 
223  {
224  // Remove non-utf8 chars.
225  $regex = '@((?:[\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}){1,100})|([\xF0-\xF7][\x80-\xBF]{3})|([\x80-\xBF])|([\xC0-\xFF])@x';
226 
227  $value = preg_replace_callback($regex, array($this, 'utf8Replacer'), $value);
228  $db = DB::getInstance();
229  $value = $db->addQuotes($value);
230  return '\'' . $value . '\'';
231  }
232 
233  function utf8Replacer($captures)
234  {
235  if(strlen($captures[1]))
236  {
237  // Valid byte sequence. Return unmodified.
238  return $captures[1];
239  }
240  else if(strlen($captures[2]))
241  {
242  // Remove user defined area
243  if("\xF3\xB0\x80\x80" <= $captures[2])
244  {
245  return;
246  }
247 
248  return $captures[2];
249  }
250  else
251  {
252  return;
253  }
254  }
255 
256  function isValid()
257  {
258  return $this->isValid;
259  }
260 
261  function isColumnName()
262  {
263  $type = $this->getType();
264  $value = $this->getUnescapedValue();
265  if($type == 'column_name')
266  {
267  return TRUE;
268  }
269  if($type == 'number' && is_null($value))
270  {
271  return FALSE;
272  }
273  if($type == 'number' && !is_numeric($value) && $this->uses_default_value)
274  {
275  return TRUE;
276  }
277  return FALSE;
278  }
279 
280  function getErrorMessage()
281  {
282  return $this->errorMessage;
283  }
284 
285  function ensureDefaultValue($default_value)
286  {
287  if($this->value === NULL || $this->value === '')
288  {
289  $this->value = $default_value;
290  $this->uses_default_value = TRUE;
291  }
292  }
293 
299  function checkFilter($filter_type)
300  {
301  if(isset($this->value) && $this->value != '')
302  {
303  global $lang;
304  $val = $this->value;
305  $key = $this->name;
306  switch($filter_type)
307  {
308  case 'email' :
309  case 'email_address' :
310  if(!preg_match('/^[\w-]+((?:\.|\+|\~)[\w-]+)*@[\w-]+(\.[\w-]+)+$/is', $val))
311  {
312  $this->isValid = FALSE;
313  $this->errorMessage = new BaseObject(-1, sprintf($lang->filter->invalid_email, $lang->{$key} ? $lang->{$key} : $key));
314  }
315  break;
316  case 'homepage' :
317  if(!preg_match('/^(http|https)+(:\/\/)+[0-9a-z_-]+\.[^ ]+$/is', $val))
318  {
319  $this->isValid = FALSE;
320  $this->errorMessage = new BaseObject(-1, sprintf($lang->filter->invalid_homepage, $lang->{$key} ? $lang->{$key} : $key));
321  }
322  break;
323  case 'userid' :
324  case 'user_id' :
325  if(!preg_match('/^[a-zA-Z]+([_0-9a-zA-Z]+)*$/is', $val))
326  {
327  $this->isValid = FALSE;
328  $this->errorMessage = new BaseObject(-1, sprintf($lang->filter->invalid_userid, $lang->{$key} ? $lang->{$key} : $key));
329  }
330  break;
331  case 'number' :
332  case 'numbers' :
333  if(is_array($val))
334  {
335  $val = join(',', $val);
336  }
337  if(!preg_match('/^(-?)[0-9]+(,\-?[0-9]+)*$/is', $val))
338  {
339  $this->isValid = FALSE;
340  $this->errorMessage = new BaseObject(-1, sprintf($lang->filter->invalid_number, $lang->{$key} ? $lang->{$key} : $key));
341  }
342  break;
343  case 'alpha' :
344  if(!preg_match('/^[a-z]+$/is', $val))
345  {
346  $this->isValid = FALSE;
347  $this->errorMessage = new BaseObject(-1, sprintf($lang->filter->invalid_alpha, $lang->{$key} ? $lang->{$key} : $key));
348  }
349  break;
350  case 'alpha_number' :
351  if(!preg_match('/^[0-9a-z]+$/is', $val))
352  {
353  $this->isValid = FALSE;
354  $this->errorMessage = new BaseObject(-1, sprintf($lang->filter->invalid_alpha_number, $lang->{$key} ? $lang->{$key} : $key));
355  }
356  break;
357  }
358  }
359  }
360 
361  function checkMaxLength($length)
362  {
363  if($this->value && (strlen($this->value) > $length))
364  {
365  global $lang;
366  $this->isValid = FALSE;
367  $key = $this->name;
368  $this->errorMessage = new BaseObject(-1, sprintf($lang->filter->outofrange, $lang->{$key} ? $lang->{$key} : $key));
369  }
370  }
371 
372  function checkMinLength($length)
373  {
374  if($this->value && (strlen($this->value) < $length))
375  {
376  global $lang;
377  $this->isValid = FALSE;
378  $key = $this->name;
379  $this->errorMessage = new BaseObject(-1, sprintf($lang->filter->outofrange, $lang->{$key} ? $lang->{$key} : $key));
380  }
381  }
382 
383  function checkNotNull()
384  {
385  if(!isset($this->value))
386  {
387  global $lang;
388  $this->isValid = FALSE;
389  $key = $this->name;
390  $this->errorMessage = new BaseObject(-1, sprintf($lang->filter->isnull, $lang->{$key} ? $lang->{$key} : $key));
391  }
392  }
393 
394 }
395 /* End of file Argument.class.php */
396 /* Location: ./classes/xml/xmlquery/argument/Argument.class.php */
checkMinLength($length)
_escapeStringValue($value)
toString($value)
checkFilter($filter_type)
getParser($force=FALSE)
Definition: DB.class.php:1345
checkMaxLength($length)
utf8Replacer($captures)
getInstance($db_type=NULL)
Definition: DB.class.php:142
setColumnType($value)
__construct($name, $value)
setColumnOperation($operation)
ensureDefaultValue($default_value)
escapeValue($value)
if(isset($_REQUEST['encode'])) if(isset($_REQUEST['decode'])) $lang
Definition: example.php:23