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

Clase para las propuestas

### Methods

approve_if_admin approved? author_name can_be_read_by? delete_photo= has_photo? nullify_url_if_necessary ours_intro_page pending? pretty_body pretty_published_at_for_ferret published? published_at_for_ferret published_month_year_for_ferret rejected? set_name_and_email show_in_agencia show_in_irekia spam? tags_for_ferret translated_to? validates_presence_of_any_language yours_intro_page

### Included Modules

Sluggable FerretMethods DraftUtils::InstanceMethods

### External Aliases

tags_for_ferret | -> | tags_for_ferret_orig

### Attributes

delete_photo | [R] |

### Public Class methods

ours_intro_page()

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

yours_intro_page()

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

approve_if_admin()

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

approved?()

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

author_name()

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

can_be_read_by?(user)

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

delete_photo=(value)

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

has_photo?()

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

nullify_url_if_necessary()

[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

pending?()

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

pretty_body()

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

pretty_published_at_for_ferret()

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

published?()

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

published_at_for_ferret()

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

published_month_year_for_ferret()

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

rejected?()

Indica si la propuesta está rechazada

[Source]

         # File app/models/proposal.rb, line 108
    108:   def rejected?
    109:     status.eql?('rechazado')
    110:   end

set_name_and_email()

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

show_in_agencia()

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

show_in_irekia()

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

spam?()

Indica si la propuesta es spam

[Source]

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

tags_for_ferret()

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

translated_to?(lang_code)

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

validates_presence_of_any_language()

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]