/**
 * Vérifier tous les fichiers brisés
 *
 * @param int|null $id_document
 *     Indique le document cible de l'action, sinon il sera
 *     obtenu par la clé d'action sécurisée.
 */
function action_verifier_documents_liens_dist($id_document = null)
{
    if (is_null($id_document)) {
        $securiser_action = charger_fonction('securiser_action', 'inc');
        $id_document = $securiser_action();
    }
    $id_document = $id_document == '*' ? '*' : intval($id_document);
    include_spip('action/editer_liens');
    objet_optimiser_liens(array('document' => $id_document), '*');
}
示例#2
0
/**
 * Optimiser la base de donnee en supprimant les liens orphelins
 *
 * @param int $n
 * @return int
 */
function mots_optimiser_base_disparus($flux)
{
    $n =& $flux['data'];
    $mydate = $flux['args']['date'];
    $result = sql_delete("spip_mots", "length(titre)=0 AND maj < {$mydate}");
    include_spip('action/editer_liens');
    // optimiser les liens morts :
    // entre mots vers des objets effaces
    // depuis des mots effaces
    $n += objet_optimiser_liens(array('mot' => '*'), '*');
    return $flux;
}
示例#3
0
文件: optimiser.php 项目: JLuc/SPIP
/**
 * Suppression des liens morts entre tables
 *
 * Supprime des liens morts entre tables suite à la suppression d'articles,
 * d'auteurs, etc...
 *
 * @note
 *     Maintenant que MySQL 5 a des Cascades on pourrait faire autrement
 *     mais on garde la compatibilité avec les versions précédentes.
 *
 * @pipeline_appel optimiser_base_disparus
 * 
 * @param int $attente
 *     Attente entre 2 exécutions de la tache en secondes
 * @return void
**/
function optimiser_base_disparus($attente = 86400)
{
    # format = 20060610110141, si on veut forcer une optimisation tout de suite
    $mydate = sql_quote(date("Y-m-d H:i:s", time() - $attente));
    $n = 0;
    //
    // Rubriques
    //
    # les articles qui sont dans une id_rubrique inexistante
    # attention on controle id_rubrique>0 pour ne pas tuer les articles
    # specialement affectes a une rubrique non-existante (plugin,
    # cf. http://trac.rezo.net/trac/spip/ticket/1549 )
    $res = sql_select("A.id_article AS id", "spip_articles AS A\n\t\t        LEFT JOIN spip_rubriques AS R\n\t\t          ON A.id_rubrique=R.id_rubrique", "A.id_rubrique > 0\n\t\t\t AND R.id_rubrique IS NULL\n\t\t         AND A.maj < {$mydate}");
    $n += optimiser_sansref('spip_articles', 'id_article', $res);
    // les articles a la poubelle
    sql_delete("spip_articles", "statut='poubelle' AND maj < {$mydate}");
    //
    // Auteurs
    //
    include_spip('action/editer_liens');
    // optimiser les liens de tous les auteurs vers des objets effaces
    // et depuis des auteurs effaces
    $n += objet_optimiser_liens(array('auteur' => '*'), '*');
    # effacer les auteurs poubelle qui ne sont lies a rien
    $res = sql_select("A.id_auteur AS id", "spip_auteurs AS A\n\t\t      \tLEFT JOIN spip_auteurs_liens AS L\n\t\t          ON L.id_auteur=A.id_auteur", "L.id_auteur IS NULL\n\t\t       \tAND A.statut='5poubelle' AND A.maj < {$mydate}");
    $n += optimiser_sansref('spip_auteurs', 'id_auteur', $res);
    # supprimer les auteurs 'nouveau' qui n'ont jamais donne suite
    # au mail de confirmation (45 jours pour repondre, ca devrait suffire)
    sql_delete("spip_auteurs", "statut='nouveau' AND maj < " . sql_quote(date('Y-m-d', time() - 45 * 24 * 3600)));
    /**
     * Permet aux plugins de compléter l'optimisation suite aux éléments disparus
     *
     * L'index 'data' est un entier indiquant le nombre d'optimisations
     * qui ont été réalisées (par exemple le nombre de suppressions faites)
     * et qui doit être incrémenté par les fonctions
     * utilisant ce pipeline si elles suppriment des éléments.
     * 
     * @pipeline_appel optimiser_base_disparus
     */
    $n = pipeline('optimiser_base_disparus', array('args' => array('attente' => $attente, 'date' => $mydate), 'data' => $n));
    if (!$n) {
        spip_log("Optimisation des tables: aucun lien mort");
    }
}
示例#4
0
/**
 * Optimiser la base de données en supprimant les liens orphelins
 *
 * @param array $flux
 * @return array
 */
function medias_optimiser_base_disparus($flux)
{
    include_spip('action/editer_liens');
    // optimiser les liens morts :
    // entre documents vers des objets effaces
    // depuis des documents effaces
    $flux['data'] += objet_optimiser_liens(array('document' => '*'), '*');
    // on ne nettoie volontairement pas automatiquement les documents orphelins
    return $flux;
}
示例#5
0
/**
 * Optimiser la base (evenements a la poubelle, lies a des articles disparus, ou liens mots sur evenements disparus)
 *
 * @param array $flux
 * @return array
 */
function agenda_optimiser_base_disparus($flux)
{
    # passer a la poubelle
    # les evenements lies a un article inexistant
    $res = sql_select("DISTINCT evenements.id_article", "spip_evenements AS evenements\n\t\t\tLEFT JOIN spip_articles AS articles\n\t\t\tON evenements.id_article=articles.id_article", "articles.id_article IS NULL");
    while ($row = sql_fetch($res)) {
        sql_updateq("spip_evenements", array('statut' => 'poubelle'), "id_article=" . $row['id_article']);
    }
    // Evenements a la poubelle
    sql_delete("spip_evenements", "statut='poubelle' AND maj < " . $flux['args']['date']);
    include_spip('action/editer_liens');
    // optimiser les liens de tous les mots vers des objets effaces
    // et depuis des mots effaces
    $flux['data'] += objet_optimiser_liens(array('mot' => '*'), array('evenement' => '*'));
    return $flux;
}
/**
 * Optimiser la base de données en supprimant les liens orphelins
 * de l'objet vers quelqu'un et de quelqu'un vers l'objet.
 *
 * @pipeline optimiser_base_disparus
 * @param  array $flux Données du pipeline
 * @return array       Données du pipeline
 */
function souscription_optimiser_base_disparus($flux)
{
    include_spip('action/editer_liens');
    $flux['data'] += objet_optimiser_liens(array('souscription' => '*'), '*');
    return $flux;
}