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

Clase para las propuestas ciudadanas

Methods

Included Modules

Sluggable DraftUtils::InstanceMethods FerretMethods

External Aliases

tags_for_ferret -> tags_for_ferret_orig

Attributes

delete_photo  [R] 

Public Class methods

[Source]

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

[Source]

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

[Source]

     # 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

Public Instance methods

Las propuestas de los administradores se aprueban automáticamente

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

    # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # File app/models/proposal.rb, line 164
164:   def show_in_agencia
165:     false
166:   end

[Source]

     # File app/models/proposal.rb, line 168
168:   def show_in_agencia?
169:     show_in_agencia
170:   end

Indica si se muestra en OpenIrekia. Sólo se usa en las búsquedas

[Source]

     # File app/models/proposal.rb, line 155
155:   def show_in_irekia
156:     true
157:   end

[Source]

     # File app/models/proposal.rb, line 159
159:   def show_in_irekia?
160:     show_in_irekia
161:   end

Indica si la propuesta es spam

[Source]

     # File app/models/proposal.rb, line 129
129:   def spam?
130:     status.eql?('spam')
131:   end

Tags para indexar para la búsqueda

[Source]

     # 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

[Source]

    # 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

[Source]

    # 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

[Validate]