REPORT de la branche 1.0
authorGreg Burri <greg.burri@gmail.com>
Thu, 5 Jun 2008 06:37:19 +0000 (06:37 +0000)
committerGreg Burri <greg.burri@gmail.com>
Thu, 5 Jun 2008 06:37:19 +0000 (06:37 +0000)
doc/TODO.txt
js/pageAdmin.js
js/pageMinichat.js
modules/Makefile
modules/erl/euphorik_bd.erl
modules/erl/euphorik_minichat_conversation.erl
modules/erl/euphorik_protocole.erl
pages/about.html

index faa7d24..4ee5180 100755 (executable)
@@ -4,9 +4,9 @@
 * Cleaner le code (erl, js, xhtml, css) et eventuellement profiler un peu (le refresh est lent sous opera)
 * Pouvoir afficher les utilisateurs (print_users(admin)) qui sont admin\r
    * Afficher l'ip dans le print_users().\r
-* Limiter la mise en évidence de la conversation lorsque le curseur se trouve sur les pseudos\r
-* Mettre dans la FAQ la signification des couleurs associées aux messages.\r
+* Limiter la mise en évidence de la conversation lorsque le curseur se trouve sur les pseudos
 * Enlever le petit carré mis en couleur et mettre le pseudo + date en couleur à la place\r
+* Mettre dans la FAQ la signification des couleurs associées aux messages.\r
 * Ne pas pouvoir poster avec "<nick>"\r
 * Lorsque le curseur se trouve sur le nom d'une personne à qui l'on répond n'highliter que cette conversation !! (très bonne idée)\r
 === v1.1 ===\r
 2 : Urgent
 3 : Peu grave\r
 \r
+[1] Il arrive qu'après le poste d'un message le refresh ne se fasse plus, peut-être une "race-condition" dans la classe PageEvent de euphorik.js\r
+[1] Après être passé de la page Admin à Chat le client continu de réaliser de temps en temp des requêtes "lists_banned_ips"\r
+   * action=%7B%22action%22%3A%22list_banned_ips%22%2C%22cookie%22%3A%22<<cookie>>%22%7D\r
 [1] Traiter les tags TODO et FIXME dans le code
 [2] Le changement de skin n'est pas mémorisé lorsque l'on est pas connecté (normal puisque le style est mémorisé dans le profil)
    * solution 1 : permettre le changement de skin uniquement pour les personnes enregistré ?
index faf5f8c..97c0243 100644 (file)
@@ -33,7 +33,7 @@ PageAdmin.prototype.contenu = function()
 {
    return '<h1>Trolls</h1>\
    <p>Un troll est un sujet à débat, en général une question, affiché sur la page principale.</p>\
-   <p>Chaque semaine un troll est choisit au hasard parmis les trolls proposés et devient le troll de la semaine.</p>\
+   <p>Chaque semaine un troll est choisi au hasard parmis les trolls proposés et devient le troll de la semaine.</p>\
    <form action="" id="nouveauTroll">\
       <p>\
          <input class="troll" name="troll" type="text" maxlength="500" value=""></input>\
index adf5c5a..53f4ab2 100755 (executable)
@@ -377,12 +377,20 @@ function Conversation(num, util, formateur, client)
       function(){},
       function(event)
       {
-         $("#conversations .message").removeClass("cache")
-         thisConversation.messageOver = null
+         thisConversation.enleverMiseEnEvidence()
       }
    )
 }
 
+/**
+  *
+  */
+Conversation.prototype.enleverMiseEnEvidence = function()
+{
+   $("#conversations .message").removeClass("cache")
+   this.messageOver = null
+}
+
 /**
   * Défini la page courante et s'il l'on se trouve sur la dernière page.
   * @pageCourante la page courante
@@ -594,40 +602,49 @@ Conversation.prototype.flush = function(funClickOuvrirConv)
          
          thisConversation.util.infoBulle("Extraction de la conversation", $(".extraire", this))
          
+         // l'id du message
+         var idMess36 = $(this).attr("id").substr(4)
+         var idMess = parseInt(idMess36, 36)
+         
          $(this).click(
             function(event)
             {
                if ($(event.target).is("a") || $(event.target).parents("#outilsBan").length > 0) return
-               
-               // l'id du message
-               var idMess = $(this).attr("id").substr(4)
-               
+                              
                // extraction d'une conversation
                if ($(event.target).is(".extraire"))
                {
-                  funClickOuvrirConv(parseInt(idMess, 36))
+                  funClickOuvrirConv(idMess)
                   return
                }
             
                var valCourant = $("input.message").val()
                if (valCourant == undefined) valCourant = ""
-               var tag = $(".pseudo span.ident", this).text()  + "{" + idMess + "}" + ">"
+               var tag = $(".pseudo span.ident", this).text()  + "{" + idMess36 + "}" + ">"
                if (valCourant.indexOf(tag, 0) == -1)
                   $("input.message").val(tag + " " + valCourant)
                thisConversation.util.setCaretToEnd($("form input.message")[0])
             }
          )
+         
          // Q : pourquoi pas un .hover ?
          // R : simplement pour éviter que lorsqu'un message arrive cela n'affecte la conversation actuellement mise en évidence (uniquement pour Firefox)
-         .mousemove(
+         $(".entete", this).mousemove(
             function(e)
             {
                if (this !== thisConversation.messageOver)
                {
-                  thisConversation.afficherConversation(this)
+                  thisConversation.afficherConversation(idMess)
                   thisConversation.messageOver = this
                }
             }
+         ).hover(
+            function(){},
+            // quand on sort de l'entête du message la mise en évidence est enlevée
+            function()
+            {
+               thisConversation.enleverMiseEnEvidence()            
+            }
          )
       }
    )
@@ -645,13 +662,10 @@ Conversation.prototype.flush = function(funClickOuvrirConv)
 /**
   * Etablit une liste des messages à mettre en evidence et des messages à cacher.
   * Puis applique un plan diabolique.
-  * @param element un message de la liste des messages
+  * @param id l'id du message
   */
-Conversation.prototype.afficherConversation = function(element)
-{
-   // cherche le message selectionné
-   var id = parseInt($(element).attr("id").substr(4), 36)
-   
+Conversation.prototype.afficherConversation = function(id)
+{   
    var message = this.messagesParId[id]
    if (message == undefined) return
       
index 4f808db..731cd71 100755 (executable)
@@ -16,6 +16,7 @@ $(rep_ebin)/euphorik_minichat_conversation.beam \
 $(rep_ebin)/euphorik_requests.beam \\r
 $(rep_ebin)/euphorik_protocole.beam \
 $(rep_ebin)/euphorik_daemon.beam \
+$(rep_ebin)/euphorik_common.beam \
 $(rep_ebin)/euphorik_test.beam
 \r
 # Module pour la gestion des données persistante la BD\r
@@ -42,6 +43,10 @@ $(rep_ebin)/euphorik_protocole.beam: $(rep_erl)/euphorik_protocole.erl $(rep_inc
 $(rep_ebin)/euphorik_daemon.beam: $(rep_erl)/euphorik_daemon.erl $(rep_include)/euphorik_defines.hrl\r
        erlc $(erlc_params)
    
+# Module avec plein de bordel dedant
+$(rep_ebin)/euphorik_common.beam: $(rep_erl)/euphorik_common.erl
+       erlc $(erlc_params)
+   
 # Module dédié au tests
 $(rep_ebin)/euphorik_test.beam: $(rep_erl)/euphorik_test.erl $(rep_erl)/euphorik_bd.erl $(rep_include)/euphorik_bd.hrl
        erlc $(erlc_params)\r
index 46cefed..2b18d5b 100755 (executable)
@@ -57,7 +57,6 @@
    messages/2,\r
    messages/3,
    message_by_id/1,
-   message_by_id_sans_transaction/1,
    messages_by_ids/1,
    message_existe/1,
    reponses/0,
@@ -331,14 +330,16 @@ print_users() ->
    
    
 print_user(User) when is_record(User, user) ->
-   #user{id = Id, pseudo = Pseudo, login = Login, ek_master = Ek_master, date_derniere_connexion = Date} = User,
+   #user{id = Id, pseudo = Pseudo, login = Login, ek_master = Ek_master, date_derniere_connexion = Date, last_ip = IP} = User,
    {{Annee, Mois, Jour}, {Heure, Min, _}} = calendar:now_to_local_time(Date),
    io:format(
-      "~4w : ~10.10..s~10.10..s ~2w.~2.2.0w.~w - ~2wh~2.2.0w~n",
+      % id        pseudo     (login)        IP  Jour  Mois   Année  Heure Minute
+      "~4w : ~10.10..s(~10.10..s) ~s ~2w.~2.2.0w.~w - ~2wh~2.2.0w~n",
       [  
          Id,
          if Ek_master -> "*"; true -> "" end ++ Pseudo,
-         "(" ++ Login ++ ")",
+         Login,
+         euphorik_common:serialize_ip(IP),
          Jour, Mois, Annee, Heure, Min
       ]
    );
@@ -542,15 +543,13 @@ messages(Id, N, P) ->
 message_by_id(Id) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
-         message_by_id_sans_transaction(Id)
+         case mnesia:read({minichat, Id}) of
+            [] -> erreur;
+            [M] ->
+               {ok, M#minichat{contenu = contenu_message(M)}}
+         end
       end
    )).
-message_by_id_sans_transaction(Id) ->
-   case mnesia:read({minichat, Id}) of
-      [] -> erreur;
-      [M] ->
-         {ok, M#minichat{contenu = contenu_message(M)}}
-   end.
    
    
 % Renvoie le contenu d'un message donnée, à utiliser à l'intérieur d'une transaction.
index 60f92e4..6f2f2be 100755 (executable)
@@ -84,7 +84,7 @@ mise_en_forme_conversation(Messages) ->
       fun() ->
          lists:foldr(
             fun(Id, Acc) ->
-               case euphorik_bd:message_by_id_sans_transaction(Id) of
+               case euphorik_bd:message_by_id(Id) of
                   {ok, Message} ->
                      [{Message, parents(Id)} | Acc];
                   _ ->
index d99e4cc..ae79d84 100755 (executable)
@@ -555,7 +555,7 @@ unban_ip(
 ) ->
    case euphorik_bd:user_by_cookie(Cookie) of
       {ok, #user{ek_master = true}} ->
-         euphorik_bd:deban(unserialize_ip(IP)),
+         euphorik_bd:deban(euphorik_common:unserialize_ip(IP)),
          json_reponse_ok();
       _ ->
          erreur("Seul les ekMaster peuvent connaitre la liste des ips bannies")
@@ -577,7 +577,7 @@ list_banned_ips(
                   fun({IP, T, Users}) ->
                      {struct,
                         [
-                           {ip, serialize_ip(IP)},
+                           {ip, euphorik_common:serialize_ip(IP)},
                            {remaining_time, format_minutes(T)},
                            {users, {array, lists:map(
                               fun({Pseudo, Login}) ->
@@ -611,17 +611,6 @@ erreur(Message) ->
       ]
    }.
    
-
-serialize_ip(IP) ->
-   lists:flatten(io_lib:format("~w.~w.~w.~w", tuple_to_list(IP))).
-   
-   
-unserialize_ip(IP) ->
-   case io_lib:fread("~d.~d.~d.~d", IP) of
-      {ok, [A, B, C, D], []} -> {A, B, C, D};
-      _  -> erreur
-   end.
-   
    
 % Formatage de minutes.
 % par exemple : "1min", "45min", "1h23min", "1jour 2h34min"
index db98b68..c142b72 100644 (file)
@@ -15,7 +15,7 @@
 \r
 \r
 <h3>C'est quoi un "troll de la semaine" ?</h3>\r
-<p>Simplement un sujet de débat à tendance trollifique. Chaque lundi à 3 heure du matin un nouveau troll est choisit au hasard parmis ceux proposés par les administrateurs.</p>\r
+<p>Simplement un sujet de débat à tendance trollifique. Chaque lundi à 3 heure du matin un nouveau troll est choisi au hasard parmis ceux proposés par les administrateurs.</p>\r
 \r
 
 <h3>Quels-sont les navigateurs supportés ?</h3>