Annonce

#1 2006-02-27 23:27:41

rateck
Membre
Inscription : 2006-02-24
Messages : 54

Re : [Réglé] Wanewsletter 2.3-beta3 (mysql) - NL avec fichiers

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

#2 2006-02-28 18:07:29

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : [Réglé] Wanewsletter 2.3-beta3 (mysql) - NL avec fichiers

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

#3 2006-02-28 23:08:42

rateck
Membre
Inscription : 2006-02-24
Messages : 54

Re : [Réglé] Wanewsletter 2.3-beta3 (mysql) - NL avec fichiers

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

#4 2006-03-01 01:03:25

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : [Réglé] Wanewsletter 2.3-beta3 (mysql) - NL avec fichiers

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

#5 2006-03-01 10:43:53

rateck
Membre
Inscription : 2006-02-24
Messages : 54

Re : [Réglé] Wanewsletter 2.3-beta3 (mysql) - NL avec fichiers

Merci beaucoup Cela ne pourrait-il pas faire l'objet d'un Outil?

Hors ligne

#6 2006-03-01 20:02:28

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : [Réglé] Wanewsletter 2.3-beta3 (mysql) - NL avec fichiers

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

Pied de page des forums