diff --git a/.theia/settings.json b/.theia/settings.json new file mode 100644 index 0000000..26ee044 --- /dev/null +++ b/.theia/settings.json @@ -0,0 +1,5 @@ +{ + "[php]": { + "editor.defaultFormatter": "fterrag.vscode-php-cs-fixer" + } +} \ No newline at end of file diff --git a/local/bin/trierPhotos.php b/local/bin/trierPhotos.php index d4ca7fa..381d7aa 100755 --- a/local/bin/trierPhotos.php +++ b/local/bin/trierPhotos.php @@ -1,223 +1,115 @@ #!/usr/bin/php -12)) { - unset($dateTimeOriginal); - } - if (isset($dateTimeOriginal) && is_array($dateTimeOriginal) && ($dateTimeOriginal['d'] < 01 || $dateTimeOriginal['d'] >31)) { - unset($dateTimeOriginal); - } - if (isset($dateTimeOriginal) && is_array($dateTimeOriginal) && ($dateTimeOriginal['y'] < 1900 || $dateTimeOriginal['d'] >2021)) { - unset($dateTimeOriginal); - } - } - - - // Récupération de la date de modification - if ($traitement_ok && !isset($dateTimeOriginal)) { - $dateTimeOriginal_explode = explode(":", date("Y:m:d", filemtime($entry))); - if (isset($dateTimeOriginal_explode)) { - $dateTimeOriginal['y'] = $dateTimeOriginal_explode[0]; - $dateTimeOriginal['m'] = $dateTimeOriginal_explode[1]; - $dateTimeOriginal['d'] = $dateTimeOriginal_explode[2]; - } - } + $traitement_ok = in_array($mime_type[0], ['image', 'video']); + $dateTimeOriginal = null; - - - // Création des dossiers et déplacement du fichier - if ($traitement_ok && isset($dateTimeOriginal) && is_array($dateTimeOriginal)) { - - // TRIER PAR DATE - - $rep_dest = $dateTimeOriginal['y'] ."/". $dateTimeOriginal['m'] ."/". $dateTimeOriginal['d']; - - // TRIER PAR APPAREIL -/* - if (isset($file_exif) && is_array($file_exif) && - array_key_exists('Make', $file_exif) && - $file_exif['Make'] !== null ) { - $rep_dest = $file_exif['Make']; - } - - if (isset($file_exif) && is_array($file_exif) && array_key_exists('Model', $file_exif)) { - $rep_dest .= '-' . $file_exif['Model']; - } - - if (isset($file_exif) && is_array($file_exif) && array_key_exists('InternalSerialNumber', $file_exif) && - $file_exif['InternalSerialNumber'] !== null ) { - $rep_dest .= '-'.$file_exif['InternalSerialNumber']; - } -*/ - // TRAITEMENT COMMUN - - // Création du dossier destination - if (!empty($rep_dest)) { - $rep_dest = str_replace("\0", '', $rep_dest); - } - if (!file_exists($rep_dest)) { - - // Vérifie et nettoie la chaîne de caractères null - if (!empty($rep_dest)) { - if (mkdir($rep_dest, 0777, true)) { - echo $rep_dest . " créé.\n"; - } else { - die('Echec lors de la création des répertoires...'."\n"); - } - } - } - - // Déplacement - - $file_dest = $rep_dest."/".$entry; - - if (!file_exists($file_dest)) { - rename($entry, $file_dest); - $undoCmd .= "mv \"".$file_dest."\" \"".$entry."\"\n"; - $message .= " => ".$file_dest."\n"; - } else { - $md5_file_src = md5_file($entry); - $md5_file_dst = md5_file($file_dest); - if ($md5_file_src == $md5_file_dst) { - $message .= " [ERREUR] ".$file_dest." existe déjà ! Destruction car même empreinte $md5_file_src / $md5_file_dst\n"; - unlink($entry); - } else { - $message .= " [ERREUR] ".$file_dest." existe déjà ! Mais pas avec la même empreinte.\n"; - } - } - - - // Ecriture du log - file_put_contents($file_undo_str, $undoCmd, FILE_APPEND); - file_put_contents($file_log_out_str, $message, FILE_APPEND); - echo $message; + // Lecture des métadonnées EXIF + if ($traitement_ok && $mime_type[0] === 'image' && $mime_type[1] === 'jpeg') { + $file_exif = @exif_read_data($entry, 'EXIF'); + if (!empty($file_exif['DateTimeOriginal'])) { + $date_exif = explode(':', str_replace(' ', ':', $file_exif['DateTimeOriginal'])); + $dateTimeOriginal = [ + 'y' => $date_exif[0], + 'm' => $date_exif[1], + 'd' => $date_exif[2] + ]; + logMessage($file_log, "EXIF DateTimeOriginal : {$file_exif['DateTimeOriginal']}"); } + } + + // Détection via le nom du fichier + if (!$dateTimeOriginal) { + if (preg_match('/^(IMG-|VID_|IMG_|VID-)(\d{4})(\d{2})(\d{2})/', $entry, $matches)) { + $dateTimeOriginal = [ + 'y' => $matches[2], + 'm' => $matches[3], + 'd' => $matches[4] + ]; + logMessage($file_log, "Date extraite du nom de fichier."); + } elseif (preg_match('/^Screenshot_(\d{4})(\d{2})(\d{2})/', $entry, $matches)) { + $dateTimeOriginal = [ + 'y' => $matches[1], + 'm' => $matches[2], + 'd' => $matches[3] + ]; + } + } + + // Vérification et correction des dates + if ($dateTimeOriginal) { + if ($dateTimeOriginal['m'] < 1 || $dateTimeOriginal['m'] > 12 || + $dateTimeOriginal['d'] < 1 || $dateTimeOriginal['d'] > 31 || + $dateTimeOriginal['y'] < 1900 || $dateTimeOriginal['y'] > date('Y')) { + $dateTimeOriginal = null; + } + } + + // Utilisation de la date de modification si aucune autre date trouvée + if (!$dateTimeOriginal) { + $date_modif = explode(':', date('Y:m:d', filemtime($entry))); + $dateTimeOriginal = [ + 'y' => $date_modif[0], + 'm' => $date_modif[1], + 'd' => $date_modif[2] + ]; + } - + // Création du dossier de destination et déplacement + if ($dateTimeOriginal) { + $rep_dest = "{$dateTimeOriginal['y']}/{$dateTimeOriginal['m']}/{$dateTimeOriginal['d']}"; + if (!is_dir($rep_dest)) { + mkdir($rep_dest, 0777, true); + logMessage($file_log, "Dossier créé : $rep_dest"); + } + + $file_dest = "$rep_dest/$entry"; + if (!file_exists($file_dest)) { + rename($entry, $file_dest); + logMessage($file_log, "Déplacé vers : $file_dest"); + file_put_contents($file_undo, "mv \"$file_dest\" \"$entry\"\n", FILE_APPEND); + } else { + $md5_src = md5_file($entry); + $md5_dst = md5_file($file_dest); + if ($md5_src === $md5_dst) { + unlink($entry); + logMessage($file_log, "[ERREUR] Doublon détecté et supprimé : $file_dest"); + } else { + logMessage($file_log, "[ERREUR] Conflit de fichier : $file_dest existe déjà mais avec un contenu différent."); + } + } } } - closedir($handle); - } -