Class: PanelsController
- Inherits:
-
ApplicationController
- Object
- ActionController::Base
- ApplicationController
- PanelsController
- Defined in:
- app/controllers/panels_controller.rb
Overview
Gestion des panneaux
Ce contrôleur gère les panneaux (Panel). Il permet de :
-
Liste les panneaux
-
Enregistrer un nouveau panneau depuis SL
-
Mettre à jour un panneau depuis SL
-
Enregistrer le clic d’un avatar dans SL et lui envoyer URL ou Media URL
Instance Method Summary collapse
-
#avtouch ⇒ Object
Un avatar clique sur le panel.
-
#destroy ⇒ Object
Si le panneau n’a pas donné signe de vie depuis 5 fois le délais prévu on le supprime de la base.
-
#destroydead ⇒ Object
Détruit tous les panneaux qui n’ont pas contacté le serveur depuis 5 x le delay.
-
#index ⇒ Object
Affiche l’index, par défaut la liste des panneaux.
-
#list ⇒ Object
Liste des panneauxs disponibles.
-
#register ⇒ Object
Enregistrement d’un nouveau panneau.
-
#show ⇒ Object
Affiche le détail d’un panneau.
-
#update ⇒ Object
Mise à jour du panel.
Instance Method Details
#avtouch ⇒ Object
Un avatar clique sur le panel
Input
-
Environnement Second Life transmis en HTTP
-
avatar_key
: Clé SL de l’avatar qui a cliqué
Output
-
Le serveur envoie 1 ou 2 mails à des containers pour qu’ils envoient à leur tour un landmark et/ou une notecard à l’avatar.
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'app/controllers/panels_controller.rb', line 120 def avtouch # Récupère le panel, l'avatar, la notecard, le landmark panel = Panel.find_by_panel_key(@slattrs[:key]) if panel.nil? render :text => "The panel id '#{@slattrs[:key]}' does not exist.", :status => "409 Undefined panel '#{@slattrs[:key]}'", :layout => false, :content_type => "text/plain" return end if !(avatar_key = params[:avatar_key]) render :text => "Missing avatar key.", :status => "409 Missing avatar key", :layout => false, :content_type => "text/plain" return end # Trouve les landmark et notecard associés, ou une valeur par défaut landmark = panel.landmark notecard = panel.notecard # On envoie successivement un mail pour landmark et un pour notecard, # mais uniquement s'il y a quelque chose à envoyer (!= nil). [ landmark, notecard ].each do |obj| Mailer.deliver_avtouch(obj.container.container_key, avatar_key, obj.name) if obj end # Fini render :text => "Objects sent.", :layout => false, :content_type => "text/plain" end |
#destroy ⇒ Object
Si le panneau n’a pas donné signe de vie depuis 5 fois le délais prévu on le supprime de la base
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'app/controllers/panels_controller.rb', line 156 def destroy # On récupère le delay du furniture associé panel = Panel.find(params[:id]) delay = Furniture.find(panel.furniture.id).delay updated_time = panel.updated_at + 5 * delay * 60 # Si la date actuelle est > à date du updated_at + 5xdelay (également présent dans la vue) # # on affiche le bouton de suppression if updated_time < Time::now # On sauve dans la table revision # save_to_revision_table panel.destroy end redirect_to :action => 'list' end |
#destroydead ⇒ Object
Détruit tous les panneaux qui n’ont pas contacté le serveur depuis 5 x le delay
174 175 176 177 178 179 180 181 182 183 |
# File 'app/controllers/panels_controller.rb', line 174 def destroydead for panel in Panel.find_all for column in Panel.content_columns if (panel.updated_at + 5 * Furniture.find(panel.furniture.id).delay * 60) < Time.now panel.destroy end end end redirect_to :action => 'list' end |
#index ⇒ Object
Affiche l’index, par défaut la liste des panneaux
17 18 19 20 |
# File 'app/controllers/panels_controller.rb', line 17 def index list render :action => 'list' end |
#list ⇒ Object
Liste des panneauxs disponibles
27 28 29 |
# File 'app/controllers/panels_controller.rb', line 27 def list @panel_pages, @panels = paginate :panels, :per_page => 10 end |
#register ⇒ Object
Enregistrement d’un nouveau panneau
Input
-
Environnement Second Life transmis en HTTP
furniture_key
-
Clé SL du mobilier possédant ce panneau
Output
-
Le délai de mise à jour, sous la forme :
delay=delay
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'app/controllers/panels_controller.rb', line 46 def register # Quel est le mobilier parent ? furniture_key = params[:furniture_key] furniture = Furniture.find_by_furniture_key(furniture_key) if furniture.nil? render :text => "The furniture id '#{furniture_key}' does not exist.", :status => "409 Undefined furniture '#{furniture_key}'", :layout => false, :content_type => "text/plain" return end # Création ou mise à jour du panneau panel = Panel.find_or_initialize_by_panel_key(@slattrs[:key]) panel.furniture = furniture panel.update_attributes!(:name => @slattrs[:name]) render :text => "delay=%#{furniture.delay}%", :layout => false, :content_type => "text/plain" end |
#show ⇒ Object
Affiche le détail d’un panneau
32 33 34 |
# File 'app/controllers/panels_controller.rb', line 32 def show @panel = Panel.find(params[:id]) end |
#update ⇒ Object
Mise à jour du panel
Input
-
Environnement Second Life transmis en HTTP
Output
-
Le délai de mise à jour, la texture, l’url, la media url sous la forme suivante avec un attribut par ligne :
delay=delay
texture=texture_key
url=url
mediaurl=mediaurl
Quand il n’y a pas d’URL ou de Media URL, le contenu envoyé est respectivement nourl
ou nomedia
.
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'app/controllers/panels_controller.rb', line 81 def update # Mise à jour du panel panel = Panel.find_by_panel_key(@slattrs[:key]) if panel.nil? render :text => "The panel id '#{@slattrs[:key]}' does not exist.", :status => "409 Undefined panel '#{@slattrs[:key]}'", :layout => false, :content_type => "text/plain" return end # Trouve la texture associée texture = panel.texture.object_key # Trouve les URL et Media URL associées, ou une valeur par défaut url = if (obj = panel.url) obj.content else "nourl" end mediaurl = if (obj = panel.mediaurl) obj.content else "nomedia" end # Construit et envoie la réponse panel_response = [ ["delay", panel.furniture.delay], ["texture", texture], ["url", url], ["mediaurl", mediaurl] ].map { |pair| "#{pair[0]}=#{pair[1]}" }.join("\n") render :text => panel_response, :layout => false, :content_type => "text/plain" end |