Vous n'êtes pas identifié(e).
[25 janvier 2021] - Publication de Wanewsletter 3.1.0
1 - Quand je veux joindre un fichier existant à une NL, l'outil "Fichiers Existants" ne m'affiche que 3 fichiers sur les 5 qui sont dans le répertoire Upload et qui sont référencés dans la table wa_jojned_files.
2 - Comment nettoyer le répertoire Upload et la table wa_joined_files?
Hors ligne
1 - Quand je veux joindre un fichier existant à une NL, l'outil "Fichiers Existants" ne m'affiche que 3 fichiers sur les 5 qui sont dans le répertoire Upload et qui sont référencés dans la table wa_jojned_files.
Attention, cette liste de sélection ne référence que les fichiers joints de la liste en cours, pas ceux des autres listes.
2 - Comment nettoyer le répertoire Upload et la table wa_joined_files?
Que voulez-vous dire ?
PHP et MySQL, un duo gagnant !
Hors ligne
Que voulez-vous dire ?
Dans le répertoire "upload" sont les fichiers à joindre ou joints avec un nom aléatoire,
Dans la table "wa_joined_files" sont les liens entre les fichiers du répertoire "upload", les noms de fichier réels et les listes d'envoi.
je cherche à savoir comment on peut nettoyer le répertpoire "upload" tout en respectant la cohérence des liens (c.a.d. en nettoyant aussi la table "wa_joined_files" des éléments qui n'ont plus à y être).
Hors ligne
Le script suivant supprime les fichiers présents dans le répertoire d'upload si aucun entrée ne les concerne plus dans la table wa_joined_files. Il supprime également les entrées dans wa_joined_files et wa_log_files concernant des fichiers référencés qui ne se trouvent plus dans le répertoire d'upload.
<?php
define('WA_ROOTDIR', '.');
require WA_ROOTDIR . '/includes/config.inc.php';
require WA_ROOTDIR . '/includes/wadb_init.php';
$db = WaDatabase($dsn);
$sql = "SELECT upload_path FROM " . CONFIG_TABLE;
$result = $db->query($sql);
list($upload_path) = $result->fetch();
$sql = "SELECT file_id, file_physical_name
FROM " . JOINED_FILES_TABLE . "
ORDER BY file_real_name ASC";
$result = $db->query($sql);
$sql_delete_ids = array();
$joined_files = array();
while( $row = $result->fetch() ) {
if( !file_exists(WA_ROOTDIR . '/' . $upload_path . $row['file_physical_name']) ) {
array_push($sql_delete_ids, $row['file_id']);
}
array_push($joined_files, $row['file_physical_name']);
}
if( count($sql_delete_ids) > 0 ) {
$db->beginTransaction();
$sql = "DELETE FROM " . JOINED_FILES_TABLE . "
WHERE file_id IN(" . implode(', ', $sql_delete_ids) . ")";
$db->query($sql);
$sql = "DELETE FROM " . LOG_FILES_TABLE . "
WHERE file_id IN(" . implode(', ', $sql_delete_ids) . ")";
$db->query($sql);
$db->commit();
}
$browse = dir(WA_ROOTDIR . '/' . $upload_path);
while( ($entry = $browse->read()) !== false ) {
if( is_file(WA_ROOTDIR . '/' . $upload_path . $entry)
&& $entry != 'index.html' && !in_array($entry, $joined_files) )
{
unlink(WA_ROOTDIR . '/' . $upload_path . $entry);
}
}
exit(0);
Script prévu pour fonctionner à la racine du répertoire d'installation de Wanewsletter (modifiable en éditant la constante WA_ROOTDIR).
PHP et MySQL, un duo gagnant !
Hors ligne
Merci beaucoup Cela ne pourrait-il pas faire l'objet d'un Outil?
Hors ligne
Je ne sais pas si ce serait vraiment utile à la majorité des utilisateurs.
Si un fichier est présent dans le répertoire upload/ sans avoir d'entrée dans la table wa_joined_files, il est très probable que ce fichier ait été mis là manuellement et n'ait rien à voir avec wanewsletter (sauf si l'admin fait ses propres modifs dans le code ou les tables de wanewsletter).
Bien sùr, le répertoire upload/, ou bien une partie de son contenu, peut avoir été effacé par erreur, rendant inutile les lignes correspondantes dans les tables wa_joined_files et wa_log_files.
Je pourrais ajouter ce script dans le répertoire contrib/ de wanewsletter…
PHP et MySQL, un duo gagnant !
Hors ligne