Licensed under the GNU AGPL v3 license. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Affero Public License as published by the Free Software Foundation, version 3. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Affero Public License for more details. You should have received a copy of the GNU General Affero Public License along with this program. If not, see . */ class utils { const SECRET_SALT = ''; const HASH_CHECK_LENGTH = 10; static public function startSession() { if (!isset($_SESSION)) session_start(); } static public function loadFromSession(&$calcul) { self::startSession(); if (!isset($_SESSION['_calcul'])) return false; self::loadFromJSON($calcul, $_SESSION['_calcul']); } static public function saveToSession(&$calcul) { self::startSession(); $_SESSION['_calcul'] = json_encode(get_object_vars($calcul)); } static public function loadFromJSON(&$calcul, $json) { $json = json_decode($json, true); foreach ($json as $key => $value) { if (!property_exists($calcul, $key)) continue; $calcul->$key = $value; } return true; } static public function saveToJSON(&$calcul) { return self::json_readable_encode(get_object_vars($calcul)); } static public function saveToHash(&$calcul) { $out = get_object_vars($calcul); $keys = self::makeReducedKeysTable($out); foreach ($out as $key=>$value) { $out[$keys[$key]] = $value; unset($out[$key]); } $out = json_encode($out); $out = gzdeflate($out, 9); $out = strtr(base64_encode($out), '+/=', '-_,'); // URL safe $out.= self::makeCheckHash($out); return $out; } static public function loadFromHash(&$calcul, $hash) { $check = substr($hash, -(self::HASH_CHECK_LENGTH)); $hash = substr($hash, 0, -(self::HASH_CHECK_LENGTH)); $hash_check = self::makeCheckHash($hash); if ($check != $hash_check) return false; $out = base64_decode(strtr($hash, '-_,', '+/=')); $out = gzinflate($out); $out = json_decode($out, true); $keys = self::makeReducedKeysTable(get_object_vars($calcul)); $keys = array_flip($keys); foreach ($keys as $new_key=>$key) { if (!property_exists($calcul, $key)) continue; $calcul->$key = $out[$new_key]; } return true; } static private function makeCheckHash($in) { return substr(sha1($in . self::SECRET_SALT), 0, self::HASH_CHECK_LENGTH); } static public function makeReducedKeysTable($in) { $out = array(); $i = 0; $chars = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; foreach ($in as $key=>$value) { $new_key = $chars[$i]; $out[$key] = $new_key; $i++; } return $out; } static public function getNomMois($mois) { switch ((int)$mois) { case 1: return 'janvier'; case 2: return 'février'; case 3: return 'mars'; case 4: return 'avril'; case 5: return 'mai'; case 6: return 'juin'; case 7: return 'juillet'; case 8: return 'août'; case 9: return 'septembre'; case 10: return 'octobre'; case 11: return 'novembre'; case 12: return 'décembre'; } } static public function dateCheck($date) { $date = trim($date); if (!preg_match('!^[0-9]{2}/[0-9]{2}/[0-9]{4}$!', $date)) return false; $date = explode('/', $date); if (!checkdate($date[1], $date[0], $date[2])) return false; return true; } static public function dateToTS($date) { $date = trim($date); $date = explode('/', $date); return mktime(0, 0, 0, $date[1], $date[0], $date[2]); } static protected function json_escape($str) { return preg_replace("!([\b\t\n\r\f\"\\'])!", "\\\\\\1", $str); } static public function json_readable_encode($in, $indent = 0, $from_array = false) { $out = ''; foreach ($in as $key=>$value) { $out .= str_repeat("\t", $indent + 1); $out .= "\"".self::json_escape((string)$key)."\": "; if (is_object($value) || is_array($value)) { $out .= "\n"; $out .= self::json_readable_encode($value, $indent + 1); } elseif (is_bool($value)) { $out .= $value ? 'true' : 'false'; } elseif (is_null($value)) { $out .= 'null'; } elseif (is_string($value)) { $out .= "\"" . self::json_escape($value) ."\""; } else { $out .= $value; } $out .= ",\n"; } if (!empty($out)) { $out = substr($out, 0, -2); } $out = str_repeat("\t", $indent) . "{\n" . $out; $out .= "\n" . str_repeat("\t", $indent) . "}"; return $out; } static public function exportToPoleEmploi($calcul) { $salaires = 0; foreach ($calcul->Salaires as $value) $salaires += $value; foreach ($calcul->Primes_Annuelles as $value) $salaires += $value; $form = array( 'dateNaissance' => date('d/m/Y', $calcul->Date_Naissance), 'dateDebutPeriode' => date('d/m/Y', $calcul->Date_Debut), 'dateFinPeriode' => date('d/m/Y', $calcul->Date_Fin), 'dateLastDay' => date('d/m/Y', $calcul->Date_Fin), 'champsTexteTotalSalaire' => $salaires, 'champsTexteJourCP' => $calcul->getCarenceConges(), // En dur pour le moment 'radioGroupMoselle' => '0', 'champsTexteTempsTravail' => 100, 'champsTexteIndemniteLic' => '0', 'radioGroupLicenceEco' => '0', // Caché sur le site pour le moment ?! #'radioGroupDroits' => '3', // En dur 't:formdata' => 'H4sIAAAAAAAAAJ2UQWsTQRTHp4WeQksqFRGkWm1RStkqtCB6KsaIkpRgove3s6/plNmZdeZtk1z8Dn4BP4F40HsP9iDk4HfwA3gSPCm4k2FtMGuy8ba8//u/39uZ9+bdN7bUu8HW69rEqQRhsGa0IPsgAkIFwlpQHK1h+9p0A0iAH2NAkKAlM9gPuDYoRRiEYDE4CLMgcKoLlNFmGylNtl6cV75e/vxzkS00WIVrRUbLQ4iR2KXGCZzCrgTV3W2TEar7sJ8QW3bgwxxcqrWDeVtrGZ0ZbTsN46yK0Or8fbR39OPtl0XG+knvFtsoZEYYppSgETpC+4q9ZoxY1Qk1J7S8UMrtzEu9DXa9MPNIqL8oKy5cFypnzHZ6wjq7VpgnwVIEg7x8xcUaWawGg1keX3ib3ZlI4scQJ5awT0iaQFoYqTnkitc7Tu84ve31eWp5+A7bnmaIsykDRTEqm6LM8VfH8E2f0fQZ89XzLWyymxMWA5HQXaPTJNYWpXSjeX/qaHIdJ1qhIhs8d+YnzuwX583ds52PK98/TSyO4y+4RVk1fyxNzyvd1d5/dHVv2B8OP7R/nfkdmXVp6L5MtuBCFg6A0zten6fWv09/zHCiU8OTHLs6hn2WKY9a5fylBl2oCGMlsu0QvOg/n+Z6Q/B5ann4bbY15T6zNMweQOR6RK4SW7sYiYYXH3Nduoorslb4fF1kR6NAzqte8HxmKbfnFD3soU5Jq1OQIkKTH+eyj7700dm+0dH9BmrZemjXBgAA', 'boutonValider' => 'Valider', 'boutonValider_btn' => 'Submited', ); return $form; } } ?>