[ok] Ne pas effacer le message (dans le <input>) si l'on recoit un "pas ok" lors de l'envoie\r
\r
* Transfert des messages XML (AJAX) en https et le noter dans la faq (même la mafia chinoise ne peut pas sniffer les messages)
-* Problème d'utf-8 avec opera
+* Problème d'utf-8 avec opera\r
+ * Problème d'utf-8 avec firefox et konqueror (voir peut être du coté de <script charset="utf-8"...)\r
+* Tester avec des caractères exotiques (jap, coréen, etc..)
* Utiliser une listbox pour la liste de css
-* Ralentir volontairement le connexion lors d'un mauvais login \r
+* Ralentir volontairement le connexion lors d'un mauvais login (ou après n mauvais login)\r
* Shift-enter pour ajouter une ligne dans la ligne de saisie (retour à la ligne)\r
- * Crée un <br /> XHTML\r
+ * Crée un <br /> XHTML\r
* réduire les pseudo trop long en mettant un ".." à la fin et permettre de le voir en entier lorsque le curseur le survol.\r
-* Problème d'utf-8 avec firefox et konqueror (voir peut être du coté de <script charset="utf-8"...)\r
-* Tester avec des caractères exotiques (jap, coréen, etc..)\r
* Rendre compatible IE 7\r
* Pouvoir switcher entre un affichage "pseudo" ou "pseudo (login)"
* Faire une page faq et raconter n'importe quoi (entre autre la limitation avec firefox) "pourquoi ce site à des couleurs qui ne veulent rien dire ?"\r
* "interrogation" genre http://forum-images.hardware.fr/icones/confused.gif\r
* http://forum-images.hardware.fr/images/perso/dao.gif ou http://forum-images.hardware.fr/icones/redface.gif\r
* http://forum-images.hardware.fr/icones/ohwell.gif\r
-* Cleaner le code et eventuellement profiler un peu (le refresh est lent sous opera)\r
+* Ajouter un skin "simple" sans images ni fioritures (éventuellement le proposer par défaut)\r
+* Cleaner le code (erl, js, xhtml, css) et eventuellement profiler un peu (le refresh est lent sous opera)\r
* Gestion de l'historique au niveau du navigateur (pouvoir revenir aux pages précédentes)\r
* Intégrer les totoz : http://www.totoz.eu/ (avec une limite de 3 par messages par exemple) \r
* avoir une option pour les cacher ou les voir\r
- * Cacher systématiquement ceux qui dépassent d'une certaine taille\r
+ * Masquer systématiquement ceux qui dépassent d'une certaine taille (en pixel?)\r
* modifier la syntaxe des smiles actuels (pour pas qu'ils entre en conflit avec totoz)\r
-* Mettre un icone (genre sablier) lorsque le chat se charge (lors changement d'un changement de page par exemple)\r
-* traitementComplet() de euphorik.js est très très lent à executer\r
-* gestin des timezone (fuseaux horaire)\r
+* Mettre un icone (genre sablier) lorsque le chat se charge (également lors d'un changement de page par exemple)\r
+* gestion des timezone (fuseaux horaire) :\r
+ * L'utilisateur peut simplement définit une timezone dans son profil, les \r
* Créer un style "super old school" (couleur 8 bit, pas de smiles/images, font fixe)\r
* Un statut "EK" avec plein de privilège à la con. (avoir une petite étoile à coté de son nick ou le nick d'une certaine couleur)\r
* Tests de monter en charge coté serveur, analyse de la complexité (regarder du coté des TODO dans le code)\r
* Profiling pour améliorer les performances (client et serveur)\r
+ * traitementComplet() de euphorik.js est très très lent à executer\r
* Traiter les tags TODO dans le code\r
-* Ajouter un skin "simple" sans images ni fioritures\r
\r
-- Bugs --\r
1 : Critique\r
\r
[3] Amélioration des requêtes MNESIA, voir : http://mail.google.com/mail/#label/Erlang+mailing-list/117f688280569a58\r
[2] Quand on revient en arrière dans firefox le message en rédaction est perdu\r
-[2] En changeant de page puis en revenant sur la page principale les smiles ne sont plus highlighté lorsque le curseur les survol\r
+[2] En changeant de page puis en revenant sur la page principale les smiles ne sont plus highlightés lorsque le curseur les survol\r
[2] Après un register le pseudo est effacé - le pseudo n'est pas mémorisé dans le profil lors d'un envoie de mess en l'ayant changé\r
[3] "Return" ne marche pas sous safari\r
[1] Apparement les process liés aux connexions ne sont jamais terminé même quand l'utilisateur coupe la connexion à cause de minichat:attends_nouveau_messages()\r
* Il est possible d'ouvrir plusieurs conversation\r
* Les messages faisant partie des conversations ne sont plus visibles dans le flux général\r
* (une colonne peut avoir le focus, dans ce cas on répond automatiquement à la dernière personne qui nous a répondu)\r
- \r
[1] Avoir un thème de discussion affiché en haut des messages genre appellé "troll de la semaine" : "troll de la semaine : linux sera-t-il desktop ready en 2008?"\r
[2] Pouvoir cacher les dates\r
[4] Pouvoir choisir une couleur pour son pseudo\r
[3] Gestion de l'historique (calendrier)\r
[4] Créer un gamebot pour lancer des jeux. Par exemple un jeu d'énigmes\r
-[4] Utiliser XMLRPC ou SOAP ou JSON pour la communication client -> serveur\r
+[4] Utiliser XMLRPC ou SOAP ou JSON pour la communication client -> serveur (boah, faut pas déconner :))\r
[4] Image animée à la http://www.google.co.kr/ cf http://www.google.co.kr//ig/f/AaEyQnOaAr4/intl/ALL_kr/svc_sprite_all.gif\r
[4] Bot de traduction\r
[4] RSS\r
[4] Voir les personnes connectées\r
+[4] Avoir une liste d'amis\r
[4] Restreindre la consultation d'un message posté à un ou plusieurs utilisateurs définis. Les messages de la conversation ne sont alors vus que par cet ensemble d'utilisateurs.\r
[4] Plusieurs canaux\r
\r
% Module de création de la base de données euphorik.
-% Auteur : G.Burri
-% Date : 14.10.2007
+% @author G.Burri
-module(euphorik_bd).\r
--export([create/0, create_tables/0, vers_version2/0, vers_version3/0, peupler/0, tester/0]).\r
+-export([\r
+ create/0,\r
+ create_tables/0,\r
+ vers_version/1,\r
+ peupler/0\r
+ ]).\r
\r
-include("../include/euphorik_bd.hrl").\r
]).
-vers_version2() ->
+vers_version(2) ->
mnesia:transform_table(
user,
fun({user, Id, Cookie, Pseudo, Date_creation, Date_derniere_connexion, Css}) ->
record_info(fields, user),
user
).
+\r
-vers_version3() ->
+vers_version(3) ->
mnesia:transform_table(
user,
fun({user, Id, Cookie, Pseudo, Login, Password, Email, Date_creation, Date_derniere_connexion, Css}) ->
end
).
-\r
-tester() ->\r
- ok.
+++ /dev/null
-% Module tournant en background s'occupant periodiquement de certaines tâches.\r
-% Auteur : G.Burri\r
-% Date : 05.11.2007\r
-\r
--module(euphorik_deamon).
--export([start/1]).\r
-\r
-% L'age max que peut avoir les fichier se trouvant dans le dossier 'tmp' (en second)\r
--define(AGE_MAX_TMP, 86400). % 24 heures\r
-
-% Démarre le démon
-start(A) ->\r
- loop(A).
-\r
-\r
-loop(A) ->\r
- verifier_tmp_captcha(),\r
- timer:sleep(100000), % attend 100 secondes\r
- loop(A).
-\r
-
-% Vérifie le repertoire tmp où se trouve les captcha et efface les plus vieux.
-verifier_tmp_captcha() ->
- ok.
-
\ No newline at end of file
% Ce module permet de gérer les données persistantes lié au minichat d'euphorik.ch
% Il permet d'ajouter des message, de demande les messages sur une page donnée, etc..
% Ce module utilise la base mnesia créée par le module euphorik_bd.
-% Auteur : G.Burri
-% Date : 22.10.2007
+% @author G.Burri
-module(euphorik_minichat).\r
-export([
nouveau_message/3,
reset/0,
% reservé :
- resultat_transaction/1]).\r
+ resultat_transaction/1\r
+]).\r
\r
-include("../include/euphorik_bd.hrl").\r
-include_lib("stdlib/include/qlc.hrl").\r
% Ce module permet la gestion des conversations du minichat d'euphorik.
% Un message (enfant) peut répondre à des messages (ses parents).
% Un message (parent) peut avoir plusieurs réponses (enfants)
-% Auteur : G.Burri
-% Date : 09.02.2008
+% @author G.Burri
--module(euphorik_minichat_conversation).
+-module(euphorik_minichat_conversation).\r
+-export([\r
+ conversations/4\r
+]).
-include("euphorik_bd.hrl").
-include_lib("stdlib/include/qlc.hrl").
-import(euphorik_minichat, [resultat_transaction/1]).
-import(qlc, [e/1, q/1, keysort/3]).
-import(mnesia, [table/1, transaction/1]).
--export([conversations/4]).
% Renvoie les conversations sous la forme d'une liste de conversation.
% coding: utf-8
-% Ce module gére les différents message envoyé par le client (javascript)
+% Ce module gére les différents message envoyé par le client (javascript) via AJAX.
% Par exemple le client peut demander les derniers messages du minichat.
% Les messages sont au format XML, la plus part des fonctions accepte un xmlDocument() et renvoie un string()
% qui est la réponse XML.\r
-% Example XML : http://www.erlang.org/doc/apps/xmerl/xmerl_ug.html
-% Auteur : G.Burri
-% Date : 29.10.2007
+% Example XML : http://www.erlang.org/doc/apps/xmerl/xmerl_ug.html.
+% @author G.Burri
-module(euphorik_protocole).
-export([
profile/1,
refreshMessage/1,
message/1
-]).
+]).\r
+
-include_lib("xmerl/include/xmerl.hrl").
-include("../include/euphorik_bd.hrl").\r
-include("../include/euphorik_defines.hrl").\r
-% Génère un nouveau captchat dans ?DOSSIER_CAPTCHA
-generation_captcha(_) ->
- {Mot_crypt, Nom_fichier} = captcha:create(5, ?DOSSIER_CAPTCHA),
- simple_xml_to_string(xml_reponse_generation_captcha(?DOSSIER_CAPTCHA_RELATIF "/" ++ Nom_fichier, Mot_crypt)).
+% Génère un nouveau captchat dans ?DOSSIER_CAPTCHA\r
+% Obsolète
+%~ generation_captcha(_) ->
+ %~ {Mot_crypt, Nom_fichier} = captcha:create(5, ?DOSSIER_CAPTCHA),
+ %~ simple_xml_to_string(xml_reponse_generation_captcha(?DOSSIER_CAPTCHA_RELATIF "/" ++ Nom_fichier, Mot_crypt)).
\r
-% Un nouvel utilisateur doit être créé.
+% Un nouvel utilisateur doit être créé.\r
+% Obolète : le captcha n'existe plus
% Action est un xmlElement().
-nouveau_user_captcha(Action) ->
- simple_xml_to_string(\r
- case {xmerl_xpath:string("captchaCrypt", Action), xmerl_xpath:string("captchaInput", Action)} of\r
- {[#xmlElement{content = [#xmlText{value = C1}]}], [#xmlElement{content = [#xmlText{value = C2}]}]} ->\r
- C2_crypt = common:crypt(C2),\r
- if C1 =:= C2_crypt ->\r
- Cookie = generer_cookie(),\r
- User = euphorik_minichat:nouveau_user("Paul", Cookie),\r
- xml_reponse_login_ok(User);\r
- true ->
- xml_reponse_login_pas_ok("Captcha incorrect")\r
- end;
- _ ->
- xml_reponse_login_pas_ok("XML malformé")\r
- end
- ).
+%~ nouveau_user_captcha(Action) ->
+ %~ simple_xml_to_string(\r
+ %~ case {xmerl_xpath:string("captchaCrypt", Action), xmerl_xpath:string("captchaInput", Action)} of\r
+ %~ {[#xmlElement{content = [#xmlText{value = C1}]}], [#xmlElement{content = [#xmlText{value = C2}]}]} ->\r
+ %~ C2_crypt = common:crypt(C2),\r
+ %~ if C1 =:= C2_crypt ->\r
+ %~ Cookie = generer_cookie(),\r
+ %~ User = euphorik_minichat:nouveau_user("Paul", Cookie),\r
+ %~ xml_reponse_login_ok(User);\r
+ %~ true ->
+ %~ xml_reponse_login_pas_ok("Captcha incorrect")\r
+ %~ end;
+ %~ _ ->
+ %~ xml_reponse_login_pas_ok("XML malformé")\r
+ %~ end
+ %~ ).
-% Une utilisateur s'enregistre avec un tuple {Login, Password}.
+% Une utilisateur s'enregistre avec un tuple {Login, Password}.\r
+% @spec nouveau_user_login(xmerl:xmlElement()) -> string()
nouveau_user_login(Action) ->\r
{Login, Password, Login_deja_pris} = case {xmerl_xpath:string("login", Action), xmerl_xpath:string("password", Action)} of\r
{[#xmlElement{content = [#xmlText{value = L}]}], [#xmlElement{content = [#xmlText{value = P}]}]} ->\r
]\r
}\r
].
-
-xml_reponse_generation_captcha(Chemin, Captcha) ->
- [
- {reponse, [{name, "generationCaptcha"}],
- [
- {chemin, [], [Chemin]},
- {captchaCrypt, [], [Captcha]}
- ]
- }
- ].
+\r
+\r
+% Obsolète
+%~ xml_reponse_generation_captcha(Chemin, Captcha) ->
+ %~ [
+ %~ {reponse, [{name, "generationCaptcha"}],
+ %~ [
+ %~ {chemin, [], [Chemin]},
+ %~ {captchaCrypt, [], [Captcha]}
+ %~ ]
+ %~ }
+ %~ ].
%%%%%%%%% </réponses XML> %%%%%%%%%
% coding: utf-8\r
-% Ce module est fait pour répondre à des requêtes 'AJAX'.
-% Auteur : G.Burri
-% Date : 22.10.2007
+% Ce module est fait pour répondre à des requêtes 'AJAX'.\r
+% Il est définit comme 'appmods' pour l'url "request" dans yaws.\r
+% Par exemple http://www.euphorik.ch/request abouti sur la fonction out() de ce module.
+% @author G.Burri
-module(euphorik_requests).\r
-export([\r
traiter_action(XML#xmlElement.attributes, XML).\r
-% un client demande la génération d'un captcha
-traiter_action([#xmlAttribute{value="generationCaptcha"}], XML) ->
- euphorik_protocole:generation_captcha(XML); \r
-% un client se log pour la première fois\r
-traiter_action([#xmlAttribute{value="loginCaptcha"}], XML) ->\r
- euphorik_protocole:nouveau_user_captcha(XML);
+% un client demande la génération d'un captcha (obsolète)
+%~ traiter_action([#xmlAttribute{value="generationCaptcha"}], XML) ->
+ %~ euphorik_protocole:generation_captcha(XML); \r
+% un client se log pour la première fois (obsolète)\r
+%~ traiter_action([#xmlAttribute{value="loginCaptcha"}], XML) ->\r
+ %~ euphorik_protocole:nouveau_user_captcha(XML); \r
+ \r
+
% un client s'enregistre (pseudo + password)
traiter_action([#xmlAttribute{value="register"}], XML) ->
euphorik_protocole:nouveau_user_login(XML); \r
% modification du profile
traiter_action([#xmlAttribute{value="profile"}], XML) ->
euphorik_protocole:profile(XML); \r
-% le client désire les messages\r
+% un utilisateur demande les messages\r
traiter_action([#xmlAttribute{value="refreshMessages"}], XML) ->\r
euphorik_protocole:refreshMessage(XML); \r
-% envoie d'un message\r
+% un utilisateur envoie un message\r
traiter_action([#xmlAttribute{value="message"}], XML) ->\r
euphorik_protocole:message(XML).\r
\r
--- /dev/null
+% Module tournant en background s'occupant periodiquement de certaines tâches.\r
+% Auteur : G.Burri\r
+% Date : 05.11.2007\r
+\r
+-module(euphorik_deamon).
+-export([start/1]).\r
+\r
+% L'age max que peut avoir les fichier se trouvant dans le dossier 'tmp' (en second)\r
+-define(AGE_MAX_TMP, 86400). % 24 heures\r
+
+% Démarre le démon
+start(A) ->\r
+ loop(A).
+\r
+\r
+loop(A) ->\r
+ verifier_tmp_captcha(),\r
+ timer:sleep(100000), % attend 100 secondes\r
+ loop(A).
+\r
+
+% Vérifie le repertoire tmp où se trouve les captcha et efface les plus vieux.
+verifier_tmp_captcha() ->
+ ok.
+
\ No newline at end of file
-% Auteur : GBurri
-% Version 2
+% @author GBurri
+% Version 3
% Pour générer des id\r
-record(counter,\r
-record(minichat,
{\r
id, % integer\r
- auteur_id, % -> user.id
+ auteur_id, % -> #user.id
date, % erlang:now()
pseudo, % chaine de caractère
contenu % chaine de caractère
% 'repondant' repond à 'cible'\r
-record(reponse_minichat,\r
{\r
- repondant, % -> minichat.id\r
- cible % -> minichat.id\r
+ repondant, % -> #minichat.id\r
+ cible % -> #minichat.id\r
}). \r
\r