/opac_css/classes/tags.class.php

https://github.com/fatjonakroni/pmb-albania · PHP · 140 lines · 108 code · 15 blank · 17 comment · 22 complexity · 8ad0ae889e3b8ca86905713d13b1c154 MD5 · raw file

  1. <?php
  2. // +-------------------------------------------------+
  3. // © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
  4. // © 2006 mental works / www.mental-works.com contact@mental-works.com
  5. // repris et corrigé par PMB Services
  6. // +-------------------------------------------------+
  7. // $Id: tags.class.php,v 1.10 2009-06-17 12:50:08 kantin Exp $
  8. // définition de la classe d'affichage des 'tags'
  9. class tags {
  10. // ---------------------------------------------------------------
  11. // propriétés de la classe
  12. // ---------------------------------------------------------------
  13. // ---------------------------------------------------------------
  14. // constructeur
  15. // ---------------------------------------------------------------
  16. function tags() {
  17. }
  18. function listeAlphabetique(){
  19. //renvoie la liste des tags existants
  20. global $dbh;
  21. global $pmb_keyword_sep;
  22. $requete = "select index_l from notices where index_l is not null and index_l!=''";
  23. $arr=array();
  24. $r = mysql_query($requete, $dbh);
  25. if (mysql_numrows($r)){
  26. while ($loc = mysql_fetch_object($r)) {
  27. $liste = split($pmb_keyword_sep,$loc->index_l);
  28. for ($i=0;$i<count($liste);$i++){
  29. $index=trim($liste[$i]);
  30. if ($index) $arr[strtolower($index)]++;
  31. }
  32. }
  33. }
  34. global $opac_allow_tags_search_min_occ ;
  35. if ($opac_allow_tags_search_min_occ>1) {
  36. $arr_purge=array();
  37. foreach ($arr as $key => $value) {
  38. if ($value>=$opac_allow_tags_search_min_occ) $arr_purge[$key]=$value ;
  39. }
  40. $arr=$arr_purge;
  41. }
  42. ksort($arr);
  43. $count=0;
  44. $max=0;
  45. //les seuils permettent de séparer les valeurs en 4 groupes pour afficher les tags dans 4 tailles différentes en fct de leur fréquence
  46. foreach ($arr as $key => $value){
  47. $count++;
  48. $somme+=$value;
  49. if ($max<$value) $max=$value;
  50. }
  51. $seuil2 = array_sum($arr)/count($arr);//moyenne des valeurs
  52. $seuil1 = $seuil2/2;
  53. $seuil3 = $seuil2+($max-$seuil2)/2;//mi chemin en la valeur max et la moyenne
  54. $lettre="a";
  55. $reponse="";
  56. foreach ($arr as $key => $value) {
  57. if ($key{0}!=$lettre) {
  58. $lettre=$key{0};
  59. $reponse.="<br /><br />";
  60. } else $reponse.=", ";
  61. if ($value<$seuil1) $reponse.="<a href='./index.php?lvl=more_results&mode=keyword&user_query=".urlencode($key)."&tags=ok' class='TagF1'>$key</a> ";
  62. elseif ($value<$seuil2) $reponse.="<a href='./index.php?lvl=more_results&mode=keyword&user_query=".urlencode($key)."&tags=ok' class='TagF2'>$key</a> ";
  63. elseif ($value<$seuil3) $reponse.="<a href='./index.php?lvl=more_results&mode=keyword&user_query=".urlencode($key)."&tags=ok' class='TagF3'>$key</a> ";
  64. else $reponse.="<a href='./index.php?lvl=more_results&mode=keyword&user_query=".urlencode($key)."&tags=ok' class='TagF4'>$key</a> ";
  65. }
  66. return $reponse;
  67. }
  68. function bold($str,$needle) {
  69. //cherche si un des mots de $needle existe dans $str et le met en gras
  70. $str_propre=strtolower(convert_diacrit($str));
  71. $mot=strtolower(convert_diacrit($needle));
  72. if (!(($pos=strpos($str_propre,$mot))===false)) {
  73. $size= strlen("<span class='tagQuery'>") + strlen($needle)+$pos ;
  74. $str=substr_replace($str, "<span class='tagQuery'>", $pos, 0);
  75. $str=substr_replace($str, "</span>", $size,0);
  76. }
  77. return $str;
  78. }
  79. function chercheTag($user_query){
  80. global $dbh;
  81. global $msg;
  82. global $pmb_keyword_sep ;
  83. $user_query=trim($user_query);
  84. $requete = "select index_l from notices where index_l like '%$user_query%'";
  85. $user_query=stripslashes($user_query);
  86. $arr=array();
  87. $r = mysql_query($requete,$dbh);
  88. while ($loc = mysql_fetch_object($r)) {
  89. $liste = split($pmb_keyword_sep,$loc->index_l);
  90. for ($i=0;$i<count($liste);$i++){
  91. $index=trim($liste[$i]);
  92. if ($index) $arr[$index]++;
  93. }
  94. }
  95. ksort($arr);
  96. //les seuils permettent de séparer les valeurs en 4 groupes pour afficher les tags dans 4 tailles différentes en fct de leur fréquence
  97. $count=0;
  98. $max=0;
  99. foreach ($arr as $key => $value){
  100. $texte=$this->bold($key,$user_query);
  101. if (!(strpos($texte,"</span>")===false)) {
  102. $count++;
  103. $somme+=$value;
  104. if ($max<$value) $max=$value;
  105. }
  106. }
  107. $seuil2 = $somme/$count;//moyenne des valeurs
  108. $seuil1 = $seuil2/2;
  109. $seuil3 = $seuil2+($max-$seuil2)/2;//mi chemin en la valeur max et la moyenne
  110. $reponse="";
  111. foreach ($arr as $key => $value){
  112. $texte=$this->bold($key,$user_query);
  113. if ($reponse) $reponse.=", ";
  114. if (!(strpos($texte,"</span>")===false)) {
  115. if ($value<$seuil1) $reponse.="<a href='index.php?lvl=more_results&mode=keyword&user_query=".urlencode($key)."&tags=ok' class='TagF1'>$texte</a> ";
  116. elseif ($value<$seuil2) $reponse.="<a href='index.php?lvl=more_results&mode=keyword&user_query=".urlencode($key)."&tags=ok' class='TagF2'>$texte</a> ";
  117. elseif ($value<$seuil3) $reponse.="<a href='index.php?lvl=more_results&mode=keyword&user_query=".urlencode($key)."&tags=ok' class='TagF3'>$texte</a> ";
  118. else $reponse.="<a href='index.php?lvl=more_results&mode=keyword&user_query=".urlencode($key)."&tags=ok' class='TagF4'>$texte</a> ";
  119. }
  120. }
  121. if (count($arr)==0) $reponse=$msg["no_result"];
  122. return $reponse;
  123. }
  124. }
  125. ?>