public function save_oke($item) { $result = true; if (isset($item["id"]) == false) { if ($this->allow_create == false) { return false; } } else { if ($this->allow_update == false) { return false; } } foreach ($this->elements as $name => $element) { if ($name == "id" || $element["readonly"]) { continue; } if ($element["required"] && $element["type"] != "boolean" && trim($item[$name]) == "") { if ($element["type"] != "blob" || isset($item["id"]) == false) { $this->output->add_message("The field " . $element["label"] . " cannot be empty."); $result = false; } } if (trim($item[$name]) != "") { switch ($element["type"]) { case "date": if (valid_date($item[$name]) == false) { $this->output->add_message("The field " . $element["label"] . " doesn't contain a valid date."); $result = false; } break; case "timestamp": if (valid_timestamp($item[$name]) == false) { $this->output->add_message("The field " . $element["label"] . " doesn't contain a valid timestamp."); $result = false; } break; case "enum": if (in_array($item[$name], array_keys($element["options"])) == false) { $this->output->add_message("The field " . $element["label"] . " doesn't contain a valid value."); $result = false; } break; case "integer": if (is_numeric($item[$name]) == false) { $this->output->add_message("The field " . $element["label"] . " should be numerical."); $result = false; } break; } } if ($element["unique"]) { $query = "select count(*) as count from %S where %S=%s"; $args = array($this->table, $name, $item[$name]); if (isset($item["id"])) { $query .= " and id!=%d"; array_push($args, $item["id"]); } if (($current = $this->db->execute($query, $args)) == false) { $this->output->add_message("Error checking item uniqueness."); } else { if ($current[0]["count"] > 0) { $this->output->add_message($element["label"] . " already exists."); $result = false; } } } } return $result; }
public function execute($pattern) { $result = true; foreach ($pattern as $name => $rule) { if (isset($rule["label"]) == false) { $rule["label"] = $name; } if ($rule["required"] === true) { if ($_POST[$name] == "") { $this->add_message("required", $rule); $result = false; continue; } } switch ($rule["type"]) { case "boolean": if ($_POST[$name] != null && $_POST[$name] != "On") { $this->add_message("boolean", $rule); $result = false; } break; case "email": if ($_POST[$name] != "") { if (valid_email($_POST[$name]) == false) { $this->add_message("email", $rule); $result = false; } } break; case "enum": if ($_POST[$name] != "") { if (in_array($_POST[$name], $rule["values"]) == false) { $this->add_message("enum", $rule); $result = false; } } break; case "integer": if (valid_input($_POST[$name], VALIDATE_NUMBERS) == false) { $this->add_message("integer", $rule); $result = false; } else { if (isset($rule["min"])) { if ($_POST[$name] < $rule["min"]) { $this->add_message("intmin", $rule); $result = false; } } if (isset($rule["max"])) { if ($_POST[$name] > $rule["max"]) { $this->add_message("intmax", $rule); $result = false; } } } break; case "string": if (isset($rule["minlen"])) { if (strlen($_POST[$name]) < $rule["minlen"]) { $this->add_message("minlen", $rule); $result = false; } } if (isset($rule["maxlen"])) { if (strlen($_POST[$name]) > $rule["maxlen"]) { $this->add_message("maxlen", $rule); $result = false; } } if (isset($rule["charset"])) { if (valid_input($_POST[$name], $rule["charset"]) == false) { $this->add_message("charset", $rule); $result = false; } } if (isset($rule["pattern"])) { if (preg_match("/" . $rule["pattern"] . "/", $_POST[$name]) == false) { $this->add_message("pattern", $rule); $result = false; } } break; case "timestamp": if ($_POST[$name] != "") { if (valid_timestamp($_POST[$name]) == false) { $this->add_message("timestamp", $rule); $result = false; } } break; default: $this->output->add_message("No or invalid type set for " . $rule["label"] . "."); } } return $result; }