diff --git a/app/assets/javascripts/tinymce_orbit.js.erb b/app/assets/javascripts/tinymce_orbit.js.erb index 1a9d063d..51f86b6f 100644 --- a/app/assets/javascripts/tinymce_orbit.js.erb +++ b/app/assets/javascripts/tinymce_orbit.js.erb @@ -46,7 +46,7 @@ function load_tinymce() { function myFileBrowser(field_name, url, type, win) { var cmsURL = window.location.toString(); cmsURL = cmsURL.split("/"); - cmsURL = "<%= Rails.application.routes.url_helpers.new_admin_asset_path %>"; + cmsURL = "<%= Rails.application.routes.url_helpers.file_upload_admin_assets_path %>"; console.log(cmsURL); // script URL - use an absolute path! if (cmsURL.indexOf("?") < 0) { diff --git a/app/controllers/admin/assets_controller.rb b/app/controllers/admin/assets_controller.rb index 89fd41b7..fb4865a2 100644 --- a/app/controllers/admin/assets_controller.rb +++ b/app/controllers/admin/assets_controller.rb @@ -11,6 +11,7 @@ class Admin::AssetsController < OrbitBackendController def new @asset = Asset.new @asset_categories = AssetCategory.all + @tags = AssetTag.all respond_to do |format| format.html {} format.js { render 'js/show_pop_up', :locals => {:partial => 'admin/assets/new'} } @@ -20,6 +21,7 @@ class Admin::AssetsController < OrbitBackendController def edit @asset = Asset.find(params[:id]) @asset_categories = AssetCategory.all + @tags = AssetTag.all respond_to do |format| format.html {} format.js { render 'js/show_pop_up', :locals => {:partial => 'admin/assets/edit'} } @@ -28,15 +30,29 @@ class Admin::AssetsController < OrbitBackendController def create @asset = Asset.new(params[:asset]) - if @asset.save + @asset.filename = @asset.i18n_variable[I18n.locale] rescue nil + if @asset.filename && @asset.save respond_to do |format| - format.html { render :text => @asset.data.url } - format.js {} + format.js { + if params[:uploader] + render 'create' + else + render 'js/remove_pop_up_and_reload_content', :locals => {:function => 'replaceWith', :id => "asset_#{@asset.id}", :value => @asset, :values => nil, :partial => 'admin/assets/asset', :locals => nil} + end + } end else + flash[:error] = t(:create_fail) + @asset_categories = AssetCategory.all + @tags = AssetTag.all respond_to do |format| - format.html { render :action => :new } - format.js { render 'js/reload_pop_up', :locals => {:value => @asset, :values => nil, :partial => 'admin/assets/new', :locals => {:is_html => false}} } + format.js { + if params[:uploader] + render 'file_upload' + else + render 'js/reload_pop_up', :locals => {:value => @asset, :values => nil, :partial => 'admin/assets/new', :locals => {:is_html => false}} + end + } end end end @@ -49,6 +65,9 @@ class Admin::AssetsController < OrbitBackendController format.js { render 'js/remove_pop_up_and_reload_content', :locals => {:function => 'replaceWith', :id => "asset_#{@asset.id}", :value => @asset, :values => nil, :partial => 'admin/assets/asset', :locals => nil} } end else + flash[:error] = t(:update_fail) + @asset_categories = AssetCategory.all + @tags = AssetTag.all respond_to do |format| format.html { render :action => :edit } format.js { render 'js/reload_pop_up', :locals => {:value => @asset, :values => nil, :partial => 'admin/assets/edit', :locals => {:is_html => false}} } @@ -71,5 +90,17 @@ class Admin::AssetsController < OrbitBackendController end redirect_to assets_url(:filter => params[:filter], :direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]) end + + def file_upload + @asset = Asset.new + @asset_categories = AssetCategory.all + @tags = AssetTag.all + render :layout => false + end + + def file_select + @assets = Asset.all + render :layout => false + end end diff --git a/app/models/asset.rb b/app/models/asset.rb index 2bb02dfc..9819934f 100644 --- a/app/models/asset.rb +++ b/app/models/asset.rb @@ -8,9 +8,16 @@ class Asset field :filename field :description + has_one :i18n_variable, :as => :language_value, :autosave => true, :dependent => :destroy + validates_presence_of :filename, :data belongs_to :asset_category belongs_to :assetable, polymorphic: true + has_and_belongs_to_many :tags, :class_name => "AssetTag" + + def sorted_tags + tags.order_by(I18n.locale, :asc) + end end diff --git a/app/views/admin/assets/_asset.html.erb b/app/views/admin/assets/_asset.html.erb index 99ac636e..9eb4e77a 100644 --- a/app/views/admin/assets/_asset.html.erb +++ b/app/views/admin/assets/_asset.html.erb @@ -1,7 +1,8 @@ <%= check_box_tag 'to_delete[]', asset.id, false, :class => "checkbox_in_list" %> + <%= asset.i18n_variable[I18n.locale] rescue nil %> -
<%= image_tag(asset.data.url) %>
+
- <%= asset.description %> <%= asset.data.file.content_type %> - <%= asset.data_identifier %> <%= number_to_human_size(asset.data.file.file_length) %> + <%= asset.category.i18n_variable[I18n.locale] rescue nil %> + +
+
+ <% asset.sorted_tags.each do |tag| %> + <%= tag[I18n.locale] %> + <% end %> +
+
+ + + \ No newline at end of file diff --git a/app/views/admin/assets/_edit.html.erb b/app/views/admin/assets/_edit.html.erb index a62524c0..0e592d19 100644 --- a/app/views/admin/assets/_edit.html.erb +++ b/app/views/admin/assets/_edit.html.erb @@ -1,6 +1,8 @@

<%= t('editing_asset') %>

+ <%= flash_messages %> + <%= form_for @asset, :url => admin_asset_path(@asset), :html => {:id => (is_html ? nil : 'ajaxForm'), :multipart => true } do |f| %> <%= f.error_messages %> <%= render :partial => "form", :locals => { :f => f } %> @@ -9,7 +11,7 @@ <%= link_back %> <%= f.submit t(:edit) %> <% else %> - <%= t(:update) %> + <%= t(:update) %> <% end %>
<% end %> diff --git a/app/views/admin/assets/_form.html.erb b/app/views/admin/assets/_form.html.erb index 6abb883e..4e1589f4 100644 --- a/app/views/admin/assets/_form.html.erb +++ b/app/views/admin/assets/_form.html.erb @@ -1,19 +1,38 @@ -

-<%= f.label :filename, t('admin.file_name') %> -<%= f.text_field :filename, :class => 'text' %> -

- -

-<%= f.label :description, t('admin.description') %> -<%= f.text_field :description, :class => 'text' %> -

- -

-<%= f.label :category %> -<%= f.select :asset_category_id, @asset_categories.collect{|t| [ t.i18n_variable[I18n.locale], t.id ]}, {}, :class => "input-medium" %> -

- -

-<%= f.label :data, t('admin.data'), :class => 'file' %> -<%= f.file_field :data %> -

\ No newline at end of file +
+ +
+ <%= f.fields_for :i18n_variable, (@asset.new_record? ? @asset.build_i18n_variable : @asset.i18n_variable) do |f| %> + <% @site_valid_locales.each do |locale| %> + <%= content_tag :label do -%> +
+ <%= I18nVariable.from_locale(locale) %> + <%= f.text_field locale, :class => "input-large" %> +
+ <% end %> + <% end %> + <% end %> +
+
+
+ +
+ <%= f.select :asset_category_id, @asset_categories.collect{|t| [ t.i18n_variable[I18n.locale], t.id ]}, {}, :class => "input-large" %> +
+
+
+ +
+ <% @tags.each do |tag| %> + <%= content_tag :label, :class => "checkbox inline" do -%> + <%= check_box_tag 'asset[tag_ids][]', tag.id, @asset.tag_ids.include?(tag.id) %> + <%= tag[I18n.locale] %> + <% end %> + <% end %> +
+
+
+ +
+ <%= f.file_field :data, :class => 'upload' %> +
+
\ No newline at end of file diff --git a/app/views/admin/assets/_new.html.erb b/app/views/admin/assets/_new.html.erb index 5d770a2e..d8838278 100644 --- a/app/views/admin/assets/_new.html.erb +++ b/app/views/admin/assets/_new.html.erb @@ -1,11 +1,13 @@

<%= t('admin.new_asset') %>

+ <%= flash_messages %> + <%= form_for :asset, :url => admin_assets_path, :html => {:id => 'ajaxForm', :multipart => true } do |f| %> <%= f.error_messages %> <%= render :partial => "form", :locals => { :f => f } %>
- <%= t(:create) %> + <%= t(:create) %>
<% end %>
diff --git a/app/views/admin/assets/_sort_headers.html.erb b/app/views/admin/assets/_sort_headers.html.erb index 2c8ca234..86e5f86a 100644 --- a/app/views/admin/assets/_sort_headers.html.erb +++ b/app/views/admin/assets/_sort_headers.html.erb @@ -1,5 +1,6 @@ -<%= render_sort_bar(true, ['title', 'title','span1-2', 'admin.title'], - ['description', 'description', 'span1-2', 'admin.description'], - ['intro', 'intro', 'span1-2', 'admin.intro'], - ['intro', 'intro', 'span1-2', 'admin.intro'], - ['intro', 'intro', 'span1-2', 'admin.file_length']).html_safe %> +<%= render_sort_bar(true, ['title', 'title','span4', 'admin.title'], + ['description', 'description', 'span1-2', 'admin.data'], + ['intro', 'intro', 'span1-2', 'admin.file_type'], + ['intro', 'intro', 'span1-2', 'admin.file_length'], + ['intro', 'intro', 'span1-2', 'admin.category'], + ['intro', 'intro', 'span1-2', 'admin.tags']).html_safe %> diff --git a/app/views/admin/assets/file_upload.html.erb b/app/views/admin/assets/file_upload.html.erb new file mode 100644 index 00000000..eeed414b --- /dev/null +++ b/app/views/admin/assets/file_upload.html.erb @@ -0,0 +1,56 @@ +<%= javascript_include_tag "new_admin" %> +<%= stylesheet_link_tag "new_admin" %> + +<%= flash_messages %> + +<%= form_for :asset, :url => admin_assets_path(:uploader => true), :html => {:id => 'ajaxForm', :multipart => true } do |f| %> + + +
+ +
+ +<% end %> \ No newline at end of file diff --git a/app/views/admin/assets/index.html.erb b/app/views/admin/assets/index.html.erb index 7424eb6c..394e18e8 100644 --- a/app/views/admin/assets/index.html.erb +++ b/app/views/admin/assets/index.html.erb @@ -3,12 +3,13 @@ - - - - - - + + + + + + + @@ -20,7 +21,7 @@
<%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t('admin.add'), new_admin_asset_path, :remote => true, :class => 'btn btn-primary pull-right' %>
- <%= paginate @assets, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]} %> + <%= paginate @assets, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]}, :remote => true %>
diff --git a/app/views/admin/assets/index.js.erb b/app/views/admin/assets/index.js.erb new file mode 100644 index 00000000..e2e87d36 --- /dev/null +++ b/app/views/admin/assets/index.js.erb @@ -0,0 +1,4 @@ +$("#delete_all").attr("action", "<%= delete_admin_assets_path(:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]) %>"); +$("#sort_headers").html("<%= j render 'sort_headers' %>"); +$("#tbody_assets").html("<%= j render :partial => 'asset', :collection => @assets %>"); +$("#asset_pagination").html("<%= j paginate @assets, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>"); \ No newline at end of file diff --git a/app/views/layouts/_side_bar.html.erb b/app/views/layouts/_side_bar.html.erb index 852bfd4c..c1c16879 100644 --- a/app/views/layouts/_side_bar.html.erb +++ b/app/views/layouts/_side_bar.html.erb @@ -72,7 +72,6 @@ <%= link_to content_tag(:i, nil, :class => 'icons-link') + t('admin.asset'), admin_assets_path %> <%= content_tag :ul, :class => ("nav nav-list " + visible_for_controllers('assets', '/admin/asset_tags', 'asset_categories')) do -%> <%= content_tag :li, link_to(t('admin.all_assets'), admin_assets_path), :class => active_for_action('assets', 'index') %> - <%= content_tag :li, link_to(t('admin.add_new'), new_admin_asset_path), :class => active_for_action('assets', 'new') %> <%= content_tag :li, link_to(t('admin.categories'), admin_asset_categories_path), :class => active_for_action('asset_categories', 'index') %> <%= content_tag :li, link_to(t('admin.tags'), admin_asset_tags_path), :class => active_for_action('/admin/asset_tags', 'index') %> <% end -%> diff --git a/config/locales/en.yml b/config/locales/en.yml index 3e2ffe8e..908023d0 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -11,6 +11,7 @@ en: back: Back browse: Browse cancel: Cancel + create_fail: Creation failed create: Create delete: Delete desktop: Desktop @@ -41,6 +42,7 @@ en: submit: Submit sure?: Are you sure? update: Update + update_failed: Update failed view: View view_count: View count yes_: "Yes" @@ -117,6 +119,7 @@ en: calendar: Calendar cant_delete_self: You can not delete yourself. cant_revoke_self_admin: You can not revoke your admin role yourself. + category: Category choose_file: Choose a file... class: Class content: Content @@ -146,6 +149,7 @@ en: enabled_for: Enabled for file_name: Filename file_size: File size + file_upload: File upload format: Format home: Home id: ID @@ -231,6 +235,7 @@ en: site_title: Site title super_pages: Super pages structure: Structure + tags: Tags title: Title translation: Translation type: Type diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml index 9a1a9952..14625b96 100644 --- a/config/locales/zh_tw.yml +++ b/config/locales/zh_tw.yml @@ -9,6 +9,7 @@ zh_tw: browse: 選擇檔案 cancel: 取消 create: 新增 + create_fail: 創建失敗 delete: 刪除 desktop: 桌面 disable: 禁用 @@ -35,6 +36,7 @@ zh_tw: submit: 送出 sure?: 您肯定嗎? update: 更新 + update: 更新失敗 view: 檢視 view_count: 查看次數 yes_: "Yes" @@ -110,6 +112,7 @@ zh_tw: calendar: 行事曆 cant_delete_self: 您不可以刪除自己。 cant_revoke_self_admin: 您不可以撤銷自己的管理身份。 + category: 類別 choose_file: 請選擇一個文件... class: 階級 content: 內容 @@ -143,6 +146,7 @@ zh_tw: enabled_for: 啟用 file_name: 檔名 file_size: 檔案大小 + file_upload: 文件上載 format: 格式 home: 首頁 id: ID @@ -230,6 +234,7 @@ zh_tw: site_setting: 網站設定 super_pages: 可編頁面 structure: 網站結構 + tags: 標籤 title: 標題 translation: 翻譯 type: 類型 diff --git a/config/routes.rb b/config/routes.rb index 214f58b2..ef2c46e2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -15,6 +15,7 @@ Orbit::Application.routes.draw do mount Resque::Server.new, :at => "/resque" resources :assets do collection do + get 'file_upload' post 'delete' end end