/** * 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), '*'); }
/** * 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; }
/** * 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"); } }
/** * 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; }
/** * 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; }