You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

319 lines
8.4 KiB

11 years ago
11 years ago
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Système de publication pour l'internet *
  4. * *
  5. * Copyright © avec tendresse depuis 2001 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribué sous licence GNU/GPL. *
  9. * Pour plus de détails voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined('_ECRIRE_INC_VERSION')) {
  12. return;
  13. }
  14. /**
  15. * Ajouter les sites et syndication a valider sur les rubriques
  16. *
  17. * @param array $flux
  18. * @return array
  19. */
  20. function sites_rubrique_encours($flux) {
  21. if ($flux['args']['type'] == 'rubrique') {
  22. $lister_objets = charger_fonction('lister_objets', 'inc');
  23. $id_rubrique = $flux['args']['id_objet'];
  24. //
  25. // Les sites references a valider
  26. //
  27. if ($GLOBALS['meta']['activer_sites'] != 'non') {
  28. $flux['data'] .= $lister_objets('sites', array(
  29. 'titre' => _T('sites:info_site_valider'),
  30. 'statut' => 'prop',
  31. 'id_rubrique' => $id_rubrique,
  32. 'par' => 'nom_site'
  33. ));
  34. }
  35. //
  36. // Les sites a probleme
  37. //
  38. if ($GLOBALS['meta']['activer_sites'] != 'non'
  39. and autoriser('publierdans', 'rubrique', $id_rubrique)
  40. ) {
  41. $flux['data'] .= $lister_objets('sites', array(
  42. 'titre' => _T('sites:avis_sites_syndiques_probleme'),
  43. 'statut' => 'publie',
  44. 'syndication' => array('off', 'sus'),
  45. 'id_rubrique' => $id_rubrique,
  46. 'par' => 'nom_site'
  47. ));
  48. }
  49. // Les articles syndiques en attente de validation
  50. if ($id_rubrique == 0
  51. and autoriser('publierdans', 'rubrique', $id_rubrique)
  52. ) {
  53. $cpt = sql_countsel("spip_syndic_articles", "statut='dispo'");
  54. if ($cpt) {
  55. $flux['data'] .= "<br /><small><a href='" .
  56. generer_url_ecrire("sites") .
  57. "' style='color: black;'>" .
  58. $cpt .
  59. " " .
  60. _T('sites:info_liens_syndiques_1') .
  61. " " .
  62. _T('sites:info_liens_syndiques_2') .
  63. "</a></small>";
  64. }
  65. }
  66. }
  67. return $flux;
  68. }
  69. /**
  70. * Configuration des contenus
  71. *
  72. * @param array $flux
  73. * @return array
  74. */
  75. function sites_affiche_milieu($flux) {
  76. if ($flux["args"]["exec"] == "configurer_contenu") {
  77. $flux["data"] .= recuperer_fond('prive/squelettes/inclure/configurer', array('configurer' => 'configurer_sites'));
  78. }
  79. return $flux;
  80. }
  81. /**
  82. * Ajouter les sites et syndication a valider sur la page d'accueil
  83. *
  84. * @param array $flux
  85. * @return array
  86. */
  87. function sites_accueil_encours($flux) {
  88. $lister_objets = charger_fonction('lister_objets', 'inc');
  89. //
  90. // Les sites references a valider
  91. //
  92. if ($GLOBALS['meta']['activer_sites'] != 'non') {
  93. $flux .= $lister_objets('sites', array(
  94. 'titre' => afficher_plus_info(generer_url_ecrire('sites')) . _T('sites:info_site_valider'),
  95. 'statut' => 'prop',
  96. 'par' => 'nom_site'
  97. ));
  98. }
  99. if ($GLOBALS['visiteur_session']['statut'] == '0minirezo') {
  100. //
  101. // Les sites a probleme
  102. //
  103. if ($GLOBALS['meta']['activer_sites'] != 'non') {
  104. $flux .= $lister_objets('sites', array(
  105. 'titre' => afficher_plus_info(generer_url_ecrire('sites')) . _T('sites:avis_sites_syndiques_probleme'),
  106. 'statut' => 'publie',
  107. 'syndication' => array('off', 'sus'),
  108. 'par' => 'nom_site'
  109. ));
  110. }
  111. // Les articles syndiques en attente de validation
  112. $cpt = sql_countsel("spip_syndic_articles", "statut='dispo'");
  113. if ($cpt) {
  114. $flux .= "\n<br /><small><a href='"
  115. . generer_url_ecrire("sites", "")
  116. . "' style='color: black;'>"
  117. . $cpt
  118. . " "
  119. . _T('sites:info_liens_syndiques_1')
  120. . " "
  121. . _T('sites:info_liens_syndiques_2')
  122. . "</a></small>";
  123. }
  124. }
  125. return $flux;
  126. }
  127. /**
  128. * Ajouter les sites references sur les vues de rubriques
  129. *
  130. * @param array $flux
  131. * @return array
  132. */
  133. function sites_affiche_enfants($flux) {
  134. if (isset($flux['args']['exec'])
  135. and $e = trouver_objet_exec($flux['args']['exec'])
  136. and $e['type'] == 'rubrique'
  137. and $e['edition'] == false
  138. ) {
  139. $id_rubrique = $flux['args']['id_rubrique'];
  140. if ($GLOBALS['meta']["activer_sites"] == 'oui') {
  141. $lister_objets = charger_fonction('lister_objets', 'inc');
  142. $bouton_sites = '';
  143. if (autoriser('creersitedans', 'rubrique', $id_rubrique)) {
  144. $bouton_sites .= icone_verticale(_T('sites:info_sites_referencer'),
  145. generer_url_ecrire('site_edit', "id_rubrique=$id_rubrique"), "site-24.png", "new", 'right')
  146. . "<br class='nettoyeur' />";
  147. }
  148. $flux['data'] .= $lister_objets('sites', array(
  149. 'titre' => _T('sites:titre_sites_references_rubrique'),
  150. 'where' => "statut!='refuse' AND statut != 'prop' AND syndication NOT IN ('off','sus')",
  151. 'id_rubrique' => $id_rubrique,
  152. 'par' => 'nom_site'
  153. ));
  154. $flux['data'] .= $bouton_sites;
  155. }
  156. }
  157. return $flux;
  158. }
  159. /**
  160. * Definir les meta de configuration liee aux syndications et sites
  161. *
  162. * @param array $metas
  163. * @return array
  164. */
  165. function sites_configurer_liste_metas($metas) {
  166. $metas['activer_sites'] = 'non';
  167. $metas['proposer_sites'] = 0;
  168. $metas['activer_syndic'] = 'oui';
  169. $metas['moderation_sites'] = 'non';
  170. return $metas;
  171. }
  172. /**
  173. * Taches periodiques de syndication
  174. *
  175. * @param array $taches_generales
  176. * @return array
  177. */
  178. function sites_taches_generales_cron($taches_generales) {
  179. if (isset($GLOBALS['meta']["activer_syndic"])
  180. and $GLOBALS['meta']["activer_syndic"] == "oui"
  181. and isset($GLOBALS['meta']["activer_sites"])
  182. and $GLOBALS['meta']["activer_sites"] == "oui"
  183. ) {
  184. $taches_generales['syndic'] = 90;
  185. }
  186. return $taches_generales;
  187. }
  188. /**
  189. * Optimiser la base de donnee en supprimant les liens orphelins
  190. *
  191. * @param array $flux
  192. * @return array
  193. */
  194. function sites_optimiser_base_disparus($flux) {
  195. $n = &$flux['data'];
  196. $mydate = $flux['args']['date'];
  197. sql_delete("spip_syndic", "maj<" . sql_quote($mydate) . " AND statut=" . sql_quote("refuse"));
  198. # les articles syndiques appartenant a des sites effaces
  199. $res = sql_select("S.id_syndic AS id",
  200. "spip_syndic_articles AS S
  201. LEFT JOIN spip_syndic AS syndic
  202. ON S.id_syndic=syndic.id_syndic",
  203. "syndic.id_syndic IS NULL");
  204. $n += optimiser_sansref('spip_syndic_articles', 'id_syndic', $res);
  205. return $flux;
  206. }
  207. /**
  208. * Publier et dater les rubriques qui ont un site publie
  209. *
  210. * @param array $flux
  211. * @return array
  212. */
  213. function sites_calculer_rubriques($flux) {
  214. $r = sql_select(
  215. "R.id_rubrique AS id, max(A.date) AS date_h",
  216. "spip_rubriques AS R JOIN spip_syndic AS A ON R.id_rubrique = A.id_rubrique",
  217. "A.date>R.date_tmp AND A.statut='publie' ", "R.id_rubrique");
  218. while ($row = sql_fetch($r)) {
  219. sql_updateq('spip_rubriques', array('statut_tmp' => 'publie', 'date_tmp' => $row['date_h']),
  220. "id_rubrique=" . $row['id']);
  221. }
  222. return $flux;
  223. }
  224. /**
  225. * Compter les sites dans une rubrique
  226. *
  227. * @param array $flux
  228. * @return array
  229. */
  230. function sites_objet_compte_enfants($flux) {
  231. if ($flux['args']['objet'] == 'rubrique'
  232. and $id_rubrique = intval($flux['args']['id_objet'])
  233. ) {
  234. // juste les publies ?
  235. if (array_key_exists('statut', $flux['args']) and ($flux['args']['statut'] == 'publie')) {
  236. $flux['data']['site'] = sql_countsel('spip_syndic',
  237. "id_rubrique=" . intval($id_rubrique) . " AND (statut='publie')");
  238. } else {
  239. $flux['data']['site'] = sql_countsel('spip_syndic',
  240. "id_rubrique=" . intval($id_rubrique) . " AND (statut='publie' OR statut='prop')");
  241. }
  242. }
  243. return $flux;
  244. }
  245. function sites_trig_propager_les_secteurs($flux) {
  246. // reparer les sites
  247. $r = sql_select("A.id_syndic AS id, R.id_secteur AS secteur", "spip_syndic AS A, spip_rubriques AS R",
  248. "A.id_rubrique = R.id_rubrique AND A.id_secteur <> R.id_secteur");
  249. while ($row = sql_fetch($r)) {
  250. sql_update("spip_syndic", array("id_secteur" => $row['secteur']), "id_syndic=" . $row['id']);
  251. }
  252. return $flux;
  253. }
  254. /**
  255. * Afficher le nombre de sites dans chaque rubrique
  256. *
  257. * @param array $flux
  258. * @return array
  259. */
  260. function sites_boite_infos($flux) {
  261. if ($flux['args']['type'] == 'rubrique'
  262. and $id_rubrique = $flux['args']['id']
  263. ) {
  264. if ($nb = sql_countsel('spip_syndic', "statut='publie' AND id_rubrique=" . intval($id_rubrique))) {
  265. $nb = "<div>" . singulier_ou_pluriel($nb, "sites:info_1_site", "sites:info_nb_sites") . "</div>";
  266. if ($p = strpos($flux['data'], "<!--nb_elements-->")) {
  267. $flux['data'] = substr_replace($flux['data'], $nb, $p, 0);
  268. }
  269. }
  270. }
  271. return $flux;
  272. }