Browse Source

Merge avec le premier portage propose par aknot04 sur http://www.spip-contrib.net/ecrire/?exec=articles&id_article=3942

L'interface passe donc en CVT+ quelques refactoring
svn/root/tags/v3.1.2
cedric@yterium.com 10 years ago
parent
commit
6db296de4a
  1. 5
      .gitattributes
  2. 202
      exec/configurer_squelettesmots.php
  3. 105
      formulaires/configurer_squelettesmots.html
  4. 64
      formulaires/configurer_squelettesmots.php
  5. 6
      lang/squelettesmots_fr.php
  6. 3
      paquet.xml
  7. 9
      prive/squelettes/contenu/configurer_squelettesmots.html
  8. 3
      prive/squelettes/navigation/configurer_squelettesmots.html
  9. 77
      squelettesmots.php

5
.gitattributes

@ -1,6 +1,7 @@
* text=auto !eol
/LISEZMOI.txt -text
exec/configurer_squelettesmots.php -text
formulaires/configurer_squelettesmots.html -text
formulaires/configurer_squelettesmots.php -text
lang/paquet-squelettesmots_en.php -text
lang/paquet-squelettesmots_fr.php -text
lang/paquet-squelettesmots_it.php -text
@ -8,6 +9,8 @@ lang/squelettesmots_en.php -text
lang/squelettesmots_fr.php -text
lang/squelettesmots_it.php -text
/paquet.xml -text
prive/squelettes/contenu/configurer_squelettesmots.html -text
prive/squelettes/navigation/configurer_squelettesmots.html -text
prive/themes/spip/images/squelettesmots-16.png -text
prive/themes/spip/images/squelettesmots-32.png -text
/squelettesmots.css -text

202
exec/configurer_squelettesmots.php

@ -1,202 +0,0 @@
<?php
// Fichier cr‚‚ pour SPIP avec un bout de code emprunt‚ … celui ci.
// Distribu‚ sans garantie sous licence GPL./
// Copyright (C) 2006 Pierre ANDREWS
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
function exec_configurer_squelettesmots_dist(){
include_spip("inc/presentation");
include_spip("base/abstract_sql");
$commencer_page = charger_fonction('commencer_page', 'inc');
echo $commencer_page(_T('squelettesmots:titre_page'), "configuration");
include_spip('inc/autoriser');
if (!autoriser('configurer', 'squelettesparmot')){
echo _T('avis_non_acces_page');
exit;
}
/*Affichage*/
echo debut_gauche('', TRUE);
echo debut_boite_info(TRUE);
echo propre(_T('squelettesmots:help'));
echo fin_boite_info(TRUE);
echo debut_droite('', TRUE);
echo gros_titre(_T('squelettesmots:titre_onglet'), '', FALSE);
echo "<p>"._T('squelettesmots:gros_titre')."</p>";
$config = charger_fonction('config', 'inc');
$config();
#echo avertissement_config();
lire_fichier(find_in_path("squelettesmots.css"),$styles);
echo "<style>$styles</style>";
echo debut_cadre_relief("".find_in_path('spip_death.png')."", true);
echo '<form action="'.generer_url_ecrire('configurer_squelettesmots').'" method="post">';
$groupes_mots = '';
$select = array('id_groupe', 'titre');
$from = array('spip_groupes_mots');
// include_ecrire('inc_filtres');
$rez = sql_select($select, $from);
while ($row = sql_fetch($rez)){
$groupes_mots[$row['id_groupe']] = extraire_multi($row['titre']);
}
sql_free($rez);
//TODO: trouver automatiquement ces informations pour toutes les tables avec un jonction sur les mots
$id_tables = array('articles' => 'id_article',
'rubriques' => 'id_rubrique',
'breves' => 'id_breve',
'sites' => 'id_site');
$fonds = unserialize(lire_meta('SquelettesMots:fond_pour_groupe'));
$field_fonds = _request('fonds');
$id_groupes = _request('tid_groupe');
$types = _request('type');
$actif = _request('actif');
/*On transforme les _POST en jolie tableau*/
if ($field_fonds){
$new_fonds = array();
foreach ($field_fonds as $index => $fond){
$index = intval($index);
$fond = addslashes($fond);
if ($actif[$index]){
$id_groupe = intval($id_groupes[$index]);
$type = addslashes($types[$index]);
$new_fonds[$fond] = array($id_groupe, $type, $id_tables[$type]);
}
}
$fonds = $new_fonds;
}
$index = 0;
if (is_array($fonds))
foreach ($fonds as $fond => $a){
list($id_groupe, $type, $id_table) = $a;
$index++;
echo '<fieldset class="regle">';
echo '<legend>'._T('squelettesmots:reglei', array('id' => $index)).'</legend>';
if (!find_in_path($fond.'.html')){
echo '<div class="avertissement">';
echo _T('squelettesmots:avertissement', array('squelette' => '<em>'.$fond.'.html'.'</em>'));
echo '</div>';
}
// echo '<div class="champs">';
echo "<input type=\"checkbox\" class=\"actif\" name=\"actif[$index]\" checked=\"true\"/>";
echo "<label for=\"fond_$index\" class=\"fond\">"._T('squelettesmots:fond')."</label>";
echo "<input type=\"text\" name=\"fonds[$index]\" class=\"forml\" value=\"$fond\" id=\"fond_$index\"/>";
echo "<label for=\"id_groupe_$index\" class=\"id_groupe\">"._T('squelettesmots:groupe')."</label>";
echo "<select name=\"tid_groupe[$index]\" class=\"id_groupe forml\" id=\"id_groupe_$index\">";
foreach ($groupes_mots as $id => $titre){
echo "<option value=\"$id\"".(($id_groupe==$id) ? ' selected="true"' : '').">$titre</option>";
}
echo '</select>';
echo "<label for=\"type_$index\" class=\"type\">"._T('squelettesmots:type')."</label>";
echo "<select name=\"type[$index]\" class=\"type forml\" id=\"type_$index\">";
foreach ($id_tables as $t => $x){
echo "<option value=\"$t\"".(($type==$t) ? ' selected="true"' : '').">$t</option>";
}
echo '</select>';
// echo '</div>';
$select1 = array('titre');
$from1 = array('spip_mots AS mots');
$where1 = array("id_groupe=".intval($id_groupe));
$rez = sql_select($select1, $from1, $where1);
$liste_squel = '<ul>';
$ext = 'html'; //On force a html, c'est pas beau, mais je vois pas la solution actuellement.
$cnt_actif = 0;
$cnt_inactif = 0;
while ($r = sql_fetch($rez)){
include_spip("inc/charsets");
$n = translitteration(preg_replace('/["\'.\s]/', '_', extraire_multi($r['titre'])));
if ($squel = find_in_path("$fond-$n.$ext")){
$cnt_actif++;
$liste_squel .= "<li><a href=\"$squel\">$fond-$n.$ext</a></li>";
} else {
$cnt_inactif++;
$liste_squel .= "<li>$fond-$n.$ext</li>";
}
if ($squel = find_in_path("$fond=$n.$ext")){
$cnt_actif++;
$liste_squel .= "<li><a href=\"$squel\">$fond=$n.$ext</a></li>";
} else {
$cnt_inactif++;
$liste_squel .= "<li>$fond=$n.$ext</li>";
}
}
sql_free($rez);
$liste_squel .= '</ul>';
echo '<div class="possible">';
if ($cnt_actif+$cnt_inactif>0){
echo bouton_block_depliable(_T('squelettesmots:possibilites', array('total_actif' => $cnt_actif, 'total_inactif' => $cnt_inactif)), false);
echo debut_block_depliable(false, "regle$index");
echo $liste_squel;
echo fin_block();
}
echo '</div>';
echo '</fieldset>';
}
$index++;
echo '<hr/>';
echo '<fieldset class="nouvelle regle">';
echo '<legend>'._T('squelettesmots:nouvelle_regle').'</legend>';
echo "<input type=\"checkbox\" class=\"actif\" name=\"actif[$index]\"/>";
echo "<label for=\"fond_$index\" class=\"fond\">"._T('squelettesmots:fond')."</label>";
echo "<input type=\"text\" name=\"fonds[$index]\" class=\"forml\" value=\"article\"/>";
echo "<label for=\"id_groupe_$index\" class=\"id_groupe\">"._T('squelettesmots:groupe')."</label>";
echo "<select name=\"tid_groupe[$index]\" class=\"id_groupe forml\" id=\"id_groupe_$index\">";
foreach ($groupes_mots as $id => $titre){
echo "<option value=\"$id\">$titre</option>";
}
echo '</select>';
echo "<label for=\"type_$index\" class=\"type\">"._T('squelettesmots:type')."</label>";
echo "<select name=\"type[$index]\" class=\"type forml\" id=\"type_$index\">";
foreach ($id_tables as $t => $x){
echo "<option value=\"$t\">$t</option>";
}
echo '</select>';
echo '</fieldset>';
echo '<div style="text-align: right;"><input type="submit" class="fondo" value="'._T('bouton_valider').'"/></div>';
echo '</form>';
echo fin_cadre_relief(true);
ecrire_meta('SquelettesMots:fond_pour_groupe', serialize($fonds));
ecrire_metas();
echo fin_gauche();
echo fin_page();
}
?>

105
formulaires/configurer_squelettesmots.html

@ -0,0 +1,105 @@
<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}">
<h3 class="titrem"><:squelettesmots:titre_page:></h3>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<form method="get" action="#ENV{action}">
#ACTION_FORMULAIRE{#ENV{action}}
#SET{regle,0}
<BOUCLE_parcours_config(POUR){tableau #ENV*{_fonds}}>
#SET{fonds,#CLE}
#SET{id_groupe,#VALEUR{0}}
#SET{table,#VALEUR{1}}
<fieldset class="nouvelle regle" >
#SET{nb,#COMPTEUR_BOUCLE}
<legend><:squelettesmots:reglei{id=#GET{nb}}:></legend>
<ul>
<li class="editer editer_fonds editer_fonds_#COMPTEUR_BOUCLE">
<label for="fonds_#COMPTEUR_BOUCLE" class="fond"><:squelettesmots:fond:></label>
<input type="text" id="fonds_#COMPTEUR_BOUCLE" name="fonds[#COMPTEUR_BOUCLE]" class="forml" value="#GET{fonds}"/>
<span class="choix">
<input type="checkbox" class="actif" name="actif[#COMPTEUR_BOUCLE]" id="actif_#COMPTEUR_BOUCLE" checked="true" />
<label for="actif_#COMPTEUR_BOUCLE" class="type"><:squelettesmots:label_regle_active:></label>
</span>
</li>
<li class="editer editer_id_groupe">
<label for="id_groupe_#COMPTEUR_BOUCLE" class="id_groupe"><:squelettesmots:groupe:></label>
<select name="tid_groupe[#COMPTEUR_BOUCLE]" class="id_groupe forml" id="id_groupe_#COMPTEUR_BOUCLE">
<BOUCLE_liste_groupes(GROUPES_MOTS) >
<option value="#ID_GROUPE" [(#ID_GROUPE|=={#GET{id_groupe}}|oui) selected="selected"]>#TITRE</option>
</BOUCLE_liste_groupes>
</select>
</li>
<li class="editer editer_type">
<label for="type_#COMPTEUR_BOUCLE" class="type"><:squelettesmots:type:></label>
<select name="type[#COMPTEUR_BOUCLE]" class="type forml" id="type_#COMPTEUR_BOUCLE">
<BOUCLE_liste_id_table(POUR){tableau #ENV*{_tableau_type}}>
#SET{val,#VALEUR|objet_info{table_objet}}
<option value="#GET{val}" [(#GET{val}|=={#GET{table}}|oui) selected="selected"]>[(#VALEUR|objet_info{texte_objets}|_T)]</option>
</BOUCLE_liste_id_table>
</select>
</li>
</ul>
[(#GET{fonds}|trouver_fond|non)
<div class="notice">
[(#SET{affiche,[<em>(#GET{fonds}).html</em>]})]
<:squelettesmots:avertissement{squelette=#GET{affiche}}:>
</div>
]
#SET{ma_regex, ["\'.\s]}
<B_cherche_squelette>
<div class="squelettes">
<strong>[(#TOTAL_BOUCLE|singulier_ou_pluriel{squelettesmots:une_possibilite,squelettesmots:nb_possibilites})]</strong>
<BOUCLE_cherche_squelette(MOTS) {id_groupe=#GET{id_groupe}}{', '}>
[(#SET{un_mot,[(#TITRE|translitteration|replace{#GET{ma_regex}, _, Uims}).html]})]
[(#SET{un_squelette, [(#GET{fonds})-][(#GET{un_mot})]})]
[<a href="(#CHEMIN{#GET{un_squelette}})">#GET{un_squelette}</a>][
(#CHEMIN{#GET{un_squelette}}|non) <i>#GET{un_squelette}</i>]</BOUCLE_cherche_squelette>
</div>
</B_cherche_squelette>
</fieldset>
</BOUCLE_parcours_config>
<fieldset class="nouvelle regle" >
<legend><:squelettesmots:nouvelle_regle:></legend>
<ul>
<li class="editer editer_fonds editer_fonds_0">
<label for="fonds" class="fond"><:squelettesmots:fond:></label>
<input type="text" id="fonds" name="fonds[0]" class="forml" value="article"/>
<span class="choix">
<input type="checkbox" class="actif" name="actif[0]" id="actif" checked="true" />
<label for="actif" class="type"><:squelettesmots:label_regle_active:></label>
</span>
</li>
<li class="editer editer_id_groupe">
<label for="id_groupe" class="id_groupe"><:squelettesmots:groupe:></label>
<select name="tid_groupe[0]" class="id_groupe forml" id="id_groupe">
<option value=""></option>
<BOUCLE_liste_groupes_new(GROUPES_MOTS) >
<option value="#ID_GROUPE">#TITRE</option>
</BOUCLE_liste_groupes_new>
</select>
</li>
<li class="editer editer_type">
<label for="type" class="type"><:squelettesmots:type:></label>
<select name="type[0]" class="type forml" id="type">
<BOUCLE_liste_id_table_new(POUR){tableau #ENV*{_tableau_type}}>
#SET{val,#VALEUR|objet_info{table_objet}}
<option value="#GET{val}">[(#VALEUR|objet_info{texte_objets}|_T)]</option>
</BOUCLE_liste_id_table_new>
</select>
</li>
</ul>
</fieldset>
<p class='boutons'><span class='image_loading'>&nbsp;</span>
<input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p>
</div>
</form>
</div>
<style>
.formulaire_#FORM .editer_id_groupe {padding-top: 0;}
.formulaire_#FORM .editer_type {padding-top: 0;}
</style>

64
formulaires/configurer_squelettesmots.php

@ -0,0 +1,64 @@
<?php
/***************************************************************************\
* Plugin Squelettes par mot clef 3 *
* *
* 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. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('squelettesmots');
function formulaires_configurer_squelettesmots_charger_dist(){
$_fonds = unserialize($GLOBALS['meta'][_SQUELETTES_MOTS_META]);
$valeurs = array(
'fonds'=>'',
'tid_groupe'=>'',
'type' => '',
'actif' => '',
'_fonds' => $_fonds?$_fonds:array()
);
$valeurs['_tableau_type'] = array();
$liste = lister_tables_objets_sql();
foreach ($liste as $table =>$info){
$valeurs['_tableau_type'][] = $info['type'];
}
return $valeurs;
}
function formulaires_configurer_squelettesmots_verifier_dist(){
return array();
}
function formulaires_configurer_squelettesmots_traiter_dist(){
/* on charge la configuration */
$fonds = unserialize($GLOBALS['meta'][_SQUELETTES_MOTS_META]);
/* on charge les valeurs du formulaire */
$field_fonds = _request('fonds');
$id_groupes = _request('tid_groupe');
$types = _request('type');
$actif = _request('actif');
/*On transforme les _POST en jolie tableau*/
if($field_fonds) {
$new_fonds = array();
foreach($field_fonds as $index => $fond) {
$index = intval($index);
$fond = addslashes($fond);
if($actif[$index]
AND $id_groupe = intval($id_groupes[$index])) {
$type = $types[$index];
$new_fonds[$fond] = array($id_groupe,$type,id_table_objet($type));
}
}
$fonds = $new_fonds;
}
/* on ecrit la nouvelle configuration */
ecrire_meta(_SQUELETTES_MOTS_META,serialize($fonds));
return array('message_ok'=>_T('config_info_enregistree'),'editable'=>true);
}
?>

6
lang/squelettesmots_fr.php

@ -20,8 +20,10 @@ Les auteurs n\'ont alors plus qu\'&agrave; associer un mot du groupe &agrave; l\
'fond' => 'Fond:',
'groupe' => 'Groupe:',
'type' => 'Type:',
'possibilites' => '@total_actif@ squelette(s).',
'une_possibilite' => '1 squelette :',
'nb_possibilites' => '@nb@ squelettes :',
'utiliserasquelette' => 'Cet article utilisera le squelette @squelette@',
'avertissement' => 'Attention le squelette @squelette@ n\'existe pas, cette r&egrave;gle ne marchera pas tant que le squelette par d&eacute;faut n\'est pas pr&eacute;sent.'
'avertissement' => 'Attention le squelette @squelette@ n\'existe pas, cette r&egrave;gle ne marchera pas tant que le squelette par d&eacute;faut n\'est pas pr&eacute;sent.',
'label_regle_active' => 'Règle active',
);
?>

3
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="squelettesmots"
categorie="outil"
version="3.0.0"
version="3.1.0"
etat="test"
compatibilite="[3.0.0-dev;3.0.99]"
logo="prive/themes/spip/images/squelettesmots-32.png"
@ -12,6 +12,7 @@
<!-- Permet de choisir le squelette en fonction d'un mot clef -->
<auteur>Pierre Andrews (Mortimer)</auteur>
<auteur>Florent Cavard</auteur>
<credit>d'après un code proposé par Déesse A.</credit>
<pipeline nom="styliser" inclure="squelettesmots.php" />

9
prive/squelettes/contenu/configurer_squelettesmots.html

@ -0,0 +1,9 @@
<h1 class="grostitre"><:squelettesmots:titre_onglet:></h1>
[(#AUTORISER{webmestre}|non)
<:squelettesmots:refus_1:>
]
[(#AUTORISER{webmestre}|oui)
<div class="ajax">
#FORMULAIRE_CONFIGURER_SQUELETTESMOTS
</div>
]

3
prive/squelettes/navigation/configurer_squelettesmots.html

@ -0,0 +1,3 @@
#BOITE_OUVRIR{'',info}
<:squelettesmots:help|propre:>
#BOITE_FERMER

77
squelettesmots.php

@ -16,20 +16,26 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
define('_SQUELETTES_MOTS_META','SquelettesMots:fond_pour_groupe');
// Selection du squelette par mot cle
/**
* Selection du squelette par mot cle
*
* @param array $flux
* @return array
*/
function squelettesmots_styliser($flux) {
// quand le selecteur doit il s'activer ?
// pas de fond=rep/nom (inclusions)
if (!test_espace_prive()
AND $fond = $flux['args']['fond']
AND $fond = $flux['args']['fond']
AND strpos($fond, '/')===false) {
// on cherche si le squelette a deja trouve un fond particulier specifique
// on cherche si le squelette a deja trouve un fond particulier specifique
// c'est a dire different de $fond.html.
// Si c'est le cas, on ne cherche pas de squelette specifique par mot.
$skel = basename($flux['data']);
if ($skel == $fond) {
$fonds = unserialize($GLOBALS['meta']['SquelettesMots:fond_pour_groupe']);
$fonds = unserialize($GLOBALS['meta'][_SQUELETTES_MOTS_META]);
// array ($base_fond = array($id_groupe, $table, $_id_table))
// on teste qu'on a bien un fond
if (is_array($fonds) and isset($fonds[$fond])) {
@ -50,43 +56,60 @@ function squelettesmots_styliser($flux) {
$flux['data'] = $squelette;
}
}
}
}
}
return $flux;
}
/**
* Tester l'existence d'un squelette
* @param string $fond
* @param string $ext
* @param string $mot
* @param string $separateur
* @return string
*/
function test_squelette_motcle($fond, $ext, $mot, $separateur = '-') {
if ($squelette = find_in_path($fond . $separateur . $mot . '.' . $ext)) {
return substr($squelette, 0, -strlen(".$ext"));
}
return false;
return '';
}
// smc: on ajoute la fonction qui va chercher les mots
// associes aux items dans le groupe qui va bien
// recursion : seulement si $id de rubrique
/**
* on ajoute la fonction qui va chercher les mots
* associes aux items dans le groupe qui va bien
* recursion : seulement si $id de rubrique
*
* @param int $id
* @param int $id_groupe
* @param string $table
* @param string $_id_table
* @param bool $recurse
* @return string
*/
function quete_mot_squelette($id ,$id_groupe, $table, $_id_table, $recurse=false) {
$select1 = 'titre';
$from1 = array('spip_mots AS mots',
"spip_mots_$table AS lien");
$objet = objet_type($table);
while($id > 0) {
$where1 = array("$_id_table=$id",
'mots.id_mot=lien.id_mot',
"id_groupe=$id_groupe");
// attention getfetsel ne renvoie qu'un mot !
// si quelqu'un a mis plusieurs mots sur l'objet, tant pis pour lui,
// on ne peut pas predire lequel sera retourne
if ($titre = sql_getfetsel($select1,$from1,$where1)) {
include_spip("inc/charsets");
include_spip("inc/filtres");
return translitteration(preg_replace('/["\'.\s]/', '_', extraire_multi($titre)));
}
if(!$recurse) return '';
// attention identifiant de rubrique ici uniquement
$id = quete_parent($id);
$where = array(
"lien.id_objet=".intval($id),
"lien.objet=".sql_quote($objet),
"id_groupe=".intval($id_groupe)
);
// attention getfetsel ne renvoie qu'un mot !
// si quelqu'un a mis plusieurs mots sur l'objet, tant pis pour lui,
// on ne peut pas predire lequel sera retourne
if ($titre = sql_getfetsel('titre',"spip_mots AS mots JOIN spip_mots_liens AS lien ON mots.id_mot=lien.id_mot",$where)) {
include_spip("inc/charsets");
include_spip("inc/filtres");
return translitteration(preg_replace('/["\'.\s]/', '_', extraire_multi($titre)));
}
if(!$recurse) return '';
// attention identifiant de rubrique ici uniquement
$id = quete_parent($id);
}
return '';
}

Loading…
Cancel
Save