/_plugins_/spip-listes/trunk/inc/spiplistes_listes_forcer_abonnement.php

https://bitbucket.org/pombredanne/spip-zone-treemap · PHP · 136 lines · 92 code · 17 blank · 27 comment · 19 complexity · e2d1085e595d47ca10c69a5d4aae1413 MD5 · raw file

  1. <?php
  2. /**
  3. * @version Original From SPIP-Listes-V :: Id: spiplistes_listes_forcer_abonnement.php paladin@quesaco.org
  4. * @package spiplistes
  5. */
  6. // $LastChangedRevision$
  7. // $LastChangedBy$
  8. // $LastChangedDate$
  9. if (!defined('_ECRIRE_INC_VERSION')) return;
  10. include_spip('inc/spiplistes_api_globales');
  11. /**
  12. * Permet de forcer l'abonnement a une liste
  13. * $statut = "tous" => '6forum' + '1comite' + '0minirezo'
  14. * si statut == 'aucun', desabonne tous
  15. * @global string $connect_id_auteur
  16. * @global boolean $connect_toutes_rubriques
  17. * @global int $connect_id_auteur
  18. * @param int $id_liste
  19. * @param string $statut
  20. * @param boolean $forcer_format_reception
  21. * @return boolean
  22. */
  23. function spiplistes_listes_forcer_abonnement ($id_liste, $statut, $forcer_format_reception) {
  24. global $connect_statut
  25. , $connect_toutes_rubriques
  26. , $connect_id_auteur
  27. ;
  28. $id_liste = intval($id_liste);
  29. if ($id_liste <= 0) {
  30. return(false);
  31. }
  32. $sql_where = '';
  33. if($statut=="tous") {
  34. $sql_where = " (statut=".sql_quote('6forum')." OR statut=".sql_quote('1comite')." OR statut=".sql_quote('0minirezo').")";
  35. }
  36. if($statut=="auteurs") {
  37. $sql_where = " (statut=".sql_quote('1comite')." OR statut=".sql_quote('0minirezo').")";
  38. }
  39. else if(in_array($statut, array('6forum', '1comite', '0minirezo'))) {
  40. $sql_where = " statut=".sql_quote($statut)."";
  41. }
  42. if(!empty($sql_where)) {
  43. // cherche les non-abonnes
  44. /*
  45. * "SELECT id_auteur FROM spip_auteurs WHERE $sql_where AND LENGTH(email) AND id_auteur NOT IN ($selection)"
  46. */
  47. $selection =
  48. sql_select("id_auteur", "spip_auteurs_listes", "id_liste=".sql_quote($id_liste),'','','','','',false);
  49. $sql_result = sql_select(
  50. 'id_auteur'
  51. , 'spip_auteurs'
  52. , array(
  53. $sql_where
  54. , "LENGTH(email)"
  55. , "id_auteur NOT IN ($selection)"
  56. )
  57. );
  58. if($sql_result) {
  59. $sql_values = $elargis = "";
  60. $nb = sql_count($sql_result);
  61. if($nb > 0) {
  62. while($row = sql_fetch($sql_result)) {
  63. $sql_values .=
  64. " (".sql_quote(intval($row['id_auteur']))
  65. . ", $id_liste, NOW()"
  66. // rajoute le format si force'
  67. . (($forcer_format_reception) ? "," . sql_quote($forcer_format_reception) : "")
  68. . "),";
  69. $elargis .= sql_quote(intval($row['id_auteur']));
  70. }
  71. if(!empty($sql_values)) {
  72. $sql_values = rtrim($sql_values, ",");
  73. $sql_result = sql_insert('spip_auteurs_listes'
  74. , "(id_auteur, id_liste, date_inscription" . ($forcer_format_reception ? ",format" : "") . ")"
  75. , $sql_values
  76. );
  77. if($sql_result === false) {
  78. spiplistes_sqlerror_log("listes_forcer_abonnement");
  79. return(false);
  80. }
  81. else {
  82. spiplistes_log($nb . " AUTEURS ($statut) ADDED TO LISTE #$id_liste BY ID_AUTEUR #$connect_id_auteur");
  83. if($forcer_format_reception) {
  84. // le format est demande' force'.
  85. // rajouter les abonnes manquants a spip_auteurs_elargis
  86. $sql_insert = "
  87. INSERT INTO spip_auteurs_elargis (id_auteur,`spip_listes_format`)
  88. SELECT l.id_auteur,l.format FROM spip_auteurs_listes AS l
  89. WHERE l.id_liste=" . sql_quote($id_liste) . "
  90. AND NOT EXISTS (SELECT NULL FROM spip_auteurs_elargis AS e
  91. WHERE l.id_auteur = e.id_auteur)
  92. ";
  93. if(sql_query($sql_insert) === false) {
  94. spiplistes_sqlerror_log("listes_forcer_abonnement");
  95. }
  96. else {
  97. spiplistes_log("RECEPT. FORMAT MODIFIED FOR ID_LISTE #$id_liste BY ID_AUTEUR #$connect_id_auteur");
  98. }
  99. }
  100. return($nb);
  101. }
  102. }
  103. }
  104. return(0); // pas d'abo a rajouter. Pas une erreur.
  105. }
  106. return(false);
  107. }
  108. else if($statut == "aucun") {
  109. // desabonner tous
  110. $result = 0;
  111. $sql_result = sql_delete('spip_auteurs_listes', "id_liste=".sql_quote($id_liste));
  112. if($sql_result) {
  113. spiplistes_log("auteurs (tous) removed from id_liste #$id_liste by id_auteur #$connect_id_auteur");
  114. $result++;
  115. return($result);
  116. }
  117. }
  118. return(false);
  119. } // end spiplistes_listes_forcer_abonnement()