Class DocumentsController
In: app/controllers/documents_controller.rb
Parent: ApplicationController

Controlador para las News de OpenIrekia. Se llama DocumentController porque inicialmente News, Page y Event eran tan parecidos que compartían controller. Paulatinamente se fueron diferenciando y News se quedó con este controller mientras que se crearon nuevos para Event y Page

Methods

department   image   index   show   vote  

Public Instance methods

RSS para las noticias de cada departamento

[Source]

    # File app/controllers/documents_controller.rb, line 35
35:   def department
36:     @department = Department.find(params[:id])
37:     @feed_title = t('documents.feed_title', :name => @department.name)
38:     organization_ids = [@department.id] + @department.organization_ids
39:     @documents = News.in_irekia.published.translated.find :all, 
40:       :conditions => "organization_id in (#{organization_ids.join(',')})",
41:       :order => 'published_at DESC', :limit => 10
42:     respond_to :rss
43:   end

Devuelve una imagen de una noticia, generando el tamaño solicitado por el camino si este no existe ya

[Source]

     # File app/controllers/documents_controller.rb, line 139
139:   def image
140:     if params[:path].present? && params[:size].present?
141:       file_to_send = get_or_generate_desired_image(params[:path], params[:size])
142:       send_file(file_to_send, :type => 'image/jpeg', :disposition => 'inline')
143:     else
144:       render :nothing => true
145:     end
146:   end

Listado de noticias

[Source]

    # File app/controllers/documents_controller.rb, line 11
11:   def index
12:     @title = t('documents.News')
13:     @feed_title = t('documents.feed_title', :name => t('site_name'))
14:     @dept = nil
15:     conditions = nil
16:     
17:     if params[:dept]
18:       @dept = Department.find(:first, :conditions => ["tag_name = ?", "_#{params[:dept]}"])
19:       if @dept
20:         organization_ids = [@dept.id] + @dept.organization_ids
21:         conditions = "organization_id in (#{organization_ids.join(',')})"
22:       end
23:     end
24:     
25:     @documents = News.in_irekia.published.translated.paginate :conditions => conditions,
26:       :page => params[:page], :per_page => 15, 
27:       :order => 'published_at DESC'
28:     respond_to do |format|
29:       format.html 
30:       format.rss {render :layout => false}
31:     end
32:   end

Vista de una noticia con el nuevo diseño

[Source]

     # File app/controllers/documents_controller.rb, line 75
 75:   def show
 76:     begin
 77:       @document = News.in_irekia.published.find(params[:id])
 78:     rescue ActiveRecord::RecordNotFound
 79:       if can_edit?("news")
 80:         @document = News.in_irekia.find(params[:id])
 81:       else
 82:         raise ActiveRecord::RecordNotFound
 83:       end
 84:     end
 85: 
 86:     @parent = @document
 87:     @comments = @document.comments.approved.paginate :page => params[:page], :per_page => 50
 88:     
 89:     @content_title = t('documents.comunicacion_y_opinion')
 90:     
 91:     @videos_flv = @document.videos(subsite)[:list][I18n.locale.to_sym] + [@document.featured_video(subsite)]
 92:     @videos_mpg = @document.videos(subsite)[:mpg][I18n.locale.to_sym]
 93:              
 94:     
 95:     respond_to do |format|
 96:       format.html { render }
 97:       format.iphone { render }
 98:       format.android { render }
 99:       format.floki { render }
100:       format.ipad { render :action => "show.floki", :layout => "application.floki" }
101:     end
102:   end

Antiguamente se podían votar las noticias. Esta funcionalidad esta desactivada

[Source]

     # File app/controllers/documents_controller.rb, line 105
105:   def vote
106:     @document = News.published.in_irekia.find(params[:id])
107:     
108:     @document.ratings.build(:rating => params[:vote].to_i)
109:     
110:     if @document.save
111:       cookies["vote_#{@document.id}"] = {:value => params[:vote], :expires => 1.month.from_now}
112:       respond_to do |format|
113:         format.html {
114:           flash[:notice] = "Gracias por tu voto"
115:           redirect_to @document
116:         }
117:         format.js {
118:           render :update do |page|
119:             page.replace :vote_action, :partial => "voted", :locals => {:vote => params[:vote].to_i}
120:             page<<"$('current_rating').setStyle({width: '#{(@document.ratings.average('rating')/5.0*100).to_i}%'})"
121:           end
122:         }
123:       end
124:     else
125:       respond_to do |format|
126:         format.html {
127:           flash[:error] = "Tu voto no se ha guardado. Por favor, inténtalo más tarde"
128:           redirect_to @document
129:         }
130:         format.js {
131:           logger.info "El voto no se ha guardado: #{@document.errors.inspect}" 
132:           render :nothing => true
133:         }
134:       end
135:     end
136:   end

[Validate]