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

Last change on this file since 32256 was 32256, checked in by zeraxp@…, 11 years ago

eregi a un argument deprecie en php 5.3 ( provoque une erreur et pourtant cet argument n'existe pas dans l'appel ... bizarre )

File size: 15.6 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *  Plugin Mots-Partout                                                    *
6 *                                                                         *
7 *  Copyright (c) 2006-2008                                                *
8 *  Pierre ANDREWS, Yoann Nogues, Emmanuel Saint-James                     *
9 *                                                                         *
10 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
11 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
12 *    This program is free software; you can redistribute it and/or modify *
13 *    it under the terms of the GNU General Public License as published by *
14 *    the Free Software Foundation.                                        *
15\***************************************************************************/
16
17if (!defined("_ECRIRE_INC_VERSION")) return;
18
19include_once(_DIR_PLUGIN_MOTSPARTOUT."/mots_partout_choses.php");
20include_spip('inc/afficher_objets');
21include_spip("inc/presentation");
22include_spip("inc/documents");
23include_spip("base/abstract_sql");
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
38  return sql_fetsel('id_auteur', $table, "id_auteur = $connect_id_auteur AND $id_objet = $id");
39}
40
41
42// on calcule le style pour ce mot. I.E.
43// on regarde s'il est attache a tout ou seulement une partie
44function calcul_numeros($array, $search, $total) {
45  if(is_array($array))
46        $tt = count(array_keys($array,$search));
47  else
48        return 0;
49
50  if($tt == 0) return 0;
51  if($tt < $total) return 1;
52  return 2;
53}
54
55//liste des mots a droite
56function md_afficher_liste($largeurs, $table, $styles = '') {
57
58  global $browser_name;
59
60  if (!is_array($table)) return;
61  reset($table);
62  echo "\n";
63  while (list(,$t) = each($table)) {
64        if (stripos($browser_name,"msie" )!==false) $msover = " onMouseOver=\"changeclass(this,'tr_liste_over');\" onMouseOut=\"changeclass(this,'tr_liste');\"";
65        reset($largeurs);
66        if ($styles) reset($styles);
67        list($texte, $sel) = each($t);
68        $style = $largeur = "";
69        list(, $largeur) = each($largeurs);
70        if ($styles) list(,$style) = each($styles);
71        if (!trim($texte)) $texte .= "&nbsp;";
72        echo "<ul class='".$style[$sel]."'$msover>";
73        echo "<li";
74        if ($style)  echo ' class="'.$style[$sel].'"';
75        echo ">$texte</li>";
76
77        while (list($texte, $sel) = each($t)) {
78          $style = $largeur = "";
79          if ($styles) list(,$style) = each($styles);
80          if (!trim($texte)) $texte .= "&nbsp;";
81          echo "<li";
82          if ($largeur) echo " width=\"$largeur\"";
83          if ($style)  echo ' class="'.$style[$sel].'"';
84          echo ">$texte</li>";
85        }
86        echo "</ul>\n";
87        echo "\n";
88  }
89}
90
91//
92// Afficher les mots-cles d'un groupe
93//
94function mots_partout_affiche($id_groupe, $titre_groupe, $choses, $show_mots)
95{
96        $table = sql_allfetsel('id_mot, titre','spip_mots',"id_groupe=$id_groupe", '', 'titre');
97        foreach($table as $k => $row) {
98                $id_mot = $row['id_mot'];
99                $show = calcul_numeros($show_mots,$id_mot,count($choses));
100                $sel = '<select id="id_mot'.$id_mot.'" name="mots['.$id_mot.']"><option value="">--'.
101                _T('motspartout:action').'--</option><option value="voir">'.
102                _T('motspartout:voir').'</option><option value="cacher">'.
103                _T('motspartout:cacher').'</option><option value="avec">'.
104                _T('motspartout:ajouter').'</option><option value="sans">'.
105                  _T('motspartout:enlever').'</option></select>';
106                $table[$k] = array(typo($row['titre']) => $show, $sel=>$show);
107        }
108        if (!$table) return '';
109        $largeurs = array(40, 10, 10);
110        $styles = array(
111                        array('arial11',
112                                                        'partie arial11',
113                                                        'avec arial11'),
114                        array('arial1',
115                                                        'partie arial1',
116                                                        'avec arial1'),
117                        array('arial1',
118                                                        'partie arial1',
119                                                        'avec arial1'),
120                        array('arial1',
121                                                        'partie arial1',
122                                                        'avec arial1'),
123                        array('arial1',
124                                                        'partie arial1',
125                                                        'avec arial1'),
126                        array('arial1',
127                                                        'partie arial1',
128                                                        'avec arial1')
129                        );
130
131        echo debut_cadre_enfonce("groupe-mot-24.gif", true, '', typo($titre_groupe));
132        echo "<div class='liste'>";
133        md_afficher_liste($largeurs, $table, $styles);
134        echo "</div>";
135        echo fin_cadre_enfonce(true);
136}
137
138
139//====================l'affichage par defaut======================================
140
141function afficher_liste_defaut($choses) {
142  echo '<table>';
143  $i = 0;
144  foreach($choses as $id_chose) {
145        $i++;
146        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>";
147  }
148  echo '</table>';
149}
150
151//------------------------la fonction qui fait tout-----------------------------------
152
153function exec_mots_partout() {
154global $choses_possibles;
155
156  /***********************************************************************/
157  /* recuperation de la chose sur laquelle on travaille*/
158  /***********************************************************************/
159
160  $nom_chose = addslashes(_request('nom_chose'));
161  if(!isset($choses_possibles[$nom_chose])) {
162        list($nom_chose,) = each($choses_possibles);
163        reset($choses_possibles);
164  }
165  $id_chose = $choses_possibles[$nom_chose]['id_chose'];
166  $table_principale = $choses_possibles[$nom_chose]['table_principale'];
167  $table_auth = $choses_possibles[$nom_chose]['table_auth'];
168  $tables_limite = $choses_possibles[$nom_chose]['tables_limite'];
169
170  list($mots_voir, $mots_cacher, $mots_ajouter, $mots_enlever) = splitArrayIds(_request('mots'));
171  $choses = secureIntArray(_request('choses'));
172
173  $limit =  addslashes(_request('limit'));
174  if($limit == '') $limit = 'rien';
175  $id_limit =  intval(_request('identifiant_limit'));
176  if($id_limit < 1) $id_limit = 0;
177  $nb_aff = intval(_request('nb_aff'));
178  if($nb_aff < 1) $nb_aff = 20;
179  $switch = addslashes(_request('switch'));
180  if($switch == '') $switch = 'voir';
181  $strict = intval(_request('strict'));
182
183  /**********************************************************************/
184  /* recherche des choses.*/
185  /***********************************************************************/
186
187  if(count($choses) == 0) {
188        $select = array();
189        $select[] = "DISTINCT main.$id_chose";
190
191        $from = array();
192        $where = array();
193        $group = '';
194        $order = array();
195
196        if(isset($limit) && $limit != 'rien') {
197          $table_lim = $tables_limite[$limit]['table'];
198          $nom_id_lim = $tables_limite[$limit]['nom_id'];
199
200          $from[0] = "$table_lim as main";
201          $where[0] = "main.$nom_id_lim IN ($id_limit)";
202          if(count($mots_voir) > 0) {
203                $from[1] = "spip_mots_$nom_chose as table_temp";
204                $where[1] = "table_temp.$id_chose = main.$id_chose";
205                $where[] = sql_in("table_temp.id_mot", $mots_voir);
206                if($strict) {
207                  $select[] = 'count(id_mot) as tot';
208                  $group = "main.$id_chose";
209                  $order = ('tot DESC');
210                }
211          }
212          if($mots_cacher) {
213                $from[1] = "spip_mots_$nom_chose as table_temp";
214                $where[1] = "table_temp.$id_chose = main.$id_chose";
215                $where[] = sql_in("table_temp.id_mot", $mots_cacher, 'NOT');
216                if($strict) {
217                  $select[] = 'count(id_mot) as tot';
218                  $group = "main.$id_chose";
219                  $order = ('tot DESC');
220                }
221          }
222        } else if((count($mots_voir) > 0)||($mots_cacher)){
223          if(count($mots_voir) > 0) {
224                $from[0] = "spip_mots_$nom_chose as main";
225                $where[] = sql_in("main.id_mot", $mots_voir);
226                if($strict) {
227                  $select[] = 'count(id_mot) as tot';
228                  $group = "main.$id_chose";
229                  $order = ('tot DESC');
230                }
231          }
232          if($mots_cacher) {
233                $from[0] = "spip_mots_$nom_chose as main";
234                $where[] = sql_in("main.id_mot", $mots_cacher,'NOT');
235                if($strict) {
236                  $select[] = 'count(id_mot) as tot';
237                  $group = "main.$id_chose";
238                  $order = ('tot DESC');
239                }
240          }
241        } else {
242          $from[] = "$table_principale as main";
243        }
244        $select = join(',',$select);
245        $from = join(',',$from);
246        $where = join(',',$where);
247        $res=sql_select($select,$from,$where,$group,$order);
248
249        $choses = array();
250        $in_sans = $mots_cacher ? sql_in('id_mot', $mots_cacher) : '';
251        $do = (!isset($table_auth) || (isset($table_auth) && verifier_admin()));
252        while ($row = sql_fetch($res)) {
253          if($do OR verifier_auteur($table_auth,$id_chose,$row[$id_chose])) {
254                if($mots_cacher) {
255                  $test = sql_countsel("spip_mots_$nom_chose", $in_sans . " AND $id_chose = ".$row[$id_chose]);
256                  if($test) continue;
257                }
258                if(count($mots_voir) > 0 && $strict) {
259                  if($row['tot'] >= count($mots_voir)) {
260                        $choses[] = $row[$id_chose];
261                  } else {
262                        break;
263                  }
264                } else {
265                  $choses[] = $row[$id_chose];
266                }
267          }
268        }
269        sql_free($res);
270  }
271
272  if(count($choses) > 0) {
273        $debut_aff = _request('t_debut');
274
275        $show_mots = array_map('array_shift', sql_allfetsel("spip_mots_$nom_chose.id_mot", "spip_mots_$nom_chose", sql_in("spip_mots_$nom_chose.$id_chose", array_slice($choses,$debut_aff,$nb_aff))));
276  }
277
278
279  /***********************************************************************/
280  /* affichage*/
281  /***********************************************************************/
282
283  $commencer_page = charger_fonction('commencer_page', 'inc');
284  $l = $commencer_page('&laquo; '._T('motspartout:titre_page').' &raquo;', 'documents', 'mots');
285  $css = '<link rel="stylesheet" type="text/css" href="'
286    . find_in_path("mots_partout.css")
287    . '" id="cssprivee" />'  . "\n";
288  echo str_replace('</head>', "$css</head>", $l);
289  echo '<br><br><center>';
290  echo gros_titre(_T('motspartout:titre_page'), '', false);
291  echo '</center>';
292
293  //Colonne de gauche
294  echo debut_gauche('', true);
295
296  $tables_installees = unserialize(lire_meta('MotsPartout:tables_installees'));
297/*  if (!$tables_installees) {
298    $tables_installees=array(
299        "articles"=>true,
300        "rubriques"=>true,
301        "breves"=>true,
302        "syndic"=>true,
303#       "auteurs" => true,
304#       "messages"=>true,
305#       'documents'=>true,
306#       'groupes_mots'=>true
307        );
308        ecrire_meta('MotsPartout:tables_installees',serialize($tables_installees));
309  }*/
310
311
312  echo mots_partout_choix($choses, $choses_possibles, $id_limit, $limit, $nb_aff, $nom_chose, $tables_installees, $tables_limite);
313
314  $redirect = generer_url_ecrire('mots_partout',"limit=$limit&identifiant_limit=$id_limit&nb_aff=$nb_aff");
315
316  echo "<form method='post' action='".generer_url_action('mots_partout',"redirect=$redirect")."'>";
317
318  echo '<input type="hidden" name="nom_chose" value="'.$nom_chose.'">';
319
320  // les actions et limitations possibles.
321  if(count($choses)) {
322        debut_cadre_enfonce('',false,'',_T('motspartout:action'));
323
324
325        echo '<div class=\'liste\'>
326                  <table border=0 cellspacing=0 cellpadding=3 width=\'100%\'>
327           <tr class=\'tr_liste\'>
328          <td colspan=2>';
329        echo _T('motspartout:action_help',array('chose' => $nom_chose));
330        echo "</td>
331                   </tr>
332           <tr class='tr_liste'>
333           <td><button type='submit' name='switch' value='action'>";
334        echo _T('bouton_valider');
335        echo "     </button></td>
336<td>
337(<input type='checkbox' id='strict' name='strict'/>
338<label for='strict'>selection".
339_T('motspartout:stricte').
340"?)</label></td>
341                   </tr>
342                   </table>
343                   </div>";
344        echo fin_cadre_enfonce(true);
345  }
346  creer_colonne_droite();
347
348  $where = "tables_liees REGEXP '(^|,)$nom_chose($|,)'";
349
350  $index = ($GLOBALS['connect_statut'] == '0minirezo')
351      ? 'minirezo'
352      : (($GLOBALS['connect_statut'] == '1comite') ? 'comite' : '');
353
354  if ($index) $where .= " AND ($index='oui')";
355
356  $q = sql_select('*','spip_groupes_mots',$where,'','titre');
357  while ($r = sql_fetch($q))
358        mots_partout_affiche($r['id_groupe'], $r['titre'], $choses, $show_mots);
359
360  sql_free($q);
361
362  //Milieu
363
364  echo debut_droite('',true);
365
366  if(count($warnings) > 0) {
367        debut_cadre_relief('',false,'',_T('motspartout:ATTENTION'));
368        echo '<div class="liste"><table border=0 cellspacing=0 cellpadding=3 width=\"100%\">';
369        //$largeurs = array('100%');
370        $styles = array( array('arial11','100%'));
371        afficher_liste($largeurs, $warnings, $styles);
372        echo '</table>';
373        echo '</div>';
374        fin_cadre_relief();
375  }
376
377  // Affichage de toutes les choses (on pourrait imaginer faire une pagination
378  debut_cadre_relief('',false,'document', _T('portfolio'));
379  if(count($choses) > 0) {
380
381        $trouver_table = charger_fonction('trouver_table', 'base');
382        $afficher_objets = charger_fonction('afficher_objets','inc');
383        $desc = $trouver_table($nom_chose);
384        $nom_choe = substr($nom_chose, 0,-1); # enlever le 's' final
385        if (charger_fonction("afficher_{$nom_choe}s", 'inc', true)
386        OR function_exists('afficher_' . $nom_choe . 's_boucle')) {
387                if (!function_exists($f = 'formater_' . $nom_chose . '_mots'))                          $f='';
388                echo $afficher_objets($nom_choe, $nom_chose,
389                        array('SELECT' => '*',
390                                'FROM' => $desc['table'],
391                                'WHERE' => sql_in($desc['key']['PRIMARY KEY'], $choses)),
392                       $f);
393        } else afficher_liste_defaut($choses,$nb_aff);
394
395        echo "<!--
396<input type=\"radio\" name=\"selectall\" id=\"all\" onclick=\"selectAll(this.form, 'choses[]', 0);\"><label for=\"all\">Select All</label>
397<input  type=\"radio\" name=\"selectall\" id=\"inverse\"  onclick=\"selectAll(this.form, 'choses[]', 1);\"><label for=\"inverse\">Inverse All</label>
398-->";
399  } else {
400        echo _T('motspartout:pas_de_documents').'.';
401  }
402
403  fin_cadre_relief();
404  echo '</form>
405<script>
406function selectAll(formObj, isInverse)
407{
408   for (var i=0;i < formObj.length;i++)
409   {
410      fldObj = formObj.elements[i];
411      if (fldObj.type == \'checkbox\')
412      {
413         if(isInverse)
414            fldObj.checked = (fldObj.checked) ? false : true;
415         else fldObj.checked = true;
416       }
417   }
418}
419</script>';
420
421  fin_page();
422}
423
424// choix de la chose sur laquelle on veut ajouter des mots
425
426function mots_partout_choix($choses, $choses_possibles, $id_limit, $limit, $nb_aff, $nom_chose, $tables_installees, $tables_limite)
427{
428
429
430  $res = debut_cadre_enfonce('',true,'',_T('motspartout:choses'));
431  $res .= '<div class=\'liste\'>
432<table border=0 cellspacing=0 cellpadding=3 width=\"100%\">
433<tr class=\'tr_liste\'>
434<td colspan=2><select name="nom_chose">';
435
436  foreach($choses_possibles as $cho => $m) {
437          if(in_array($cho,$tables_installees)) {
438                  $res .= "<option value=\"$cho\"".(($cho == $nom_chose)?'selected':'').'>'._T($m['titre_chose']).'</option>';
439          }
440  }
441
442  $res .= '</select></td>'
443        .'</tr>
444<tr class=\'tr_liste\'><td colspan=2>'.
445        _T('motspartout:limite').
446        ':</td></tr>'
447        .'<tr class=\'tr_liste\'><td><select name="limit">
448<option value="rien" selected="true">'.
449        _T('motspartout:aucune').
450        '</option>';
451
452  foreach($tables_limite as $t => $m)
453        $res .= "<option value=\"$t\"".(($t == $limit)?'selected':'').">$t</option>";
454
455  $res .= '</select></td>'
456        ."<td><input type='text' size='3' name='identifiant_limit' value='$id_limit'></td></tr>"
457        .'<tr class=\'tr_liste\'>'
458        ."<td>
459        <button type='submit' name='switch' value='chose'>"
460        ._T('motspartout:voir')
461        ."    </button>
462        </td>";
463
464  if (count($choses)>0) {
465        $res .= '<td colspan=2><label for="nb_aff">'._T('motspartout:par').':</label><select name="nb_aff">';
466        for($nb = 10;$nb<count($choses)+10;$nb=$nb+10)
467                $res .="<option value=\"$nb\"".(($nb == $nb_aff)?'selected="true"':'').">$nb</option>";
468        $res .= '</select></td>';
469  } else $res .= '<td colspan=2></td>';
470
471  $res .= "     </table></div>"
472        .fin_cadre_enfonce(true);
473
474  return generer_form_ecrire('mots_partout', $res, " method='get'");
475}
476
477?>
Note: See TracBrowser for help on using the repository browser.