Class: NetworksController
- Inherits:
-
ApplicationController
- Object
- ActionController::Base
- ApplicationController
- NetworksController
- Defined in:
- app/controllers/networks_controller.rb
Overview
Gestion des réseaux de publicité
Ce contrôleur gère les objets Network. Il permet de :
-
Lister les réseaux
-
Créer/supprimer des réseaux
-
Afficher et modifier le nom et le statut d’un réseau
-
Modifier les paramètres d’un réseau :
-
Texture
-
Landmark
-
Notecard
-
URL
-
Media URL
-
etc.
-
-
Ajouter/enlever des panneaux (Panel) d’un réseau.
Instance Method Summary collapse
-
#add_panel ⇒ Object
Ajoute un panneau dans un réseau.
-
#create ⇒ Object
Création d’un nouveau réseau vide.
-
#destroy ⇒ Object
Suppression d’un réseau.
-
#edit ⇒ Object
Formulaire d’édition d’un réseau.
-
#index ⇒ Object
Renvoie vers l’action ‘list’.
-
#list ⇒ Object
Liste des réseaux.
-
#new ⇒ Object
Formulaire de création d’un nouveau réseau.
-
#remove_panel ⇒ Object
Enlève un panneau d’un réseau, sans le supprimer.
-
#set_parameters ⇒ Object
Modifie les paramètres du réseau et de ses panneaux :.
-
#show ⇒ Object
Affiche un réseau, ses caractéristiques et l’ensemble des panneaux membres.
-
#show_parameters_form ⇒ Object
Affiche le formulaire de modification des paramètres du réseau, en AJAX.
-
#update ⇒ Object
Edition d’un réseau.
Instance Method Details
#add_panel ⇒ Object
Ajoute un panneau dans un réseau.
Input
-
Variable POST
panel_id
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 |
# File 'app/controllers/networks_controller.rb', line 243 def add_panel network = Network.find(params[:id]) panel = Panel.find(params[:panel_id]) # On n'ajoute pas un panneau déjà membre d'un autre réseau if panel.network.nil? # Si le réseau a déjà des panneaux, donc des caractéristiques, il faut les appliquer # au nouveau panneau reference_panel = network.panels.first if reference_panel panel.texture = reference_panel.texture panel.notecard = reference_panel.notecard panel.landmark = reference_panel.landmark panel.url = reference_panel.url panel.mediaurl = reference_panel.mediaurl end # Et maintenant on ajoute le panneau au réseau network.panels << panel flash[:notice] = "Panel '#{panel.name} : #{panel.furniture.name}' added to network." else flash[:notice] = "Panel '#{panel.name} : #{panel.furniture.name}' already belongs to a network ('#{panel.network.name}')." end redirect_to :action => 'show', :id => network rescue ActiveRecord::RecordNotFound flash[:notice] = "Add panel: Invalid network id ('#{params[:id]}') or panel id ('#{params[:panel_id]}')." redirect_to :action => 'list' end |
#create ⇒ Object
Création d’un nouveau réseau vide.
Input
-
network[]
: Paramètres de création du réseau
111 112 113 114 115 116 117 118 119 |
# File 'app/controllers/networks_controller.rb', line 111 def create @network = Network.new(params[:network]) if @network.save flash[:notice] = 'Network was successfully created.' redirect_to :action => 'show', :id => @network else render :action => 'new' end end |
#destroy ⇒ Object
Suppression d’un réseau.
Tous les panneaux membres du réseau deviennent disponibles.
Input
-
id
: Network id
152 153 154 155 156 157 |
# File 'app/controllers/networks_controller.rb', line 152 def destroy network = Network.find(params[:id]) network.destroy flash[:notice] = "Network '#{network.name}' deleted." redirect_to :action => 'list' end |
#edit ⇒ Object
Formulaire d’édition d’un réseau.
Input
-
id
: Network id
126 127 128 |
# File 'app/controllers/networks_controller.rb', line 126 def edit @network = Network.find(params[:id]) end |
#index ⇒ Object
Renvoie vers l’action ‘list’
23 24 25 26 |
# File 'app/controllers/networks_controller.rb', line 23 def index list render :action => 'list' end |
#list ⇒ Object
Liste des réseaux
33 34 35 |
# File 'app/controllers/networks_controller.rb', line 33 def list @network_pages, @networks = paginate :networks, :per_page => 10 end |
#new ⇒ Object
Formulaire de création d’un nouveau réseau.
102 103 104 |
# File 'app/controllers/networks_controller.rb', line 102 def new @network = Network.new end |
#remove_panel ⇒ Object
Enlève un panneau d’un réseau, sans le supprimer.
Input
-
id
: Network id -
Variable POST
panel_id
: Panel id
227 228 229 230 231 232 233 234 235 236 |
# File 'app/controllers/networks_controller.rb', line 227 def remove_panel network = Network.find(params[:id]) panel = network.panels.find(params[:panel_id]) network.panels.delete(panel) flash[:notice] = "Panel '#{panel.name} : #{panel.furniture.name}' removed from network." redirect_to :action => 'show', :id => network rescue ActiveRecord::RecordNotFound flash[:notice] = "Remove panel: Invalid network id ('#{params[:id]}') or panel id ('#{params[:panel_id]}')." redirect_to :action => 'list' end |
#set_parameters ⇒ Object
Modifie les paramètres du réseau et de ses panneaux :
-
Texture
-
Notecard
-
Landmark
-
URL
-
Media URL
-
etc.
La liste des ObjectInWold et ObjectOffWorld est dans les constantes TYPES définies dans chacun des deux modèles.
Les paramètres sont fournis par l’action ‘show’.
Input
-
id
: Network id
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 |
# File 'app/controllers/networks_controller.rb', line 176 def set_parameters network = Network.find(params[:id]) # liste des panneaux à mettre à jour panels = network.panels # Messages à afficher = [] # Traitement Texture, Landmark et Notecard (et autres) ObjectInWorld::TYPES.each do |obj_type| obj_id = params[:network_parameters]["#{obj_type}_id".intern] # Si obj_id est une chaîne vide, alors il faut supprimer l'association avec ce type d'objet # uniquement. Sinon il faut aussi le remplacer dans le nouvel objet. obj = ObjectInWorld.find(obj_id) rescue nil obj_name = obj ? obj.name : 'None' panels.each do |p| # On simule les expressions de type "p.texture = obj" avec 'send' p.send("#{obj_type}=", obj) end << "#{obj_type.humanize} set to '%s'." % obj_name end # Traitement URL, Media URL, etc ObjectOffWorld::TYPES.collect { |t| t.last }.each do |obj_type| obj_id = params[:network_parameters]["#{obj_type}_id".intern] # Si obj_id est une chaîne vide, alors il faut supprimer l'association avec ce type d'objet # uniquement. Sinon il faut aussi le remplacer dans le nouvel objet. obj = ObjectOffWorld.find(obj_id) rescue nil obj_name = obj ? obj.name : 'None' panels.each do |p| # On simule les expressions de type "p.url = obj" avec 'send' p.send("#{obj_type}=", obj) end << "#{obj_type.humanize} set to '%s'." % obj_name end if .empty? flash[:notice] = "Network not modified" else panels.each { |p| p.save! } flash[:notice] = .join(" ") end redirect_to :action => 'show', :id => network end |
#show ⇒ Object
Affiche un réseau, ses caractéristiques et l’ensemble des panneaux membres. Affiche aussi les formulaire permettant de modifier le réseau, son paramétrage et sa composition.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'app/controllers/networks_controller.rb', line 40 def show @network = Network.find(params[:id]) # La liste de tous les panneaux disponibles. @unassigned_panels = Panel.unassigned_panels.map { |p| [ "#{p.name} (#{p.furniture.name})", p.id ]} # On extrait les caractéristiques du réseau depuis le premier panneau # XXX : Ceci suppose que tous les panneaux du réseau sont strictement dans la même configuration. panel1 = @network.panels.first if panel1 @network_parameters = OpenStruct.new( :texture => panel1.objects_in_world.find_by_otype("texture"), :landmark => panel1.objects_in_world.find_by_otype("landmark"), :notecard => panel1.objects_in_world.find_by_otype("notecard"), :url => panel1.objects_off_world.find_by_otype("url"), :mediaurl => panel1.objects_off_world.find_by_otype("mediaurl") ) # @network_parameters.texture_id = @network_parameters.texture.id rescue nil # @network_parameters.landmark_id = @network_parameters.landmark.id rescue nil # @network_parameters.notecard_id = @network_parameters.notecard.id rescue nil # @network_parameters.url_id = @network_parameters.url.id rescue nil # @network_parameters.mediaurl_id = @network_parameters.mediaurl.id rescue nil # # @textures = ObjectInWorld.find_all_by_otype("texture", :order => "name").map { |t| [ t.name, t.id ] } # @landmarks = [ [ 'No Landmark', nil ] ] + ObjectInWorld.find_all_by_otype("landmark", :order => "name").map { |t| [ t.name, t.id ] } # @notecards = [ [ 'No Notecard', nil ] ] + ObjectInWorld.find_all_by_otype("notecard", :order => "name").map { |t| [ t.name, t.id ] } # @urls = [ [ 'No URL', nil ] ] + ObjectOffWorld.find_all_by_otype("url", :order => "name").map { |t| [ "#{t.name} : #{t.content}", t.id ] } # @mediaurls = [ [ 'No Media URL', nil ] ] + ObjectOffWorld.find_all_by_otype("mediaurl", :order => "name").map { |t| [ "#{t.name} : #{t.content}", t.id ] } else @network_parameters = nil end end |
#show_parameters_form ⇒ Object
Affiche le formulaire de modification des paramètres du réseau, en AJAX
Input
-
id : Network id
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'app/controllers/networks_controller.rb', line 76 def show_parameters_form @network = Network.find(params[:id]) # On extrait les caractéristiques du réseau depuis le premier panneau # XXX : Ceci suppose que tous les panneaux du réseau sont strictement dans la même configuration. panel1 = @network.panels.first @network_parameters = OpenStruct.new( :texture => panel1.objects_in_world.find_by_otype("texture"), :landmark => panel1.objects_in_world.find_by_otype("landmark"), :notecard => panel1.objects_in_world.find_by_otype("notecard"), :url => panel1.objects_off_world.find_by_otype("url"), :mediaurl => panel1.objects_off_world.find_by_otype("mediaurl") ) @network_parameters.texture_id = @network_parameters.texture.id rescue nil @network_parameters.landmark_id = @network_parameters.landmark.id rescue nil @network_parameters.notecard_id = @network_parameters.notecard.id rescue nil @network_parameters.url_id = @network_parameters.url.id rescue nil @network_parameters.mediaurl_id = @network_parameters.mediaurl.id rescue nil @textures = ObjectInWorld.find_all_by_otype("texture", :order => "name").map { |t| [ t.name, t.id ] } @landmarks = [ [ 'No Landmark', nil ] ] + ObjectInWorld.find_all_by_otype("landmark", :order => "name").map { |t| [ t.name, t.id ] } @notecards = [ [ 'No Notecard', nil ] ] + ObjectInWorld.find_all_by_otype("notecard", :order => "name").map { |t| [ t.name, t.id ] } @urls = [ [ 'No URL', nil ] ] + ObjectOffWorld.find_all_by_otype("url", :order => "name").map { |t| [ "#{t.name} : #{t.content}", t.id ] } @mediaurls = [ [ 'No Media URL', nil ] ] + ObjectOffWorld.find_all_by_otype("mediaurl", :order => "name").map { |t| [ "#{t.name} : #{t.content}", t.id ] } end |
#update ⇒ Object
Edition d’un réseau.
Input
-
id
: Network id
135 136 137 138 139 140 141 142 143 |
# File 'app/controllers/networks_controller.rb', line 135 def update @network = Network.find(params[:id]) if @network.update_attributes(params[:network]) flash[:notice] = 'Network was successfully updated.' redirect_to :action => 'show', :id => @network else render :action => 'edit' end end |