Param('id_sondage'); $sql = $connect->Prepare($sql); $sondage = $connect->Execute($sql, [$id]); if ($sondage === false) { return false; } $psondage = $sondage->FetchObject(false); $psondage->date_fin = strtotime($psondage->date_fin); return $psondage; } return false; } public static function is_error($cerr) { global $err; if ($err == 0) { return false; } return ($err & $cerr) != 0; } public static function is_user() { return (USE_REMOTE_USER && isset($_SERVER['REMOTE_USER'])) || isset($_SESSION['nom']); } public static function print_header($title = '') { global $lang; echo ' '; if (! empty($title)) { echo '' . stripslashes($title) . ' - ' . NOMAPPLICATION . ''; } else { echo '' . NOMAPPLICATION . ''; } echo ' '; if (file_exists($_SERVER['DOCUMENT_ROOT']."/nav/nav.js")) { echo ''; } echo '
'; } public static function check_table_sondage() { global $connect; if (in_array('sondage', $connect->MetaTables('TABLES'))) { return true; } return false; } /** * Check if an email address is valid using PHP filters * * @param string $email Email address to check * @return bool True if valid. False if not valid. */ public static function isValidEmail($email) { return filter_var($email, FILTER_VALIDATE_EMAIL); } /** * Envoi un courrier avec un codage correct de To et Subject * Les en-têtes complémentaires ne sont pas gérés * */ public static function sendEmail( $to, $subject, $body, $headers='', $param='') { mb_internal_encoding('UTF-8'); $subject = mb_encode_mimeheader(html_entity_decode($subject, ENT_QUOTES, 'UTF-8'), 'UTF-8', 'B', "\n", 9); $encoded_app = mb_encode_mimeheader(NOMAPPLICATION, 'UTF-8', 'B', "\n", 6); $size_encoded_app = (6 + strlen($encoded_app)) % 75; $size_admin_email = strlen(ADRESSEMAILADMIN); if (($size_encoded_app + $size_admin_email + 9) > 74 ) { $folding = "\n"; } else { $folding = ''; }; /* Si $headers ne contient qu'une adresse email, on la considère comme adresse de reply-to, sinon on met l'adresse de no-reply definie dans constants.php */ if (self::isValidEmail($headers)) { $replyTo = $headers; $headers = ''; // on reinitialise $headers } else { $replyTo = ADRESSEMAILREPONSEAUTO; } $from = sprintf( "From: %s%s <%s>\n", $encoded_app, $folding, ADRESSEMAILADMIN); if ($headers) { $headers .= "\n" ; } $headers .= $from; $headers .= "Reply-To: $replyTo\n"; $headers .= "MIME-Version: 1.0\n"; $headers .= "Content-Type: text/plain; charset=UTF-8\n"; $headers .= "Content-Transfer-Encoding: 8bit\n"; $headers .= "Auto-Submitted:auto-generated\n"; $headers .= "Return-Path: <>"; $body = html_entity_decode($body, ENT_QUOTES, 'UTF-8')._("\n--\n\n« La route est longue, mais la voie est libre… »\nFramasoft ne vit que par vos dons (déductibles des impôts).\nMerci d'avance pour votre soutien http://soutenir.framasoft.org."); mail($to, $subject, $body, $headers, $param); } /** * Fonction vérifiant l'existance et la valeur non vide d'une clé d'un tableau * @param string $name La clé à tester * @param array $tableau Le tableau où rechercher la clé ($_POST par défaut) * @return bool Vrai si la clé existe et renvoie une valeur non vide */ public static function issetAndNoEmpty($name, $tableau = null) { if (is_null($tableau)) { $tableau = $_POST; } return isset($tableau[$name]) && ! empty($tableau[$name]); } /** * Fonction permettant de générer les URL pour les sondage * @param string $id L'identifiant du sondage * @param bool $admin True pour générer une URL pour l'administration d'un sondage, False pour un URL publique * @return string L'url pour le sondage */ public static function getUrlSondage($id, $admin = false) { if (URL_PROPRE) { if ($admin === true) { $url = str_replace('/admin', '', self::get_server_name()) . $id . '/admin'; } else { $url = str_replace('/admin', '', self::get_server_name()) . $id; } } else { if ($admin === true) { $url = str_replace('/admin', '', self::get_server_name()) . 'adminstuds.php?sondage=' . $id; } else { $url = str_replace('/admin', '', self::get_server_name()) . 'studs.php?sondage=' . $id; } } return $url; } public static function remove_sondage($connect, $numsondage) { $connect->StartTrans(); $req = 'DELETE FROM sondage WHERE id_sondage = ' . $connect->Param('numsondage') ; $sql = $connect->Prepare($req); $connect->Execute($sql, [$numsondage]); $req = 'DELETE FROM sujet_studs WHERE id_sondage = ' . $connect->Param('numsondage') ; $sql = $connect->Prepare($req); $connect->Execute($sql, [$numsondage]); $req = 'DELETE FROM user_studs WHERE id_sondage = ' . $connect->Param('numsondage') ; $sql = $connect->Prepare($req); $connect->Execute($sql, [$numsondage]); $req = 'DELETE FROM comments WHERE id_sondage = ' . $connect->Param('numsondage') ; $sql = $connect->Prepare($req); $connect->Execute($sql, [$numsondage]); $suppression_OK = ! $connect->HasFailedTrans(); $connect->CompleteTrans(); return $suppression_OK ; } public static function cleaning_polls($connect, $log_txt) { $connect->StartTrans(); $req = 'SELECT * FROM sondage WHERE date_fin < NOW() LIMIT 20'; $sql = $connect->Prepare($req); $cleaning = $connect->Execute($sql); while ($dcleaning = $cleaning->FetchNextObject(false)) { if (self::remove_sondage($connect, $dcleaning->id_sondage)) { error_log(date('H:i:s d/m/Y:') . ' EXPIRATION: '. $dcleaning->id_sondage."\t".$dcleaning->format."\t".$dcleaning->nom_admin."\t".$dcleaning->mail_admin."\n", 3, $log_txt); } } $connect->CompleteTrans(); } }