listen = 0.0.0.0\r
docroot = /euphorik\r
allowed_scripts = [yaws]\r
- appmods = <request, euphorik_requests>\r
+ appmods = <request, euphorik_requests>
+ start_mod = euphorik_daemon\r
</server>\r
c) Editer '/etc/init.d/yaws' et remplacer cette ligne :\r
script="$DAEMON -I $YAWS_ID $@"\r
par celle ci :\r
- script="$DAEMON --erlarg \"-smp auto\" --sname yaws --mnesiadir '\"/euphorik/BD\"' -I $YAWS_ID $@"\r
+ script="$DAEMON --sname yaws --mnesiadir \"/euphorik/BD\" -I $YAWS_ID $@"\r
FIXME : trouver une méthode plus élégante.\r
\r
3. Créer la base de donnée\r
Sequences :
* Chargement d'une page\r
\r
-=== Client ===\r
-Etats :\r
- Un client peut avoir trois états\r
- * Non Identifie -> Enregistre, Identifie\r
- Etat initial.\r
- * Identifie -> Enregistre, Non Identifie\r
- Nécessaire (et automatique) pour pouvoir poster des messages.\r
- * Enregistre -> Non Identifie\r
- Nécessaire pour pouvoir poster des trolls et gérer un profile.
-
+=== Client ===
== pageMinichat.js ==
=== Classes ===
* Messages
initialiserListeStyles(client)
- // TODO : pourquoi $(document).unload ne fonctionne pas ?
+ // FIXME : ne fonctionne pas sous opera
+ // voir : http://dev.jquery.com/ticket/2892#preview
$(window).unload(function(){client.flush()})
$("#menu .minichat").click(function(){ pages.afficherPage("minichat") })
update_pseudo_user/2,
print_users/0,
print_users/1,
+ print_user/1,
user_by_cookie/1,
user_by_id/1,
user_by_login/1,
% utiles :
resultat_transaction/1\r
]).
-
-import(qlc, [e/1, e/2, q/1, cursor/1]).\r
-\r
-include("../include/euphorik_bd.hrl").
-include("../include/euphorik_defines.hrl").\r
-include_lib("stdlib/include/qlc.hrl").\r
Users = qlc:next_answers(C, N),
lists:foreach(
fun(U) ->
- #user{id = Id, pseudo = Pseudo, login = Login, ek_master = Ek_master, date_derniere_connexion = Date} = U,
- {{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,
- if Ek_master -> "*"; true -> "" end ++ Pseudo,
- "(" ++ Login ++ ")",
- Jour, Mois, Annee, Heure, Min
- ]
- )
+ print_user(U)
end,
Users
),
qlc:delete_cursor(C)
end)).
-
+
% Affiche tous les users.
print_users() ->
print_users(all_remaining).
+
+print_user(User) when is_record(User, user) ->
+ #user{id = Id, pseudo = Pseudo, login = Login, ek_master = Ek_master, date_derniere_connexion = Date} = 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,
+ if Ek_master -> "*"; true -> "" end ++ Pseudo,
+ "(" ++ Login ++ ")",
+ Jour, Mois, Annee, Heure, Min
+ ]
+ );
+% Affichage d'un user en fonction de son login
+print_user(Login) when is_list(Login) ->
+ case user_by_login(Login) of
+ {ok, User} ->
+ print_user(User);
+ _ ->
+ {erreur, "Login pas trouvé : " ++ Login}
+ end;
+% Affichage d'un user en fonction de son id
+print_user(Id) when is_integer(Id) ->
+ case user_by_id(Id) of
+ {ok, User} ->
+ print_user(User);
+ _ ->
+ {erreur, "Id pas trouvé : " ++ integer_to_list(Id)}
+ end.
+
% Est-ce qu'un utilisateur existe en fonction de son cookie ?
% Renvoie {ok, User} ou erreur
-% Module tournant en background s'occupant periodiquement de certaines tâches.\r
-% Auteur : G.Burri\r
-% Date : 05.11.2007\r
+% Module tournant en background s'occupant periodiquement de certaines tâches :
+% - Élection du prochain troll chaque semaine\r
+% Date : 05.11.2007
+% @author G.Burri\r
\r
-module(euphorik_daemon).
-export([start/1]).
-
--include("../include/euphorik_defines.hrl").\r
+-include("../include/euphorik_defines.hrl").
% Démarre le démon
-start(A) ->\r
- loop(A).
-
-\r
-loop(A) ->
- euphorik_bd:elire_troll(),
- %
- \r
- timer:sleep(1000),\r
- loop(A).
-\r
-
+start(_A) ->\r
+ loop().
+
+loop() ->
+ % on attend une minute de plus pour prevenir une dérive négative
+ timer:sleep(1000 * trunc(temps_prochaine_election() + 60)),
+ euphorik_bd:elire_troll(),\r
+ loop().
+
+
+% Renvoie le nombre de seconde qu'il reste jusque au prochain lundi à l'heure donnée (l'heure est sur 24heures)
+% 86400 est le nombre de seconde dans un jour
+temps_prochaine_election() ->
+ {Date, {H,M,S}} = calendar:local_time(),
+ Delta = (?JOUR_ELECTION_TROLL - 1) * 86400 + ?HEURE_ELECTION_TROLL * 60 * 60
+ -((calendar:day_of_the_week(Date) - 1) * 86400 + H * 60 * 60 + M * 60 + S),
+ % attention au cas où les deux dates (maintenant et la date d'élection) ne se trouvent pas dans la même semaine.
+ if Delta =< 0 -> Delta + 7 * 86400; true -> Delta end.
-export([\r
conversations/4\r
]).
-
-include("euphorik_bd.hrl").
-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/1, q/1, keysort/3]).
mod_troll/1,
del_troll/1,
erreur/1
-]).\r
-
+]).
-include_lib("xmerl/include/xmerl.hrl").
-include("../include/euphorik_bd.hrl").\r
-include("../include/euphorik_defines.hrl").\r
tester/0,\r
out/1\r
]).\r
-\r
-include_lib("xmerl/include/xmerl.hrl").\r
-include_lib("yaws/include/yaws_api.hrl").
+++ /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
-define(NB_MAX_TROLL_WAITING, 10).
% chaque admin peut proposer 1 seul troll à la fois
-define(NB_MAX_TROLL_WAITING_BY_USER, 2).
+
+
+% Le jour ainsi que l'heure à laquelle est élu un nouveau troll (lundi à 3 heure du mat)
+-define(JOUR_ELECTION_TROLL, 1). % 1 = lundi
+-define(HEURE_ELECTION_TROLL, 3). % 3 heure du matin
\ No newline at end of file
# SciTE session file
-buffer.1.path=/home/gburri/projets/euphorik/doc/protocole2.txt
-buffer.1.position=1
+buffer.1.path=/home/gburri/projets/euphorik/doc/technique.txt
+buffer.1.position=572
-buffer.2.path=/home/gburri/projets/euphorik/doc/technique.txt
-buffer.2.position=1
+buffer.2.path=/home/gburri/projets/euphorik/doc/TODO.txt
+buffer.2.position=181
+buffer.2.current=1
-buffer.3.path=/home/gburri/projets/euphorik/doc/TODO.txt
-buffer.3.position=751
-buffer.3.current=1
+buffer.3.path=/home/gburri/projets/euphorik/doc/protocole3.txt
+buffer.3.position=248
-buffer.4.path=/home/gburri/projets/euphorik/doc/protocole3.txt
+buffer.4.path=/home/gburri/projets/euphorik/doc/description.txt
buffer.4.position=1
+
+buffer.5.path=/home/gburri/projets/euphorik/doc/installation.txt
+buffer.5.position=1231