X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_bd_admin.erl;h=12c2d4d7a0ce9840048e91d62b18062007087e1d;hp=18e6cedfd5749a0af12e14ed209324f1e92e694b;hb=e0c2c2fa82cf13cd55b8d5006ad2c7e0689dc6cb;hpb=d1e6f8e7c86f1ee75e854266463541ffedb916c9 diff --git a/modules/erl/euphorik_bd_admin.erl b/modules/erl/euphorik_bd_admin.erl index 18e6ced..12c2d4d 100644 --- a/modules/erl/euphorik_bd_admin.erl +++ b/modules/erl/euphorik_bd_admin.erl @@ -33,7 +33,12 @@ reset/0, update/0, backup/1, - restore/1 + restore/1, + + toggle_ek_master/1, + print_users/0, + print_users/1, + print_user/1 ]). -import(qlc, [e/2, q/1, cursor/2]). -include("../include/euphorik_bd.hrl"). @@ -74,18 +79,15 @@ create_tables() -> ]), mnesia:create_table(minichat, [ {attributes, record_info(fields, minichat)}, - {index, [auteur_id, troll_id]}, {disc_copies, [node()]} ]), mnesia:create_table(reponse_minichat, [ {type, bag}, {attributes, record_info(fields, reponse_minichat)}, - {index, [cible]}, {disc_copies, [node()]} ]), mnesia:create_table(user, [ {attributes, record_info(fields, user)}, - {index, [cookie, login]}, {disc_copies, [node()]} ]), mnesia:create_table(ip_table, [ @@ -94,9 +96,19 @@ create_tables() -> ]), mnesia:create_table(troll, [ {attributes, record_info(fields, troll)}, - {index, [date_post]}, {disc_copies, [node()]} - ]). + ]), + creer_indexes(). + + +% mis à part car lors de la reprise de données avec load_textfile les indexes ne sont pas recréés +creer_indexes() -> + mnesia:add_table_index(minichat, auteur_id), + mnesia:add_table_index(minichat, troll_id), + mnesia:add_table_index(reponse_minichat, cible), + mnesia:add_table_index(user, cookie), + mnesia:add_table_index(user, login), + mnesia:add_table_index(troll, date_post). % Connexion à la base de données de yaws sur overnux @@ -186,14 +198,12 @@ patch(1) -> {aborted, Raison} -> {erreur, Raison}; {atomic, _} -> ok end. -% 2 -> 3 -%patch(2) -> - + % Prend un chemin vers la feuille de style de type "css/1/euphorik.css" % et renvoie "styles/1/euphorik.css" -patch1_transforme_css(["css" | Reste]) -> - ["styles" | Reste]; +patch1_transforme_css("css" ++ Reste) -> + "styles" ++ Reste; patch1_transforme_css(F) -> F. @@ -222,3 +232,86 @@ restore(N) -> % Renvoie le fichier (avec le chemin) correspondant à la version Version, par exemple : "/var/euphorik/BD/backups/backup1" fichier_backup(Version) -> mnesia:system_info(directory) ++ "/backups/" ++ if is_integer(Version) -> "backup" ++ integer_to_list(Version); true -> Version end. + + +toggle_ek_master(User_id) -> + euphorik_bd:resultat_transaction(mnesia:transaction( + fun() -> + Users = e(q([E || E <- mnesia:table(user), E#user.id =:= User_id]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]), + case Users of + [User] -> + mnesia:write(User#user{ek_master = not User#user.ek_master}); + _ -> erreur + end + end + )). + + +% Affiche N user trié par leur date de dernière connexion. +% Opt est une liste d'option d'affichage : +% * ekmaster : n'affiche que les admins +print_users(N, Opt) -> + AfficheQueLesEkMaster = lists:any(fun(O) -> O =:= ekmaster end, Opt), + euphorik_bd:resultat_transaction(mnesia:transaction(fun() -> + C = cursor( + qlc:keysort( + #user.date_derniere_connexion, + if AfficheQueLesEkMaster -> + q([E || E <- mnesia:table(user), E#user.ek_master =:= true]); + true -> + q([E || E <- mnesia:table(user)]) + end, + [{order, descending}] + ), + [{tmpdir, ?KEY_SORT_TEMP_DIR}] + ), + Users = qlc:next_answers(C, N), + lists:foreach( + fun(U) -> + print_user(U) + end, + Users + ), + qlc:delete_cursor(C) + end)). + + +% Affiche tous les users. +print_users(Opt) -> + print_users(all_remaining, Opt). + +% Affiche tous les users. +print_users() -> + print_users(all_remaining, []). + +print_user(User) when is_record(User, user) -> + #user{id = Id, profile = #profile{pseudo = Pseudo}, login = Login, ek_master = Ek_master, date_derniere_connexion = Date, last_ip = IP} = User, + {{Annee, Mois, Jour}, {Heure, Min, _}} = calendar:now_to_local_time(Date), + io:format( + % id pseudo (login) IP Jour Mois Année Heure Minute + "~4w : ~10.10..s(~10.10..s) ~s ~2w.~2.2.0w.~w - ~2wh~2.2.0w~n", + [ + Id, + if Ek_master -> "*"; true -> "" end ++ Pseudo, + Login, + euphorik_common:serialize_ip(IP), + Jour, Mois, Annee, Heure, Min + ] + ); +% Affichage d'un user en fonction de son login +print_user(Login) when is_list(Login) -> + case euphorik_bd: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 euphorik_bd:user_by_id(Id) of + {ok, User} -> + print_user(User); + _ -> + {erreur, "Id pas trouvé : " ++ integer_to_list(Id)} + end. + \ No newline at end of file