Changeset 20994 in spip-zone


Ignore:
Timestamp:
Jun 18, 2008, 12:29:44 PM (11 years ago)
Author:
brunobergot@…
Message:

un "peu" de ménage dans le plugin :

  • dans le formulaire notation.html on a maintenant du html et des boucles et non un tas de php
  • le php du formulaire passe dans balise/notation.php
  • on utilise les nouvelles fonctions sql_* donc le plugin nécessite CFG pour fonctionner en 192

Prochaines étape passer le formulaire en CVT, utiliser un script jquery star rating, continuer le ménage et étendre la notation à d'autres objets que les articles...

Location:
_plugins_/_dev_/notation
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_dev_/notation/balise/notation.php

    r16285 r20994  
    1111**/
    1212
     13include_spip('inc/notation_util');
     14include_spip('inc/vieilles_defs');
     15include_spip('balise/notation_balises');
     16
    1317if (!defined("_ECRIRE_INC_VERSION")) return;    #securite
    14 global $auteur_session;
     18
    1519
    1620function balise_NOTATION ($p) {
     
    1923
    2024function balise_NOTATION_stat($args, $filtres) {
     25        // Pas d'id_article ? Erreur de squelette
     26        if (!$args[0])
     27                return erreur_squelette(
     28                        _T('zbug_champ_hors_motif',
     29                                array ('champ' => '#NOTATION',
     30                                        'motif' => 'ARTICLES')), '');
    2131        return $args;
    2232}
    2333
    2434function balise_NOTATION_dyn($id_article=0, $auteur_session=array()) {
    25    return array(
    26        'formulaires/notation',
    27        0,
    28        array(
    29          'id_article'=>$id_article
    30        )
    31    );
     35       
     36        if ($GLOBALS["auteur_session"]) {
     37                $id_auteur = $GLOBALS['auteur_session']['id_auteur'];
     38        }else{
     39                $id_auteur = 0;
     40        }
     41
     42        $ip     = $_SERVER['REMOTE_ADDR'];
     43       
     44        //recuperation des champs
     45        $note = intval(_request('note'));
     46        $robot = _request('content');
     47        $id_donnees     = _request('id_donnees');
     48        $acces = notation_get_acces();
     49       
     50        $erreur = '';
     51
     52        //  s'assurer que l'article existe bien
     53        if (sql_countsel('spip_articles', 'id_article=' . sql_quote($id_article))){
     54               
     55                // Est-on autorise a voter
     56                $isauteur = ($statut=="0minirezo" || $statut=="1comite");
     57                if ($acces=='all')
     58                        $canvote= true;
     59                else{
     60                        $statut = $auteur_session['statut'];
     61                        if (($acces=='ide' && $statut!='') || ($acces=='aut' && isauteur) || ($acces=='adm' && $statut=="0minirezo"))
     62                                $canvote= true;
     63                }
     64               
     65                // On est en train de voter
     66                if ($canvote && ($id_donnees==$id_article) && $robot==''){      // Note correcte ?
     67                        if($note<1 || $note>notation_get_nb_notes()){
     68                                $erreur = _T('notation:note_hors_plage');
     69                        }else{
     70                                include_spip('base/abstract_sql');
     71                                include_spip('ecrire/inc_connect');
     72                                // Si pas inscrit : recuperer la note de l'article sur l'IP
     73                                if ($id_auteur == 0){
     74                                        $res = sql_select(
     75                                                'spip_notations.id_notation,spip_notations.id_auteur,spip_notations.note',
     76                                                'spip_notations',
     77                                                'id_article=' . sql_quote($id_article) . ' AND ip=' . sql_quote($ip)
     78                                                );
     79                                // Sinon rechercher la note de l'auteur
     80                                }else{
     81                                        $res = sql_select(
     82                                                'spip_notations.id_notation,spip_notations.id_auteur,spip_notations.note',
     83                                                'spip_notations',
     84                                                'id_article=' . sql_quote($id_article) . ' AND id_auteur=' . sql_quote($id_auteur)
     85                                                );
     86                                }
     87                                // Premier vote
     88                                if (sql_count($res) == 0){  // Remplir la table de notation
     89                                        sql_insertq('spip_notations', array(
     90                                                'id_article' => $id_article,
     91                                                'id_auteur' => $id_auteur,
     92                                                'ip' => $ip,
     93                                                'note' => $note
     94                                                ));
     95                                        $duchangement = true;
     96                                }else{  // Modifier la note
     97                                        $row = sql_fetch($res);
     98                                        // Seulement si elle a changee ou que l'auteur a change
     99                                        if ($row['note'] != $note || ($row['id_auteur'] != $id_auteur)){  // Un auteur non reference ne remplace pas la note d'un auteur reference
     100                                                if ($row['id_auteur'] == 0 || $id_auteur != 0){
     101                                                        sql_update('spip_notations', array(
     102                                                                'note' => $note,
     103                                                                'id_auteur' => $id_auteur),
     104                                                                'id_notation=' . sql_quote($row['id_notation'])
     105                                                                );
     106                                                        $duchangement = true;
     107                                                }
     108                                        }
     109                                }
     110                                // Calculer la nouvelle note de l'article
     111                                if ($duchangement){
     112                                        $res = sql_select(
     113                                                'spip_notations.id_article,spip_notations.note',
     114                                                'spip_notations',
     115                                                'id_article=' . sql_quote($id_article)
     116                                                );
     117                                        $lanote = 0;
     118                                        $total = 0;
     119                                        while ($row =sql_fetch($res)){
     120                                                $lanote += $row['note'];
     121                                                $total++;
     122                                        }
     123                                        $lanote = $lanote/$total;
     124                                        $lanote = intval($lanote*100)/100;
     125                                        $note = round($lanote);
     126                                        $note_ponderee = notation_ponderee ($lanote, $total);
     127                                        // Remplir la table de notation des articles
     128                                        sql_insertq('spip_notations_articles', array(
     129                                                'id_article' => $id_article,
     130                                                'note' => $note,
     131                                                'note_ponderee' => $note_ponderee,
     132                                                'nb' => $nb
     133                                                ));
     134                                        // Mettre ajour dans les autres cas
     135                                        sql_update('spip_notations_articles', array(
     136                                                'note' => $lanote,
     137                                                'note_ponderee' => $note_ponderee,
     138                                                'nb' => $total),
     139                                                'id_article=' . sql_quote($id_article)
     140                                                );
     141                                }
     142                        }
     143                }
     144                $res = sql_select(
     145                        'spip_notations_articles.id_article,spip_notations_articles.note_ponderee,spip_notations_articles.nb',
     146                        'spip_notations_articles',
     147                        'id_article=' . sql_quote($id_article)
     148                        );
     149                $lanote=0;
     150                $total=0;
     151                if ($row = sql_fetch($res)){
     152                        $lanote = $row['note_ponderee'];
     153                        $total = $row['nb'];
     154                }
     155                $note = round($lanote);
     156        }
     157
     158        return array(
     159                'formulaires/notation',
     160                0,
     161                array(
     162                        'id_article'=>$id_article,
     163                        'canvote'=>$canvote,
     164                        'note'=>$note,
     165                        'total'=>$total,
     166                        'erreur' => $erreur
     167                )
     168        );
    32169}
    33170
  • _plugins_/_dev_/notation/balise/notation_balises.php

    r16342 r20994  
    6666}
    6767
    68 // Affichage de la note sous forme d'etoiles
     68// Lles balises
     69
    6970function balise_NOTATION_ETOILE($p){
    70   // Parametre de la balise
    71   $param = interprete_argument_balise(1,$p);
    72   // Code...
    73         $p->code = "notation_etoile(".$param.")";
     71        $param = interprete_argument_balise(1,$p);
     72        $p->code = "notation_etoile($param)";
     73        $p->interdire_scripts = false;
     74        return $p;
     75}
     76
     77function balise_NOTATION_ETOILE_CLICK($p){
     78        $nb = interprete_argument_balise(1,$p);
     79        $id = interprete_argument_balise(2,$p);
     80        $p->code = "notation_etoile_click($nb,$id)";
    7481        $p->interdire_scripts = false;
    7582        return $p;
  • _plugins_/_dev_/notation/formulaires/notation.html

    r16390 r20994  
    1 <?php
    2 /**
    3 * Plugin Notation v.0.3
    4 * par JEM (jean-marc.viglino@ign.fr)
    5 *
    6 * Copyright (c) 2007
    7 * Logiciel libre distribue sous licence GNU/GPL.
    8 
    9 * Formulaire de notation : definit par la balise #NOTATION
    10 
    11 **/
     1#CACHE{0}
    122
    13 include_spip('inc/notation_util');
    14 include_spip('inc/vieilles_defs');
    15 include_spip('balise/notation_balises');
     3<div class="formulaire_notation">
    164
    17 // Recuperer les valeurs
    18 global $auteur_session;
    19 global $dejala;
    20 $article        = intval(#ENV{id_article,0});
    21 $auteur         = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
    22 $ip                     = $_SERVER['REMOTE_ADDR'];
    23 $note           = intval($_POST['note']);
    24 $robot          = $_POST['content'];            // Champ vide (contre les robots)
    25 $id_donnees     = $_POST['id_donnees'];
    26 $acces = notation_get_acces();
     5[(#ENV*{canvote}|?{' ',''})
     6        <form action="#SELF" method="post" id="notation#ID_ARTICLE" enctype="multipart/form-data" style="display:inline; padding:0; spacing:0; border:0">
     7                <div style="display:inline">
     8                        [(#NOTATION_ETOILE_CLICK{[(#ENV*{note})],[(#ENV*{id_article})]})]
     9                        <input type="hidden" name="id_donnees" id="id_donnees#ID_ARTICLE" value="#ID_ARTICLE" />
     10                        <input type="hidden" name="content" id="content#ID_ARTICLE" value="" />
     11                        [<span class="note">(#ENV*{total}) [(#ENV*{total}|>{1}|?{<:notation:votes:>,<:notation:vote:>})]</span>]
     12                </div>
     13        </form>
     14]
    2715
    28 // Afficher les erreurs dans le squelettes
    29 if (!$article) echo "<b style='color:red; background-color:yellow;'><:notation:err_balise:></b>";
    30 else {
    31 // s'assurer que l'article existe bien
    32 $query = "SELECT id_article FROM spip_articles WHERE id_article="._q($article);
    33 $res = spip_query($query);
    34 if (spip_num_rows($res) != 0)
    35 {       // Un seul formulaire par page !
    36         $dejala=true;
     16[(#ENV*{canvote}|?{'',' '})
     17        [(#NOTATION_ETOILE{#ENV*{note}})]
     18        [<span class="note">(#ENV*{total}) [(#ENV*{total}|>{1}|?{<:notation:votes:>,<:notation:vote:>})]</span>]
     19]
    3720
    38         // Est-on autorise a voter
    39   $isauteur = ($statut=="0minirezo" || $statut=="1comite");
    40   if ($acces=='all') $canvote= true;
    41   else
    42   {  $statut = $auteur_session['statut'];
    43      if (  ($acces=='ide' && $statut!='')
    44         || ($acces=='aut' && isauteur)
    45         || ($acces=='adm' && $statut=="0minirezo"))
    46         $canvote= true;
    47   }
    48 
    49         // On est en train de voter
    50         if ($canvote && ($id_donnees==$article) && $robot=='')
    51         {       // Note correcte ?
    52                 if($note<1 || $note>notation_get_nb_notes())
    53                 {    echo "<b style='color:red; background-color:yellow;'>La note doit &ecirc;tre comprise entre 1 et ".notation_get_nb_notes()." !</b><br/>";
    54                 }
    55                 else
    56                 {       include_spip('base/abstract_sql');
    57                         include_spip('ecrire/inc_connect');
    58             // Si pas inscrit : recuperer la note de l'article sur l'IP
    59             if ($auteur == 0) $query = "SELECT id_notation,id_auteur,note FROM spip_notations WHERE id_article="._q($article)." AND ip="._q($ip);
    60             // Sinon rechercher la note de l'auteur
    61             else $query = "SELECT id_notation,id_auteur,note FROM spip_notations WHERE id_article="._q($article)." AND id_auteur="._q($auteur);
    62             $res = spip_query($query);
    63             // Premier vote
    64             if (spip_num_rows($res) == 0)
    65       {  // Remplir la table de notation
    66                            $sql="INSERT INTO spip_notations(id_article, id_auteur, ip, note) VALUES ('$article', '$auteur', '$ip', '$note')";
    67                            $req = spip_query($sql); // or die('Erreur SQL !<br/>'.$sql.'<br/>'.mysql_error());
    68          $duchangement = true;
    69       }
    70       // On a deja vote pour cet article -> modifier
    71       else
    72       {  // Modifier la note
    73          $row =spip_fetch_array($res);
    74           // Seulement si elle a changee ou que l'auteur a change
    75          if ($row['note'] != $note || ($row['id_auteur'] != $auteur))
    76          {  // Un auteur non reference ne remplace pas la note d'un auteur reference
    77             if ($row['id_auteur'] == 0 || $auteur != 0)
    78             {  $sql = "UPDATE spip_notations SET note='$note',id_auteur='$auteur' WHERE id_notation="._q($row['id_notation']);
    79                spip_query($sql);
    80                $duchangement = true;
    81             }
    82          }
    83       }
    84 //                      echo "Merci de votre participation !<br />";
    85                         // Calculer la nouvelle note de l'article
    86                         if ($duchangement)
    87                         {  $query = "SELECT id_article,note FROM spip_notations WHERE id_article="._q($article);
    88                            $res = spip_query($query);
    89                            $lanote = 0;
    90                            $total = 0;
    91                            while ($row =spip_fetch_array($res))
    92                            {   $lanote += $row['note'];
    93                                      $total++;
    94          }
    95                            $lanote = $lanote/$total;
    96                            $lanote = intval($lanote*100)/100;
    97                            $note = round($lanote);
    98          $note_ponderee = notation_ponderee ($lanote, $total);
    99          //                     echo "Nouvelle NOTE : ".$lanote."<br />";
    100                            // Remplir la table de notation des articles
    101                            $sql="INSERT INTO spip_notations_articles(id_article, note, note_ponderee, nb) VALUES ('$article', '$lanote', '$note_ponderee', '$total')";
    102                            $req = spip_query($sql);
    103                            // Mettre ajour dans les autres cas
    104                            $sql="UPDATE spip_notations_articles SET note='$lanote',note_ponderee='$note_ponderee',nb='$total' WHERE id_article="._q($article);
    105                            $req = spip_query($sql);
    106                         }
    107                         //$deja_vote = true;
    108                 }
    109         }
    110 
    111         {       //----- Calculer la valeur de la note
    112                 $query = "SELECT id_article,note_ponderee,nb FROM spip_notations_articles WHERE id_article="._q($article);
    113                 $res = spip_query($query);
    114                 $lanote=0;
    115                 $total=0;
    116                 if ($row =spip_fetch_array($res))
    117                 { $lanote = $row['note_ponderee'];
    118                         $total = $row['nb'];
    119                 }
    120                 $note = round($lanote);
    121         }
    122 
    123         // Afficher les etoiles
    124         echo "<div class='formulaire_notation'>";
    125         if ($canvote) {
    126                 echo ("<form action='#SELF' method='post' id='notation".$article."' enctype='multipart/form-data' style='display:inline; padding:0; spacing:0; border:0'><div style='display:inline'>");
    127                 echo notation_etoile_click($lanote,$article);
    128                 echo ("<input type='hidden' name='id_donnees' id='id_donnees".$article."' value='".$article."' />");
    129                 echo ("<input type='hidden' name='content' id='content".$article."' value='' size='10' />");
    130         } else {
    131                 echo notation_etoile($lanote,$article);
    132         }
    133 
    134         if ($total > 1)
    135                 echo "<span class='note'>".$total." "._T('notation:votes')."</span>";
    136         else
    137                 echo "<span class='note'>".$total." "._T('notation:vote')."</span>";
    138 
    139 
    140         // Afficher le formulaire
    141         if ($canvote) {
    142                 echo ("</div></form>");
    143         }
    144         echo ("</div>");
    145 }
    146 }
    147 ?>
     21</div>
Note: See TracChangeset for help on using the changeset viewer.