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