#1 2004-07-21 16:56:35

treddo
Invité

Vote

Bonjour,

Je viens de mettre au point un système de vote sur chaque photo pour les utilisateur enregistrés mais j'ai rencontré un petit problème. Je ne peux dans la version actuel controler si le votant est le proprietaire de la photo pour la simple raison que dans l'image on stock l'auteur et pas le Nom d'utilisateur, qui est pourtant demandé lors de l'ajout d'images.
Je n'ai pas voulus modifier la structure des tables actuelles pour rester compatible avec les futures versions mais je pense qu'il serait bien à l'avenir de stocker le Nom d'utilisateur avec l'image et que dans la page d'ajout il soit vérouillé pour evité de le modifier.

A+

#2 2004-07-21 20:21:14

plg
Équipe Piwigo
Nantes, France, Europe
2002-04-05
12672

Re: Vote

c'est parce que tu utilises PhpWebGallery en considérant que les utilisateurs sont des auteurs, or c'est très subjectif. Sur ma galerie perso, je suis le seul à rajouter des photos, mais l'auteur n'est pas toujours le même.


Les historiens ont établi que Pierrick était le premier utilisateur connu de Piwigo.

Hors ligne

#3 2004-07-22 17:06:24

Marc 77
Membre
Nemours, France
2003-01-04
391

Re: Vote

Treddo, ton système m'intéresse. Peut on connâitre les modifs? Et pour quelle version?


BSF Test
Dimage A1 AMD 2200Win XP Pro + SP2 PhpWg 1.3.2 IE 6

Hors ligne

#4 2004-07-25 00:50:46

Treddo
Invité

Re: Vote

Bonjour Marc,

Je suis un membre de ton site depuis pas mal de temps j'ai même quelque photo dans les plus vus.

Pour avoir un apperçu de mon système, je t'invite à faire un tour sur mon site http://galerie1.free.fr/ et si ca t'interresse, je ne vois pas d'objectionà t'indiquer les modifs.

Le système requère encore quelques amélioration, il faut que j'empêche le propriétaire d'une photo d'être obligé de votez pour lui.

Il faut aussi que je fasse une page qui affiche les photos ayant la meilleur note à la place des 10 plus vues qui n'est pas à mon avis une bonne chose parcequ'une nouvelle photo n'aura aucune chance d'etre dedans.

Sinon j'ai pris le choix d'obligé le vote pour voir le résultat.

#5 2004-07-25 07:25:19

Marc 77
Membre
Nemours, France
2003-01-04
391

Re: Vote

Treddo,
Excuse, je ne t'avais pas reconnu.
Effectivement, ton système est bien au point et esthétiquement réussi.
Mais comme Phpwg est un programme en Open Source, je pense qu'il serait bien de donner les modifs dans ce forum pour que toute la communauté en profite.


BSF Test
Dimage A1 AMD 2200Win XP Pro + SP2 PhpWg 1.3.2 IE 6

Hors ligne

#6 2004-07-25 11:48:42

Treddo
Invité

Re: Vote

Bon si il y à quelques maladresse dans le code, ne m'en voulez pas, j'ai commencé le PHP mardi dernier.

Voici les modifs à ajouter derrière les lignes suivante dans "picture.php":

// calculation of width and height
if ( $page['width'] == "" )
{
  $taille_image = @getimagesize( $lien_image );
  //$original_width = $taille_image[0];
  $original_height = $taille_image[1];
}
else
{
  $original_width = $page['width'];
  $original_height = $page['height'];
}




// SOURCE POUR LE VOTE----------------------------------------------

if ( $user['is_the_guest'])
{
  //Ici je mets des petites images pour les visiteurs
  //     et il ne peuvent pas voter
  $picture_size = get_picture_size( $original_width, $original_height,
                  150, 150 );
  $final_width  = $picture_size[0];
  $final_height = $picture_size[1];
}
else
{
  $picture_size = get_picture_size( $original_width, $original_height,
                  $user['maxwidth'], $user['maxheight'] );
  $final_width  = $picture_size[0];
  $final_height = $picture_size[1];

  if ( isset( $_POST['vote'] ))
  {
       $date=date("Y/m/d H:i:s");
       mysql_query("INSERT INTO ".PREFIX_TABLE."pc_vote(Vote_Id,Vote_Id_Image,Vote_Id_User,Vote_Choix,Vote_Date)
             VALUES('', " .$_GET['image_id']. ",'" .$user['username']. "'," .$_POST['note']. ",'$date')");
       echo mysql_error();
   }

  $query = 'SELECT Vote_ID_Image';
  $query.= ' FROM '.PREFIX_TABLE.'pc_vote';
  $query.= ' WHERE Vote_ID_Image = ' .$_GET['image_id'];
  $query.= " AND Vote_ID_User = '" .$user['username'] . "'";
  $result = mysql_query( $query );
  $row = mysql_fetch_array( $result,MYSQL_ASSOC );

  if ( $row['Vote_ID_Image'])
  {
    $query = 'SELECT Vote_Choix';
    $query.= ' FROM '.PREFIX_TABLE.'pc_vote';
    $query.= ' WHERE Vote_ID_Image = ' .$_GET['image_id'];
    $result = mysql_query( $query );

    $NbVotant = 0;
    $voteresultat = 0;
    while ( $row = mysql_fetch_array( $result ) )
    {
        $NbVotant = $NbVotant + 1;
        $voteresultat = $voteresultat + $row['Vote_Choix'];
    }
    if ($NbVotant == 0)
    {
        $voteresultat = 0;
    }
    else
    {
        $voteresultat = $voteresultat / $NbVotant;
    }
    $vtp->addSession( $handle, 'voteeff' );
    $vtp->setGlobalVar( $handle, 'vote', $voteresultat );
    $vtp->setGlobalVar( $handle, 'nbvote', $NbVotant );
    $vtp->closeSession( $handle, 'voteeff' );
  }
  else
  {

  $vtp->addSession( $handle, 'vote' );
  $vtp->setGlobalVar( $handle, 'form_action', str_replace( '&', '&', $_SERVER['REQUEST_URI'] ) );
  $vtp->closeSession( $handle, 'vote' );
  }
}
// FIN SOURCE POUR LE VOTE------------------------------------------

Il faut aussi mettre en commentaire les lignes qui suivent le le code original cité plus haut :

//$picture_size = get_picture_size( $original_width, $original_height,
//                  $user['maxwidth'], $user['maxheight'] );
//$final_width  = $picture_size[0];
//$final_height = $picture_size[1];

Voici ensuite ce qu'il faut rajouter dans le fichier "picture.vtp" après les lignes suivantes

          <!--/VTP_modification-->
          {#frame_end}
          <div style="text-align:center;">{#back}</div>


Mon sources :

         <!--VTP_vote-->
                  <div style="text-align:center;margin-bottom:5px;">
                        <form name="form" method="post" action="{#form_action}">
                        <p><select size="1" name="note">
                        <option selected value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                        <option value="7">7</option>
                        <option value="8">8</option>
                        <option value="9">9</option>
                        <option value="10">10</option>
                        </select>
                        <input type="submit" name="vote" value="Votez" lang="fr" />
                        </p>
                  </div>
         <!--/VTP_vote-->


        <!--VTP_voteeff-->

             <div class="NBvote">
             </BR>
             <span style=font-size:10pt;>
             <font color=yellow face=verdana>
             Nb Votant    : {#nbvote}
             Resultat     : {#vote}/10</div>
             </p></font>
             </BR>

            </div>
         <!--/VTP_voteeff-->

Bon ensuite dernière manip, il faut créer la table avec la requette suivante:


CREATE TABLE `phptable_pc_vote` (
  `Vote_Id` int(11) unsigned NOT NULL auto_increment,
  `Vote_Id_Image` mediumint(8) unsigned NOT NULL default '0',
  `Vote_Id_User` varchar(15) NOT NULL default '',
  `Vote_Choix` int(1) unsigned NOT NULL default '0',
  `Vote_Date` datetime NOT NULL default '0000-00-00 00:00:00',
  UNIQUE KEY `Vote_Id` (`Vote_Id`),
  UNIQUE KEY `Vote_Clef_IdImag_IdUser` (`Vote_Id_Image`,`Vote_Id_User`),
  KEY `Vote_Id_Image` (`Vote_Id_Image`,`Vote_Id_User`)
) TYPE=MyISAM;


Voula c'est tout, c'est améliorable mais ce n'est qu'un début.
Si vous vous en servez passez moi un petit message pour me dire ce que vous en pensez à galerie1@free.fr ça me fera plaisir.

#7 2004-07-25 12:19:09

Marc 77
Membre
Nemours, France
2003-01-04
391

Re: Vote

Q'entend tu par "Créer la table"? Il faut mettre ton code à la suite, dans picture.php?


BSF Test
Dimage A1 AMD 2200Win XP Pro + SP2 PhpWg 1.3.2 IE 6

Hors ligne

#8 2004-07-25 12:33:56

Treddo
Invité

Re: Vote

Non, il faut allez dans la partie administration des tables et là tu execute la requette SQL que j'ai mis

#9 2004-07-25 18:53:33

Marc 77
Membre
Nemours, France
2003-01-04
391

Re: Vote

Ca marche nickel, sauf que j'ai du changer le nom de la table, car il cherchait phpwebgallery_pc_vote alors que dans ta requète c'est phptable_pc_vote.

D'autre part, l'affichage du nombre de votant est en jaune, sur mon fond blanc on ne voit rien. Je vais chercher où je peux changer la couleur.


BSF Test
Dimage A1 AMD 2200Win XP Pro + SP2 PhpWg 1.3.2 IE 6

Hors ligne

#10 2004-07-25 19:05:10

Marc 77
Membre
Nemours, France
2003-01-04
391

Re: Vote

Voilà j'ai trouvé pour le changement de couleur. C'est dans picture.vtp dans les lignes:
<!--VTP_voteeff-->

             <div class="NBvote">
             </BR>
             <span style=font-size:10pt;>
             <font color=red face=verdana>
             Nb Votant    : {#nbvote}
             Resultat     : {#vote}/10</div>
             </p></font>

Treddo, ton mod marche impec, si ce n'est ce nom de table.
Je propose que tu fasse un mod pour le proposer.


BSF Test
Dimage A1 AMD 2200Win XP Pro + SP2 PhpWg 1.3.2 IE 6

Hors ligne

#11 2004-07-25 19:18:13

laurie1681
Membre
2004-04-29
98

Re: Vote

ça a l'air super il y a une demo que je puisse voir avant de me lancer ?

Hors ligne

#12 2004-07-25 20:25:13

Treddo
Invité

Re: Vote

Effectivement, pour le nom de la table il faut changer dans la requette "phptable" par le nom que vous avez donnés a votre base (par défaut "PhpWebGallery")

Voici donc la requette avec le nom de la base par défaut:
-----------------------------------------------------------------------------------
CREATE TABLE `PhpWebGallery_pc_vote` (
  `Vote_Id` int(11) unsigned NOT NULL auto_increment,
  `Vote_Id_Image` mediumint(8) unsigned NOT NULL default '0',
  `Vote_Id_User` varchar(15) NOT NULL default '',
  `Vote_Choix` int(1) unsigned NOT NULL default '0',
  `Vote_Date` datetime NOT NULL default '0000-00-00 00:00:00',
  UNIQUE KEY `Vote_Id` (`Vote_Id`),
  UNIQUE KEY `Vote_Clef_IdImag_IdUser` (`Vote_Id_Image`,`Vote_Id_User`),
  KEY `Vote_Id_Image` (`Vote_Id_Image`,`Vote_Id_User`)
) TYPE=MyISAM;
-----------------------------------------------------------------------------------

Pour la demo, marc a très bien su le mettre en place sur son site http://www.dimage-a1.com/Gallery/identification.php

Sinon bienvenue sur le mien http://galerie1.free.fr/

#13 2004-07-25 21:26:05

laurie1681
Membre
2004-04-29
98

Re: Vote

je la vois pas sur celle de marc par contre sur le tiens treddo je vois mais c ou qu'on vote etc? enfin desolé j'essaie de me renseigner car toucher à la table sql prefere etre sure avant de me lancer
merci

Hors ligne

#14 2004-07-25 21:55:27

laurie1681
Membre
2004-04-29
98

Re: Vote

ah oui ok j'ai vu! on est obligé d'etre membre enregistré pour voter?
serait il possible de le permettre pour les invités aussi?

Hors ligne

#15 2004-07-25 23:34:42

Treddo
Invité

Re: Vote

Si tu veux que les visiteurs aient les memes droit, il faut enlever le début

------------------------------------------------------------------
if ( $user['is_the_guest'])
{
  //Ici je mets des petites images pour les visiteurs
  //     et il ne peuvent pas voter
  $picture_size = get_picture_size( $original_width, $original_height,
                  150, 150 );
  $final_width  = $picture_size[0];
  $final_height = $picture_size[1];
}
else
{
-------------------------------------------------------------------
et aussi la dernière accolade du source à ajouter.

Je ne te garantie pas que ca marche comme cela, je n'est pas essayé

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2024 · Contact