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) %>
+
<%= link_to t(:edit), edit_admin_asset_path(asset), :remote => true, :class => 'edit' %>
@@ -9,8 +10,22 @@
- <%= 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
+
+
<%= t 'admin.title' %>
+
+ <%= 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.label :category, t('admin.category') %>
+
+ <%= f.select :asset_category_id, @asset_categories.collect{|t| [ t.i18n_variable[I18n.locale], t.id ]}, {}, :class => "input-large" %>
+
+
+
+
<%= t 'admin.tags' %>
+
+ <% @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.label :data, t('admin.data') %>
+
+ <%= 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 } %>
<% 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| %>
+
+
+
+
<%= t 'admin.title' %>
+
+ <%= 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.label :category, t('admin.category') %>
+
+ <%= f.select :asset_category_id, @asset_categories.collect{|t| [ t.i18n_variable[I18n.locale], t.id ]}, {}, :class => "input-large" %>
+
+
+
+
<%= t 'admin.tags' %>
+
+ <% @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.label :data, t('admin.data') %>
+
+ <%= f.file_field :data, :class => 'upload' %>
+
+
+
+
+
+
+
+<% 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 @@
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