Optimisation et lien vers objet disparu
- Soit un site qui a EU un temps des objets supplémentaires (dans mon cas : almanach, message, ticket).
- Soit un moment où ce site desinstalle les plugins concernés > dans 99% des cas les fonctions de deinstalle supprime les tables principales, éventuellement les tables de liaisons spécifiques, mais oublie les liaisons génériques (par ex "spip_auteurs_liaisons". => Conclusion, on se retrouve avec des erreurs mysql du type
Erreur 1146 de mysql: Table 'secastro.messages' doesn't exist
in /data/www/data/astro/ecrire/action/editer_liens.php L796 [sql_select(),lien_optimise(),objet_traiter_liaisons(),objet_optimiser_liens(),optimiser_base_disparus(),optimiser_base(),genie_optimiser_dist(),queue_start_job(),queue_schedule(),action_forcer_job_dist(),traiter_appels_actions()]
SELECT L.id_auteur AS id,L.id_objet
FROM `secastro`.spip_auteurs_liens AS L
LEFT JOIN messages AS O
ON (O.id_message=L.id_objet AND L.objet='message')
WHERE L.objet='message' AND O.id_message IS NULL
Piste de solution, sans doute en lien avec #2851
- Soit fournir une fonction permettant de reperer toutes les liaisons d'un objet (dans les deux sens), charge à la fonction de desinstalle du plugin de supprimer
- soit corriger la fonction d'optimisation des liens, pour supprimer automatiquement les liens qui pointent vers des types d'objets qui n'existent plus, sans chercher à les retrouver.
Modification effectuée par b_b