| Class | Proposal |
| In: |
app/models/proposal.rb
|
| Parent: | ActiveRecord::Base |
Clase para las propuestas
| tags_for_ferret | -> | tags_for_ferret_orig |
| delete_photo | [R] |
Texto de introducción para la sección "Nuestras propuestas"
# File app/models/proposal.rb, line 93
93: def Proposal.ours_intro_page
94: our_proposals_intros = Page.find_tagged_with("_inicio_nuestras_propuestas", :scope => :private, :limit => 1)
95: if our_proposals_intros.length > 0
96: return our_proposals_intros.first
97: else
98: return nil
99: end
100: end
Texto de introducción para la sección "Tus propuestas"
# File app/models/proposal.rb, line 83
83: def Proposal.yours_intro_page
84: your_proposals_intros = Page.find_tagged_with("_inicio_tus_propuestas", :scope => :private, :limit => 1)
85: if your_proposals_intros.length > 0
86: return your_proposals_intros.first
87: else
88: return nil
89: end
90: end
Las propuestas de los administradores se aprueban automáticamente
# File app/models/proposal.rb, line 209
209: def approve_if_admin
210: if self.user_id
211: if User.find(self.user_id).is_staff?
212: self.status = 'aprobado'
213: # self.governmental = true
214: end
215: end
216: self.published_at = Time.now if self.published_at.nil?
217: end
Indica si la propuesta está aprobada
# File app/models/proposal.rb, line 103
103: def approved?
104: status.eql?('aprobado') || status.eql?('aprobado tras denuncia')
105: end
Nombre de la persona que hace la propuesta
# File app/models/proposal.rb, line 123
123: def author_name
124: self.user_id ? self.user.public_name : self.name
125: end
Indica si el usuario user puede ver el video. Sólo se usa en las búsquedas.
# File app/models/proposal.rb, line 220
220: def can_be_read_by?(user)
221: self.approved? && self.published?
222: end
Accesor para eliminar la foto de una propuesta
# File app/models/proposal.rb, line 159
159: def delete_photo=(value)
160: self.photo = nil if value.to_i == 1
161: end
Indica si la propuesta tiene foto
# File app/models/proposal.rb, line 153
153: def has_photo?
154: self.photo_file_name.present?
155: end
# File app/models/proposal.rb, line 133
133: def nullify_url_if_necessary
134: self.url = nil if self.url.eql?("http://")
135: end
Indica si la propuesta está pendiente de aprobación
# File app/models/proposal.rb, line 118
118: def pending?
119: status.eql?('pendiente')
120: end
Cuerpo de la propuesta, quitando el separador de la entradilla
# File app/models/proposal.rb, line 138
138: def pretty_body
139: body ? body.sub(/<p.*>###<.*\/p>/, '') : ""
140: end
Fecha de publicación en formato texto para la búsqueda
# File app/models/proposal.rb, line 180
180: def pretty_published_at_for_ferret
181: Proposal::LANGUAGES.inject("") {|str, l| str << "#{I18n.localize(self.published_at, :format => :long, :locale => l)} " if self.published_at && self.approved?}
182: end
Indica si la propuesta está publicada
# File app/models/proposal.rb, line 27
27: def published?
28: !draft && published_at <= Time.now
29: end
Fecha de publicación en formato YYYYMMDD para las búsquedas
# File app/models/proposal.rb, line 164
164: def published_at_for_ferret
165: if published_at && approved?
166: published_at.to_s(:number)
167: else
168: nil
169: end
170: end
Año y mes de publicación para las búsquedas
# File app/models/proposal.rb, line 173
173: def published_month_year_for_ferret
174: if published_at && approved?
175: self.published_at.strftime("%Y%m").to_i
176: end
177: end
Indica si la propuesta está rechazada
# File app/models/proposal.rb, line 108
108: def rejected?
109: status.eql?('rechazado')
110: 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 196
196: def set_name_and_email
197: if self.user
198: self.name = self.user.public_name
199: self.email = self.user.email
200: self.url = self.user.url
201: end
202: end
Indica si se muestra en Agencia. Sólo se usa en las búsquedas
# File app/models/proposal.rb, line 148
148: def show_in_agencia
149: false
150: end
Indica si se muestra en Irekia. Sólo se usa en las búsquedas
# File app/models/proposal.rb, line 143
143: def show_in_irekia
144: true
145: end
Indica si la propuesta es spam
# File app/models/proposal.rb, line 113
113: def spam?
114: status.eql?('spam')
115: end
Tags para indexar para la búsqueda
# File app/models/proposal.rb, line 186
186: def tags_for_ferret
187: if published_at && self.approved?
188: tags = tags_for_ferret_orig
189: else
190: tags = ""
191: end
192: end
Indica si la propuesta está traducida a lang_code, idiomas definidos en Proposal::LANGUAGES
# File app/models/proposal.rb, line 55
55: def translated_to?(lang_code)
56: self.send("title_#{lang_code}").present? && self.send("body_#{lang_code}").present?
57: end
Valida que el título y el cuerpo no está vacío al menos en un idioma
# File app/models/proposal.rb, line 38
38: def validates_presence_of_any_language
39: titles_empty = Proposal::LANGUAGES.collect {|l| l if self.send("title_#{l}").blank?}.compact
40: if titles_empty.length == Proposal::LANGUAGES.length
41: Proposal::LANGUAGES.each do |l|
42: errors.add "title_#{l}", "El título no puede estar vacío"
43: end
44: end
45:
46: bodies_empty = Proposal::LANGUAGES.collect {|l| l if self.send("title_#{l}").blank?}.compact
47: if bodies_empty.length == Proposal::LANGUAGES.length
48: Proposal::LANGUAGES.each do |l|
49: errors.add "body_#{l}", "El cuerpo no puede estar vacío"
50: end
51: end
52: end