| Class | Document |
| In: |
app/models/document.rb
|
| Parent: | ActiveRecord::Base |
| delete_cover_photo | [R] |
For the documents that belong to a department, a before_save :assign_department_tag is called Ex. news.rb and event.rb
# File app/models/document.rb, line 238
238: def assign_department_tag
239: # self.tag_list = self.tag_list - Department.find(:all).map {|dept| dept.tag_name}
240: self.tag_list.add(self.department.tag_name) if self.department
241: end
Devuelve la lista de audios para este documento, en el subsite especificado (irekia o agencia) Ejemplo:
| audios("agencia")[:es]: | audios para agencia en castellano |
# File app/models/document.rb, line 154
154: def audios(subsite)
155: audios = {:es => [], :eu => [], :en => []}
156:
157: return audios if self.multimedia_path.blank?
158:
159: # Lista de todos los audios en <dir>/*.flv y <dir>/solo_subsite/*.mp3
160: list_of_audios = Dir.glob(full_multimedia_path + "*.mp3") + Dir.glob(full_multimedia_path + "solo_#{subsite}/*.mp3")
161: list_of_audios = list_of_audios.collect {|a| a.sub(Document::MULTIMEDIA_PATH, '')}
162:
163: Document::LANGUAGES.each do |l|
164: # Meto en cada idioma solo los que acaban en "_<idioma>.mp3"
165: audios[l.to_sym] = list_of_audios.select {|a| a.match("_#{l}.mp3")}
166: list_of_audios = list_of_audios - audios[l.to_sym]
167: end
168:
169: Document::LANGUAGES.each do |l|
170: audios[l.to_sym] = audios[l.to_sym] + list_of_audios
171: end
172:
173: return audios
174: end
Devuleve true si el user puede ver el contenido y false si no puede. Se usara en los resultados de las búsquedas.
Todos los usuarios pueden ver los eventos publicados de Irekia
Los usuarios con acceso a Agencia, pueden ver además, los eventos y las noticias publicadas de la Agencia.
Los demás usuarios pueden ver los tipos a los que se da acceso el método can_acces? de su tipo
o el método can?('access', doc_type) que coge los permisos de la tabla con permisos por usuario.
# File app/models/document.rb, line 285
285: def can_be_read_by?(user)
286: # si el documento es de irekia y está publicado lo ven todos
287: pubilic_published = self.show_in_irekia? && self.published?
288:
289: if pubilic_published
290: res = true
291: else
292: res = false
293: if !(user.nil? || user.eql?(:false))
294: # usuario logeado
295: if user.has_ma_access?
296: # usuarios con acceso a la agencia: periodistas, colaboradores y operadores de streaming
297: res = (self.show_in_irekia? || self.show_in_agencia?) && self.published?
298: else
299: # otros usuarios registrados
300: res = user.can_access?(self.type.to_s.pluralize.downcase) || user.can?('access', self.type.to_s.pluralize.downcase)
301: end
302: end
303: end
304:
305: res
306: end
Accessor para borrar la foto de portada
# File app/models/document.rb, line 147
147: def delete_cover_photo=(value)
148: self.cover_photo = nil if value.to_i == 1
149: end
Departamento al que pertenece un documento. Solo para noticias y eventos
# File app/models/document.rb, line 228
228: def department
229: dept = nil
230: if self.organization
231: dept = self.organization.root
232: end
233: dept
234: end
Directorio donde se guardan los adjuntos borrados de este documento
# File app/models/document.rb, line 274
274: def dir_for_deleted
275: dummy, year, month_day_dir = self.multimedia_path.match(/^([^\/]+)\/(.+)$/).to_a
276: dir_for_deleted = Document::MULTIMEDIA_PATH + year + "/borradas/" + month_day_dir
277: end
# File app/models/document.rb, line 222
222: def disable_ratings
223: self.has_ratings = false
224: return true
225: end
Devuelve el video destacado para este documento, en el subsite especificado (irekia o agencia) y en el idioma actual
# File app/models/document.rb, line 113
113: def featured_video(subsite)
114: videos(subsite)[:featured][I18n.locale.to_sym]
115: end
Construye la ruta absoluta al directorio de contenidos multimedia de un documento
# File app/models/document.rb, line 47
47: def full_multimedia_path
48: "#{Document::MULTIMEDIA_PATH}#{multimedia_path}"
49: end
Indica si hay audios para este documento en el idioma actual, en el subsite especificado (irekia o agencia)
# File app/models/document.rb, line 177
177: def has_audios?(subsite)
178: audios(subsite)[I18n.locale.to_sym].length > 0
179: end
Indica si hay foto de portada. Sólo se usa en caso de que no haya video de portada
# File app/models/document.rb, line 141
141: def has_cover_photo?
142: self.cover_photo_file_name.present?
143: end
Indica si este documento tiene documentos adjuntos
# File app/models/document.rb, line 201
201: def has_files?
202: a_documents.count > 0
203: end
Indica si hay fotos para este documento en el idioma actual, en el subsite especificado (irekia o agencia)
# File app/models/document.rb, line 182
182: def has_photos?(subsite)
183: photos(subsite).length > 0
184: end
Deprecated: Indicaba si este documento tiene transcripciones.
# File app/models/document.rb, line 206
206: def has_transcriptions?
207: a_transcriptions.count > 0
208: end
Indica si hay video destacado para este documento, en el subsite especificado (irekia o agencia) y en el idioma actual
# File app/models/document.rb, line 108
108: def has_video?(subsite)
109: !featured_video(subsite).nil?
110: end
Indica si hay videos secundarios para este documento, en el subsite especificado (irekia o agencia) y en el idioma actual
# File app/models/document.rb, line 103
103: def has_videos?(subsite)
104: videos(subsite)[:list][I18n.locale.to_sym].length > 0
105: end
Icono del departamento al que pertenece la noticia/evento
# File app/models/document.rb, line 244
244: def icon
245: ic = nil
246: if self.organization && self.organization.icon
247: ic = self.organization.icon
248: end
249: ic
250: end
Mueve a la "papelera" los ficheros multimedia cuando se borra una noticia/pagina Se llama desde after_destroy
# File app/models/document.rb, line 254
254: def move_multimedia_files_to_trash
255: if self.multimedia_path
256:
257: FileUtils.mkdir_p(dir_for_deleted)
258: FileUtils.mv(Dir.glob("#{Document::MULTIMEDIA_PATH}#{self.multimedia_path}*.*"), dir_for_deleted)
259:
260: FileUtils.mkdir_p(dir_for_deleted + "solo_irekia")
261: FileUtils.mv(Dir.glob("#{Document::MULTIMEDIA_PATH}#{self.multimedia_path}solo_irekia/*.*"), dir_for_deleted + "solo_irekia/")
262:
263: FileUtils.mkdir_p(dir_for_deleted + "solo_agencia")
264: FileUtils.mv(Dir.glob("#{Document::MULTIMEDIA_PATH}#{self.multimedia_path}solo_agencia/*.*"), dir_for_deleted + "solo_agencia/")
265:
266: logger.info "Moviendo #{Document::MULTIMEDIA_PATH}#{self.multimedia_path}*.* a #{dir_for_deleted}"
267:
268: FileUtils.rm_rf("#{Document::MULTIMEDIA_PATH}#{self.multimedia_path}")
269: end
270: return true
271: end
Devuelve la lista de fotos disponibles para en el subsite especificado (irekia o agencia). Devuelve sólo la lista de fotos originales. Los tamaños adicionales se guardan con el mismo nombre en subdirectorios con nombres "small", "medium", "large". Ejemplos:
| photos("irekia"): | lista de fotos pequeñas para irekia |
| photos("agencia"): | lista de fotos grandes para agencia |
# File app/models/document.rb, line 192
192: def photos(subsite)
193: return [] if self.multimedia_path.blank?
194:
195: photos = Dir.glob(full_multimedia_path + "*.jpg") + Dir.glob(full_multimedia_path + "solo_#{subsite}/*.jpg")
196: photos = photos - video_previews_in_all_languages(subsite) if has_video?(subsite)
197: return photos
198: end
Quita del cuerpo del documento el separador de la entradilla ###
# File app/models/document.rb, line 217
217: def pretty_body
218: body ? body.sub(/<p.*>###<.*\/p>/, '') : ""
219: end
Determina si un documento está publicado
# File app/models/document.rb, line 36
36: def published?
37: !draft && published_at <= Time.now
38: end
Indica si un documento está traducido a lang_code Los idiomas disponibles son Document::LANGUAGES
# File app/models/document.rb, line 212
212: def translated_to?(lang_code)
213: self.send("title_#{lang_code}").present? && self.send("body_#{lang_code}").present?
214: end
Devuelve el path absoluto y la url de la imagen de preview del video destacado de este documento, en el subsite especificado (irekia o agencia) y en el idioma actual
# File app/models/document.rb, line 119
119: def video_preview_file_and_url(subsite)
120: video_preview_filename = self.videos(subsite)[:featured][I18n.locale.to_sym].sub('.flv', '.jpg')
121: video_preview_file = "#{Document::MULTIMEDIA_PATH}#{video_preview_filename}"
122: video_preview_url = "#{Document::MULTIMEDIA_URL}#{video_preview_filename}"
123: unless File.exists?(video_preview_file)
124: # Si no esta la imagen nombre_es.jpg, buscamos nombre.jpg
125: preview_without_locale = video_preview_filename.sub(/_#{I18n.locale.to_sym}.jpg/, '.jpg')
126: if File.exists?("#{Document::MULTIMEDIA_PATH}#{preview_without_locale}")
127: video_preview_file = "#{Document::MULTIMEDIA_PATH}#{preview_without_locale}"
128: video_preview_url = "#{Document::MULTIMEDIA_URL}#{preview_without_locale}"
129: end
130: end
131: return {:file => video_preview_file, :url => video_preview_url}
132: end
Devuelve la imagen de preview del video destacado de este documento, en el subsite especificado (irekia o agencia) y en el idioma actual, o en su ausencia, la imagen por defecto
# File app/models/document.rb, line 136
136: def video_preview_img(subsite)
137: preview_img = File.exists?(video_preview_file_and_url(subsite)[:file]) ? video_preview_file_and_url(subsite)[:url] : "/images/video_preview.jpg"
138: end
Devuelve todos los videos disponibles para este documento, en el subsite especificado (irekia o agencia), separados por idiomas: Ejemplos de uso:
| videos("irekia")[:featured][:es]: | video destacado en irekia para la versión en castellano |
| videos("agencia")[:list][:es]: | videos secundarios en la agencia para la versión en castellano |
# File app/models/document.rb, line 55
55: def videos(subsite="irekia")
56: videos = {:list => {:es => [], :eu => [], :en => []}, :featured => {:es => nil, :eu => nil, :en => nil}}
57:
58: return videos if self.multimedia_path.blank?
59:
60: # Lista de todos los videos en <dir>/*.flv y <dir>/solo_subsite/*.flv
61: list_of_videos = Dir.glob(full_multimedia_path + "*.flv") + Dir.glob(full_multimedia_path + "solo_#{subsite}/*.flv") + \
62: Dir.glob(full_multimedia_path + "*.mpg") + Dir.glob(full_multimedia_path + "solo_#{subsite}/*.mpg") + \
63: Dir.glob(full_multimedia_path + "*.mpeg") + Dir.glob(full_multimedia_path + "solo_#{subsite}/*.mpeg")
64: list_of_videos = list_of_videos.collect {|a| a.sub(Document::MULTIMEDIA_PATH, '')}
65: Document::LANGUAGES.each do |l|
66: # Meto en cada idioma solo los que acaban en "_<idioma>.flv"
67: list_of_videos.each do |video|
68: if m = video.match(/(.+)_#{l}.(flv|mpg|mpeg)/)
69: if m.to_a[1][-1..-1].eql?("1") && m.to_a[2].eql?("flv")
70: # Si acaba en "1", es el video de portada
71: videos[:featured][l.to_sym] = video.sub(Document::MULTIMEDIA_PATH, '')
72: else
73: videos[:list][l.to_sym] << video.sub(Document::MULTIMEDIA_PATH, '')
74: end
75: end
76: end
77: list_of_videos = list_of_videos - (videos[:list][l.to_sym] + [videos[:featured][l.to_sym]])
78: end
79:
80: Document::LANGUAGES.each do |l|
81: # Meto en todos los que no acaban en "_<idioma>.flv"
82: list_of_videos.each do |video|
83: if video.match(/1.flv$/)
84: # Si el nombre es "*1.flv", es la de portada
85: videos[:featured][l.to_sym] = video.sub(Document::MULTIMEDIA_PATH, '') if videos[:featured][l.to_sym].nil?
86: else
87: videos[:list][l.to_sym] << video.sub(Document::MULTIMEDIA_PATH, '')
88: end
89: end
90: end
91:
92: Document::LANGUAGES.each do |l|
93: if videos[:featured][l.to_sym].nil?
94: first_flv = videos[:list][l.to_sym].select {|v| v.match(/.flv$/)}.first
95: videos[:featured][l.to_sym] = first_flv
96: videos[:list][l.to_sym].delete(first_flv)
97: end
98: end
99: return videos
100: end