Forum pragmaMx France 10 Février 2012 à 03:25:21 *
Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.


Connexion avec identifiant et mot de passe
 
Accueil Aide Rechercher
Pages: [1]   Bas de page
Imprimer
Auteur Fil de discussion: Upload dans les albums protégés par mot de passe  (Lu 8020 fois)
naouin
Néophyte Mx
*
Hors ligne Hors ligne

Messages: 14


« le: 18 Juin 2007 à 22:39:37 »

Hello, ca faisait longtemps...

j'espere que je vais reussir a expliquer mon probleme de facon clair.. je commence a fatiguer un ruen.. calimero

Docn voila, apres avoir fait des tests dans tous les sens, voici mon souci. J'ai dans ma gallerie mx-coppermine des albums proteges par mot de passe (afin d'autoriser un acces independemment du groupe d'appartenance). Le fait de donner un mot de passe à un album le passe automatiquement en mode visibilité : Moi Seulement ! soit aucun problème selon moi..
Par ailleurs j'ai autorisé l'upload pour les visiteurs dans ces albums, et les groupes auquels appariennent les visteurs ont le droit à l'upload dans les albums publiques. Certes cet album n'est pas publique, mais une fois le mot de passe saisi, tout ceci est stocké dans un cookie.. Enfin bref, toute la config semble correcte. Les CHMOD aussi.

Je me connecte avec l'utilisateur bidon (tests) et je vais dans la gallerie... je rentre les mots de passe de tous les albums que je peux visualiser (ca c'est fait et memorise) puis j'upload une image... Lorsqu'on me demande ou je veux le mettre, j'ai le choix entre mes albums persos ou les albums publiques.. mais aucun acces aux albums que j'ai deverouille precedemment...

Pourquoi tant de haine  Pleurs


Personellemnt j'ai bien une petit intuition sur le sujet.. et je pense que je devrais passer par la, enfin si quelqu'un l'a fait avant moi, please faites moi signe..

J'ai remarque, qu'une fois que le mot de passe est saisi, celui-ci n'est plus demande lors des visites ultérieures tant que le cookie est valable. De fait, il y a qque part une variable qui stocke cet etat de fait, comme quoi l'utilisateur dupont a le droit d'acceder a l'albon toto..

ne serait-il pas possible sous reserve que ces conditions soient verifiees, d'ajouter l'album toto à la liste des albums auquels on peut ajouter des images ?? bon je sais pas si je suis tres clais, mais je preciserais au besoin  fou
« Dernière édition: 20 Juin 2007 à 11:22:56 par Diabolo » Journalisée
Diabolo
Administrateur
Ultra membre Mx
******
Hors ligne Hors ligne

Messages: 5480



« Répondre #1 le: 18 Juin 2007 à 22:46:35 »

Slt,
je vais faire un essai de mon coté pour voir.
Sinon n'hésite pas voir sur le forum:
http://coppermine-gallery.net/forum/index.php?board=38.0
Si tu trouve des info la dessus Clin d'oeil

http://www.pragmamx.fr/images/docs/mx_coppermine/docs/index_fr.htm
Journalisée

..:: Veuillez consulter les règles du forum ::..- Avez-vous consulté notre documentation avant de poser votre question ?-Pas de support en MP ou par courriel, le forum est là pour ça !Nouvelle question=Nouveau Sujet
naouin
Néophyte Mx
*
Hors ligne Hors ligne

Messages: 14


« Répondre #2 le: 19 Juin 2007 à 19:37:38 »

Bien apres avoir regarde de plus je vois deux possibilite :

1 - modifier la fonction
Code:
function form_alb_list_box($text, $name)
pour ajouter dans la listbox, les albums avec mdp pour lesquels on est deja enregistre.. tant pis pour les albums dont on a pas saisi le paswd avant...
Mon php est un peu rouille mais en gros je pense que lorsque l'on construit la liste des albums, il faudrait aller lire le cookie cpg143_albpw et recupérer les albums en question... Je vais essayer de coder ca.. mais bon patience.. ca fait une eternite que j'ai pas code en php... le lire ca va.. l'ecrire, plus dur  calimero

2 - ca devrait marcher de base et y'a un bug ailleurs dans les focntions appelantes ^^
« Dernière édition: 19 Juin 2007 à 19:53:43 par naouin » Journalisée
naouin
Néophyte Mx
*
Hors ligne Hors ligne

Messages: 14


« Répondre #3 le: 19 Juin 2007 à 22:23:44 »

Ok, vous me direz j'aurais peut etre du editer le post precedent, mais bon vu le contenu de celui qui vient, j'ai préféré en faire un autre... chose aussi incroyable que vrai, il semblerait que j'ai réussi mon hack pour permettre l'upload dans les albums protégés par mot de passe. Deux remarques (pour les puristes essentiellement) toutefois :

1 - c'est pas optimisé, on est bien d'accord, c'est un premier jet => on peut factoriser le code dans une fonction, mais comme mon php est pas tout jeune, j'etais pas sur de vouloir tester le passage de paramètre ce soir, je verrais ca plus tard dans la semaine, et je donnerais une version améliorée.

2 - Je me tâte encore, ce que j'ai fait marche, mais on pourrait le faire plus élégemment, je m'expliquerais après avoir présenté le hack !

Dans le fichier upload.php (modules/Gallery/upload.php) voici les modifs :

Modif 1 :

si lors d'une demande d'upload d'un utilisateur, le systeme ne trouve aucune gallerie dans lequel il a le droit d'upload, l'utilisateur se fait jeter.. Le code initial ne tenant pas compte des albums protégés par mot de passe, il fo modifier ceci :

Rechercher dans le code
Code:
if (!count($public_albums_list) && !count($user_albums_list)) {
    cpg_die (ERROR, $lang_upload_php['err_no_alb_uploadables'], __FILE__, __LINE__);
}

Remplacer par :
Code:
if (!count($public_albums_list) && !count($user_albums_list)) {
//Debut addon password protected albums
        //Verifier la presence du cookie
if(isset($_COOKIE[$CONFIG['cookie_name']."_albpw"]) && empty($allowed_password_protected_albums)) {
$alb_pw = unserialize($_COOKIE[$CONFIG['cookie_name']."_albpw"]);

                //Recuperer la liste des albums pour lesquels l'utilisateur a deja saisi le mot de passe
$allowed_password_protected_albums = implode(",",array_keys($alb_pw));
$sql = "SELECT aid, MD5(alb_password) as md5_password FROM ".$CONFIG['TABLE_ALBUMS']." WHERE aid IN ($allowed_password_protected_albums)";
$result = cpg_db_query($sql);
$albpw_db = array();
if (mysql_num_rows($result)) {
while ($data = mysql_fetch_array($result)) {
$albpw_db[$data['aid']] = $data['md5_password'];
            }
}
$valid = array_intersect($albpw_db, $alb_pw);
if (is_array($valid)) {
$allowed_password_protected_albums = implode(",",array_keys($valid));
} else {
$allowed_password_protected_albums = "";
}
}

        //si il n'y a toujours aucun album dans lequel l'utilisateur a le droit d'uploader
        //on fait comme avant => on le JETTE !!!
if (!count($allowed_password_protected_albums)){
cpg_die (ERROR, $lang_upload_php['err_no_alb_uploadables'], __FILE__, __LINE__);
}
        //Fin addon password protected album
}

Cette modif permet d'acceder a la partie upload lorsque les seuls albums dans lesquels l'utilisateur peut uploader sont protégés par mot de passe. Bien entendu, les mots de passes de ces albums DOIVENT etre saisis avant de faire l'upload.

Remarque en passant : certains ne manqueront pas de me faire remarquer que j'ai mis le code a l'interieur d'un test conditionnel. Ce n'est pas une erreur, en effet, cette premiere modif servant uniquement a ne pas se faire jeter de l'upload, des lors que l'une ou l'autre des deux conditions initales est remplie, nulm besoin d'en chercher une supplémentaire. Ce code n'ayant aucune incidence sur les champs de la listbox, ca semble suffisant  Clin d'oeil

Modif 2 :

apres l'upload, il faut choisir l'album auquel on veux affecter les images. Or les albums protégés pas MDP n'apparaissent pas dans la liste ! il faut donc les ajouter:

Rechercher
Code:
function form_alb_list_box($text, $name) {
// frogfoot re-wrote this function to present the list in categorized, sorted and nicely formatted order

    // Pull the $CONFIG array and the GET array into the function
    global $CONFIG, $lang_upload_php;

    // Also pull the album lists into the function
    global $user_albums_list, $public_albums_list;

    // Check to see if an album has been preselected by URL addition. If so, make $sel_album the album number. Otherwise, make $sel_album 0.
    $sel_album = isset($_GET['album']) ? $_GET['album'] : 0;

    // Create the opening of the drop down box
    echo <<<EOT
    <tr>
        <td class="tableb">
            $text
        </td>
        <td class="tableb" valign="top">
            <select name="$name" class="listbox">

EOT;

    // Reset counter
    $list_count = 0;

    // Cycle through the User albums
    foreach($user_albums_list as $album) {

        // Add to multi-dim array for later sorting
        $listArray[$list_count]['cat'] = $lang_upload_php['personal_albums'];
        $listArray[$list_count]['aid'] = $album['aid'];
        $listArray[$list_count]['title'] = $album['title'];
        $list_count++;
    }

    // Cycle through the public albums
    foreach($public_albums_list as $album) {

        // Set $album_id to the actual album ID
        $album_id = $album['aid'];

        // Get the category name
        $vQuery = "SELECT cat.name FROM " . $CONFIG['TABLE_CATEGORIES'] . " cat, " . $CONFIG['TABLE_ALBUMS'] . " alb WHERE alb.aid='" . $album_id . "' AND cat.cid=alb.category";
        $vRes = cpg_db_query($vQuery);
        $vRes = mysql_fetch_array($vRes);

        // Add to multi-dim array for sorting later
        if ($vRes['name']) {
            $listArray[$list_count]['cat'] = $vRes['name'];
        } else {
            $listArray[$list_count]['cat'] = $lang_upload_php['albums_no_category'];
        }
        $listArray[$list_count]['aid'] = $album['aid'];
        $listArray[$list_count]['title'] = $album['title'];
        $list_count++;
    }

    // Sort the pulldown options by category and album name
    $listArray = array_csort($listArray,'cat','title');

    // Finally, print out the nicely sorted and formatted drop down list
    $alb_cat = '';
        echo '                <option value="">' . $lang_upload_php['select_album'] . "</option>\n";
    foreach ($listArray as $val) {
        if ($val['cat'] != $alb_cat) {
if ($alb_cat) echo "                </optgroup>\n";
            echo '                <optgroup label="' . $val['cat'] . '">' . "\n";
            $alb_cat = $val['cat'];
        }
        echo '                <option value="' . $val['aid'] . '"' . ($val['aid'] == $sel_album ? ' selected' : '') . '>   ' . $val['title'] . "</option>\n";
    }
    if ($alb_cat) echo "                </optgroup>\n";

    // Close the drop down
    echo <<<EOT
            </select>
        </td>
    </tr>

EOT;
}

Remplacer par
Code:
function form_alb_list_box($text, $name) {
// frogfoot re-wrote this function to present the list in categorized, sorted and nicely formatted order

    // Pull the $CONFIG array and the GET array into the function
    global $CONFIG, $lang_upload_php;

    // Also pull the album lists into the function
    global $user_albums_list, $public_albums_list;

//addon password protected album
$allowed_password_protected_albums = "";

    // Check to see if an album has been preselected by URL addition. If so, make $sel_album the album number. Otherwise, make $sel_album 0.
    $sel_album = isset($_GET['album']) ? $_GET['album'] : 0;

    // Create the opening of the drop down box
    echo <<<EOT
    <tr>
        <td class="tableb">
            $text
        </td>
        <td class="tableb" valign="top">
            <select name="$name" class="listbox">

EOT;

    // Reset counter
    $list_count = 0;

    // Cycle through the User albums
    foreach($user_albums_list as $album) {

        // Add to multi-dim array for later sorting
        $listArray[$list_count]['cat'] = $lang_upload_php['personal_albums'];
        $listArray[$list_count]['aid'] = $album['aid'];
        $listArray[$list_count]['title'] = $album['title'];
        $list_count++;
    }

    // Cycle through the public albums
    foreach($public_albums_list as $album) {

        // Set $album_id to the actual album ID
        $album_id = $album['aid'];

        // Get the category name
        $vQuery = "SELECT cat.name FROM " . $CONFIG['TABLE_CATEGORIES'] . " cat, " . $CONFIG['TABLE_ALBUMS'] . " alb WHERE alb.aid='" . $album_id . "' AND cat.cid=alb.category";
        $vRes = cpg_db_query($vQuery);
        $vRes = mysql_fetch_array($vRes);

        // Add to multi-dim array for sorting later
        if ($vRes['name']) {
            $listArray[$list_count]['cat'] = $vRes['name'];
        } else {
            $listArray[$list_count]['cat'] = $lang_upload_php['albums_no_category'];
        }
        $listArray[$list_count]['aid'] = $album['aid'];
        $listArray[$list_count]['title'] = $album['title'];
        $list_count++;
    }

//addon password protected albums
if(isset($_COOKIE[$CONFIG['cookie_name']."_albpw"]) && empty($allowed_password_protected_albums)) {
          $alb_pw = unserialize($_COOKIE[$CONFIG['cookie_name']."_albpw"]);
          $allowed_password_protected_albums = implode(",",array_keys($alb_pw));
          $sql = "SELECT aid, MD5(alb_password) as md5_password FROM ".$CONFIG['TABLE_ALBUMS']." WHERE aid IN ($allowed_password_protected_albums)";
          $result = cpg_db_query($sql);
          $albpw_db = array();
          if (mysql_num_rows($result)) {
            while ($data = mysql_fetch_array($result)) {
              $albpw_db[$data['aid']] = $data['md5_password'];
            }
          }
          $valid = array_intersect($albpw_db, $alb_pw);
          if (is_array($valid)) {
            $allowed_password_protected_albums = implode(",",array_keys($valid));
          } else {
            $allowed_password_protected_albums = "";
          }
        }

        if (!empty($allowed_password_protected_albums)) {
$sql = "SELECT aid, title FROM {$CONFIG['TABLE_ALBUMS']} WHERE visibility != '0' AND aid IN ($allowed_password_protected_albums)";
$result = cpg_db_query($sql);
   
if ((mysql_num_rows($result))) {
  while($album=mysql_fetch_array($result)){
// Set $album_id to the actual album ID
$album_id = $album['aid'];

// Get the category name
$vQuery = "SELECT cat.name FROM " . $CONFIG['TABLE_CATEGORIES'] . " cat, " . $CONFIG['TABLE_ALBUMS'] . " alb WHERE alb.aid='" . $album_id . "' AND cat.cid=alb.category";
$vRes = cpg_db_query($vQuery);
$vRes = mysql_fetch_array($vRes);

// Add to multi-dim array for sorting later
if ($vRes['name']) {
$listArray[$list_count]['cat'] = $vRes['name'];
}
else {
$listArray[$list_count]['cat'] = $lang_upload_php['albums_no_category'];
}
       
$listArray[$list_count]['aid'] = $album['aid'];
$listArray[$list_count]['title'] = $album['title'];
$list_count++;
}
}
}
 
    // Sort the pulldown options by category and album name
    $listArray = array_csort($listArray,'cat','title');

    // Finally, print out the nicely sorted and formatted drop down list
    $alb_cat = '';
        echo '                <option value="">' . $lang_upload_php['select_album'] . "</option>\n";
    foreach ($listArray as $val) {
        if ($val['cat'] != $alb_cat) {
if ($alb_cat) echo "                </optgroup>\n";
            echo '                <optgroup label="' . $val['cat'] . '">' . "\n";
            $alb_cat = $val['cat'];
        }
        echo '                <option value="' . $val['aid'] . '"' . ($val['aid'] == $sel_album ? ' selected' : '') . '>   ' . $val['title'] . "</option>\n";
    }
    if ($alb_cat) echo "                </optgroup>\n";

    // Close the drop down
    echo <<<EOT
            </select>
        </td>
    </tr>

EOT;
}


Voili , voilou.. ca fonctionne chez moi. De cette manière les utilisateurs ayant les mots de passe des albums protégés, peuvent y ajouter des photos, quelque soit leur groupes.

Petite remarque complémentaire, ces modifs sont compatibles avec les mécanismes d'approbation si les utilisateurs qui uploadent les photos y sont soumis!!

Voila il fo que je teste un peu plus avant cette modif, et j'optimise le code pour ce week end !!

Oups j'ai failli oublier, je disais en début de post que je me tatais encore.. en effet, il est possible d'integrer la liste des albums protégés par mdp directement dans la liste des albums prives de l'utilisateur (en terme de conception de code).. auquel cas, la modif 1 est a reprendre, mais la modif n'est du coup plus necessaire.. ca peut aussi etre sympa.. a voir !

@+++
« Dernière édition: 19 Juin 2007 à 22:40:24 par naouin » Journalisée
Diabolo
Administrateur
Ultra membre Mx
******
Hors ligne Hors ligne

Messages: 5480



« Répondre #4 le: 20 Juin 2007 à 11:22:32 »

 bien joué
Je mets en épinglé
Journalisée

..:: Veuillez consulter les règles du forum ::..- Avez-vous consulté notre documentation avant de poser votre question ?-Pas de support en MP ou par courriel, le forum est là pour ça !Nouvelle question=Nouveau Sujet
Pages: [1]   Haut de page
Imprimer
Forum pragmaMx France  |  Modules spécifiques & Blocs  |  Mx-Coppermine (Modérateurs: Diabolo, kroms, phi56360)  |  Fil de discussion: Upload dans les albums protégés par mot de passe
 
Aller à:  

Powered by SMF 1.1.15 | SMF © 2006-2009, Simple Machines

Plus