ADD script permettant la mise à jour de la BD et le rechargement des modules lors...
authorGreg Burri <greg.burri@gmail.com>
Sat, 31 May 2008 08:05:18 +0000 (08:05 +0000)
committerGreg Burri <greg.burri@gmail.com>
Sat, 31 May 2008 08:05:18 +0000 (08:05 +0000)
12 files changed:
css/1/pageMinichat.css
doc/TODO.txt
img/css1/return.png [new file with mode: 0755]
img/css2/return.png
js/euphorik.js
js/pageMinichat.js
modules/erl/euphorik_bd.erl
modules/erl/euphorik_daemon.erl
modules/include/euphorik_bd.hrl
modules/include/euphorik_defines.hrl
tools/mise_en_prod.erl [new file with mode: 0755]
tools/mise_en_prod.rb

index daae129..338aaad 100755 (executable)
@@ -90,7 +90,7 @@
 #page.minichat form .return {
        height: 16px;
        width: 32px;
-       background-image: url(../../img/css2/return.png);
+       background-image: url(../../img/css1/return.png);
        background-repeat: no-repeat;
        background-position: 5px 2px;
        vertical-align: top;
index ec37827..475f9dc 100755 (executable)
    * Jamais reproduit avec Opera\r
    * Peut être un bug lié à jQuery\r
    * Reproduit sur Firefox 2 et 3 !\r
-[2] Lors du click sur le bouton slap/kick/ban il faut fermer la mini fenêtre\r
 [2] Après l'ajout d'une image il n'est pas possible de naviger depuis celle ci vers les autres images en utilisant Next et Prev de lightbox après l'avoir affiché\r
 [2] cliquer sur les smiles ne marche pas sous IE
 [2] Lors d'un logout il faut faire un full refresh (pour mettre à jour les messages auquel on répond par exemple)
 [ok] Les processus en attente ne se termine pas lorsque le socket est fermé (pour l'instant un timeout de 1heure est appliqué)
 [ok] Possibilité d'enregistrer plusieurs users avec le même login\r
 [ok] le return ne marche pas sous IE
+[ok] Lors du click sur le bouton slap/kick/ban il faut fermer la mini fenêtre
 
 === Idées ===\r
 Une fois l'idée validée elle est déplacée dans une version à venir.\r
diff --git a/img/css1/return.png b/img/css1/return.png
new file mode 100755 (executable)
index 0000000..51f1983
Binary files /dev/null and b/img/css1/return.png differ
index d4aa70b..b9d146b 100755 (executable)
Binary files a/img/css2/return.png and b/img/css2/return.png differ
index a5116ce..c796e41 100755 (executable)
@@ -31,7 +31,9 @@
 var conf = {\r
    nbMessageAffiche : 40, // (par page)
    pseudoDefaut : "<nick>",\r
-   tempsAffichageMessageDialogue : 4000, // en ms\r
+   tempsAffichageMessageDialogue : 4000, // en ms
+   tempsKick : 15, // en minute
+   tempsBan : 60 * 24 * 3, // en minutes (3jours)\r
    smiles : {   \r
       "smile" : [/:\)/g, /:-\)/g],  \r
       "bigsmile" : [/:D/g, /:-D/g],\r
@@ -945,7 +947,7 @@ Client.prototype.ban = function(userId, raison, minutes)
 
    // par défaut un ban correspond à 3 jours
    if (typeof(minutes) == "undefined")
-      minutes = 60 * 24 * 3
+      minutes = conf.tempsBan;
       
    jQuery.ajax({
       type: "POST",
@@ -970,7 +972,7 @@ Client.prototype.ban = function(userId, raison, minutes)
 
 Client.prototype.kick = function(userId, raison)
 {
-   this.ban(userId, raison, 15)
+   this.ban(userId, raison, conf.tempsKick)
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
index 03bf142..b6c93d8 100755 (executable)
@@ -76,8 +76,9 @@ PageMinichat.prototype.charger = function()
       ).appendTo("body")
       
       this.util.infoBulle("Slap", $("#outilsBan #slap"))
-      this.util.infoBulle("Kick", $("#outilsBan #kick"))
-      this.util.infoBulle("Ban", $("#outilsBan #ban"))
+      this.util.infoBulle("Kick (" + conf.tempsKick + "min)", $("#outilsBan #kick"))
+      this.util.infoBulle("Ban (" + conf.tempsBan / 24 / 60 + " jours)", $("#outilsBan #ban"))
+      this.util.infoBulle("La raison", $("#outilsBan input"))
    }
    
    this.util.infoBulle("Ouvrir la conversation liée au troll de la semaine", $("#trollCourant .troll")) 
@@ -593,6 +594,7 @@ Conversation.prototype.flush = function(funClickOuvrirConv)
                      {
                         thisConversation.client.slap(userId, $("#outilsBan input").val())
                         $("#outilsBan input").val("")
+                        $("#outilsBan").hide()
                      }
                   )
                   $("#kick", outils).click(
@@ -600,6 +602,7 @@ Conversation.prototype.flush = function(funClickOuvrirConv)
                      {
                         thisConversation.client.kick(userId, $("#outilsBan input").val())
                         $("#outilsBan input").val("")
+                        $("#outilsBan").hide()
                      }
                   )
                   $("#ban", outils).click(
@@ -607,6 +610,7 @@ Conversation.prototype.flush = function(funClickOuvrirConv)
                      {
                         thisConversation.client.ban(userId, $("#outilsBan input").val())
                         $("#outilsBan input").val("")
+                        $("#outilsBan").hide()
                      }
                   )
                },
index 56b7d7f..187d6ea 100755 (executable)
@@ -29,6 +29,7 @@
    connect/0,
    connect/1,
    reset/0,
+   update/0,
    
    % users :
    nouveau_user/2,
@@ -167,6 +168,37 @@ reset() ->
    end).
 
 
+% Met à jour la bd, compare ?VERSION_BD avec la version dans la table 'proprietes'
+% et exécute les patchs nécessaires.
+update() ->
+   mnesia:transaction(
+      fun() ->
+         case mnesia:read({proprietes, version}) of
+            [#proprietes{nom = Version}] ->
+               update(Version);
+            _ ->
+               erreur
+         end
+      end
+   ).
+   
+
+% Mise à jour de la BD.
+% attention : il est nécessaire de se trouver dans une transaction.
+update(?VERSION_BD) -> fini;
+update(Version) ->
+   patch(Version),
+   update(Version + 1).
+   
+   
+% Applique une modification de la BD pour passer d'une version à la suivante.
+% 1 -> 2
+patch(1) ->
+   ok.
+% 2 -> 3
+%patch(2) ->
+
+
 % Ajoute un nouveau user et le renvoie
 nouveau_user(Pseudo, Cookie) ->
    F = fun() ->
index 4e5d4ed..bf78f92 100755 (executable)
@@ -23,7 +23,7 @@
 \r
 \r
 -module(euphorik_daemon).
--export([start/1]).
+-export([start/1, reload_euphorik/0]).
 -include("../include/euphorik_defines.hrl").
 
 
@@ -37,7 +37,7 @@ loop() ->
    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
@@ -47,3 +47,18 @@ temps_prochaine_election() ->
    -((calendar:day_of_the_week(Date) - 1) * 86400 + H * 60 * 60 + M * 60 + S),
    % attention au cas où deux dates (maintenant et la date d'éction) ne se trouvent pas dans la même semaine.
    if Delta =< 0 -> Delta + 7 * 86400; true -> Delta end.
+
+
+% Recharge tous les modules euphorik.
+% Appelé lors d'une mise en prod.
+% TODO : récupérer les noms à partir des .beam dans /modules/ebin
+reload_euphorik() ->
+   lists:foreach(
+      fun(M) ->
+         code:purge(M),
+         code:load_file(M)
+      end,
+      [euphorik_minichat_conversation, euphorik_protocole, euphorik_requests, euphorik_bd, euphorik_daemon]
+   ).
+   
+
index 1cadcd6..d7cdd8a 100755 (executable)
 % @author GBurri\r
 
 
+% Version de la BD
+-define(VERSION_BD, 1).
+
+
 % Pour générer des id\r
 -record(counter,\r
    {\r
index b8a5b38..9fe5f8e 100755 (executable)
@@ -15,8 +15,6 @@
 % 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
 
-% Version de la BD
--define(VERSION_BD, 1).
 \r
 % Le temps d'attente après une erreur de login (mauvais login/pass) : une demie seconde\r
 % Permet d'éviter (limiter) les attaques par dictionnaire\r
diff --git a/tools/mise_en_prod.erl b/tools/mise_en_prod.erl
new file mode 100755 (executable)
index 0000000..850c3e8
--- /dev/null
@@ -0,0 +1,16 @@
+#!/usr/bin/env escript
+% coding: utf-8
+
+% Executé sur le serveur après la copie des fichiers lors de la mise en production.
+% Recharge les modules de euphorik et met à jour la BD.
+
+main(_) -> 
+   net_kernel:start([flynux, shortnames]),
+   io:format("recharchement des modules..~n"),
+   _Pid = spawn_link(yaws@flynux, euphorik_daemon, reload_euphorik, []),
+   receive
+      {'EXIT', _, _} ->
+         io:format("mise à jour de la BD..~n"),
+         spawn(yaws@flynux, euphorik_bd, update, [])
+   end.
+
index 356e2f6..09cd568 100755 (executable)
@@ -25,8 +25,8 @@ Dir.chdir('../modules')
 puts `make`
 
 ### COPIE
-$rep_remote = '/tmp/euphorik' #'/var/www/euphorik'
-$host = 'localhost' #"gburri@euphorik.ch:#{rep_remote}"
+$rep_remote = '/var/www/euphorik'
+$host = 'euphorik.ch'
 $opt_rsync = ''
 
 def creer_remote_rep(rep)
@@ -39,7 +39,7 @@ end
 creer_remote_rep('BD')
 
 Dir.chdir('..')
-print `rsync #{$opt_rsync} index.html #{$host}:#{$rep_remote}`
+print `rsync #{$opt_rsync} index.yaws #{$host}:#{$rep_remote}`
 print `rsync #{$opt_rsync} favicon.ico #{$host}:#{$rep_remote}`
 print `rsync #{$opt_rsync} -r css #{$host}:#{$rep_remote}`
 print `rsync #{$opt_rsync} -r --exclude 'autres' img #{$host}:#{$rep_remote}`
@@ -57,3 +57,5 @@ Dir.entries(rep_js).each{|fichier|
 creer_remote_rep('modules')
 `rsync #{$opt_rsync} -r modules/ebin #{$host}:#{$rep_remote}/modules`
 `rsync #{$opt_rsync} -r pages #{$host}:#{$rep_remote}`
+
+