= 1577833200); // 2020-01-01 - date of birth of this soft } function check_status($status) { global $status_list; return array_key_exists($status, $status_list); } function check_description($comment) { if (preg_match("/^[\p{L}0-9\p{P}\p{Zs}\p{Zl}\p{Sc}\=\+]+$/uim", $comment)) return true; return false; } function check_email($value, $domain=NULL, $checkDns=true) { $regex = '/^((\"[^\"\f\n\r\t\v\b]+\")|([\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+(\.[\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))$/'; if (!preg_match($regex, $value)) { return false; } $nd = explode('@', $value); $nd=$nd[1]; if ($domain) { if(is_array($domain)) { if (!in_array($nd,$domain)) { return false; } } else { if($nd!=$domain) { return false; } } } if ($checkDns && function_exists('checkdnsrr')) { if (!(checkdnsrr($nd, 'MX') || checkdnsrr($nd, 'A'))) { return false; } } return true; } /* * Handling item POST data */ function handle_item_post_data(&$info, $enabled_fields=null, $required_fields=null, &$item=null, &$changes=null) { $field_errors=array(); if (isset($_POST['submit'])) { logging('DEBUG', 'POST data : '.vardump($_POST)); // Name if (!$enabled_fields || in_array('name', $enabled_fields)) { if (isset($_POST['name'])) { if (check_name($_POST['name'])) { $info['name'] = $_POST['name']; } else { $field_errors['name'] = "Ce nom est invalide."; } } else { $field_errors['name'] = "Cette information est obligatoire."; } } // status if (!$enabled_fields || in_array('status', $enabled_fields)) { if (isset($_POST['status']) && check_status($_POST['status'])) { $info['status'] = $_POST['status']; } else { $field_errors['status'] = "Cette information est obligatoire."; } } // description if (isset($_POST['description']) && (!$enabled_fields || in_array('description', $enabled_fields))) { if (check_is_empty(trim($_POST['description']))) { $info['description'] = null; } else if (check_description($_POST['description'])) { $info['description'] = $_POST['description']; } else { $field_errors['description'] = "Cette description est invalide."; } } } // Check custom required fields if (is_array($required_fields)) { foreach ($required_fields as $field) { if (array_key_exists($field, $field_errors)) continue; if (array_key_exists($field, $info) && !is_null($info[$field]) && !check_is_empty($info)) continue; $field_errors[$field] = "Cette information est obligatoire."; } } if (empty($field_errors) && is_array($item) && !is_null($changes)) { $changes = array(); foreach ($info as $key => $value) { if ($value != $item[$key]) $changes[$key] = $value; } } return $field_errors; } /* * Parser/formater values helpers */ $_date_format = "%d/%m/%Y"; $_date_time_format = "%d/%m/%Y %H:%M:%S"; function format_time($time, $with_time=true) { global $_date_format, $_date_time_format; if ($with_time) return strftime($_date_time_format, $time); return strftime($_date_format, $time); } function parse_date($date, $with_time=true) { global $_date_format, $_date_time_format; if ($with_time) $ptime = strptime($date, $_date_time_format); else $ptime = strptime($date, $_date_format); if(is_array($ptime)) { return mktime( $ptime['tm_hour'], $ptime['tm_min'], $ptime['tm_sec'], $ptime['tm_mon']+1, $ptime['tm_mday'], $ptime['tm_year']+1900 ); } return false; } function format_size($size, $digit=False) { if (!$digit && $digit!==0) $digit=2; if ($size>=1099511627776) return number_format($size/1099511627776,$digit)."To"; elseif ($size>=1073741824) return number_format($size/1073741824,$digit)."Go"; else if ($size>=1048576) return number_format($size/1048576,$digit)."Mo"; else if ($size>=1024) return number_format($size/1024,$digit)."Ko"; else return $size."o"; } function can_modify($item) { return can_do( $item, array('pending') ); } function can_archive($item) { return can_do( $item, array('refused', 'validated') ); } function can_delete($item) { return can_do( $item, array('archived') ); } function can_do($item, $status=array()) { return in_array($item['status'], $status); } /* * Generic Data/value helpers */ function vardump($data) { ob_start(); var_dump($data); $data = ob_get_contents(); ob_end_clean(); return $data; } function check_is_empty($val) { switch(gettype($val)) { case "boolean": case "integer": case "double": case "object": case "resource": return False; case "array": case "string": if ($val == "0") return false; return empty($val); case "NULL": return True; } } /** * Supprime les accents d'une chaine * * @param[in] $string La chaine originale * * @retval string La chaine sans les accents */ function withoutAccents($string){ $replaceAccent = Array( "à" => "a", "á" => "a", "â" => "a", "ã" => "a", "ä" => "a", "ç" => "c", "è" => "e", "é" => "e", "ê" => "e", "ë" => "e", "ì" => "i", "í" => "i", "î" => "i", "ï" => "i", "ñ" => "n", "ò" => "o", "ó" => "o", "ô" => "o", "õ" => "o", "ö" => "o", "ù" => "u", "ú" => "u", "û" => "u", "ü" => "u", "ý" => "y", "ÿ" => "y", "À" => "A", "Á" => "A", "Â" => "A", "Ã" => "A", "Ä" => "A", "Ç" => "C", "È" => "E", "É" => "E", "Ê" => "E", "Ë" => "E", "Ì" => "I", "Í" => "I", "Î" => "I", "Ï" => "I", "Ñ" => "N", "Ò" => "O", "Ó" => "O", "Ô" => "O", "Õ" => "O", "Ö" => "O", "Ù" => "U", "Ú" => "U", "Û" => "U", "Ü" => "U", "Ý" => "Y" ); return strtr($string, $replaceAccent); } /* * Generic file/directory helpers */ function dump_file($file_path, $max_age=3600) { if (is_file($file_path)) { header('Content-Type: '.mime_content_type($file_path)); $last_modified_time = filemtime($file_path); $etag = md5_file($file_path); header("Cache-Control: max-age=$max_age, must-revalidate"); header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT"); header("Etag: $etag"); if ((isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && @strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time) || (isset($_SERVER['HTTP_IF_NONE_MATCH']) && trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag)) { header("HTTP/1.1 304 Not Modified"); exit(); } header('Pragma: public'); header('Content-Length: ' . filesize($file_path)); readfile($file_path); exit(); } header("HTTP/1.1 404 Not found"); exit(); } function delete_directory($dir, $recursive=true) { $files = array_diff(scandir($dir), array('.','..')); if ($recursive) { foreach ($files as $file) { if (is_dir("$dir/$file")) { if (!delete_directory("$dir/$file", true)) { logging('ERROR', "delete_directory($dir) : Fail to delete sub-directory '$dir/$file'."); return false; } } else if (!unlink("$dir/$file")) { logging('ERROR', "delete_directory($dir) : Fail to delete '$dir/$file'."); return false; } } } else if (!empty($files)) { logging('ERROR', "delete_directory($dir) : Directory is not empty."); return false; } return rmdir($dir); }