public function set_rules ($name, $rules) {
if ($rules == false) return false;
if (is_array ($rules)) $rules = implode('|', $rules);
// Change pipe
if (! isset($this->rules[$name])) { $pipe = ''; $this->rules[$name] = ''; }
else { $pipe = '|'; }
foreach(explode('|', $rules) as $rule) {
switch(substr($rule, 0, strpos($rule, '['))) {
case 'required':
$this->rules[$name] .= "{$pipe}required";
// Check if we are using meta-arrays
if ($size = strtoarray ($rule)) {
// Make min an integer
$min = (int) $size[0];
// Max is an integer if the format was [2,3], otherwise false
$max = (isset ($size[1])) ? (int) $size[1] : false;
// No max and a min means exact length
if ($max === false && $min > 0)
$this->set_rules ($name, "exact_length[$min]");
// If min and max are the same, exact length
elseif (($min == $max) && $min > 0)
$this->set_rules ($name, "exact_length[$min]");
// Min and max are not both zero
else {
if ($min > 0) $this->set_rules ($name, "min_length[$min]");
if ($max > $min) $this->set_rules ($name, "max_length[$max]");
}
}
break;
case 'allow':
$types = strtoarray ($rule);
$this->upload_rules[$name] = implode ('|', $types);
break;
default:
$this->rules[$name] .= $pipe.$rule;
break;
}
$pipe = "|";
}
return true;
}