Class Proposal
In: app/models/proposal.rb
Parent: ActiveRecord::Base

Clase para las propuestas

Methods

Included Modules

Sluggable FerretMethods DraftUtils::InstanceMethods

External Aliases

tags_for_ferret -> tags_for_ferret_orig

Attributes

delete_photo  [R] 

Public Class methods

Texto de introducción para la sección "Nuestras propuestas"

[Source]

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

[Source]

    # 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

Public Instance methods

Las propuestas de los administradores se aprueban automáticamente

[Source]

     # 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

[Source]

     # 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

[Source]

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

[Source]

     # 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

[Source]

     # 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

[Source]

     # File app/models/proposal.rb, line 153
153:   def has_photo?
154:     self.photo_file_name.present?
155:   end

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

    # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # File app/models/proposal.rb, line 143
143:   def show_in_irekia
144:     true
145:   end

Indica si la propuesta es spam

[Source]

     # File app/models/proposal.rb, line 113
113:   def spam?
114:     status.eql?('spam')
115:   end

Tags para indexar para la búsqueda

[Source]

     # 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

[Source]

    # 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

[Source]

    # 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

[Validate]