source: spip-zone/_core_/plugins/revisions/genie/optimiser_revisions.php @ 92827

Last change on this file since 92827 was 92827, checked in by marcimat@…, 4 years ago

Notice PHP en moins : $sel n'existait pas.

File size: 2.9 KB
Line 
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
18if (!defined('_ECRIRE_INC_VERSION')) return;
19
20include_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 */
30function 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 */
41function 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
62                while ($row = sql_fetch($res)) {
63                        $in[$row['id_objet']] = true;
64                }
65                sql_free($res);
66
67                /**
68                 * Si on a un array
69                 * On supprime toute occurence des objets disparus dans :
70                 * -* spip_versions
71                 * -* spip_versions_fragments
72                 */
73                if ($in) {
74                        foreach(array('spip_versions','spip_versions_fragments') as $table){
75                                sql_delete($table,  sql_in('id_objet',array_keys($in)) . " AND objet=".sql_quote($objet['objet']));
76                        }
77                }
78        }
79}
80
81/**
82 * Optimisation des tables spip_versions et spip_versions_fragments
83 */
84function optimiser_tables_revision(){
85        foreach(array('spip_versions','spip_versions_fragments') as $table){
86                spip_log("debut d'optimisation de la table $table");
87                if (sql_optimize($table))
88                        spip_log("fin d'optimisation de la table $table");
89                else
90                        spip_log("Pas d'optimiseur necessaire pour $table");
91        }
92}
93?>
Note: See TracBrowser for help on using the repository browser.