module Tools::Event

OpenIrekia v4.0.0

Copyright 2009-2013 eFaber, S.L. Copyright 2009-2013 Ejie, S.A. Copyrigth 2009-2013 Dirección de Gobierno Abierto y Comunicación en Internet;

Gobernu Irekirako eta Interneteko Komunikaziorako Zuzendaritza; Lehendakaritza.
Gobierno Vasco – Eusko Jaurlaritza

Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto sean aprobadas por la Comisión Europea– versiones posteriores de la EUPL (la Licencia); Solo podrá usarse esta obra si se respeta la Licencia. Puede obtenerse una copia de la Licencia en: ec.europa.eu/idabc/eupl Salvo cuando lo exija la legislación aplicable o se acuerde por escrito, el programa distribuido con arreglo a la Licencia se distribuye TAL CUAL, SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ni expresas ni implícitas. Véase la Licencia en el idioma concreto que rige los permisos y limitaciones que establece la Licencia

http://open.irekia.net, openirekia@efaber.net

Public Instance Methods

between?(first_day, last_day) click to toggle source

Indica si el evento empieza o acaba entre first_day y last_day.

# File app/models/tools/event.rb, line 35
def between?(first_day, last_day)
  ((self.ends_at.to_date >= first_day) && (self.ends_at.to_date <= last_day)) || ((self.starts_at.to_date >= first_day) && (self.starts_at.to_date <= last_day))
end
ends_later_than_it_starts() click to toggle source

Añade a la lista de errors una entrada si la fecha de inicio es posterior a la de fin del evento.

Método que se usa en after_save.

# File app/models/tools/event.rb, line 109
def ends_later_than_it_starts
  errors.add_to_base "La fecha de fin debe ser posterior a la de inicio" if self.ends_at < self.starts_at
end
fill_lat_lng_data() click to toggle source

Rellena los datos de longitud y latitud.

Método que se usa en after_save.

# File app/models/tools/event.rb, line 116
def fill_lat_lng_data
  if location_for_gmaps_changed? || place_changed?
    # Primero miramos en la lista de lugares comunes
    if eloc = EventLocation.find_by_place_and_city_and_address(self.place, self.city, self.location_for_gmaps)
      self.lat, self.lng = eloc.lat, eloc.lng
    else      
      if "#{location_for_gmaps} #{city}".blank?
        self.lat = self.lng = nil
      else
        # Preguntar a Google
        full_location = "#{location_for_gmaps}, #{city}, Spain"
        loc = MultiGeocoder.geocode("#{full_location}")
        unless loc.success
          loc = MultiGeocoder.geocode(location_for_gmaps)
        end

        if loc.success
          self.lat, self.lng = loc.lat, loc.lng
        end
      end
    end
  end
end
microformat_body() click to toggle source

Muestra la descripción del evento en formato apropiado para usarlo como microformat

# File app/models/tools/event.rb, line 86
def microformat_body
  m = body.to_s.match(/(.+)<p.*>###<\/p>(.+)/)
  # m = body.match(/((.+?)<\/p>)/m)
  if m 
    b = "<div class='description'>#{m[1]}</div>
      #{m[2]}"
  else
    b = body
  end
  return b
end
passed?() click to toggle source

Indica si el evento ya ha pasado

# File app/models/tools/event.rb, line 30
def passed?
  (self.ends_at < Time.zone.now) && !((self.ends_at.to_date.eql?(Time.zone.now.to_date)) && self.ends_at.strftime('%H%M').eql?("0000"))
end
pretty_body() click to toggle source

Fomatea la descripción del evento.

# File app/models/tools/event.rb, line 40
def pretty_body
   body ? body.sub(/<p.*>###<.*\/p>/, '') : ""
end
pretty_dates(locale=I18n.locale) click to toggle source

Muestra las fechas del evento en el idioma correspondinte con el formato para este idioma. Si está indicada la hora, ésta también se muestra.

# File app/models/tools/event.rb, line 46
def pretty_dates(locale=I18n.locale)
  if starts_at.eql?(ends_at)
    if starts_at.strftime('%H%M') == "0000"
      # Remove hour if it is scheduled for midnight
      I18n.localize(starts_at.to_date, :format => :long, :locale => locale)
    else
      I18n.localize(starts_at, :format => :long, :locale => locale)
    end
  elsif starts_at.to_date.eql?(ends_at.to_date)
    # Same day, different hours
    "#{I18n.localize(starts_at.to_date, :format => :long, :locale => locale)}, #{starts_at.strftime('%H:%M')} - #{ends_at.strftime('%H:%M')}" 
  else
    # Different dates
    start_date = starts_at.strftime('%H%M') == "0000" ? I18n.localize(starts_at.to_date, :format => :long, :locale => locale) : I18n.localize(starts_at, :format => :long, :locale => locale)
    end_date = ends_at.strftime('%H%M') == "0000" ? I18n.localize(ends_at.to_date, :format => :long, :locale => locale) : I18n.localize(ends_at, :format => :long, :locale => locale)
    "#{start_date} - #{end_date}"
  end
end
pretty_hours(locale=I18n.locale) click to toggle source

Muestra las horas de inicio y final del evento.

# File app/models/tools/event.rb, line 67
def pretty_hours(locale=I18n.locale)
  if starts_at.to_date.eql?(ends_at.to_date)
    # Same day, different hours
    "#{starts_at.strftime('%H:%M')} - #{ends_at.strftime('%H:%M')}" 
  else
    # Different dates
    start_date = starts_at.strftime('%H%M') == "0000" ? I18n.localize(starts_at.to_date, :format => :long, :locale => locale) : I18n.localize(starts_at, :format => :long, :locale => locale)
    end_date = ends_at.strftime('%H%M') == "0000" ? I18n.localize(ends_at.to_date, :format => :long, :locale => locale) : I18n.localize(ends_at, :format => :long, :locale => locale)
    "#{start_date} - #{end_date}"
  end    
end
pretty_place() click to toggle source

Muestra la información sobre el lugar del evento.

# File app/models/tools/event.rb, line 80
def pretty_place
  full_info = [self.place, self.city].map {|e| e.blank? ? nil : e }.compact
  full_info.empty? ? "" : full_info.join(", ")
end
same_day?(evt) click to toggle source

Indica si el evento self y el evt2 son del mismo día.

# File app/models/tools/event.rb, line 141
def same_day?(evt)
  self.starts_at.to_date.eql?(evt.starts_at.to_date)
end