From 07a0b33a62d5265dbb05d48a68978e94d908d273 Mon Sep 17 00:00:00 2001 From: Ruling-Mac Date: Wed, 15 Jul 2015 15:24:15 +0800 Subject: [PATCH] order by category and tags for index and widget fixed by alex --- app/controllers/archives_controller.rb | 151 ++++++++++++++++--------- 1 file changed, 99 insertions(+), 52 deletions(-) diff --git a/app/controllers/archives_controller.rb b/app/controllers/archives_controller.rb index f846234..370a66a 100644 --- a/app/controllers/archives_controller.rb +++ b/app/controllers/archives_controller.rb @@ -1,50 +1,80 @@ class ArchivesController < ApplicationController - def index + def index categories = OrbitHelper.page_categories - @categories = [] - if categories.first == "all" + tags = OrbitHelper.page_tags + @tags = [] + + if tags.first == "all" module_app = OrbitHelper.this_module_app - @categories = module_app.categories + @tags = module_app.tags else - categories.each do |cat| - @categories << Category.find(cat) + tags.each do |tag| + @tags << Tag.find(tag) end end - cats = @categories.collect do |cat| - url_to_edit = OrbitHelper.user_has_cateogry?(cat) ? "/admin/archive_files?filters[category][]=#{cat.id.to_s}" : "" - archives = ArchiveFile.where(:category_id => cat.id).order_by(:sort_number=>'asc').collect do |archive| - statuses = archive.statuses_with_classname.collect do |status| - { - "status" => status["name"] || "", - "status-class" => "status-#{status['classname']}" - } - end - files = [] - archive.archive_file_multiples.order_by(:sort_number=>'asc').each do |file| - if file.choose_lang.include?(I18n.locale.to_s) - title = (file.file_title.blank? ? File.basename(file.file.path) : file.file_title) rescue "" - extension = file.file.file.extension.downcase rescue "" - # url = file.file.url rescue "" - files << { - "file-name" => title, - "file-type" => extension, - "file-url" => "/xhr/archive/download?file=#{file.id}" - } - end + files_by_cateogry = ArchiveFile.filter_by_categories.group_by(&:category) + cats = files_by_cateogry.keys.collect do |cat| + + files_by_category_tag = files_by_cateogry[cat].group_by(&:tags) + + files_by_category_tag.keys.each do |f| + if(!@tags.include?(f[0])) + files_by_category_tag.delete(f) end + end + ts = files_by_category_tag.keys.collect do |t| + url_to_edit = OrbitHelper.user_has_cateogry?(cat) ? "/admin/archive_files?filters[category][]=#{cat.id.to_s}" : "" + archives = files_by_category_tag[t].collect do |archive| + + statuses = archive.statuses_with_classname.collect do |status| + { + "status" => status["name"] || "", + "status-class" => "status-#{status['classname']}" + } + end + files = [] + archive.archive_file_multiples.order_by(:sort_number=>'asc').each do |file| + if file.choose_lang.include?(I18n.locale.to_s) + title = (file.file_title.blank? ? File.basename(file.file.path) : file.file_title) rescue "" + extension = file.file.file.extension.downcase rescue "" + # url = file.file.url rescue "" + files << { + "file-name" => title, + "file-type" => extension, + "file-url" => "/xhr/archive/download?file=#{file.id}" + } + end + + end + + { + "archive-title" => archive.title || "", + "statuses" => statuses, + "files" => files + } + end { - "archive-title" => archive.title || "", - "statuses" => statuses, - "files" => files + "tag-name" => t[0].name, + "archives" => archives, + "url_to_edit" => url_to_edit } end - { - "category-title" => cat.title || "", - "archives" => archives , - "url_to_edit" => url_to_edit - } + if(files_by_category_tag.empty?) + { + "category-title" => "", + "tags" => ts + + } + else + { + "category-title" => cat.title || "", + "tags" => ts + + } + end + end { "categories" => cats @@ -65,30 +95,47 @@ class ArchivesController < ApplicationController def widget categories = OrbitHelper.widget_categories @categories = [] - if categories.first == "all" - module_app = OrbitHelper.widget_module_app - @categories = module_app.categories.collect do |cat| - { - "title" => cat.title, - "id" => cat.id.to_s - } - end + + tags = OrbitHelper.widget_tags + @tags = [] + + + if tags.first == "all" + module_app = OrbitHelper.widget_module_app + @tags = module_app.tags else - categories.each do |cat| - c = Category.find(cat) - @categories << {"title" => c.title, "id" => c.id.to_s} + tags.each do |tag| + @tags << Tag.find(tag) end end - cats = @categories.collect do |cat| - archives = ArchiveFile.can_display.where(:category_id => cat["id"]).collect do |archive| + + files_by_cateogry = ArchiveFile.filter_by_widget_categories.group_by(&:category) + + cats = files_by_cateogry.keys.collect do |cat| + files_by_category_tag = files_by_cateogry[cat].group_by(&:tags) + + files_by_category_tag.keys.each do |f| + if(!@tags.include?(f[0])) + files_by_category_tag.delete(f) + end + end + + ts = files_by_category_tag.keys.collect do |t| + archives = files_by_category_tag[t].collect do |archive| + { + "archive-title" => archive.title, + "archive_url" => OrbitHelper.widget_more_url + } + end { - "archive-title" => archive.title, - "archive_url" => OrbitHelper.widget_more_url + "tag-name" => t[0].name, + "archives" => archives + } end { - "category-title" => cat["title"], - "archives" => archives + "category-title" => cat.title, + "tags" => ts } end {