Compare commits

...

50 Commits
master ... v2

Author SHA1 Message Date
cedric@yterium.com 89bd2e2650 Passage de bonux en branches/trunk 4 years ago
spip.franck@lien-d-amis.net c66363f0c1 code.spip est maintenant en https, donc, j'ajoute le "s" à http 6 years ago
spip.franck@lien-d-amis.net 70f2a60447 Mise à jour d'url, exemple http://doc.spip.org est devenu http://code.spip.net 6 years ago
spip.franck@lien-d-amis.net a3d9be9809 En finir une fois pour toutes avec spip-contrib, pour mettre à la place contrib.spip 6 years ago
spip.franck@lien-d-amis.net 1b928e6b2d Contrib est en https, donc j'ajoute le "s", plus divers broutilles 6 years ago
real3t@gmail.com 0c02b72bda Revert partiel :
- revenir à séparateur virgule par défaut
- mais garder l'utilisation du BOM (en la contraignant à un charset du site utf-8)

+ backport de $output = str_replace('’', '\'', $output); de la version pour SPIP 3
8 years ago
real3t@gmail.com 4b95bfef4f Après recherches sur Internet, il s'avère que sous Windows, pour qu'un .CSV puisse être décodé par excel, il faut :
- qu'il ait un BOM au début s'il est en UTF-8
- qu'il utilise des ; et non des ,

Ça reste compatible LibreOffice
Et ça simplifie le code au final.
8 years ago
george@middleeastwatch.net 3105c7304e heure_pas n'etait pas pris en compte pour le time_picker. 9 years ago
tetue@rezo.net 1d86d9dc07 coquille 9 years ago
spip.franck@lien-d-amis.net 9e06271b38 Ce n'est plus spip-contrib, mais contrib.spip 9 years ago
cedric@yterium.com 355eb5d81f la fonction array_insert definie ici est non standard dans sa definition mais utilise un nommage tres generique : risque de collision, averee avec la librairie MPDF, avec une signature differente qui plus est/
On la renomme donc en spip_array_insert, aucune occurence trouvee sur la zone, mais attention aux utilisations eventuelles
9 years ago
cyril@cym.fr bf9204aefe uniformisation des numeros de version 10 years ago
marcimat@rezo.net f5f0ef6bf0 Dans certains cas (en spip 2.1 donc), un appel «include_spip('inc/config')» ne chargeait pas la fonction lire_config souhaitée, si le plugin CFG est présent. On corrige ce détail. 10 years ago
pierrekuhn82@gmail.com 77f1c20801 Avec les balises multi çs devrait mieux le faire. 11 years ago
gilles.vincent@gmail.com 64ead313a9 Traduction en anglais de plugin.xml 11 years ago
marcimat@rezo.net 52ef1762cd Suivre http://core.spip.org/projects/spip/repository/revisions/19243 11 years ago
brunobergot@gmail.com d9ca2607a7 prise en charge du format JSON avec #PRODUIRE 11 years ago
denisb@laposte.net 716c4138a8 spip-bonux-2 : le filtre ne retourne rien si la rubrique n'existe pas. 12 years ago
jluc@no-log.org 1b047de7a9 la contribution de teddyp 12 years ago
jluc@no-log.org a00df28da9 gag 12 years ago
jluc@no-log.org eb542d8e2d petit à petit la profondeur se révèle 12 years ago
jluc@no-log.org 1d13600da5 oups + "à tester" (c'est du blind commit) 12 years ago
jluc@no-log.org 8683754884 Nouveau filtre profondeur (marcimat)
[(#ID_RUBRIQUE|profondeur)]
Attention dans spip3 c'est un champ de RUBRIQUE donc syntaxe différente.
12 years ago
brunobergot@gmail.com b1f681e0a1 spécifier le dataType pour la requête ajax (compat jquery 1.6) 12 years ago
jluc@no-log.org a090e5c33c une démo qui teste #COMPTEUR_BOUCLE aussi
même si les itérateurs font plus moderne et plus durable
12 years ago
joseph@larmarange.net 9c9486c601 Pouvoir utiliser hasard avec le critère tri 12 years ago
kent1@arscenic.info 82d26de03e if (!defined("_ECRIRE_INC_VERSION")) return; sur tout fichier PHP pour sécurité future principalement 12 years ago
yffic@lefourneau.com 15698e0eab Slogan, correction des bornes pour la partie spip 2.1 12 years ago
kent1@arscenic.info a4b923d38b On incrémente le numéro de version 12 years ago
kent1@arscenic.info 929b0d342c Amélioration lors de l'usage de limite_branche 12 years ago
kent1@arscenic.info fc2e23ee5b input[value='+id_item+'] ne marche pas en jQuery 1.6.4, j'espère que cela ne casse rien dans les versions précédentes 12 years ago
cedric@yterium.com 467a17b1ed mise a jour du numero de version 12 years ago
cedric@yterium.com c6ec524983 forcer la mise à jour de la css issue de #PRODUIRE quand on fait var_mode=recalcul 12 years ago
kent1@arscenic.info 10de69bc98 Une locution non traduite 12 years ago
cedric@yterium.com 15a1cdb655 eviter une erreur fatale en cas de double definition (plugin saisies) 12 years ago
eric@smellup.net 749a11b864 Mise au propre de certains plugin.xml et modification systématique de la borne 2.3.0-dev en 3.0.0-dev 12 years ago
cedric@yterium.com 3192806801 eviter une collision, en prenant la main sur le filtre compilé 12 years ago
cedric@yterium.com fa775db68a desembugguer bonux sur spip 2.0.x qui a du mal avec les versions -beta/-dev... 12 years ago
rastapopoulos@spip.org 21ef821b22 Oups : Saleté de double déclaration ! 12 years ago
rastapopoulos@spip.org 3da9f396b5 la nuit des oups. 12 years ago
rastapopoulos@spip.org 945b2a56bd Report des modifs du core sur #INFO_TRUC, notamment pour ajouter l'étoile pour enlever les traitements (+ sécu + compat itérateurs). 12 years ago
ben.spip@gmail.com 965f1af94a ne pas activer bonux sur une 2.3.dev 12 years ago
ben.spip@gmail.com a5a2d8b8db SPIP-bonux2 ne doit pas etre active si installe malencontreusement sur un spip 2.3 12 years ago
ben.spip@gmail.com 931d5d7b1a dos2unix plugin.xml 12 years ago
cedric@yterium.com 21ec20c2bb backport de #PRODUIRE pour unifier avec http://core.spip.org/projects/spip/repository/revisions/17740 12 years ago
rastapopoulos@spip.org cbeb76dec7 Saleté de double déclaration ! 12 years ago
rastapopoulos@spip.org 7882c98269 Petite amélioration du dernier commit. 12 years ago
rastapopoulos@spip.org a86c4d7d80 Une petite fonction tirée de SPIP 3 qui permet d'interdire l'accès à une page depuis n'importe quel squelette, y compris dans les inclusions de n'importe quel niveau.
Par rapport à la version de spip-dev, elle est augmentée de deux arguments pour préciser soi-même ce qu'on désire faire comme interdiction.

[(#AUTORISER{truc}|sinon_interdire_acces)]

[(#AUTORISER{truc}|sinon_interdire_acces{#URL})]

[(#AUTORISER{truc}|sinon_interdire_acces{"", 404})]

À tester/commenter.
12 years ago
renato@rezo.net 1a97622e67 fichier de langue italien 12 years ago
marcimat@rezo.net 7f059446bf Commentaire pour mémoire. 12 years ago

1
.gitattributes vendored

@ -59,6 +59,7 @@ javascript/jquery.qtip.activate.js -text
lang/spip_bonux_ar.php -text
lang/spip_bonux_en.php -text
lang/spip_bonux_fr.php -text
lang/spip_bonux_it.php -text
modeles/pagination.html -text
modeles/pagination_noancre.html -text
modeles/pagination_page.html -text

@ -6,6 +6,8 @@
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Proposer un chargement par defaut pour les #FORMULAIRE_CONFIGURER_XXX
*
@ -16,6 +18,7 @@ function spip_bonux_formulaire_charger($flux){
if ($form = $flux['args']['form']
AND strncmp($form,'configurer_',11)==0 // un #FORMULAIRE_CONFIGURER_XXX
AND !charger_fonction("charger","formulaires/$form/",true) // sans fonction charger()
#AND !$flux['data'] // ne pas ecraser ce que des plugins on peut etre deja remplis (tq _saisies)
) {
$flux['data'] = spip_bonux_formulaires_configurer_recense($form);

@ -1,37 +1,39 @@
[(#REM) Attention #ENV est un tableau serialize, et echappe, donc inutilisable
Preferer #ENV* ]
<B_test10>
#TOTAL_BOUCLE items dans l'env<br />
<BOUCLE_test10(POUR){tableau #ENV*}>
#CLE=>#VALEUR<br />
#COMPTEUR_BOUCLE) #CLE=>#VALEUR<br />
</BOUCLE_test10>
<hr />
<BOUCLE_test101(POUR){tableau #ENV*}>
#CLE=>#VALEUR<br />
#COMPTEUR_BOUCLE) #CLE=>#VALEUR<br />
</BOUCLE_test101>
<hr />
<BOUCLE_test11(POUR){tableau #EVAL{$GLOBALS['_ENV']}}>
#CLE=>#VALEUR<br />
#COMPTEUR_BOUCLE) #CLE=>#VALEUR<br />
</BOUCLE_test11>
<hr />
<BOUCLE_test12(POUR){tableau #ENV*}{par cle}>
#CLE=>#VALEUR<br />
#COMPTEUR_BOUCLE) #CLE=>#VALEUR<br />
</BOUCLE_test12>
<hr />
<BOUCLE_test13(POUR){tableau #ENV*}{!par cle}>
#CLE=>#VALEUR<br />
#COMPTEUR_BOUCLE) #CLE=>#VALEUR<br />
</BOUCLE_test13>
<hr />
<BOUCLE_test14(POUR){tableau #ENV*}{par valeur}>
#CLE=>#VALEUR<br />
#COMPTEUR_BOUCLE) #CLE=>#VALEUR<br />
</BOUCLE_test14>
<hr />
<BOUCLE_test15(POUR){tableau #ENV*}{!par valeur}>
#CLE=>#VALEUR<br />
#COMPTEUR_BOUCLE) #CLE=>#VALEUR<br />
</BOUCLE_test15>
<hr />
@ -81,27 +83,27 @@ Preferer #ENV* ]
<h2>Tableau GET</h2>
#SET{test,#ARRAY{1,2,5,6,3,4}}
<BOUCLE_test30(POUR){tableau #GET{test}}>
#CLE=>#VALEUR<br />
#COMPTEUR_BOUCLE) #CLE=>#VALEUR<br />
</BOUCLE_test30>
<hr />
<h3>Par cle</h3>
<BOUCLE_test31(POUR){tableau #GET{test}}{par cle}>
#CLE=>#VALEUR<br />
#COMPTEUR_BOUCLE) #CLE=>#VALEUR<br />
</BOUCLE_test31>
<hr />
<h3>!Par cle</h3>
<BOUCLE_test32(POUR){tableau #GET{test}}{!par cle}>
#CLE=>#VALEUR<br />
#COMPTEUR_BOUCLE) #CLE=>#VALEUR<br />
</BOUCLE_test32>
<hr />
<h3>Par valeur</h3>
<BOUCLE_test33(POUR){tableau #GET{test}}{par valeur}>
#CLE=>#VALEUR<br />
#COMPTEUR_BOUCLE) #CLE=>#VALEUR<br />
</BOUCLE_test33>
<hr />
<h3>!Par valeur</h3>
<BOUCLE_test34(POUR){tableau #GET{test}}{!par valeur}>
#CLE=>#VALEUR<br />
#COMPTEUR_BOUCLE) #CLE=>#VALEUR<br />
</BOUCLE_test34>
@ -111,7 +113,7 @@ Pagination
<B_test40>
<p class="pagination">#PAGINATION</p>
<BOUCLE_test40(POUR){tableau #GET{test}}{pagination 5}>
#CLE=>#VALEUR<br />
#COMPTEUR_BOUCLE) #CLE=>#VALEUR<br />
</BOUCLE_test40>
[#TOTAL_BOUCLE/#GRAND_TOTAL]
</B_test40>

@ -1,34 +1,34 @@
<script type='text/javascript' src='#CHEMIN{formulaires/dateur/dates.js}'></script>
<script type='text/javascript' src='#CHEMIN{formulaires/dateur/jquery.datePicker.js}'></script>
<script type='text/javascript' src='#CHEMIN{formulaires/dateur/jquery.timePicker.js}'></script>
<script type='text/javascript'><!--
Date.dayNames = ['<:date_jour_1:>', '<:date_jour_2:>', '<:date_jour_3:>', '<:date_jour_4:>', '<:date_jour_5:>', '<:date_jour_6:>', '<:date_jour_7:>'];
Date.abbrDayNames = ['<:date_jour_1_abbr:>', '<:date_jour_2_abbr:>', '<:date_jour_3_abbr:>', '<:date_jour_4_abbr:>', '<:date_jour_5_abbr:>', '<:date_jour_6_abbr:>', '<:date_jour_7_abbr:>'];
Date.monthNames = ['<:date_mois_1:>', '<:date_mois_2:>', '<:date_mois_3:>', '<:date_mois_4:>', '<:date_mois_5:>', '<:date_mois_6:>', '<:date_mois_7:>', '<:date_mois_8:>', '<:date_mois_9:>', '<:date_mois_10:>', '<:date_mois_11:>', '<:date_mois_12:>'];
Date.abbrMonthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
Date.firstDayOfWeek = 1;
Date.format = '#ENV{dateFormat,'dd/mm/yyyy'}';
jQuery.dpText = {
TEXT_PREV_YEAR : '<:spip_bonux:annee_precedente|texte_script:>',
TEXT_PREV_MONTH : '<:spip_bonux:mois_precedent|texte_script:>',
TEXT_NEXT_YEAR : '<:spip_bonux:annee_suivante|texte_script:>',
TEXT_NEXT_MONTH : '<:spip_bonux:mois_suivant|texte_script:>',
TEXT_CLOSE : '<:spip_bonux:bouton_fermer|texte_script:>',
TEXT_CHOOSE_DATE : '<img src=\'#CHEMIN{formulaires/dateur/picker-16.gif}\' alt=\'<:spip_bonux:afficher_calendrier|attribut_html:>\' />',
TITLE_CHOOSE_DATE : '<:spip_bonux:afficher_calendrier|texte_script:>'
}
jQuery(function()
{
jQuery('input.date').datePicker({startDate:'#ENV{startDate,'01/01/1900'}'[,endDate:'(#ENV{endDate})']}).dpSetPosition(jQuery.dpConst.POS_TOP, jQuery.dpConst.POS_RIGHT);
jQuery("input.heure").timePicker();
});
--></script>
<style type="text/css">
@import url(#CHEMIN{formulaires/dateur/datePicker.css});
@import url(#CHEMIN{formulaires/dateur/timePicker.css});
a.dp-choose-date { display: inline-block; padding: 0; margin: 3px 0 0 -19px; vertical-align: bottom; }
div.time-picker {font-size:11px; width:5em; /* needed for IE */}
.formulaire_spip input.date {width:9em;padding-right:20px;}
.formulaire_spip input.heure {width:7em;}
<script type='text/javascript' src='#CHEMIN{formulaires/dateur/dates.js}'></script>
<script type='text/javascript' src='#CHEMIN{formulaires/dateur/jquery.datePicker.js}'></script>
<script type='text/javascript' src='#CHEMIN{formulaires/dateur/jquery.timePicker.js}'></script>
<script type='text/javascript'><!--
Date.dayNames = ['<:date_jour_1:>', '<:date_jour_2:>', '<:date_jour_3:>', '<:date_jour_4:>', '<:date_jour_5:>', '<:date_jour_6:>', '<:date_jour_7:>'];
Date.abbrDayNames = ['<:date_jour_1_abbr:>', '<:date_jour_2_abbr:>', '<:date_jour_3_abbr:>', '<:date_jour_4_abbr:>', '<:date_jour_5_abbr:>', '<:date_jour_6_abbr:>', '<:date_jour_7_abbr:>'];
Date.monthNames = ['<:date_mois_1:>', '<:date_mois_2:>', '<:date_mois_3:>', '<:date_mois_4:>', '<:date_mois_5:>', '<:date_mois_6:>', '<:date_mois_7:>', '<:date_mois_8:>', '<:date_mois_9:>', '<:date_mois_10:>', '<:date_mois_11:>', '<:date_mois_12:>'];
Date.abbrMonthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
Date.firstDayOfWeek = 1;
Date.format = '#ENV{dateFormat,'dd/mm/yyyy'}';
jQuery.dpText = {
TEXT_PREV_YEAR : '<:spip_bonux:annee_precedente|texte_script:>',
TEXT_PREV_MONTH : '<:spip_bonux:mois_precedent|texte_script:>',
TEXT_NEXT_YEAR : '<:spip_bonux:annee_suivante|texte_script:>',
TEXT_NEXT_MONTH : '<:spip_bonux:mois_suivant|texte_script:>',
TEXT_CLOSE : '<:spip_bonux:bouton_fermer|texte_script:>',
TEXT_CHOOSE_DATE : '<img src=\'#CHEMIN{formulaires/dateur/picker-16.gif}\' alt=\'<:spip_bonux:afficher_calendrier|attribut_html:>\' />',
TITLE_CHOOSE_DATE : '<:spip_bonux:afficher_calendrier|texte_script:>'
}
jQuery(function()
{
jQuery('input.date').datePicker({startDate:'#ENV{startDate,'01/01/1900'}'[,endDate:'(#ENV{endDate})']}).dpSetPosition(jQuery.dpConst.POS_TOP, jQuery.dpConst.POS_RIGHT);
jQuery("input.heure").timePicker({step:#ENV{heure_pas,30}});
});
--></script>
<style type="text/css">
@import url(#CHEMIN{formulaires/dateur/datePicker.css});
@import url(#CHEMIN{formulaires/dateur/timePicker.css});
a.dp-choose-date { display: inline-block; padding: 0; margin: 3px 0 0 -19px; vertical-align: bottom; }
div.time-picker {font-size:11px; width:5em; /* needed for IE */}
.formulaire_spip input.date {width:9em;padding-right:20px;}
.formulaire_spip input.heure {width:7em;}
</style>

@ -52,7 +52,7 @@ jQuery.fn.item_pick = function(id_item,name,title,type){
picked.html('');
else
jQuery('li.on',picked).removeClass('on');
var sel=jQuery('input[value='+id_item+']',picked);
var sel=jQuery('input[value="'+id_item+'"]',picked);
if (sel.length==0){
picked.addClass('changing').animeajax();
// simulons de la latence pour l'oeil de l'utilisateur

@ -1,5 +1,6 @@
<BOUCLE_branche(RUBRIQUES){id_rubrique=#ENV{limite_branche}}{statut?}>
#SET{rubriques_branche,#ARRAY}<BOUCLE_rubriques_branches(RUBRIQUES){branche}{exclus}{statut?}>#SET{rubriques_branche,#GET{rubriques_branche}|push{#ID_RUBRIQUE}}</BOUCLE_rubriques_branches>
[(#SET{titre_branche,[(#TITRE)]})]
[(#SET{rubriques_branche,#ARRAY})]<BOUCLE_rubriques_branches(RUBRIQUES){branche}{exclus}{statut?}>#SET{rubriques_branche,#GET{rubriques_branche}|push{#ID_RUBRIQUE}}</BOUCLE_rubriques_branches>
</BOUCLE_branche>
<BOUCLE_rub(RUBRIQUES){id_rubrique=#ENV{id_r,#ENV{id_rubrique}}}{statut?}>
<div class='chemin'>
@ -22,6 +23,6 @@
</BOUCLE_contenu>
</BOUCLE_rub>
<div class='chemin'><strong class='on'><:info_racine_site:></strong></div>
<div class='frame total_0 frame_0'><h2><:info_racine_site:></h2>[(#INCLURE{fond=formulaires/selecteur/inc-nav-rubriques}{id_rubrique=0}{env})]</div>
<div class='chemin'><strong class='on'>[(#GET{titre_branche,<:info_racine_site:>})]</strong></div>
<div class='frame total_0 frame_0'><h2>[(#GET{titre_branche,<:info_racine_site:>})]</h2>[(#INCLURE{fond=formulaires/selecteur/inc-nav-rubriques}{id_rubrique=#ENV{limite_branche,0}}{env})]</div>
<//B_rub>

@ -20,6 +20,7 @@ style='display:none;'>#GET{bouton_modif}</a>&#93;</div>
<input type="text" value="" id="picker_id" size="10" />
<a href="#"
onclick="jQuery.ajax({'url':'[(#URL_PAGE{ajax_item_pick,rubriques=[(#ENV{rubriques})]&articles=[(#ENV{articles})]&ref=})]'+jQuery('#picker_id').attr('value'),
'dataType':'text',
'success':function(r){
eval('r = '+r); // JSON envoye par ajax_item_pick.html
if (r){

@ -6,6 +6,7 @@
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_once _DIR_RESTREINT.'inc/config.php';
if (!defined('_DIR_PLUGIN_CFG')){
@ -15,5 +16,9 @@ if (!defined('_DIR_PLUGIN_CFG')){
return spip_bonux_lire_config($cfg, $def, $unserialize);
}
}
// charger celui de CFG si ce n'est pas le cas encore !
} elseif (!function_exists('lire_config')) {
include_spip('inc/cfg_config');
}
?>
?>

@ -2,13 +2,15 @@
/**
* Plugin Spip-Bonux
* Le plugin qui lave plus SPIP que SPIP
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Romy Tetue
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
* Licence GPL
*
* Fonctions integrees au core en branche 2.1 que l'on rend disponible en branche 2.0.x
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
// s'assurer que les filtres du core sont deja charges
// pour eviter tout risque de conflit
include_spip('inc/filtres');

@ -2,10 +2,11 @@
/**
* Plugin Spip-Bonux
* Le plugin qui lave plus SPIP que SPIP
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Romy Tetue
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
* Licence GPL
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Recuperer les champs date_xx et heure_xx, verifier leur coherence et les reformater

@ -2,7 +2,7 @@
/**
* Plugin Spip-Bonux
* Le plugin qui lave plus SPIP que SPIP
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Romy Tetue
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
* Licence GPL
*
* Fonctions d'export d'une requete sql ou d'un tableau
@ -11,6 +11,8 @@
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/charsets');
include_spip('inc/filtres');
include_spip('inc/texte');
@ -39,6 +41,7 @@ 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){
$output = str_replace('', '\'', $output);
$output = unicode2charset(html2unicode(charset2unicode($output)), $importer_charset);
}
return $output;
@ -60,9 +63,12 @@ function inc_exporter_csv_dist($titre, $resource, $delim=',', $entetes = null,$e
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';
#$importer_charset = $charset = 'iso-8859-1';
}
$filename = "$filename.$extension";
if (lire_meta('charset') === 'utf-8') {
$output = "\xEF\xBB\xBF"; // BOM, cf http://stackoverflow.com/questions/4348802/how-can-i-output-a-utf-8-csv-in-php-that-excel-will-read-properly
}
if ($entetes AND is_array($entetes) AND count($entetes))
$output = exporter_csv_ligne($entetes,$delim,$importer_charset);
@ -80,7 +86,8 @@ function inc_exporter_csv_dist($titre, $resource, $delim=',', $entetes = null,$e
fclose($fp);
if ($envoyer) {
Header("Content-Type: text/comma-separated-values; charset=$charset");
header('Content-Encoding: $charset');
Header("Content-Type: text/csv; charset=$charset");
Header("Content-Disposition: attachment; filename=$filename");
//non supporte
//Header("Content-Type: text/plain; charset=$charset");

@ -2,13 +2,15 @@
/**
* Plugin Spip-Bonux
* Le plugin qui lave plus SPIP que SPIP
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Romy Tetue
* (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;
include_spip('inc/charsets');
/**
@ -46,7 +48,7 @@ function importer_csv_importcharset($texte){
*/
function importer_csv_nettoie_key($key){
return translitteration($key);
/*$accents=array('é','è','ê','à','ù',"ô","ç","'");
/*$accents=array('<EFBFBD>','<27>','<27>','<27>','<27>',"<22>","<22>","'");
$accents_rep=array('e','e','e','a','u',"o","c","_");
return str_replace($accents,$accents_rep,$key);*/
}

@ -1,6 +1,7 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined("_ECRIRE_INC_VERSION")) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(

@ -1,6 +1,7 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined("_ECRIRE_INC_VERSION")) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
@ -18,7 +19,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'mois_precedent' => 'Previous month',
'mois_suivant' => 'Next month',
'id_rapide' => 'Ajout rapide',
'id_rapide' => 'Quick add',
'pages' => 'Pages',

@ -1,6 +1,7 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined("_ECRIRE_INC_VERSION")) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(

@ -0,0 +1,29 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined("_ECRIRE_INC_VERSION")) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
'afficher_calendrier' => 'Mostra il calendario',
'annee_precedente' => 'Anno precedente',
'annee_suivante' => 'Anno successivo',
'annuler_recherche' => 'Annulla la ricerca',
'bouton_fermer' => "Chiudi",
'erreur_date' => 'Questa data non &egrave; corretta',
'erreur_date_corrigee' => 'La data &egrave; stata corretta',
'erreur_heure' => 'Quest\'ora non &egrave; corretto',
'erreur_heure_corrigee' => 'L\'ora &egrave; stata corretta',
'mois_precedent' => 'Mese precedente',
'mois_suivant' => 'Mese successivo',
'id_rapide' => 'Inserimento rapido',
'pages' => 'Pagine',
);
?>

@ -1,18 +1,24 @@
<plugin>
<nom>SPIP Bonux</nom>
<auteur>Cedric Morin, Matthieu Marcillaud, romy.tetue.net</auteur>
<icon>img_pack/spip-bonux.png</icon>
<licence>(c) 2008-2010 GPL</licence>
<version>2.2.17</version>
<etat>stable</etat>
<description>Le plugin qui lave plus SPIP que SPIP, avec des chouettes cadeaux dedans ! Interface douce, boucles POUR et CONDITION, tableaux, compteur, etc.</description>
<lien>http://www.spip-contrib.net/SPIP-Bonux</lien>
<fonctions>public/spip_bonux_criteres.php</fonctions>
<fonctions>public/spip_bonux_balises.php</fonctions>
<fonctions>spip_bonux_fonctions.php</fonctions>
<options>spip_bonux_options.php</options>
<prefix>spip_bonux</prefix>
<necessite id='SPIP' version='[2.0.0;]' />
<nom>SPIP Bonux</nom>
<slogan>Un plugin avec plein de cadeaux !</slogan>
<auteur>Cedric Morin, Matthieu Marcillaud, Tetue</auteur>
<icon>img_pack/spip-bonux.png</icon>
<licence>(c) 2008-2012 GPL</licence>
<version>2.3.6</version>
<etat>stable</etat>
<description>
<multi>
[fr]Le plugin qui lave plus SPIP que SPIP, avec des chouettes cadeaux dedans ! Interface douce, boucles POUR et CONDITION, tableaux, compteur, etc.
[en]The plugin that offers a lot of nice gifts ! Sweet Interface, CONDITION and POUR loops, arrays, counters, etc.
</multi>
</description>
<lien>https://contrib.spip.net/SPIP-Bonux</lien>
<fonctions>public/spip_bonux_criteres.php</fonctions>
<fonctions>public/spip_bonux_balises.php</fonctions>
<fonctions>spip_bonux_fonctions.php</fonctions>
<options>spip_bonux_options.php</options>
<prefix>spip_bonux</prefix>
<necessite id='SPIP' version='[2.0.0;2.0.99]' />
<chemin dir='' />
<chemin dir='spip20/' />
<pipeline>
@ -23,23 +29,34 @@
<nom>formulaire_traiter</nom>
<inclure>configurer/pipelines.php</inclure>
</pipeline>
<fonctions>configurer/pipelines.php</fonctions>
<categorie>outil</categorie>
<fonctions>configurer/pipelines.php</fonctions>
<categorie>outil</categorie>
</plugin>
<plugin spip='[2.1.0-beta;]'>
<nom>SPIP Bonux</nom>
<auteur>Cedric Morin, Matthieu Marcillaud, romy.tetue.net</auteur>
<icon>img_pack/spip-bonux.png</icon>
<licence>(c) 2008-2010 GPL</licence>
<version>2.2.17</version>
<etat>stable</etat>
<description>Le plugin qui lave plus SPIP que SPIP, avec des chouettes cadeaux dedans ! Interface douce, boucles POUR et CONDITION, tableaux, compteur, etc.</description>
<lien>http://www.spip-contrib.net/SPIP-Bonux</lien>
<fonctions>public/spip_bonux_criteres.php</fonctions>
<fonctions>public/spip_bonux_balises.php</fonctions>
<fonctions>spip_bonux_fonctions.php</fonctions>
<options>spip_bonux_options.php</options>
<prefix>spip_bonux</prefix>
<plugin spip='[2.1.0;2.1.99]'>
<nom>SPIP Bonux</nom>
<slogan>
<multi>
[fr]Un plugin avec plein de cadeaux !
[en]A plugin with a lot of gifts !
</multi>
</slogan>
<auteur>Cedric Morin, Matthieu Marcillaud, Tetue</auteur>
<icon>img_pack/spip-bonux.png</icon>
<licence>(c) 2008-2012 GPL</licence>
<version>2.3.6</version>
<etat>stable</etat>
<description>
<multi>
[fr]Le plugin qui lave plus SPIP que SPIP, avec des chouettes cadeaux dedans ! Interface douce, boucles POUR et CONDITION, tableaux, compteur, etc.
[en]The plugin that offers a lot of nice gifts ! Sweet Interface, CONDITION and POUR loops, arrays, counters, etc.
</multi>
</description>
<lien>https://contrib.spip.net/SPIP-Bonux</lien>
<fonctions>public/spip_bonux_criteres.php</fonctions>
<fonctions>public/spip_bonux_balises.php</fonctions>
<fonctions>spip_bonux_fonctions.php</fonctions>
<options>spip_bonux_options.php</options>
<prefix>spip_bonux</prefix>
<pipeline>
<nom>formulaire_charger</nom>
<inclure>configurer/pipelines.php</inclure>
@ -48,6 +65,6 @@
<nom>formulaire_traiter</nom>
<inclure>configurer/pipelines.php</inclure>
</pipeline>
<fonctions>configurer/pipelines.php</fonctions>
<categorie>outil</categorie>
</plugin>
<fonctions>configurer/pipelines.php</fonctions>
<categorie>outil</categorie>
</plugin>

@ -2,11 +2,13 @@
/**
* Plugin Spip-Bonux
* Le plugin qui lave plus SPIP que SPIP
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Romy Tetue
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
* Licence GPL
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
// recuperer le nom du serveur,
// mais pas si c'est un serveur specifique (pour, connexion)
// attention, en SPIP 2.1, on recupere 'POUR' et non plus 'pour' comme en 2.0
@ -27,16 +29,10 @@ function get_nom_serveur($p) {
//
// #URL_ACTION_AUTEUR{converser,arg,redirect} -> ecrire/?action=converser&arg=arg&hash=xxx&redirect=redirect
//
// http://doc.spip.org/@balise_URL_ACTION_AUTEUR_dist
// https://code.spip.net/@balise_URL_ACTION_AUTEUR_dist
function balise_URL_ACTION_AUTEUR($p) {
$p->descr['session'] = true;
// si serveur externe, ce n'est pas possible
if (get_nom_serveur($p)) {
$p->code = 'generer_url_public("404")';
return $p;
}
$p->code = interprete_argument_balise(1,$p);
$args = interprete_argument_balise(2,$p);
if (!$args)
@ -53,7 +49,7 @@ function balise_URL_ACTION_AUTEUR($p) {
//
// #URL_ECRIRE{naviguer} -> ecrire/?exec=naviguer
//
// http://doc.spip.org/@balise_URL_ECRIRE_dist
// https://code.spip.net/@balise_URL_ECRIRE_dist
function balise_URL_ECRIRE($p) {
// si serveur externe, ce n'est pas possible
@ -393,17 +389,15 @@ function balise_INFO__dist($p){
if ($info === 'INFO_' or !$type_objet or !$id_objet) {
$msg = _T('zbug_balise_sans_argument', array('balise' => ' INFO_'));
erreur_squelette($msg, $p);
$p->interdire_scripts = false;
$p->interdire_scripts = true;
return $p;
} elseif ($f = charger_fonction($nom, 'balise', true)) {
return $f($p);
}else {
$p->code = champ_sql($info, $p);
$p->code = champ_sql($info, $p, false);
if (strpos($p->code, '@$Pile[0]') !== false) {
$info = strtolower(substr($info,5));
$p->code = "generer_info_entite($id_objet, $type_objet, '$info')";
$p->code = "generer_info_entite($id_objet, $type_objet, '$info'".($p->etoile?","._q($p->etoile):"").")";
}
$p->interdire_scripts = false;
$p->interdire_scripts = true;
return $p;
}
}
@ -487,8 +481,13 @@ function spip_bonux_sauter(&$res, &$pos, $nb, $total){
}
/**
* #SAUTER{n} permet de sauter n resultats dans une boucle
* n>0
* #SAUTER{n} permet de sauter en avant n resultats dans une boucle
* La balise modifie le compteur courant de la boucle, mais pas les autres
* champs
*
* L'argument n doit etre superieur a zero sinon la balise ne fait rien
* Lorsque sql_seek est disponible, il est utilise,
* sinon le saut est realise par n sql_fetch
*
* @param <type> $p
* @return <type>
@ -507,7 +506,9 @@ function balise_SAUTER_dist($p){
* Produire un fichier statique a partir d'un squelette dynamique
* Permet ensuite a apache de le servir en statique sans repasser
* par spip.php a chaque hit sur le fichier
* le format css ou js doit etre passe dans options['format']
* si le format (css ou js) est passe dans contexte['format'], on l'utilise
* sinon on regarde si le fond finit par .css ou .js
* sinon on utilie "html"
*
* @param string $fond
* @param array $contexte
@ -516,40 +517,52 @@ function balise_SAUTER_dist($p){
* @return string
*/
function produire_fond_statique($fond, $contexte=array(), $options = array(), $connect=''){
// recuperer le code CSS produit par le squelette
if (isset($contexte['format'])){
$extension = $contexte['format'];
unset($contexte['format']);
}
else {
$extension = "html";
if (preg_match(',[.](css|js|json)$,',$fond,$m))
$extension = $m[1];
}
// recuperer le contenu produit par le squelette
$options['raw'] = true;
$cache = recuperer_fond($fond,$contexte,$options,$connect);
$extension = $options['format'];
// calculer le nom de la css
// calculer le nom de la css
$dir_var = sous_repertoire (_DIR_VAR, 'cache-'.$extension);
$filename = $dir_var . $extension."dyn-".md5($fond.serialize($contexte).$connect) .".$extension";
if (!file_exists($filename)
OR filemtime($filename)<$cache['lastmodified']){
$contenu = $cache['texte'];
// passer les urls en absolu si c'est une css
if ($extension=="css")
$contenu = urls_absolues_css($contenu, generer_url_public($fond));
$comment = "/*\n * #PRODUIRE_".strtoupper($extension)."_FOND{fond=$fond";
foreach($contexte as $k=>$v)
$comment .= ",$k=$v";
$comment .="}\n * le ".date("Y-m-d H:i:s")."\n */\n";
// et ecrire le fichier
ecrire_fichier($filename,$comment.$contenu);
}
return $filename;
// mettre a jour le fichier si il n'existe pas
// ou trop ancien
if (!file_exists($filename)
OR filemtime($filename)<$cache['lastmodified']
OR $GLOBALS['var_mode']=='recalcul') {
$contenu = $cache['texte'];
// passer les urls en absolu si c'est une css
if ($extension=="css")
$contenu = urls_absolues_css($contenu, generer_url_public($fond));
// ne pas insérer de commentaire si c'est du json
if ($extension!="json") {
$comment = "/* #PRODUIRE{fond=$fond";
foreach($contexte as $k=>$v)
$comment .= ",$k=$v";
$comment .="} le ".date("Y-m-d H:i:s")." */\n";
}
// et ecrire le fichier
ecrire_fichier($filename,$comment.$contenu);
}
return $filename;
}
function produire_css_fond($fond, $contexte=array(), $options = array(), $connect=''){
$options['format'] = "css";
$contexte['format'] = "css";
return produire_fond_statique($fond, $contexte, $options, $connect);
}
function produire_js_fond($fond, $contexte=array(), $options = array(), $connect=''){
$options['format'] = "js";
$contexte['format'] = "js";
return produire_fond_statique($fond, $contexte, $options, $connect);
}
@ -567,9 +580,7 @@ function produire_js_fond($fond, $contexte=array(), $options = array(), $connect
function balise_PRODUIRE_CSS_FOND_dist($p){
$balise_inclure = charger_fonction('INCLURE','balise');
$p = $balise_inclure($p);
$p->code = str_replace('recuperer_fond(','produire_css_fond(',$p->code);
return $p;
}
/**
@ -586,10 +597,30 @@ function balise_PRODUIRE_CSS_FOND_dist($p){
function balise_PRODUIRE_JS_FOND_dist($p){
$balise_inclure = charger_fonction('INCLURE','balise');
$p = $balise_inclure($p);
$p->code = str_replace('recuperer_fond(','produire_js_fond(',$p->code);
return $p;
}
/**
* #PRODUIRE
* generer un fichier statique a partir d'un squelette SPIP
*
* Le format du fichier sera extrait de la preextension du squelette (typo.css.html, messcripts.js.html)
* ou par l'argument format=css ou format=js passe en argument.
*
* Si pas de format detectable, on utilise .html, comme pour les squelettes
*
* <link rel="stylesheet" type="text/css" href="#PRODUIRE{fond=css/macss.css,couleur=ffffff}" />
* la syntaxe de la balise est la meme que celle de #INCLURE
*
* @param object $p
* @return object
*/
function balise_PRODUIRE_dist($p){
$balise_inclure = charger_fonction('INCLURE','balise');
$p = $balise_inclure($p);
$p->code = str_replace('recuperer_fond(','produire_fond_statique(',$p->code);
return $p;
}
?>

@ -2,11 +2,13 @@
/**
* Plugin Spip-Bonux
* Le plugin qui lave plus SPIP que SPIP
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Romy Tetue
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
* Licence GPL
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
$GLOBALS['exception_des_connect'][] = 'pour';
$GLOBALS['exception_des_connect'][] = 'condition';
@ -29,7 +31,7 @@ function critere_CONDITION_si_dist($idb, &$boucles, $crit) {
}
/**
* http://www.spip-contrib.net/Classer-les-articles-par-nombre-de#forum409210
* https://contrib.spip.net/Classer-les-articles-par-nombre-de#forum409210
* Permet de faire un comptage par table liee
* exemple
* <BOUCLE1(AUTEURS){compteur articles}{par compteur_articles}>

@ -18,7 +18,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
// Avec un argument de type tableau, elle remplace le tableau par defaut
// par celui donne en argument
// http://doc.spip.org/@inc_couleurs_dist
// https://code.spip.net/@inc_couleurs_dist
function inc_couleurs_dist($choix=NULL,$ajouter = false)
{
static $couleurs_spip = array(

@ -2,16 +2,18 @@
/**
* Plugin Spip-Bonux
* Le plugin qui lave plus SPIP que SPIP
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Romy Tetue
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
* Licence GPL
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/core21_filtres');
/**
* une fonction pour generer des menus avec liens
* ou un span lorsque l'item est selectionne
* une fonction pour générer des menus avec liens
* ou un span lorsque l'item est sélectionné
*
* @param string $url
* @param string $libelle
@ -26,7 +28,7 @@ function aoustrong($url,$libelle,$on=false,$class="",$title="",$rel=""){
/**
* une fonction pour generer une balise img a partir d'un nom de fichier
* une fonction pour générer une balise img à partir d'un nom de fichier
*
* @param string $img
* @param string $alt
@ -49,7 +51,7 @@ function affiche_un_ou_plusieurs($nb,$chaine_un,$chaine_plusieurs,$var='nb'){
}
/**
* Ajouter un timestamp a une url de fichier
* Ajouter un timestamp à une url de fichier
*
* @param unknown_type $fichier
* @return unknown
@ -61,15 +63,15 @@ function timestamp($fichier){
}
/**
* Transformer un tableau d'entrees array("rubrique|9","article|8",...)
* en un tableau contenant uniquement les identifiants d'un type donne.
* Accepte aussi que les valeurs d'entrees soient une chaine brute
* Transformer un tableau d'entrées array("rubrique|9","article|8",...)
* en un tableau contenant uniquement les identifiants d'un type donné.
* Accepte aussi que les valeurs d'entrées soient une chaîne brute
* "rubrique|9,article|8,..."
*
* @param array/string $selected liste des entrees : tableau ou chaine separee par des virgules
* @param string $type type de valeur a recuperer ('rubrique', 'article')
* @param array/string $selected liste des entrées : tableau ou chaîne séparée par des virgules
* @param string $type type de valeur à récuperer ('rubrique', 'article')
*
* @return array liste des identifiants trouves.
* @return array liste des identifiants trouvés.
**/
function picker_selected($selected, $type){
$select = array();
@ -103,23 +105,23 @@ function picker_identifie_id_rapide($ref,$rubriques=0,$articles=0){
}
/**
* Donner n'importe quelle information sur un objet de maniere generique.
* Donner n'importe quelle information sur un objet de manière générique.
*
* La fonction va gerer en interne deux cas particuliers les plus utilises :
* La fonction va gérer en interne deux cas particuliers les plus utilisés :
* l'URL et le titre (qui n'est pas forcemment la champ SQL "titre").
*
* On peut ensuite personnaliser les autres infos en creant une fonction
* On peut ensuite personnaliser les autres infos en créant une fonction
* generer_<nom_info>_entite($id_objet, $type_objet, $ligne).
* $ligne correspond a la ligne SQL de tous les champs de l'objet, les fonctions
* de personnalisation n'ont donc pas a refaire de requete.
* $ligne correspond à la ligne SQL de tous les champs de l'objet, les fonctions
* de personnalisation n'ont donc pas à refaire de requête.
*
* @param int $id_objet
* @param string $type_objet
* @param string $info
* @return string
*/
function generer_info_entite($id_objet, $type_objet, $info){
// On verifie qu'on a tout ce qu'il faut
function generer_info_entite($id_objet, $type_objet, $info, $etoile=''){
// On vérifie qu'on a tout ce qu'il faut
$id_objet = intval($id_objet);
if (!($id_objet and $type_objet and $info))
return '';
@ -128,7 +130,7 @@ function generer_info_entite($id_objet, $type_objet, $info){
if ($info == 'url')
return generer_url_entite($id_objet, $type_objet);
// Si on demande le titre, on le gere en interne
// Si on demande le titre, on le gère en interne
if ($demande_titre = ($info == 'titre')){
global $table_titre;
$champ_titre = $table_titre[table_objet($type_objet)];
@ -136,10 +138,10 @@ function generer_info_entite($id_objet, $type_objet, $info){
$champ_titre = ", $champ_titre";
}
// Sinon on va tout chercher dans la table et on garde en memoire
// Sinon on va tout chercher dans la table et on garde en mémoire
static $objets;
// On ne fait la requete que si on a pas deja l'objet ou si on demande le titre mais qu'on ne l'a pas encore
// On ne fait la requête que si on n'a pas déjà l'objet ou si on demande le titre mais qu'on ne l'a pas encore
if (!$objets[$type_objet][$id_objet] or ($demande_titre and !$objets[$type_objet][$id_objet]['titre'])){
include_spip('base/abstract_sql');
include_spip('base/connect_sql');
@ -160,13 +162,13 @@ function generer_info_entite($id_objet, $type_objet, $info){
else
$info_generee = $ligne[$info];
// On va ensuite chercher les traitements automatiques a faire
// On va ensuite chercher les traitements automatiques à faire
global $table_des_traitements;
$maj = strtoupper($info);
$traitement = $table_des_traitements[$maj];
$table_objet = table_objet($type_objet);
if (is_array($traitement)){
if (!$etoile and is_array($traitement)){
$traitement = $traitement[isset($traitement[$table_objet]) ? $table_objet : 0];
$traitement = str_replace('%s', '"'.str_replace('"', '\\"', $info_generee).'"', $traitement);
eval("\$info_generee = $traitement;");
@ -176,8 +178,8 @@ function generer_info_entite($id_objet, $type_objet, $info){
}
/**
* Proteger les champs passes dans l'url et utiliser dans {tri ...}
* preserver l'espace pour interpreter ensuite num xxx et multi xxx
* Protéger les champs passés dans l'url et utilisés dans {tri ...}
* préserver l'espace pour interpréter ensuite num xxx et multi xxx
* @param string $t
* @return string
*/
@ -186,9 +188,10 @@ function tri_protege_champ($t){
}
/**
* Interpreter les multi xxx et num xxx utilise comme tri
* Interpréter les multi xxx et num xxx utilisés comme tri
* pour la clause order
* 'multi xxx' devient simplement 'multi' qui est calcule dans le select
* 'multi xxx' devient simplement 'multi' qui est calculé dans le select
* 'hasard' est calculé dans le select
* @param string $t
* @return string
*/
@ -196,7 +199,7 @@ function tri_champ_order($t,$table=NULL,$field=NULL){
if (strncmp($t,'num ',4)==0){
$t = substr($t,4);
$t = preg_replace(',\s,','',$t);
// Lever une ambiguité possible si le champs fait partie de la table (pour compatibilité de la balise tri avec compteur, somme, etc.)
// Lever une ambiguïté possible si le champ fait partie de la table (pour compatibilité de la balise tri avec compteur, somme, etc.)
if (!is_null($table) && !is_null($field) && in_array($t,unserialize($field)))
$t = "0+$table.$t";
else
@ -208,7 +211,7 @@ function tri_champ_order($t,$table=NULL,$field=NULL){
}
else {
$t = preg_replace(',\s,','',$t);
// Lever une ambiguité possible si le champs fait partie de la table (pour compatibilité de la balise tri avec compteur, somme, etc.)
// Lever une ambiguïté possible si le champ fait partie de la table (pour compatibilité de la balise tri avec compteur, somme, etc.)
if (!is_null($table) && !is_null($field) && in_array($t,unserialize($field)))
return $table.'.'.$t;
else
@ -217,10 +220,11 @@ function tri_champ_order($t,$table=NULL,$field=NULL){
}
/**
* Interpreter les multi xxx et num xxx utilise comme tri
* Interpréter les multi xxx et num xxx utilisés comme tri
* pour la clause select
* 'multi xxx' devient select "...." as multi
* les autres cas ne produisent qu'une chaine vide '' en select
* les autres cas ne produisent qu'une chaîne vide '' en select
* 'hasard' devient 'rand() AS hasard' dans le select
*
* @param string $t
* @return string
@ -232,7 +236,96 @@ function tri_champ_select($t){
$t = sql_multi($t,$GLOBALS['spip_lang']);
return $t;
}
if(trim($t)=='hasard'){
return 'rand() AS hasard';
}
return "''";
}
?>
/**
* Rediriger une page suivant une autorisation,
* et ce, n'importe où dans un squelette, même dans les inclusions.
*
* @param bool $ok Indique si l'on doit rediriger ou pas
* @param string $url Adresse vers laquelle rediriger
* @param int $statut Statut HTML avec lequel on redirigera
* @return string
*/
function filtre_sinon_interdire_acces_dist($ok=false, $url='', $statut=0){
if ($ok) return '';
// vider tous les tampons
while (ob_get_level())
ob_end_clean();
include_spip('inc/headers');
$statut = intval($statut);
// Si aucun argument on essaye de deviner quoi faire
if (!$url and !$statut){
// Si on est dans l'espace privé, on génère du 403 Forbidden
if (test_espace_prive()){
http_status(403);
$echec = charger_fonction('403','exec');
$echec();
}
// Sinon on redirige vers une 404
else{
$statut = 404;
}
}
// Sinon on suit les directives indiquées dans les deux arguments
// S'il y a un statut
if ($statut){
// Dans tous les cas on modifie l'entité avec ce qui est demandé
http_status($statut);
// Si le statut est une erreur 4xx on va chercher le squelette
if ($statut >= 400)
echo recuperer_fond("$statut");
}
// S'il y a une URL, on redirige (si pas de statut, la fonction mettra 302)
if ($url) redirige_par_entete($url, '', $statut);
exit;
}
/**
* Calculer et retourner la profondeur de la rubrique
* (dans spip3, c'est un champ de la table rubrique)
* les rubriques à la racine sont à une profondeur de 1
*
* @param string
* @return int
*/
function filtre_profondeur_dist($id_rubrique) {
$id_rubrique = intval($id_rubrique);
// sauver les calculs déjà faits
static $profs = array();
if (isset($profs[$id_rubrique])) {
return $profs[$id_rubrique];
}
// récupérer le parent.
$id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique='.$id_rubrique);
// pas de parent : id_rubrique n'existe pas
if (is_null($id_parent)) {
return '';
}
// parent zéro : on est tout en haut (racine)
if ($id_parent == '0') {
return $profs[$id_rubrique] = 1;
}
// sinon, on trouve la profondeur du parent
$parent = filtre_profondeur_dist($id_parent);
$profs[$id_rubrique] = ($parent + 1);
return $profs[$id_rubrique];
}
?>

@ -2,11 +2,13 @@
/**
* Plugin Spip-Bonux
* Le plugin qui lave plus SPIP que SPIP
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Romy Tetue
* (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
* Licence GPL
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* une fonction qui regarde si $texte est une chaine de langue
* de la forme <:qqch:>
@ -17,6 +19,7 @@
* @param string $mode_typo Le mode d'application de la fonction typo(), avec trois valeurs possibles "toujours", "jamais" ou "multi".
* @return unknown_type Retourne la valeur éventuellement modifiée.
*/
if (!function_exists('_T_ou_typo')){
function _T_ou_typo($valeur, $mode_typo='toujours') {
// Si la valeur est bien une chaine (et pas non plus un entier déguisé)
@ -45,7 +48,9 @@ function _T_ou_typo($valeur, $mode_typo='toujours') {
return $valeur;
}
}
if (!function_exists('spip_array_insert')) {
/*
* 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.
@ -60,7 +65,7 @@ function _T_ou_typo($valeur, $mode_typo='toujours') {
* @param bool $avant Indique si l'insertion se fait avant la clé (par défaut c'est après)
* @return array Retourne le tableau avec l'insertion
*/
function 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){
$index = count($arr1); // insert @ end of array if $key not found
@ -73,6 +78,7 @@ function array_insert($arr1, $cle, $arr2, $avant=false){
$fin = array_splice($arr1, $index);
return array_merge($arr1, $arr2, $fin);
}
}
/*
* Une fonction extrêmement pratique, mais qui n'est disponible qu'à partir de PHP 5.3 !

@ -1,5 +1,7 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
function tous_les_fonds($dir,$pattern){
$liste = find_all_in_path($dir,$pattern);
foreach($liste as $k=>$v)

Loading…
Cancel
Save