From 5711618d636ea2026914ccab725d560e6cd02ed3 Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Tue, 5 May 2015 16:59:29 +0800 Subject: [PATCH] web resource order added --- .../admin/web_resources_controller.rb | 36 +++++- app/controllers/web_resources_controller.rb | 1 - app/models/web_link.rb | 4 +- app/views/admin/web_resources/order.html.erb | 117 ++++++++++++++++++ config/locales/en.yml | 3 +- config/locales/zh_tw.yml | 1 + config/routes.rb | 2 + lib/web_resource/engine.rb | 6 + 8 files changed, 164 insertions(+), 6 deletions(-) create mode 100644 app/views/admin/web_resources/order.html.erb diff --git a/app/controllers/admin/web_resources_controller.rb b/app/controllers/admin/web_resources_controller.rb index 0503333..ddebf46 100644 --- a/app/controllers/admin/web_resources_controller.rb +++ b/app/controllers/admin/web_resources_controller.rb @@ -7,8 +7,12 @@ class Admin::WebResourcesController < OrbitAdminController @categories = @module_app.categories.enabled @filter_fields = filter_fields(@categories, @tags) @table_fields = [:status, :category, :title] - - @links = WebLink.order_by(sort) + if params[:sort].blank? + s = {:order_position => "asc"} + else + s = sort + end + @links = WebLink.order_by(s) .with_categories(filters("category")) .with_tags(filters("tag")) .with_status(filters("status")) @@ -18,6 +22,31 @@ class Admin::WebResourcesController < OrbitAdminController render :partial => "index" if request.xhr? end + def order + empty_position_links = WebLink.where(:order_position => nil) + if empty_position_links.count > 0 + max_position = WebLink.max(:order_position) + max_position = 0 if max_position.nil? + empty_position_links.each_with_index do |epl,i| + epl.order_position = i + max_position + epl.save + end + end + @links = WebLink.all.asc(:order_position) + end + + def updateorder + ids_with_order = params[:order] + ids_with_order.each_with_index do |id,index| + link = WebLink.find(id) rescue nil + if !link.nil? + link.order_position = index + link.save + end + end + render :json => {"success" => true}.to_json + end + def new @tags =@module_app.tags @categories = @module_app.categories.enabled @@ -29,6 +58,9 @@ class Admin::WebResourcesController < OrbitAdminController link = WebLink.new(link_params) link.create_user_id = current_user.id link.update_user_id = current_user.id + max_position = WebLink.max(:order_position) + max_position = -1 if max_position.nil? + link.order_position = max_position + 1 link.save redirect_to admin_web_resources_path end diff --git a/app/controllers/web_resources_controller.rb b/app/controllers/web_resources_controller.rb index d3ea801..4242f19 100644 --- a/app/controllers/web_resources_controller.rb +++ b/app/controllers/web_resources_controller.rb @@ -2,7 +2,6 @@ class WebResourcesController < ApplicationController def index links = WebLink.where(:title.ne => "").can_display.filter_by_categories - web_link = links.collect do |link| statuses = link.statuses_with_classname.collect do |status| { diff --git a/app/models/web_link.rb b/app/models/web_link.rb index 930aa46..383fbca 100644 --- a/app/models/web_link.rb +++ b/app/models/web_link.rb @@ -10,7 +10,7 @@ class WebLink field :title, localize: true field :context, localize: true - + field :order_position, type: Integer, default: -1 field :url, localize: true field :create_user_id field :update_user_id @@ -19,7 +19,7 @@ class WebLink field :link_open, type: String LINK_OPEN_TYPES = ["local", "new_window"] - scope :can_display, ->{where(is_hidden: false).order_by([:is_top,:desc],[:created_at,:desc])} + scope :can_display, ->{where(is_hidden: false).order_by([:is_top,:desc],[:order_position,:asc])} before_save :add_http diff --git a/app/views/admin/web_resources/order.html.erb b/app/views/admin/web_resources/order.html.erb new file mode 100644 index 0000000..84d6e45 --- /dev/null +++ b/app/views/admin/web_resources/order.html.erb @@ -0,0 +1,117 @@ +<% content_for :page_specific_css do %> + <%= stylesheet_link_tag "admin/web_links" %> +<% end %> + + + + + + + <% @links.each_with_index do |link,i| %> + + + + + <% end %> + +
PositionLink
+
<%= (i + 1).to_s %>
+
+ +
+
+ + +
+ \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index 92b7803..0ef7d1d 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -5,4 +5,5 @@ en: web_link: local: Open In Current page new_window: Open In New window - type: Link Open Type \ No newline at end of file + type: Link Open Type + order: Order \ No newline at end of file diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml index 32628c7..3bb17d5 100644 --- a/config/locales/zh_tw.yml +++ b/config/locales/zh_tw.yml @@ -6,3 +6,4 @@ zh_tw: local: 當前視窗開啟 new_window: 新視窗開啟 type: 開啟方式 + order: Order diff --git a/config/routes.rb b/config/routes.rb index 50a0a2a..e82c7dc 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,6 +4,8 @@ locales = Site.find_by(site_active: true).in_use_locales rescue I18n.available_l scope "(:locale)", locale: Regexp.new(locales.join("|")) do namespace :admin do + get "/web_resources/order" => "web_resources#order" + post "/web_resources/updateorder" => "web_resources#updateorder" resources :web_resources end end diff --git a/lib/web_resource/engine.rb b/lib/web_resource/engine.rb index a2e8750..8b8c73a 100644 --- a/lib/web_resource/engine.rb +++ b/lib/web_resource/engine.rb @@ -30,6 +30,12 @@ module WebResource :active_for_action=>{'admin/web_resources'=>'new'}, :available_for => 'sub_managers' + context_link 'web_link.order', + :link_path=>"admin_web_resources_order_path" , + :priority=>2, + :active_for_action=>{'admin/web_resources'=>'order'}, + :available_for => 'managers' + context_link 'categories', :link_path=>"admin_module_app_categories_path" , :link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'web_resource').id}",