source: spip-zone/_plugins_/_dev_/acces_groupes/inc/accesgroupes_options.php @ 5862

Last change on this file since 5862 was 5862, checked in by cy_altern@…, 15 years ago

début du filtrage complet de l'espace privé par surcharge des requêtes SQL : plus de rubriques restreintes *presque partout*, reste les articles, les sites et les forums...

File size: 29.0 KB
Line 
1<?php
2// MES_OPTIONS pour ACCESGROUPE : toutes les fonctions utilisées pour le controle d'accès espaces public / privé
3
4include_spip('base/accesgroupes_tables');
5
6
7// SURCHARGE des fonctions de l'espace privé
8//   inclure les fichiers originaux de /ecrire/exec pour que toutes les fonctions natives du core soient disponibles
9//   mais ne le faire que si on est sur une page de l'espace privé le nécessitant
10//       !!! EXCEPTION : breves_voir est surchargé par le fichier /exec/breves_voir.php puisque le bridage d'accès se fait dans
11//       la fonction afficher_breves_voir() et non pas la fonction exec_breves_voir() !!!
12//       merci ESJ pour la subtilité du include() php à la place du inclure_spip()
13                        $exec = _request('exec'); // si on est dans l'espace privé : intégrer le fichier concerné par la surcharge
14        if (in_array($exec, array('naviguer','rubriques_edit','articles','articles_edit','breves_edit'))) {  // ,'breves_voir'
15         // inclure uniquement le fichier exec dont a besoin ET utiliser un include() php et non pas include_spip() pour ne pas se faire couillonner par find_in_path()
16                 include('exec/'.$exec.'.php');
17       // appel du fichier contenant les fonctions exec_xxx() modifiées pour accesgroupes
18           include_spip('inc/accesgroupes_prive');
19        }
20
21// CACHE : nécessité d'un cache différencié selon les rubriques autorisées/restreintes
22//   ajouter un marqueur de cache pour permettre de differencier le cache en fonction des rubriques autorisees
23//       potentiellement une version de cache differente par combinaison de rubriques autorisées pour un utilisateur + le cache de base sans autorisation
24//   merci Cedric pour la méthode (plugin acces_restreint)
25                        if ($exec == '') {  // si on on est dans l'espace public gérer le marqueur de cache
26          if (isset($auteur_session['id_auteur'])) {
27//echo '<br>début cache';
28                   $combins = accesgroupes_combin();
29                 $combins = join("-",$combins);
30                 if (!isset($GLOBALS['marqueur'])) {
31                                                          $GLOBALS['marqueur'] = "";
32                                                 }
33                 $GLOBALS['marqueur'] .= ":accesgroupes_combins $combins";
34                }
35                        }
36               
37// fct pour construire et renvoyer le tableau des rubriques à accès restreint dans la partie PUBLIQUE
38//               clone de la fct accesgroupes_liste_rubriques_restreintes() de inc/accesgroupes_fonctions.php
39        function accesgroupes_combin($id_parent = 0) {
40                                 $id_parent = intval($id_parent); // securite                                   
41                                 static $Trub_restreintes; // nécessaire pour que la suite ne soit éxécutée qu'une fois par hit (même si on à n BOUCLES)
42                 if (!is_array($Trub_restreintes)) {
43                          $Trub_restreintes = array();
44                        // attaquer à la racine pour mettre tout de suite les éventuels secteurs restreints dans le tableau ce qui accélèrera la suite
45                                $sql1 = "SELECT id_rubrique, id_parent, id_secteur FROM spip_rubriques";       
46                                $result1 = spip_query($sql1);
47                                while ($row1 = spip_fetch_array($result1)) {
48                                                         $rub_ec = $row1['id_rubrique'];
49                                                                 $parent_ec = $row1['id_parent'];
50                                                                 $sect_ec = $row1['id_secteur'];
51                                                // si le parent ou le secteur est déja dans le tableau : vu le principe d'héritage pas la peine d'aller plus loin :)
52/*                                                       if (in_array($parent_ec, $Trub_restreintes) OR in_array($sect_ec, $Trub_restreintes)) {
53                                                                        $Trub_restreintes[] = $rub_ec;                                                         
54                                                         }
55                                                // sinon c'est plus couteux : il faut faire le test complet de la restriction de la rubrique pour espace public
56                                                         else {*/
57                                                                                if (accesgroupes_verif_acces($rub_ec, 'public') == 1 OR accesgroupes_verif_acces($rub_ec, 'public') == 2) {
58                                                                                         $Trub_restreintes[] = $rub_ec;
59                                                                          }
60//                                                       }
61                                }
62                                         }
63//echo '<br>tableau des rubriques = ';
64//print_r($Trub_restreintes);
65                                         return $Trub_restreintes;
66        }
67
68                       
69                       
70// création de la boucle ACCESGROUPES
71$GLOBALS['tables_principales']['spip_accesgroupes'] = array('field' => array(), 'key' => array());
72$GLOBALS['table_des_tables']['accesgroupes'] = 'accesgroupes';
73
74function boucle_ACCESGROUPES($id_boucle, &$boucles) {
75                                 global $Tspip_rubriques, $Tspip_breves, $Tspip_articles;
76                                 $boucle = &$boucles[$id_boucle];
77                        // si on est pas dans un squelette rubrique, trouver le id_rubrique
78                                 if (!$GLOBALS['id_rubrique']) {
79                                        // cas du squelette article
80                                                if ($GLOBALS['id_article']) {
81                                                         $crit_champ = 'id_article';
82                                                         $crit_table = $Tspip_articles;
83                                                         $crit_id = $GLOBALS['id_article'];
84                                                }
85                                 // cas du squelette breve
86                                                else {
87                                                                 $crit_champ = 'id_breve';
88                                                                 $crit_table = $Tspip_breves;
89                                                                 $crit_id = $GLOBALS['id_breve'];
90                                                }
91                                          $sql222 = "SELECT id_rubrique FROM $crit_table WHERE $crit_champ = $crit_id LIMIT 1";
92                                          $result222 = spip_query($sql222);
93                                                $row222 = spip_fetch_array($result222);
94                                                $id_rub = $row222['id_rubrique'];
95                                 }
96                                 else {
97                                                        $id_rub = $GLOBALS['id_rubrique'];
98                                 }
99        $code = <<<CODE
100                                                 if (accesgroupes_verif_acces($id_rub, 'public') == 1 OR accesgroupes_verif_acces($id_rub, 'public') == 2) {
101                                                                return '&nbsp;';
102                                                 }
103CODE;
104        return $code;
105}
106/* pour info : syntaxe possible dans $code = <<<CODE
107                                \$toto = '$txt';
108                                return \$toto;
109*/
110
111
112// le filtre qui permet d'ajouter une img aux #TITRE des rubriques/articles/breves à accès restreint
113function accesgroupes_visualise($texte, $id_rub = 0, $image = 'cadenas-24.gif') {
114                                 if (accesgroupes_verif_acces($id_rub, 'public') == 1 OR accesgroupes_verif_acces($id_rub, 'public') == 2) {
115                                                return "<img src=\"ecrire/img_pack/".$image."\" alt=\""._T('accesgroupes:bloque_rubrique')."\" style=\"border: none; vertical-align: baseline;\"> ".$texte;
116                                 }
117                                 else {
118                                                        return $texte;
119                                 }
120}
121
122// le critère qui permet de ne pas afficher les rubriques à accès restreint
123function critere_accesgroupes_invisible($id_boucle, &$boucles, $crit) {
124                                 global $Tjpk_groupes_acces;
125                                 $boucle = &$boucles[$id_boucle];
126      // construit le tableau de toutes les rubriques à acces interdit (dans la partie publique) pour l'auteur en cours
127                                 $sql1 = "SELECT id_rubrique FROM $Tjpk_groupes_acces WHERE prive_public != 1";
128         $result1 = spip_query($sql1);
129         $Trub_interdites = array();
130         while ($rows = spip_fetch_array($result1)) {
131                                 if (accesgroupes_verif_acces($rows['id_rubrique'], 'public') == 1 OR accesgroupes_verif_acces($rows['id_rubrique'], 'public') == 2) {
132                                          if (!in_array($rows['id_rubrique'], $Trub_interdites)) {
133                                                         $Trub_interdites[] = $rows['id_rubrique'];
134                                          }
135                                 }
136         }
137                                 foreach ($Trub_interdites as $id_rub_ec) {
138                                                                 $boucle->where[] = ' id_rubrique != '.$id_rub_ec;
139                                 }
140}
141
142
143// détermine si une rubrique $rub est restreinte ou non (en fct de la provenance $prive_public : prive | public)
144// retourne 0 : accès libre | 1 : accès restreint non-connecté | 2 : accès restreint non-autorisé | 3 accès retreint autorisé
145function accesgroupes_verif_acces($rub, $prive_public){
146//              global $Tspip_rubriques, $Tspip_auteurs, $Tspip_auteurs_rubriques, $Tjpk_groupes_acces, $Tjpk_groupes_auteurs, $Tjpk_groupes;
147     
148      $aut = $GLOBALS['auteur_session']['login'];
149      // vérifie si la rubrique courante est privée
150      do{ // boucle tant que la rubrique n'est pas la racine du site et que le retour est vide
151         if (accesgroupes_RubPrive($rub, $prive_public)) {
152//echo '<br>$aut = '.$aut;     
153            if ($aut != "") {
154               $aut = accesgroupes_IdAut($aut); // cherche l'id_auteur
155               if (accesgroupes_GrpAcces($aut, $rub)){
156                 $retour = 3; // accès restreint : autorisé
157               }
158                                                         else {
159                 $retour = 2; // accès restreint : non autorisé
160               }
161            }
162                                                else {
163               $retour = 1; // accès restreint : non connecté
164            }
165         }
166                                 else {
167            $retour = 0; // accès libre - vérifier la rubrique parente
168         }
169         $sql = "SELECT id_parent FROM spip_rubriques WHERE id_rubrique = $rub LIMIT 1"; // recherche la rubrique parente
170         $result = spip_query($sql);
171         if ($row = spip_fetch_array($result)) {
172            $rub = $row['id_parent'];
173         }
174      }
175                        while ($rub > 0 && $retour == 0 );
176      return $retour;
177}
178
179
180// retourne l'id_auteur à partir du login $aut
181function accesgroupes_IdAut($aut){
182//              global $Tspip_rubriques, $Tspip_auteurs, $Tspip_auteurs_rubriques, $Tjpk_groupes_acces, $Tjpk_groupes_auteurs, $Tjpk_groupes;
183     
184      $sql = "SELECT id_auteur, statut FROM spip_auteurs WHERE login='" .addslashes($aut) ."' LIMIT 1";
185      $result = spip_query($sql);
186      if ($result){
187         if ($row = spip_fetch_array($result)){
188            $aut = $row['id_auteur'];
189         }
190      }
191      return $aut;
192}
193
194// vérifie si la rubrique $rub est restreinte, en fct de la provenance $prive_public (prive | public)
195function accesgroupes_RubPrive($rub, $prive_public){
196//              global $Tspip_rubriques, $Tspip_auteurs, $Tspip_auteurs_rubriques, $Tjpk_groupes_acces, $Tjpk_groupes_auteurs, $Tjpk_groupes;
197      $sql = "SELECT count(*) AS nb_acces
198                                                  FROM spip_accesgroupes_acces
199                                                        LEFT JOIN spip_accesgroupes_groupes
200                                                        ON spip_accesgroupes_acces.id_grpacces = spip_accesgroupes_groupes.id_grpacces
201                                                  WHERE id_rubrique = $rub 
202                                                        AND actif = 1";
203                        $prive_public == 'prive' ? $sql .= ' AND prive_public < 2' : $sql .= ' AND prive_public != 1';
204      $result = spip_query($sql);
205//print '<br>$sql = '.$sql.'<br>mysql_error() = '.mysql_error().'<br>';                 
206      if ($row = spip_fetch_array($result)) {
207         $prive = $row['nb_acces'];
208      }
209//echo '<br>$prive = '.$prive;                 
210      if ($prive > 0) {
211         return true;
212      }
213                        else {
214         return false;
215      }
216}
217
218// vérifie si l'auteur $aut est autorisé à accéder à la rubrique restreinte $rub
219function accesgroupes_GrpAcces($aut,$rub){
220//      global $Tspip_rubriques, $Tspip_auteurs, $Tspip_auteurs_rubriques, $Tjpk_groupes_acces, $Tjpk_groupes_auteurs, $Tjpk_groupes;
221     
222      $acces = 0;
223                // les admins restreints ont accès sans limitation à leur rubrique
224                  $sql507 = "SELECT COUNT(*) AS est_admin
225                                                                 FROM spip_auteurs_rubriques
226                                                                 WHERE id_auteur = $aut 
227                                                                 AND id_rubrique = $rub 
228                                                                 LIMIT 1";
229                        $result507 = spip_query($sql507);
230                        $row507 = spip_fetch_array($result507);
231                        if ($row507['est_admin'] > 0) {
232                                 return TRUE;
233                        }
234                        $sql517 = "SELECT count(*) AS NbAcces
235                                                  FROM spip_accesgroupes_acces
236                                                        LEFT JOIN spip_accesgroupes_auteurs
237                                                        ON spip_accesgroupes_acces.id_grpacces = spip_accesgroupes_auteurs.id_grpacces
238                                                        LEFT JOIN spip_accesgroupes_groupes
239                                                        ON spip_accesgroupes_auteurs.id_grpacces = spip_accesgroupes_groupes.id_grpacces
240                                WHERE id_auteur = $aut 
241              AND dde_acces = 0
242              AND id_rubrique = $rub 
243              AND actif = 1";
244      $result = spip_query($sql517);
245//echo 'mysql_error $sql517 = '.mysql_error();                 
246      if ($row = spip_fetch_array($result)){
247         $acces = $row['NbAcces'];
248      }
249      if ($acces > 0){
250         return TRUE; // accès autorisé
251      }
252                        else {
253         // si pas d'accès direct pour l'auteur => test si les groupes auxquels il appartient ont un droit d'acces
254                                 $sql201 = "SELECT id_grpacces FROM spip_accesgroupes_auteurs WHERE id_auteur = $aut AND dde_acces = 0";
255                                 $result201 = spip_query($sql201);
256                                 while ($row = spip_fetch_array($result201)) {
257                                                         if (accesgroupes_ssGrpAcces($row['id_grpacces'], $rub) == TRUE) {
258                                                                                return TRUE;
259                                                                 }
260                                 }
261                        // si pas d'accès direct ou par groupes => test des groupes dans lesquels l'utilisateur est inclu par son statut
262                                         $sql202 = "SELECT statut FROM spip_auteurs WHERE id_auteur = $aut LIMIT 1";
263           $result202 = spip_query($sql202);
264           if ($result202){
265              if ($row = spip_fetch_array($result202)){
266                                           $sp_statut = $row['statut'];
267              }
268                         }
269                                         $sql204 = "SELECT id_grpacces FROM spip_accesgroupes_auteurs WHERE sp_statut = '$sp_statut'";                                   
270                                 $result204 = spip_query($sql204);
271                                 while ($row = spip_fetch_array($result204)) {
272                                                         if (accesgroupes_ssGrpAcces($row['id_grpacces'], $rub) == TRUE) {
273                                                                          return TRUE;
274                                                                 }
275                                 }
276                                         return FALSE;
277      }
278}
279
280// test des accès par ss-groupe, récursivement dans toute l'ascendance du groupe testé
281function accesgroupes_ssGrpAcces($id_grpe, $rub) {
282//               global $Tspip_rubriques, $Tspip_auteurs, $Tspip_auteurs_rubriques, $Tjpk_groupes_acces, $Tjpk_groupes_auteurs, $Tjpk_groupes;
283
284         // si pas d'accès direct pour l'auteur => test si les groupes auxquels il appartient sont exonérés par prive_public
285                                 $sql202 = "SELECT COUNT(*) AS NbAcces FROM spip_accesgroupes_acces WHERE id_grpacces = $id_grpe AND id_rubrique = $rub";
286                                 $result202 = spip_query($sql202);
287                                 if ($row = spip_fetch_array($result202)) {
288                                                if ($row['NbAcces'] > 0) {
289                                                         return TRUE;
290                                                }
291                                  else {
292                                                // test des groupes de l'ascendance du groupe testé
293                                                                 $sql203 = "SELECT id_grpacces FROM spip_accesgroupes_auteurs WHERE id_ss_groupe = $id_grpe";
294                                                         $result203 = spip_query($sql203);
295                                                         while ($row = spip_fetch_array($result203)) {
296                                                                                 $id_at = $row['id_grpacces'];
297                                                                                 if (accesgroupes_ssGrpAcces($id_at, $rub) == TRUE) {
298                                                                                          return TRUE;
299                                                                                 }
300                                                         }
301                                  }
302                                 }
303                                 return FALSE;
304}
305
306// détermine si une rubrique à accès restreint est contrôlée par (au moins) un groupe autorisant les demandes d'accès
307function accesgroupes_existe_demande_acces($rub) {
308//                               global $Tspip_rubriques, $Tspip_auteurs, $Tspip_auteurs_rubriques, $Tjpk_groupes_acces, $Tjpk_groupes_auteurs, $Tjpk_groupes;
309                // déterminer si c'est la rubrique en cours qui est restreinte
310                                 $sql333 = "SELECT COUNT(*) as nb_rub FROM spip_accesgroupes_acces WHERE id_rubrique = $rub";
311                                 $result333 = spip_query($sql333);
312                                 $row333 = spip_fetch_array($result333);
313                                 $existe_rub = $row333['nb_rub'];
314                // si c'est la rubrique en cours qui est contrôlée, tester si le groupe autorise les demandes d'accès
315                                 if ($existe_rub > 0) {
316                                 $sql303 = "SELECT COUNT(*) AS nb_demande_acces
317                                                                          FROM spip_accesgroupes_acces
318                                                                                                LEFT JOIN spip_accesgroupes_groupes
319                                                                                                ON spip_accesgroupes_acces.id_grpacces = spip_accesgroupes_groupes.id_grpacces
320                                                                          WHERE id_rubrique = $rub
321                                                                                AND demande_acces = 1";
322                                 $result303 = spip_query($sql303);
323                                 $rows303 = spip_fetch_array($result303);
324                                 if ($rows303['nb_demande_acces'] > 0) {
325                                                return TRUE;
326                                 }
327                                 else {
328                                                                        return FALSE;
329                                 }
330                 }
331                // sinon tester si c'est son parent qui est la rubrique restreinte (récursivement)
332                                 else {
333                                                        $sql374 = "SELECT id_parent FROM spip_rubriques WHERE id_rubrique = $rub LIMIT 1";
334                                                        $result374 = spip_query($sql374);
335                                                        $row374 = spip_fetch_array($result374);
336                                                        $id_parent = $row374['id_parent'];
337                                                        if (accesgroupes_existe_demande_acces($id_parent) == TRUE) {
338                                                                 return TRUE;
339                                                        }
340                                 }
341}
342
343// trouve la rubrique restreinte dans l'ascendance d'une rubrique
344function accesgroupes_trouve_parent_restreint($rub, $prive_public, $retour = '') {
345//                               global $Tspip_rubriques, $Tspip_auteurs, $Tspip_auteurs_rubriques, $Tjpk_groupes_acces, $Tjpk_groupes_auteurs, $Tjpk_groupes;
346                                 while ($rub != 0 AND $retour == '') {
347                                                         if (accesgroupes_RubPrive($rub, $prive_public)) {
348                                                                        $retour = $rub;
349                                                         }
350                                                         else {
351                                                        $sql374 = "SELECT id_parent FROM $Tspip_rubriques WHERE id_rubrique = $rub LIMIT 1";
352                                                        $result374 = spip_query($sql374);
353                                                        $row374 = spip_fetch_array($result374);
354                                                        $id_parent = $row374['id_parent'];
355                                                                                $rub = $id_parent;
356                                                         }
357                                 }
358                                 return $retour;
359}
360
361// fct pour retourner un tableau avec l'id_auteur et le nom du proprio d'un groupe
362function accesgroupes_trouve_proprio_groupe($id_grpe) {
363                                 $sql = "SELECT spip_accesgroupes_groupes.proprio, spip_auteurs.nom
364                                                           FROM  spip_accesgroupes_groupes
365                                                                 LEFT JOIN spip_auteurs
366                                                                 ON spip_accesgroupes_groupes.proprio = spip_auteurs.id_auteur
367                                                                 WHERE id_grpacces = $id_grpe
368                                                                 LIMIT 1";
369                                $result = spip_query($sql);
370                                if ($row = spip_fetch_array($result)) {   // si le proprio est un admin restreint $row['nom'] est vide
371                                         return array('id_proprio' => $row['proprio'], 'nom_proprio' => ($row['nom'] != '' ? $row['nom'] : _T('accesgroupes:tous_les_admins')) );
372                                }
373}
374
375// fct pour gérer l'affichage en cas de rubrique/article/breve restreints
376// dans l'espace privé gère info restreint + formulaire d'inscription / dans l'espace public ne gère que le formulaire d'inscription
377function accesgroupes_affichage_acces_restreint() {
378                                 $exec = _request('exec');
379                        // trouver l'id_rubrique dans laquelle se trouve l'élément restreint en cours
380                                 if ($exec != '') {  // si on est dans l'espace privé
381                                                if ($exec == 'articles' OR $exec == 'articles_edit') {
382                                                                         global $id_article;
383                                                                         $sql2 = "SELECT id_rubrique FROM spip_articles WHERE id_article = $id_article LIMIT 1";
384                                                                         $result2 = spip_query($sql2);
385                                                                         if ($row2 = spip_fetch_array($result2)) {
386                                                                                        $id_rubrique = $row2['id_rubrique'];
387                                                                         }
388                                                                         else {
389                                                                                  // si création d'un nouvel article en étant positionné dans une rubrique à accès interdit pour l'auteur
390                                                                                                if (isset($_GET['id_rubrique']) AND $_GET['id_rubrique']) {
391                                                                                                         $id_rubrique = $_GET['id_rubrique'];
392                                                                                                }
393                                                                                                else {
394                                                                                                                 $id_rubrique = 0;
395                                                                                                }
396                                                                         }
397//echo '<br>$id_rubrique='.$id_rubrique;                         
398                                                }
399                                                elseif ($exec == 'breves_voir' OR $exec == 'breves_edit') {
400                                                                         global $id_breve;
401                                                                         $sql2 = "SELECT id_rubrique FROM spip_breves WHERE id_breve = $id_breve LIMIT 1";
402                                                                         $result2 = spip_query($sql2);
403                                                                         if ($row2 = spip_fetch_array($result2)) {
404                                                                                        $id_rubrique = $row2['id_rubrique'];
405                                                                         }
406                                                                         else {
407                                                                                  // si création d'une nouvelle brève en étant positionné dans une rubrique à accès interdit pour l'auteur
408                                                                                                if (isset($_GET['id_rubrique']) AND $_GET['id_rubrique']) {
409                                                                                                         $id_rubrique = $_GET['id_rubrique'];
410                                                                                                }
411                                                                                                else {
412                                                                                                                 $id_rubrique = 0;
413                                                                                                }
414                                                                         }
415                                                }
416                                                else {
417                                                                 global $id_rubrique;
418                                                }
419                                                $url_img_pack = 'img_pack';
420                                                $url_ecrire = '';
421                                                $url_retour = 'ecrire/';                                       
422                                 }
423                                 else {   // on est dans l'espace public
424                                                        global $id_rubrique;
425                                                        $url_img_pack = 'ecrire/img_pack';
426                                                        $url_ecrire = 'ecrire/';
427                                                        $url_retour = 'index.php';
428                                 }
429
430                        // traitement des données envoyées par le formulaire
431           $msg_retour_form = '';
432                                 if (isset($_POST['add_auteur']) AND isset($_POST['auteur']) AND $_POST['auteur'] != '' AND isset($_POST['groupe_demande_acces']) AND $_POST['groupe_demande_acces'] != '') {
433                                 $auteur = $_POST['auteur'];
434                                 $groupe_demande_acces = $_POST['groupe_demande_acces'];
435                                 $sql224 = "SELECT nom FROM spip_accesgroupes_groupes WHERE id_grpacces = $groupe_demande_acces LIMIT 1";
436                                 $result224 = spip_query($sql224);
437                                 $row224 = spip_fetch_array($result224);
438                                 $nom_groupe = $row224['nom'];
439                                 $sql225 = "SELECT titre FROM spip_rubriques WHERE id_rubrique = $id_rubrique LIMIT 1";
440                                 $result225 = spip_query($sql225);
441                                 $row225 = spip_fetch_array($result225);
442                                 $nom_rubrique = $row225['titre'];
443                                 $message = _T('accesgroupes:msg_demande_acces1').'<strong>'.$GLOBALS['auteur_session']['nom'].'</strong> (#'.$auteur.') '
444                                                                                ._T('accesgroupes:msg_demande_acces2').'<strong>'.$nom_groupe.'</strong> (#'.$groupe_demande_acces.')'
445                                                                                ._T('accesgroupes:msg_demande_acces3').'<strong>'.$nom_rubrique.'</strong> (#'.$id_rubrique.')'
446                                                                                ._T('accesgroupes:msg_demande_acces4')
447                                                                                                .'<a href="?exec=accesgroupes_admin&groupe='.$groupe_demande_acces.'">'
448                                                                                ._T('accesgroupes:msg_demande_acces5').'</a><br />'
449                                                                                                .'<span style="font-size: 75%;">'._T('accesgroupes:msg_demande_acces6').'</span>';
450                                 if (isset($_POST['message']) AND $message != '') {
451                                                $message .= '<br /><br /><strong>'._T('accesgroupes:msg_demande_acces7').'</strong><br />'.$_POST['message'];
452                                 }
453                                 $message = addslashes($message);
454                                 $sql24 = "SELECT proprio FROM spip_accesgroupes_groupes WHERE id_grpacces = $groupe_demande_acces LIMIT 1";
455                                 $result24 = spip_query($sql24);
456                                 $row24 = spip_fetch_array($result24);
457                                 $proprio = $row24['proprio'];                           
458                                 $sql23 = "INSERT INTO spip_accesgroupes_auteurs (id_grpacces, id_auteur, dde_acces, proprio)
459                                                                                         VALUES ($groupe_demande_acces, $auteur, 1, $proprio)";
460                                 spip_query($sql23);
461                                 if (mysql_errno() == 1062) {
462                                          $msg_retour_form = "<br /><img src=\"".$url_img_pack."/warning-24.gif\" style=\"vertical-align: middle;\"> "._T('accesgroupes:duplicata_demande_acces');
463                                 }
464                                 elseif (mysql_error() == '') {
465                                                 $sql25 = "SELECT MAX(id_message) AS maxId FROM spip_messages";
466                                                 $result25 = spip_query($sql25);
467                                                 $row25 = spip_fetch_array($result25);
468                                         $id_forum = $row25['maxId'] + 1;
469                                                 $date_pub = date("y-m-d H:i:s");
470                                                 $titre_mess = addslashes(_T('accesgroupes:titre_demande_acces'));
471                                                 $sql26 = "INSERT INTO spip_messages (id_message, titre, texte, type, date_heure, rv, statut, id_auteur, maj)
472                                                                                         VALUES ($id_forum, '$titre_mess', '$message', 'normal', '$date_pub', 'non', 'publie', $auteur, '$date_pub')";
473                                                 spip_query($sql26);
474                                                 if (mysql_error() == '') {
475                                                                if ($proprio != 0) {   // si le proprio n'est pas un admin total
476                                                                         $sql28 = "INSERT INTO spip_auteurs_messages (id_auteur, id_message, vu) VALUES ($proprio, $id_forum, 'non')";
477                                                                         spip_query($sql28);
478                                                                }
479                                                                else {  // si le proprio est un admin total ($proprio == 0), envoyer le message à tous les admins
480                                                                                 $sql29 = "SELECT id_auteur FROM spip_auteurs WHERE statut = '0minirezo'";
481                                                                                 $result29 = spip_query($sql29);
482                                                                                 while ($rows29 = spip_fetch_array($result29)) {
483                                                                                                         $id_admin_ec = $rows29['id_auteur'];
484                                                                                                         $sql30 = "SELECT COUNT(*) AS nb_rub_admin FROM spip_auteurs_rubriques WHERE id_auteur = $id_admin_ec";
485                                                                                                         $result30 = spip_query($sql30);
486                                                                                                         $rows30 = spip_fetch_array($result30);
487                                                                                                         if ($rows30['nb_rub_admin'] < 1) {
488                                                                                                                        $sql31 = "INSERT INTO spip_auteurs_messages (id_auteur, id_message, vu)
489                                                                                                                                                                          VALUES ($id_admin_ec, $id_forum, 'non')";
490                                                                                                                        spip_query($sql31);
491                                                                                                         }
492                                                                                 }
493                                                                }
494                                                                if (mysql_error() == '') {
495                                                                        // si tout s'est bien passé, stocker la valeur de $id_forum dans dde_acces de l'auteur pour effaçage automatique du message de demande d'accés par la suite
496                                                                                         $sql32 = "UPDATE spip_accesgroupes_auteurs
497                                                                                                                         SET dde_acces = $id_forum
498                                                                                                                                 WHERE id_auteur = $auteur
499                                                                                                                                 AND id_grpacces = $groupe_demande_acces
500                                                                                                                                 AND proprio = $proprio
501                                                                                                                                 LIMIT 1";
502                                                                                         spip_query($sql32);
503//echo '<br>$id_forum = '.$id_forum.'<br>$sql32 = '.$sql32.'<br>mysql_error $sql32 = '.mysql_error();                                                                                   
504                                                                                         $msg_retour_form .= "<br /><img src=\"$url_img_pack/m_envoi.gif\" style=\"vertical-align: middle;\"> <img src=\"$url_img_pack/message.gif\" style=\"vertical-align: bottom;\"> ";
505                                                                         $msg_retour_form .= _T('accesgroupes:demande_ok');
506                                                                }
507                                                                else {
508                                                                                 $msg_retour_form .= "<br /><img src=\"$url_img_pack/warning-24.gif\" style=\"vertical-align: middle;\"> "._T('accesgroupes:erreur_creation_demande_acces');
509                                                                }
510                                                 }
511                                                 else {
512                                                                        $msg_retour_form .= "<br /><img src=\"$url_img_pack/warning-24.gif\" style=\"vertical-align: middle;\"> "._T('accesgroupes:erreur_creation_demande_acces');
513                                                 }
514                                 }
515                                 else {
516                                                 $msg_retour_form .= "<br /><img src=\"$url_img_pack/warning-24.gif\" style=\"vertical-align: middle;\"> "._T('accesgroupes:erreur_creation_demande_acces');
517                                 }
518                 }
519                                 if ($msg_retour_form != '') {
520                                                $msg_retour_form .= '<br /><br /><a href="'.$url_retour.'">['._T('accesgroupes:retour_site').']</a><br />';
521                                 }
522
523                        // envoyer l'affichage de la restriction avec le formulaire si nécessaire
524                                 if ($exec != '') {  // si on est dans l'espace privé
525                                                $provenance_prive_public = 'prive';
526                                                if ($exec == 'articles' OR $exec == 'articles_edit') {
527                                                                         $info = 'info_numero_article';
528                                                                         $id_elem = $id_article;
529                                                                         $info_bloque = 'bloque_article';
530                                                }
531                                                elseif ($exec == 'breves_voir' OR $exec == 'breves_edit') {
532                                                                         $info = 'info_gauche_numero_breve';
533                                                                         $id_elem = $id_breve;
534                                                                         $info_bloque = 'bloque_breve';
535                                                }
536                                                else {
537                                                                 $info = 'titre_numero_rubrique';
538                                                                 $id_elem = $id_rubrique;
539                                                                 $info_bloque = 'bloque_rubrique';
540                                                }
541                                                debut_gauche(); 
542            debut_boite_info(); 
543            echo "<div align='center'>\n"; 
544            echo "<font face='Verdana,Arial,Sans,sans-serif' size='1'><b>"._T($info)."</b></font>\n"; 
545            echo "<br><font face='Verdana,Arial,Sans,sans-serif' size='6'><b>$id_elem</b></font>\n"; 
546            echo "</div>\n"; 
547            fin_boite_info(); 
548            debut_droite(); 
549            debut_cadre_relief($ze_logo); 
550            echo "\n<table cellpadding=2 cellspacing=0 border=0 width='100%'>"; 
551            echo "<tr width='100%'> <td width='100%' valign='top' colspan='2'>"; 
552            gros_titre($titre); 
553            echo "</td> </tr> <td>".http_img_pack("warning.gif",'', "width='48' height='48'", _T('info_administrer_rubrique')); 
554            echo "</td><td>"._T('accesgroupes:'.$info_bloque)."</td></tr>"; 
555            echo "</table>\r\n<br /><br />\r\n"; 
556            fin_cadre_relief(); 
557                                 }
558                                 else {         // on est dans l'espace public
559                                                        $provenance_prive_public = 'public';
560                                 }
561
562      // affichage du formulaire de demande d'accès si au moins un groupe contrôlant la rubrique l'autorise
563                        // !!! et si $id_rubrique est != 0 => plantage de la page sinon !!!
564                 if ($id_rubrique != 0 AND accesgroupes_existe_demande_acces($id_rubrique) == TRUE AND $msg_retour_form == '') {                       
565                                                 echo "<form style=\"background: #eee; border: solid 1px #aaa; padding: 10px;\" name=\"accesgroupe\" method=\"post\" action=\"".basename($_SERVER['SCRIPT_FILENAME'])."?".$_SERVER['QUERY_STRING']."\">";
566             echo _T('accesgroupes:demande_acces'); 
567                                         echo "<br />"._T('accesgroupes:choix_groupe');
568                // trouver si c'est la rubrique en cours qui est restreinte ou un de ses ascendants
569                               $id_rub_restreinte = accesgroupes_trouve_parent_restreint($id_rubrique, $provenance_prive_public);
570                                                 $sql22 = "SELECT spip_accesgroupes_acces.id_grpacces,
571                                                                                                spip_accesgroupes_groupes.nom
572                                                                 FROM spip_accesgroupes_acces
573                                                                                         LEFT JOIN spip_accesgroupes_groupes
574                                                                                         ON spip_accesgroupes_acces.id_grpacces = spip_accesgroupes_groupes.id_grpacces
575                                                                 WHERE demande_acces = 1
576                                                                 AND id_rubrique = $id_rub_restreinte
577                                                                 AND actif = 1
578                          ";
579                          $result22 = spip_query($sql22);
580//echo '<br>mysql_error $sql22 = '.mysql_error();                                                                       
581                                echo " <select name=\"groupe_demande_acces\" size=\"1\">";
582                        while ($row22 = spip_fetch_array($result22)) {
583                                                                                        $id_groupe_ec = $row22['id_grpacces'];
584                          $nom_groupe_ec = $row22['nom'];
585                                                                                        $Tproprio_grpe = accesgroupes_trouve_proprio_groupe($id_groupe_ec);
586                                                                                        $nom_proprio_ec = $Tproprio_grpe['nom_proprio'];
587       
588                          echo "<option value=\"$id_groupe_ec\">$nom_groupe_ec ("._T('accesgroupes:proprio')." = $nom_proprio_ec)</option>";
589              } 
590              echo " </select><br /><br />";
591
592                                                echo _T('accesgroupes:help_demande_acces')."<br /> <textarea name=\"message\" rows=\"4\" cols=\"55\"></textarea>";
593              echo "<input type=\"hidden\" name=\"auteur\" value=\"".$GLOBALS['auteur_session']['id_auteur']."\" /><br>";
594              echo "<input type=\"submit\" name=\"add_auteur\" value=\""._T('accesgroupes:envoyer')."\"/>";
595              echo "</form>";
596                 }              // fin formulaire demande acces
597                                 else {  // affichage du message de retour du formulaire
598                                                        echo $msg_retour_form;
599                                 }
600                                       
601}
602
603
604
605
606?>
Note: See TracBrowser for help on using the repository browser.