Browse Source

PSR SPIP sans toucher aux libs

svn/attic/spip-bonux-3/118152
kent1@arscenic.info 6 years ago
parent
commit
985caa501a
  1. 26
      inc/date_gestion.php
  2. 42
      inc/exporter_csv.php
  3. 57
      inc/importer_csv.php
  4. 45
      public/spip_bonux_balises.php
  5. 75
      public/spip_bonux_criteres.php
  6. 53
      spip_bonux_fonctions.php
  7. 260
      spip_bonux_options.php

26
inc/date_gestion.php

@ -6,7 +6,9 @@
* Licence GPL
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Recuperer les champs date_xx et heure_xx, verifier leur coherence et les reformater
@ -16,28 +18,28 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
* @param array $erreurs
* @return int
*/
function verifier_corriger_date_saisie($suffixe,$horaire,&$erreurs){
function verifier_corriger_date_saisie($suffixe, $horaire, &$erreurs) {
include_spip('inc/filtres');
$date = _request("date_$suffixe").($horaire?' '.trim(_request("heure_$suffixe")).':00':'');
$date = recup_date($date);
if (!$date)
if (!$date) {
return '';
}
$ret = null;
if (!$ret=mktime(0,0,0,$date[1],$date[2],$date[0]))
if (!$ret=mktime(0, 0, 0, $date[1], $date[2], $date[0])) {
$erreurs["date_$suffixe"] = _T('spip_bonux:erreur_date');
elseif (!$ret=mktime($date[3],$date[4],$date[5],$date[1],$date[2],$date[0]))
} elseif (!$ret=mktime($date[3], $date[4], $date[5], $date[1], $date[2], $date[0])) {
$erreurs["date_$suffixe"] = _T('spip_bonux:erreur_heure');
if ($ret){
if (trim(_request("date_$suffixe")!==($d=date('d/m/Y',$ret)))){
}
if ($ret) {
if (trim(_request("date_$suffixe") !== ($d=date('d/m/Y', $ret)))) {
$erreurs["date_$suffixe"] = _T('spip_bonux:erreur_date_corrigee');
set_request("date_$suffixe",$d);
set_request("date_$suffixe", $d);
}
if ($horaire AND trim(_request("heure_$suffixe")!==($h=date('H:i',$ret)))){
if ($horaire and trim(_request("heure_$suffixe") !== ($h = date('H:i', $ret)))) {
$erreurs["heure_$suffixe"] = _T('spip_bonux:erreur_heure_corrigee');
set_request("heure_$suffixe",$h);
set_request("heure_$suffixe", $h);
}
}
return $ret;
}
?>

42
inc/exporter_csv.php

@ -11,7 +11,9 @@
*
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/charsets');
include_spip('inc/filtres');
@ -40,44 +42,48 @@ function exporter_csv_champ($champ) {
*/
function exporter_csv_ligne($ligne, $delim = ',', $importer_charset = null) {
$output = join($delim, array_map('exporter_csv_champ', $ligne))."\r\n";
if ($importer_charset){
if ($importer_charset) {
$output = str_replace('’', '\'', $output);
$output = unicode2charset(html2unicode(charset2unicode($output)), $importer_charset);
$output = unicode2charset(html2unicode(charset2unicode($output)), $importer_charset);
}
return $output;
}
function inc_exporter_csv_dist($titre, $resource, $delim=',', $entetes = null,$envoyer = true){
function inc_exporter_csv_dist($titre, $resource, $delim = ',', $entetes = null, $envoyer = true) {
$filename = preg_replace(',[^-_\w]+,', '_', translitteration(textebrut(typo($titre))));
if ($delim == 'TAB') $delim = "\t";
if (!in_array($delim,array(',',';',"\t")))
$delim = ",";
if ($delim == 'TAB') {
$delim = "\t";
}
if (!in_array($delim, array(',', ';', "\t"))) {
$delim = ',';
}
$charset = $GLOBALS['meta']['charset'];
$importer_charset = null;
if ($delim == ',')
if ($delim == ',') {
$extension = 'csv';
else {
} else {
$extension = 'xls';
# Excel n'accepte pas l'utf-8 ni les entites html... on transcode tout ce qu'on peut
$importer_charset = $charset = 'iso-8859-1';
}
$filename = "$filename.$extension";
if ($entetes AND is_array($entetes) AND count($entetes))
$output = exporter_csv_ligne($entetes,$delim,$importer_charset);
if ($entetes and is_array($entetes) and count($entetes)) {
$output = exporter_csv_ligne($entetes, $delim, $importer_charset);
}
// on passe par un fichier temporaire qui permet de ne pas saturer la memoire
// avec les gros exports
$fichier = sous_repertoire(_DIR_CACHE,"export") . $filename;
$fichier = sous_repertoire(_DIR_CACHE, 'export') . $filename;
$fp = fopen($fichier, 'w');
$length = fwrite($fp, $output);
while ($row=is_array($resource)?array_shift($resource):sql_fetch($resource)){
$output = exporter_csv_ligne($row,$delim,$importer_charset);
while ($row = is_array($resource) ? array_shift($resource) : sql_fetch($resource)) {
$output = exporter_csv_ligne($row, $delim, $importer_charset);
$length += fwrite($fp, $output);
}
fclose($fp);
@ -89,11 +95,9 @@ function inc_exporter_csv_dist($titre, $resource, $delim=',', $entetes = null,$e
//Header("Content-Type: text/plain; charset=$charset");
Header("Content-Length: $length");
ob_clean();
flush();
readfile($fichier);
flush();
readfile($fichier);
}
return $fichier;
}
?>

57
inc/importer_csv.php

@ -4,12 +4,14 @@
* Le plugin qui lave plus SPIP que SPIP
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
* Licence GPL
*
*
* Fonctions de lecture d'un fichier CSV pour transformation en array()
*
*
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/charsets');
@ -30,13 +32,14 @@ include_spip('inc/charsets');
* @param unknown_type $texte
* @return array
*/
function importer_csv_importcharset($texte){
function importer_csv_importcharset($texte) {
// le plus frequent, en particulier avec les trucs de ms@@@
$charset_source = 'iso-8859-1';
// mais open-office sait faire mieux, donc mefiance !
if (is_utf8($texte))
if (is_utf8($texte)) {
$charset_source = 'utf-8';
return importer_charset($texte,$charset_source);
}
return importer_charset($texte, $charset_source);
}
/**
@ -46,7 +49,7 @@ function importer_csv_importcharset($texte){
* @param string $key
* @return string
*/
function importer_csv_nettoie_key($key){
function importer_csv_nettoie_key($key) {
return translitteration($key);
/*$accents=array('<EFBFBD>','<EFBFBD>','<EFBFBD>','<EFBFBD>','<EFBFBD>',"<EFBFBD>","<EFBFBD>","'");
$accents_rep=array('e','e','e','a','u',"o","c","_");
@ -65,37 +68,40 @@ function importer_csv_nettoie_key($key){
* @param int $len
* @return array
*/
function inc_importer_csv_dist($file, $head = false, $delim = ",", $enclos = '"', $len = 10000) {
function inc_importer_csv_dist($file, $head = false, $delim = ',', $enclos = '"', $len = 10000) {
$return = false;
if (@file_exists($file)
AND $handle = fopen($file, "r")){
and $handle = fopen($file, 'r')) {
if ($head) {
$header = fgetcsv($handle, $len, $delim, $enclos);
if ($header){
$header = array_map('importer_csv_importcharset',$header);
$header = array_map('importer_csv_nettoie_key',$header);
if ($header) {
$header = array_map('importer_csv_importcharset', $header);
$header = array_map('importer_csv_nettoie_key', $header);
$header_type = array();
foreach ($header as $heading) {
if (!isset($header_type[$heading]))
$header_type[$heading] = "scalar";
else
$header_type[$heading] = "array";
if (!isset($header_type[$heading])) {
$header_type[$heading] = 'scalar';
} else {
$header_type[$heading] = 'array';
}
}
}
}
while (($data = fgetcsv($handle, $len, $delim, $enclos)) !== FALSE) {
$data = array_map('importer_csv_importcharset',$data);
if ($head AND isset($header)) {
while (($data = fgetcsv($handle, $len, $delim, $enclos)) !== false) {
$data = array_map('importer_csv_importcharset', $data);
if ($head and isset($header)) {
$row = array();
foreach ($header as $key=>$heading) {
if ($header_type[$heading]=="array"){
if (!isset($row[$heading]))
foreach ($header as $key => $heading) {
if ($header_type[$heading] == 'array') {
if (!isset($row[$heading])) {
$row[$heading] = array();
if (isset($data[$key]) AND strlen($data[$key]))
}
if (isset($data[$key]) and strlen($data[$key])) {
$row[$heading][]= $data[$key];
}
else
}
} else {
$row[$heading]=(isset($data[$key])) ? $data[$key] : '';
}
}
$return[]=$row;
} else {
@ -105,4 +111,3 @@ function inc_importer_csv_dist($file, $head = false, $delim = ",", $enclos = '"'
}
return $return;
}

45
public/spip_bonux_balises.php

@ -7,7 +7,9 @@
*
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Empile un element dans un tableau declare par #SET{tableau,#ARRAY}
@ -17,18 +19,19 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
* @return Champ
* La balise ne retourne rien ("")
**/
function balise_SET_PUSH_dist($p){
$_nom = interprete_argument_balise(1,$p);
$_valeur = interprete_argument_balise(2,$p);
function balise_SET_PUSH_dist($p) {
$_nom = interprete_argument_balise(1, $p);
$_valeur = interprete_argument_balise(2, $p);
if ($_nom AND $_valeur)
if ($_nom and $_valeur) {
// si le tableau n'existe pas encore, on le cree
// on ajoute la valeur ensuite (sans passer par array_push)
$p->code = "vide((\$cle=$_nom)
. vide((!isset(\$Pile['vars'][\$cle]) OR !is_array(\$Pile['vars'][\$cle]))?\$Pile['vars'][\$cle]=array():'')
. vide(\$Pile['vars'][\$cle][]=$_valeur))";
else
} else {
$p->code = "''";
}
$p->interdire_scripts = false; // la balise ne renvoie rien
return $p;
@ -47,19 +50,19 @@ function balise_SET_PUSH_dist($p){
* @return Champ
* La balise ne retourne rien ("")
**/
function balise_SET_MERGE_dist($p){
$_nom = interprete_argument_balise(1,$p);
$_t1 = interprete_argument_balise(2,$p);
$_t2 = interprete_argument_balise(3,$p);
function balise_SET_MERGE_dist($p) {
$_nom = interprete_argument_balise(1, $p);
$_t1 = interprete_argument_balise(2, $p);
$_t2 = interprete_argument_balise(3, $p);
if ($_nom AND $_t1 AND !$_t2)
if ($_nom and $_t1 and !$_t2) {
// 2 arguments : merge de $_nom et $_t1 dans $_nom
// si le tableau n'existe pas encore, on le cree
$p->code = "vide((\$cle=$_nom)
. vide((!isset(\$Pile['vars'][\$cle]) OR !is_array(\$Pile['vars'][\$cle]))?\$Pile['vars'][\$cle]=array():'')
. vide(is_array(\$new=$_t1)?'':\$new=array(\$new))
. vide(\$Pile['vars'][\$cle] = array_merge(\$Pile['vars'][\$cle],\$new)))";
elseif ($_nom AND $_t1 AND $_t2)
} elseif ($_nom and $_t1 and $_t2) {
// 3 arguments : merge de $_t1 et $_t2 dans $_nom
// si le tableau n'existe pas encore, on le cree
$p->code = "vide((\$cle=$_nom)
@ -67,8 +70,9 @@ function balise_SET_MERGE_dist($p){
. vide(is_array(\$new1=$_t1)?'':\$new1=array(\$new1))
. vide(is_array(\$new2=$_t2)?'':\$new2=array(\$new2))
. vide(\$Pile['vars'][\$cle] = array_merge(\$new1,\$new2)))";
else
} else {
$p->code = "''";
}
$p->interdire_scripts = false; // la balise ne renvoie rien
return $p;
@ -82,8 +86,9 @@ function balise_SET_MERGE_dist($p){
*/
function balise_COMPTEUR_dist($p) {
calculer_balise_criteres('compteur', $p);
if ($p->code=="''")
calculer_balise_criteres('compteur', $p, "compteur_left");
if ($p->code == "''") {
calculer_balise_criteres('compteur', $p, 'compteur_left');
}
return $p;
}
@ -117,20 +122,18 @@ function balise_MAXIMUM_dist($p) {
*/
function balise_STATS_dist($p) {
if (isset($p->param[0][2][0])
AND $nom = ($p->param[0][2][0]->texte)) {
and $nom = ($p->param[0][2][0]->texte)) {
return calculer_balise_criteres($nom, $p, 'stats');
}
return $p;
}
function calculer_balise_criteres($nom, $p, $motif="") {
function calculer_balise_criteres($nom, $p, $motif = '') {
$p->code = "''";
$motif = $motif ? $motif : $nom;
if (isset($p->param[0][1][0])
AND $champ = ($p->param[0][1][0]->texte)) {
and $champ = ($p->param[0][1][0]->texte)) {
return rindex_pile($p, $nom."_$champ", $motif);
}
return $p;
return $p;
}
?>

75
public/spip_bonux_criteres.php

@ -4,21 +4,23 @@
* Le plugin qui lave plus SPIP que SPIP
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
* Licence GPL
*
*
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Permet de faire un comptage par table liee
*
* @syntaxe `{compteur table[, champ]}`
* @link http://www.spip-contrib.net/Classer-les-articles-par-nombre-de#forum409210
*
*
* @example
* Pour avoir les auteurs classes par articles et
* le nombre d'article de chacun :
*
*
* ```
* <BOUCLE1(AUTEURS){compteur articles}{par compteur_articles}>
* #ID_AUTEUR : #COMPTEUR{articles}
@ -30,7 +32,7 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
* implicitement sur la cle primaire de la boucle en cours.
* Avec un second argument {compteur autre_table,champ_fusion}
* le groupby est fait sur le champ_fusion"
*
*
* @param string $idb
* Identifiant de la boucle
* @param Boucle[] $boucles
@ -38,10 +40,10 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
* @param Critere $crit
* Paramètres du critère dans cette boucle
* @param bool $left
* true pour utiliser un left join plutôt qu'un inner join.
* true pour utiliser un left join plutôt qu'un inner join.
* @return void
*/
function critere_compteur($idb, &$boucles, $crit, $left=false){
function critere_compteur($idb, &$boucles, $crit, $left = false) {
$boucle = &$boucles[$idb];
if (isset($crit->param[1])) {
@ -53,44 +55,52 @@ function critere_compteur($idb, &$boucles, $crit, $left=false){
$table = reset($params);
$table = $table[0]->texte;
$op = false;
if (preg_match(',^(\w+)([<>=])([0-9]+)$,',$table,$r)){
if (preg_match(',^(\w+)([<>=])([0-9]+)$,', $table, $r)) {
$table=$r[1];
if (count($r)>=3) $op=$r[2];
if (count($r)>=4) $op_val=$r[3];
if (count($r)>=3) {
$op=$r[2];
}
if (count($r)>=4) {
$op_val=$r[3];
}
}
$type = objet_type($table);
$type_id = id_table_objet($type);
/**
* Si la clé primaire est une clé multiple, on prend la première partie
* Utile pour compter les versions de spip_versions par exemple
*/
if (count($types = explode(',',$type_id)) > 1)
if (count($types = explode(',', $type_id)) > 1) {
$type_id = $types[0];
}
$table_sql = table_objet_sql($type);
$trouver_table = charger_fonction('trouver_table','base');
$trouver_table = charger_fonction('trouver_table', 'base');
$arrivee = array($table, $trouver_table($table, $boucle->sql_serveur));
$depart = array($boucle->id_table,$trouver_table($boucle->id_table, $boucle->sql_serveur));
// noter les jointures deja installees
$joins = array_keys($boucle->from);
if ($compt = calculer_jointure($boucle,$depart,$arrivee)){
if ($_fusion!="''"){
if ($compt = calculer_jointure($boucle, $depart, $arrivee)) {
if ($_fusion!="''") {
// en cas de jointure, on ne veut pas du group_by sur la cle primaire !
// cela casse le compteur !
foreach($boucle->group as $k=>$group)
if ($group == $boucle->id_table.'.'.$boucle->primary)
foreach ($boucle->group as $k => $group) {
if ($group == $boucle->id_table.'.'.$boucle->primary) {
unset($boucle->group[$k]);
}
}
$boucle->group[] = '".($gb='.$_fusion.')."';
}
$boucle->select[]= "COUNT($compt.$type_id) AS compteur_$table";
if ($op)
$boucle->select[]= "COUNT($compt.$type_id) AS compteur_$table";
if ($op) {
$boucle->having[]= array("'".$op."'", "'compteur_".$table."'",$op_val);
if ($left){
foreach($boucle->from as $k=>$val){
if (!in_array($k, $joins)){
}
if ($left) {
foreach ($boucle->from as $k => $val) {
if (!in_array($k, $joins)) {
$boucle->from_type[$k] = 'left';
}
}
@ -105,37 +115,37 @@ function critere_compteur($idb, &$boucles, $crit, $left=false){
* @param <type> $boucles
* @param <type> $crit
*/
function critere_compteur_left($idb, &$boucles, $crit){
function critere_compteur_left($idb, &$boucles, $crit) {
critere_compteur($idb, $boucles, $crit, true);
}
/** Critere {somme champ} #SOMME{champ} */
function critere_somme($idb, &$boucles, $crit){
function critere_somme($idb, &$boucles, $crit) {
calcul_critere_fonctions(array('SUM'=>'somme'), $idb, $boucles, $crit);
}
/** Critere {compte champ} #COMPTE{champ} */
function critere_compte($idb, &$boucles, $crit){
function critere_compte($idb, &$boucles, $crit) {
calcul_critere_fonctions(array('COUNT'=>'compte'), $idb, $boucles, $crit);
}
/** Critere {moyenne champ} #MOYENNE{champ} */
function critere_moyenne($idb, &$boucles, $crit){
function critere_moyenne($idb, &$boucles, $crit) {
calcul_critere_fonctions(array('AVG'=>'moyenne'), $idb, $boucles, $crit);
}
/** Critere {minimum champ} #MINIMUM{champ} */
function critere_minimum($idb, &$boucles, $crit){
function critere_minimum($idb, &$boucles, $crit) {
calcul_critere_fonctions(array('MIN'=>'minimum'), $idb, $boucles, $crit);
}
/** Critere {maximum champ} #MAXIMUM{champ} */
function critere_maximum($idb, &$boucles, $crit){
function critere_maximum($idb, &$boucles, $crit) {
calcul_critere_fonctions(array('MAX'=>'maximum'), $idb, $boucles, $crit);
}
/** Critere {stats champ} calcul la totale : somme, compte, minimum, moyenne, maximum */
function critere_stats($idb, &$boucles, $crit){
function critere_stats($idb, &$boucles, $crit) {
calcul_critere_fonctions(array(
'SUM'=>'somme',
'COUNT'=>'compte',
@ -154,17 +164,14 @@ function calcul_critere_fonctions($func, $idb, &$boucles, $crit) {
$champ = $champ[0]->texte;
// option DISTINCT {compte DISTINCT(id_article) }
$filter="";
$filter = '';
if (preg_match('/^([a-zA-Z]+)\(\s*([a-zA-Z_]+)\s*\)$/', trim($champ), $r)) {
$filter = $r[1]; // DISTINCT
$champ = $r[2]; // id_article
}
$sel = $filter ? "$filter($champ)" : $champ;
foreach ($func as $f => $as) {
$boucle->select[]= "$f($sel) AS $as" . "_$champ";
}
}
?>

53
spip_bonux_fonctions.php

@ -4,7 +4,7 @@
* Le plugin qui lave plus SPIP que SPIP
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
* Licence GPL
*
*
*/
if (!defined('_ECRIRE_INC_VERSION')) {
@ -22,45 +22,45 @@ include_spip('public/spip_bonux_balises');
* @param string $class
* @return string
*/
function tag_img($img,$alt="",$class="") {
function tag_img($img, $alt = '', $class = '') {
$balise_img = chercher_filtre('balise_img');
return $balise_img($img, $alt, $class);
}
function previsu_verifier_cle_temporaire($cle) {
$validite = 12; // validite de 12h maxi
$old = 0;
do {
$date = date('Y-m-d H', strtotime("-$old hour"));
if ($cle == previsu_cle_temporaire($date)) {
return true;
}
} while ($old++ < $validite);
return false;
}
function previsu_cle_temporaire($date=null){
function previsu_cle_temporaire($date = null) {
include_spip('inc/securiser_action');
if (!$date) {
$date = date('Y-m-d H');
}
$url = self();
$cle = md5($url.$date.secret_du_site());
return $cle;
}
if (!function_exists('push_table_valeur')) {
/**
* Filtre ajoutant une valeur à la fin d'une liste, possiblement dans une clé d'un tableau (comme table_valeur()).
*
*
* Attention, cette fonction est bien un "push", c'est-à-dire qu'elle ajoute un élément à la fin d'une liste.
*
*
* #TABLEAU|push_table_valeur{a/b/c, valeur, #CONDITION}
* - si la clé "c" est une liste : on ajoute "valeur" à la fin
* - si la clé "c" n'existe pas : on crée une liste et on met la première valeur dedans
@ -83,31 +83,30 @@ if (!function_exists('push_table_valeur')) {
* @return array|object
* Retourne le tableau ou l'objet initial, modifié suivant les paramètres.
*/
function push_table_valeur($table, $chemin, $valeur, $condition=true, $cle_finale=false) {
function push_table_valeur($table, $chemin, $valeur, $condition = true, $cle_finale = false) {
// Si la condition est fausse, on ne fait rien du tout
if ($condition) {
$table = is_string($table) ? @unserialize($table) : $table;
$element_a_modifier =& $table;
// S'il y a un emplacement donné, on cherche si c'est un tableau
if ($chemin and is_string($chemin) and $chemin = explode('/', $chemin) and is_array($chemin)){
if ($chemin and is_string($chemin) and $chemin = explode('/', $chemin) and is_array($chemin)) {
$i = 0;
foreach ($chemin as $cle){
foreach ($chemin as $cle) {
$i += 1;
// On ne fait que s'il la clé vaut quelque chose
if ($cle !== ''){
if ($cle !== '') {
// Si c'est un tableau, on vérifie si la clé existe
if (is_array($element_a_modifier)) {
// Si la clé n'existe pas : on met un tableau vide qui se remplira
if (!isset($element_a_modifier[$cle])){
if (!isset($element_a_modifier[$cle])) {
$element_a_modifier[$cle] = array();
}
$element_a_modifier =& $element_a_modifier[$cle];
}
// Si c'est un objet on vérifie si la propriété existe
elseif (is_object($element_a_modifier)) {
} elseif (is_object($element_a_modifier)) {
// Si c'est un objet on vérifie si la propriété existe
// Si la propriété n'existe pas : on met un tableau vide qui se remplira
if (!isset($element_a_modifier->$cle)){
if (!isset($element_a_modifier->$cle)) {
$element_a_modifier->$cle = array();
}
$element_a_modifier =& $element_a_modifier->$cle;
@ -115,22 +114,20 @@ function push_table_valeur($table, $chemin, $valeur, $condition=true, $cle_final
}
}
}
// Maintenant on est au bon endroit de ce qu'on veut modifier :
// Si l'élément à modifier est bien un tableau : on push la valeur dedans
if (is_array($element_a_modifier)){
if (is_array($element_a_modifier)) {
if ($cle_finale and is_string($cle_finale)) {
$element_a_modifier[$cle_finale] = $valeur;
}
else {
} else {
array_push($element_a_modifier, $valeur);
}
}
// Sinon (si c'est un scalaire) on ne fait rien et il faudra utiliser set_table_valeur() par exemple
}
return $table;
}
}

260
spip_bonux_options.php

@ -11,39 +11,40 @@
include_spip('lib/array_column/array_column');
if (_request('var_mode')=='preview'
AND $cle = _request('var_relecture')){
include_spip("spip_bonux_fonctions");
if (previsu_verifier_cle_temporaire($cle)){
include_spip("inc/autoriser");
autoriser_exception('previsualiser','',0);
define('_VAR_PREVIEW_EXCEPTION',true);
and $cle = _request('var_relecture')) {
include_spip('spip_bonux_fonctions');
if (previsu_verifier_cle_temporaire($cle)) {
include_spip('inc/autoriser');
autoriser_exception('previsualiser', '', 0);
define('_VAR_PREVIEW_EXCEPTION', true);
}
}
function spip_bonux_affichage_final($flux){
if (defined('_VAR_PREVIEW') AND _VAR_PREVIEW){
$p = stripos($flux,"</body>");
$url_relecture = parametre_url(self(),'var_mode','preview','&');
$js = "";
if (!defined('_VAR_PREVIEW_EXCEPTION')){
$url_relecture = parametre_url($url_relecture,'var_relecture',previsu_cle_temporaire(),'&');
$label = "Relecture temporaire";
}
else {
function spip_bonux_affichage_final($flux) {
if (defined('_VAR_PREVIEW') and _VAR_PREVIEW) {
$p = stripos($flux, '</body>');
$url_relecture = parametre_url(self(), 'var_mode', 'preview', '&');
$js = '';
if (!defined('_VAR_PREVIEW_EXCEPTION')) {
$url_relecture = parametre_url($url_relecture, 'var_relecture', previsu_cle_temporaire(), '&');
$label = 'Relecture temporaire';
} else {
$label = _T('previsualisation');
$js = "jQuery('.spip-previsu').html('Relecture temporaire');";
}
$js .= "jQuery('#spip-admin').append('<a class=\"spip-admin-boutons review_link\" href=\"$url_relecture\">$label</a>');";
$js = "jQuery(function(){ $js });";
$js = "<script>$js</script>";
$flux = substr_replace($flux,$js,$p,0);
$flux = substr_replace($flux, $js, $p, 0);
}
return $flux;
}
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
/**
* une fonction qui regarde si $texte est une chaine de langue
* de la forme <:qqch:>
* si oui applique _T()
@ -54,37 +55,34 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
* @return unknown_type Retourne la valeur éventuellement modifiée.
*/
if (!function_exists('_T_ou_typo')) {
function _T_ou_typo($valeur, $mode_typo='toujours') {
function _T_ou_typo($valeur, $mode_typo = 'toujours') {
// Si la valeur est bien une chaine (et pas non plus un entier déguisé)
if (is_string($valeur) and !intval($valeur)){
if (is_string($valeur) and !intval($valeur)) {
// Si la chaine est du type <:truc:> on passe à _T()
if (preg_match('/^\<:(.*?):\>$/', $valeur, $match))
if (preg_match('/^\<:(.*?):\>$/', $valeur, $match)) {
$valeur = _T($match[1]);
// Sinon on la passe a typo()
else {
if (!in_array($mode_typo, array('toujours', 'multi', 'jamais')))
} else {
// Sinon on la passe a typo()
if (!in_array($mode_typo, array('toujours', 'multi', 'jamais'))) {
$mode_typo = 'toujours';
if ($mode_typo == 'toujours' or ($mode_typo == 'multi' and strpos($valeur, '<multi>') !== false)){
}
if ($mode_typo == 'toujours' or ($mode_typo == 'multi' and strpos($valeur, '<multi>') !== false)) {
include_spip('inc/texte');
$valeur = typo($valeur);
}
}
}
// Si c'est un tableau, on reapplique la fonction récursivement
elseif (is_array($valeur)){
foreach ($valeur as $cle => $valeur2){
} elseif (is_array($valeur)) {
// Si c'est un tableau, on reapplique la fonction récursivement
foreach ($valeur as $cle => $valeur2) {
$valeur[$cle] = _T_ou_typo($valeur2, $mode_typo);
}
}
return $valeur;
}
}
/*
/**
* Insère toutes les valeurs du tableau $arr2 après (ou avant) $cle dans le tableau $arr1.
* Si $cle n'est pas trouvé, les valeurs de $arr2 seront ajoutés à la fin de $arr1.
*
@ -99,13 +97,12 @@ function _T_ou_typo($valeur, $mode_typo='toujours') {
* @return array Retourne le tableau avec l'insertion
*/
if (!function_exists('spip_array_insert')) {
function spip_array_insert($arr1, $cle, $arr2, $avant=false){
function spip_array_insert($arr1, $cle, $arr2, $avant = false) {
$index = array_search($cle, array_keys($arr1));
if($index === false){
if ($index === false) {
$index = count($arr1); // insert @ end of array if $key not found
}
else {
if(!$avant){
} else {
if (!$avant) {
$index++;
}
}
@ -118,16 +115,18 @@ function spip_array_insert($arr1, $cle, $arr2, $avant=false){
* Une fonction extrêmement pratique, mais qui n'est disponible qu'à partir de PHP 5.3 !
* cf. http://www.php.net/manual/fr/function.array-replace-recursive.php
*/
if (!function_exists('array_replace_recursive')){
function array_replace_recursive($array, $array1){
function recurse($array, $array1){
foreach ($array1 as $key => $value){
if (!function_exists('array_replace_recursive')) {
function array_replace_recursive($array, $array1) {
function recurse($array, $array1) {
foreach ($array1 as $key => $value) {
// create new key in $array, if it is empty or not an array
if (!isset($array[$key]) || (isset($array[$key]) && !is_array($array[$key])))
if (!isset($array[$key]) || (isset($array[$key]) && !is_array($array[$key]))) {
$array[$key] = array();
}
// overwrite the value in the base array
if (is_array($value))
if (is_array($value)) {
$value = recurse($array[$key], $value);
}
$array[$key] = $value;
}
return $array;
@ -136,13 +135,15 @@ if (!function_exists('array_replace_recursive')){
// handle the arguments, merge one by one
$args = func_get_args();
$array = $args[0];
if (!is_array($array))
if (!is_array($array)) {
return $array;
}
for ($i = 1; $i < count($args); $i++)
if (is_array($args[$i]))
for ($i = 1; $i < count($args); $i++) {
if (is_array($args[$i])) {
$array = recurse($array, $args[$i]);
}
}
return $array;
}
}
@ -168,91 +169,90 @@ if (!function_exists('text_truncate')) {
* @link http://book.cakephp.org/view/1469/Text#truncate-1625
*/
function text_truncate($text, $length = 100, $options = array()) {
$default = array(
'ending' => '...', 'exact' => true, 'html' => false
);
$options = array_merge($default, $options);
extract($options);
if ($html) {
if (mb_strlen(preg_replace('/<.*?>/', '', $text)) <= $length) {
return $text;
}
$totalLength = mb_strlen(strip_tags($ending));
$openTags = array();
$truncate = '';
$default = array(
'ending' => '...', 'exact' => true, 'html' => false
);
$options = array_merge($default, $options);
extract($options);
preg_match_all('/(<\/?([\w+]+)[^>]*>)?([^<>]*)/', $text, $tags, PREG_SET_ORDER);
foreach ($tags as $tag) {
if (!preg_match('/img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param/s', $tag[2])) {
if (preg_match('/<[\w]+[^>]*>/s', $tag[0])) {
array_unshift($openTags, $tag[2]);
} else if (preg_match('/<\/([\w]+)[^>]*>/s', $tag[0], $closeTag)) {
$pos = array_search($closeTag[1], $openTags);
if ($pos !== false) {
array_splice($openTags, $pos, 1);
}
}
}
$truncate .= $tag[1];
if ($html) {
if (mb_strlen(preg_replace('/<.*?>/', '', $text)) <= $length) {
return $text;
}
$totalLength = mb_strlen(strip_tags($ending));
$openTags = array();
$truncate = '';
$contentLength = mb_strlen(preg_replace('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', ' ', $tag[3]));
if ($contentLength + $totalLength > $length) {
$left = $length - $totalLength;
$entitiesLength = 0;
if (preg_match_all('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', $tag[3], $entities, PREG_OFFSET_CAPTURE)) {
foreach ($entities[0] as $entity) {
if ($entity[1] + 1 - $entitiesLength <= $left) {
$left--;
$entitiesLength += mb_strlen($entity[0]);
} else {
break;
}
}
}
preg_match_all('/(<\/?([\w+]+)[^>]*>)?([^<>]*)/', $text, $tags, PREG_SET_ORDER);
foreach ($tags as $tag) {
if (!preg_match('/img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param/s', $tag[2])) {
if (preg_match('/<[\w]+[^>]*>/s', $tag[0])) {
array_unshift($openTags, $tag[2]);
} else if (preg_match('/<\/([\w]+)[^>]*>/s', $tag[0], $closeTag)) {
$pos = array_search($closeTag[1], $openTags);
if ($pos !== false) {
array_splice($openTags, $pos, 1);
}
}
}
$truncate .= $tag[1];
$truncate .= mb_substr($tag[3], 0 , $left + $entitiesLength);
break;
} else {
$truncate .= $tag[3];
$totalLength += $contentLength;
}
if ($totalLength >= $length) {
break;
}
}
} else {
if (mb_strlen($text) <= $length) {
return $text;
} else {
$truncate = mb_substr($text, 0, $length - mb_strlen($ending));
}
}
if (!$exact) {
$spacepos = mb_strrpos($truncate, ' ');
if (isset($spacepos)) {
if ($html) {
$bits = mb_substr($truncate, $spacepos);
preg_match_all('/<\/([a-z]+)>/', $bits, $droppedTags, PREG_SET_ORDER);
if (!empty($droppedTags)) {
foreach ($droppedTags as $closingTag) {
if (!in_array($closingTag[1], $openTags)) {
array_unshift($openTags, $closingTag[1]);
}
}
}
}
$truncate = mb_substr($truncate, 0, $spacepos);
}
}
$truncate .= $ending;
$contentLength = mb_strlen(preg_replace('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', ' ', $tag[3]));
if ($contentLength + $totalLength > $length) {
$left = $length - $totalLength;
$entitiesLength = 0;
if (preg_match_all('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', $tag[3], $entities, PREG_OFFSET_CAPTURE)) {
foreach ($entities[0] as $entity) {
if ($entity[1] + 1 - $entitiesLength <= $left) {
$left--;
$entitiesLength += mb_strlen($entity[0]);
} else {
break;
}
}
}
$truncate .= mb_substr($tag[3], 0, $left + $entitiesLength);
break;
} else {
$truncate .= $tag[3];
$totalLength += $contentLength;
}
if ($totalLength >= $length) {
break;
}
}
} else {
if (mb_strlen($text) <= $length) {
return $text;
} else {
$truncate = mb_substr($text, 0, $length - mb_strlen($ending));
}
}
if (!$exact) {
$spacepos = mb_strrpos($truncate, ' ');
if (isset($spacepos)) {
if ($html) {
$bits = mb_substr($truncate, $spacepos);
preg_match_all('/<\/([a-z]+)>/', $bits, $droppedTags, PREG_SET_ORDER);
if (!empty($droppedTags)) {
foreach ($droppedTags as $closingTag) {
if (!in_array($closingTag[1], $openTags)) {
array_unshift($openTags, $closingTag[1]);
}
}
}
}
$truncate = mb_substr($truncate, 0, $spacepos);
}
}
$truncate .= $ending;
if ($html) {
foreach ($openTags as $tag) {
$truncate .= '</'.$tag.'>';
}
}
if ($html) {
foreach ($openTags as $tag) {
$truncate .= '</'.$tag.'>';
}
}
return $truncate;
return $truncate;
}
}

Loading…
Cancel
Save