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