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:
parent
4de57fb675
commit
e2fbba4cf6
|
@ -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
|
||||||
|
|
|
@ -1,14 +1,19 @@
|
||||||
class ArchivesController < ApplicationController
|
class ArchivesController < ApplicationController
|
||||||
def index
|
def index
|
||||||
|
if ArchiveSortOrder.count == 0
|
||||||
|
ArchiveSortOrder.new('sort_order' => false).save
|
||||||
|
end
|
||||||
|
params = OrbitHelper.params
|
||||||
if OrbitHelper.page_data_count > 0
|
if OrbitHelper.page_data_count > 0
|
||||||
OrbitHelper.set_page_data_count 0
|
OrbitHelper.set_page_data_count 0
|
||||||
page = Page.where(:page_id => OrbitHelper.params["page_id"]).first rescue nil
|
page = Page.where(:page_id => params["page_id"]).first rescue nil
|
||||||
if !page.nil?
|
if !page.nil?
|
||||||
page.data_count = 0
|
page.data_count = 0
|
||||||
page.save
|
page.save
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
files_by_cateogry = ArchiveFile.where(is_hidden: false).filter_by_categories.filter_by_tags.order_by(:created_at => "desc").group_by(&:category)
|
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,16 +47,84 @@ 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,
|
||||||
"archives" => sorted,
|
"archives" => sorted,
|
||||||
"url_to_edit" => url_to_edit
|
"url_to_edit" => url_to_edit
|
||||||
}
|
}
|
||||||
|
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
|
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,14 +216,38 @@ 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
|
||||||
|
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')
|
||||||
|
temp_no_nil = archives_all.not_in(sort_number: nil).order_by(sort_number: 'asc',created_at: 'desc')
|
||||||
|
archives_temp = temp_no_nil.concat(temp_with_nil)
|
||||||
|
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}"
|
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-title" => archive.title,
|
||||||
"archive-url" => archive.url,
|
"archive-url" => archive.url,
|
||||||
"archive_url" => url
|
"archive_url" => url
|
||||||
}
|
}
|
||||||
end
|
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
|
||||||
{
|
{
|
||||||
"category-title" => cat["title"],
|
"category-title" => cat["title"],
|
||||||
"category-id" => cat["id"],
|
"category-id" => cat["id"],
|
||||||
|
@ -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
|
|
@ -0,0 +1,4 @@
|
||||||
|
class ArchiveSortOrder
|
||||||
|
include Mongoid::Document
|
||||||
|
field :sort_order, :type => Boolean # true => desc , false => asc
|
||||||
|
end
|
|
@ -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>
|
|
@ -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>
|
|
@ -1 +1,2 @@
|
||||||
<%= render_view %>
|
<%= render_view %>
|
||||||
|
<%= create_pagination(ArchivesController.get_total_pages).html_safe %>
|
|
@ -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
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
zh_tw:
|
zh_tw:
|
||||||
|
|
||||||
archive:
|
archive:
|
||||||
|
choose_order: 升序排列
|
||||||
|
"yes": 是
|
||||||
|
"no": 否
|
||||||
show_lang: 呈現語系
|
show_lang: 呈現語系
|
||||||
download: 檔案下載
|
download: 檔案下載
|
||||||
archive: 檔案室
|
archive: 檔案室
|
||||||
|
|
Loading…
Reference in New Issue