REPORT de la branche 1.0
authorGreg Burri <greg.burri@gmail.com>
Tue, 3 Jun 2008 12:57:19 +0000 (12:57 +0000)
committerGreg Burri <greg.burri@gmail.com>
Tue, 3 Jun 2008 12:57:19 +0000 (12:57 +0000)
css/1/euphorik.css
css/2/euphorik.css
doc/TODO.txt
modules/erl/euphorik_bd.erl
modules/erl/euphorik_minichat_conversation.erl
pages/about.html

index 1fdc0f4..5964a11 100755 (executable)
@@ -216,6 +216,9 @@ form select {
 form button {
        font-size: 11px;
 }
+form input[readonly] {
+       background-color: #d0c9aa
+}
 
 /***** Les liens *****/
 .lien, a {
index ca5992e..df54431 100755 (executable)
@@ -209,6 +209,9 @@ form select {
 form button {
        font-size: 11px;
 }
+form input[readonly] {
+       background-color: #484e46
+}
 
 /***** Les liens *****/\r
 .lien, a {\r
index 8da3fb2..6e4c09f 100755 (executable)
@@ -2,20 +2,35 @@
 \r
 === v1.0 ===\r
 * Cleaner le code (erl, js, xhtml, css) et eventuellement profiler un peu (le refresh est lent sous opera)
-* Pouvoir afficher les utilisateurs (print_users()) qui sont admin\r
+* 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
+* Enlever le petit carré mis en couleur et mettre le pseudo + date en couleur à la place\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
+* Revoir le système de conversation : \r
+   * Pouvoir extraire "toute la conversation" ou seulement une "sous conversation" (ce qui est actuellement le cas)\r
+   * Tous les messages auquels on répond doivent faire partie de la conversation !!\r
+   * Fermer temporairement une conversation (la réduire sous la forme d'un onglet)\r
+   * lien vers une conversation : http://www.euphorik.ch/?conv=45\r
 * Mettre un icon (genre sablier ou truc qui tourne à la apple) lorsque le chat se charge (également lors d'un changement de page par exemple)\r
+   * L'icon apparait tout en haut (absolute)\r
    * Simuler un réseau lent\r
-* Création d'un script ruby dans /tool pour apposer  automatiquement une entête concernant la licence voir : http://www.gnu.org/licenses/gpl-howto.fr.html\r
-   * Eventuellement mettre à jour automatiquement le Copyright (date) et les personnes responsables \r
-* Mise à jour automatique de la version dans le about en fonction du tag/branche courant ?\r
-* Modération des messages : les modos peuvent les supprimer\r
+* Mise à jour automatique de la version dans le about en fonction du tag/branche courant (lors de la mise en production) ?\r
 * Tests de monter en charge coté serveur, analyse de la complexité (regarder du coté des TODO dans le code). Utiliser eventuellement Tsung\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 et FIXME dans le code\r
-* Pouvoir récupérer son mdp (ou en générer un autre) via son email\r
+* Pouvoir récupérer son mdp (ou en générer un autre) via son email. Marquer dans le profile que l'email sert à cela et n'est pas visible pas les autres personnes\r
+* (Pouvoir inverser le chat) tester la faisabilité\r
 === v1.2 ===\r
+* Avoir une liste d'amis dans le profile\r
+   * Pouvoir n'afficher les messages que des amis (et des personnes y répondant)\r
+   * Ajouter une personne à ses amis avec une toolbar similaire à celle de banissement\r
+* Création d'un script ruby dans /tool pour apposer  automatiquement une entête concernant la licence voir : http://www.gnu.org/licenses/gpl-howto.fr.html\r
+   * Eventuellement mettre à jour automatiquement le Copyright (date) et les personnes responsables \r
+* Système de censure par les admins (suppression d'un message)\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
    * Masquer systématiquement ceux qui dépassent une certaine taille en pixel\r
 1 : Critique
 2 : Urgent
 3 : Peu grave\r
-
+\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é ?
    * solution 2 : mémoriser le skin courant dans un cookie\r
@@ -247,26 +263,20 @@ Une fois l'idée validée elle est déplacée dans une version à venir.
 4 : A discuter
 A : Abandonné
 ok : Implémenté
-
-[1] Possibilité d'extraire une conversation, on click (par l'intermediaire d'un petit bouton par exemple) sur un message et l'arbre de réponses correspondant s'affiche dans une colonne sur la gauche.
-   * Il est possible d'ouvrir plusieurs conversations
-   * Les messages faisant partie des conversations ne sont plus visibles dans le flux général
-   * (une colonne peut avoir le focus, dans ce cas on répond automatiquement à la dernière personne qui nous a répondu)
-   * Chaque colonne possède une entête avec le message d'origine et trois boutons :
-      * un pour copier l'id de la conversation dans la textbox (voir point suivant) 
-      * un pour fermer la conversation
-      * un pour créer une url vers cette conversation (un peu à la manière de google maps)
+\r
+[2] Indiquer le nombre de fois qu'un lien a été visité (également pour les images) (Bernie)\r
+   * Afficher quelque part les url les plus cliqués
 [2] Raccourcis pour répondre aux conversations (genre CTRL+2 pour répondre au deuxième)\r
+[2] Système de news/event (Bernie)\r
 [2] Syntaxe avancée des messagees :\r
    * Possibilité d'utiliser les balises <i>, <b>, <code>, <q> (quoted text)\r
-   * Utiliser la syntaxe de mediaWiki
+   * Utiliser la syntaxe de mediaWiki : http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet
    * La balise <hide> pour mettre des spoilers
-[2] Une option dans le profile pour se délogger automatiquement lorsque l'on quitte le site
-[2] Pouvoir cacher les dates\r
+[2] Une option dans le profile pour se délogger automatiquement lorsque l'on quitte le site\r
 [3] Gestion de l'historique (calendrier)
 [3] Idée de bernie :
    * Pouvoir STFUER des personnes, lorsqu'elle envoie un message un autre truc à la con est écrit à la place
-   * la phrase à la con est piché parmis une liste éditable depuis le panneau d'admin
+   * la phrase à la con est prise parmis une liste éditable depuis le panneau d'admin
    * La stfuation se fait depuis le panel de bannissement (slap, stfu, kick, ban)
 [4] Unifier tout le code en anglais (sauf les commentaires)
 [4] Inscrire le nom de l'image dans les les liens vers des images (à la place de simplement [jpg] ou [gif])
@@ -298,8 +308,16 @@ ok : Implémenté
 [4] Système de trolls. Voir decription.txt.\r
 \r
 [A] smiles personnalisés, on peut en ajouter dans la préférence utilisateur.
-[ok] Pouvoir insérer des tags qui sont des liens vers des conversations, par exemple : {R4S} =~ /\{\w+\}/
-
+[ok] Pouvoir insérer des tags qui sont des liens vers des conversations, par exemple : {R4S} =~ /\{\w+\}/\r
+[ok] Possibilité d'extraire une conversation, on click (par l'intermediaire d'un petit bouton par exemple) sur un message et l'arbre de réponses correspondant s'affiche dans une colonne sur la gauche.\r
+   * Il est possible d'ouvrir plusieurs conversations\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
+   * Chaque colonne possède une entête avec le message d'origine et trois boutons :\r
+      * un pour copier l'id de la conversation dans la textbox (voir point suivant) \r
+      * un pour fermer la conversation\r
+      * un pour créer une url vers cette conversation (un peu à la manière de google maps)\r
+[ok] Pouvoir cacher les dates
 
 === Concurrents ===
 http://www.phpfreechat.net/demo.fr.html
index 93cb835..46cefed 100755 (executable)
@@ -308,7 +308,7 @@ print_users(N) ->
    resultat_transaction(mnesia:transaction(fun() ->
       C = cursor(
          qlc:keysort(
-            9
+            #user.date_derniere_connexion
             q([E || E <- mnesia:table(user)]),
             [{order, descending}]
          ),
@@ -516,7 +516,7 @@ messages(N, P) ->
    F = fun() ->
       C = cursor(
          qlc:keysort(
-            2
+            #minichat.id
             q([E#minichat{contenu = contenu_message(E)} || E <- mnesia:table(minichat)]),
             [{order, descending}]
          ),
@@ -563,12 +563,13 @@ contenu_message(E) ->
   
 
 % Renvoie une liste de message (voir #minichat de euphorik_bd.hrl) à partir d'une liste d'id (Ids).
+% TODO : optimisations ? serait-ce du O(n) ?
+% Bon de toutes façons on s'en fout c'est pas utilisé :)
 messages_by_ids(Ids) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
-         % TODO : optimisations ? serait-ce du O(n) ?
          e(qlc:keysort(
-            2,
+            #minichat.id,
             q([E || E <- mnesia:table(minichat), lists:any(fun(Id) -> Id =:= E#minichat.id end, Ids)]),
             [{order, ascending}]
          ),[{tmpdir, ?KEY_SORT_TEMP_DIR}])
@@ -753,7 +754,7 @@ can_register(IP) ->
 trolls() ->
    resultat_transaction(mnesia:transaction(
       fun() ->
-         e(qlc:keysort(2, q([T || T <- mnesia:table(troll)])), [{tmpdir, ?KEY_SORT_TEMP_DIR}])
+         e(qlc:keysort(#troll.id, q([T || T <- mnesia:table(troll)])), [{tmpdir, ?KEY_SORT_TEMP_DIR}])
       end
    )).
    
@@ -762,7 +763,7 @@ trolls() ->
 trolls(Last_id) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
-         e(qlc:keysort(2, q([T || T <- mnesia:table(troll), T#troll.id > Last_id, T#troll.date_post =:= undefined])), [{tmpdir, ?KEY_SORT_TEMP_DIR}])
+         e(qlc:keysort(#troll.id, q([T || T <- mnesia:table(troll), T#troll.id > Last_id, T#troll.date_post =:= undefined])), [{tmpdir, ?KEY_SORT_TEMP_DIR}])
       end
    )).
    
@@ -852,8 +853,7 @@ troll_by_id(Troll_id) ->
 current_troll() ->
    resultat_transaction(mnesia:transaction(
       fun() ->
-         % TODO : ya pas moyen de désigner le champs plutot qu'avec un nombre pour le tri ?
-         C = cursor(qlc:keysort(5, q([T || T <- mnesia:table(troll), T#troll.date_post =/= undefined]), [{order, descending}]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]),
+         C = cursor(qlc:keysort(#troll.date_post, q([T || T <- mnesia:table(troll), T#troll.date_post =/= undefined]), [{order, descending}]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]),
          R = case qlc:next_answers(C, 1) of
             [T] -> T;
             _ -> aucun
index 06fad7f..60f92e4 100755 (executable)
@@ -35,7 +35,7 @@
 -include_lib("stdlib/include/qlc.hrl").
 -import(lists, [reverse/1, any/2, map/2, sublist/3, filter/2]).
 -import(euphorik_bd, [resultat_transaction/1]).
--import(qlc, [e/2, q/1, keysort/3]).
+-import(qlc, [e/2, q/1]).
 -import(mnesia, [table/1, transaction/1]).
   
    
 % Message est le message de type #minichat et Parents une liste d'Id.
 % Plus est un bool. Si Plus vaut true alors il y a encore des messages.
 % Si il n'y a pas de nouveaux message alors vide est renvoyé.
+% Chaque racine est un tuple {N, P,  D}
+% N : le nombre de message
+% D : le dernier message connu, 0 si aucun
+% P : la page souhaité, la premier est la 1
 % @spec conversations([{integer(), integer(), integer()}], integer(), integer(), integer()) -> [Conversation()]
 conversations(Racines, N, D, P) ->
       Conversations = conversations_detailees(Racines, N, D, P),
@@ -101,7 +105,10 @@ mise_en_forme_conversation(Messages) ->
 conversations_detailees(Racines, N, D, P) ->   
    Conversations = map(fun({Racine, P_conv, Dernier}) -> conversation(Racine, N, Dernier, P_conv) end, Racines),
    Conversation_principale = resultat_transaction(transaction(fun() ->
-      Curseur = qlc:cursor(q([E#minichat.id || E <- qlc:sort(table(minichat), [{order, descending}])]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]),
+      Curseur = qlc:cursor(
+         qlc:sort(q([E#minichat.id || E <- table(minichat)]), [{order, descending}]),
+         [{tmpdir, ?KEY_SORT_TEMP_DIR}]
+      ),
       {CP, Plus} = conversation_principale(Curseur, Conversations, N, P),
       qlc:delete_cursor(Curseur),
       {[M || M <- CP, M > D], Plus} % filtre en fonction de D
index a30e345..db98b68 100644 (file)
@@ -77,13 +77,31 @@ voici mon email/jabberID : {EMAIL}</p>
 
 
 <h2>Versions à venir</h2>
-<p>Liste non-exaustive des fonctionnalités à venir.</p>
+<p>Liste non-exaustive des fonctionnalités à venir.</p>\r
+
 <h3>1.1</h3>
-<ul><li>possibilité de récupérer son login/password via son email.</li></ul>
+<ul>\r
+   <li>Possibilité de récupérer son login/password via son email.</li>\r
+   <li>Possibilité d'inverser le chat.</li>\r
+   <li>Révision du système de conversation.\r
+      <ul>\r
+         <li>Impossibilité de répondre à plusieurs messages de conversations différentes.</li>\r
+         <li>Possibilité d'extraire complétement une conversation.</li>\r
+         <li>Possibilité de réduire une conversation (la cacher temporairement).</li>\r
+         <li>Possibilité de créer un lien vers une conversation, par exemple : http://www.euphorik.ch/?conv=34\r
+      </ul>\r
+   </li>\r
+</ul>\r
+
 <h3>1.2</h3>
-<ul><li>Intégration des <a href="http://totoz.eu">totoz</a>.</li></ul>
+<ul>\r
+   <li>Intégration des <a href="http://totoz.eu">totoz</a>.</li>\r
+   <li>Un admin pourra censurer un message.</li>\r
+</ul>\r
+
 <h3>1.3</h3>
-<ul><li>Possibilité d'ajouter une correction à son dernier message.</li></ul>
+<ul><li>Possibilité d'ajouter une correction à son dernier message.</li></ul>\r
+
 <h3>1.4</h3>
 <ul><li>Ajout de nouveaux styles.</li></ul>