Fichier FrameBeurk
Fmbk/Module/Kom1/fonctionsKom1.php
<?php //FrameBeurk V0.65 Copyright ToolOscope 2016. Licence CeCILL-C.
// renvoie l'URL contenant les clefs d'affichage à placer dans le paramètre 'Action' du form.
// cette URL demande le rechargement de la page en cas de succès, ou le rechargement de la vue en cours d'affichage en cas d'erreur Maj
// Les divs dans lesquelles doivent avoir lieu les affichages ci-dessus sont précisées dans l'attribut data-ajax porté par le bouton submit
// La clef de maj (ActMaj, IdMaj) est stockée en balises Input dans le form
function Kom1_urlReafficheSite() {
return Beurk_URL(array_merge(Beurk_clefVuePage(), Beurk_clefVueCourante('Err')));
}
// ---------------------------------- gestion de la pagination -------------------------------------
// ajoute la clause LIMIT dans la requete. gère les requêtes sous forme de chaîne et sous forme de tableau
function Kom1_pagineRequete(&$requete) {
global $TRANSAC, $DIALOG;
if (isset($TRANSAC[ $TRANSAC['Etape'] ]['Champ']['NoPage'])) // récupération numéro de page de l'action en cours
$NoPage = (int) $TRANSAC[ $TRANSAC['Etape'] ]['Champ']['NoPage'];
if (! isset($NoPage) || $NoPage <= 0)
$NoPage = 1; // si invalide
return db_pagineRequete($requete, $DIALOG['Pagination'] * ($NoPage - 1), $DIALOG['Pagination']);
}
// ------------------------------------------ Gestion des BBCodes ---------------------------------------------------------
// tableau de conversion des BBCodes
$CONFIG['Param']['BBReplacements2'] = array(
'img' => function (&$matches) { return '<div class="wrapImg"><img src="' . str_replace(' ', '%20', $matches[1]) . '"></div>'; },
'img=' => function (&$matches) { return '<div class="wrapImg"><img src="' . str_replace(' ', '%20', $matches[1]) . '">' . $matches[2] . '</div>'; },
'url' => function (&$matches) { return '<a href="' . str_replace(' ', '%20', $matches[1]) . '" target="_blank" rel="nofollow">' . $matches[1] . '</a>'; },
'url=' => function (&$matches) { return '<a href="' . str_replace(' ', '%20', $matches[1]) . '" target="_blank" rel="nofollow">' . $matches[2] . '</a>'; },
'mp3' => function (&$matches) { return '<object type="application/x-shockwave-flash" data="' . Beurk_cheminRessource() . '/dewplayer.swf?son=' . ($son = str_replace(' ', '%20', $matches[1])) . '" width="200" height="20"><param name="movie" value="' . Beurk_cheminRessource() . '/dewplayer.swf?son=' . $son . '" /></object>'; },
'mp3=' => function (&$matches) { return $matches[2] . ' : <object type="application/x-shockwave-flash" data="' . Beurk_cheminRessource() . '/dewplayer.swf?son=' . ($son = str_replace(' ', '%20', $matches[1])) . '" width="200" height="20"><param name="movie" value="' . Beurk_cheminRessource() . '/dewplayer.swf?son=' . $son . '" /></object>'; },
'quote=' => function (&$matches) { return (empty($matches[1]) ? '' : $matches[1] /* auteur */ . ' : ') . '<div class="citation">' . Kom1_remplaceBBcitations($matches[2]) . '</div>'; }
);
function Kom1_remplaceBBCodes2 (array &$patterns, array &$callbacks, $texte) {
foreach ($patterns as $nom => $pattern) {
$texte = preg_replace_callback($pattern, $callbacks[$nom], $texte);
}
return preg_last_error() == PREG_NO_ERROR ? $texte : NULL;
}
//remplace les BBcodes par des balises HTML
function Kom1_remplaceBBCodes($texte) {
global $CONFIG;
$texte = Kom1_selectionLangueBB(
preg_replace('/\<([\/])?(li|ul|ol)\>\<br(\s*)?\/?\>/i', '<$1$2>', // supprime les sauts de ligne après un élément de liste
preg_replace($CONFIG['Param']['BBPatterns'], $CONFIG['Param']['BBReplacements'], $texte)));
$texte = Kom1_remplaceBBCodes2($CONFIG['Param']['BBPatterns2'], $CONFIG['Param']['BBReplacements2'], $texte);
return $texte;
}
//supprime les BBcodes (mais conserve la sélection des langues)
function Kom1_annuleBBCodes($texte) {
global $CONFIG;
$texte = Kom1_selectionLangueBB(
preg_replace($CONFIG['Param']['BBPatterns'], $CONFIG['Param']['BBAnnules'], $texte));
$texte = preg_replace($CONFIG['Param']['BBPatterns2'], $CONFIG['Param']['BBAnnules2'], $texte);
return $texte;
}
// limite la longueur du texte selon le paramétrage en config
function Kom1_abrege($texte) {
global $CONFIG;
return (strlen($texte) > $CONFIG['Param']['LongueurAbrege'] + 2) ? (substr($texte, 0, $CONFIG['Param']['LongueurAbrege']) . '...') : $texte;
}
function Kom1_DB2HTML_BB($textelu, $topAbrege = false) {
return ($topAbrege) ? Kom1_abrege(Kom1_annuleBBCodes(Beurk_DB2HTML($textelu, $topAbrege))) : Kom1_remplaceBBCodes(Beurk_DB2HTML($textelu)); //
}
function Kom1_DB2XML_BB($textelu) {
return Kom1_remplaceBBCodes(Beurk_DB2XML($textelu));
}
function Kom1_Request2HTML_BB($texteenvoye) {
return Kom1_remplaceBBCodes(Beurk_Request2HTML($texteenvoye));
}
// fonction de callback du preg_replace pour les citations
function Kom1_BBcitationsCallback($matches) {
return (empty($matches[1]) ? '' : $matches[1] /* auteur */ . ' : ') . '<div class="citation">' . Kom1_remplaceBBcitations($matches[2]) . '</div>';
}
// gère le remplacement des BBcodes pour les citations (qui peuvent être imbriquées)
function Kom1_remplaceBBcitations($texte) {
return preg_replace_callback('%\[quote(?:=([^\]]+))?\]((?:[^[]*(?:\[(?!/?quote(?:=[^\]]+)?\])[^[]*)*|(?R))*)\[/quote\]%x', 'Kom1_BBcitationsCallback', $texte);
}
// supprime les citations (entièrement)
function Kom1_annuleBBcitations($texte) {
return preg_replace('%\[quote(?:=([^\]]+))?\]((?:[^[]*(?:\[(?!/?quote(?:=[^\]]+)?\])[^[]*)*|(?R))*)\[/quote\]%x', '...', $texte);
}
// supprime les textes taggés avec une autre langue que celle utilisée
function Kom1_selectionLangueBB($texte) {
global $DIALOG;
return preg_replace(array('#\[lang=(?!' . $DIALOG['Langue'] . ')(.+?)\](.+?)\[\/lang\]#s', '#\[lang=' . $DIALOG['Langue'] . '\](.+?)\[\/lang\]#s'),
array('', '$1'),
$texte);
}
// ------------------------------------------ Gestion des libellés ---------------------------------------------------------
// formatage du temps relatif avec bulle contenant le temps absolu
function Kom1_formateTempsRelatif($tempsBeurk) {
global $TRANSAC;
$diff = ($TRANSAC['Stat']['TempsIni'] - Beurk_formateBeurkTimeStd($tempsBeurk)); //en secondes
if ($diff < 60) { // < 1 minute
$duree = floor($diff);
$texte = Kom1_traduitQuantite('%d seconde%s', 'Kom1', $duree);
} elseif ($diff < 3600) { // < 1 heure
$duree = floor($diff / 60);
$texte = Kom1_traduitQuantite('%d minute%s', 'Kom1', $duree);
} elseif ($diff < 86400) { // < 1 jour
$duree = floor($diff / 3600);
$texte = Kom1_traduitQuantite('%d heure%s', 'Kom1', $duree);
} elseif ($diff < 604800) { // < 1 semaine
$duree = floor($diff / 86400);
$texte = Kom1_traduitQuantite('%d jour%s', 'Kom1', $duree);
} elseif ($diff < 2629800) { // < 1 mois
$duree = floor($diff / 604800);
$texte = Kom1_traduitQuantite('%d semaine%s', 'Kom1', $duree);
} elseif ($diff < 31557600) { // < 1 an
$duree = floor($diff / 2629800);
$texte = Kom1_traduitQuantite('%d mois', 'Kom1', $duree);
} else {
$duree = floor($diff / 31557600);
$texte = Kom1_traduitQuantite('%d an%s', 'Kom1', $duree);
}
return '<span title="' . Beurk_formateBeurkTime($tempsBeurk) . '">' . $texte . '</span>';
}
//renvoie un 's' si le nombre est supérieur à 1 !
function Kom1_pluriel($nombre) {
return ($nombre > 1 ) ? 's' : '';
}
//traduit une chaine représentant une quantité en gérant le pluriel
// le texte à traduire devrait se présenter sous la forme '... %d unité%s ...'
function Kom1_traduitQuantite($texte, $module, $quantite) {
return Beurk_traduit($texte, $module, $quantite, Kom1_pluriel($quantite));
}