2014-09-04 17:52:18 +02:00
< ? php
/**
* This software is governed by the CeCILL - B license . If a copy of this license
* is not distributed with this file , you can obtain one at
* http :// www . cecill . info / licences / Licence_CeCILL - B_V1 - en . txt
*
* Authors of STUdS ( initial project ) : Guilhem BORGHESI ( borghesi @ unistra . fr ) and Raphaël DROZ
* Authors of Framadate / OpenSondate : Framasoft ( https :// github . com / framasoft )
*
* =============================
*
* Ce logiciel est régi par la licence CeCILL - B . Si une copie de cette licence
* ne se trouve pas avec ce fichier vous pouvez l ' obtenir sur
* http :// www . cecill . info / licences / Licence_CeCILL - B_V1 - fr . txt
*
* Auteurs de STUdS ( projet initial ) : Guilhem BORGHESI ( borghesi @ unistra . fr ) et Raphaël DROZ
* Auteurs de Framadate / OpenSondage : Framasoft ( https :// github . com / framasoft )
*/
namespace Framadate ;
class Utils
{
2014-12-03 14:30:25 +01:00
/**
* @ return string Server name
*/
2014-09-04 17:52:18 +02:00
public static function get_server_name ()
{
2014-11-27 01:15:01 +01:00
$scheme = ( isset ( $_SERVER [ 'HTTPS' ]) && $_SERVER [ 'HTTPS' ] == 'on' ) ? 'https' : 'http' ;
2014-09-04 17:52:18 +02:00
$port = in_array ( $_SERVER [ 'SERVER_PORT' ], [ 80 , 443 ]) ? '/' : ':' . $_SERVER [ 'SERVER_PORT' ] . '/' ;
$server_name = $_SERVER [ 'SERVER_NAME' ] . $port . dirname ( $_SERVER [ 'SCRIPT_NAME' ]) . '/' ;
2014-11-27 01:15:01 +01:00
return $scheme . '://' . str_replace ( '/admin' , '' , str_replace ( '//' , '/' , str_replace ( '///' , '/' , $server_name )));
2014-09-04 17:52:18 +02:00
}
2014-12-03 14:30:25 +01:00
/**
* Returns a poll or false if it fails
*/
2014-11-27 01:15:01 +01:00
public static function get_poll_from_id ( $id )
2014-09-04 17:52:18 +02:00
{
global $connect ;
// Open database
if ( preg_match ( ';^[\w\d]{16}$;i' , $id )) {
$sql = ' SELECT sondage .* , sujet_studs . sujet FROM sondage
LEFT OUTER JOIN sujet_studs ON sondage . id_sondage = sujet_studs . id_sondage
WHERE sondage . id_sondage = ' . $connect->Param(' id_sondage ' );
$sql = $connect -> Prepare ( $sql );
2014-11-27 01:15:01 +01:00
$poll = $connect -> Execute ( $sql , [ $id ]);
2014-09-04 17:52:18 +02:00
2014-11-27 01:15:01 +01:00
if ( $poll === false ) {
2014-09-04 17:52:18 +02:00
return false ;
}
2014-11-27 01:15:01 +01:00
$psondage = $poll -> FetchObject ( false );
2014-09-04 17:52:18 +02:00
$psondage -> date_fin = strtotime ( $psondage -> date_fin );
return $psondage ;
}
return false ;
}
2014-12-03 14:30:25 +01:00
2014-11-27 01:15:01 +01:00
/**
* Use get_poll_from_id that is fully english name
* @ deprecated
*/
public static function get_sondage_from_id ( $id )
{
2014-12-03 14:30:25 +01:00
return self :: get_poll_from_id ( $id );
}
2014-09-04 17:52:18 +02:00
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 ' <! DOCTYPE html >
< html lang = " '. $lang .' " >
< head >
2014-11-27 01:15:01 +01:00
< meta charset = " utf-8 " /> ' ;
2014-09-04 17:52:18 +02:00
2014-12-03 14:30:25 +01:00
echo '<title>' ;
2014-09-04 17:52:18 +02:00
if ( ! empty ( $title )) {
2014-11-27 01:15:01 +01:00
echo stripslashes ( $title ) . ' - ' ;
2014-09-04 17:52:18 +02:00
}
2014-11-27 01:15:01 +01:00
echo NOMAPPLICATION . '</title>' ;
2014-09-04 17:52:18 +02:00
echo '
2014-11-27 01:15:01 +01:00
< link rel = " stylesheet " href = " ' . self::get_server_name() . 'css/bootstrap.min.css " />
< link rel = " stylesheet " href = " ' . self::get_server_name() . 'css/datepicker3.css " />
< link rel = " stylesheet " href = " ' . self::get_server_name() . 'css/style.css " />
< link rel = " stylesheet " href = " ' . self::get_server_name() . 'css/frama.css " />
< link rel = " stylesheet " href = " ' . self::get_server_name() . 'css/print.css " media = " print " />
2014-09-04 17:52:18 +02:00
< script type = " text/javascript " src = " ' . self::get_server_name() . 'js/jquery-1.11.1.min.js " ></ script >
< script type = " text/javascript " src = " ' . self::get_server_name() . 'js/bootstrap.min.js " ></ script >
< script type = " text/javascript " src = " ' . self::get_server_name() . 'js/bootstrap-datepicker.js " ></ script >
< script type = " text/javascript " src = " ' . self::get_server_name() . 'js/locales/bootstrap-datepicker.'. $lang .'.js " ></ script >
< script type = " text/javascript " src = " ' . self::get_server_name() . 'js/core.js " ></ script > ' ;
if ( file_exists ( $_SERVER [ 'DOCUMENT_ROOT' ] . " /nav/nav.js " )) {
echo '<script src="/nav/nav.js" id="nav_js" type="text/javascript" charset="utf-8"></script><!-- /Framanav -->' ;
}
echo '
</ head >
< body >
2014-10-21 01:31:26 +02:00
< div class = " container ombre " > ' ;
2014-09-04 17:52:18 +02:00
}
public static function check_table_sondage ()
{
global $connect ;
2014-11-27 01:15:01 +01:00
return in_array ( 'sondage' , $connect -> MetaTables ( 'TABLES' ));
2014-09-04 17:52:18 +02:00
}
/**
* 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 {
2014-10-21 01:31:26 +02:00
$replyTo = ADRESSEMAILREPONSEAUTO ;
2014-09-04 17:52:18 +02:00
}
$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 " ;
2014-11-06 15:37:03 +01:00
$headers .= " Content-Transfer-Encoding: 8bit \n " ;
$headers .= " Auto-Submitted:auto-generated \n " ;
2014-11-27 01:15:01 +01:00
$headers .= 'Return-Path: <>' ;
2014-09-04 17:52:18 +02:00
2014-12-03 14:30:25 +01:00
$body = html_entity_decode ( $body , ENT_QUOTES , 'UTF-8' ) . " \n -- \n \n " . _ ( '« La route est longue, mais la voie est libre… »' ) . " \n " . _ ( 'Framasoft ne vit que par vos dons (déductibles des impôts).' ) . " \n " . _ ( 'Merci d’ avance pour votre soutien http://soutenir.framasoft.org.' );
2014-09-04 17:52:18 +02:00
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
2014-11-27 01:15:01 +01:00
* @ param array $table Le tableau où rechercher la clé ( $_POST par défaut )
2014-09-04 17:52:18 +02:00
* @ return bool Vrai si la clé existe et renvoie une valeur non vide
*/
2014-11-27 01:15:01 +01:00
public static function issetAndNoEmpty ( $name , $table = null )
2014-09-04 17:52:18 +02:00
{
2014-11-27 01:15:01 +01:00
if ( is_null ( $table )) {
$table = $_POST ;
2014-09-04 17:52:18 +02:00
}
2014-11-27 01:15:01 +01:00
return isset ( $table [ $name ]) && ! empty ( $table [ $name ]);
2014-09-04 17:52:18 +02:00
}
/**
* 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 ) {
2014-11-27 01:15:01 +01:00
return str_replace ( '/admin' , '' , self :: get_server_name ()) . $id . '/admin' ;
2014-09-04 17:52:18 +02:00
} else {
2014-11-27 01:15:01 +01:00
return str_replace ( '/admin' , '' , self :: get_server_name ()) . $id ;
2014-09-04 17:52:18 +02:00
}
} else {
if ( $admin === true ) {
2014-11-27 01:15:01 +01:00
return str_replace ( '/admin' , '' , self :: get_server_name ()) . 'adminstuds.php?sondage=' . $id ;
2014-09-04 17:52:18 +02:00
} else {
2014-11-27 01:15:01 +01:00
return str_replace ( '/admin' , '' , self :: get_server_name ()) . 'studs.php?sondage=' . $id ;
2014-09-04 17:52:18 +02:00
}
}
}
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 ;
}
2014-12-03 14:30:25 +01:00
/**
* @ param $connect
* @ param $log_txt
* @ return void
*/
2014-09-04 17:52:18 +02:00
public static function cleaning_polls ( $connect , $log_txt ) {
$connect -> StartTrans ();
2014-12-03 18:39:01 +01:00
$req = 'SELECT * FROM sondage WHERE date_fin < NOW() && date_fin != 0 LIMIT 20' ;
2014-09-04 17:52:18 +02:00
$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 ();
}
}