| Class | Sadmin::EventsController |
| In: |
app/controllers/sadmin/events_controller.rb
|
| Parent: | Sadmin::BaseController |
Controlador para el acceso a las agendas desde la parte de administración de la web.
Sólo los usuarios que tienen permiso para ver las agendas pueden acceder a este controlador.
Autocomplete para el nombre del sitio
# File app/controllers/sadmin/events_controller.rb, line 347
347: def auto_complete_for_event_place
348: places = EventLocation.find(:all, :conditions => ["tildes(place) ilike ?", "%"+params[:event][:place].tildes+"%"])
349: render :partial => 'event_locations', :object => places
350: end
Autocomplete para el título de la noticia relacionada
# File app/controllers/sadmin/events_controller.rb, line 355
355: def auto_complete_for_event_related_news_title
356: @items = News.find(:all, :conditions => ["tildes(title_es) ILIKE ?", params[:value]+'%'])
357: render :inline => "<%= content_tag(:ul, @items.map {|item| content_tag(:li, item.title)}) %>"
358: end
Calendario de los eventos en un mes.
# File app/controllers/sadmin/events_controller.rb, line 233
233: def calendar
234: @t = "events"
235:
236: respond_to do |format|
237: format.html do
238: render :action => 'index'
239: end
240: format.js do
241: render :update do |page|
242: page.replace_html "events_calendar", :partial => "calendar"
243: end
244: end
245: format.xml { head :ok }
246: end
247: end
Cambiar la agenda de un evento.
# File app/controllers/sadmin/events_controller.rb, line 274
274: def change_schedule
275: if s = Schedule.exists?(params[:new_schedule_id])
276: s = Schedule.find(params[:new_schedule_id])
277: change_schedule_to(s)
278: else
279: flash[:warning] = t('sadmin.events.no_ha_indicado_la_agenda')
280: redirect_to sadmin_event_path(@event)
281: end
282: end
Crear un evento nuevo.
Si los datos son correctos el evento se crea y se muestra la página del evento nuevo. Si algún dato no es válido, se muestra de nuevo el formulario con explicación sobre los datos que no son válidos.
# File app/controllers/sadmin/events_controller.rb, line 144
144: def create
145: @title = t('sadmin.create_what', :what => Event.human_name)
146:
147: schedule_id = params[:event][:schedule_id].to_i
148: if params[:event][:schedule_id] && Schedule.exists?(schedule_id)
149: @schedule = Schedule.find(schedule_id)
150: end
151:
152: @event = @schedule.nil? ? Event.new(params[:event]) : @schedule.events.new(params[:event])
153:
154: if can_create?(@event.class.to_s.tableize)
155: if @event.save
156: flash[:notice] = t('sadmin.events.guardado_correctamente', :what => Event.human_name)
157: redirect_to @schedule.nil? ? sadmin_event_path(@event.id, :fresh => 1) : sadmin_schedule_event_path(:id => @event.id, :schedule_id => @schedule.id, :fresh => 1)
158: else
159: render :action => 'new'
160: end
161: else
162: flash[:notice] = t('no_tienes_permiso')
163: access_denied
164: end
165:
166: end
Borrar un evento.
# File app/controllers/sadmin/events_controller.rb, line 255
255: def delete
256: @event = Event.find(params[:id])
257: clear_event_cache(@event)
258:
259: unless params[:cancel]
260: if @event.update_attributes(:deleted => true)
261: flash[:notice] = t('sadmin.events.marcado_eliminado')
262: else
263: flash[:error] = t('sadmin.events.no_marcado_eliminado')
264: end
265: end
266: redirect_to sadmin_event_path(@event)
267: end
Formulario para modificar los datos de un evento.
# File app/controllers/sadmin/events_controller.rb, line 188
188: def edit
189: @title = t('sadmin.modificar_what', :what => Event.human_name)
190: end
Calendario de los eventos del mes actual.
# File app/controllers/sadmin/events_controller.rb, line 29
29: def index
30: respond_to do |format|
31: format.html {
32: render
33: }
34: format.ics {
35: @events = Event.find(:all, :conditions => ["starts_at >= ?", 3.months.ago])
36: render :layout => false
37: }
38: end
39: end
Lista de los eventos de un día.
# File app/controllers/sadmin/events_controller.rb, line 66
66: def list
67: for_date = Date.new(@selected_date[:year], @selected_date[:month], @selected_date[:day])
68:
69: conditions = ["(starts_at <= :end_hour) and (ends_at >= :beginning)", {:beginning => for_date.beginning_of_day, :end_hour => for_date.end_of_day}]
70:
71: if session[:l_attends] && current_user.can_see_l_schedule?
72: conditions[0] += " AND l_attends='t'"
73: end
74:
75: if @show_agenda.include?('agenda')
76: @documents = event_finder.find(:all, :conditions => conditions, :order => "starts_at")
77: else
78: @documents = []
79: end
80: @documents += get_schedule_events(conditions)
81: @documents.sort! {|a,b| a.sort_position <=> b.sort_position}
82:
83:
84: # @title = t("documents.#{@t.titleize}")
85: @subtitle = I18n.localize(for_date, :format => :long)
86: @prev_day = for_date - 1.day
87: @next_day = for_date + 1.day
88:
89: # If there are no events, redirect to the create event form.
90: redirect_to new_sadmin_event_path(@selected_date) if @documents.empty? && !session[:l_attends] && can_create?("events")
91: end
Marcar un evento como ‘borrado’.
# File app/controllers/sadmin/events_controller.rb, line 250
250: def mark_for_deletion
251: @event = Event.find(params[:id])
252: end
RSS de todos los eventos
# File app/controllers/sadmin/events_controller.rb, line 42
42: def myfeed
43: if params[:u] && params[:p]
44: user = User.authenticate_from_url(params[:u], params[:p])
45: end
46:
47: if user && user.can_access?("events")
48: respond_to do |format|
49: format.ics {
50: # Eventos públicos o privados que ven todos los usuarios con acceso a la agenda.
51: @events = Event.find(:all, :conditions => ["starts_at >= ?", 3.months.ago])
52: # Eventos de las agendas privadas de los departamentos a los que el usuario tiene acceso.
53: user.schedules.each do |s|
54: @events += s.events.find(:all, :conditions => ["starts_at >= ?", 3.months.ago])
55: end
56: render :layout => false
57: }
58: end
59: else
60: flash[:notice] = t('no_tienes_permiso')
61: redirect_to "index"
62: end
63: end
Formulario para crear un nuevo evento.
# File app/controllers/sadmin/events_controller.rb, line 122
122: def new
123: @title = t('sadmin.create_what', :what => Event.human_name)
124:
125: begin
126: default_date = Date.parse("#{@year}-#{@month}-#{@day}")
127: rescue ArgumentError
128: default_date = Time.now
129: end
130:
131: event_params = { :starts_at => default_date, :ends_at => default_date,
132: :show_in_irekia => can?("create_irekia", "events"), :show_in_agencia => can?("create_agencia", "events"), :is_private => can?("create_private", "events"),
133: :organization_id => current_user.department_id,
134: :has_journalists => false, :has_photographers => false, :confirmed => true}
135:
136: @event = can_create?('events') ? Event.new(event_params) : ScheduleEvent.new(event_params.merge(:schedule_id => current_user.editable_schedules.first.id))
137: end
Elegir una nueva agenda para el evento.
# File app/controllers/sadmin/events_controller.rb, line 270
270: def select_schedule
271: end
Inplace editor call
# File app/controllers/sadmin/events_controller.rb, line 332
332: def set_event_related_news_title
333: unless [:post, :put].include?(request.method) then
334: return render(:text => 'Method not allowed', :status => 405)
335: end
336: @event.update_attribute(:related_news_title, params[:value])
337:
338: render :update do |page|
339: page.replace 'related_news_info', :partial => 'related_news', :locals => {:document => @event}
340: end
341:
342: end
Asignar un valor nuevo a session[:l_attends].
El valor de session[:l_attends] indica si en la vista de los eventos salen sólo los eventos a con l_attends=true o todos los eventos.
# File app/controllers/sadmin/events_controller.rb, line 311
311: def set_l_attends
312: if session[:l_attends]
313: session[:l_attends] = nil
314: else
315: if current_user.can_see_l_schedule?
316: session[:l_attends] = true
317: else
318: session[:l_attends] = nil
319: end
320: end
321: redirect_to :back
322: end
Página de un evento. Se muestran todos los datos del evento.
# File app/controllers/sadmin/events_controller.rb, line 169
169: def show
170: @just_created = params[:fresh].to_i.eql?(1)
171: if @just_created
172: @selected_date = {}
173: [:year, :month, :day].each do |key|
174: @selected_date[key] = @event.starts_at.send(key.to_s)
175: end
176: end
177: respond_to do |format|
178: format.html {
179: render
180: }
181: format.ics {
182: render :layout => false
183: }
184: end
185: end
Cambiar el valor del campo l_attends.
# File app/controllers/sadmin/events_controller.rb, line 285
285: def toggle_l_attends
286: if current_user.can_see_l_schedule?
287: @event.toggle!(:l_attends)
288: session[:l_attends] = nil
289: respond_to do |format|
290: format.html do
291: render :action => 'show'
292: end
293: format.js do
294: render :update do |page|
295: page.replace "l_attends_info_div", :partial => '/sadmin/events/l_attends'
296: end
297: end
298: format.xml { head :ok }
299: end
300: else
301: flash[:warning] = 'No tiene permiso para cambiar estos datos.'
302: redirect_to @schedule.nil? ? sadmin_event_path(@event.id) : sadmin_schedule_event_path(:id => @event.id, :schedule_id => @schedule.id)
303: end
304:
305: end
# File app/controllers/sadmin/events_controller.rb, line 324
324: def unrelate
325: if rel = @event.related_items.find_by_eventable_id(params[:related_item_id])
326: rel.destroy
327: end
328: redirect_to sadmin_event_path(:id => @event.id)
329: end
Modificar los datos de un evento.
Si los datos son válidos, estos se guardan en la base de datos y se muestra el evento. Si los datos no son válidos se muestra el formulario con los mensajes de error correspondientes.
# File app/controllers/sadmin/events_controller.rb, line 196
196: def update
197: new_schedule = params[:event].delete(:schedule_id)
198: new_schedule = nil if new_schedule.to_i.eql?(0) || !Schedule.exists?(new_schedule)
199:
200: @event.attributes = params[:event]
201: @title = t('sadmin.modificar_what', :what => Event.human_name)
202:
203: clear_event_cache(@event)
204:
205: if event_type_changed?(new_schedule)
206: if @event.is_a?(Event)
207: if schedule = Schedule.find(new_schedule)
208: change_schedule_to(schedule)
209: else
210: flash[:notice] = 'No puede modificar la agenda'
211: render(:action => :edit)
212: end
213: end
214: if @event.is_a?(ScheduleEvent)
215: change_schedule_to_agenda
216: end
217: return
218: else
219: @event.schedule_id = new_schedule if @event.is_a?(ScheduleEvent) && current_user.can_change_schedule?(@event.schedule_id) && current_user.can_change_schedule?(new_schedule)
220: if params[:event][:private_event].nil? && @event.respond_to?('private_event=')
221: @event.private_event = 1
222: end
223: if @event.save
224: flash[:notice] = t('sadmin.events.guardado_correctamente', :what => Event.human_name)
225: redirect_to @event.schedule_id.nil? ? sadmin_event_path(:id => @event.id) : sadmin_schedule_event_path(:id => @event.id, :schedule_id => @event.schedule_id)
226: else
227: render :action => params[:return_to] || 'edit'
228: end
229: end
230: end
Lista de los eventos en una semana.
# File app/controllers/sadmin/events_controller.rb, line 94
94: def week
95: for_date = Date.new(@selected_date[:year], @selected_date[:month], @selected_date[:day])
96:
97: @first_day_of_week = for_date.beginning_of_week
98:
99: conditions = ["(starts_at <= :end_hour) and (ends_at >= :beginning)", {:beginning => for_date.beginning_of_week.to_time, :end_hour => for_date.end_of_week.to_time.end_of_day}]
100:
101: if session[:l_attends] && current_user.can_see_l_schedule?
102: conditions[0] += " AND l_attends='t'"
103: end
104:
105: if @show_agenda.include?('agenda')
106: @events = event_finder.find(:all, :conditions => conditions, :order => "starts_at")
107: else
108: @events = []
109: end
110: @events += get_schedule_events(conditions)
111:
112: #@title = t("documents.#{@t.titleize}")
113: @subtitle = "#{I18n.localize(for_date.beginning_of_week, :format => :long)} - #{I18n.localize(for_date.end_of_week, :format => :long)}"
114: end