en | fr  | Contact  | Print  | Share

FrameBeurk File

Fmbk/Module/Beurk/fonctionsBeurk.php

<?php //FrameBeurk V0.65 Copyright ToolOscope 2016. Licence CeCILL-C.

// ----------------------- recherches dans le noyau ---------------------------------
// cette fonction renvoie le terminal d'un noeud à partir de ce qu'on lui envoie
// si le noeud n'a pas de terminal, et qu'on n'a pas précisé $estDeType à False, renvoie le terminal du noeud lié par 'estDeType'
function Beurk_terminal($IdNoeud$estDeType true) {
    global 
$CONFIG$DIALOG;
    
    
// cas 1 : une Id numérique est envoyée
    
if (intval($IdNoeud) > 0) {
        if (isset(
$CONFIG['Controle']['Id'][$IdNoeud]))                // c'est un terminal en config
            
$terminal $CONFIG['Controle']['Id'][$IdNoeud]['Terminal'];
        
        elseif (
$estDeType) {                                        // c'est un noeud intermédiaire             
            
if (isset($DIALOG['Terminaux'][$IdNoeud]))                // recherche si terminal déjà en mémoire
                
$terminal $DIALOG['Terminaux'][$IdNoeud];
            else {                                                    
// sinon, si on demande le type :lecture en base
        
                
$result db_QUERY("SELECT T1.Terminal FROM Beurk_Lien R    
 LEFT JOIN Beurk_Terminal T1 ON T1.IdTerminal = R.IdLie
 WHERE R.IdNoeud = '" 
$IdNoeud "' AND R.IdRelation = '" $CONFIG['Relation']['estDeType']['Id'] . "'");
                list(
$terminal) = db_FETCH_ROW($result);            // recherche du terminal du noeud lié par 'estDeType' (on ne gère pour le moment que le niveau supérieur)
                
db_FREE($result);
                
                
$DIALOG['Terminaux'][$IdNoeud] = $terminal;            // stockage du résultat pour la durée du dialogue
            
}
        } else
            
$terminal '';                                            // pas un terminal du noyau
    // cas 2 : une Id alpha est envoyée
    
} else {
        if (isset(
$CONFIG['Controle']['Terminal'][$IdNoeud]))                    // c'est un terminal de noeud en config
            
$terminal $IdNoeud;
        else
            
$terminal '';                                            // c'est n'importe quoi
    
}
    return 
$terminal;
}

// cette fonction renvoie l'id d'un noeud à partir de ce qu'on lui envoie (son Id ou le terminal de son type)
function Beurk_id($Noeud) {
    global 
$CONFIG;
    
    
// cas 1 : une Id numérique est retournée
    
if (intval($Noeud) > 0)                                        // c'est un noeud intermédiaire 
        
return $Noeud;
        
    
// cas 2 : une Id alpha est envoyée
    
if (isset($CONFIG['Controle']['Terminal'][$Noeud]))            // c'est un terminal en config
        
return $CONFIG['Controle']['Terminal'][$Noeud]['Id'];

    return 
0;                                                    // c'est n'importe quoi
}

// cette fonction renvoie l'Id du contenant d'un noeud, par la relation 'estElementDe'
function Beurk_estElementDe($IdNoeud) {
    global 
$CONFIG;

    
// si une Id alpha est envoyée dans IdNoeud : c'est un terminal.
    
if (intval($IdNoeud) == 0) {
        if (isset(
$CONFIG['Controle']['Terminal'][$IdNoeud]) && isset($CONFIG['Controle']['Terminal'][$IdNoeud]['estElementDe']))        // c'est un terminal en config
            
return $CONFIG['Controle']['Terminal'][$IdNoeud]['estElementDe'];
        else
            return 
$CONFIG['Controle']['Terminal']['Site']['Id'];        // par défaut, élément du Site
    
}
    
// c'est un noeud intermédiaire.
    
$result db_QUERY("SELECT R.IdLie FROM Beurk_Lien R
 WHERE R.IdNoeud = '" 
$IdNoeud "' AND R.IdRelation = '" $CONFIG['Relation']['estElementDe']['Id'] . "'");
    list(
$IdLie) = db_FETCH_ROW($result);
    
db_FREE($result);
    return 
$IdLie;
}

// cette fonction renvoie le terminal du type d'un noeud, par la relation 'estDeType'
function Beurk_estDeType($IdNoeud$horsNoyau true) {
    global 
$CONFIG;

    
// cas 1 : une Id numérique est envoyée
    
if (intval($IdNoeud) > 0) {
        if (isset(
$CONFIG['Controle']['Id'][$IdNoeud]) && isset($CONFIG['Controle']['Id'][$IdNoeud]['Type']))                // c'est un terminal en config
            
return $CONFIG['Controle']['Id'][$IdNoeud]['Type'];
        
        elseif (
$horsNoyau) {                                        // c'est un noeud intermédiaire : lecture en base        
            
$result db_QUERY("SELECT T1.Terminal FROM Beurk_Lien R    
 LEFT JOIN Beurk_Terminal T1 ON T1.IdTerminal = R.IdLie
 WHERE R.IdNoeud = '" 
$IdNoeud "' AND R.IdRelation = '" $CONFIG['Relation']['estDeType']['Id'] . "'");
            list(
$terminal) = db_FETCH_ROW($result);                // recherche du terminal du noeud lié par 'estDeType'
            
db_FREE($result);
            return 
$terminal;
        } else
            return 
'';                                                // pas un terminal du noyau

    // cas 2 : une Id alpha est envoyée
    
} else {
        if (isset(
$CONFIG['Controle']['Terminal'][$IdNoeud]) && isset($CONFIG['Controle']['Terminal'][$IdNoeud]['Type']))        // c'est un terminal de noeud en config
            
return $CONFIG['Controle']['Terminal'][$IdNoeud]['Type'];
        else
            return 
'';                                                // c'est n'importe quoi
    
}
}

//fonction renvoie les données communes du noeud
function Beurk_etat($IdNoeud) {
    
    if (
intval($IdNoeud) > 0) {            // une Id numérique est envoyée, sinon rien
            
$result db_QUERY("SELECT H.IdEtat FROM Beurk_Historique H WHERE H.IdNoeud = '$IdNoeud' ORDER BY IdNoeud ASC, NoVersion DESC LIMIT 1");    
             if (list(
$IdEtat) = db_FETCH_ROW($result)) {
                
db_FREE($result);
                return 
Beurk_terminal($IdEtatfalse);
            }
            
db_FREE($result);
    }
    return 
false;
}

//fonction renvoie le createur du noeud
function Beurk_idCreateur($IdNoeud) {
    
    if (
intval($IdNoeud) > 0) {            // une Id numérique est envoyée, sinon rien
            
$result db_QUERY("SELECT H.IdUser FROM Beurk_Historique H WHERE H.IdNoeud = '$IdNoeud' AND NoVersion = 1");    
             if (list(
$IdUser) = db_FETCH_ROW($result)) {
                
db_FREE($result);
                return 
$IdUser;
            }
            
db_FREE($result);
    }
    return 
false;
}

// cette fonction vérifie si l'entité est définie pour l'action et sinon recherche l'entité parente définie
function Beurk_entiteAction($Etape$ActVue$IdVue) {
    global 
$CONFIG$TRANSAC;

    
$EntVue Beurk_terminal($IdVue);
    if (! 
array_key_exists($EntVue$CONFIG['Entite'])) {        // si EntVue est un terminal sans être une entité, on va chercher son type
        
$EntVue Beurk_estDeType($IdVue);
        if (! 
array_key_exists($EntVue$CONFIG['Entite']))    // si EntVue est un terminal sans être une entité, force à 'Entite'
            
$EntVue 'Entite';
    }
    
// recherche de la Vue définie pour l'entité ou pour ses ascendants par la relation 'estDeType'
    
$tabEntite = &$CONFIG['Entite'][$EntVue];                

    
$fin $trouve array_key_exists($ActVue$tabEntite[$Etape]);            // vérification existence de la vue pour cette entité
    
while ((! $trouve) && (! $fin) && ($EntVue != 'Entite')) {                        // si non, on essaie pour le parent, jusqu'à Entite
        
if ($EntVue Beurk_estDeType($EntVue)) {
            
$tabEntite = &$CONFIG['Entite'][$EntVue];                
            
$trouve array_key_exists($ActVue$tabEntite[$Etape]);
        } else
            
$fin true;
    }
    unset(
$tabEntite);
    if (
$trouve)
        return 
$EntVue;

    return 
false;
}

// ----------------------- initialisation transaction / dialogue ---------------------------------
function Beurk_initTransaction(&$TRANSAC$startTime) {

    
$TRANSAC['Protocole'] = ((! empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443) ? 'https' 'http';

    
$TRANSAC['StatutLogin'] = 9;            // par défaut, User non logué

    // messages
    
$TRANSAC['Message'] = array('Url' => '',
                                
'Vue' => '',
                                
'Maj' => '',
                                
'Connexion' => '',    
                                
'Recherche' => '');

    
// gestion Ajax
    
$TRANSAC['Ajax'] = array('Est' => ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') ? true false),
                            
'UrlCanonique' => '',
                            
'Redirection' => '');                // URL de la page qui doit être affichée à réception du message Ajax
    // page
    
$TRANSAC['Page'] = array('Patron' => '',                    // patron par défaut utilisé dans index.php
                            
'ForceTabIndex' => false,            // forcer l'alimentation des tabindex sur les champs de formulaire
                            
'TabIndex' => 1,                    // tabIndex courant
                            
'Enctype' => 'application/x-www-form-urlencoded',    // enctype des forms, par défaut
                            
'DivActions' => '',                    // divs d'accueil à réserver pour les actions proposées
                            
'DefileJusque' => '',                // provoque le défilement de la page jusqu'à la div au chargement
                            
'UrlCanonique' => '',
                            
'Titre' => '',
                            
'Description' => '',                // description de la page (balise meta)
                            
'Keywords' => '',                    // mot-clés de la page (balise meta)
                            
'sauveDIALOG' => true);                // si cette variable est false, DIALOG ne sera pas sauvé en session
    // statistiques
    
$TRANSAC['Stat'] = array('TsBeurkIni' => ($temps Beurk_temps($startTime)),    //format Beurk    (millisecondes)
                            
'TempsIni' => Beurk_formateBeurkTimeStd($temps),        //format Standart (secondes)
                            
'NbCatalogues' => 0,                                    // nombre de catalogues de traduction chargés
                            
'DureeCatalogues' => 0.,                                // temps passé à charger les catalogues de traduction
                            
'DureeBootstrap' => 0.);                                // temps passé dans le bootstrap
}

function 
Beurk_initDialogue(&$DIALOG) {
    global 
$CONFIG;
    
    
//préférence d'affichage par défaut
    
$DIALOG['Langue'] = $CONFIG['Defaut']['Langue'];
    
$DIALOG['Pagination'] = $CONFIG['Defaut']['Pagination'];
    
$DIALOG['Somme'] = array();                        // sommes de controles des actions
    
$DIALOG['Historique'] = array();                // actions réalisées au cours de la session (alimenté selon le besoin)
    
$DIALOG['DivVuePage'] = '';                        // nom de la div principale
    
$DIALOG['ClefVuePage'] = array();                    // clef d'affichage de la dernière vue
    
    // détection browser
    
$userAgent $_SERVER['HTTP_USER_AGENT'];
    if(
preg_match('/MSIE/i'$userAgent))
        
$DIALOG['Browser'] = 'MSIE';
    elseif(
preg_match('/Firefox/i'$userAgent))
        
$DIALOG['Browser'] = 'Firefox';
    elseif(
preg_match('/Chrome/i'$userAgent))
        
$DIALOG['Browser'] = 'Chrome';
    elseif(
preg_match('/Safari/i'$userAgent))
        
$DIALOG['Browser'] = 'Safari';
    elseif(
preg_match('/Flock/i'$userAgent))
        
$DIALOG['Browser'] = 'Flock';
    elseif(
preg_match('/Opera/i'$userAgent))
        
$DIALOG['Browser'] = 'Opera';
    elseif(
preg_match('/rv/i'$userAgent))        // IE 11
        
$DIALOG['Browser'] = 'rv';

    
// détection version du browser

    
if ($DIALOG['Browser'] == 'rv') {
        
preg_match('/rv:([0-9]*)/'$userAgent$matches);
        
$DIALOG['VersionBrowser'] = $matches[1];
        
$DIALOG['Browser'] = 'MSIE';

    } elseif (
$DIALOG['Browser'] !='') {
        
preg_match('/(' $DIALOG['Browser'] . ')[ \/]([\w]+)/'$userAgent$matches);
        
$DIALOG['VersionBrowser'] = $matches[2];
        
    } else {
        
$DIALOG['Browser'] = 'browser ?';
        
$DIALOG['VersionBrowser'] = '';
    }

    
// détection des robots
    
if (preg_match('/(bot|spider|yahoo)/i'$_SERVER"HTTP_USER_AGENT" ]))
        
$DIALOG['Robot'] = true;
    else
        
$DIALOG['Robot'] = false;
    
    
// fil RSS par défaut
    
$DIALOG['TitreRSS'] = Beurk_traduit($CONFIG['Defaut']['TitreRSS'], 'Beurk');
    
$DIALOG['LinkRSS'] = $CONFIG['Defaut']['LinkRSS'];
}

//------------------------------------------ Gestion des autorisations ----------------------------------------------

//fonction de controle de l'autorisation du User
// appelée par controleurVue et controleurMaj et autres
// renvoie '' si autorisé, sinon le message d'erreur
function Beurk_controleurAutorisation($autoNecessaire$paramAuto) {
    global 
$CONFIG;

    if (isset(
$CONFIG['Controle']['Autorisation'][$autoNecessaire])) {
    
        
// si la fonction associée à l'autorisation est non vide
        
if (($fonctionAuto $CONFIG['Controle']['Autorisation'][$autoNecessaire]) != '')
            return 
$fonctionAuto($paramAuto);            // appel de la fonction
            
        
return '';                // pas de fonction : cas de "Tous"
    
} else
        return 
Beurk_message('Autorisation nécessaire inconnue''Beurk');
}

// vérifie que la somme de contrôle renvoyée par l'utilisateur est bien celle stockée dans le dialogue
function Beurk_autoSomme(&$paramAuto) {
    global 
$DIALOG$TRANSAC;

    if (isset(
$paramAuto['preAuto']) && $paramAuto['preAuto'] == true)    // controle inhibé dans le cas de l'affichage d'un lien vers l'action
        
return '';
    if (! isset(
$paramAuto['sommeControle']))
        return 
Beurk_message('Somme de contrôle absente''Beurk');
    if (! isset(
$DIALOG['Somme'][ $nomSomme $paramAuto['ActMaj'] . $paramAuto['IdMaj'] ]))
        return 
Beurk_message('Somme de contrôle inconnue''Beurk');
    if (
$paramAuto['sommeControle'] != $DIALOG['Somme'][$nomSomme]) //$DIALOG[$paramAuto['ActMaj'] . $paramAuto['IdMaj']]
        
return Beurk_message('Somme de contrôle incorrecte''Beurk');
}

// action toujours interdite (par les controleurs)
function Beurk_autoAucun(&$paramAuto) {
    return 
Beurk_message('Action interdite''Beurk');
}

// vérifie que le jetonClef renvoyé est valide (ou que le user connecté est admin)
function Beurk_autoJetonClef(&$paramAuto) {
    global 
$CONFIG;

    if (isset(
$paramAuto['preAuto']) && $paramAuto['preAuto'] == true)    // controle inhibé dans le cas de l'affichage d'un lien vers l'action
        
return '';
    if (
$CONFIG['Module']['Beurk']['Fonctions']['EstAdmin']())
        return 
'';
    if (! isset(
$paramAuto['IdEtatJetonClef']))
        return 
Beurk_message('Clef inconnue''Beurk');
    if (
$paramAuto['IdEtatJetonClef'] != Beurk_id('V'))
        return 
Beurk_message('Clef invalide''Beurk');
}

//renvoie un jeton de la longueur demandée en alphanum
function Beurk_JetonAleatoire($long$commenceParAlpha false) {
    if (
$commenceParAlpha)
        
$clef chr(mt_rand(97,122));    // chr(97) = 'a'; chr(122) = 'z'
    
else
        
$clef '';
    while (
strlen($clef) < $long)
        
$clef .= strval(base_convert(mt_rand(), 1036)); 

    return 
substr($clef0$long); 
}


//--------------------------------- Gestion des messages et erreurs ---------------------------------
// crée un message constitué d'un libellé et de son module d'origine
// intérêt : fonction extraite par TranslaBeurk !
function Beurk_message($message$module) {
    return array(
$message$module);
}

//message et éventuellement positionnement d'une erreur à l'étape en cours
function Beurk_messageEtape($message$topErreur$champErreur '') {
    global 
$TRANSAC;

    
$Etape $TRANSAC['Etape'];

    if (
is_array($message)) {
        
$module $message[1];
        
$message $message[0];
    } else 
$module '';

    if (
$topErreur) {
        
$TRANSAC[$Etape]['Erreur'] = true;
        
$TRANSAC['Message'][$Etape] = '<p class="erreur">' Beurk_traduit($message$module) . '</p>';

        if (
$champErreur != '' && $TRANSAC[$Etape]['ChampErreur'] == '')        // stockage du 1er repositionnement
            
$TRANSAC[$Etape]['ChampErreur'] = $champErreur;
    } else
        
$TRANSAC['Message'][$Etape] = '<p class="bravo">' Beurk_traduit($message$module) . '</p>';
}

// renvoie true si la vue en cours est celle du form en erreur de maj
function Beurk_estFormErreur() {
    global 
$TRANSAC;
    return (isset(
$TRANSAC['Maj']) && $TRANSAC['Maj']['Erreur'] && $TRANSAC['Maj']['Form'] == $TRANSAC['Vue']['Form']);
}

// renvoie true si la vue en cours est celle du form en erreur de maj et que le champ est celui de l'erreur
function Beurk_estChampErreur($champ) {
    global 
$TRANSAC;
    return (isset(
$TRANSAC['Maj']) && $TRANSAC['Maj']['Erreur'] && $TRANSAC['Maj']['Form'] == $TRANSAC['Vue']['Form'] && $TRANSAC['Maj']['ChampErreur'] == $champ);
}

//----------------------------- Gestion des balises des formulaires ---------------------------------

//renvoie le champ de type <input> (de type text, password, hidden) alimenté avec 
// - la valeur passée en paramètre si pas d'erreur Maj sur ce formulaire
// - la valeur reçue dans la requête sinon (sauf pour le type password)
function Beurk_baliseInput($type$nom$valeur$classeBalise ''$size ''$maxlength ''$readonly ''$title '') {
    global 
$TRANSAC;

    
$classes trim($classeBalise ' ' . ((Beurk_estChampErreur($nom)) ? 'erreurchamp' ''));    // concatène la classe demandée avec la classe d'erreur

    
return '<input type="' $type '" name="' $nom '" id="' $nom '"'
        
. (($classes != '') ? " class=\"$classes\"" '')
        . ((
$title != '') ? " title=\"$title\"" '')
        . ((
$size != '') ? " size=\"$size\"" '')
        . ((
$maxlength != '') ? " maxlength=\"$maxlength\"" '')
        . ((
$readonly != '') ? " readonly=\"$readonly\"" '')
        . 
Beurk_tabIndex()
        . 
' value="' . ((Beurk_estFormErreur() && $type != 'password' && isset($_REQUEST[$nom])) ? Beurk_DB2InputHTML($_REQUEST[$nom]) : $valeur)
        . 
'">';
}

//renvoie le champ de type <select> alimenté si erreur avec la classe d'erreur
function Beurk_baliseSelect($nom$listeOptions$classeBalise '') {
    global 
$TRANSAC;

    
$classes trim($classeBalise ' ' . ((Beurk_estChampErreur($nom)) ? 'erreurchamp' ''));    // concatène la classe demandée avec la classe d'erreur
    
    
return '<select name="' $nom '"'
        
. (($classes != '') ? " class=\"$classes\"" '')
        . 
Beurk_tabIndex()
        . 
'>
'         
$listeOptions '
</select>
'
;
}

//renvoie le champ de type <option> alimenté avec 
// - la valeur passée en paramètre si pas d'erreur Maj sur ce formulaire
// - la valeur reçue dans la requête sinon
function Beurk_baliseOption($select$valeur$valeurDefaut$libelle$classeBalise '') {
    global 
$TRANSAC;
    
    return 
'<option value="' $valeur '"'
        
. (($classeBalise != '') ? " class=\"$classeBalise\"" '')
        . ((
Beurk_estFormErreur() && $_REQUEST[$select] == $valeur) ? ' selected' 
            (((! 
Beurk_estFormErreur()) && $valeur == $valeurDefaut) ? ' selected' ''))
        . 
">$libelle</option>";
}
        
//renvoie le champ de type <textarea> alimenté avec 
// - la valeur passée en paramètre si pas d'erreur Maj sur ce formulaire
// - la valeur reçue dans la requête sinon
function Beurk_baliseTextarea($nom$valeur$classeBalise ''$wrap ''$rows '') {
    global 
$TRANSAC;
    
    
$classes trim($classeBalise ' ' . ((Beurk_estChampErreur($nom)) ? 'erreurchamp' ''));
    return 
'<textarea name="' $nom '"'
        
. (($classes != '') ? " class=\"$classes\"" '')
        . ((
$rows != '') ? " rows=\"$rows\"" '')
        . ((
$wrap != '') ? " wrap=\"$wrap\"" '')
        . 
Beurk_tabIndex()
        . 
'>' . ((Beurk_estFormErreur() && isset($_REQUEST[$nom])) ? Beurk_DB2InputHTML($_REQUEST[$nom]) : $valeur)
        . 
'</textarea>';
}

//renvoie le champ de type checkbox. $checked est de type booleen
function Beurk_baliseCheckBox($nom$valeur$checked$classeBalise ''$readonly ''$title '') {
    global 
$TRANSAC;

    
$classes trim($classeBalise ' ' . ((Beurk_estChampErreur($nom)) ? 'erreurchamp' ''));        // concatène la classe demandée avec la classe d'erreur

    // force le réaffichage de la valeur envoyée si le formulaire est en erreur
    
if (Beurk_estFormErreur() && isset($_REQUEST[$nom])) {
        if (
$_REQUEST[$nom] == $valeur)
            
$checked true;
        else
            
$checked false;
    }

    return 
'<input type="checkbox" name="' $nom '" id="' $nom '"'
        
' value="' $valeur '"'
        
. (($classes != '') ? " class=\"$classes\"" '')
        . ((
$title != '') ? " title=\"$title\"" '')
        . ((
$readonly != '') ? " readonly=\"$readonly\"" '')
        . 
Beurk_tabIndex()
        . (
$checked ' checked' '')
        . 
'>';
}

// renvoie le tabindex si demandé
function Beurk_tabIndex() {
    global 
$TRANSAC;
    return ((
$TRANSAC['Page']['ForceTabIndex']) ? (' tabindex="' $TRANSAC['Page']['TabIndex']++  . '"') : '');
}

// formate une balise <fieldset> et traduit le label (depuis la langue du module courant)
function Beurk_fieldset($legend$input) {
    echo 
'<fieldset>
<legend>'
Beurk_traduit($legend), (($legend != '') ? '&nbsp;:' ''), '</legend>
<label>
'
$input'
</label>
</fieldset>
'
;
}


//-------------------------------- Gestion des clef d'affichage des pages --------------------------------
// cette fonction extrait le tableau des champs clef de la vue. $entite et $action doivent être des terminaux, en alpha
// $Etape doit être égal à 'Vue' ou 'Maj'
function Beurk_tabClef($Etape$action$entite) {
    global 
$CONFIG;
    if (isset(
$CONFIG['Entite'][$entite])) {        // l'entité existe
        
$ConfigEntite =& $CONFIG['Entite'][$entite];
        if (isset(
$ConfigEntite[$Etape][$action])) {        // l'action est définie pour cette entité et cette Etape
            
$tabAction =& $ConfigEntite[$Etape][$action];
            if (isset(
$tabAction['Clef']))            // si des champs clef sont définis pour cette action
                
return $tabAction['Clef'];
        }
    }
    if (isset(
$CONFIG['Action'][$action]) && isset($CONFIG['Action'][$action]['Clef' $Etape]))        // clef par défaut définie dans configBeurk_final.php
        
return $CONFIG['Action'][$action]['Clef' $Etape];    

    return 
false;
}

//initialise un tableau ayant en clefs les champs de la clef et l'alimente à partir à $_REQUEST
// $entAct et $action doivent être des terminaux, en alpha
// $Etape doit être égal à 'Vue' ou 'Maj'
function Beurk_alimenteChampsAction($Etape$action$entAct$idEntite$suffixe '') {
    global 
$CONFIG$TRANSAC;

    
$TRANSAC[$Etape]['Champ'] = array(('Act' $Etape) => $action, ('Id' $Etape) => $idEntite);

    if (
$champs Beurk_tabClef($Etape$action$entAct))    //recherche des champs associés à entite + action
        
foreach ($champs as $champ) {
            if (isset(
$_REQUEST[$champ $suffixe])) {        // affectation de la valeur
                
$valeur $_REQUEST[$champ $suffixe]; 
            } else
                
$valeur 0;    // par défaut
            
            
if (substr($champ02) == 'Id')                // controle de la valeur selon le type
                
$valeur = (int) $valeur;
            elseif (
substr($champ02) == 'No') {
                
$valeur = (int) $valeur;
                if (
$valeur <= 0)
                    
$valeur 1;
            }

            
$GLOBALS[$champ] = $valeur;                        // pour utilisation dans les actions
            
$TRANSAC[$Etape]['Champ'][$champ] = $valeur;    // pour la sauvegarde de la clef
        
}
    return 
true;
}

//initialise un tableau ayant en clefs les champs de la clef. $entite et $action doivent être des terminaux, en alpha
// $phase doit être égal à 'Vue' ou 'Maj'
/* function Beurk_initClef($phase, $action, $entite) {    // a supprimer ????
    global $CONFIG;
    $champsClef = array(('Act' . $phase) => '', ('Id' . $phase) => ''); //nuisible à controleurVue
    
    if ($clef = Beurk_tabClef($phase, $action, $entite))    //recherche des champs associés à entite + action
        foreach ($clef as $champ)
            $champsClef[$champ] = '';
    
    return $champsClef;
} */

//renvoie l'URL d'affichage de la vue courante (le résultat doit être traité par htmlspecialchars)
function Beurk_clefVuePage($suffixe '') {
    global 
$DIALOG;
    
    if (
is_array($DIALOG['ClefVuePage'])) {
        if (
$suffixe == '')
            return 
$DIALOG['ClefVuePage'];
        else {
            foreach (
$DIALOG['ClefVuePage'] as $champ => $valeur)
                
$ClefURLCourante[$champ $suffixe] = $valeur;
            return 
$ClefURLCourante;
        }
    } else                    
// session trop ancienne : clef perdue ! 
        
return array();        // on ne devrait pas arriver là : En cas de session trop ancienne, il faudrait recharger la page complète (à implémenter)
}

//renvoie la clef d'affichage de la vue courante (le résultat doit être traité par htmlspecialchars)
function Beurk_clefVueCourante($suffixe '') {
    global 
$TRANSAC
    if (
is_array($TRANSAC['Vue']['Champ'])) {
        if (
$suffixe == '')
            return 
$TRANSAC['Vue']['Champ'];
        else {
            foreach (
$TRANSAC['Vue']['Champ'] as $champ => $valeur)
                
$ClefURLCourante[$champ $suffixe] = $valeur;
            return 
$ClefURLCourante;
        }
    } else        
// ça ne devrait pas arriver, car $TRANSAC['Vue']['Champ'] est alimenté par le controleurVue
        
return array();
}

//renvoie le chemin des ressources accessible au navigateur
function Beurk_cheminRessource($protocole '') {
    global 
$CONFIG$TRANSAC;
    
    if (
$protocole == '')
        
$protocole $TRANSAC['Protocole'];            // par défaut, le protocole courant
        
    
return $protocole '://' $CONFIG['Param']['DomaineUrl'][$protocole] . $CONFIG['Param']['CheminRessource'];
}
//renvoie le chemin complet de l'URL jusqu'à la partie variable
function Beurk_cheminURL($protocole ''$langue '') {
    global 
$CONFIG$DIALOG$TRANSAC;
    
    if (
$protocole == '')
        
$protocole $TRANSAC['Protocole'];            // par défaut, le protocole courant
        
    
$racine $protocole '://' $CONFIG['Param']['DomaineUrl'][$protocole];
    
    if (
$CONFIG['Param']['LangueUrl'])    {            // si la langue dépend de l'Url
        
if ($langue == '')                            // si la langue n'est pas précisé dans l'appel
            
$langue $DIALOG['Langue'];            // on utilise la langue en cours
        
return $racine $CONFIG['Param']['CheminUrlLangue'][$langue];
        
    } else                                            
// la langue ne fait pas partie de l'Url
        
return $racine $CONFIG['Param']['CheminInstal'];
}

// formate le nom de la div d'accueil à partir de la clef
function Beurk_nomDivAccueil($clefURLouJeton) {
    
$nomDiv 'a';
    if (
is_array($clefURLouJeton)) {        // tableau clef
        
foreach ($clefURLouJeton as $champ => $valeur)
            
$nomDiv .= '.' Beurk_id($valeur);
        return 
$nomDiv//substr($nomDiv, 1);    // retire le '.' initial

    
} else                            // nom de la div = jeton
        
return $clefURLouJeton;
}

// formate le nom de la div d'accueil à partir de la clef
function Beurk_divAccueil($clefURL$datadiv ''$class '') {
    return 
'<div id="' Beurk_nomDivAccueil($clefURL) . '" style="display:none;"'
        
. (($class) ? (' class="' $class '"') : '')
        . ((
$datadiv) ? (' data-div="' $datadiv '"') : '')
        . 
'></div>
'
;        
}

// sortie des divs d'accueil des actions (alimentées par exemple par Kom1_actionVueMaj)
function Beurk_flushDivsAccueil() {
    global 
$TRANSAC;
    
    
$tmp $TRANSAC['Page']['DivActions'];
    
$TRANSAC['Page']['DivActions'] = '';    // réinit des divs
    
    
return $tmp;
}

//renvoie l'URL sous forme d'objet javascript. ATTENTION : les champs de $clefURL doivent être dans l'ordre 
function Beurk_jsURL($clefURL) {
    
$jsURL '';
    foreach (
$clefURL as $champ => $valeur)
        
$jsURL .= ", '" addslashes($champ) . "':'" addslashes(Beurk_id($valeur)) . "'";

    return 
'{' substr($jsURL2) . '}';    // retire le ', ' initial

}

// renvoie un slug à intégrer dans l'URL à partir du titre de l'entité
function Beurk_slug($titrePage) {
    
// return strtolower(preg_replace('/(-)\1+/u', '\1', preg_replace(array('/[^-a-zA-Z0-9\s]/', '/[\s]/'), array('-', '-'), $titrePage)));
    
return strtolower(trim(preg_replace('~[^0-9a-z]+~i''-'preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i''$1'htmlentities($titrePageENT_NOQUOTES'UTF-8'))), ' '));
}

//------------------------------------ Gestion du temps --------------------------------------------

// fonction renvoie le temps (+- l'offset en secondes) formatté en ssaammjjhhmmssmmm
function Beurk_temps($microtime$offset 0) {
  
$mtime explode(' '$microtime);
  return 
date('YmdHis'$mtime[1] + $offset) . substr((strval($mtime[0]) . '0000'),2,3);
}

// formatage du temps pour l'affichage
function Beurk_formateBeurkTime($tempsBeurk) {
  return 
sprintf('%s-%s-%s %s:%s:%s'substr(($stemps=strval($tempsBeurk)),0,4), substr($stemps,4,2), substr($stemps,6,2), substr($stemps,8,2), substr($stemps,10,2), substr($stemps,12,2));
}

//converti le temps format 'Beurk_temps' en format de date XML
function Beurk_formateBeurkTimeStd($tempsBeurk) {
    return 
strtotime(Beurk_formateBeurkTime($tempsBeurk));
}

//--------------------------- Gestion du formatage des champs en entrée/sortie --------------------------

function Beurk_Request2DB($texteenvoye) {    // InputHTML -> DB
    //$texteenvoye = wordwrap($texteenvoye, 90, "\n", 1);         // limite à 90 car/ligne
    
$texteenvoye preg_replace('#[\n|\r\n]{3,}#',"\n\n",          // limite à 2 les sauts de ligne
            
((mb_check_encoding($texteenvoye'UTF-8') ? $texteenvoye utf8_encode($texteenvoye))));    // encode en utf-8 si besoin (cas notamment du 'multipart/form-data')
    
if (! get_magic_quotes_gpc()) $texteenvoye db_ESCAPE($texteenvoye);
    return 
$texteenvoye;
}

function 
Beurk_DB2HTML($textelu$topAbrege false) {    // DB -> HTML
    
return ($topAbrege) ? str_replace(array("\r\n""\n""\r"), ' 'htmlspecialchars($texteluENT_NOQUOTES'UTF-8'))    // en abrege, tous les sauts de ligne sont supprimés
                        
nl2br(htmlspecialchars($texteluENT_NOQUOTES'UTF-8'));
}

function 
Beurk_DB2XML($textelu) {        // DB -> XML
    
return nl2br(htmlspecialchars($texteluENT_QUOTES'UTF-8'));
}

function 
Beurk_Request2HTML($texteenvoye) {    // InputHTML -> HTML
    
$texteenvoye preg_replace('#[\n|\r\n]{3,}#',"\n\n"$texteenvoye); //limite à 2 les sauts de ligne
    
if (get_magic_quotes_gpc()) $texteenvoye stripslashes($texteenvoye);
    return 
nl2br(htmlspecialchars($texteenvoyeENT_NOQUOTES'UTF-8'));
}

function 
Beurk_DB2InputHTML($textelu) {        // DB -> InputHTML
    
return htmlspecialchars($texteluENT_QUOTES'UTF-8');
}

//--------------------------- Gestion des traductions --------------------------

function Beurk_traduit($tabTexte$module ''$param1 ''$param2 ''$param3 '') {    
    global 
$CONFIG$DIALOG$TRANSAC$CATALOG;
    
    
// détermination du module qui envoie le message
    
if (is_array($tabTexte)) {        // 1er cas : le texte est un array, le 2ème élément est le nom du module qui le renvoie
        
list($texte$module) = $tabTexte;
        
$param1 = ((count($tabTexte) > 2) ? $tabTexte[2] : '');    // dans ce cas, les paramètres sont passés dans le tableau
        
$param2 = ((count($tabTexte) > 3) ? $tabTexte[3] : '');
        
$param3 = ((count($tabTexte) > 4) ? $tabTexte[4] : '');
    
    } else {                        
// 2ème cas : le texte est en format string
        
if ($module == '')
            
$module $TRANSAC$TRANSAC['Etape'] ]['Module'];        // si le module n'est pas renseigné, le texte est renvoyé dans la langue du module courant
        
$texte $tabTexte;
    }

    
// si la langue du module est la langue courante, pas besoin de traduire
    
$langue $DIALOG['Langue'];
    if (
$langue == $CONFIG['Module'][$module]['Langue'])
        
$traduction $texte;

    else {    
// il faut traduire
        
if (! array_key_exists($module$CATALOG[$langue])) {            // si catalogue pas en mémoire
            
$TRANSAC['Stat']['NbCatalogues'] += 1;
            
$tsDeb microtime(true);

            
$fichierCatalogue INSTALL_PATH . (($module == '_site') ? '/prive/' '/Module/') . $module '/_lang/catalogue' .  $module '_' $langue .  '.php';
            if (
file_exists($fichierCatalogue))                // chargement du catalogue
                
include($fichierCatalogue);    
            else                                            
// catalogue non trouvé
                
$CATALOG[$langue][$module] = array();        // on crée le tableau pour ne plus rechercher le fichier à nouveau
            
$TRANSAC['Stat']['DureeCatalogues'] += (microtime(true) - $tsDeb);
        }

        if (isset(
$CATALOG[$langue][$module][$texte]))
            
$traduction $CATALOG[$langue][$module][$texte];        // traduction
        
else
            
$traduction $texte;                                    //pas de traduction disponible
    
}
    
    if (
strpos($traduction'%') === false)                // pas de paramètres
        
return $traduction;
    else
        return 
sprintf($traduction$param1$param2$param3);    //remplacement des paramètres
}


© 2010-2015 by ToolOscope SASU. © 2016-2018 by Arnaud De Rette. All rights reserved