diff --git a/.gitignore b/.gitignore index eed85fbe5..ada20a475 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ .rvmrc Gemfile.lock +Procfile +log/* db/*.sqlite3 log/*.log diff --git a/app/jobs/get_announcement_from_rss.rb b/app/jobs/get_announcement_from_rss.rb new file mode 100644 index 000000000..267c29aea --- /dev/null +++ b/app/jobs/get_announcement_from_rss.rb @@ -0,0 +1,7 @@ +class GetAnnouncementFromRss + @queue = :high + + def self.perform() + %x(ruby "#{Rails.root}/lib/rss_ntu_job.rb") + end +end \ No newline at end of file diff --git a/app/views/admin/page_parts/_custom_widget_setting.html.erb b/app/views/admin/page_parts/_custom_widget_setting.html.erb index 7a3838e68..06dc906cd 100644 --- a/app/views/admin/page_parts/_custom_widget_setting.html.erb +++ b/app/views/admin/page_parts/_custom_widget_setting.html.erb @@ -17,4 +17,4 @@ <%= render :partial=> "widget_ext_options" %> - <% end %> \ No newline at end of file + <% end %> diff --git a/app/views/mobile/dialog_contact.mobile.erb b/app/views/mobile/dialog_contact.mobile.erb index 9f208a978..f68375cc1 100644 --- a/app/views/mobile/dialog_contact.mobile.erb +++ b/app/views/mobile/dialog_contact.mobile.erb @@ -3,9 +3,7 @@ <% end %> diff --git a/app/views/mobile/map.mobile.erb b/app/views/mobile/map.mobile.erb index 51e69dbf5..05a40c977 100644 --- a/app/views/mobile/map.mobile.erb +++ b/app/views/mobile/map.mobile.erb @@ -5,6 +5,6 @@
\ No newline at end of file diff --git a/config/locales/mobile.en.yml b/config/locales/mobile.en.yml index 4599c8e96..4abfe0073 100644 --- a/config/locales/mobile.en.yml +++ b/config/locales/mobile.en.yml @@ -9,5 +9,5 @@ en: home: Home language: Language location: Location - location_description: '

This University

No.101,Sec. 2, Jiafeng S Road, Zhubei City, Hsinchu County 302, Taiwan' + location_description: '

OFFICE OF GENERAL AFFAIRS, NTU

No. 1, Sec. 4, Roosevelt Road, Taipei, 10617 Taiwan (R.O.C)' page: Page \ No newline at end of file diff --git a/config/locales/mobile.zh_tw.yml b/config/locales/mobile.zh_tw.yml index 84c32558a..5708314d5 100644 --- a/config/locales/mobile.zh_tw.yml +++ b/config/locales/mobile.zh_tw.yml @@ -9,5 +9,5 @@ zh_tw: home: 首頁 language: 語言 location: 地理位置 - location_description: '

本大學

302新竹縣竹北市嘉豐南路二段101號' + location_description: '

臺灣大學總務處 版權所有

10617 臺北市大安區羅斯福路四段一號' page: 頁面 diff --git a/config/locales/ntu.en.yml b/config/locales/ntu.en.yml new file mode 100644 index 000000000..24c7fefb5 --- /dev/null +++ b/config/locales/ntu.en.yml @@ -0,0 +1,4 @@ +en: + + ntu: + rss_origin: Back to NTU Announcements diff --git a/config/locales/ntu.zh_tw.yml b/config/locales/ntu.zh_tw.yml new file mode 100644 index 000000000..46ee6077d --- /dev/null +++ b/config/locales/ntu.zh_tw.yml @@ -0,0 +1,4 @@ +zh_tw: + + ntu: + rss_origin: 回臺大校園公佈欄 diff --git a/config/resque_schedule.yml b/config/resque_schedule.yml index 83f580122..3a18d0e3f 100644 --- a/config/resque_schedule.yml +++ b/config/resque_schedule.yml @@ -11,7 +11,7 @@ backup_server: description: BackupServer and remove old backups update_tag_cloud: - cron: 0 0 [0,12] * * * + cron: 0 30 2 * * * class: UpdateTagCloud args: description: UpdateTagCloud @@ -27,3 +27,9 @@ email_cron: class: EmailCron args: description: EmailCron + +get_announcement_from_rss: + cron: 0 0 [2,12] * * * + class: GetAnnouncementFromRss + args: + description: Loop through the announcement RSS until 24h ago diff --git a/lib/tasks/migrate.rake b/lib/tasks/migrate.rake index c4d8061d4..1d71495d4 100644 --- a/lib/tasks/migrate.rake +++ b/lib/tasks/migrate.rake @@ -310,6 +310,34 @@ namespace :migrate do Rake::Task["web_link_url:web_link_url_i18n"].execute end + task :save_users => :environment do + User.where(:email.not => /guest/).each{|s|s.save} + end + + task :fix_bulletin_rss_available_lang => :environment do + Bulletin.all.each do |bull| + if bull.create_user_id.nil? + bull.update_attribute(:available_for_zh_tw, true) + end + end + end + + task :fix_imported_rss => :environment do + categories = BulletinCategory.where(key: /rss_/).entries + unless categories.blank? + categories.each do |category| + bulletins = category.bulletins + unless bulletins.blank? + bulletins.each do |bulletin| + bulletin.update_attribute(:is_top, false) unless bulletin.is_top? + bulletin.update_attribute(:is_hot, false) unless bulletin.is_hot? + bulletin.update_attribute(:is_hidden, false) unless bulletin.is_hidden? + end + end + end + end + end + task :fix_tagged_ids => :environment do Tag.all.each do |tag| tag.taggings.each do |tagging| diff --git a/lib/tasks/ntu_mongo_files.rake b/lib/tasks/ntu_mongo_files.rake new file mode 100644 index 000000000..2438a21b8 --- /dev/null +++ b/lib/tasks/ntu_mongo_files.rake @@ -0,0 +1,183 @@ +# encoding: utf-8 + +namespace :mongo_files do + + MODELS = { 'ad_image' => 'file', + 'archive_file_multiple' => 'file', + 'asset' => 'data', + 'bulletin' => 'image', + 'bulletin_file' => 'file', + 'design' => 'zip_file', + 'design_file' => 'file', + 'gallery_image' => 'file', + 'image' => 'file', + 'lab_file' => 'file', + 'location_info' => 'file', + 'preview_file' => 'file', + 'project_file' => 'file', + 'research_file' => 'file', + 'site' => 'default_image', + 'stylesheet' => 'file_orig', + 'user' => 'avatar', + 'writing_book_file' => 'file', + 'writing_conference_file' => 'file', + 'writing_journal_file' => 'file', + 'writing_patent_file' => 'file' } + + IMAGE_UPLOADER_MODELS = %w[ad_image bulletin image site] + + # ad_banner + # bulletin + # design + # site + + task :clean => :environment do + @files = Mongoid.database['fs.files'] + @chunks = Mongoid.database['fs.chunks'] + clean_duplicates + clean_unused + remove_objects + # remove_unlinked + end + + # Remove unused files from db + def clean_unused + db_array = @files.find().inject([]) do |db_files, file| + db_files << file['filename'] + db_files + end + + p "# of files in db: #{db_array.size}" + + name_array = MODELS.inject([]) do |model_files, (model, type)| + model.classify.constantize.all.each do |item| + url = item.send(type).url + thumb_url = item.send(type).thumb.url rescue nil + if url && !url.eql?('sign-in-logo.png') + url = url.gsub('/gridfs/', '') + model_files << url + end + if thumb_url && !thumb_url.eql?('sign-in-logo.png') + thumb_url = thumb_url.gsub('/gridfs/', '') + model_files << thumb_url + end + end + model_files + end + + p "# of files from uploaders: #{name_array.size}" + useless_files = db_array - name_array + p "# of unmatched files: #{useless_files.size}" + + useless_files.each do |file| + id = @files.find_one('filename' => file)['_id'] + @files.remove('_id' => id) + @chunks.remove('files_id' => id) + end + # p files.remove('filename' => { "$in" => useless_files}) + end + + + # Remove duplicate files from db + def clean_duplicates + p "# of files in db: #{@files.count}" + file_hash = @files.find().inject({}) do |db_files, file| + name = file['filename'] + if db_files[name] + db_files[name] += [file['_id']] + else + db_files[name] = [file['_id']] + end + db_files + end + file_array = file_hash.inject([]) do |files, (key, value)| + files += value.drop(1) if value.size > 1 + files + end + p "# of duplicate ids to delete: #{file_array.size}" + file_array.each do |id| + @files.remove('_id' => id) + @chunks.remove('files_id' => id) + end + end + + task :file_size => :environment do + files = Mongoid.database['fs.files'] + size_array = files.find().inject([]) do |size, file| + # size << [file['length'], file['filename']] + size << [file['filename'], file['length']] + size + end + size_array.sort.each do |pair| + p "#{pair[0]} - #{pair[1]}" + end + p size_array.size + end + + def remove_objects + # Destroy writing_journals and writing_journal_files + Mongoid.database['writing_journals'].remove() + Mongoid.database['writing_journal_files'].remove() + + # Destroy bulletins, bulletin_files and bulletin_links + Bulletin.excludes(create_user_id: nil).destroy + BulletinFile.destroy_all + BulletinLink.destroy_all + + # Destroy gallery_albums and gallery_images + Mongoid.database['gallery_albums'].remove() + Mongoid.database['gallery_images'].remove() + + db_array = @files.find().inject([]) do |db_files, file| + db_files << file['filename'] if file['filename'] =~ /writing_journal_file|news_bulletin_file|bulletin_file|gallery_image|image\/image/ + db_files + end + p db_array.size + db_array.each do |file| + id = @files.find_one('filename' => file)['_id'] + @files.remove('_id' => id) + @chunks.remove('files_id' => id) + end + end + + def remove_unlinked + # name_array = AdBanner.all.inject([]) do |files, banner| + # banner.ad_images.inject(files) do |image_files, image| + # url = image.file.url + # thumb_url = image.file.thumb.url rescue nil + # if url && !url.eql?('sign-in-logo.png') + # url = url.gsub('/gridfs/', '') + # image_files << url + # end + # if thumb_url && !thumb_url.eql?('sign-in-logo.png') + # thumb_url = thumb_url.gsub('/gridfs/', '') + # image_files << thumb_url + # end + # image_files + # end + # files + # end + name_array = Design.all.inject([]) do |files, design| + files += design.images.inject(files) do |image_files, image| + p image_files += get_url_and_thumb(image.file) + image_files + end + files + end + p name_array.size + end + + def get_url_and_thumb(file) + url = file.url + thumb_url = file.thumb.url rescue nil + files = [url, thumb_url].inject([]) do |urls, current| + urls << current.gsub('/gridfs/', '') if current && !current.eql?('sign-in-logo.png') + urls + end + files + end + + task :delete_rss_ann => :environment do + Bulletin.where(create_user_id: nil).destroy + end +end \ No newline at end of file diff --git a/lib/tasks/web_link_url.rake b/lib/tasks/web_link_url.rake index eccb90c46..900628c9a 100644 --- a/lib/tasks/web_link_url.rake +++ b/lib/tasks/web_link_url.rake @@ -9,17 +9,17 @@ namespace :web_link_url do @weblinks.each do |wl| - if wl.url.nil? + if wl.url_translations.is_a?(String) + + @wlurl = wl.url_translations + + wl.url_translations = {} + + wl.url_translations["zh_tw"] = @wlurl + + wl.url_translations["en"] = @wlurl - @wlurl = wl.url_translations - - wl.url_translations = {} - - wl.url_translations["zh_tw"] = @wlurl - - wl.url_translations["en"] = @wlurl - - wl.save + wl.save else puts 'no data' diff --git a/vendor/built_in_modules/announcement/app/models/bulletin.rb b/vendor/built_in_modules/announcement/app/models/bulletin.rb index 1771e2a69..764486257 100644 --- a/vendor/built_in_modules/announcement/app/models/bulletin.rb +++ b/vendor/built_in_modules/announcement/app/models/bulletin.rb @@ -40,6 +40,7 @@ class Bulletin field :not_checked_reason field :public, :type => Boolean, :default => true + field :rss_link scope :can_display, where(is_checked: true, is_rejected: false, is_pending: false) scope :available_for_lang, ->(locale){ where("available_for_#{locale}".to_sym => true) } diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/front_end/bulletins/show.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/front_end/bulletins/show.html.erb index 0f60d98e6..8b3ae9719 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/front_end/bulletins/show.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/front_end/bulletins/show.html.erb @@ -36,6 +36,11 @@ <% end %> + <% unless @bulletin.rss_link.blank? %> +
+ <%= link_to t('ntu.rss_origin'), @bulletin.rss_link %> +
+ <% end %> <%= share_links(@bulletin, 'announcement') %>