12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- <?php
- /***************************************************************************\
- * SPIP, Systeme de publication pour l'internet *
- * *
- * Copyright (c) 2001-2014 *
- * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
- * *
- * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
- * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
- \***************************************************************************/
- /**
- * @plugin Revisions pour SPIP
- * @license GPL
- * @package SPIP\Revisions\Genie
- */
- if (!defined('_ECRIRE_INC_VERSION')) return;
- include_spip('base/abstract_sql');
- /**
- * Tâche Cron d'optimisation des révisions
- *
- * @param int $last
- * Timestamp de la dernière exécution de cette tâche
- * @return int
- * Positif : la tâche a été effectuée
- */
- function genie_optimiser_revisions_dist($last) {
- optimiser_base_revisions();
- optimiser_tables_revision();
-
- return 1;
- }
- /**
- * Supprimer les révisions des objets disparus
- */
- function optimiser_base_revisions(){
- /**
- * On commence par récupérer la liste des types d'objet ayant au moins une révision
- */
- $objets_revises = sql_select('objet','spip_versions','id_version=1','objet');
-
- /**
- * Pour chaque objet, on va contruire un tableau des identifiants disparus
- * On supprimera ensuite les occurences dans spip_versions et spip_versions_fragments
- */
- while($objet = sql_fetch($objets_revises)){
- $in = array();
- $table = table_objet_sql($objet['objet']);
- $id_table_objet = id_table_objet($objet['objet']);
- $res = sql_select("A.id_objet AS id_objet, A.objet AS objet",
- "spip_versions AS A LEFT JOIN $table AS R
- ON R.$id_table_objet=A.id_objet AND A.objet=".sql_quote($objet['objet']),
- "R.$id_table_objet IS NULL AND A.objet=".sql_quote($objet['objet'])." AND A.id_objet > 0",
- "A.id_objet",
- "A.id_objet");
- while ($row = sql_fetch($res)) $in[$row['id_objet']]=true;
- sql_free($sel);
-
- /**
- * Si on a un array
- * On supprime toute occurence des objets disparus dans :
- * -* spip_versions
- * -* spip_versions_fragments
- */
- if ($in) {
- foreach(array('spip_versions','spip_versions_fragments') as $table){
- sql_delete($table, sql_in('id_objet',array_keys($in)) . " AND objet=".sql_quote($objet['objet']));
- }
- }
- }
- }
- /**
- * Optimisation des tables spip_versions et spip_versions_fragments
- */
- function optimiser_tables_revision(){
- foreach(array('spip_versions','spip_versions_fragments') as $table){
- spip_log("debut d'optimisation de la table $table");
- if (sql_optimize($table))
- spip_log("fin d'optimisation de la table $table");
- else
- spip_log("Pas d'optimiseur necessaire pour $table");
- }
- }
- ?>
|