SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

288 Plugins, 197 contribs sur SPIP-Zone, 206 visiteurs en ce moment

Accueil > Administration et BDD > Aides administration > Corbeille > Archives corbeille > Suppression automatique des pièces jointes des articles mis à la (...)

Suppression automatique des pièces jointes des articles mis à la poubelle

2 mars 2005 – par Equipement – commentaires

9 votes

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Ce code permet de supprimer automatiquement les pièces jointes des articles mis à la poubelle sauf si ces pièces jointes sont utilisées par d’autres articles.

Un article qui a été mis à la poubelle est supprimé physiquement de la base de données 24 heures après par un mécanisme d’optimisation de la base. Toutefois les pièces jointes de cet article ne sont pas supprimées par SPIP. En effet, les concepteurs de SPIP indiquent dans leur forum qu’il est possible d’insérer dans le texte d’un article un lien vers une pièce jointe d’un autre article et que dans ce cas la suppression de la pièce jointe serait préjudiciable à l’article qui contient le lien.
Ainsi, on risque d’avoir un volume croissant de pièces jointes devenues inutiles.

Aussi, j’ai modifié une partie du code du fichier ecrire/optimiser.php3 de SPIP version 1.6 afin d’obtenir le fonctionnement suivant :

a) si les pièces jointes à l’article, qui a été mis à la poubelle, ne sont pas utilisées dans le texte d’autres articles (lien ou ou ), alors l’article et ses pièces jointes sont supprimés au moins 24 heures après.

b) si les pièces jointes à l’article, qui a été mis à la poubelle, sont utilisées dans le texte d’autres articles (lien ou ou ), alors l’article et ses pièces jointes ne sont pas supprimés. En effet, si l’article était supprimé, on n’aurait plus la possibilité de supprimer manuellement ses pièces jointes.

Dans ecrire/optimiser.php3

Remplacer les lignes suivantes (38 à 43) :

//
// Articles
//

$query = "DELETE FROM spip_articles WHERE statut='poubelle' AND maj < $mydate";
spip_query($query);

par le code suivant :

//
// Articles
//

//---------------- Début ajout ----------------
//        On désactive l’ancien code
//        $query = "DELETE FROM spip_articles WHERE statut='poubelle' AND maj < $mydate";
//        spip_query($query);


// pour effacer les documents joints aux articles à supprimer
// lister les articles à supprimer
$query = "SELECT id_article FROM spip_articles WHERE statut='poubelle' AND maj < $mydate";
$result = spip_query($query);
while ($row = spip_fetch_array($result)) $ciarticles[] = $row['id_article'];



        if ($ciarticles) {
                $ciarticles = join(",", $ciarticles);

       // lister les documents joints aux articles à supprimer
                $query = "SELECT id_document FROM spip_documents_articles WHERE id_article IN ($ciarticles)";
           $result = spip_query($query);
           while ($row = spip_fetch_array($result))
       {
           $iddocument = $row['id_document'];

                        $utile = false;

           // vérifier si les documents ne sont pas utilisés dans le texte d'autres articles
               $querydoc = "SELECT id_article FROM spip_articles WHERE statut!='poubelle' AND (texte LIKE '%<doc$iddocument|%' OR texte LIKE '%<emb$iddocument|%' OR texte LIKE '%<img$iddocument|%')";
               $resultdoc = spip_query($querydoc);
                        if ($row = @spip_fetch_array($resultdoc)) {
               $cidocschindler[] = $iddocument;
           } else {
               $cidocuments[] = $iddocument;
           }
       }


       // supprime les documents joints aux articles à supprimer sauf s'ils sont utilisés dans le texte d'autres articles
           if ($cidocuments) {
                   $cidocuments = join(",", $cidocuments);

               $query = "SELECT id_document, id_vignette, fichier FROM spip_documents WHERE id_document IN ($cidocuments)";
               $result = spip_query($query);
               while ($row = spip_fetch_array($result)) {
                       $fichier = $row['fichier'];
               $fichier = "../".$fichier;
                       $id_document = $row['id_document'];
                       $id_vignette = $row['id_vignette'];
                       spip_query("DELETE FROM spip_documents WHERE id_document=$id_document");
                       spip_query("UPDATE spip_documents SET id_vignette=0 WHERE id_vignette=$id_document");
                       spip_query("DELETE FROM spip_documents_articles WHERE id_document=$id_document");
                       @unlink($fichier);

                   if ($id_vignette > 0) {
                           $query = "SELECT id_vignette, fichier FROM spip_documents WHERE id_document=$id_vignette";
                           $result = spip_query($query);
                           if ($row = spip_fetch_array($result)) {
                                   $fichier = $row['fichier'];
                                   @unlink($fichier);
                           }
                           spip_query("DELETE FROM spip_documents WHERE id_document=$id_vignette");
                           spip_query("DELETE FROM spip_documents_articles WHERE id_document=$id_vignette");
                   }
               }
       }
   }


           if ($cidocschindler) {
                        $cidocschindler = join(",", $cidocschindler);
                        $query = "SELECT id_article FROM spip_documents_articles WHERE id_document IN ($cidocschindler)";
                        $result = spip_query($query);
                        while ($row = spip_fetch_array($result)) $ciartschindler[] = $row['id_article'];

                        $ciartschindler = join(",", $ciartschindler);
                        $query = "DELETE FROM spip_articles WHERE statut='poubelle' AND maj < $mydate AND id_article NOT IN ($ciartschindler)";
                        spip_query($query);
           } else {
                        $query = "DELETE FROM spip_articles WHERE statut='poubelle' AND maj < $mydate";
                        spip_query($query);
           }

//--------------- Fin ajout --------------------

Dernière modification de cette page le 1er janvier 2017

Retour en haut de la page

Vos commentaires

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Escal-V3

    16 février 2012 – 281 commentaires

    Un jeu de squelettes proposant un affichage en 2 ou 3 colonnes avec un large choix de noisettes à insérer ou pas, fortement paramétrable depuis l’espace privé . Présentation A l’instar de sa petite soeur plugin Escal-V2 dont elle reprend toutes (...)

  • GIS 4

    11 août 2012 – 1367 commentaires

    Présentation et nouveautés La version 4 de GIS abandonne la libraire Mapstraction au profit de Leaflet. Cette librairie permet de s’affranchir des librairies propriétaires tout en gardant les mêmes fonctionnalités, elle propose même de nouvelles (...)

  • FACD

    3 juin 2015 – commentaires

    FACD est l’acronyme de « File d’Attente de Conversion de Documents ». Comme son nom l’indique, il permet à des plugins dont le but est de convertir des documents dans d’autres formats de mettre ses conversions dans une file afin qu’elles soient (...)

  • CleverMail

    20 janvier 2010 – 637 commentaires

    CleverMail est un plugin permettant d’envoyer des lettres d’informations à des abonnés depuis SPIP. Issu au départ d’un développement libre complètement indépendant de SPIP, il a connu une première version pour SPIP 1.9 avant d’être complètement réécris (...)

  • Massicot

    7 octobre 2015 – 74 commentaires

    Recadrez et redimensionnez vos images directement dans l’espace privé de SPIP ! Inspiré par le plugin photospip, ce plugin plus minimaliste permet de recadrer et redimensionner les images dans l’espace privé de SPIP. Une fois le plugin installé (...)

Ça spipe par là