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.

Methods

Public Instance methods

Autocomplete para el nombre del sitio

[Source]

     # 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

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

    # 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.

[Source]

    # 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’.

[Source]

     # 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

[Source]

    # 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.

[Source]

     # 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.

[Source]

     # File app/controllers/sadmin/events_controller.rb, line 270
270:   def select_schedule
271:   end

Inplace editor call

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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

Vista alternativa para los eventos de una semana.

[Source]

     # File app/controllers/sadmin/events_controller.rb, line 117
117:   def week2
118:     week
119:   end

[Validate]