1.fix some error

2.add model so that user can choice the sort order
3.add the feature that can devide the data to multiple page by the user setting on the widget
This commit is contained in:
chiu 2019-09-05 15:15:45 +08:00
parent 4de57fb675
commit e2fbba4cf6
8 changed files with 164 additions and 24 deletions

View File

@ -1,6 +1,18 @@
class Admin::ArchiveFilesController < OrbitAdminController class Admin::ArchiveFilesController < OrbitAdminController
def index def index
if ArchiveSortOrder.count == 0
ArchiveSortOrder.new('sort_order' => false).save
end
if !params['order_asc'].nil?
if params['order_asc'] == 'true'
ArchiveSortOrder.first.update_attributes('sort_order' => true)
elsif params['order_asc'] == 'false'
ArchiveSortOrder.first.update_attributes('sort_order' => false)
end
else
ArchiveSortOrder.first.update_attributes('sort_order' => false)
end
@choose = ArchiveSortOrder.first['sort_order']
@table_fields = [:status, :category, :title, :updated_at,:last_modified,"archive.downloaded_times"] @table_fields = [:status, :category, :title, :updated_at,:last_modified,"archive.downloaded_times"]
@categories = @module_app.categories @categories = @module_app.categories
@tags = @module_app.tags @tags = @module_app.tags

View File

@ -1,14 +1,19 @@
class ArchivesController < ApplicationController class ArchivesController < ApplicationController
def index def index
if OrbitHelper.page_data_count > 0 if ArchiveSortOrder.count == 0
OrbitHelper.set_page_data_count 0 ArchiveSortOrder.new('sort_order' => false).save
page = Page.where(:page_id => OrbitHelper.params["page_id"]).first rescue nil end
if !page.nil? params = OrbitHelper.params
page.data_count = 0 if OrbitHelper.page_data_count > 0
page.save OrbitHelper.set_page_data_count 0
end page = Page.where(:page_id => params["page_id"]).first rescue nil
end if !page.nil?
files_by_cateogry = ArchiveFile.where(is_hidden: false).filter_by_categories.filter_by_tags.order_by(:created_at => "desc").group_by(&:category) page.data_count = 0
page.save
end
end
files_by_cateogry = ArchiveFile.where(is_hidden: false).filter_by_categories.filter_by_tags.group_by(&:category)
each_data_count = []
categories = files_by_cateogry.keys categories = files_by_cateogry.keys
cats = categories.collect do |category| cats = categories.collect do |category|
url_to_edit = OrbitHelper.user_has_cateogry?(category) ? "/admin/archive_files?filters[category][]=#{category.id.to_s}" : "" url_to_edit = OrbitHelper.user_has_cateogry?(category) ? "/admin/archive_files?filters[category][]=#{category.id.to_s}" : ""
@ -20,7 +25,7 @@ class ArchivesController < ApplicationController
} }
end end
files = [] files = []
archive.archive_file_multiples.order_by(:sort_number=>'desc').each do |file| archive.archive_file_multiples.each do |file|
if file.choose_lang.include?(I18n.locale.to_s) if file.choose_lang.include?(I18n.locale.to_s)
title = (file.file_title.blank? ? File.basename(file.file.path) : file.file_title) rescue "" title = (file.file_title.blank? ? File.basename(file.file.path) : file.file_title) rescue ""
extension = file.file.file.extension.downcase rescue "" extension = file.file.file.extension.downcase rescue ""
@ -33,6 +38,7 @@ class ArchivesController < ApplicationController
end end
{ {
"archive-title" => archive.title, "archive-title" => archive.title,
"created_at" => archive.created_at.strftime('%Y%m%d').to_i,
"archive-url" => archive.url, "archive-url" => archive.url,
"url" => archive.url, "url" => archive.url,
"statuses" => statuses, "statuses" => statuses,
@ -41,7 +47,8 @@ class ArchivesController < ApplicationController
"files" => files "files" => files
} }
end end
sorted = archives.sort_by{|k,v| k["sort_number"].to_i} each_data_count.push(archives.length)
sorted = archives.sort_by{|k,v| -k["sort_number"].to_i}
sorted = sorted.sort{|k,v| v["is_top"] <=> k["is_top"]} sorted = sorted.sort{|k,v| v["is_top"] <=> k["is_top"]}
{ {
"category-title" => category.title, "category-title" => category.title,
@ -49,8 +56,75 @@ class ArchivesController < ApplicationController
"url_to_edit" => url_to_edit "url_to_edit" => url_to_edit
} }
end end
if ArchiveSortOrder.first['sort_order'] #Order with ascending
cats = cats.collect do |cat|
Hash[cat.map{|k,v| [k,k=='archives' ? (v.sort_by{|tp| [(tp['sort_number'].nil? ? Float::INFINITY : tp['sort_number'].to_i),-tp['created_at']]}) : v] }]
end
else
cats = cats.collect do |cat|
Hash[cat.map{|k,v| [k,k=='archives' ? (v.sort_by{|tp| [(tp['sort_number'].nil? ? Float::INFINITY : -tp['sort_number'].to_i),-tp['created_at']]}) : v] }]
end
end
if params[:data_count].to_i <=0
page_data_count = 0
else
page_data_count = params[:data_count].to_i
end
if params[:page_no].nil?
page_no = 1
else
page_no = params[:page_no].to_i
end
if page_data_count != 0
all_data_count = 0
data_start = -1
data_end = -1
for i in 0...each_data_count.length
all_data_count_before = all_data_count
all_data_count += each_data_count[i]
if ( data_start == -1 && (all_data_count > (page_no - 1) * page_data_count) )
data_start = i
data_start_first = (page_no - 1) * page_data_count - all_data_count_before
end
if ( data_end == -1 && (all_data_count > (page_no * page_data_count - 1)) )
data_end = i
data_end_last = (page_no * page_data_count - 1) - all_data_count_before
end
end
if ( data_end == -1 && data_start != -1)
data_end = i
data_end_last = -1
end
if data_start!=-1 && page_no>=1
cats_last = []
for i in data_start..data_end
if data_start != data_end
if i==data_start
cats_last << Hash[cats[i].map{|k,v| [k , (k=='archives' ? v[data_start_first..-1] : v)]}]
elsif i==data_end
cats_last << Hash[cats[i].map{|k,v| [k , (k=='archives' ? v[0..data_end_last] : v)]}]
else
cats_last << cats[i]
end
else
cats_last << Hash[cats[i].map{|k,v| [k,(k=='archives' ? v[data_start_first..data_end_last] : v)]}]
end
end
else
cats_last = [Hash[cats[0].map{|k,v| [k,'']}]]
end
@@total_pages = (all_data_count.to_f / page_data_count).ceil
else
if page_no!=1
cats_last = [Hash[cats[0].map{|k,v| [k,'']}]]
@@total_pages = 0
else
cats_last = cats
@@total_pages = 1
end
end
{ {
"categories" => cats "categories" => cats_last
} }
end end
@ -72,7 +146,7 @@ class ArchivesController < ApplicationController
else else
files_by_cateogry = ArchiveFile.where(:category_id.in => OrbitHelper.widget_categories).with_tags(OrbitHelper.widget_tags).asc(:sort_number).group_by(&:category) files_by_cateogry = ArchiveFile.where(:category_id.in => OrbitHelper.widget_categories).with_tags(OrbitHelper.widget_tags).asc(:sort_number).group_by(&:category)
end end
cats = files_by_cateogry.keys.collect do |cat| F cats = files_by_cateogry.keys.collect do |cat|
files_by_category_tag = files_by_cateogry[cat].group_by(&:tags) files_by_category_tag = files_by_cateogry[cat].group_by(&:tags)
ts = [] ts = []
@ -116,11 +190,15 @@ class ArchivesController < ApplicationController
end end
{ {
"categories" => cats, "categories" => cats,
"extras" => {"widget-title" => "Archives","more_url"=>OrbitHelper.widget_more_url} "extras" => {"widget-title" => "Archives","more_url" => OrbitHelper.widget_more_url}
} }
end end
def widget def widget
if ArchiveSortOrder.count == 0
ArchiveSortOrder.new('sort_order' => false).save
end
page_data_count = OrbitHelper.widget_data_count
categories = OrbitHelper.widget_categories categories = OrbitHelper.widget_categories
@categories = [] @categories = []
if categories.first == "all" if categories.first == "all"
@ -138,13 +216,37 @@ class ArchivesController < ApplicationController
end end
end end
cats = @categories.collect do |cat| cats = @categories.collect do |cat|
archives = ArchiveFile.can_display.where(:category_id => cat["id"]).collect do |archive| if ArchiveSortOrder.first['sort_order'] #Order with ascending
url = archive.archive_file_multiples.count > 1 ? OrbitHelper.widget_more_url : "/xhr/archive/download?file=#{archive.archive_file_multiples.first.id}" archives_all = ArchiveFile.can_display.where(:category_id => cat["id"]).filter_by_tags(OrbitHelper.widget_tags)
{ temp_with_nil = archives_all.in(sort_number: nil).order_by(created_at: 'desc')
"archive-title" => archive.title, temp_no_nil = archives_all.not_in(sort_number: nil).order_by(sort_number: 'asc',created_at: 'desc')
"archive-url" => archive.url, archives_temp = temp_no_nil.concat(temp_with_nil)
"archive_url" => url archives = archives_temp.collect do |archive|
} if archive.archive_file_multiples.count==0
url = (archive[:url][OrbitHelper.get_site_locale].to_s.empty? ? 'javascript:void' : archive[:url][OrbitHelper.get_site_locale])
else
url = archive.archive_file_multiples.count > 1 ? OrbitHelper.widget_more_url : "/xhr/archive/download?file=#{archive.archive_file_multiples.first.id}"
end
{
"archive-title" => archive.title,
"archive-url" => archive.url,
"archive_url" => url
}
end
else
archives_temp = ArchiveFile.can_display.where(:category_id => cat["id"]).filter_by_tags(OrbitHelper.widget_tags).order_by(sort_number: 'desc',created_at: 'desc')
archives = archives_temp.collect do |archive|
if archive.archive_file_multiples.count==0
url = (archive[:url][OrbitHelper.get_site_locale].to_s.empty? ? 'javascript:void' : archive[:url][OrbitHelper.get_site_locale])
else
url = archive.archive_file_multiples.count > 1 ? (OrbitHelper.widget_more_url + '?data_count=' + page_data_count.to_s) : "/xhr/archive/download?file=#{archive.archive_file_multiples.first.id}"
end
{
"archive-title" => archive.title,
"archive-url" => archive.url,
"archive_url" => url
}
end
end end
{ {
"category-title" => cat["title"], "category-title" => cat["title"],
@ -154,7 +256,11 @@ class ArchivesController < ApplicationController
end end
{ {
"categories" => cats, "categories" => cats,
"extras" => {"widget-title" => "Archives","more_url"=>OrbitHelper.widget_more_url} "extras" => {"widget-title" => "Archives","more_url" => (OrbitHelper.widget_more_url + '?data_count=' + page_data_count.to_s)}
} }
end end
private
def self.get_total_pages
@@total_pages
end
end end

View File

@ -0,0 +1,4 @@
class ArchiveSortOrder
include Mongoid::Document
field :sort_order, :type => Boolean # true => desc , false => asc
end

View File

@ -0,0 +1,10 @@
<form method="get" action='?' name='order_form'>
<nobr>
<%= t('archive.choose_order')+':' %>
<% if @choose %>
<input type="checkbox" name="order_asc" value="false" onchange='document.order_form.submit()' checked><span><%= t('archive.yes') %></span>
<% else %>
<input type="checkbox" name="order_asc" value="true" onchange='document.order_form.submit()'><span><%= t('archive.no') %></span>
<% end %>
</nobr>
</form>

View File

@ -1,4 +1,5 @@
<%= render_filter @filter_fields, "index_table" %> <%= render_filter @filter_fields, "index_table" %>
<%= render 'sort_order_choose' %>
<div id="index_table"> <div id="index_table">
<%= render 'index'%> <%= render 'index'%>
</div> </div>

View File

@ -1 +1,2 @@
<%= render_view %> <%= render_view %>
<%= create_pagination(ArchivesController.get_total_pages).html_safe %>

View File

@ -1,6 +1,9 @@
en: en:
archive: archive:
choose_order: Order with ascending
"yes": "Yes"
"no": "No"
archive: Archive archive: Archive
all: All all: All
new: New new: New

View File

@ -1,6 +1,9 @@
zh_tw: zh_tw:
archive: archive:
choose_order: 升序排列
"yes":
"no":
show_lang: 呈現語系 show_lang: 呈現語系
download: 檔案下載 download: 檔案下載
archive: 檔案室 archive: 檔案室