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;
 }
Beispiel #2
0
 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;
 }