This commit updates the promoteur hub functionality by introducing a new function, `fxPromoteurHubIsAvailable`, to streamline the logic for determining hub access. The existing `fxPromoteurHubShouldUse` function is modified to incorporate this new check, improving clarity and maintainability. Additionally, comments are added to clarify session handling in the `fxLoginCompte` function, ensuring better understanding of public login behavior. These changes aim to enhance the robustness of the promoteur hub interface and improve code readability.
1401 lines
46 KiB
PHP
1401 lines
46 KiB
PHP
<?php
|
||
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/..') . '/');
|
||
|
||
require_once('inc_settings.php');
|
||
require_once('inc_mysql.php');
|
||
require_once('inc_dates.php');
|
||
require_once('inc_files.php');
|
||
require_once('inc_manager.php');
|
||
error_reporting(E_ALL);
|
||
ini_set("display_errors", 0);
|
||
global $arrConDatabasePreProd,$arrConDatabasecrm;
|
||
$db = $objDatabase = new clsMysql($GLOBALS['arrConDatabaseMain']);
|
||
$db_prod = $objDatabaseProd = new clsMysql($GLOBALS['arrConDatabaseProd']);
|
||
|
||
$objDatabasePreProd= new clsMysql($arrConDatabasePreProd);
|
||
$objDatabasecrm=new clsMysql($arrConDatabasecrm);
|
||
|
||
// fonction qui détermine le url de retour (JSP)
|
||
// créé : 2012-07-02
|
||
function fxGetReferer()
|
||
{
|
||
$url_retour = $GLOBALS['vDomaine'] . '/superadm/index.php';
|
||
$dom = parse_url($GLOBALS['vDomaine']);
|
||
|
||
if ($_SERVER['HTTP_REFERER'] != '') {
|
||
$ref = parse_url($_SERVER['HTTP_REFERER']);
|
||
|
||
if (strpos($ref['host'], $dom['host']) !== false)
|
||
$url_retour = $_SERVER['HTTP_REFERER'];
|
||
}
|
||
|
||
return $url_retour;
|
||
}
|
||
|
||
// fonction qui ajoute ou modifie les choix checkbox associé à une autre table
|
||
// param: type (add ou mod), nom de la table, champ lié, valeur du champ lié, champ 2, valeurs du champ 2, anciennes valeurs du champ 2
|
||
function fxSetCheckboxes($type, $table, $link, $link_value, $field, $values, $values_old) {
|
||
switch ($type) {
|
||
case 'add':
|
||
if (isset($values)) {
|
||
foreach ($values as $id) {
|
||
$sqlInsert = "INSERT INTO " . $table . "(" . $link . ", " . $field . ") VALUES(" . intval($link_value) . ", " . intval($id) . ")";
|
||
$qryInsert = $GLOBALS['db_blog']->fxQuery($sqlInsert);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 'mod':
|
||
if (isset($values)) {
|
||
$values_old1 = explode(',', $values_old);
|
||
|
||
foreach ($values as $id) {
|
||
// si c'est un nouvel item
|
||
if (!in_array($id, $values_old1)) {
|
||
$sqlInsert = "INSERT INTO " . $table . "(" . $link . ", " . $field . ") VALUES(" . intval($link_value) . ", " . intval($id) . ")";
|
||
$qryInsert = $GLOBALS['db_blog']->fxQuery($sqlInsert);
|
||
}
|
||
}
|
||
|
||
// vérifier si on doit en supprimer
|
||
if ($values_old != '') {
|
||
foreach ($values_old1 as $id) {
|
||
// si il existait avant, et plus maintenant
|
||
if (!in_array($id, $values)) {
|
||
$sqlDelete = "DELETE FROM " . $table . " WHERE " . $link . " = " . intval($link_value) . " AND " . $field . " = " . intval($id);
|
||
$qryDelete = mysql_query($sqlDelete);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
elseif ($values_old != '') {
|
||
$sqlDelete = "DELETE FROM " . $table . " WHERE " . $link . " = " . intval($link_value);
|
||
$qryDelete = mysql_query($sqlDelete);
|
||
}
|
||
}
|
||
}
|
||
|
||
// fonction qui va cherdcher les étiquettes dans la bdd
|
||
// param : page, table, langue
|
||
/* function fxGetLabels($strPage, $strTable, $strLangue)
|
||
{
|
||
$sqlLabel1 = "SELECT info_clef,info_texte,pk_info,'client' as bd FROM info where info_prg='" . $page . "' and info_langue='" . $Langue . "'";
|
||
$tabLabel1 = $GLOBALS['db']->fxFetchArray(3, $sql_info);
|
||
|
||
$sqlLabel2 = "SELECT info_clef,info_texte,'centrale' as bd FROM info where info_prg='" . $page . "' and info_langue='" . $Langue . "'";
|
||
$tabLabel2 = $GLOBALS['db']->fxFetchArray(3, $sql_info);
|
||
|
||
$info = array_merge($info1, $info2);
|
||
} */
|
||
|
||
// MOT DE PASSE PERDU
|
||
function fxCourrielPerdu() {
|
||
$sqlPerdu = "SELECT * FROM usagers WHERE usa_courriel = '" . $GLOBALS['db']->fxEscape($_POST['courriel']) . "' AND usa_actif = 1";
|
||
$recPerdu = $GLOBALS['db']->fxGetRow($sqlPerdu);
|
||
|
||
if ($recPerdu != null)
|
||
$perdu = -1;
|
||
else {
|
||
require_once('mailer/class.phpmailer.php');
|
||
//include("mailer/class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded
|
||
|
||
$mail = new PHPMailer();
|
||
$body = "Bonjour " . $recPerdu['usa_prenom'] . ",\n\nsuite à votre demande, voici vos informations de connexion à l'administration de " . $GLOBALS['vClient'] . ":\n\nNom d'usager: " . $recPerdu['usa_login'] . "\nMot de passe: " . $recPerdu['usa_password'] . "\n\nVeuillez conserver ces informations.\nMerci\n\n\nMessage envoyé automatiquement le: " . fxShowDate(fxGetDate(), 'fr') . " @ " . fxGetTime();
|
||
$mail->SetFrom($GLOBALS['vEmail'], $GLOBALS['vClient']);
|
||
$mail->AddReplyTo($GLOBALS['vEmail'], $GLOBALS['vClient']);
|
||
|
||
$mail->Subject = $GLOBALS['vClient'] . " | Vos informations de connexion";
|
||
|
||
if (filter_var(fxUnescape($_POST['courriel']), FILTER_VALIDATE_EMAIL)) {
|
||
$mail->Body = $body;
|
||
$mail->AddAddress(fxUnescape($_POST['courriel']), fxUnescape($recPerdu['usa_prenom']) . ' ' . fxUnescape($recPerdu['usa_nom']));
|
||
|
||
if(!$mail->Send())
|
||
$error = 1;
|
||
else
|
||
$error = 0;
|
||
|
||
// Clear all addresses and attachments for next loop
|
||
$mail->ClearAddresses();
|
||
$mail->ClearAttachments();
|
||
}
|
||
|
||
if ($error == 0)
|
||
return 1;
|
||
else
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
// fonction pour formatter une valeur sous la forme $ 9,999.99
|
||
function fxShowMoney($value, $lang) {
|
||
if ($lang == 'fr') {
|
||
$value = number_format($value, 2, ',', ' ') . ' $';
|
||
}
|
||
else {
|
||
$value = '$ ' . number_format($value, 2, '.', ',');
|
||
}
|
||
|
||
return $value;
|
||
}
|
||
|
||
// fonction pour creer un log
|
||
// param : message
|
||
// créé: 2014-06-2
|
||
function fxcreer_log($strDescription, $intType = 10, $int_Email = 0, $int_eve_id = 0, $int_epr_id = 0, $int_pra_id = 0, $str_no_panier = '', $int_com_id = 0, $str_com_courriel = '') {
|
||
//function fxcreer_log($strDescription, $intType = 10, $int_Email = 0, $int_eve_id = 0, $int_epr_id = 0, $int_pra_id = 0, $str_no_panier = '', $int_com_id = 0) {
|
||
if (isset($_SESSION['com_id']))
|
||
$int_com_id = $_SESSION['com_id'];
|
||
if (isset($_SESSION['no_panier']))
|
||
$str_no_panier = $_SESSION['no_panier'];
|
||
|
||
$sqlInsert = "INSERT INTO inscriptions_log SET log_description = '" . $strDescription . "', log_email = " . $int_Email . ", log_type = " . $intType . ", eve_id = " . $int_eve_id . ", epr_id = " . $int_epr_id . ", pra_id = " . $int_pra_id . ", no_panier = '" . $str_no_panier . "', log_time = NOW(), com_id = " . $int_com_id . ", log_prg = '" . $GLOBALS['vPage'] . "', log_com_courriel = '" . $str_com_courriel . "'";
|
||
$qryInsert = $GLOBALS['db']->fxQuery($sqlInsert);
|
||
|
||
return(true);
|
||
}
|
||
|
||
// fonction envoi un courriel (JSP)
|
||
// param : sujet, corps du message, courriel destinataire, nom destinataire, courriel expéditeur, nom expéditeur, smtp (oui/non), html (oui/non)
|
||
// retourne : vrai ou faux
|
||
function fxSendMail($subject, $body, $to_mail, $to_name, $from_mail, $from_name, $smtp, $html) {
|
||
require_once('../mailer/class.phpmailer.php');
|
||
|
||
$mail = new PHPMailer();
|
||
|
||
if ($smtp == 1) {
|
||
$mail->IsSMTP();
|
||
$mail->SMTPAuth = true;
|
||
$mail->SMTPKeepAlive = true;
|
||
$mail->Host = "pop.progiweb.ca";
|
||
$mail->Port = 25;
|
||
$mail->Username = "send@progiweb.ca";
|
||
$mail->Password = "progiwebsend";
|
||
}
|
||
|
||
$mail->CharSet = "UTF-8";
|
||
$mail->SetFrom($GLOBALS['vEmail'], fxRemoveHtml($GLOBALS['vClient']));
|
||
$mail->AddReplyTo($from_mail, $from_name);
|
||
$mail->Subject = fxRemoveHtml($GLOBALS['vClient']) . " | " . $subject;
|
||
|
||
if (filter_var($to_mail, FILTER_VALIDATE_EMAIL)) {
|
||
if ($html == 1)
|
||
$mail->MsgHTML($body);
|
||
else
|
||
$mail->Body = $body;
|
||
|
||
$mail->AddAddress($to_mail, $to_name);
|
||
|
||
if (!$mail->Send())
|
||
$error = 1;
|
||
else
|
||
$error = 0;
|
||
|
||
// Clear all addresses and attachments for next loop
|
||
$mail->ClearAddresses();
|
||
$mail->ClearAttachments();
|
||
}
|
||
|
||
if ($error == 0)
|
||
return true;
|
||
else
|
||
return false;
|
||
}
|
||
|
||
// fonction qui enlève les tags html (JSP)
|
||
// param : string
|
||
// créé : 2012-08-02
|
||
function fxRemoveHtml($string) {
|
||
$string = html_entity_decode($string);
|
||
$string = str_replace("’", "'", $string);
|
||
$string = preg_replace('/\s\s+/', ' ', $string);
|
||
$string = strip_tags($string);
|
||
|
||
return $string;
|
||
}
|
||
|
||
// fonction pour formatter une valeur sous la forme $ 9,999.99
|
||
// param : valeur, langue, format (afficher $ CAD)
|
||
// créé : 2013-03-28
|
||
function fxShowPrix($strValue, $strLangue, $intFormat) {
|
||
if ($strLangue == 'fr') {
|
||
$strValue = number_format($strValue, 2, ',', ' ');
|
||
|
||
if ($intFormat == 1)
|
||
$strValue .= ' $';
|
||
}
|
||
else {
|
||
$strValue = number_format($strValue, 2, '.', ',');
|
||
|
||
if ($intFormat == 1)
|
||
$strValue = '$ ' . $strValue;
|
||
}
|
||
|
||
return $strValue;
|
||
}
|
||
|
||
// trouve la valeur d'une variable de la bdd
|
||
function fxGetVariable($strVarNom) {
|
||
global $db;
|
||
|
||
$sqlVariable = "SELECT var_valeur FROM variables WHERE var_nom = '" . $db->fxEscape($strVarNom) . "'";
|
||
$strVarValeur = $db->fxGetVar($sqlVariable);
|
||
|
||
return $strVarValeur;
|
||
}
|
||
|
||
/** @see php/inc_fonctions.php fxPromoteurLegacySiteEnabled */
|
||
function fxPromoteurLegacySiteEnabled()
|
||
{
|
||
static $blnEnabled = null;
|
||
|
||
if ($blnEnabled !== null) {
|
||
return $blnEnabled;
|
||
}
|
||
|
||
global $db;
|
||
|
||
if (!isset($db)) {
|
||
$blnEnabled = true;
|
||
return $blnEnabled;
|
||
}
|
||
|
||
$strVal = fxGetVariable('promoteur_legacy_actif');
|
||
$blnEnabled = ($strVal === null || $strVal === '' || intval($strVal) === 1);
|
||
|
||
return $blnEnabled;
|
||
}
|
||
function print_mem() {
|
||
/* Currently used memory */
|
||
$mem_usage = memory_get_usage();
|
||
|
||
/* Peak memory usage */
|
||
$mem_peak = memory_get_peak_usage();
|
||
|
||
echo 'The script is now using: <strong>' . round($mem_usage / 1024) . 'KB</strong> of memory.<br>';
|
||
echo 'Peak usage: <strong>' . round($mem_peak / 1024) . 'KB</strong> of memory.<br><br>';
|
||
}
|
||
|
||
/**
|
||
* Description : retourner le texte correspondan a la clef si il a été mis en mémoire
|
||
* Parametres : clef
|
||
* mem_echo =1 fait un echo sinon la valeur est retourné
|
||
* $mem_trduction lest admin on un bouton pour correction
|
||
* $mem_global=0 si 1 vas créér la variable avec global pas le nom de la page
|
||
* Créateur : stephan
|
||
* Date : 13-03-17
|
||
*/
|
||
function afficheTexte($clef, $mem_echo = 1, $mem_trduction = 1, $mem_global = 0) {
|
||
global $vtexte_page, $vPage;
|
||
$mem_id = "";
|
||
|
||
|
||
if (isset($vtexte_page[$clef]['info_texte']))
|
||
$mem_texte = $vtexte_page[$clef]['info_texte'];
|
||
else {
|
||
$mem_texte = '*' . $clef . '*';
|
||
|
||
if ($mem_global == 0)
|
||
$mem_page = $vPage;
|
||
else
|
||
$mem_page = "global";
|
||
|
||
// creation dans la bd info
|
||
$info1 = array("info_clef" => $clef, "info_langue" => "fr", "info_texte" => $clef, "info_prg" => $mem_page, "info_actif" => 1);
|
||
fxSetInfo('add', $info1, '', $mem_id);
|
||
|
||
$info1 = array("info_clef" => $clef, "info_langue" => "en", "info_texte" => $clef, "info_prg" => $mem_page, "info_actif" => 1);
|
||
fxSetInfo('add', $info1, '', $mem_id);
|
||
}
|
||
|
||
if ($mem_echo == 1)
|
||
echo $mem_texte;
|
||
|
||
return $mem_texte;
|
||
}
|
||
|
||
/**
|
||
* Description : lire le text dans la bd info
|
||
* Parametres : 1 - page
|
||
* 2 - langue A,F
|
||
* optionelle 3- 1 va chercher bd client en premier et centrale en deuxiemme (default)
|
||
* 2 jutse bd client
|
||
* 3 juste bd centrale
|
||
* Créateur : stephan
|
||
* Date : 13-03-15
|
||
*/
|
||
function obtenirTextepage() {
|
||
global $objDatabase;
|
||
|
||
$numargs = func_num_args();
|
||
$arg_list = func_get_args();
|
||
$page = $arg_list[0];
|
||
$Langue = $arg_list[1];
|
||
$centrale = $mem_corr = "";
|
||
$info = null;
|
||
|
||
if (array_key_exists(2, $arg_list)) {
|
||
$centrale = $arg_list[2];
|
||
}
|
||
|
||
|
||
switch ($centrale) {
|
||
case 3:
|
||
$sql_info = "SELECT info_clef,info_texte,pk_info,info_prg,'centrale' as bd FROM info where info_prg='" . $page . "' and info_langue='" . $Langue . "'";
|
||
$info = $GLOBALS['dbcentrale']->fxFetchArray(3, $sql_info);
|
||
break;
|
||
case 2:
|
||
$sql_info = "SELECT info_clef,info_texte,pk_info,info_prg,'client' as bd FROM info where (info_prg='" . $page . "' or info_prg='global') and info_langue='" . $Langue . "'";
|
||
|
||
$info = $objDatabase->fxFetchArray(3, $sql_info);
|
||
|
||
break;
|
||
case 1:
|
||
$sql_info = "SELECT info_clef,info_texte,pk_info,'client' as bd FROM info where info_prg='" . $page . "' and info_langue='" . $Langue . "'";
|
||
$info2 = $objDatabase->fxFetchArray(3, $sql_info);
|
||
|
||
$sql_info = "SELECT info_clef,info_texte,'centrale' as bd FROM info where info_prg='" . $page . "' and info_langue='" . $Langue . "'";
|
||
$info1 = $objDatabase->fxFetchArray(3, $sql_info);
|
||
$info = array_merge($info1, $info2);
|
||
break;
|
||
}
|
||
|
||
return $info;
|
||
}
|
||
|
||
/**
|
||
* Description : affiche le bouton modi texte et hide les textclef
|
||
* Parametres :
|
||
* Créateur : stephan
|
||
* Date : 13-03-22
|
||
*/
|
||
function modif_texte_bt() {
|
||
global $vadmin_texte;
|
||
if ($vadmin_texte == true)
|
||
echo "<button onclick=" . chr(34) . "toggle_hideme('modif_texte','text');" . chr(34) . ">changer texte</button>";
|
||
}
|
||
|
||
/**
|
||
* Description : Fonction pour ajouter le value dans une formes
|
||
* Parametres : $mem_champ nom du champs ,$mem_defaut,$mem_type add ou mod ,$mem_infos tableau des info
|
||
* Créateur : stephan
|
||
* Date : 13-04-20
|
||
*/
|
||
function fxFormFieldInfo($mem_champ, $mem_type, $mem_infos, $mem_defaut = "", $mem_array = 0) {
|
||
if ($mem_array == 0)
|
||
$mem_value = 'id="' . $mem_champ . '" name="' . $mem_champ . '"';
|
||
else
|
||
$mem_value = 'id="info['.$mem_array.'][' . $mem_champ . ']" name="info['.$mem_array.'][' . $mem_champ . ']"';
|
||
|
||
switch ($mem_type) {
|
||
// AJOUT
|
||
case 'add':
|
||
if (trim($mem_defaut != ''))
|
||
$mem_value = $mem_value . ' value="' . $mem_defaut . '"';
|
||
break;
|
||
case 'mod':
|
||
case 'checkout':
|
||
$mem_value = $mem_value . ' value="' . $mem_infos[$mem_champ] . '"';
|
||
break;
|
||
}
|
||
|
||
return $mem_value;
|
||
}
|
||
|
||
function fxFormFieldCheck($mem_champ, $mem_type, $mem_infos, $mem_valide, $mem_defaut = "",$mem_action="") {
|
||
$mem_value = '';
|
||
|
||
switch ($mem_type) {
|
||
// AJOUT
|
||
case 'add':
|
||
if (trim($mem_defaut != ''))
|
||
$mem_value = 'checked="checked"';
|
||
break;
|
||
case 'mod':
|
||
case 'checkout':
|
||
if($mem_action=="mod")
|
||
{
|
||
if ($mem_infos[$mem_champ] == $mem_valide)
|
||
$mem_value = 'checked';
|
||
else
|
||
$mem_value = 'disabled';
|
||
}else{
|
||
if ($mem_infos[$mem_champ] == $mem_valide)
|
||
$mem_value = 'checked="checked"';
|
||
|
||
}
|
||
|
||
break;
|
||
}
|
||
|
||
return $mem_value;
|
||
}
|
||
|
||
function fxFormFieldChecklist($mem_champ, $mem_type, $mem_infos, $mem_valide, $mem_defaut) {
|
||
$mem_value = '';
|
||
|
||
switch ($mem_type) {
|
||
// AJOUT
|
||
case 'add':
|
||
case 'addaffilie':
|
||
if ($mem_defaut == $mem_valide)
|
||
$mem_value = 'selected="selected"';
|
||
break;
|
||
case 'mod':
|
||
case 'checkout':
|
||
if ($mem_infos[$mem_champ] == $mem_valide)
|
||
$mem_value = 'selected="selected"';
|
||
break;
|
||
}
|
||
|
||
return $mem_value;
|
||
}
|
||
|
||
function fxSetInfo($strAction, $tabData, $strLangue, $id = 0) {
|
||
global $objDatabase;
|
||
$_SESSION['msg'] = "";
|
||
|
||
switch ($strAction) {
|
||
// AJOUT
|
||
case 'add':
|
||
// former le INSERT
|
||
$tabFieldsValues = fxListFieldsValues($tabData, 'pk_info', 'info', $GLOBALS['arrConDatabaseMain']['db']);
|
||
// vérifie si le info existe
|
||
$sqlValide = "SELECT COUNT(info_clef) from info where info_clef='" . $tabData['info_clef'] . "' and info_prg='" . $tabData['info_prg'] . "' and info_langue='".$tabData['info_langue']."'";
|
||
$nbValide = $objDatabase->fxGetVar($sqlValide);
|
||
if ($nbValide > 0) {
|
||
break;
|
||
}
|
||
// insérer les infos du participants
|
||
$sqlInsert = "INSERT INTO info " . $tabFieldsValues['set'] . ',info_creation=now()';
|
||
$qryInsert = $objDatabase->fxQuery($sqlInsert);
|
||
// récupérer le id ajouté
|
||
$intCompte = $objDatabase->fxGetLastId();
|
||
// $_SESSION['com_id'] = $intCompte;
|
||
break;
|
||
|
||
// MODIFICATION
|
||
case 'mod':
|
||
$tabFieldsValues = fxListFieldsValues($tabData, 'pk_info', 'info', $GLOBALS['arrConDatabaseMain']['db']);
|
||
// verification des champs obligatoire
|
||
// update les infos
|
||
$sqlUpdate = "UPDATE info " . $tabFieldsValues['set'] . ",info_maj=now() where ". $tabFieldsValues['key'];
|
||
$qryUpdate = $objDatabase->fxQuery($sqlUpdate);
|
||
// définir le message à affiche
|
||
break;
|
||
|
||
// SUPPRESSION
|
||
case 'del':
|
||
/* PLUS TARD
|
||
$sqlDelete = "DELETE FROM ".$bd." WHERE ".$memid." = " . intval($id);
|
||
$qryDelete = $objDatabase->fxQuery($sqlDelete); */
|
||
}
|
||
}
|
||
|
||
function afficheTexteReplace($mem_tab_replace, $mem_texte) {
|
||
foreach ($mem_tab_replace as $key => $value)
|
||
$mem_texte=str_replace($key, $value, $mem_texte);
|
||
|
||
return $mem_texte;
|
||
}
|
||
|
||
// fonction qui retourne les infos des champs de la table (SL / JSP)
|
||
// param : nom de la table, nom de la base de données
|
||
// créé : 2013-04-10
|
||
function fxGetFileds($strTable, $strBdd) {
|
||
global $objDatabase;
|
||
|
||
$sqlFields = "SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM information_schema.COLUMNS WHERE TABLE_NAME = '" . $objDatabase->fxEscape($strTable) . "' AND TABLE_SCHEMA = '" . $objDatabase->fxEscape($strBdd) . "'";
|
||
$recFields = $objDatabase->fxGetResultsKey($sqlFields);
|
||
|
||
return $recFields;
|
||
}
|
||
function conf_getFiltreData($usa_id,$page,$var,$vardefault,$update=0,$typenum=1)
|
||
{
|
||
// list la bb client
|
||
$sqlsortie = "SELECT * FROM usa_filtre WHERE fil_usa_id = '" . $usa_id . "' AND fil_page = '" . $page . "' AND fil_var = '" . $var . "' ";
|
||
$sortie = $GLOBALS['db']->fxGetRow($sqlsortie);
|
||
|
||
if ($sortie==null){
|
||
|
||
|
||
|
||
$sqlInsert = "INSERT INTO usa_filtre SET fil_usa_id = '" . $usa_id . "', fil_page = '" . $page . "', fil_var = '" . $var . "', fil_value = '" . $vardefault."'" ;
|
||
$qryInsert = $GLOBALS['db']->fxQuery($sqlInsert);
|
||
|
||
$mem_return=$vardefault;
|
||
}else{
|
||
|
||
if ($update==1){
|
||
$sqlInsert = "update usa_filtre SET fil_value = '" . $vardefault."' WHERE fil_usa_id = '" . $usa_id . "' AND fil_page = '" . $page . "' AND fil_var = '" . $var . "' ";
|
||
$qryInsert = $GLOBALS['db']->fxQuery($sqlInsert);
|
||
|
||
$mem_return=$vardefault;
|
||
}else{
|
||
$mem_return=$sortie['fil_value'];
|
||
}
|
||
}
|
||
|
||
if ($typenum==0)
|
||
$mem_return='"'.$mem_return.'"';
|
||
return $mem_return;
|
||
|
||
|
||
}
|
||
// fonction qui compose le SQL pour les INSERT et UPDATE
|
||
// param : tableau des données, nom de la clé (PK), nom de la table, nom de la base de données
|
||
// créé : 2013-04-10
|
||
function fxListFieldsValues($tabData, $strKey, $strTable, $strBdd) {
|
||
global $objDatabase;
|
||
$tabFields = fxGetFileds($strTable, $strBdd);
|
||
$mem_set = "SET ";
|
||
$xvide = 0;
|
||
$listvide = "";
|
||
$mem_id = "";
|
||
|
||
foreach (array_keys($tabData) as $strField) {
|
||
$listvide[$xvide] = $strField;
|
||
$xvide += 1;
|
||
|
||
if (strstr($strField, 'btn') === false) {
|
||
if ($strField == $strKey)
|
||
$mem_id = $strField . " = " . intval($tabData[$strField]);
|
||
else {
|
||
if (isset($tabFields[$strField]['DATA_TYPE'])) {
|
||
switch ($tabFields[$strField]['DATA_TYPE']) {
|
||
case 'char':
|
||
case 'varchar':
|
||
case 'text':
|
||
case 'date':
|
||
$mem_set = $mem_set . $strField . " = '" . $objDatabase->fxEscape($tabData[$strField]) . "', ";
|
||
break;
|
||
case 'tinyint':
|
||
case 'int':
|
||
case 'smallint':
|
||
case 'mediumint':
|
||
case 'bigint':
|
||
$mem_set = $mem_set . $strField . " = " . intval($tabData[$strField]) . ", ";
|
||
break;
|
||
case 'double':
|
||
case 'float':
|
||
$mem_set = $mem_set . $strField . " = " . floatval($tabData[$strField]) . ", ";
|
||
break;
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
// enlever la virgule de trop et mettre dans le tableau à l'index 'set'
|
||
$memreturn['set'] = substr($mem_set, 0, -2);
|
||
|
||
// mettre dans le tableau à l'index 'key'
|
||
$memreturn['key'] = $mem_id;
|
||
// mettre dans le tableau les champs pas vide 'vide'
|
||
$memreturn['pasvide'] = $listvide;
|
||
|
||
return $memreturn;
|
||
}
|
||
|
||
|
||
function fx_copy_tout($sourceDir,$destinationDir){
|
||
// Crée le dossier de destination s'il n'existe pas
|
||
// echo($sourceDir);
|
||
if (!is_dir($destinationDir)) {
|
||
mkdir($destinationDir, 0755, true);
|
||
}
|
||
|
||
// Utilisez glob() pour récupérer tous les fichiers correspondant à *.*
|
||
$files = glob($sourceDir . '*.*');
|
||
|
||
foreach ($files as $file) {
|
||
$fileName = basename($file); // Récupère uniquement le nom du fichier
|
||
$destination = $destinationDir . $fileName;
|
||
|
||
if (copy($file, $destination)) {
|
||
|
||
} else {
|
||
$error = error_get_last();
|
||
error_log("Détails de l'erreur : " . $error['message']);
|
||
error_log( "Échec de la copie pour le fichier $fileName.");
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
function fxDuplicateRow($table, $id, $primaryKey, $updates = []) {
|
||
// Étape 1 : Récupérer l'enregistrement original
|
||
$sqlSelect = "SELECT * FROM $table WHERE $primaryKey = $id";
|
||
$originalRow = $GLOBALS['db']->fxGetRow($sqlSelect);
|
||
|
||
if (!$originalRow) {
|
||
return false; // Enregistrement non trouvé
|
||
}
|
||
|
||
// Étape 2 : Construire une requête d'insertion
|
||
unset($originalRow[$primaryKey]); // Retirer la clé primaire (auto-incrémentée)
|
||
foreach ($updates as $column => $value) {
|
||
$originalRow[$column] = $value; // Appliquer les mises à jour
|
||
}
|
||
|
||
// Générer les colonnes et les valeurs pour l'INSERT
|
||
$columns = array_keys($originalRow);
|
||
$values = array_map([$GLOBALS['db'], 'fxEscape'], array_values($originalRow));
|
||
|
||
$sqlInsert = "
|
||
INSERT INTO $table (" . implode(', ', $columns) . ")
|
||
VALUES ('" . implode("', '", $values) . "')
|
||
";
|
||
|
||
// Étape 3 : Exécuter la requête d'insertion
|
||
$GLOBALS['db']->fxQuery($sqlInsert);
|
||
|
||
// Retourner l'ID de la nouvelle ligne
|
||
return $GLOBALS['db']->fxGetLastId();
|
||
}
|
||
function print_rsl($arr){
|
||
?>
|
||
<pre>
|
||
<?php
|
||
print_r($arr);
|
||
?>
|
||
</pre>
|
||
<?php
|
||
}
|
||
// php version 8
|
||
function fxcountpatch($table){
|
||
|
||
$sortie= (is_array($table) ? count($table) : 0);
|
||
return $sortie;
|
||
}
|
||
|
||
function echosl($string)
|
||
{
|
||
|
||
echo($string);
|
||
echo("<br>");
|
||
}
|
||
function fxcopieevenementv1($eve_id_source)
|
||
{
|
||
$db = $GLOBALS['db'];
|
||
|
||
// 1. Lire l'événement source
|
||
$sql = "SELECT * FROM inscriptions_evenements WHERE eve_id = $eve_id_source";
|
||
$row = $db->fxGetRow($sql);
|
||
|
||
if (!$row) {
|
||
// echo "❌ Événement source introuvable.<br>";
|
||
return false;
|
||
}
|
||
|
||
// 2. Modifier les champs
|
||
unset($row['eve_id']);
|
||
$row['eve_nom_fr'] = trim($row['eve_nom_fr']) . ' _copie';
|
||
$row['eve_nom_en'] = trim($row['eve_nom_en']) . ' _copie';
|
||
$row['eve_label_url'] = trim($row['eve_label_url']) . '_copie';
|
||
$row['eve_actif'] = 0;
|
||
$row['prod_update_date'] = date('Y-m-d H:i:s');
|
||
|
||
// 3. INSERT dans inscriptions_evenements
|
||
$columns = array_keys($row);
|
||
$values = array_map([$db, 'fxEscape'], array_values($row));
|
||
|
||
$sqlInsert = "INSERT INTO inscriptions_evenements (" . implode(", ", $columns) . ")
|
||
VALUES ('" . implode("', '", $values) . "')";
|
||
// echo "<pre><strong>🟦 INSERT événement :</strong>\n$sqlInsert</pre>";
|
||
$db->fxQuery($sqlInsert);
|
||
$new_eve_id = $db->fxGetLastId();
|
||
// echo "<strong>✅ Nouvel événement copié avec eve_id : $new_eve_id</strong><br>";
|
||
|
||
// 4. Tables liées à copier
|
||
$tables = [
|
||
['inscriptions_epreuves', 'epr_id'],
|
||
['inscriptions_infos_participants', 'inf_id'],
|
||
['inscriptions_questions', 'que_id'],
|
||
['inscriptions_produits_new', 'pro_id'],
|
||
];
|
||
|
||
// 5. Boucle pour copier chaque table
|
||
foreach ($tables as [$table, $pk]) {
|
||
$sql = "SELECT * FROM $table WHERE eve_id = $eve_id_source";
|
||
$result = $db->fxQuery($sql);
|
||
$copied = 0;
|
||
|
||
while ($row = mysqli_fetch_assoc($result)) {
|
||
unset($row[$pk]); // supprimer l'ID auto
|
||
$row['eve_id'] = $new_eve_id;
|
||
|
||
$columns = array_keys($row);
|
||
$values = array_map([$db, 'fxEscape'], array_values($row));
|
||
|
||
$sqlInsert = "INSERT INTO $table (" . implode(", ", $columns) . ")
|
||
VALUES ('" . implode("','", $values) . "')";
|
||
$db->fxQuery($sqlInsert);
|
||
$copied++;
|
||
}
|
||
|
||
// echo "✔ $copied lignes copiées dans <strong>$table</strong><br>";
|
||
}
|
||
return $new_eve_id ;
|
||
//echo "<strong style='color:green;'>🎉 Duplication complète avec succès.</strong>";
|
||
}
|
||
function fxcopieevenement($eve_id_source)
|
||
{
|
||
$db = $GLOBALS['db'];
|
||
|
||
// 1. Lire l'événement source
|
||
$sql = "SELECT * FROM inscriptions_evenements WHERE eve_id = $eve_id_source";
|
||
$row = $db->fxGetRow($sql);
|
||
if (!$row) return false;
|
||
|
||
// 2. Préparer les données de l'événement
|
||
unset($row['eve_id']);
|
||
$row['eve_nom_fr'] = trim($row['eve_nom_fr']) . ' _copie';
|
||
$row['eve_nom_en'] = trim($row['eve_nom_en']) . ' _copie';
|
||
$row['eve_label_url'] = trim($row['eve_label_url']) . '_copie';
|
||
$row['eve_actif'] = 0;
|
||
$row['prod_update_date'] = date('Y-m-d H:i:s');
|
||
|
||
// 3. INSERT dans inscriptions_evenements
|
||
$columns = array_keys($row);
|
||
$values = array_map([$db, 'fxEscape'], array_values($row));
|
||
$sqlInsert = "INSERT INTO inscriptions_evenements (" . implode(", ", $columns) . ")
|
||
VALUES ('" . implode("', '", $values) . "')";
|
||
$db->fxQuery($sqlInsert);
|
||
$new_eve_id = $db->fxGetLastId();
|
||
|
||
// 4. Copier les tables liées
|
||
|
||
// ['inscriptions_rabais', 'rab_id', null],
|
||
$tables = [
|
||
['inscriptions_epreuves', 'epr_id', 'epr_id_old'],
|
||
['inscriptions_infos_participants', 'inf_id', null],
|
||
['inscriptions_questions', 'que_id', null],
|
||
['inscriptions_produits_new', 'pro_id', 'pro_id_old'],
|
||
];
|
||
|
||
foreach ($tables as [$table, $pk, $old_id_field]) {
|
||
$sql = "SELECT * FROM $table WHERE eve_id = $eve_id_source";
|
||
$result = $db->fxQuery($sql);
|
||
|
||
while ($row = mysqli_fetch_assoc($result)) {
|
||
$old_id = $row[$pk];
|
||
unset($row[$pk]);
|
||
|
||
if ($old_id_field) {
|
||
$row[$old_id_field] = $old_id;
|
||
}
|
||
|
||
$row['eve_id'] = $new_eve_id;
|
||
|
||
$columns = array_keys($row);
|
||
$values = array_map([$db, 'fxEscape'], array_values($row));
|
||
|
||
$sqlInsert = "INSERT INTO $table (" . implode(", ", $columns) . ")
|
||
VALUES ('" . implode("','", $values) . "')";
|
||
$db->fxQuery($sqlInsert);
|
||
}
|
||
}
|
||
|
||
// 5. Mise à jour des champs questions_epreuves_incluses
|
||
$sql = "SELECT * FROM inscriptions_questions WHERE eve_id = $new_eve_id";
|
||
$result = $db->fxQuery($sql);
|
||
|
||
while ($row = mysqli_fetch_assoc($result)) {
|
||
$que_id = $row['que_id'];
|
||
$liste_epreuves = $row['que_epreuves_incluses'];
|
||
if (empty($liste_epreuves)) continue;
|
||
$ids = explode(',', $liste_epreuves);
|
||
$nouvelle_liste = [];
|
||
|
||
foreach ($ids as $id) {
|
||
$id = trim($id);
|
||
|
||
if ($id === '' || $id === '0') {
|
||
$nouvelle_liste[] = $id;
|
||
continue;
|
||
}
|
||
|
||
$sqlFind = "SELECT epr_id FROM inscriptions_epreuves
|
||
WHERE eve_id = $new_eve_id AND epr_id_old = " . intval($id);
|
||
$resFind = $db->fxQuery($sqlFind);
|
||
|
||
if (mysqli_num_rows($resFind) === 1) {
|
||
$rowEpr = mysqli_fetch_assoc($resFind);
|
||
$nouvelle_liste[] = $rowEpr['epr_id'];
|
||
} else {
|
||
$nouvelle_liste[] = $id;
|
||
}
|
||
}
|
||
|
||
$nouvelle_valeur = implode(',', $nouvelle_liste);
|
||
|
||
if ($nouvelle_valeur !== $liste_epreuves) {
|
||
$escaped_val = $db->fxEscape($nouvelle_valeur);
|
||
$update_sql = "UPDATE inscriptions_questions
|
||
SET que_epreuves_incluses = '$escaped_val'
|
||
WHERE que_id = $que_id";
|
||
$db->fxQuery($update_sql);
|
||
|
||
|
||
}
|
||
}
|
||
// 5. Mise à jour des champs que_choix_produit
|
||
$sql = "SELECT * FROM inscriptions_questions WHERE eve_id = $new_eve_id";
|
||
$result = $db->fxQuery($sql);
|
||
|
||
while ($row = mysqli_fetch_assoc($result)) {
|
||
$que_id = $row['que_id'];
|
||
$liste_epreuves = $row['que_choix_produit'];
|
||
if (empty($liste_epreuves)) continue;
|
||
$ids = explode(',', $liste_epreuves);
|
||
$nouvelle_liste = [];
|
||
|
||
foreach ($ids as $id) {
|
||
$id = trim($id);
|
||
|
||
if ($id === '' || $id === '0') {
|
||
$nouvelle_liste[] = $id;
|
||
continue;
|
||
}
|
||
|
||
$sqlFind = "SELECT * FROM inscriptions_produits_new
|
||
WHERE eve_id = $new_eve_id AND pro_id_old = " . intval($id);
|
||
$resFind = $db->fxQuery($sqlFind);
|
||
|
||
if (mysqli_num_rows($resFind) === 1) {
|
||
$rowEpr = mysqli_fetch_assoc($resFind);
|
||
$nouvelle_liste[] = $rowEpr['pro_id'];
|
||
} else {
|
||
$nouvelle_liste[] = $id;
|
||
}
|
||
}
|
||
|
||
$nouvelle_valeur = implode(',', $nouvelle_liste);
|
||
|
||
if ($nouvelle_valeur !== $liste_epreuves) {
|
||
$escaped_val = $db->fxEscape($nouvelle_valeur);
|
||
$update_sql = "UPDATE inscriptions_questions
|
||
SET que_choix_produit = '$escaped_val'
|
||
WHERE que_id = $que_id";
|
||
$db->fxQuery($update_sql);
|
||
|
||
}
|
||
}
|
||
|
||
return $new_eve_id;
|
||
}
|
||
function fxgetpromoteurs($eve_id_source)
|
||
{
|
||
$db = $GLOBALS['db'];
|
||
|
||
// 1. Lire l'événement source
|
||
$sql = "SELECT * FROM inscriptions_comptes WHERE FIND_IN_SET('" . $eve_id_source . "', REPLACE(com_eve_promoteur, ' ', '')) > 0;";
|
||
$comptes = $db->fxGetResults($sql);
|
||
//MSIN-4283
|
||
$sql = "
|
||
SELECT DISTINCT TRIM(
|
||
SUBSTRING_INDEX(
|
||
SUBSTRING_INDEX(com_groupe, ',', n.n),
|
||
',', -1
|
||
)
|
||
) AS groupe
|
||
FROM inscriptions_comptes
|
||
JOIN (
|
||
SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL
|
||
SELECT 4 UNION ALL SELECT 5
|
||
) n
|
||
ON n.n <= 1 + LENGTH(com_groupe) - LENGTH(REPLACE(com_groupe, ',', ''))
|
||
WHERE com_groupe <> ''
|
||
ORDER BY groupe
|
||
";
|
||
|
||
$groupes = $db->fxGetResults($sql);
|
||
|
||
?>
|
||
|
||
<!-- Bouton pour ouvrir/fermer -->
|
||
<p>
|
||
<button class="btn btn-secondary" type="button" data-toggle="collapse" data-target="#tableComptes" aria-expanded="false" aria-controls="tableComptes">
|
||
Afficher / Masquer la liste des comptes
|
||
</button>
|
||
</p>
|
||
|
||
<!-- Tableau en mode collapse -->
|
||
<div class="collapse" id="tableComptes">
|
||
|
||
<div id="pick-promoteur" class="position-relative" style="max-width:420px;">
|
||
Ajouter un promoteurs <input type="text" class="form-control" id="pp-email" placeholder="Tapez un e-mail…" autocomplete="off">
|
||
<div id="pp-results" class="list-group mt-1 d-none"
|
||
style="position:absolute; left:0; right:0; z-index:1000; max-height:220px; overflow:auto;"></div>
|
||
|
||
<?php
|
||
//MSIN-4283
|
||
foreach ($groupes as $g) {
|
||
echo '<a href="index.php?action=addpromoteurToGroupe'
|
||
. '&id=' . urlencode($_GET['id'])
|
||
. '&groupe=' . urlencode($g['groupe'])
|
||
. '&t=' . urlencode($_GET['t'])
|
||
. '" class="btn btn-primary">'
|
||
. htmlspecialchars($g['groupe'])
|
||
. '</a> ';
|
||
}
|
||
?>
|
||
</div>
|
||
|
||
<table width="100%" class="table table-striped">
|
||
<thead>
|
||
<tr>
|
||
<th style="text-align: center; width: 20px;">#</th>
|
||
<th style="text-align: left;">Prénom</th>
|
||
<th style="text-align: left;">Nom</th>
|
||
<th style="text-align: left;">Courriel</th>
|
||
<th style="text-align: left;">Téléphone</th>
|
||
<th style="text-align: center; width: 50px;">Effacer</th>
|
||
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<?php foreach ($comptes as $index => $c): ?>
|
||
<tr>
|
||
<td style="text-align: center;"><?= $index ?></td>
|
||
<td><?= htmlspecialchars($c['com_prenom']) ?></td>
|
||
<td><?= htmlspecialchars($c['com_nom']) ?></td>
|
||
<td><?= htmlspecialchars($c['com_courriel']) ?></td>
|
||
<td><?= htmlspecialchars($c['com_telephone1']) ?></td>
|
||
<td style="text-align: center;">
|
||
<a href="index.php?t=<?= urlencode($_GET['t']) ?>&a=mod&id=<?= intval($_GET['id']) ?>&eve_id=<?= intval($_GET['eve_id']) ?>&action=deletepromoteur&promoteur_id=<?=$c['com_id'] ?>"
|
||
class="btn btn-sm btn-danger rounded-0"
|
||
onclick="return confirm('Voulez-vous vraiment effacer cet élément ?');">
|
||
<i class="fa fa-trash"></i>
|
||
</a>
|
||
</td>
|
||
|
||
</tr>
|
||
<?php endforeach; ?>
|
||
</tbody>
|
||
<tfoot>
|
||
<tr>
|
||
<th style="text-align: center;" colspan="7">
|
||
<?= count($comptes) ?> / <?= count($comptes) ?> items
|
||
</th>
|
||
</tr>
|
||
</tfoot>
|
||
</table>
|
||
</div>
|
||
<?php
|
||
|
||
|
||
|
||
}
|
||
|
||
function fxgetevenementpromoteurs($com_eve_promoteur_source,$com_id_source)
|
||
{
|
||
$db = $GLOBALS['db'];
|
||
|
||
$com_eve_promoteur_source = trim((string)$com_eve_promoteur_source);
|
||
$comptes = array();
|
||
|
||
if ($com_eve_promoteur_source !== '') {
|
||
$sql = "SELECT eve_id,eve_nom_fr,eve_date_fin FROM inscriptions_evenements WHERE eve_id IN (".$com_eve_promoteur_source.") order by eve_date_fin DESC;";
|
||
$comptes = $db->fxGetResults($sql);
|
||
if ($comptes === null) {
|
||
$comptes = array();
|
||
}
|
||
}
|
||
|
||
?>
|
||
|
||
|
||
|
||
<!-- Tableau en mode collapse -->
|
||
<div >
|
||
|
||
<div id="pick-evenement">
|
||
<input id="pp-evenement" type="text" class="form-control" placeholder="Rechercher un événement…">
|
||
<div id="pp-results-eve" class="list-group d-none"></div>
|
||
</div>
|
||
|
||
<table width="100%" class="table table-striped">
|
||
<thead>
|
||
<tr>
|
||
<th style="text-align: center; width: 20px;">#</th>
|
||
<th style="text-align: left;">eve_id</th>
|
||
<th style="text-align: left;">Nom</th>
|
||
<th style="text-align: left;">Date fin</th>
|
||
|
||
<th style="text-align: center; width: 50px;">Effacer</th>
|
||
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<?php foreach ($comptes as $index => $c): ?>
|
||
<tr>
|
||
<td style="text-align: center;"><?= $index ?></td>
|
||
<td><?= htmlspecialchars($c['eve_id']) ?></td>
|
||
<td><?= htmlspecialchars($c['eve_nom_fr']) ?></td>
|
||
<td><?= htmlspecialchars($c['eve_date_fin']) ?></td>
|
||
|
||
<td style="text-align: center;">
|
||
<a href="index.php?t=<?= urlencode($_GET['t']) ?>&a=mod&id=<?= intval($_GET['id']) ?>&eve_id=<?= $c['eve_id']; ?>&action=deletepromoteurcompte&promoteur_id=<?=$com_id_source?>"
|
||
class="btn btn-sm btn-danger rounded-0"
|
||
onclick="return confirm('Voulez-vous vraiment effacer cet élément ?');">
|
||
<i class="fa fa-trash"></i>
|
||
</a>
|
||
</td>
|
||
|
||
</tr>
|
||
<?php endforeach; ?>
|
||
</tbody>
|
||
<tfoot>
|
||
<tr>
|
||
<th style="text-align: center;" colspan="7">
|
||
<?= count($comptes) ?> / <?= count($comptes) ?> items
|
||
</th>
|
||
</tr>
|
||
</tfoot>
|
||
</table>
|
||
</div>
|
||
<?php
|
||
|
||
|
||
|
||
}
|
||
function fxDeleteEvenementFromPromoteur($eve_id, $promoteur_id)
|
||
{
|
||
$db = $GLOBALS['db'];
|
||
$eve_id = (int)$eve_id;
|
||
$promoteur_id = (int)$promoteur_id;
|
||
|
||
// 1) Lire la liste actuelle
|
||
$sql = "SELECT com_eve_promoteur
|
||
FROM inscriptions_comptes
|
||
WHERE com_id = $promoteur_id
|
||
LIMIT 1";
|
||
$res = $db->fxQuery($sql);
|
||
|
||
|
||
|
||
if (!$res || mysqli_num_rows($res) === 0) return false;
|
||
|
||
$row = mysqli_fetch_assoc($res);
|
||
$liste = (string)$row['com_eve_promoteur'];
|
||
|
||
// Rien à faire si déjà vide
|
||
if ($liste === '') return true;
|
||
|
||
// 2) Exploser sur la virgule (pas d'espaces dans tes données)
|
||
$ids = explode(',', $liste);
|
||
|
||
// 3) Retirer uniquement $eve_id (comparaison numérique stricte)
|
||
$changed = false;
|
||
$filtered = [];
|
||
foreach ($ids as $id) {
|
||
// On garde les éléments non vides et différents de $eve_id
|
||
if ($id === '') continue;
|
||
if ((int)$id === $eve_id) { $changed = true; continue; }
|
||
$filtered[] = $id; // on conserve tel quel (pas d'espaces à gérer)
|
||
}
|
||
|
||
// Si rien n’a changé, on sort
|
||
if (!$changed) return true;
|
||
|
||
// 4) Reconstituer proprement
|
||
$nouvelleListe = implode(',', $filtered); // donnera "" si plus rien
|
||
|
||
// 5) Sauvegarder (et n’échapper que si non vide)
|
||
$escaped = $db->fxEscape($nouvelleListe);
|
||
$sqlUpdate = "UPDATE inscriptions_comptes
|
||
SET com_eve_promoteur = '$escaped'
|
||
WHERE com_id = $promoteur_id";
|
||
$db->fxQuery($sqlUpdate);
|
||
|
||
return true;
|
||
}
|
||
//MSIN-4283
|
||
function fxAddEvenementToGroupe($eve_id, $nomGroupe)
|
||
{
|
||
$db = $GLOBALS['db'];
|
||
$eve_id = (int)$eve_id;
|
||
$nomGroupe = trim($nomGroupe);
|
||
|
||
if ($eve_id <= 0 || $nomGroupe === '') return false;
|
||
|
||
// 1) Lire tous les comptes du groupe
|
||
$sql = "
|
||
SELECT com_id, com_eve_promoteur
|
||
FROM inscriptions_comptes
|
||
WHERE FIND_IN_SET(
|
||
'" . $db->fxEscape($nomGroupe) . "',
|
||
REPLACE(com_groupe, ' ', '')
|
||
) > 0
|
||
";
|
||
$res = $db->fxQuery($sql);
|
||
if (!$res || mysqli_num_rows($res) === 0) return false;
|
||
|
||
// 2) Boucle sur chaque promoteur du groupe
|
||
while ($row = mysqli_fetch_assoc($res)) {
|
||
|
||
$liste = (string)$row['com_eve_promoteur'];
|
||
|
||
if ($liste === '' || $liste === null) {
|
||
$nouvelleListe = (string)$eve_id;
|
||
} else {
|
||
$ids = explode(',', $liste);
|
||
$deja = false;
|
||
foreach ($ids as $id) {
|
||
if ((int)$id === $eve_id) {
|
||
$deja = true;
|
||
break;
|
||
}
|
||
}
|
||
if ($deja) continue;
|
||
|
||
$nouvelleListe = $liste . ',' . $eve_id;
|
||
}
|
||
|
||
// 3) Update
|
||
$escaped = $db->fxEscape($nouvelleListe);
|
||
$sqlUpdate = "
|
||
UPDATE inscriptions_comptes
|
||
SET com_eve_promoteur = '$escaped'
|
||
WHERE com_id = " . (int)$row['com_id'] . "
|
||
";
|
||
$db->fxQuery($sqlUpdate);
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
function fxAddEvenementToPromoteur($eve_id, $promoteur_id)
|
||
{
|
||
$db = $GLOBALS['db'];
|
||
$eve_id = (int)$eve_id;
|
||
$promoteur_id = (int)$promoteur_id;
|
||
|
||
if ($eve_id <= 0 || $promoteur_id <= 0) return false;
|
||
|
||
// 1) Lire la liste actuelle
|
||
$sql = "SELECT com_eve_promoteur
|
||
FROM inscriptions_comptes
|
||
WHERE com_id = $promoteur_id
|
||
LIMIT 1";
|
||
$res = $db->fxQuery($sql);
|
||
if (!$res || mysqli_num_rows($res) === 0) return false;
|
||
|
||
$row = mysqli_fetch_assoc($res);
|
||
$liste = (string)$row['com_eve_promoteur'];
|
||
|
||
// 2) Construire la nouvelle liste (sans espaces, sans doublon)
|
||
if ($liste === '' || $liste === null) {
|
||
$nouvelleListe = (string)$eve_id;
|
||
} else {
|
||
// Vérifie le doublon
|
||
$ids = explode(',', $liste);
|
||
foreach ($ids as $id) {
|
||
if ((int)$id === $eve_id) {
|
||
// déjà présent, rien à faire
|
||
return true;
|
||
}
|
||
}
|
||
// Ajoute à la fin, avec virgule, sans espace
|
||
$nouvelleListe = $liste . ',' . $eve_id;
|
||
}
|
||
|
||
// 3) Sauvegarder
|
||
$escaped = $db->fxEscape($nouvelleListe);
|
||
$sqlUpdate = "UPDATE inscriptions_comptes
|
||
SET com_eve_promoteur = '$escaped'
|
||
WHERE com_id = $promoteur_id";
|
||
$db->fxQuery($sqlUpdate);
|
||
|
||
return true;
|
||
}
|
||
|
||
/** Durée d'inactivité superadm (MSIN-CON-259) — alignée site public, 3 h. */
|
||
function fxSuperadmSessionInactiveSeconds() {
|
||
return 10800;
|
||
}
|
||
|
||
/**
|
||
* Valide la session superadm via $_SESSION['logged'] uniquement (pas date_maj du compte public).
|
||
*
|
||
* @return int usa_id ou 0 si session absente / expirée
|
||
*/
|
||
function fxSuperadmSessionValidate($blnRefresh = true) {
|
||
if (session_status() !== PHP_SESSION_ACTIVE) {
|
||
session_start();
|
||
}
|
||
|
||
if (empty($_SESSION['usa_id']) || empty($_SESSION['usa_info'])) {
|
||
return 0;
|
||
}
|
||
|
||
$inactive = fxSuperadmSessionInactiveSeconds();
|
||
$intLastActivity = intval($_SESSION['logged'] ?? 0);
|
||
|
||
if ($intLastActivity <= 0) {
|
||
$_SESSION['logged'] = time();
|
||
return intval($_SESSION['usa_id']);
|
||
}
|
||
|
||
if ((time() - $intLastActivity) > $inactive) {
|
||
return 0;
|
||
}
|
||
|
||
if ($blnRefresh) {
|
||
$_SESSION['logged'] = time();
|
||
}
|
||
|
||
return intval($_SESSION['usa_id']);
|
||
}
|
||
|
||
/** Secondes restantes avant expiration (0 = expirée). */
|
||
function fxSuperadmSessionExpiresIn() {
|
||
if (empty($_SESSION['usa_id'])) {
|
||
return 0;
|
||
}
|
||
|
||
$intLastActivity = intval($_SESSION['logged'] ?? 0);
|
||
if ($intLastActivity <= 0) {
|
||
return fxSuperadmSessionInactiveSeconds();
|
||
}
|
||
|
||
return max(0, fxSuperadmSessionInactiveSeconds() - (time() - $intLastActivity));
|
||
}
|
||
|
||
/**
|
||
* Auth AJAX superadm — même règles que inc_start_time.php (MSIN-CON-259, 3 h),
|
||
* mais réponse JSON au lieu d'une redirection (logout.php casse les appels $.post).
|
||
*/
|
||
function fxSuperadmAjaxAuthOrJsonExit() {
|
||
if (session_status() !== PHP_SESSION_ACTIVE) {
|
||
session_start();
|
||
}
|
||
|
||
header('Content-Type: application/json; charset=utf-8');
|
||
|
||
$intUsaId = fxSuperadmSessionValidate(true);
|
||
if ($intUsaId <= 0) {
|
||
echo json_encode(array(
|
||
'state' => 'error',
|
||
'message' => 'Session expirée ou accès refusé.',
|
||
'code' => 'session',
|
||
));
|
||
exit;
|
||
}
|
||
|
||
return $intUsaId;
|
||
}
|
||
|
||
/** Ping session superadm — garde la session vivante tant que l'onglet est ouvert. */
|
||
function fxSuperadmSessionPingJson() {
|
||
if (session_status() !== PHP_SESSION_ACTIVE) {
|
||
session_start();
|
||
}
|
||
|
||
header('Content-Type: application/json; charset=utf-8');
|
||
|
||
$intUsaId = fxSuperadmSessionValidate(true);
|
||
if ($intUsaId <= 0) {
|
||
echo json_encode(array(
|
||
'ok' => false,
|
||
'message' => 'Session expirée — reconnectez-vous au superadmin.',
|
||
'code' => 'session',
|
||
));
|
||
exit;
|
||
}
|
||
|
||
$intExpiresIn = fxSuperadmSessionExpiresIn();
|
||
|
||
echo json_encode(array(
|
||
'ok' => true,
|
||
'expires_in' => $intExpiresIn,
|
||
'warn' => ($intExpiresIn > 0 && $intExpiresIn <= 300),
|
||
));
|
||
exit;
|
||
}
|
||
|
||
/**
|
||
* Super admin connecté — canal superadm/login.php uniquement (usa_id en session).
|
||
* Ne jamais déduire du login public : com_info / com_superadm ne comptent pas ici.
|
||
*/
|
||
function fxSuperadmIsLoggedIn() {
|
||
return !empty($_SESSION['usa_id']);
|
||
}
|
||
|
||
/**
|
||
* Accès rapports superadm — super admin = tout ; sinon promoteur legacy (com_eve_promoteur / com_rapports).
|
||
*/
|
||
function fxSuperadmReportsAllowed($intEvenement = 0) {
|
||
if (fxSuperadmIsLoggedIn()) {
|
||
return true;
|
||
}
|
||
|
||
if (intval($intEvenement) <= 0 || empty($_SESSION['com_info']['com_id'])) {
|
||
return false;
|
||
}
|
||
|
||
global $db;
|
||
$recPromoteur = $db->fxGetRow(
|
||
'SELECT com_eve_promoteur, com_rapports FROM inscriptions_comptes WHERE com_id = '
|
||
. intval($_SESSION['com_info']['com_id'])
|
||
);
|
||
|
||
if ($recPromoteur == null || trim((string)$recPromoteur['com_eve_promoteur']) === '') {
|
||
return false;
|
||
}
|
||
|
||
$tabEve = array_map('trim', explode(',', (string)$recPromoteur['com_eve_promoteur']));
|
||
|
||
return in_array((string)intval($intEvenement), $tabEve, true);
|
||
}
|
||
|
||
/** Rapports Excel/liste ADM (index.php?a=report&t=…) — super admin ou com_rapports / men_ref promoteur. */
|
||
function fxSuperadmReportMenuAllowed($intMenuId) {
|
||
if (fxSuperadmIsLoggedIn()) {
|
||
return true;
|
||
}
|
||
|
||
if (intval($intMenuId) <= 0 || empty($_SESSION['com_info']['com_id'])) {
|
||
return false;
|
||
}
|
||
|
||
global $objDatabase;
|
||
$recRapport = $objDatabase->fxGetRow(
|
||
'SELECT men_ref FROM adm_menus WHERE men_id = ' . intval($intMenuId)
|
||
);
|
||
$recPromoteur = $objDatabase->fxGetRow(
|
||
'SELECT com_eve_promoteur, com_rapports FROM inscriptions_comptes WHERE com_id = '
|
||
. intval($_SESSION['com_info']['com_id'])
|
||
);
|
||
|
||
if ($recPromoteur == null || $recRapport == null) {
|
||
return false;
|
||
}
|
||
|
||
$tabEve = array_map('trim', explode(',', (string)$recPromoteur['com_eve_promoteur']));
|
||
$tabRapports = array_map('trim', explode(',', (string)$recPromoteur['com_rapports']));
|
||
|
||
if (trim((string)$recRapport['men_ref']) !== '0'
|
||
&& trim((string)$recRapport['men_ref']) !== ''
|
||
&& in_array(trim((string)$recRapport['men_ref']), $tabEve, true)) {
|
||
return true;
|
||
}
|
||
|
||
return in_array((string)intval($intMenuId), $tabRapports, true);
|
||
}
|
||
|
||
/** Sync tables statiques — superadm, préprod dev seulement (aligné sur sync_static_db.php). */
|
||
function fxSuperadmStaticSyncAllowed() {
|
||
if (empty($_SESSION['usa_id'])) {
|
||
return false;
|
||
}
|
||
|
||
$strHost = strtolower((string)($_SERVER['HTTP_HOST'] ?? ''));
|
||
|
||
return strpos($strHost, 'ms1inscriptiondev') !== false
|
||
&& strpos($strHost, 'preprod.') !== false;
|
||
}
|