optimiser_revisions.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. /**
  12. * @plugin Revisions pour SPIP
  13. * @license GPL
  14. * @package SPIP\Revisions\Genie
  15. */
  16. if (!defined('_ECRIRE_INC_VERSION')) return;
  17. include_spip('base/abstract_sql');
  18. /**
  19. * Tâche Cron d'optimisation des révisions
  20. *
  21. * @param int $last
  22. * Timestamp de la dernière exécution de cette tâche
  23. * @return int
  24. * Positif : la tâche a été effectuée
  25. */
  26. function genie_optimiser_revisions_dist($last) {
  27. optimiser_base_revisions();
  28. optimiser_tables_revision();
  29. return 1;
  30. }
  31. /**
  32. * Supprimer les révisions des objets disparus
  33. */
  34. function optimiser_base_revisions(){
  35. /**
  36. * On commence par récupérer la liste des types d'objet ayant au moins une révision
  37. */
  38. $objets_revises = sql_select('objet','spip_versions','id_version=1','objet');
  39. /**
  40. * Pour chaque objet, on va contruire un tableau des identifiants disparus
  41. * On supprimera ensuite les occurences dans spip_versions et spip_versions_fragments
  42. */
  43. while($objet = sql_fetch($objets_revises)){
  44. $in = array();
  45. $table = table_objet_sql($objet['objet']);
  46. $id_table_objet = id_table_objet($objet['objet']);
  47. $res = sql_select("A.id_objet AS id_objet, A.objet AS objet",
  48. "spip_versions AS A LEFT JOIN $table AS R
  49. ON R.$id_table_objet=A.id_objet AND A.objet=".sql_quote($objet['objet']),
  50. "R.$id_table_objet IS NULL AND A.objet=".sql_quote($objet['objet'])." AND A.id_objet > 0",
  51. "A.id_objet",
  52. "A.id_objet");
  53. while ($row = sql_fetch($res)) $in[$row['id_objet']]=true;
  54. sql_free($sel);
  55. /**
  56. * Si on a un array
  57. * On supprime toute occurence des objets disparus dans :
  58. * -* spip_versions
  59. * -* spip_versions_fragments
  60. */
  61. if ($in) {
  62. foreach(array('spip_versions','spip_versions_fragments') as $table){
  63. sql_delete($table, sql_in('id_objet',array_keys($in)) . " AND objet=".sql_quote($objet['objet']));
  64. }
  65. }
  66. }
  67. }
  68. /**
  69. * Optimisation des tables spip_versions et spip_versions_fragments
  70. */
  71. function optimiser_tables_revision(){
  72. foreach(array('spip_versions','spip_versions_fragments') as $table){
  73. spip_log("debut d'optimisation de la table $table");
  74. if (sql_optimize($table))
  75. spip_log("fin d'optimisation de la table $table");
  76. else
  77. spip_log("Pas d'optimiseur necessaire pour $table");
  78. }
  79. }
  80. ?>