/_plugins_/acces_groupes/1.9.1/inc/accesgroupes_fonctions.php

https://bitbucket.org/pombredanne/spip-zone-treemap · PHP · 284 lines · 193 code · 29 blank · 62 comment · 29 complexity · d45c9b228d94487730191d9b4ce74ca1 MD5 · raw file

  1. <?php
  2. //spip_log('inclusion accesgroupes_boucles = OK!');
  3. // fonctions utilisées pour la surcharge des BOUCLES
  4. // merci à Cedric cedric.morin@yterium.com pour le code initial (plugin acces_restreint)
  5. include_spip('base/db_mysql');
  6. include_spip('base/abstract_sql');
  7. include_spip('inc/rubriques');
  8. // inclure le fichier de redéfinitions des BOUCLES
  9. include_spip('inc/accesgroupes_boucles');
  10. // fct pour construire et renvoyer le tableau des rubriques à accès restreint dans la partie PUBLIQUE
  11. // boucler dans l'arborescence des rubriques en commençant par la racine (secteurs en 1ers)
  12. // pour remplir le tableau des rubriques restreintes en utilisant le principe d'héritage des restrictions
  13. function accesgroupes_liste_rubriques_restreintes($id_parent = 0){
  14. //echo '<br>debut accesgroupes_liste_rubriques_restreintes';
  15. $id_parent = intval($id_parent); // securite
  16. 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)
  17. if (!is_array($Trub_restreintes)) {
  18. $Trub_restreintes = array();
  19. // attaquer à la racine pour mettre tout de suite les éventuels secteurs restreints dans le tableau ce qui accélèrera la suite
  20. $sql1 = "SELECT id_rubrique, id_parent, id_secteur FROM spip_rubriques";
  21. $result1 = spip_query($sql1);
  22. //echo '<br>mysql_error $sql1 = '.mysql_error();
  23. while ($row1 = spip_fetch_array($result1)) {
  24. $rub_ec = $row1['id_rubrique'];
  25. $parent_ec = $row1['id_parent'];
  26. $sect_ec = $row1['id_secteur'];
  27. // 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 :)
  28. /* if (in_array($parent_ec, $Trub_restreintes) OR in_array($sect_ec, $Trub_restreintes)) {
  29. $Trub_restreintes[] = $rub_ec;
  30. }
  31. // sinon c'est plus couteux : il faut faire le test complet de la restriction de la rubrique pour espace public
  32. else { */
  33. if (accesgroupes_verif_acces($rub_ec, 'public') == 1 OR accesgroupes_verif_acces($rub_ec, 'public') == 2) {
  34. $Trub_restreintes[] = $rub_ec;
  35. }
  36. // }
  37. }
  38. }
  39. //echo '<br>tableau des rubriques = ';
  40. //print_r($Trub_restreintes);
  41. return $Trub_restreintes;
  42. }
  43. //fct pour renvoyer le tableau des articles appartenant aux rubriques à accès restreint
  44. function accesgroupes_liste_articles_restreints() {
  45. static $Tart_restreints; // ainsi la suite ne sera effectuée qu'une fois par hit
  46. if (!is_array($Tart_restreints)) {
  47. $Tart_restreints = array();
  48. $Trub_rest = accesgroupes_liste_rubriques_restreintes();
  49. $result3 = spip_query("SELECT id_article, id_rubrique FROM spip_articles");
  50. while ($row3 = spip_fetch_array($result3)) {
  51. if (in_array($row3['id_rubrique'], $Trub_rest)) {
  52. $Tart_restreints[] = $row3['id_article'];
  53. }
  54. }
  55. }
  56. return $Tart_restreints;
  57. }
  58. // fct pour renvoyer le tableau des brèves appartenant à des rubriques à accès restreint
  59. function accesgroupes_liste_breves_restreintes() {
  60. static $Tbrev_restreintes;
  61. if (!is_array($Tbrev_restreintes)) {
  62. $Tbrev_restreintes = array();
  63. $Trub_rest = accesgroupes_liste_rubriques_restreintes();
  64. $result4 = spip_query("SELECT id_breve, id_rubrique FROM spip_breves");
  65. while ($row4 = spip_fetch_array($result4)) {
  66. if (in_array($row4['id_rubrique'], $Trub_rest)) {
  67. $Tbrev_restreintes[] = $row4['id_breve'];
  68. }
  69. }
  70. }
  71. return $Tbrev_restreintes;
  72. }
  73. // fct pour renvoyer le tableau des forums liés à un élément appartenant à une rubrique restreinte
  74. // (puissant le Cedric pour maximiser ce qui est fait par la requete mySQL !)
  75. function accesgroupes_liste_forums_restreints() {
  76. static $Tforum_restreints;
  77. if (!is_array($Tforum_restreints)) {
  78. $Tforum_restreints = array();
  79. // rattaches aux rubriques
  80. $liste_rub = accesgroupes_liste_rubriques_restreintes();
  81. $where = calcul_mysql_in('id_rubrique', join(",",$liste_rub));
  82. // rattaches aux articles
  83. $liste_art = accesgroupes_liste_articles_restreints();
  84. $where .= " OR " . calcul_mysql_in('id_article', join(",",$liste_art));
  85. // rattaches aux breves
  86. $liste_breves = accesgroupes_liste_breves_restreintes();
  87. $where .= " OR " . calcul_mysql_in('id_breve', join(",",$liste_breves));
  88. $s = spip_query("SELECT id_forum FROM spip_forum WHERE $where");
  89. while ($row = spip_fetch_array($s)){
  90. $Tforum_restreints[] = $row['id_forum'];
  91. }
  92. }
  93. return $Tforum_restreints;
  94. }
  95. // fct pour renvoyer le tableau des signatures des articles appartenant à une rubrique restreinte
  96. function accesgroupes_liste_signatures_restreintes() {
  97. static $Tsignatures_restreintes;
  98. if (!is_array($Tsignatures_restreintes)){
  99. $Tsignatures_restreintes = array();
  100. // rattaches aux articles
  101. $liste_art = accesgroupes_liste_articles_restreints();
  102. $where = calcul_mysql_in('id_article', join(",",$liste_art));
  103. $s = spip_query("SELECT id_signature FROM spip_signatures WHERE $where");
  104. while ($row = spip_fetch_array($s)){
  105. $Tsignatures_restreintes[] = $row['id_signature'];
  106. }
  107. }
  108. return $Tsignatures_restreintes;
  109. }
  110. // fct pour renvoyer le tableau des documents liés à un élément appartenant à une rubrique restreinte
  111. // subtil la méthode de stocker les valeurs comme clés d'un tableau pour ne pas doublonner les valeurs
  112. // avec le petit array_keys() qui va bien pour récupérer le tableau de valeurs à la fin !
  113. function accesgroupes_liste_documents_restreints() {
  114. static $Tdocuments_restreints;
  115. if (!is_array($Tdocuments_restreints)){
  116. $Tdocuments_restreints = array();
  117. // rattaches aux articles
  118. $liste_art = accesgroupes_liste_articles_restreints();
  119. $where = calcul_mysql_in('id_article', join(",",$liste_art));
  120. $s = spip_query("SELECT id_document FROM spip_documents_articles WHERE $where");
  121. while ($row = spip_fetch_array($s)){
  122. $Tdocuments_restreints[$row['id_document']]=1;
  123. }
  124. // rattaches aux rubriques
  125. $liste_rub = accesgroupes_liste_rubriques_restreintes();
  126. $where = calcul_mysql_in('id_rubrique', join(",",$liste_rub));
  127. $s = spip_query("SELECT id_document FROM spip_documents_rubriques WHERE $where");
  128. while ($row = spip_fetch_array($s)){
  129. $Tdocuments_restreints[$row['id_document']]=1;
  130. }
  131. // rattaches aux breves
  132. $liste_breves = accesgroupes_liste_breves_restreintes();
  133. $where = calcul_mysql_in('id_breve', join(",",$liste_breves));
  134. $s = spip_query("SELECT id_document FROM spip_documents_breves WHERE $where");
  135. while ($row = spip_fetch_array($s)){
  136. $Tdocuments_restreints[$row['id_document']]=1;
  137. }
  138. // rattaches aux syndic
  139. /* $liste_syn = accesgroupes_liste_syndics_restreints();
  140. $where = calcul_mysql_in('id_syndic', join(",",$liste_syn));
  141. $s = spip_query("SELECT id_document FROM spip_documents_syndic WHERE $where");
  142. while ($row = spip_fetch_array($s)){
  143. $Tdocuments_restreints[$row['id_document']]=1;
  144. }
  145. */
  146. $Tdocuments_restreints = array_keys($Tdocuments_restreints);
  147. }
  148. return $Tdocuments_restreints;
  149. }
  150. // fct pour renvoyer le tableau des rubriques syndiquées appartenants à une rubrique restreinte
  151. function accesgroupes_liste_syndics_restreints() {
  152. static $Tsyndics_restreints;
  153. if (!is_array($Tsyndics_restreints)){
  154. $Tsyndics_restreints = array();
  155. $liste_rub = accesgroupes_liste_rubriques_restreintes();
  156. $where = calcul_mysql_in('id_rubrique', join(",",$liste_rub));
  157. $s = spip_query("SELECT id_syndic FROM spip_syndic WHERE $where");
  158. while ($row = spip_fetch_array($s)){
  159. $Tsyndics_restreints[] = $row['id_syndic'];
  160. }
  161. }
  162. return $Tsyndics_restreints;
  163. }
  164. // fct pour renvoyer le tableau des articles syndiqués appartenant à une rubrique restreinte
  165. function accesgroupes_liste_syndic_articles_restreints(){
  166. static $Tsyndic_articles_restreints;
  167. if (!is_array($Tsyndic_articles_restreints)){
  168. $Tsyndic_articles_restreints = array();
  169. $liste_syn = accesgroupes_liste_syndics_restreints();
  170. $where = calcul_mysql_in('id_syndic', join(",",$liste_syn));
  171. $s = spip_query("SELECT id_syndic_article FROM spip_syndic_articles WHERE $where");
  172. while ($row = spip_fetch_array($s)){
  173. $Tsyndic_articles_restreints[] = $row['id_syndic_article'];
  174. }
  175. }
  176. return $Tsyndic_articles_restreints;
  177. }
  178. // fonctions de filtrage : plus performant à priori : liste des éléments restreints uniquement
  179. // -> condition NOT IN
  180. // filtrage RUBRIQUES
  181. function accesgroupes_rubriques_accessibles_where($primary){
  182. $liste = accesgroupes_liste_rubriques_restreintes();
  183. return calcul_mysql_in($primary, join(",",$liste),"NOT");
  184. }
  185. // filtrage ARTICLES
  186. function accesgroupes_articles_accessibles_where($primary){
  187. $liste = accesgroupes_liste_articles_restreints();
  188. return calcul_mysql_in($primary, join(",",$liste),"NOT");
  189. }
  190. /* */
  191. // filtrage BREVES
  192. function accesgroupes_breves_accessibles_where($primary){
  193. $liste = accesgroupes_liste_breves_restreintes();
  194. return calcul_mysql_in($primary, join(",",$liste),"NOT");
  195. }
  196. // filtrage FORUMS
  197. function accesgroupes_forums_accessibles_where($primary){
  198. $liste = accesgroupes_liste_forums_restreints();
  199. return calcul_mysql_in($primary, join(",",$liste),"NOT");
  200. }
  201. // filtrage SIGNATURES
  202. function accesgroupes_signatures_accessibles_where($primary){
  203. $liste = accesgroupes_liste_signatures_restreintes();
  204. return calcul_mysql_in($primary, join(",",$liste),"NOT");
  205. }
  206. // filtrage DOCUMENTS
  207. function accesgroupes_documents_accessibles_where($primary){
  208. $liste = accesgroupes_liste_documents_restreints();
  209. return calcul_mysql_in($primary, join(",",$liste),"NOT");
  210. }
  211. // filtrage SYNDICS
  212. function accesgroupes_syndics_accessibles_where($primary){
  213. $liste = accesgroupes_liste_syndics_restreints();
  214. return calcul_mysql_in($primary, join(",",$liste),"NOT");
  215. }
  216. // filtrage ARTICLES SYNDIQUES
  217. function accesgroupes_syndic_articles_accessibles_where($primary){
  218. $liste = accesgroupes_liste_syndic_articles_restreints();
  219. return calcul_mysql_in($primary, join(",",$liste),"NOT");
  220. }
  221. // filtre de securisation des squelettes
  222. // utilise avec [(#REM|accesgroupes_securise_squelette)]
  223. // evite divulgation d'info si plugin desactive
  224. // par erreur fatale
  225. function accesgroupes_securise_squelette($letexte){
  226. return "!!! plantage du plugin accesgroupes !!!";
  227. }
  228. // filtre de test pour savoir si l'acces à un article est restreint
  229. function accesgroupes_article_restreint($id_article) {
  230. if (@in_array($id_article, accesgroupes_liste_articles_restreints())) {
  231. return true; //; <INCLURE{fond=accesgroupes_login}{skel=#SQUELETTE}> '#LOGIN_PUBLIC '
  232. }
  233. else {
  234. return false;
  235. }
  236. }
  237. // filtre de test pour savoir si l'acces à une rubrique est restreint
  238. function accesgroupes_rubrique_restreinte($id_rubrique) {
  239. if (@in_array($id_rubrique, accesgroupes_liste_rubriques_restreintes())) {
  240. return true; //;
  241. }
  242. else {
  243. return false;
  244. }
  245. }
  246. // filtre de test pour savoir si l'accès à une brève est restreint
  247. function accesgroupes_breve_restreinte($id_breve) {
  248. if (@in_array($id_breve, accesgroupes_liste_breves_restreintes())) {
  249. return ' #LOGIN_PUBLIC '; //true;
  250. }
  251. else {
  252. return false;
  253. }
  254. }
  255. ?>