Class Sadmin::NewsController
In: app/controllers/sadmin/news_controller.rb
Parent: Sadmin::BaseController

Controlador para la gestión simplificada de noticias. Aquí está la gestión de las funciones que pueden realizar los usuarios de tipo DepartmentMember, DepartmentEditor y StaffChief. Funciones para los administradores generales están en Admin::DocumentsController

Methods

Public Instance methods

Devuelve los tags que coinciden con el string buscado en el auto complete

[Source]

     # File app/controllers/sadmin/news_controller.rb, line 149
149:   def auto_complete_for_news_tag_list
150:     auto_complete_for_tag_list(params[:news][:tag_list])
151:     if @tags.length > 0
152:       render :inline => "<%= content_tag(:ul, @tags.map {|t| content_tag(:li, t.nombre)}) %>"
153:     else
154:       render :nothing => true
155:     end
156:   end

Creación de nueva noticia

[Source]

     # File app/controllers/sadmin/news_controller.rb, line 90
 90:   def create
 91:     set_current_tab
 92:     @title = t('sadmin.news.crear_noticia')
 93:     @news = News.new(params[:news])
 94:     
 95:     if @news.event_ids.first
 96:       if event = Event.find(@news.event_ids.first)
 97:         ['title', 'speaker'].each do |m|
 98:           locales.each do |code, loc|
 99:             @news.send("#{m}_#{code}=", event.send("#{m}_#{code}")) if @news.send("#{m}_#{code}").blank?
100:           end
101:         end
102:         @news.tags = event.tags
103:       end
104:     end
105:     
106:     if @news.save
107:       flash[:notice] = t('sadmin.guardado_correctamente', :article => News.human_name.gender_article, :what => News.human_name)
108:       redirect_to sadmin_news_path(@news.id)
109:     else
110:       render :action => 'new'
111:     end
112:   end

Eliminación de una noticia

[Source]

     # File app/controllers/sadmin/news_controller.rb, line 135
135:   def destroy
136:     @news = News.find(params[:id])
137:     set_current_tab
138:     
139:     if @news.destroy
140:       flash[:notice] = t('sadmin.eliminado_correctamente', :article => t('documents.News').gender_article, :what => t('documents.News'))
141:       redirect_to sadmin_news_index_path
142:     else
143:       flash[:error] = t('sadmin.no_eliminado_correctamente', :article => t('documents.News').gender_article, :what => t('documents.News'))
144:       redirect_to sadmin_news_path(@news.id)
145:     end
146:   end

Modificación de una noticia

[Source]

     # File app/controllers/sadmin/news_controller.rb, line 115
115:   def edit
116:     set_current_tab
117:     @title = t('sadmin.modificar_what', :what => t('documents.News'))
118:   end

Exportación de las noticias seleccionadas para euskadi.net

[Source]

     # File app/controllers/sadmin/news_controller.rb, line 169
169:   def export_for_enet
170:     FileUtils.rm_r(Dir.glob("#{Document::EXPORT_PATH}*"))
171:     
172:     File.open("#{Document::EXPORT_PATH}contents-description.txt", 'w') do |f| 
173:       params[:news_to_export].each do |news_id|
174:         @news = News.find(news_id)
175:         new_or_update = @news.exported_to_enet_at.nil? ? "N" : "U"
176:         # f.write("#{enet_xml_content_name(News.find(news_id))}|#{new_or_update}|ejld003|euskadiplus|r01_euskadi_cont_loc|wreclg1|euskadi|prensa_comunicacion|noticia|S\n")
177:         # f.write("#{enet_xml_content_name(News.find(news_id))}|#{new_or_update}|ejld003|euskadi|prensa_comunicacion|wprcog1|euskadi|prensa_comunicacion|noticia|S\n")
178:         f.write("#{enet_xml_content_name(News.find(news_id))}|#{new_or_update}|ejlp013|euskadi|prensa_comunicacion|#{@news.department.enet_workarea}|euskadi|prensa_comunicacion|noticia|S\n")
179:       end
180:     end
181:     
182:     params[:news_to_export].each do |news_id|
183:       @news = News.find(news_id)
184:       
185:       
186:       
187:       @ejes = get_ejes_for_news(news_id)
188:       
189:       
190:       base_dir = "#{Document::EXPORT_PATH}#{enet_xml_content_name(@news)}"
191:       Document::LANGUAGES.each_with_index do |l, i|
192:         lang_base_dir = "#{base_dir}/#{l}_#{news_id}"
193:         if @news.translated_to?(l)
194:           FileUtils.mkdir_p("#{lang_base_dir}/data")
195:           FileUtils.mkdir_p("#{lang_base_dir}/r01Index")
196:           FileUtils.mkdir_p("#{lang_base_dir}/styles")
197:           
198:           if @news.has_cover_photo? && File.exists?(@news.cover_photo.path(:n320))
199:             images_dir = "#{lang_base_dir}/images"
200:             FileUtils.mkdir_p(images_dir)
201:             FileUtils.cp(@news.cover_photo.path(:n320), images_dir)
202:           end
203:           
204:           # if @news.has_files?
205:           #   files_dir = "#{lang_base_dir}/adjuntos"
206:           #   FileUtils.mkdir_p(files_dir)
207:           #   files_to_show = @news.a_documents.find(:all, :conditions => ["show_in_#{l}=?", true], :order => "created_at").each do |f|
208:           #     FileUtils.cp(f.file.path, files_dir)
209:           #   end
210:           # end
211:         
212:           File.open("#{lang_base_dir}/#{news_id}.html", 'w') do |f| 
213:             f.write(Iconv.iconv("ISO-8859-1//TRANSLIT", "utf-8", render_to_string(:partial => "sadmin/news/enet/enet", :locals => {:l => l})).join)
214:             # f.write(Iconv.new('US-ASCII//TRANSLIT', 'UTF-8').iconv(render_to_string(:partial => "enet", :locals => {:l => l})))
215:           end
216:         
217:         
218:           File.open("#{lang_base_dir}/data/#{l}_#{news_id}.xml", 'w') do |f|
219:             f.write(render_to_string(:template => "sadmin/news/enet/news.xml.builder", :locals => {:locale => l}, :layout => false))
220:           end
221:         
222:         
223:         
224:         
225:           
226:           File.open("#{lang_base_dir}/r01Index/r01ContHead.shtml", 'w') do |f|
227:             f.write('<link href="styles/style.css" media="screen" rel="stylesheet" type="text/css" />')
228:           end
229:           
230:           File.open("#{lang_base_dir}/styles/style.css", 'w') do |f|
231:             f.write(render_to_string(:partial => "sadmin/news/enet/enet_css"))
232:           end
233:         end
234:       end
235:       
236:       File.open("#{base_dir}/#{enet_xml_content_name(@news)}-content.xml", 'w') do |f| 
237:         f.write(render_to_string(:template => "sadmin/news/enet/enet.xml.builder", :layout => false))
238:       end
239:       
240:       @news.update_attribute(:exported_to_enet_at, Time.zone.now)
241:     end
242:     
243:     FileUtils.cd(Document::EXPORT_PATH)
244:     system("zip -r noticias-irekia.zip *")
245:     
246:     # send_file "#{Document::EXPORT_PATH}#{enet_xml_content_name(@news)}/#{enet_xml_content_name(@news)}-content.xml"
247:     send_file("#{Document::EXPORT_PATH}/noticias-irekia.zip")
248: 
249:     # flash[:notice] = "Las noticias marcadas han sido exportadas al directorio #{Document::EXPORT_PATH}"
250:     # redirect_to sadmin_news_index_path
251:   end

Página home de la administración. Redirige a una pestaña diferente en función del perfil y las funciones del usuario

[Source]

    # File app/controllers/sadmin/news_controller.rb, line 19
19:   def home
20:     if (logged_in? && can_access?("news"))
21:       if current_user.is_a?(StaffChief)
22:         redirect_to sadmin_events_path
23:       else
24:         redirect_to sadmin_news_index_path
25:       end
26:     elsif logged_in? && can_access?("events")
27:       redirect_to sadmin_events_path
28:     elsif logged_in? && current_user.is_a?(StreamingOperator)
29:       redirect_to admin_stream_flows_path
30:     else
31:       flash[:notice] = t('no_tienes_permiso')
32:       access_denied
33:     end
34:   end

Listado de noticias

[Source]

    # File app/controllers/sadmin/news_controller.rb, line 37
37:   def index    
38:     @sort_order = params[:sort] ||  "publish"
39:     
40:     case @sort_order
41:     when "update"
42:       order = "featured DESC, updated_at DESC, title_es, published_at DESC"
43:     when "publish"
44:       order = "featured DESC, published_at DESC, title_es, updated_at DESC"
45:     when "title"
46:       order = "featured DESC, lower(tildes(title_es)), published_at DESC, updated_at DESC"
47:     end
48:     
49:     conditions = nil
50:     if params[:q].present?
51:       conditions = ["lower(tildes(coalesce(title_es, '') || ' ' || coalesce(title_eu, ''))) like ?", "%#{params[:q].tildes.downcase}%"]
52:     end
53: 
54:     set_current_tab    
55: 
56:     @news = News.paginate :page => params[:page], :per_page => 20, 
57:       :order => order,
58:       :conditions => conditions
59: 
60:     @title = t("documents.News")
61: 
62:   end

Formulario de nueva noticia

[Source]

    # File app/controllers/sadmin/news_controller.rb, line 70
70:   def new
71:     @t = params[:t] || 'doc'
72:     @title = t('sadmin.news.crear_noticia')
73:     @news = News.new
74:     if current_user.has_department?
75:       @news.organization_id = current_user.department_id
76:     end
77:     
78:     if params[:related_event_id] && (event = Event.find(params[:related_event_id]))
79:       @news.event_ids = [event.id]
80:       ['organization_id', 'title', 'speaker', 'show_in_irekia', 'show_in_agencia'].each do |method|
81:         @news.send("#{method}=", event.send(method))
82:       end
83:       @news.multimedia_dir = event.starts_at.to_date.to_s.gsub('-', '/') + '/'
84:     end
85:     
86:     set_current_tab
87:   end

Listado de todas las noticias publicadas, para elegir las que se quieren exportar para euskadi.net

[Source]

     # File app/controllers/sadmin/news_controller.rb, line 160
160:   def published
161:     @news = News.published.in_agencia.paginate :order => "published_at DESC",
162:       :per_page => 30, :page => params[:page]
163:       
164:     # Borramos las que no estan publicadas en ningun idioma
165:     @news.delete_if {|n| Document::LANGUAGES.collect {|l| n.translated_to?(l)}.uniq == [false]}
166:   end

Vista de una noticia

[Source]

    # File app/controllers/sadmin/news_controller.rb, line 65
65:   def show
66:     set_current_tab
67:   end

Actualización de una noticia

[Source]

     # File app/controllers/sadmin/news_controller.rb, line 121
121:   def update
122:     @news.attributes = params[:news]
123:     set_current_tab
124:     @title = t('sadmin.modificar_what', :what => t('documents.News'))
125:     
126:     if @news.save
127:       flash[:notice] = t('sadmin.guardado_correctamente', :article => News.human_name.gender_article, :what => News.human_name)
128:       redirect_to sadmin_news_path(@news.id)
129:     else
130:       render :action => params[:return_to] || 'edit'
131:     end
132:   end

[Validate]