mirror of
https://github.com/YunoHost-Apps/spip_ynh.git
synced 2024-09-03 20:25:59 +02:00
90 lines
2.9 KiB
PHP
90 lines
2.9 KiB
PHP
<?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");
|
|
}
|
|
}
|
|
?>
|