/** * * The flush Function updates the database with the requiered changes or insert an new entry * * @return void */ public function flush($entityObject = '') { if ($entityObject) { $this->entityObject = $entityObject; } //init the entityFirst $entityFirst = $this->entityFirst; if (!empty($this->query)) { //when the query isn't empty then it creates an new dbEntry //send the request $this->db->query($this->query) or die('It went something wrong with the DataBase'); } elseif (is_object($this->entityObject)) { //when it is an object, then it is one Entity to update in the database //parse the entityObject in an Array and update the changes in database $cleanEntityObject = $this->cleanEntityObject($this->entityObject); foreach ($cleanEntityObject as $key => $value) { if ($value !== $entityFirst[$key]) { $query = "UPDATE {$this->dbUser}.{$this->entityObjectName} SET {$key} = '{$cleanEntityObject[$key]}' WHERE ID = {$cleanEntityObject['id']} "; $request = $this->db->query($query) or die('It went something wrong with the DataBase'); } } } elseif (is_array($this->entityObject)) { //when it is an array, then it has more then one entity to update the database //parse every entityObjects in Arrays and save it in an 2dimensional Array then UPDATE all changes $entityObject = array(); foreach ($this->entityObject as $key => $value) { $entityObject[] = $this->cleanEntityObject($value); } foreach ($entityFirst as $key => $value) { foreach ($value as $key2 => $value2) { if ($value2 !== $entityObject[$key][$key2]) { $query = "UPDATE {$this->dbUser}.{$this->entityObjectName} SET {$key2} = '" . $entityObject[$key][$key2] . "' WHERE ID = " . $value['ID']; $request = $this->db->query($query) or die('It went something wrong with the DataBase'); } } } } }
/** * Actual validation of request with rules implied * from its child classes. * * @param null $route * @return bool|void */ public function validate($route = null) { for ($i = 0; $i < count($this->request); $i++) { $field = array_keys($this->request); if (array_key_exists($field[$i], $this->rules)) { $rule = explode('|', $this->rules[$field[$i]]); for ($z = 0; $z < count($rule); $z++) { if ($rule[$z] == 'required') { if (strlen($this->request[$field[$i]]) == 0) { $this->errors[$field[$i]] = str_replace('_', ' ', $field[$i]) . " is required."; break; } } if (preg_match('/unique/i', $rule[$z])) { $db = new Database(); $value = $this->request[$field[$i]]; foreach ($rule as $item) { if ($item == 'password') { $value = Hash::encode($value); break; } } if ($db->table(explode(':', $rule[$z])[1])->where($field[$i], $value)->exists()) { $this->errors[$field[$i]] = str_replace('_', ' ', $field[$i]) . " not available."; break; } } if ($rule[$z] == 'email') { if (!preg_match('/@/', $this->request[$field[$i]])) { $this->errors[$field[$i]] = "Enter a valid e-mail."; break; } } if ($rule[$z] == 'alphanumeric') { if (!preg_match('/[^A-Za-z0-9]/i', $this->request[$field[$i]])) { $this->errors[$field[$i]] = "Only alphanumeric characters are allowed."; break; } } if ($rule[$z] == 'letters') { if (!preg_match('/^[A-Za-z]/i', $this->request[$field[$i]])) { $this->errors[$field[$i]] = str_replace('_', ' ', $field[$i]) . " accepts letters only."; break; } } if ($rule[$z] == 'number' || $rule[$z] == 'numeric') { if (!preg_match('/[0-9]/', $this->request[$field[$i]])) { $this->errors[$field[$i]] = str_replace('_', ' ', $field[$i]) . " should be numeric."; break; } } if (preg_match('/match/i', $rule[$z])) { $compare = explode(':', $rule[$z])[1]; if ($this->request[$field[$i]] !== $this->request[$compare]) { $this->errors[$field[$i]] = "Field did not match to {$compare}."; $this->errors[$compare] = "Field did not match to {$field[$i]}."; break; } } if (preg_match('/min/i', $rule[$z])) { $min = explode(':', $rule[$z])[1]; if (strlen($this->request[$field[$i]]) < $min) { $this->errors[$field[$i]] = str_replace('_', ' ', $field[$i]) . " requires a minimum of {$min} characters."; break; } } if (preg_match('/max/i', $rule[$z])) { $max = explode(':', $rule[$z])[1]; if (strlen($this->request[$field[$i]]) > $max) { $this->errors[$field[$i]] = str_replace('_', ' ', $field[$i]) . " requires a maximum of {$max} characters."; break; } } } } } $fileRules = array_keys($this->rules); for ($f = 0; $f < count($fileRules); $f++) { if (array_key_exists($fileRules[$f], $_FILES)) { if (empty($_FILES[$fileRules[$f]]['name'])) { $this->errors[$fileRules[$f]] = str_replace('_', ' ', $fileRules[$f]) . " is required."; } } } $redirectRoute = !is_null($route) ? $route : $this->route; if (is_null($this->errors)) { return true; } else { $_SESSION['__ERRORS__'] = $this->errors; $_SESSION['__FIELDS__'] = $this->request; return header("location: {$redirectRoute}"); } }