<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>
}\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
\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
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
}\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
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
\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
\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
// 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
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);
// 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));
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
/*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
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;
}
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
+ };
};
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
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() ->
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"}),
{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
% 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
{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