PageRenderTime 117ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/_plugins_/bigbrother/trunk/inc/bigbrother.php

https://bitbucket.org/pombredanne/spip-zone-treemap
PHP | 176 lines | 106 code | 28 blank | 42 comment | 26 complexity | 71fa1604722cf7d7a0be76d024dcffd4 MD5 | raw file
  1. <?php
  2. #---------------------------------------------------#
  3. # Plugin : Big Brother #
  4. # Auteur : RastaPopoulos #
  5. # Licence : GPL #
  6. #------------------------------------------------- -#
  7. if (!defined("_ECRIRE_INC_VERSION")) return;
  8. include_spip('inc/session');
  9. include_spip('base/abstract_sql');
  10. // Met à jour la session et enregistre dans la base
  11. function bigbrother_enregistrer_la_visite_du_site(){
  12. if(($time < ($GLOBALS['visiteur_session']['date_visite'])) OR !($GLOBALS['visiteur_session']['date_visite'])){
  13. session_set('date_visite', time());
  14. if($GLOBALS['visiteur_session']['id_auteur']){
  15. sql_insertq(
  16. "spip_visites_auteurs",
  17. array(
  18. 'date' => date('Y-m-d H:i:s', session_get('date_visite')),
  19. 'id_auteur' => $GLOBALS['visiteur_session']['id_auteur']
  20. )
  21. );
  22. }
  23. $journal = charger_fonction('journal','inc');
  24. $qui = $GLOBALS['visiteur_session']['nom'] ? $GLOBALS['visiteur_session']['nom'] : $GLOBALS['ip'];
  25. $qui_ou_ip = $GLOBALS['visiteur_session']['id_auteur'] ? $GLOBALS['visiteur_session']['id_auteur'] : $GLOBALS['ip'];
  26. $journal(
  27. _T('bigbrother:action_visite',array('qui' => $qui)),
  28. array('qui' => $qui_ou_ip,'faire' => 'visite','date' => date('Y-m-d H:i:s', session_get('date_visite')))
  29. );
  30. }
  31. }
  32. // Teste s'il faut enregistrer la visite ou pas
  33. function bigbrother_tester_la_visite_du_site(){
  34. global $visiteur_session;
  35. /**
  36. * Ne pas prendre en compte les bots
  37. */
  38. if (_IS_BOT)
  39. return;
  40. // Ne pas tenir compte des tentatives de spam des forums
  41. if ($_SERVER['REQUEST_METHOD'] !== 'GET'
  42. OR $_GET['page'] == 'forum')
  43. return;
  44. if (isset($_SERVER['HTTP_REFERER'])) $referer = $_SERVER['HTTP_REFERER'];
  45. else if (isset($GLOBALS["HTTP_SERVER_VARS"]["HTTP_REFERER"])) $referer = $GLOBALS["HTTP_SERVER_VARS"]["HTTP_REFERER"];
  46. // On fait seulement si qqn est connecté
  47. if(($visiteur_session['id_auteur'] > 0) OR ($ouvert = (lire_config('bigbrother/enregistrer_connexion_anonyme') == 'oui'))){
  48. include_spip('inc/filtres');
  49. $time = 0;
  50. if($ouvert && !intval($visiteur_session['id_auteur'])){
  51. $time_sql = sql_getfetsel('date','spip_journal','id_auteur='.sql_quote($GLOBALS['ip']));
  52. if(is_array(recup_date($time_sql))){
  53. list($annee, $mois, $jour, $heures, $minutes, $secondes) = recup_date($time_sql);
  54. $time = mktime($heures, $minutes, $secondes, $mois, $jour, $annee);
  55. }
  56. }
  57. // Si la "connexion" n'existe pas on la crée et on enregistre
  58. if(!$visiteur_session['date_visite']){
  59. /**
  60. * Cas des crons qui ne gardent pas de cookies donc pas de session
  61. */
  62. if($ouvert && !intval($visiteur_session['id_auteur'])){
  63. if($time < (time()-(30*60))){
  64. bigbrother_enregistrer_la_visite_du_site();
  65. }
  66. }else{
  67. bigbrother_enregistrer_la_visite_du_site();
  68. }
  69. }
  70. // Sinon si la dernière visite est plus vieille que 30min
  71. elseif ((time() - $visiteur_session['date_visite']) > (30*60)){
  72. // On met à jour et en enregistre
  73. bigbrother_enregistrer_la_visite_du_site();
  74. }
  75. // Sinon on ne met que à jour la session
  76. elseif((time() - $visiteur_session['date_visite']) > 5){
  77. session_set('date_visite', time());
  78. }
  79. }
  80. }
  81. /**
  82. * Enregistre l'entrée sur un objet
  83. *
  84. * Nécessite le placement de la balise #ENREGISTRER_VISITE_AUTEUR
  85. * dans la boucle de l'objet
  86. *
  87. * @param $objet string Le type d'objet : article, rubrique, mot
  88. * @param $id_objet int L'identifiant numérique de l'objet
  89. * @param $id_auteur int L'identifiant numérique de l'auteur en cours
  90. */
  91. function bigbrother_enregistrer_entree($objet, $id_objet, $id_auteur){
  92. $date_debut = date('Y-m-d H:i:s', time());
  93. if($objet == 'article' && intval($id_auteur)){
  94. sql_insertq(
  95. "spip_visites_articles_auteurs",
  96. array(
  97. 'id_article' => $id_objet,
  98. 'id_auteur' => $id_auteur,
  99. 'date_debut' => $date_debut
  100. )
  101. );
  102. }
  103. $journal = charger_fonction('journal','inc');
  104. $qui = $GLOBALS['visiteur_session']['nom'] ? $GLOBALS['visiteur_session']['nom'] : $GLOBALS['ip'];
  105. $qui_ou_ip = $GLOBALS['visiteur_session']['id_auteur'] ? $GLOBALS['visiteur_session']['id_auteur'] : $GLOBALS['ip'];
  106. $infos = array();
  107. $infos['lang'] = $GLOBALS['contexte']['lang'];
  108. $journal(
  109. _T('bigbrother:action_entree_objet',array('qui' => $qui, 'type' => $objet, 'id' => $id_objet)),
  110. array('qui' => $qui_ou_ip,'faire' => 'visite_entree','quoi' => $objet,'date' => $date_debut,'id' => $id_objet,'infos' => $infos)
  111. );
  112. return $date_debut;
  113. }
  114. /**
  115. * Enregistre la sortie d'un objet
  116. *
  117. * Nécessite le placement de la balise #ENREGISTRER_VISITE_AUTEUR
  118. * dans la boucle de l'objet
  119. *
  120. * Cette fonction est appelé en ajax à la sortie de page
  121. *
  122. * @param $id_objet int L'identifiant numérique de l'objet
  123. * @param $objet string Le type d'objet : article, rubrique, mot
  124. * @param $id_auteur int L'identifiant numérique de l'auteur en cours
  125. * @param $date_debut datetime La date de la visite à terminer
  126. */
  127. function bigbrother_enregistrer_sortie($id_objet,$objet, $id_auteur, $date_debut){
  128. if(!intval($id_objet) OR (!intval($id_auteur) && (lire_config('bigbrother/enregistrer_connexion_anonyme') != 'oui')))
  129. return false;
  130. $date_fin = date('Y-m-d H:i:s', time());
  131. if($objet == 'article'){
  132. sql_updateq(
  133. "spip_visites_articles_auteurs",
  134. array(
  135. 'date_fin' => $date_fin
  136. ),
  137. "id_article=".intval($id_objet)." AND id_auteur=".intval($id_auteur)." AND date_debut=".sql_quote($date_debut)
  138. );
  139. }
  140. $journal = charger_fonction('journal','inc');
  141. $qui = $GLOBALS['visiteur_session']['nom'] ? $GLOBALS['visiteur_session']['nom'] : $GLOBALS['ip'];
  142. $qui_ou_ip = $GLOBALS['visiteur_session']['id_auteur'] ? $GLOBALS['visiteur_session']['id_auteur'] : $GLOBALS['ip'];
  143. $journal(
  144. _T('bigbrother:action_sortie_objet',array('qui' => $qui, 'type' => $objet, 'id' => $id_objet)),
  145. array('qui' => $qui_ou_ip,'faire' => 'visite_entree','quoi' => $objet,'date_debut' => $date_debut,'date_fin' => $date_fin,'id' => $id_objet)
  146. );
  147. }
  148. ?>