[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins / odt2spip_32 / genie / odt2spip_nettoyer_repertoire_upload.php
diff --git a/www/plugins/odt2spip_32/genie/odt2spip_nettoyer_repertoire_upload.php b/www/plugins/odt2spip_32/genie/odt2spip_nettoyer_repertoire_upload.php
new file mode 100644 (file)
index 0000000..98d1581
--- /dev/null
@@ -0,0 +1,95 @@
+<?php
+/**
+ * Tache de nettoyages de fichiers du plugin Odt2SPIP
+ */
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+/**
+ * Enlève les fichiers du répertoire de travail de odt2spip qui sont trop vieux
+ *
+ * @param int $last
+ * @return int
+ **/
+function genie_odt2spip_nettoyer_repertoire_upload_dist($last) {
+
+       odt2spip_nettoyer_repertoire_recursif(_DIR_TMP . 'odt2spip', 3600);
+
+       return 1;
+}
+
+
+
+/**
+ * Nettoyer un répertoire suivant l'age et le nombre de ses fichiers
+ *
+ * Nettoie aussi les sous répertoires.
+ * Supprime automatiquement les répertoires vides.
+ *
+ * @param string $repertoire
+ *     Répertoire à nettoyer
+ * @param int $age_max
+ *     Age maxium des fichiers en seconde. Par défaut 24*3600
+ * @param int $max_files
+ *     Nombre maximum de fichiers dans le dossier
+ * @return bool
+ *     - false : erreur de lecture du répertoire.
+ *     - true : action réalisée.
+ **/
+function odt2spip_nettoyer_repertoire_recursif($repertoire, $age_max = 86400) {
+
+       $repertoire = rtrim($repertoire, '/');
+       if (!is_dir($repertoire)) {
+               return false;
+       }
+
+       $fichiers = scandir($repertoire);
+       if ($fichiers === false) {
+               return false;
+       }
+
+       $fichiers = odt2spip_filtrer_fichiers($fichiers);
+       if (!$fichiers) {
+               supprimer_repertoire($repertoire);
+               return true;
+       }
+
+       foreach ($fichiers as $fichier) {
+               $chemin = $repertoire . DIRECTORY_SEPARATOR . $fichier;
+               if (is_dir($chemin)) {
+                       odt2spip_nettoyer_repertoire_recursif($chemin, $age_max);
+               }
+               elseif (is_file($chemin) and !jeune_fichier($chemin, $age_max)) {
+                       supprimer_fichier($chemin);
+               }
+       }
+
+       // à partir d'ici, on a pu possiblement vider le répertoire…
+       // on le supprime s'il est devenu vide.
+       $fichiers = scandir($repertoire);
+       if ($fichiers === false) {
+               return false;
+       }
+
+       $fichiers = odt2spip_filtrer_fichiers($fichiers);
+       if (!$fichiers) {
+               supprimer_repertoire($repertoire);
+       }
+
+       return true;
+}
+
+
+/**
+ * Enlever d'une liste des fichiers ce qui est inutile
+ *
+ * Enlève les fichiers .. et . ainsi que des fichiers à
+ * ne pas considérer comme importants pour tester qu'un
+ * répertoire a du contenu.
+ *
+ * @param array $fichiers
+ * @return array
+ */
+function odt2spip_filtrer_fichiers($fichiers) {
+       return array_diff($fichiers, array('..', '.', '.ok'));
+}
\ No newline at end of file