Method: NetworksController#set_parameters

Defined in:
app/controllers/networks_controller.rb

#set_parametersObject

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
  messages = []

  # 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
    messages << "#{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
    messages << "#{obj_type.humanize} set to '%s'." % obj_name
  end
  
  if messages.empty?
    flash[:notice] = "Network not modified"
  else
    panels.each { |p| p.save! }
    flash[:notice] = messages.join(" ")
  end
  redirect_to :action => 'show', :id => network
end