| Class | Proposal |
| In: |
app/models/proposal.rb
|
| Parent: | ActiveRecord::Base |
Clase para las propuestas ciudadanas
| tags_for_ferret | -> | tags_for_ferret_orig |
| delete_photo | [R] |
# File app/models/proposal.rb, line 64
64: def self.new_with_user(user_attributes, proposal_attributes)
65: e = Proposal.new(proposal_attributes)
66: e.user= Person.new(user_attributes)
67: return e
68: end
Texto de introducción para la sección "Nuestras propuestas"
# File app/models/proposal.rb, line 109
109: def Proposal.ours_intro_page
110: our_proposals_intros = Page.find_tagged_with("_inicio_nuestras_propuestas", :scope => :private, :limit => 1)
111: if our_proposals_intros.length > 0
112: return our_proposals_intros.first
113: else
114: return nil
115: end
116: end
Texto de introducción para la sección "Tus propuestas"
# File app/models/proposal.rb, line 99
99: def Proposal.yours_intro_page
100: your_proposals_intros = Page.find_tagged_with("_inicio_tus_propuestas", :scope => :private, :limit => 1)
101: if your_proposals_intros.length > 0
102: return your_proposals_intros.first
103: else
104: return nil
105: end
106: end
Las propuestas de los administradores se aprueban automáticamente
# File app/models/proposal.rb, line 238
238: def approve_if_admin
239: if self.user_id
240: if User.find(self.user_id).is_staff?
241: self.status = 'aprobado'
242: # self.governmental = true
243: end
244: end
245: self.published_at = Time.now if self.published_at.nil?
246: end
Indica si la propuesta está aprobada
# File app/models/proposal.rb, line 119
119: def approved?
120: status.eql?('aprobado') || status.eql?('aprobado tras denuncia')
121: end
Nombre de la persona que hace la propuesta
# File app/models/proposal.rb, line 139
139: def author_name
140: self.user_id ? self.user.public_name : self.name
141: end
Accesor para eliminar la foto de una propuesta
# File app/models/proposal.rb, line 179
179: def delete_photo=(value)
180: self.photo = nil if value.to_i == 1
181: end
Indica si la propuesta tiene foto
# File app/models/proposal.rb, line 173
173: def has_photo?
174: self.photo_file_name.present?
175: end
Si el usuario deja la URL con el valor por defecto, se quita porque no es una URL válida
# File app/models/proposal.rb, line 228
228: def nullify_url_if_necessary
229: self.url = nil if self.url.eql?("http://")
230: return true
231: end
Indica si la propuesta está pendiente de aprobación
# File app/models/proposal.rb, line 134
134: def pending?
135: status.eql?('pendiente')
136: end
Cuerpo de la propuesta, quitando el separador de la entradilla
# File app/models/proposal.rb, line 150
150: def pretty_body
151: body ? body.sub(/<p.*>###<.*\/p>/, '') : ""
152: end
Fecha de publicación en formato texto para la búsqueda
# File app/models/proposal.rb, line 200
200: def pretty_published_at_for_ferret
201: Proposal::LANGUAGES.inject("") {|str, l| str << "#{I18n.localize(self.published_at, :format => :long, :locale => l)} " if self.published_at && self.approved?}
202: end
Indica si la propuesta está publicada
# File app/models/proposal.rb, line 36
36: def published?
37: !draft && published_at <= Time.now
38: end
Fecha de publicación en formato YYYYMMDD para las búsquedas
# File app/models/proposal.rb, line 184
184: def published_at_for_ferret
185: if published_at && approved?
186: published_at.to_s(:number)
187: else
188: nil
189: end
190: end
Año y mes de publicación para las búsquedas
# File app/models/proposal.rb, line 193
193: def published_month_year_for_ferret
194: if published_at && approved?
195: self.published_at.strftime("%Y%m").to_i
196: end
197: end
Indica si la propuesta está rechazada
# File app/models/proposal.rb, line 124
124: def rejected?
125: status.eql?('rechazado')
126: end
Copia el nombre e email del usuario en la propuesta. Ya no es necesario. Se llama desde before_validation
# File app/models/proposal.rb, line 218
218: def set_name_and_email
219: if self.user
220: self.name = self.user.public_name
221: self.email = self.user.email
222: self.url = self.user.url
223: end
224: end
Indica si se muestra en Agencia. Sólo se usa en las búsquedas
# File app/models/proposal.rb, line 164
164: def show_in_agencia
165: false
166: end
Indica si se muestra en OpenIrekia. Sólo se usa en las búsquedas
# File app/models/proposal.rb, line 155
155: def show_in_irekia
156: true
157: end
Indica si la propuesta es spam
# File app/models/proposal.rb, line 129
129: def spam?
130: status.eql?('spam')
131: end
Tags para indexar para la búsqueda
# File app/models/proposal.rb, line 206
206: def tags_for_ferret
207: if published_at && self.approved?
208: tags = tags_for_ferret_orig
209: else
210: tags = ""
211: end
212: end
Indica si la propuesta está traducida a lang_code, idiomas definidos en Proposal::LANGUAGES
# File app/models/proposal.rb, line 72
72: def translated_to?(lang_code)
73: self.send("title_#{lang_code}").present? && self.send("body_#{lang_code}").present?
74: end
Valida que el título y el cuerpo no está vacío al menos en un idioma
# File app/models/proposal.rb, line 48
48: def validates_presence_of_any_language
49: titles_empty = Proposal::LANGUAGES.collect {|l| l if self.send("title_#{l}").blank?}.compact
50: if titles_empty.length == Proposal::LANGUAGES.length
51: Proposal::LANGUAGES.each do |l|
52: errors.add "title_#{l}", "El título no puede estar vacío" unless self.send("title_#{l}").nil?
53: end
54: end
55:
56: bodies_empty = Proposal::LANGUAGES.collect {|l| l if self.send("body_#{l}").blank?}.compact
57: if bodies_empty.length == Proposal::LANGUAGES.length
58: Proposal::LANGUAGES.each do |l|
59: errors.add "body_#{l}", "El cuerpo no puede estar vacío" unless self.send("body_#{l}").nil?
60: end
61: end
62: end