mots.php 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2014 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined("_ECRIRE_INC_VERSION")) return;
  12. include_spip('inc/presentation');
  13. include_spip('inc/actions');
  14. include_spip('base/abstract_sql');
  15. function filtre_objets_associes_mot_dist($id_mot,$id_groupe) {
  16. static $occurrences = array();
  17. // calculer tous les liens du groupe d'un coup
  18. if (!isset ($occurrences[$id_groupe]))
  19. $occurrences[$id_groupe] = calculer_utilisations_mots($id_groupe);
  20. $associes = array();
  21. $tables = lister_tables_objets_sql();
  22. foreach ($tables as $table_objet_sql=>$infos) {
  23. $nb = (isset($occurrences[$id_groupe][$table_objet_sql][$id_mot]) ? $occurrences[$id_groupe][$table_objet_sql][$id_mot] : 0);
  24. if ($nb)
  25. $associes[] = objet_afficher_nb($nb,$infos['type']);
  26. }
  27. $associes = pipeline('afficher_nombre_objets_associes_a',array('args'=>array('objet'=>'mot','id_objet'=>$id_mot),'data'=>$associes));
  28. return $associes;
  29. }
  30. /**
  31. * Calculer les nombres d'elements (articles, etc.) lies a chaque mot
  32. *
  33. * @param int $id_groupe
  34. * @return array
  35. */
  36. function calculer_utilisations_mots($id_groupe)
  37. {
  38. $retour = array();
  39. $objets = sql_allfetsel('DISTINCT objet', array('spip_mots_liens AS L', 'spip_mots AS M'), array('L.id_mot=M.id_mot', 'M.id_groupe='.intval($id_groupe)));
  40. foreach($objets as $o) {
  41. $objet=$o['objet'];
  42. $_id_objet = id_table_objet($objet);
  43. $table_objet_sql = table_objet_sql($objet);
  44. $infos = lister_tables_objets_sql($table_objet_sql);
  45. if (isset($infos['field']) AND $infos['field']){
  46. // uniquement certains statut d'objet,
  47. // et uniquement si la table dispose du champ statut.
  48. $statuts = "";
  49. if (isset($infos['field']['statut']) OR isset($infos['statut'][0]['champ'])) {
  50. // on s'approche au mieux de la declaration de l'objet.
  51. // il faudrait ameliorer ce point.
  52. $c_statut = isset($infos['statut'][0]['champ']) ? $infos['statut'][0]['champ'] : 'statut';
  53. // bricoler les statuts d'apres la declaration de l'objet (champ previsu a defaut de mieux)
  54. if (array_key_exists('previsu', $infos['statut'][0]) AND strlen($infos['statut'][0]['previsu'])>1) {
  55. $str_statuts = $infos['statut'][0]['previsu'];
  56. if ($GLOBALS['connect_statut'] !="0minirezo")
  57. $str_statuts = str_replace('prepa','',$str_statuts);
  58. $not = (substr($str_statuts, 0, 1) == '!'? 'NOT' : '');
  59. $str_statuts = str_replace('!','',$str_statuts);
  60. $Tstatuts = array_filter(explode(',', $str_statuts));
  61. $statuts = " AND " . sql_in("O.$c_statut", $Tstatuts, $not);
  62. }
  63. // objets sans champ previsu ou avec un previsu == '!' (par ex les rubriques)
  64. else
  65. $statuts = " AND " . sql_in("O.$c_statut", ($GLOBALS['connect_statut'] =="0minirezo") ? array('prepa','prop','publie') : array('prop','publie'));
  66. }
  67. $res = sql_allfetsel(
  68. "COUNT(*) AS cnt, L.id_mot",
  69. "spip_mots_liens AS L
  70. LEFT JOIN spip_mots AS M ON L.id_mot=M.id_mot
  71. AND L.objet=" . sql_quote($objet) . "
  72. LEFT JOIN " . $table_objet_sql . " AS O ON L.id_objet=O.$_id_objet" ,
  73. "M.id_groupe=$id_groupe$statuts",
  74. "L.id_mot");
  75. foreach($res as $row) {
  76. $retour[$table_objet_sql][$row['id_mot']] = $row['cnt'];
  77. }
  78. }
  79. }
  80. return $retour;
  81. }
  82. ?>