ADD fin de 'communication.js'
authorGreg Burri <greg.burri@gmail.com>
Fri, 8 Aug 2008 20:29:46 +0000 (20:29 +0000)
committerGreg Burri <greg.burri@gmail.com>
Fri, 8 Aug 2008 20:29:46 +0000 (20:29 +0000)
index.yaws
js/client.js
js/communication.js
js/euphorik.js
js/pageMinichat/conversation.js
js/pageMinichat/pageMinichat.js
js/pageRegister.js
modules/erl/euphorik_bd_admin.erl
modules/erl/euphorik_protocole.erl

index 9f318dc..767a0b7 100755 (executable)
 
    <script type="text/javascript" src="js/betterjs.js" prod="delete"></script>
    <script type="text/javascript" src="js/comet.js" prod="delete"></script>
-   <script type="text/javascript" src="js/fragment.js" prod="delete"></script>\r
-   <script type="text/javascript" src="js/communication.js" prod="delete"></script>
+   <script type="text/javascript" src="js/fragment.js" prod="delete"></script>
 
    <script type="text/javascript" src="js/euphorik.js"></script>
 
+   <script type="text/javascript" src="js/communication.js" prod="delete"></script>
    <script type="text/javascript" src="js/conf.js" prod="delete"></script>
    <script type="text/javascript" src="js/util.js" prod="delete"></script>
    <script type="text/javascript" src="js/formateur.js" prod="delete"></script>
index 93e5dae..e01be9e 100644 (file)
@@ -161,40 +161,6 @@ euphorik.Client.prototype.supprimerConversation = function(num) {
    }\r
 };\r
 \r
-euphorik.Client.prototype.getJSONLogin = function(login, password) {\r
-   return {\r
-      "header" : { "action" : "authentification", "version" : euphorik.conf.versionProtocole },\r
-      "login" : login,\r
-      "password" : password\r
-   };\r
-};\r
-\r
-euphorik.Client.prototype.getJSONLoginCookie = function() {\r
-   return {\r
-      "header" : { "action" : "authentification", "version" : euphorik.conf.versionProtocole },\r
-      "cookie" : this.cookie\r
-   };\r
-}; \r
-\r
-/**\r
-  * le couple (login, password) est facultatif. S'il n'est pas fournit alors il ne sera pas possible\r
-  * de s'autentifier avec (login, password).\r
-  */\r
-euphorik.Client.prototype.getJSONEnregistrement = function(login, password) {\r
-   var mess = {\r
-      "header" : { "action" : "register","version" : euphorik.conf.versionProtocole }\r
-   };\r
-   \r
-   if (login && password) {\r
-      mess.login = login;\r
-      mess.password = password;\r
-   }\r
-   \r
-   mess.profile = this.getJSONProfileInfos();\r
-   \r
-   return mess;\r
-};\r
-\r
 euphorik.Client.prototype.getJSONConversations = function() {\r
    var conversations = [];\r
    this.conversations.each(function(i, conv) {\r
@@ -205,7 +171,6 @@ euphorik.Client.prototype.getJSONConversations = function() {
 \r
 euphorik.Client.prototype.getJSONProfile = function() {\r
    return {\r
-      "header" : { "action" : "set_profile", "version" : euphorik.conf.versionProtocole },\r
       "cookie" : this.cookie,\r
       "login" : this.login,\r
       "password" : this.password,\r
@@ -291,11 +256,11 @@ euphorik.Client.prototype.connexionCookie = function() {
    if (!this.cookie) {\r
       return false;\r
    }\r
-   return this.connexion(this.getJSONLoginCookie());\r
+   return this.connexion("authentification", { "cookie" : this.cookie });\r
 };\r
 \r
 euphorik.Client.prototype.connexionLogin = function(login, password) {\r
-   return this.connexion(this.getJSONLogin(login, password));\r
+   return this.connexion("authentification", {"login" : login, "password" : password });\r
 };\r
 \r
 euphorik.Client.prototype.enregistrement = function(login, password) { \r
@@ -308,10 +273,27 @@ euphorik.Client.prototype.enregistrement = function(login, password) {
       }\r
       return false;\r
    } else {\r
-      return this.connexion(this.getJSONEnregistrement(login, password));\r
+      return this.connexion("register", this.getJSONEnregistrement(login, password));\r
    }\r
 };\r
 \r
+/**\r
+  * le couple (login, password) est facultatif. S'il n'est pas fournit alors il ne sera pas possible\r
+  * de s'autentifier avec (login, password).\r
+  */\r
+euphorik.Client.prototype.getJSONEnregistrement = function(login, password) {\r
+   var mess = {};\r
+   \r
+   if (login && password) {\r
+      mess.login = login;\r
+      mess.password = password;\r
+   }\r
+   \r
+   mess.profile = this.getJSONProfileInfos();\r
+   \r
+   return mess;\r
+};\r
+\r
 /**\r
   * Connexion. Réalisée de manière synchrone.\r
   */\r
@@ -324,10 +306,11 @@ euphorik.Client.prototype.connexion = function(action, messageJson) {
       function(data) {\r
          thisClient.chargerDonnees(data);\r
       },\r
-      function() {\r
+      function(data) {\r
          thisClient.util.messageDialogue(data.error_message);\r
          thisClient.delCookie(); // suppression du cookie actuel, cas où le cookie du client ne permet pas une authentification\r
-      }\r
+      },\r
+      false\r
    );\r
    return this.authentifie();\r
 };\r
@@ -389,22 +372,19 @@ euphorik.Client.prototype.flush = function(async) {
 \r
    var thisClient = this;\r
    var ok = true;\r
-   jQuery.ajax({\r
-      async: async,\r
-      type: "POST",\r
-      url: "request",\r
-      dataType: "json",\r
-      data: this.util.jsonVersAction(this.getJSONProfile()),\r
-      success:\r
-         function(data) {\r
-            if (data.reply === "error") {\r
-               thisClient.util.messageDialogue(data.error_message);\r
-               ok = false;\r
-            } else {\r
-               thisClient.majBulle();\r
-            }\r
-         }\r
-   });\r
+   \r
+   this.communication.requete(\r
+      "set_profile",\r
+      this.getJSONProfile(),\r
+      function(data) {\r
+         thisClient.majBulle();         \r
+      },\r
+      function(data) {\r
+         thisClient.util.messageDialogue(data.error_message);\r
+         ok = false;\r
+      },\r
+      async\r
+   );\r
    \r
    return ok;\r
 };\r
@@ -462,51 +442,15 @@ euphorik.Client.prototype.majLogo = function() {
 \r
 euphorik.Client.prototype.slap = function(userId, raison) {\r
    var thisClient = this;\r
-   \r
-   jQuery.ajax({\r
-      type: "POST",\r
-      url: "request",\r
-      dataType: "json",\r
-      data: this.util.jsonVersAction({\r
-         "header" : { "action" : "slap", "version" : euphorik.conf.versionProtocole },\r
-         "cookie" : thisClient.cookie,\r
-         "user_id" : userId,\r
-         "reason" : raison\r
-      }),\r
-      success: \r
-         function(data) {\r
-            if (data.reply === "error") {\r
-               thisClient.util.messageDialogue(data.error_message);\r
-            }\r
-         }\r
-   });\r
+   this.communication.requete("slap", { "cookie" : thisClient.cookie, "user_id" : userId, "reason" : raison });\r
 };\r
 \r
-euphorik.Client.prototype.ban = function(userId, raison, minutes)\r
-{\r
+euphorik.Client.prototype.ban = function(userId, raison, minutes) {\r
    var thisClient = this;\r
 \r
    // par défaut un ban correspond à 3 jours\r
    minutes = minutes || euphorik.conf.tempsBan;\r
-      \r
-   jQuery.ajax({\r
-      type: "POST",\r
-      url: "request",\r
-      dataType: "json",\r
-      data: this.util.jsonVersAction({\r
-         "header" : { "action" : "ban", "version" : euphorik.conf.versionProtocole },\r
-         "cookie" : thisClient.cookie,\r
-         "duration" : minutes,\r
-         "user_id" : userId,\r
-         "reason" : raison\r
-      }),\r
-      success: \r
-         function(data) {\r
-            if (data.reply === "error") {\r
-               thisClient.util.messageDialogue(data.error_message);\r
-            }\r
-         }\r
-   });\r
+   this.communication.requete("ban", { "cookie" : thisClient.cookie, "duration" : minutes, "user_id" : userId, "reason" : raison });\r
 };\r
 \r
 euphorik.Client.prototype.kick = function(userId, raison) {\r
index db9beb8..e472ccb 100644 (file)
 // You should have received a copy of the GNU General Public License\r
 // along with Euphorik.  If not, see <http://www.gnu.org/licenses/>.\r
 \r
-// regroupe la partie communication client -> sevreur de euphorik.\r
+// Regroupe la partie communication JSON client -> serveur de euphorik.\r
+// Voir : http://dev.euphorik.ch/wiki/euk/Protocole\r
 \r
 /**\r
   * @param funError un fonction executé lors d'un réponse 'error' de la part du serveur, peut être redéfinit pour une requête.\r
   */\r
-euphorik.Communication = function(util, funError) {\r
+euphorik.Communication = function(funError) {\r
+   this.funError = funError;\r
 }\r
 \r
-euphorik.Communication.prototype.getBase = function(action) {\r
-   this.base = {\r
-      "header" : { "action" : action, "version" : euphorik.conf.versionProtocole }\r
-   };\r
-}\r
-\r
-euphorik.Communication.prototype.requete = function(action, json, funOk, funError, asynchrone) {\r
+euphorik.Communication.prototype.requete = function(action, json, funOk, funError, asynchrone, paramsSupp) {\r
+   var thisCommunication = this;\r
    if (asynchrone === undefined) {\r
       asynchrone = true; // asynchrone par défaut\r
    }\r
 \r
-   var mess = this.getbase(action);\r
+   var mess = this.getBase(action);\r
    objectEach(json, function(nom, val) {\r
       mess[nom] = val;\r
    });\r
-   \r
-   jQuery.ajax({\r
+      \r
+   paramsAjax = {\r
       async: asynchrone,\r
       type: "POST",\r
       url: "request",\r
       dataType: "json",\r
-      data: { action : JSON.stringify(mess) }\r
+      data: { action : JSON.stringify(mess) },\r
       success:\r
          function(data) {\r
             if (data.reply === "error") {\r
                if (funError) {\r
                   funError(data);\r
-               } else if (this.funError) {\r
-                  this.funError(data);\r
-               }               \r
+               } else if (thisCommunication.funError) {\r
+                  thisCommunication.funError(data);\r
+               }\r
             } else if (funOk) {\r
                funOk(data)\r
             }\r
          }\r
-   });\r
+   };\r
+       \r
+   if (paramsSupp) {\r
+      objectEach(paramsSupp, function(nom, val) {\r
+         paramsAjax[nom] = val;\r
+      });\r
+   }\r
+   \r
+   jQuery.ajax(paramsAjax);\r
+}\r
+\r
+euphorik.Communication.prototype.getBase = function(action) {\r
+   return {\r
+      "header" : { "action" : action, "version" : euphorik.conf.versionProtocole }\r
+   };\r
 }\r
index 4a9261a..00227cd 100755 (executable)
@@ -26,8 +26,8 @@ $(document).ready(
    function() { 
       var fragment = new Fragment();
       var formateur = new euphorik.Formateur();
-      var util = new euphorik.Util(formateur); \r
-      var communication = new Communication();
+      var util = new euphorik.Util(formateur); 
+      var communication = new euphorik.Communication(function(data) { util.messageDialogue(data.error_message); });
       var client = new euphorik.Client(util, communication);
       var pages = new euphorik.Pages(fragment);
       
@@ -61,7 +61,7 @@ $(document).ready(
       // TODO : simplifier et pouvoir créer des liens par exemple : <span class="lien" href="conditions">Conditions d'utilisation</span>
       $("#footer .conditions").click(function(){ pages.afficherPage("conditions_utilisation"); });
       
-      pages.ajouterPage(new euphorik.PageMinichat(client, formateur, util), true);
+      pages.ajouterPage(new euphorik.PageMinichat(client, formateur, util, communication), true);
       pages.ajouterPage(new euphorik.PageAdmin(client, formateur, util));
       pages.ajouterPage(new euphorik.PageProfile(client, formateur, util));
       pages.ajouterPage(new euphorik.PageRegister(client, formateur, util));
index 645c4d5..70f8d2b 100644 (file)
@@ -318,7 +318,7 @@ euphorik.Conversation.prototype.attacherEventsSurMessage = function(element) {
       var top = $(this).offset().top\r
       var left = $(this).offset().left + $(this).width() - thisConversation.util.outilsMessage.width()\r
       thisConversation.util.outilsMessage.css("top", top + 1).css("left", left).prependTo(this).show();\r
-      TODO\r
+      //TODO\r
       //\r
       // extraction d'une conversation\r
       /*if ($(event.target).is(".extraire")) {\r
index d289a99..e952281 100755 (executable)
  
 /*jslint laxbreak:true */
 
-euphorik.PageMinichat = function(client, formateur, util) {
+euphorik.PageMinichat = function(client, formateur, util, communication) {
    this.nom = "minichat";
    
    this.client = client;
    this.formateur = formateur;
    this.util = util;
+   this.communication = communication;
    this.commandes = new euphorik.Commandes(this.client);
    
    // permet d'éviter d'envoyer plusieurs messages simultanément en pressant
@@ -226,22 +227,6 @@ euphorik.PageMinichat.prototype.decharger = function() {
     this.fragment.delVal("conv")
 };
 
-
-euphorik.PageMinichat.prototype.getJSONMessage = function(pseudo, message) {
-   var repondA = [];
-   objectEach(this.conversations.messagesRepond, function(id) {
-      repondA.push(parseInt(id, 10));
-   });
-      
-   return {
-      "header" : { "action" : "put_message", "version" : euphorik.conf.versionProtocole },
-      "cookie" : this.client.cookie,
-      "nick" : pseudo,
-      "content" : message,
-      "answer_to" : repondA
-   };
-};
-
 euphorik.PageMinichat.prototype.envoyerMessage = function(pseudo, message) {   
    var thisPageMinichat = this;
 
@@ -275,38 +260,52 @@ euphorik.PageMinichat.prototype.envoyerMessage = function(pseudo, message) {
    }
    this.envoieMessageEnCours = true;
    
-   jQuery.ajax({
-      url : "request", 
-      type: "POST",
-      data : this.util.jsonVersAction(this.getJSONMessage(pseudo, message)),
-      dataType : "json",
-      beforeSend : function(xmlHttpRequest) {
-         // TODO : ça marche ça ??
-         xmlHttpRequest.setRequestHeader("X-Requested-With", "");
-      },
-      success : function(data, textStatus) {         
-         if(data.reply === "ok") {
-            // TODO : revoir cette partie
-            // met à jour la classe des messages auquel repond celui ci (c'est un peu de la triche) TODO : ya mieux ?
-            objectEach(thisPageMinichat.conversations.messagesRepond, function(messId) {
-               thisPageMinichat.conversations.conversations.each(function(i, conv) {
-                  var mess = conv.messagesParId[messId];
-                  if (mess) {
-                     mess.clientARepondu = true;
-                     $("#conversations #" + mess.getId(conv.getId())).addClass("repondu")
-                  }
-               });
+   this.communication.requete(
+      "put_message",
+      this.getJSONMessage(pseudo, message),
+      function() {
+         // TODO : revoir cette partie
+         // met à jour la classe des messages auquel repond celui ci (c'est un peu de la triche) TODO : ya mieux ?
+         objectEach(thisPageMinichat.conversations.messagesRepond, function(messId) {
+            thisPageMinichat.conversations.conversations.each(function(i, conv) {
+               var mess = conv.messagesParId[messId];
+               if (mess) {
+                  mess.clientARepondu = true;
+                  $("#conversations #" + mess.getId(conv.getId())).addClass("repondu")
+               }
             });
-            
-            $("form#posterMessage input.message").val("");
-            thisPageMinichat.conversations.enleverMessagesRepond();
-         } else if (data.reply === "error") {
-            thisPageMinichat.util.messageDialogue(data.error_message);
-         }
+         });
+         $("form#posterMessage input.message").val("");
+         thisPageMinichat.conversations.enleverMessagesRepond(); 
          thisPageMinichat.envoieMessageEnCours = false;
       },
-      error : function() {
+      function(data) {
+         thisPageMinichat.util.messageDialogue(data.error_message);
          thisPageMinichat.envoieMessageEnCours = false;
+      },
+      true,
+      {
+         beforeSend : function(xmlHttpRequest) {
+            // TODO : ça marche ça ??
+            xmlHttpRequest.setRequestHeader("X-Requested-With", "");
+         },
+         error : function() {
+            thisPageMinichat.envoieMessageEnCours = false;
+         }
       }
+   );
+};
+
+euphorik.PageMinichat.prototype.getJSONMessage = function(pseudo, message) {
+   var repondA = [];
+   objectEach(this.conversations.messagesRepond, function(id) {
+      repondA.push(parseInt(id, 10));
    });
+      
+   return {
+      "cookie" : this.client.cookie,
+      "nick" : pseudo,
+      "content" : message,
+      "answer_to" : repondA
+   };
 };
index 37f7705..e28e3d3 100755 (executable)
@@ -69,7 +69,7 @@ euphorik.PageRegister.prototype.charger = function() {
             thisPage.util.messageDialogue("Un mot de passe est obligatoire");\r
          } else if (password !== passwordRe) {\r
             thisPage.util.messageDialogue("Les mots de passes ne correspondent pas");\r
-         } else if(thisPage.client.enregistrement(login, thisPage.util.md5(password))) {   \r
+         } else if (thisPage.client.enregistrement(login, thisPage.util.md5(password))) {   \r
             thisPage.util.messageDialogue("Enregistrement réussi");\r
             thisPage.pages.afficherPage("minichat");\r
          }\r
index 20da1fa..616ac4d 100644 (file)
@@ -141,7 +141,8 @@ reset() ->
       User = #user{id = 0, profile = #profile{pseudo = "Sys"}, login = "Sys", date_creation = now(), date_derniere_connexion = now(), ek_master = true},
       mnesia:write(User),
       User
-   end).
+   end),
+   peupler_texte().
    
    
 peupler_texte() ->
@@ -153,9 +154,9 @@ peupler_texte() ->
       mnesia:write(#texte{ id = 50, fr = "Impossible de mettre à jour le profile"}),
       mnesia:write(#texte{ id = 60, fr = "timeout"}),
       mnesia:write(#texte{ id = 70, fr = "Page inconnue"}),
-      mnesia:write(#texte{ id = 80, fr = "Vous êtes banni pour encore ~w"}),
+      mnesia:write(#texte{ id = 80, fr = "Vous êtes banni pour encore ~s"}),
       mnesia:write(#texte{ id = 90, fr = "Message vide"}),
-      mnesia:write(#texte{ id = 100, fr = "Impossible d'ajouter un nouveau message. Raison : ~w"}),
+      mnesia:write(#texte{ id = 100, fr = "Impossible d'ajouter un nouveau message. Raison : ~s"}),
       mnesia:write(#texte{ id = 110, fr = "Utilisateur inconnu"}),
       mnesia:write(#texte{ id = 120, fr = "Il n'est pas possible de s'auto bannir"}),
       mnesia:write(#texte{ id = 130, fr = "L'utilisateur est lui même un ekMaster"}),
index 82a4fce..4f30ae7 100755 (executable)
@@ -426,7 +426,7 @@ put_message(
       {ok, User} ->\r
          case euphorik_bd:est_banni(User#user.id) of\r
             {true, Temps_restant} ->\r
-               erreur(80, format_minutes(Temps_restant));\r
+               erreur(80, [format_minutes(Temps_restant)]);\r
             _ ->\r
                Strip_content = string:strip(Content),\r
                if Strip_content =:= [] ->\r
@@ -435,7 +435,7 @@ put_message(
                      % attention : non-atomique (update_pseudo+nouveau_message)\r
                      euphorik_bd:update_pseudo_user(User#user.id, Nick),\r
                      case euphorik_bd:nouveau_message(Strip_content, User#user.id, Answer_to) of\r
-                        {erreur, R} -> erreur(100, R);\r
+                        {erreur, R} -> erreur(100, [R]);\r
                         _ ->\r
                            json_reponse_ok()\r
                      end\r
@@ -531,9 +531,9 @@ put_troll(
       {ok, User = #user{ek_master = true}} ->\r
          case euphorik_bd:put_troll(User#user.id, Content) of\r
             max_troll_reached_per_user ->\r
-               erreur(180, ?NB_MAX_TROLL_WAITING_BY_USER);\r
+               erreur(180, [?NB_MAX_TROLL_WAITING_BY_USER]);\r
             max_troll_reached ->\r
-               erreur(190, ?NB_MAX_TROLL_WAITING);\r
+               erreur(190, [?NB_MAX_TROLL_WAITING]);\r
             _Id ->\r
                json_reponse_ok()\r
          end;\r