source: spip-zone/_plugins_/mots_partout/exec/mots_partout.php @ 2184

Last change on this file since 2184 was 2184, checked in by pierre.andrews@…, 14 years ago

plugin pour avoir textile a la place de propre

File size: 13.9 KB
Line 
1<?php 
2
3
4//        exec/mots_partout.php
5//    Fichier créé pour SPIP avec un bout de code emprunté à celui ci.
6//    Distribué sans garantie sous licence GPL./
7//    Copyright (C) 2006  Pierre ANDREWS
8//
9//    This program is free software; you can redistribute it and/or modify
10//    it under the terms of the GNU General Public License as published by
11//    the Free Software Foundation; either version 2 of the License, or any later version.
12//
13//    This program is distributed in the hope that it will be useful,
14//    but WITHOUT ANY WARRANTY; without even the implied warranty of
15//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16//    GNU General Public License for more details.
17//
18//    You should have received a copy of the GNU General Public License
19//    along with this program; if not, write to the Free Software
20//    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21
22
23define('_DIR_PLUGIN_MOTS_PARTOUT',(_DIR_PLUGINS . 'mots_partout'));
24
25/***********************************************************************/
26/* function*/
27/***********************************************************************/
28
29
30function verifier_admin() {
31  global $connect_statut, $connect_toutes_rubriques;
32  return (($connect_statut == '0minirezo') AND $connect_toutes_rubriques);
33}
34
35function verifier_auteur($table, $id_objet, $id) {
36  global $connect_id_auteur;
37  $select = array('id_auteur');
38 
39  $from =  array($table);
40 
41  $where = array("id_auteur = $connect_id_auteur", "$id_objet = $id");
42 
43  $result = spip_abstract_select($select,$from,$where);
44 
45  if (spip_abstract_count($result) > 0) {
46        spip_abstract_free($result);
47        return true;
48  }
49  spip_abstract_free($result);
50  return false;
51}
52
53
54//on calcul le style pour ce mot. I.E. on regarde si il est attache à tout ou seulement une partie
55function calcul_numeros($array, $search, $total) {
56  if(is_array($array))
57        $tt = count(array_keys($array,$search));
58  else
59        return 0;
60
61  if($tt == 0) return 0;
62  if($tt < $total) return 1;
63  return 2;
64}
65
66//liste des mots a droite
67function md_afficher_liste($largeurs, $table, $styles = '') {
68  global $couleur_claire;
69  global $browser_name;
70  global $spip_display;
71  global $spip_lang_left;
72
73  if (!is_array($table)) return;
74  reset($table);
75  echo "\n";
76  while (list(,$t) = each($table)) {
77        if (eregi("msie", $browser_name)) $msover = " onMouseOver=\"changeclass(this,'tr_liste_over');\" onMouseOut=\"changeclass(this,'tr_liste');\"";
78        reset($largeurs);
79        if ($styles) reset($styles);
80        list($texte, $sel) = each($t);
81        $style = $largeur = "";
82        list(, $largeur) = each($largeurs);
83        if ($styles) list(,$style) = each($styles);
84        if (!trim($texte)) $texte .= "&nbsp;";
85        echo "<ul class='".$style[$sel]."'$msover>";
86        echo "<li";
87        if ($style)  echo ' class="'.$style[$sel].'"';
88        echo ">$texte</li>";
89       
90        while (list($texte, $sel) = each($t)) {
91          $style = $largeur = "";
92          if ($styles) list(,$style) = each($styles);
93          if (!trim($texte)) $texte .= "&nbsp;";
94          echo "<li";
95          if ($largeur) echo " width=\"$largeur\"";
96          if ($style)  echo ' class="'.$style[$sel].'"';
97          echo ">$texte</li>";
98        }
99        echo "</ul>\n";
100        echo "\n";
101  }
102}
103
104function find_tables($nom, $tables) {
105  $toret = array();
106  foreach($tables as $t => $dec) {
107        if(ereg($nom,$t)) {
108          $toret[] = $t;
109        }
110  }
111  return $toret;
112}
113
114//genere la liste de IN a partir d'un tableau
115function calcul_in($mots) {
116  for($i=0; $i < count($mots); $i++) {
117        if($i > 0) $to_ret .= ',';
118        $to_ret .= $mots[$i];
119  }
120  return $to_ret;
121}
122
123//force a un tableau de int
124function secureIntArray($array) {
125  $to_return = Array();
126  if(is_array($array)) {
127        foreach($array as $id) {
128          $to_return[] = intval($id);
129        }
130  }
131  return $to_return;
132}
133
134// transfert la variable POST d'un tableau (19 => 'avec', 20=>'voir') en 4 tableaux avec=(19) voir=(20)
135function splitArrayIds($array) {
136  $voir = Array();
137  $cacher = Array();
138  $ajouter = Array();
139  $enlever = Array();
140  if(is_array($array)) {
141    foreach($array as $id_mot => $action) {
142      $id_mot = intval($id_mot);
143      if($id_mot > 0) {
144        switch(addslashes($action)) {
145                  case 'avec':
146                        $ajouter[] = $id_mot;
147                  case 'voir':
148                        $voir[] = $id_mot;
149                        break;
150                  case 'sans':
151                        $enlever[] = $id_mot;
152                        break;
153                  case 'cacher':
154                        $cacher[] = $id_mot;
155            break;
156
157        }
158      }
159    }
160  }
161  return array($voir, $cacher, $ajouter, $enlever);
162}
163
164//====================l'affichage par defaut======================================
165
166function afficher_liste_defaut($choses) {
167  echo '<table>';
168  $i = 0;
169  foreach($choses as $id_chose) {
170        $i++;
171        echo "<td><tr><input type='checkbox' name='choses[]' value='$id_chose' id='id_chose$i'/></tr><tr> <label for='id_chose$i'>$id_chose</label></tr></td>";
172  }
173  echo '</table>';
174}
175
176//------------------------la fonction qui fait tout-----------------------------------
177
178function exec_mots_partout() {
179
180  include(_DIR_PLUGIN_MOTS_PARTOUT."/mots_partout_choses.php");
181  include_ecrire ("inc_presentation");
182  include_ecrire ("inc_documents");
183  include_ecrire ("inc_abstract_sql");
184  include_ecrire ("inc_objet");
185
186  /***********************************************************************/
187/* PREFIXE*/
188  /***********************************************************************/
189  $table_pref = 'spip';
190  if ($GLOBALS['table_prefix']) $table_pref = $GLOBALS['table_prefix'];
191 
192 
193  /***********************************************************************/
194  /* récuperation de la chose sur laquelle on travaille*/
195  /***********************************************************************/
196
197  $nom_chose = addslashes($_POST['nom_chose']);
198  if(!isset($choses_possibles[$nom_chose])) {
199        list($nom_chose,) = each($choses_possibles);
200        reset($choses_possibles);
201  }
202  $id_chose = $choses_possibles[$nom_chose]['id_chose'];
203  $table_principale = $choses_possibles[$nom_chose]['table_principale'];
204  $table_auth = $choses_possibles[$nom_chose]['table_auth'];
205  $tables_limite = $choses_possibles[$nom_chose]['tables_limite'];
206
207
208  /***********************************************************************/
209  /* affichage*/
210  /***********************************************************************/
211
212  debut_page('&laquo; '._T('motspartout:titre_page').' &raquo;', 'documents', 'mots', '', _DIR_PLUGIN_MOTS_PARTOUT."/mots_partout.css");
213  echo'</script>
214
215                <script type="text/javascript" src="'. _DIR_PLUGIN_MOTS_PARTOUT.'/javascript/prototype.js"></script>
216                <script type="text/javascript" src="'. _DIR_PLUGIN_MOTS_PARTOUT.'/javascript/behaviour.js"></script>
217                <script type="text/javascript" src="'. _DIR_PLUGIN_MOTS_PARTOUT.'/javascript/effects.js"></script>
218                <script type="text/javascript" src="'. _DIR_PLUGIN_MOTS_PARTOUT.'/javascript/MultiStateRadio.js"></script>
219                <script type="text/javascript">
220
221                MultiStateRadio.apply(\'.liste ul\');
222
223  </script>';
224
225          echo '<br><br><center>';
226  gros_titre(_T('motspartout:titre_page'));
227  echo '</center>';
228
229  //Colonne de gauche
230  debut_gauche();
231
232  echo '<form method="post" action="'.generer_url_ecrire('mots_partout','').'">';
233
234
235  // choix de la chose sur laquelle on veut ajouter des mots
236  debut_cadre_enfonce('',false,'',_T('motspartout:choses'));
237  echo '<div class=\'liste\'>
238<table border=0 cellspacing=0 cellpadding=3 width=\"100%\">
239<tr class=\'tr_liste\'>
240<td colspan=2><select name="nom_chose">';
241  $tables_installees = unserialize(lire_meta('MotsPartout:tables_installees'));
242  foreach($choses_possibles as $cho => $m) {
243          if($tables_installees[$cho]) {
244                echo "<option value=\"$cho\"".(($cho == $nom_chose)?'selected':'').'>'._T($m['titre_chose']).'</option>';
245          }
246  }
247  echo '</select></td>';
248
249  echo '</tr>
250<tr class=\'tr_liste\'><td colspan=2>'.
251        _T('motspartout:limite').
252        ':</td></tr>';
253  echo '<tr class=\'tr_liste\'><td><select name="limit">
254<option value="rien" selected="true">'.
255        _T('motspartout:aucune').
256        '</option>';
257 
258  foreach($tables_limite as $t => $m) {
259        echo "<option value=\"$t\"".(($t == $limit)?'selected':'').">$t</option>";
260  }
261 
262  echo '</select></td>';
263  echo "<td><input type='text' size='3' name='identifiant_limit' value='$id_limit'></td></tr>";
264  echo '<tr class=\'tr_liste\'>';
265  echo "
266        <td>
267        <button type='submit' name='switch' value='chose'>";
268  echo _T('motspartout:voir');
269  echo"    </button>
270        </td>";
271
272        echo '<td colspan=2><label for="nb_aff">'._T('motspartout:par').':</label><select name="nb_aff">';
273
274  for($nb = 10;$nb<count($choses);$nb=$nb+10)
275                                         echo "<option value=\"$nb\"".(($nb == $nb_aff)?'selected="true"':'').">$nb</option>";
276
277  echo '</select></td>';
278
279                                         echo " </table></div>";
280  fin_cadre_enfonce();
281
282  $redirect = generer_url_ecrire('mots_partout',"limit=$limit&identifiant_limit=$id_limit&nb_aff=$nb_aff");
283
284  echo "</form><form method='post' action='".generer_url_action('mots_partout',"redirect=$redirect")."'>";
285 
286  echo '<input type="hidden" name="nom_chose" value="'.$nom_chose.'">';
287 
288  // les actions et limitations possibles.
289  if(count($choses)) {
290        debut_cadre_enfonce('',false,'',_T('motspartout:action'));
291       
292       
293        echo '<div class=\'liste\'>
294                  <table border=0 cellspacing=0 cellpadding=3 width=\'100%\'>
295           <tr class=\'tr_liste\'>
296          <td colspan=2>';
297        echo _T('motspartout:action_help',array('chose' => $nom_chose));
298        echo "</td>
299                   </tr>
300           <tr class='tr_liste'>
301           <td><button type='submit' name='switch' value='action'>";
302        echo _T('bouton_valider');
303        echo "     </button></td>
304<td>
305(<input type='checkbox' id='strict' name='strict'/>
306<label for='strict'>selection".
307_T('motspartout:stricte').
308"?)</label></td>
309                   </tr>
310                   </table>
311                   </div>";
312        fin_cadre_enfonce();
313  }
314  creer_colonne_droite();
315  // affichage de mots clefs.
316  $select = array('*');
317  $from = array('spip_groupes_mots');
318  $order = array('titre');
319  $m_result_groupes = spip_abstract_select($select,$from,'','',$order);
320
321  while ($row_groupes = spip_abstract_fetch($m_result_groupes)) {
322        $id_groupe = $row_groupes['id_groupe'];
323        $titre_groupe = typo($row_groupes['titre']);
324        $unseul = $row_groupes['unseul'];
325        $acces_admin =  $row_groupes['minirezo'];
326        $acces_redacteur = $row_groupes['comite'];
327
328        if($row_groupes[$nom_chose] == 'oui' && (($GLOBALS['connect_statut'] == '1comite' AND $acces_redacteur == 'oui') OR ($GLOBALS['connect_statut'] == '0minirezo' AND $acces_admin == 'oui'))) {
329          // Afficher le titre du groupe
330          debut_cadre_enfonce("groupe-mot-24.gif", false, '', $titre_groupe);
331         
332          //
333          // Afficher les mots-cles du groupe
334          //
335          $result = spip_abstract_select(array('*'),
336                                                                         array('spip_mots'),
337                                                                         array("id_groupe = '$id_groupe'"),
338                                                                         '', array('titre'));
339          $table = '';
340         
341          if (spip_abstract_count($result) > 0) {
342                echo "<div class='liste'>";
343                $i =0;
344                while ($row = spip_abstract_fetch($result)) {
345                  $vals = '';
346                 
347                  $id_mot = $row['id_mot'];
348                  $titre_mot = $row['titre'];
349                 
350                  $s = typo($titre_mot);
351                 
352                  $vals["$s"] = calcul_numeros($show_mots,$id_mot,count($choses));
353                 
354                  $vals["<label for='id_mot".$id_mot."_vide'>"._T('motspartout:action')."?</label><input type='radio' id='id_mot".$id_mot."_vide' checked='true'>"] = calcul_numeros($show_mots,$id_mot,count($choses));
355                 
356                  $vals["<label for='id_mot".$id_mot."_voir'>"._T('motspartout:voir')."</label><input type='radio' name='mots[$id_mot]' id='id_mot".$id_mot."_voir' value='voir'>"] = calcul_numeros($show_mots,$id_mot,count($choses));
357                 
358                  $vals["<label for='id_mot".$id_mot."_cacher'>"._T('motspartout:cacher')."</label><input type='radio' name='mots[$id_mot]' id='id_mot".$id_mot."_cacher' value='cacher'>"] = calcul_numeros($show_mots,$id_mot,count($choses));
359                 
360                  $vals["<label for='id_mot".$id_mot."_avec'>"._T('motspartout:ajouter')."</label><input type='radio' name='mots[$id_mot]' id='id_mot".$id_mot."_avec' value='avec'>"] = calcul_numeros($show_mots,$id_mot,count($choses));
361                 
362                  $vals["<label for='id_mot".$id_mot."_sans'>"._T('motspartout:enlever')."</label><input type='radio' name='mots[$id_mot]' id='id_mot".$id_mot."_sans' value='sans'>"] = calcul_numeros($show_mots,$id_mot,count($choses));
363                  $table[] = $vals;
364                }
365               
366          }
367          $largeurs = array(40, 10, 10);
368          $styles = array(
369                                          array('arial11',
370                                                        'partie arial11',
371                                                        'avec arial11'),
372                                          array('arial1',
373                                                        'partie arial1',
374                                                        'avec arial1'),
375                                          array('arial1',
376                                                        'partie arial1',
377                                                        'avec arial1'),
378                                          array('arial1',
379                                                        'partie arial1',
380                                                        'avec arial1'),
381                                          array('arial1',
382                                                        'partie arial1',
383                                                        'avec arial1'),
384                                          array('arial1',
385                                                        'partie arial1',
386                                                        'avec arial1')
387                                          );
388          md_afficher_liste($largeurs, $table, $styles);
389          echo "</div>";
390          spip_abstract_free($result);
391         
392          fin_cadre_enfonce();
393        }
394  }
395  spip_abstract_free($m_result_groupes);
396
397
398  //Milieu
399
400  debut_droite();
401
402  if(count($warnings) > 0) {
403        debut_cadre_relief('',false,'',_T('motspartout:ATTENTION'));
404        echo '<div class="liste"><table border=0 cellspacing=0 cellpadding=3 width=\"100%\">';
405        $largeurs = array('100%');
406        $styles = array( 'arial11');
407        afficher_liste($largeurs, $warnings, $styles);
408        echo '</table>';
409        echo '</div>';
410        fin_cadre_relief();
411  }
412
413  // Affichage de toutes les choses (on pourrait imaginer faire une pagination là)
414  debut_cadre_relief('',false,'document', _T('portfolio'));
415  if(count($choses) > 0) {
416        $function = "afficher_liste_$nom_chose";
417        if(function_exists($function))
418          $function($choses,$nb_aff);
419        else {
420          afficher_liste_defaut($choses,$nb_aff);
421        }       
422        echo "<!--
423<input type=\"radio\" name=\"selectall\" id=\"all\" onclick=\"selectAll(this.form, 'choses[]', 0);\"><label for=\"all\">Select All</label>
424<input  type=\"radio\" name=\"selectall\" id=\"inverse\"  onclick=\"selectAll(this.form, 'choses[]', 1);\"><label for=\"inverse\">Inverse All</label>
425-->";
426  } else {
427        echo _T('motspartout:pas_de_documents').'.';
428  }
429 
430  fin_cadre_relief();
431  echo '</form>
432<script>
433function selectAll(formObj, isInverse)
434{
435   for (var i=0;i < formObj.length;i++)
436   {
437      fldObj = formObj.elements[i];
438      if (fldObj.type == \'checkbox\')
439      {
440         if(isInverse)
441            fldObj.checked = (fldObj.checked) ? false : true;
442         else fldObj.checked = true;
443       }
444   }
445}
446</script>';
447 
448  fin_page();
449 
450}
451?>
452
Note: See TracBrowser for help on using the repository browser.