| 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
Devuelve los tags que coinciden con el string buscado en el auto complete
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# File app/controllers/sadmin/news_controller.rb, line 65
65: def show
66: set_current_tab
67: end
Actualización de una noticia
# 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