Browse Source

suppression des appels explicites aux champs extra dans le core

tous les points d'entree sont la pour gerer intregralement ceux ci dans un plugin
svn/attic/branches/spip-2.0.0/12601
Cerdic 14 years ago
parent
commit
16144b4128
  1. 56
      ecrire/exec/articles_versions.php
  2. 4
      ecrire/exec/breves_voir.php
  3. 42
      ecrire/exec/mots_edit.php
  4. 15
      ecrire/exec/naviguer.php
  5. 4
      ecrire/exec/sites.php
  6. 12
      ecrire/inc/afficher_contenu_objet.php
  7. 42
      ecrire/inc/auteur_infos.php
  8. 16
      ecrire/inc/editer.php
  9. 403
      ecrire/inc/extra.php
  10. 16
      ecrire/inc/filtres.php
  11. 25
      ecrire/inc/modifier.php
  12. 2
      ecrire/inc/plugin.php
  13. 7
      ecrire/inc_version.php
  14. 42
      ecrire/public/balises.php
  15. 3
      prive/contenu/article.html
  16. 3
      prive/contenu/breve.html
  17. 3
      prive/contenu/rubrique.html
  18. 3
      prive/contenu/site.html

56
ecrire/exec/articles_versions.php

@ -23,7 +23,7 @@ function exec_articles_versions_dist()
// http://doc.spip.org/@exec_articles_versions_args
function exec_articles_versions_args($id_article, $id_version, $id_diff)
{
global $les_notes, $champs_extra, $spip_lang_left, $spip_lang_right;
global $les_notes, $spip_lang_left, $spip_lang_right;
if (!autoriser('voirrevisions', 'article', $id_article)
OR !$row = sql_fetsel("*", "spip_articles", "id_article=".sql_quote($id_article))){
@ -245,7 +245,8 @@ echo "</ul>\n";
//
if ($id_version) {
echo "\n\n<div style='text-align: justify;'>";
$revision = "";
// pour l'affichage du virtuel
@ -254,37 +255,48 @@ if ($id_version) {
}
if ($virtuel) {
echo debut_boite_info(true);
echo _T('info_renvoi_article'),
$revision .= debut_boite_info(true);
$revision .= _T('info_renvoi_article').
propre("<span style='text-align: center'> [->$virtuel]</span>");
echo fin_boite_info(true);
$revision .= fin_boite_info(true);
}
else {
echo "<div dir='$lang_dir'><b>";
echo justifier(propre_diff($chapo));
echo "</b></div>\n\n";
$revision .= "<div dir='$lang_dir'><b>";
$revision .= justifier(propre_diff($chapo));
$revision .= "</b></div>\n\n";
echo "<div dir='$lang_dir'>";
echo justifier(propre_diff($texte));
echo "</div>";
$revision .= "<div dir='$lang_dir'>";
$revision .= justifier(propre_diff($texte));
$revision .= "</div>";
if ($ps) {
echo debut_cadre_enfonce('',true);
echo "<div dir='$lang_dir' class='verdana1 spip_small'>", justifier("<b>"._T('info_ps')."</b> ".propre_diff($ps)), "</div>";
echo fin_cadre_enfonce(true);
$revision .= debut_cadre_enfonce('',true);
$revision .= "<div dir='$lang_dir' class='verdana1 spip_small'>" . justifier("<b>"._T('info_ps')."</b> ".propre_diff($ps)) ."</div>";
$revision .= fin_cadre_enfonce(true);
}
if ($les_notes) {
echo debut_cadre_relief('', true);
echo "<div dir='$lang_dir'><span class='spip_xx-small'>", justifier("<b>"._T('info_notes')."&nbsp;:</b> ".$les_notes), "</span></div>";
echo fin_cadre_relief(true);
}
if ($champs_extra AND $extra) {
include_spip('inc/extra');
echo extra_affichage($extra, "articles");
$revision .= debut_cadre_relief('', true);
$revision .= "<div dir='$lang_dir'><span class='spip_xx-small'>" . justifier("<b>"._T('info_notes')."&nbsp;:</b> ".$les_notes) . "</span></div>";
$revision .= fin_cadre_relief(true);
}
$contexte = array('id'=>$id_article,'id_rubrique'=>$id_rubrique);
// permettre aux plugin de faire des modifs ou des ajouts
$revision = pipeline('afficher_revision_objet',
array(
'args'=>array(
'type'=>'article',
'id_objet'=>$id_article,
'contexte'=>$contexte,
'id_version'=>$id_version
),
'data'=> $revision
)
);
}
echo "\n\n<div style='text-align: justify;'>$revision</div>";
}
echo fin_cadre_relief(true);

4
ecrire/exec/breves_voir.php

@ -25,7 +25,7 @@ function exec_breves_voir_dist()
// http://doc.spip.org/@exec_breves_voir_args
function exec_breves_voir_args($id_breve, $cherche_mot, $select_groupe)
{
global $champs_extra, $les_notes, $spip_display, $spip_lang_left, $spip_lang_right;
global $les_notes, $spip_display, $spip_lang_left, $spip_lang_right;
$row = sql_fetsel("*", "spip_breves", "id_breve=$id_breve");
if (!$row OR !autoriser('voir','breve',$id_breve)){
@ -67,8 +67,6 @@ function exec_breves_voir_args($id_breve, $cherche_mot, $select_groupe)
$dater = charger_fonction('dater', 'inc');
$meme_rubrique = charger_fonction('meme_rubrique', 'inc');
$editer_mots = charger_fonction('editer_mots', 'inc');
if ($champs_extra AND $extra)
include_spip('inc/extra');
echo $commencer_page("&laquo; $titre_breve &raquo;", "naviguer", "breves", $id_rubrique);

42
ecrire/exec/mots_edit.php

@ -141,28 +141,44 @@ function exec_mots_edit_args($id_mot, $id_groupe, $new, $table='', $table_id='',
$out .= icone_inline(_T('icone_modifier_mot'), generer_url_ecrire('mots_edit',"id_mot=$id_mot&edit=oui"), "mot-cle-24.gif", "rien.gif",$spip_lang_right,false," onclick=\"$('#mot-editer').show();$('#mot-voir').hide();return false;\"");
$out .= gros_titre($titre_mot,'',false);
$out .= "<div class='nettoyeur'></div>";
$contenu_mot = "";
if ($descriptif) {
$out .= "<div style='border: 1px dashed #aaaaaa; ' class='verdana1 spip_small'>";
$out .= "<b>" . _T('info_descriptif') . "</b> ";
$out .= propre($descriptif);
$out .= "&nbsp; ";
$out .= "</div>";
$contenu_mot .= "<div style='border: 1px dashed #aaaaaa; ' class='verdana1 spip_small'>";
$contenu_mot .= "<b>" . _T('info_descriptif') . "</b> ";
$contenu_mot .= propre($descriptif);
$contenu_mot .= "&nbsp; ";
$contenu_mot .= "</div>";
}
if (strlen($texte)>0){
$out .= "<p class='verdana1 spip_small'>";
$out .= propre($texte);
$out .= "</p>";
$contenu_mot .= "<p class='verdana1 spip_small'>";
$contenu_mot .= propre($texte);
$contenu_mot .= "</p>";
}
if ($les_notes) {
$out .= debut_cadre_relief('',true);
$out .= "<div dir='" . lang_dir() ."' class='arial11'>";
$out .= justifier("<b>"._T('info_notes')."&nbsp;:</b> ".$les_notes);
$out .= "</div>";
$out .= fin_cadre_relief(true);
$contenu_mot .= debut_cadre_relief('',true);
$contenu_mot .= "<div dir='" . lang_dir() ."' class='arial11'>";
$contenu_mot .= justifier("<b>"._T('info_notes')."&nbsp;:</b> ".$les_notes);
$contenu_mot .= "</div>";
$contenu_mot .= fin_cadre_relief(true);
}
$contexte = array('id'=>$id_mot);
// permettre aux plugin de faire des modifs ou des ajouts
$contenu_mot = pipeline('afficher_contenu_objet',
array(
'args'=>array(
'type'=>'mot',
'id_objet'=>$id_mot,
'contexte'=>$contexte
),
'data'=> $contenu_mot
)
);
$out .= $contenu_mot;
if ($id_mot) {

15
ecrire/exec/naviguer.php

@ -31,7 +31,7 @@ function exec_naviguer_args($id_rubrique, $cherche_mot, $select_groupe)
$ze_logo = "racine-site-24.gif";
$row = array();
} else {
$row = sql_fetsel('id_parent, id_secteur, titre, statut, extra, lang, descriptif, texte', 'spip_rubriques', "id_rubrique=$id_rubrique");
$row = sql_fetsel('id_parent, id_secteur, titre, statut, lang, descriptif, texte', 'spip_rubriques', "id_rubrique=$id_rubrique");
if (!$row OR !autoriser('voir','rubrique',$id_rubrique)) {
include_spip('inc/minipres');
@ -97,19 +97,14 @@ function exec_naviguer_args($id_rubrique, $cherche_mot, $select_groupe)
$editer_mots = $editer_mots('rubrique', $id_rubrique, $cherche_mot, $select_groupe, $flag_editable, true);
} else $editer_mots = '';
if (isset($row['extra']) && $row['extra']) {
include_spip('inc/extra');
$extra = extra_affichage($extra, "rubriques");
} else $extra = "";
echo naviguer_droite($row, $id_rubrique, $id_parent, $id_secteur, $haut, $n_forums, $editer_mots, $flag_editable, $boucles, $extra),
echo naviguer_droite($row, $id_rubrique, $id_parent, $id_secteur, $haut, $n_forums, $editer_mots, $flag_editable, $boucles),
fin_gauche(),
fin_page();
}
}
// http://doc.spip.org/@naviguer_droite
function naviguer_droite($row, $id_rubrique, $id_parent, $id_secteur, $haut, $n_forums, $editer_mots, $flag_editable, $boucles, $extra)
function naviguer_droite($row, $id_rubrique, $id_parent, $id_secteur, $haut, $n_forums, $editer_mots, $flag_editable, $boucles)
{
global $spip_lang_right, $connect_toutes_rubriques;
@ -121,8 +116,8 @@ function naviguer_droite($row, $id_rubrique, $id_parent, $id_secteur, $haut, $n_
. pipeline('affiche_milieu',array('args'=>array('exec'=>'naviguer','id_rubrique'=>$id_rubrique),'data'=>''))
;
$onglet_contenu = $extra
. $afficher_contenu_objet('rubrique', $id_rubrique,$id_rubrique)
$onglet_contenu =
$afficher_contenu_objet('rubrique', $id_rubrique,$id_rubrique)
. (_INTERFACE_ONGLETS? $boucles:"");
$onglet_enfants =

4
ecrire/exec/sites.php

@ -71,8 +71,6 @@ function afficher_site($id_syndic, $id_rubrique, $nom_site, $row){
$editer_mots = charger_fonction('editer_mots', 'inc');
if ($flag_administrable)
$instituer_site = charger_fonction('instituer_site','inc');
if ($GLOBALS['champs_extra'] AND $extra)
include_spip('inc/extra');
$afficher_contenu_objet = charger_fonction('afficher_contenu_objet', 'inc');
echo debut_grand_cadre(true);
@ -157,8 +155,6 @@ function afficher_site($id_syndic, $id_rubrique, $nom_site, $row){
: choix_feed($id_syndic, $id_rubrique, $nom_site, $row))
. (_INTERFACE_ONGLETS?"":($flag_administrable ? options_moderation($row) : ""))
. (($GLOBALS['champs_extra'] AND $extra) ? extra_affichage($extra, "sites") : "")
;
$onglet_proprietes =

12
ecrire/inc/afficher_contenu_objet.php

@ -15,15 +15,17 @@
// http://doc.spip.org/@inc_afficher_contenu_objet_dist
function inc_afficher_contenu_objet_dist($type, $id, $id_rubrique){
include_spip('public/assembler');
if ($GLOBALS['champs_extra'])
include_spip('inc/extra');
$contexte = array('id'=>$id,'champs_extra'=>$GLOBALS['champs_extra']?1:0,'id_rubrique'=>$id_rubrique);
$contexte = array('id'=>$id,'id_rubrique'=>$id_rubrique);
// permettre aux plugin de faire des modifs ou des ajouts
$contenu_objet = pipeline('afficher_contenu_objet',
array(
'data'=> recuperer_fond("prive/contenu/$type",$contexte),
'args'=>array('type'=>$type,'id'=>$id)
'args'=>array(
'type'=>$type,
'id_objet'=>$id,
'contexte'=>$contexte
),
'data'=> recuperer_fond("prive/contenu/$type",$contexte)
)
);

42
ecrire/inc/auteur_infos.php

@ -177,47 +177,41 @@ function legender_auteur_voir($auteur) {
'',false);
$res .= "<div class='nettoyeur'></div>";
$res .= "<div id='auteur_infos_voir'>";
$contenu_auteur = "";
if (strlen($auteur['email']))
$res .= "<div>"._T('email_2')
$contenu_auteur .= "<div>"._T('email_2')
." <b><a href='mailto:".htmlspecialchars($auteur['email'])."'>"
.$auteur['email']."</a></b></div>";
if ($auteur['url_site']) {
if (!$auteur['nom_site'])
$auteur['nom_site'] = _T('info_site');
$res .= propre(_T('info_site_2')." [{{".$auteur['nom_site']."}}->".$auteur['url_site']."]");
$contenu_auteur .= propre(_T('info_site_2')." [{{".$auteur['nom_site']."}}->".$auteur['url_site']."]");
}
if (strlen($auteur['bio'])) {
$res .= propre("<quote>".$auteur['bio']."</quote>");
$contenu_auteur .= propre("<quote>".$auteur['bio']."</quote>");
}
if (strlen($auteur['pgp'])) {
$res .= propre("PGP: <cadre>".$auteur['pgp']."</cadre>");
$contenu_auteur .= propre("PGP: <cadre>".$auteur['pgp']."</cadre>");
}
// Ajouter le controles md5
if ($id_auteur) {
include_spip('inc/editer');
// ici je prefere construire la liste des champs a controler md5
// eviter de balancer des choses privees et sensibles comme md5(passw)
$ctr = array();
foreach (array('nom','bio','pgp','email','nom_site','url_site')
as $k)
$ctr[$k] = $auteur[$k];
$res .= controles_md5($ctr);
// le redirect est necessaire pour le controle d'erreur
$res .= "<input type='hidden' name='redirect' value='".rawurlencode(_DIR_RESTREINT_ABS.self('&'))."' />\n";
}
if ($GLOBALS['champs_extra'] AND $auteur['extra']) {
include_spip('inc/extra');
$res .= extra_affichage($auteur['extra'], 'auteurs');
}
$contexte = array('id'=>$id_auteur);
// permettre aux plugin de faire des modifs ou des ajouts
$contenu_auteur = pipeline('afficher_contenu_objet',
array(
'args'=>array(
'type'=>'auteur',
'id_objet'=>$id_auteur,
'contexte'=>$contexte
),
'data'=> $contenu_auteur
)
);
$res .= "</div>\n";
$res .= "<div id='auteur_infos_voir'>$contenu_auteur</div>\n";
return $res;

16
ecrire/inc/editer.php

@ -246,22 +246,14 @@ function controler_contenu($type, $id, $options=array(), $c=false, $serveur='')
// Nettoyer les valeurs
$champs = array_map('corriger_caracteres', $champs);
// recuperer les extras (utilise $_POST, un peu sale...
// a voir pour le faire marcher avec les crayons)
if (isset($desc['field']['extra'])
AND isset($_POST['extra'])
AND $GLOBALS['champs_extra']) {
include_spip('inc/extra');
$extra = extra_update($table_objet, $id, $_POST);
if ($extra !== false)
$champs['extra'] = $extra;
}
// Envoyer aux plugins
$champs = pipeline('pre_edition',
array(
'args' => array(
'table' => $spip_table_objet,
'table' => $spip_table_objet, // compatibilite
'table_objet' => $table_objet,
'spip_table_objet' => $spip_table_objet,
'type' =>$type,
'id_objet' => $id,
'champs' => $options['champs']
),

403
ecrire/inc/extra.php

@ -1,403 +0,0 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2008 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
////////////////////////////////////////////////////////////////////////////////////
// Pour utiliser les champs "extra", il faut installer dans le fichier
// ecrire/mes_options un tableau definissant les champs pour chaque
// type d'objet que l'on veut Žtendre (article, rubrique, breve, auteur,
// site ou mot). Pour acceder aux valeurs des champs extra dans les
// squelettes du site public, utiliser la notation :
// [(#EXTRA|extra{nom_du_champ})]
// Exemples :
/*
//
// Definition de tous les extras possibles
//
$GLOBALS['champs_extra'] = Array (
'auteurs' => Array (
"alim" => "radio|brut|Pr&eacute;f&eacute;rences alimentaires|Veggie,Viande",
"habitation" => "liste|brut|Lieu|Kuala Lumpur,Cape Town,Uppsala",
"ml" => "case|propre|Je souhaite m'abonner &agrave; la mailinglist",
"age" => "ligne|propre|&Acirc;ge du capitaine",
"biblio" => "bloc|propre|Bibliographie"
),
'articles' => Array (
"isbn" => "ligne|typo|ISBN",
"options" => "multiple|brut|Options de cet article|1,2,3,plus"
)
);
// Note : pour les listes et les radios on peut preciser les valeurs des labels
// Exemples
// "habitation" => "liste|brut|Lieu|San Diego,Suresnes|diego,suresnes",
*/
/*
// On peut optionnellement vouloir restreindre la portee des extras :
// - pour les articles/rubriques/breves en fonction du secteur ;
// - pour les auteurs en fonction du statut
// - pour les mots-cles en fonction du groupe de mots
// Exemples :
$GLOBALS['champs_extra_proposes'] = Array (
'auteurs' => Array (
// tous : par defaut
'tous' => 'age|alim|ml',
// les admins (statut='0minirezo') ont plus de champs que les auteurs
'0minirezo' => 'age|alim|ml|biblio|habitation'
),
'articles' => Array (
// tous : par defaut aucun champs extra sur les articles
'tous' => '',
// seul le champs extra "isbn" est proposé dans le secteur 1)
'1' => 'isbn',
// Dans le secteur 2 le champs "options" est proposé)
'2' => 'options'
)
);
*/
////////////////////////////////////////////////////////////////////////////////////
//
if (!defined("_ECRIRE_INC_VERSION")) return;
// a partir de la liste des champs, generer la liste des input
// http://doc.spip.org/@extra_saisie
function extra_saisie($extra, $table_objet, $ensemble='') {
include_spip('inc/presentation');
if ($affiche = extra_form($extra, $table_objet, $ensemble)) {
return debut_cadre_enfonce('',true)
. $affiche
. fin_cadre_enfonce(true);
}
}
// http://doc.spip.org/@extra_form
function extra_form($extra, $table_objet, $ensemble='') {
if (!is_array($extra))
$extra = @unserialize($extra);
// quels sont les extras de ce type d'objet
if (!$champs = $GLOBALS['champs_extra'][$table_objet])
$champs = Array();
// prendre en compte, eventuellement, les champs presents dans la base
// mais oublies dans mes_options.
if (is_array($extra))
foreach($extra as $key=>$ignore)
if (!$champs[$key])
$champs[$key] = "masque||($key?)";
// quels sont les extras proposes...
// ... si l'ensemble est connu
if ($ensemble && isset($GLOBALS['champs_extra_proposes'][$table_objet][$ensemble]))
$champs_proposes = explode('|', $GLOBALS['champs_extra_proposes'][$table_objet][$ensemble]);
// ... sinon, les champs proposes par defaut
else if (isset($GLOBALS['champs_extra_proposes'][$table_objet]['tous'])) {
$champs_proposes = explode('|', $GLOBALS['champs_extra_proposes'][$table_objet]['tous']);
}
// sinon tous les champs extra du type
else {
$champs_proposes = Array();
reset($champs);
while (list($ch, ) = each($champs)) $champs_proposes[] = $ch;
}
// bug explode
if($champs_proposes == explode('|', '')) $champs_proposes = Array();
// maintenant, on affiche les formulaires pour les champs renseignes dans $extra
// et pour les champs proposes
reset($champs_proposes);
while (list(, $champ) = each($champs_proposes)) {
$desc = $champs[$champ];
list($form, $filtre, $prettyname, $choix, $valeurs) = explode("|", $desc);
if (!$prettyname) $prettyname = ucfirst($champ);
$affiche .= "<b>$prettyname&nbsp;:</b><br />";
switch($form) {
// complique car la valeur n'esst pas envoyee ar le nav si unchecked
case "case":
case "checkbox":
$affiche = preg_replace("@<br />$@", "&nbsp;", $affiche);
$affiche .= "<input type='hidden' name='suppl_$champ' value='1' /><input type='checkbox' name='suppl_{$champ}_check'";
if ($extra[$champ] == 'true')
$affiche .= " checked";
$affiche .= " />";
break;
case "list":
case "liste":
case "select":
$choix = explode(",",$choix);
if (!is_array($choix)) {
$affiche .= _L("Pas de choix d&eacute;finis")."\n";
break;
}
// prendre en compte les valeurs des champs
// si elles sont renseignees
$valeurs = explode(",",$valeurs);
if($valeurs == explode(",",""))
$valeurs = $choix ;
$affiche .= "<select name='suppl_$champ' ";
$affiche .= "class='forml'>\n";
$i = 0 ;
while (list(, $choix_) = each($choix)) {
$val = $valeurs[$i] ;
$affiche .= "<option value=\"$val\"";
if ($val == entites_html($extra[$champ]))
$affiche .= " selected";
$affiche .= ">$choix_</option>\n";
$i++;
}
$affiche .= "</select>";
break;
case "radio":
$choix = explode(",",$choix);
if (!is_array($choix)) {
$affiche .= "Pas de choix d&eacute;finis.\n";
break;
}
$valeurs = explode(",",$valeurs);
if($valeurs == explode(",",""))
$valeurs = $choix ;
$i=0;
while (list(, $choix_) = each($choix)) {
$affiche .= "<input type='radio' name='suppl_$champ' ";
$val = $valeurs[$i] ;
if (entites_html($extra[$champ])== $val)
$affiche .= " checked";
// premiere valeur par defaut
if (!$extra[$champ] AND $i == 0)
$affiche .= " checked";
$affiche .= " value='$val'>$choix_</input>\n";
$i++;
}
break;
// A refaire car on a pas besoin de renvoyer comme pour checkbox
// les cases non cochees
case "multiple":
$choix = explode(",",$choix);
if (!is_array($choix)) {
$affiche .= "Pas de choix d&eacute;finis.\n";
break;
}
$affiche .= "<input type='hidden' name='suppl_{$champ}' value='1' />";
for ($i=0; $i < count($choix); $i++) {
$affiche .= "<input type='checkbox' name='suppl_$champ$i'";
if (entites_html($extra[$champ][$i])=="on")
$affiche .= " checked";
$affiche .= ">\n";
$affiche .= $choix[$i];
$affiche .= "</input>\n";
}
break;
case "bloc":
case "block":
$affiche .= "<textarea name='suppl_$champ' class='forml' rows='5' cols='40'>".entites_html($extra[$champ])."</textarea>\n";
break;
case "masque":
$affiche .= "<span style='color: #555555'>".interdire_scripts($extra[$champ])."</span>\n";
break;
case "ligne":
case "line":
default:
$affiche .= "<input type='text' name='suppl_$champ' class='forml'\n";
$affiche .= " value=\"".entites_html($extra[$champ])."\" size='40'>\n";
break;
}
$affiche .= "<input type='hidden' name='extra' value='1' />\n";
$affiche .= "<br />\n";
}
return $affiche;
}
// recupere les valeurs postees pour reconstituer l'extra
// http://doc.spip.org/@extra_recup_saisie
function extra_recup_saisie($table_objet, $c=false) {
$champs = $GLOBALS['champs_extra'][$table_objet];
if (is_array($champs)) {
$extra = Array();
foreach($champs as $champ => $config)
if (($val = _request("suppl_$champ",$c)) !== NULL) {
list($style, $filtre, , $choix,) = explode("|", $config);
list(, $filtre) = explode(",", $filtre);
switch ($style) {
case "multiple":
$choix = explode(",", $choix);
$multiple = array();
for ($i=0; $i < count($choix); $i++) {
$val2 = _request("suppl_$champ$i",$c);
if ($filtre && function_exists($filtre))
$multiple[$i] = $filtre($val2);
else
$multiple[$i] = $val2;
}
$extra[$champ] = $multiple;
break;
case 'case':
case 'checkbox':
if (_request("suppl_{$champ}_check") == 'on')
$val = 'true';
else
$val = 'false';
// pas de break; on continue
default:
if ($filtre && function_exists($filtre))
$extra[$champ] = $filtre($val);
else
$extra[$champ] = $val;
break;
}
}
return serialize($extra);
} else
return false;
}
// Retourne la liste des filtres a appliquer pour un champ extra particulier
// http://doc.spip.org/@extra_filtres
function extra_filtres($table_objet, $nom_champ) {
$champ = $GLOBALS['champs_extra'][$table_objet][$nom_champ];
if (!$champ) return array();
list(, $filtre, ) = explode("|", $champ);
list($filtre, ) = explode(",", $filtre);
if ($filtre && $filtre != 'brut' && function_exists($filtre))
return array($filtre);
return array();
}
// Retourne la liste des filtres a appliquer a la recuperation
// d'un champ extra particulier
// http://doc.spip.org/@extra_filtres_recup
function extra_filtres_recup($table_objet, $nom_champ) {
$champ = $GLOBALS['champs_extra'][$table_objet][$nom_champ];
if (!$champ) return array();
list(, $filtre, ) = explode("|", $champ);
list(,$filtre) = explode(",", $filtre);
if ($filtre && $filtre != 'brut' && function_exists($filtre))
return array($filtre);
return array();
}
// http://doc.spip.org/@extra_champ_valide
function extra_champ_valide($table_objet, $nom_champ) {
return isset($GLOBALS['champs_extra'][$table_objet][$nom_champ]);
}
// a partir de la liste des champs, generer l'affichage
// http://doc.spip.org/@extra_affichage
function extra_affichage($extra, $table_objet) {
$extra = unserialize ($extra);
if (!is_array($extra)) return;
$champs = $GLOBALS['champs_extra'][$table_objet];
while (list($nom,$contenu) = each($extra)) {
list ($style, $filtre, $prettyname, $choix, $valeurs) =
explode("|", $champs[$nom]);
list($filtre, ) = explode(",", $filtre);
switch ($style) {
case "checkbox":
case "case":
if ($contenu=="true") $contenu = _T('item_oui');
elseif ($contenu=="false") $contenu = _T('item_non');
break;
case "multiple":
$contenu_ = "";
$choix = explode (",", $choix);
if (is_array($contenu) AND is_array($choix)
AND count($choix)==count($contenu))
for ($i=0; $i < count($contenu); $i++)
if ($contenu[$i] == "on")
$contenu_ .= "$choix[$i], ";
else if ($contenu[$i] <> '')
$contenu_ = "Choix incoh&eacute;rents, "
."v&eacute;rifiez la configuration... ";
$contenu = preg_replace("/, $/", "", $contenu_);
break;
}
if ($filtre != 'brut' AND function_exists($filtre))
$contenu = $filtre($contenu);
if (!$prettyname)
$prettyname = ucfirst($nom);
if ($contenu)
$affiche .= "<div><b>$prettyname&nbsp;:</b> "
.interdire_scripts($contenu)."<br /></div>\n";
}
if ($affiche) {
include_spip('inc/presentation');
return debut_cadre_enfonce('',true)
. $affiche
. fin_cadre_enfonce(true);
}
}
// s'il y a mise a jour des extras, mixer les champs modifies
// avec les champs existants (car la mise a jour peut etre partielle)
// http://doc.spip.org/@extra_update
function extra_update($table_objet, $id, $c = false) {
$extra = @unserialize(extra_recup_saisie($table_objet, $c));
// pas de mise a jour, ou erreur
if (!is_array($extra) OR !count($extra))
return false;
// passer de 'articles' a 'article'
$t = objet_type($table_objet);
$orig = sql_select("extra", table_objet_sql($t), id_table_objet($t)."=".intval($id));
$orig = sql_fetch($orig);
if (isset($orig['extra'])
AND is_array($orig = @unserialize($orig['extra']))) {
$extra = array_merge($orig, $extra);
}
return array_filter($extra) ? serialize($extra) : '';
}
?>

16
ecrire/inc/filtres.php

@ -2416,22 +2416,6 @@ function compacte_head($flux){
return $flux;
}
// http://doc.spip.org/@f_extra_editer_contenu_objet
function f_extra_editer_contenu_objet($flux){
if ($GLOBALS['champs_extra']){
$args = $flux['args'];
include_spip('inc/extra');
$type_extra = table_objet($args['type']);
$extra_saisie = extra_saisie($args['contexte']['extra'],$type_extra,$args['contexte']['id_secteur']);
if (strpos($flux['data'],'<!--extra-->')!==FALSE)
$flux['data'] = preg_replace(',(.*)(<!--extra-->),ims',"\\1$extra_saisie\\2",$flux['data'],1);
else
$flux['data'] = preg_replace(',(.*)(</fieldset>),ims',"\\1\\\2$extra_saisie",$flux['data'],1);
}
return $flux;
}
// http://doc.spip.org/@chercher_rubrique
function chercher_rubrique($msg,$id, $id_parent, $type, $id_secteur, $restreint,$actionable = false, $retour_sans_cadre=false){
global $spip_lang_right;

25
ecrire/inc/modifier.php

@ -71,24 +71,17 @@ function modifier_contenu($type, $id, $options, $c=false, $serveur='') {
// Nettoyer les valeurs
$champs = array_map('corriger_caracteres', $champs);
// recuperer les extras (utilise $_POST, un peu sale...
// a voir pour le faire marcher avec les crayons)
if (isset($desc['field']['extra'])
AND isset($_POST['extra'])
AND $GLOBALS['champs_extra']) {
include_spip('inc/extra');
$extra = extra_update($table_objet, $id, $_POST);
if ($extra !== false)
$champs['extra'] = $extra;
}
// Envoyer aux plugins
$champs = pipeline('pre_edition',
array(
'args' => array(
'table' => $spip_table_objet,
'table' => $spip_table_objet, // compatibilite
'table_objet' => $table_objet,
'spip_table_objet' => $spip_table_objet,
'type' =>$type,
'id_objet' => $id,
'champs' => $options['champs']
'champs' => $options['champs'],
'serveur' => $serveur,
),
'data' => $champs
)
@ -137,8 +130,12 @@ function modifier_contenu($type, $id, $options, $c=false, $serveur='') {
array(
'args' => array(
'table' => $spip_table_objet,
'table_objet' => $table_objet,
'spip_table_objet' => $spip_table_objet,
'type' =>$type,
'id_objet' => $id,
'champs' => $options['champs']
'champs' => $options['champs'],
'serveur' => $serveur,
),
'data' => $champs
)

2
ecrire/inc/plugin.php

@ -37,7 +37,7 @@ function liste_plugin_files(){
// http://doc.spip.org/@plugin_version_compatible
function plugin_version_compatible($intervalle,$version){
if (!strlen($intervalle)) return true;
if (!preg_match(',^[\[\(]([0-9.]*)[;]([0-9.]*)[\]\)]$,',$intervalle,$regs)) return false;
if (!preg_match(',^[\[\(]([0-9.a-zRC\s]*)[;]([0-9.a-zRC\s]*)[\]\)]$,',$intervalle,$regs)) return false;
$mineure = $regs[1];
$majeure = $regs[2];
$mineure_inc = $intervalle{0}=="[";

7
ecrire/inc_version.php

@ -140,10 +140,6 @@ $mysql_rappel_nom_base = true;
// faut-il afficher en rouge les chaines non traduites ?
$test_i18n = false;
// gestion des extras (voir inc_extra pour plus d'informations)
$champs_extra = false;
$champs_extra_proposes = false;
// faut-il ignorer l'authentification par auth http/remote_user ?
$ignore_auth_http = false;
$ignore_remote_user = true; # methode obsolete et risquee
@ -249,7 +245,8 @@ $spip_pipeline = array(
'autoriser' => '',
'notifications' => '',
'afficher_contenu_objet' => '',
'editer_contenu_objet' => '|f_extra_editer_contenu_objet',
'afficher_revision_objet'=>'',
'editer_contenu_objet' => '',
'creer_chaine_url' => '|creer_chaine_url',
'rechercher_liste_des_champs' => '' # inc/recherche; pas stabilise !
);

42
ecrire/public/balises.php

@ -638,48 +638,6 @@ function balise_GRAND_TOTAL_dist($p) {
return $p;
}
// #EXTRA
// [(#EXTRA|extra{isbn})]
// ou [(#EXTRA|isbn)] (ce dernier applique les filtres definis dans mes_options)
// Champs extra
// Non documentes, en voie d'obsolescence, cf. ecrire/inc/extra
// http://doc.spip.org/@balise_EXTRA_dist
function balise_EXTRA_dist ($p) {
$_extra = champ_sql('extra', $p);
$p->code = $_extra;
// Gerer la notation [(#EXTRA|isbn)]
if ($p->fonctions) {
list($champ,) = $p->fonctions[0];
include_spip('inc/extra');
$type_extra = $p->type_requete;
// ci-dessus est sans doute un peu buggue : si on invoque #EXTRA
// depuis un sous-objet sans champ extra d'un objet a champ extra,
// on aura le type_extra du sous-objet (!)
if (extra_champ_valide($type_extra, $champ)) {
array_shift($p->fonctions);
array_shift($p->param);
// Appliquer les filtres definis par le webmestre
$p->code = 'extra('.$p->code.', "'.$champ.'")';
$filtres = extra_filtres($type_extra, $champ);
if ($filtres) foreach ($filtres as $f)
$p->code = "$f($p->code)";
} else {
if (!function_exists($champ)) {
spip_log("erreur champ extra |$champ");
array_shift($p->fonctions);
array_shift($p->param);
}
}
}
#$p->interdire_scripts = true;
return $p;
}
//
// Parametres de reponse a un forum
//

3
prive/contenu/article.html

@ -35,7 +35,4 @@
<div class='label'><:info_notes:></div>
<div dir='#LANG_DIR' class='#EDIT{notes} notes'>(#NOTES)</div>
</div>]
[(#ENV{champs_extra}|?{' '})
[(#EXTRA**|extra_affichage{articles})]
]
</BOUCLE_afficher_contenu>

3
prive/contenu/breve.html

@ -15,7 +15,4 @@
<div class='label'><:info_notes:></div>
<div dir='#LANG_DIR' class='#EDIT{notes} notes'>(#NOTES)</div>
</div>]
[(#ENV{champs_extra}|?{' '})
[(#EXTRA**|extra_affichage{breves})]
]
</BOUCLE_afficher_contenu>

3
prive/contenu/rubrique.html

@ -15,7 +15,4 @@
<div class='label'><:info_notes:></div>
<div dir='#LANG_DIR' class='#EDIT{notes} notes'>(#NOTES)</div>
</div>]
[(#ENV{champs_extra}|?{' '})
[(#EXTRA**|extra_affichage{rubriques})]
]
</BOUCLE_afficher_contenu>

3
prive/contenu/site.html

@ -11,7 +11,4 @@
<div class='label'><:info_notes:></div>
<div dir='#LANG_DIR' class='#EDIT{notes} notes'>(#NOTES)</div>
</div>]
[(#ENV{champs_extra}|?{' '})
[(#EXTRA**|extra_affichage{sites})]
]
</BOUCLE_afficher_contenu>
Loading…
Cancel
Save