| Class | Document |
| In: |
app/models/document.rb
|
| Parent: | ActiveRecord::Base |
| audios | [R] | |
| delete_cover_photo | [R] | |
| photos | [R] | |
| videos | [R] |
Devuelve la lista de audios para este documento, en el subsite especificado (irekia o agencia)
audios("agencia")[:es]: audios para agencia en castellano
# File app/models/document.rb, line 165
165: def audios(subsite)
166: unless @audios
167: @audios = {:es => [], :eu => [], :en => []}
168:
169: return @audios if self.multimedia_path.blank?
170:
171: # Lista de todos los audios en <dir>/*.flv y <dir>/solo_subsite/*.mp3
172: list_of_audios = Dir.glob(full_multimedia_path + "*.mp3") + Dir.glob(full_multimedia_path + "solo_#{subsite}/*.mp3")
173: list_of_audios = list_of_audios.collect {|a| a.sub(Document::MULTIMEDIA_PATH, '')}
174:
175: Document::LANGUAGES.each do |l|
176: # Meto en cada idioma solo los que acaban en "_<idioma>.mp3"
177: @audios[l.to_sym] = list_of_audios.select {|a| a.match("_#{l}.mp3")}
178: list_of_audios = list_of_audios - @audios[l.to_sym]
179: end
180:
181: Document::LANGUAGES.each do |l|
182: @audios[l.to_sym] = @audios[l.to_sym] + list_of_audios
183: end
184: end
185: return @audios
186: end
Accessor para borrar la foto de portada
# File app/models/document.rb, line 157
157: def delete_cover_photo=(value)
158: self.cover_photo = nil if value.to_i == 1
159: end
Departamento al que pertenece un documento. Solo para noticias y eventos
# File app/models/document.rb, line 240
240: def department
241: dept = nil
242: if self.organization
243: dept = self.organization.root
244: end
245: dept
246: end
Directorio donde se guardan los adjuntos borrados de este documento
# File app/models/document.rb, line 285
285: def dir_for_deleted
286: dummy, year, month_day_dir = self.multimedia_path.match(/^([^\/]+)\/(.+)$/).to_a
287: dir_for_deleted = Document::MULTIMEDIA_PATH + year + "/borradas/" + month_day_dir
288: 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 146
146: def featured_video(subsite)
147: videos(subsite)[:featured][I18n.locale.to_sym]
148: end
Construye la ruta absoluta al directorio de contenidos multimedia de un documento.
Las News y las Page de la web, tienen contenido multimedia (videos para streaming y para descarga, audios y mini-galería de fotos). Es contenido variable y se produce anterior o posteriormente a la propia noticia, y por personas diferentes a las que pueden crear el contenido de la noticia.
Además, estos contenidos pueden ser muy pesados, por lo que subirlos a la web a través de formularios podría dar problemas de timeouts con algunos proxies.
Por todo ello, este contenido se sube al servidor a través de SFTP y se enlaza con la noticia indicando en multimedia_dir el lugar donde se encuentran los ficheros (ruta relativa al home del usuario SFTP) y full_multimedia_path devuelve la ruta absoluta.
# File app/models/document.rb, line 61
61: def full_multimedia_path
62: "#{Document::MULTIMEDIA_PATH}#{multimedia_path}"
63: 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 151
151: def has_cover_photo?
152: self.cover_photo_file_name.present?
153: end
Indica si este documento tiene documentos adjuntos
# File app/models/document.rb, line 217
217: def has_files?
218: a_documents.count > 0
219: 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 194
194: def has_photos?(subsite)
195: photos(subsite).length > 0
196: end
# File app/models/document.rb, line 134
134: def has_professional_videos?(subsite)
135: videos(subsite)[:mpg][I18n.locale.to_sym].length > 0
136: end
Deprecated: Indicaba si este documento tiene transcripciones.
# File app/models/document.rb, line 222
222: def has_transcriptions?
223: a_transcriptions.count > 0
224: 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 140
140: def has_video?(subsite)
141: !featured_video(subsite).nil?
142: 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 130
130: def has_videos?(subsite)
131: videos(subsite)[:list][I18n.locale.to_sym].length > 0 || videos(subsite)[:mpg][I18n.locale.to_sym].length > 0
132: end
Devuelve el icono del departamento al que pertenece la noticia/evento
# File app/models/document.rb, line 250
250: def icon
251: ic = nil
252: if self.organization && self.organization.icon
253: ic = self.organization.icon
254: end
255: ic
256: 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 260
260: def move_multimedia_files_to_trash
261: if self.multimedia_path
262:
263: FileUtils.mkdir_p(dir_for_deleted)
264: FileUtils.mv(Dir.glob("#{Document::MULTIMEDIA_PATH}#{self.multimedia_path}*.*"), dir_for_deleted)
265:
266: FileUtils.mkdir_p(dir_for_deleted + "solo_irekia")
267: FileUtils.mv(Dir.glob("#{Document::MULTIMEDIA_PATH}#{self.multimedia_path}solo_irekia/*.*"), dir_for_deleted + "solo_irekia/")
268:
269: FileUtils.mkdir_p(dir_for_deleted + "solo_agencia")
270: FileUtils.mv(Dir.glob("#{Document::MULTIMEDIA_PATH}#{self.multimedia_path}solo_agencia/*.*"), dir_for_deleted + "solo_agencia/")
271:
272: logger.info "Moviendo #{Document::MULTIMEDIA_PATH}#{self.multimedia_path}*.* a #{dir_for_deleted}"
273:
274: FileUtils.rm_rf("#{Document::MULTIMEDIA_PATH}#{self.multimedia_path}")
275:
276: # Los videos de la webtv dejarán de funcionar porque están en el mismo directorio
277: self.webtv_videos.update_all("draft='t', document_id=NULL")
278: self.gallery_photos.update_all("document_id=NULL")
279: self.album.update_attributes(:document_id => nil, :draft => true) if self.album
280: end
281: return true
282: 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 iguales a los keys de PhotoPaths::PHOTOS_SIZES
Se excluyen las fotos de portada de todos los videos flv.
# File app/models/document.rb, line 207
207: def photos(subsite)
208: @photos = [] if self.multimedia_path.blank?
209: unless @photos
210: @photos = Dir.glob(full_multimedia_path + "*.jpg") + Dir.glob(full_multimedia_path + "solo_#{subsite}/*.jpg")
211: @photos = @photos - video_previews_in_all_languages(subsite) if has_video?(subsite)
212: end
213: return @photos
214: end
Quita del cuerpo del documento el separador de la entradilla ###
# File app/models/document.rb, line 233
233: def pretty_body(lang_code=I18n.locale)
234: send("body_#{lang_code}") ? send("body_#{lang_code}").gsub(/<p.*>###<.*\/p>/, '').gsub(/<p.*>@@@<.*\/p>/, '') : ""
235: end
Indica si un documento está publicado
# File app/models/document.rb, line 39
39: def published?
40: !draft && published_at <= Time.now
41: end
Indica si un documento está traducido a lang_code Los idiomas disponibles son Document::LANGUAGES
# File app/models/document.rb, line 228
228: def translated_to?(lang_code)
229: self.send("title_#{lang_code}").present? && self.send("body_#{lang_code}").present?
230: end
Devuelve todos los videos disponibles para este documento, en el subsite especificado (irekia o agencia), separados por idiomas:
# File app/models/document.rb, line 71
71: def videos(subsite="irekia")
72: unless @videos
73: @videos = {:list => {:es => [], :eu => [], :en => []},
74: :featured => {:es => nil, :eu => nil, :en => nil},
75: :mpg => {:es => [], :eu => [], :en => []}}
76:
77: return @videos if self.multimedia_path.blank?
78:
79: # Lista de todos los videos en <dir>/*.flv y <dir>/solo_subsite/*.flv
80: list_of_videos = Dir.glob(full_multimedia_path + "*.flv") + Dir.glob(full_multimedia_path + "solo_#{subsite}/*.flv") + \
81: Dir.glob(full_multimedia_path + "*.mpg") + Dir.glob(full_multimedia_path + "solo_#{subsite}/*.mpg") + \
82: Dir.glob(full_multimedia_path + "*.mpeg") + Dir.glob(full_multimedia_path + "solo_#{subsite}/*.mpeg")
83: list_of_videos = list_of_videos.collect {|a| a.sub(Document::MULTIMEDIA_PATH, '')}
84:
85: Document::LANGUAGES.each do |l|
86: # Meto en cada idioma solo los que acaban en "_<idioma>.flv"
87: list_of_videos.each do |video|
88: if m = video.match(/(.+)_#{l}.flv/)
89: if m.to_a[1][-1..-1].eql?("1")
90: # Si acaba en "1", es el video de portada
91: @videos[:featured][l.to_sym] = video.sub(Document::MULTIMEDIA_PATH, '')
92: else
93: @videos[:list][l.to_sym] << video.sub(Document::MULTIMEDIA_PATH, '')
94: end
95: elsif m = video.match(/(.+)_#{l}.(mpg|mpeg)/)
96: @videos[:mpg][l.to_sym] << video.sub(Document::MULTIMEDIA_PATH, '')
97: end
98: end
99: list_of_videos = list_of_videos - (@videos[:list][l.to_sym] + [@videos[:featured][l.to_sym]] + @videos[:mpg][l.to_sym])
100: end
101:
102: Document::LANGUAGES.each do |l|
103: # Meto en todos, los que no acaban en "_<idioma>.flv"
104: list_of_videos.each do |video|
105: if video.match(/1.flv$/)
106: # Si el nombre es "*1.flv", es la de portada
107: @videos[:featured][l.to_sym] = video.sub(Document::MULTIMEDIA_PATH, '') if @videos[:featured][l.to_sym].nil?
108: elsif video.match(/(mpg|mpeg)$/)
109: @videos[:mpg][l.to_sym] << video.sub(Document::MULTIMEDIA_PATH, '')
110: else
111: @videos[:list][l.to_sym] << video.sub(Document::MULTIMEDIA_PATH, '')
112: end
113: end
114: end
115:
116: Document::LANGUAGES.each do |l|
117: if @videos[:featured][l.to_sym].nil?
118: first_flv = @videos[:list][l.to_sym].select {|v| v.match(/.flv$/)}.first
119: @videos[:featured][l.to_sym] = first_flv
120: @videos[:list][l.to_sym].delete(first_flv)
121: end
122: end
123:
124: end
125: return @videos
126: end
Asigna el tag del departamento al que pertenece el documento. Se llama desde before_save
# File app/models/document.rb, line 319
319: def assign_department_tag
320: # self.tag_list = self.tag_list - Department.find(:all).map {|dept| dept.tag_name}
321: self.tag_list.add(self.department.tag_name) if self.department
322: end