Change assets

This commit is contained in:
Christophe Vilayphiou 2012-05-16 11:07:11 +08:00
parent 80e84c10ba
commit 0b0916179f
24 changed files with 346 additions and 71 deletions

View File

@ -15,4 +15,5 @@
//= require tinymce_orbit //= require tinymce_orbit
//= require orbit-bar-search //= require orbit-bar-search
//= require side_bar_history //= require side_bar_history
//= require rss
//= require ajax_form //= require ajax_form

View File

@ -1,6 +1,9 @@
function load_tinymce() { function load_tinymce() {
$('.tinymce_textarea').tinymce({ $('.tinymce_textarea').tinymce({
// General options
theme: 'advanced', theme: 'advanced',
file_browser_callback : 'myFileBrowser',
plugins : "autolink,lists,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template", plugins : "autolink,lists,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
// Theme options // Theme options
@ -18,10 +21,68 @@ function load_tinymce() {
// Drop lists for link/image/media/template dialogs // Drop lists for link/image/media/template dialogs
template_external_list_url : "js/template_list.js", template_external_list_url : "js/template_list.js",
external_link_list_url : "js/link_list.js", // external_link_list_url : "js/link_list.js",
external_image_list_url : "js/image_list.js", // external_image_list_url : "js/image_list.js",
media_external_list_url : "js/media_list.js" // media_external_list_url : "js/media_list.js"
// Style formats
style_formats : [
{title : 'Bold text', inline : 'b'},
{title : 'Red text', inline : 'span', styles : {color : '#ff0000'}},
{title : 'Red header', block : 'h1', styles : {color : '#ff0000'}},
{title : 'Example 1', inline : 'span', classes : 'example1'},
{title : 'Example 2', inline : 'span', classes : 'example2'},
{title : 'Table styles'},
{title : 'Table row 1', selector : 'tr', classes : 'tablerow1'}
],
// Replace values for the template plugin
template_replace_values : {
username : "Some User",
staffid : "991234"
}
}); });
function myFileBrowser (field_name, url, type, win) {
var cmsURL = window.location.toString();
cmsURL = cmsURL.split("/");
// cmsURL = "http://<?php echo $_SITE['domain'].$_SITE['rel_path']; ?>/modules/modules/filemanager/";
// script URL - use an absolute path!
if (cmsURL.indexOf("?") < 0) {
//add the type as the only query parameter
cmsURL = cmsURL + "?type=" + type;
}
else {
//add the type as an additional query parameter
// (PHP session ID is now included if there is one at all)
cmsURL = cmsURL + "&type=" + type;
}
tinyMCE.activeEditor.windowManager.open({
file : cmsURL,
title : 'File Browser',
width : 850, // Your dimensions may differ - toy around with them!
height : 455,
resizable : "no",
inline : "no", // This parameter only has an effect if you use the inlinepopups plugin!
close_previous : "no"
}, {
window : win,
input : field_name
});
return false;
}
function ajaxSave() {
var ed = tinyMCE.get('content');
// Do you ajax call here, window.setTimeout fakes ajax call
ed.setProgressState(1); // Show progress
window.setTimeout(function() {
ed.setProgressState(0); // Hide progress
alert(ed.getContent());
}, 3000);
}
} }
$(document).ready(function() { $(document).ready(function() {

View File

@ -0,0 +1,65 @@
class Admin::AssetCategoriesController < OrbitBackendController
def index
@asset_categories = AssetCategory.all
@asset_category = AssetCategory.new
@url = admin_asset_categories_path
end
def show
@asset_category = AssetCategory.find(params[:id])
end
def new
@asset_category = AssetCategory.new
end
def edit
@asset_category = AssetCategory.find(params[:id])
@i18n_variable = @asset_category.i18n_variable
@url = admin_asset_categories_path(@asset_category)
end
def create
@asset_category = AssetCategory.new(params[:asset_category])
respond_to do |format|
if @asset_category.save
format.html { redirect_to(admin_asset_categories_url, :notice => t('announcement.create_asset_category_success')) }
format.js
else
format.html { render :action => "new" }
format.js { render action: "new" }
end
end
end
def update
@asset_category = AssetCategory.find(params[:id])
@url = admin_asset_categories_path(@asset_category)
respond_to do |format|
if @asset_category.update_attributes(params[:asset_category])
# format.html { redirect_to(panel_announcement_back_end_asset_category_url(@asset_category), :notice => t('asset_category.update_asset_category_success')) }
# format.html { redirect_to(panel_announcement_back_end_asset_categories_url, :notice => t('asset_category.update_asset_category_success')) }
# format.xml { head :ok }
format.js
else
format.html { render :action => "edit" }
format.js { render :action => "edit" }
end
end
end
def destroy
@asset_category = AssetCategory.find(params[:id])
@asset_category.destroy
respond_to do |format|
format.html { redirect_to(admin_asset_categories_url) }
format.js
end
end
end

View File

@ -1,11 +1,7 @@
class Admin::AssetsController < ApplicationController class Admin::AssetsController < OrbitBackendController
layout "admin"
before_filter :authenticate_user!
before_filter :is_admin?
def index def index
@assets = Asset.all.entries @assets = (params[:sort] || @filter) ? get_sorted_and_filtered("asset") : Asset.all.page(params[:page]).per(10)
end end
def show def show
@ -14,6 +10,7 @@ class Admin::AssetsController < ApplicationController
def new def new
@asset = Asset.new @asset = Asset.new
@asset_categories = AssetCategory.all
respond_to do |format| respond_to do |format|
format.html {} format.html {}
format.js { render 'js/show_pop_up', :locals => {:partial => 'admin/assets/new'} } format.js { render 'js/show_pop_up', :locals => {:partial => 'admin/assets/new'} }
@ -22,6 +19,7 @@ class Admin::AssetsController < ApplicationController
def edit def edit
@asset = Asset.find(params[:id]) @asset = Asset.find(params[:id])
@asset_categories = AssetCategory.all
respond_to do |format| respond_to do |format|
format.html {} format.html {}
format.js { render 'js/show_pop_up', :locals => {:partial => 'admin/assets/edit'} } format.js { render 'js/show_pop_up', :locals => {:partial => 'admin/assets/edit'} }
@ -33,7 +31,7 @@ class Admin::AssetsController < ApplicationController
if @asset.save if @asset.save
respond_to do |format| respond_to do |format|
format.html { redirect_to admin_assets_url } format.html { redirect_to admin_assets_url }
format.js { render 'js/remove_pop_up_and_reload_content', :locals => {:function => 'append', :id => 'asset_tbody', :value => @asset, :values => nil, :partial => 'admin/assets/asset', :locals => nil} } format.js { render 'js/remove_pop_up_and_reload_content', :locals => {:function => 'append', :id => 'tbody_assets', :value => @asset, :values => nil, :partial => 'admin/assets/asset', :locals => nil} }
end end
else else
respond_to do |format| respond_to do |format|
@ -67,4 +65,11 @@ class Admin::AssetsController < ApplicationController
end end
end end
def delete
if params[:to_delete]
asset = Asset.any_in(:_id => params[:to_delete]).delete_all
end
redirect_to assets_url(:filter => params[:filter], :direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
end
end end

View File

@ -10,4 +10,7 @@ class Asset
validates_presence_of :filename, :data validates_presence_of :filename, :data
belongs_to :asset_category
belongs_to :assetable, polymorphic: true
end end

View File

@ -0,0 +1,16 @@
class AssetCategory
include Mongoid::Document
include Mongoid::Timestamps
field :key
field :display
has_one :i18n_variable, :as => :language_value, :autosave => true, :dependent => :destroy
has_many :assets
def self.from_id(id)
AssetCategory.find(id) rescue nil
end
end

View File

@ -48,8 +48,8 @@ class AssetUploader < CarrierWave::Uploader::Base
# end # end
# Override the filename of the uploaded files: # Override the filename of the uploaded files:
# def filename def filename
# "something.jpg" if original_filename model.filename
# end end
end end

View File

@ -0,0 +1,17 @@
<tr id="<%= dom_id asset_category %>" class="with_action">
<td>
<%= asset_category.key %>
<div class="quick-edit">
<ul class="nav nav-pills hide">
<li><%= link_to t('asset_category.edit'), edit_admin_asset_category_path(asset_category), :remote => true %></li>
<li><%= link_to t('asset_category.delete'), admin_asset_category_path(asset_category), :confirm => t('announcement.sure?'), :method => :delete, :remote => true %></li>
</ul>
</div>
</td>
<% @site_valid_locales.each do |locale| %>
<td><%= asset_category.i18n_variable[locale] rescue nil %></td>
<% end %>
</tr>

View File

@ -0,0 +1,30 @@
<% # encoding: utf-8 %>
<%= form_for(@asset_category, :remote => true, :url => @url) do |f| %>
<h2><%= (@asset_category.new_record? ? 'Add' : 'Edit') %></h2>
<div id="widget-title">
<%= f.label :key %>
<%= f.text_field :key %>
</div>
<div id="widget-title">
<%= f.fields_for :i18n_variable, (@asset_category.new_record? ? @asset_category.build_i18n_variable : @asset_category.i18n_variable) do |f| %>
<% @site_valid_locales.each do |locale| %>
<div class="control-group">
<%= label_tag "name-#{locale}", "Name-#{I18nVariable.from_locale(locale)}", :class => 'control-label' %>
<div class="controls">
<%= f.text_field locale, :class => 'input-xxlarge' %>
</div>
</div>
<% end %>
<% end %>
</div>
<div class="form-actions pagination-right">
<%= f.submit t('submit'), :class=>'btn btn-primary' %>
</div>
<% end %>

View File

@ -0,0 +1,2 @@
$('<%= j render :partial => 'asset_category', :collection => [@asset_category] %>').appendTo('#asset_categories').hide().fadeIn();
$("#new_asset_category")[0].reset();

View File

@ -0,0 +1 @@
$("#<%= dom_id @asset_category %>").remove();

View File

@ -0,0 +1 @@
$("#form > form").replaceWith("<%= j render "form" %>");

View File

@ -0,0 +1,41 @@
<%= flash_messages %>
<div id="filter" class="subnav">
<div class="filters">
<div id="sort_headers" class="table-label">
<table class="table main-list">
<thead>
<tr>
<th class="span2"><%= t('asset_category.key') %></th>
<% @site_valid_locales.each do |locale| %>
<th class="span2"><%= I18nVariable.first(:conditions => {:key => locale})[I18n.locale] %></th>
<% end %>
</tr>
</thead>
</table>
</div>
</div>
</div>
<table id="asset_categories" class="table main-list">
<thead>
<tr>
<th class="span2"></th>
<% @site_valid_locales.each do |locale| %>
<th class="span2"></th>
<% end %>
</tr>
</thead>
<tbody>
<%= render :partial => 'asset_category', :collection => @asset_categories %>
</tbody>
</table>
<div id="form"><%= render :partial => "form" %></div>

View File

@ -0,0 +1 @@
$("#form > form").replaceWith("<%= j render "form" %>");

View File

@ -0,0 +1,4 @@
$("#<%= dom_id @asset_category %>").replaceWith("<%= j render :partial => 'asset_category', :collection => [@asset_category] %>");
<% @asset_category = AssetCategory.new(:display => 'List') # reset for new form %>
$(".edit_asset_category").replaceWith("<%= j render "form" %>")
$(".new_asset_category")[0].reset();

View File

@ -1,17 +1,16 @@
<tr id="asset_<%= asset.id %>" class="have"> <tr id="asset_<%= asset.id %>" class="with_action">
<td><%= asset.id %></td> <td><%= check_box_tag 'to_delete[]', asset.id, false, :class => "checkbox_in_list" %></td>
<td><div class="assets_pic"><%= image_tag(asset.data.url) %></div> <td>
<%#= link_to asset.filename, asset.data.url, :target => '_blank' %> <div class="assets_pic"><%= image_tag(asset.data.url) %></div>
<div class="quick-edit">
<ul class="nav nav-pills hide">
<li><%= link_to t(:edit), edit_admin_asset_path(asset), :remote => true, :class => 'edit' %></li>
<li class="dropdown"><%= link_to t(:delete), admin_asset_path(asset), :confirm => t('sure?'), :method => :delete, :class => 'delete' %></li>
</ul>
</div>
</td> </td>
<td><%= asset.description %></td> <td><%= asset.description %></td>
<td><%= asset.data.file.content_type %></td> <td><%= asset.data.file.content_type %></td>
<td><%= asset.data_identifier %></td> <td><%= asset.data_identifier %></td>
<td><%= number_to_human_size(asset.data.file.file_length) %></td> <td><%= number_to_human_size(asset.data.file.file_length) %></td>
<td class="action">
<%= link_to t(:edit), edit_admin_asset_path(asset), :remote => true, :class => 'edit' %>
<%= link_to t(:delete), admin_asset_path(asset), :confirm => t('sure?'), :method => :delete, :remote => true, :class => 'delete' %>
</td>
</tr>
<tr>
<td colspan="6"></td>
</tr> </tr>

View File

@ -9,7 +9,7 @@
<%= link_back %> <%= link_back %>
<%= f.submit t(:edit) %> <%= f.submit t(:edit) %>
<% else %> <% else %>
<a id='ajax_form_submit'><%= t(:edit) %></a> <a id='ajax_form_submit'><%= t(:update) %></a>
<% end %> <% end %>
</div> </div>
<% end %> <% end %>

View File

@ -0,0 +1,11 @@
<div id='filter' class="subnav">
<div class="filters">
<div id="sort_headers" class="table-label">
<%= render 'sort_headers' %>
</div>
</div>
</div>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "sort_header" %>
<% end %>

View File

@ -8,6 +8,11 @@
<%= f.text_field :description, :class => 'text' %> <%= f.text_field :description, :class => 'text' %>
</p> </p>
<p>
<%= f.label :category %>
<%= f.select :asset_category_id, @asset_categories.collect{|t| [ t.i18n_variable[I18n.locale], t.id ]}, {}, :class => "input-medium" %>
</p>
<p> <p>
<%= f.label :data, t('admin.data'), :class => 'file' %> <%= f.label :data, t('admin.data'), :class => 'file' %>
<%= f.file_field :data %> <%= f.file_field :data %>

View File

@ -0,0 +1,5 @@
<%= 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 %>

View File

@ -1,32 +1,31 @@
<% content_for :secondary do %> <%= form_for :assets, :url => delete_admin_assets_path(:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]), :html => {:id => 'delete_all'}, :remote => true do %>
<div class="assets_setup"> <%= render 'filter' %>
<ul class="list"> <table id="asset_sort_list" class="table main-list">
<li><%= link_to t(:new_asset, :scope => :admin), new_admin_asset_path, :remote => true, :class => 'button positive' %></li>
<li><%= link_to t('admin.assets.file'), '', :remote => true, :class => 'button positive' %></li>
<li><%= link_to t('admin.assets.album'), '', :remote => true, :class => 'button positive'%></li>
<li><%= link_to t('admin.assets.video'), '', :remote => true, :class => 'button positive' %></li>
<li><%= link_to t('admin.assets.book'), '', :remote => true, :class => 'button positive' %></li>
</ul>
</div>
<% end -%>
<div class="main2">
<h1><%= t('admin.list_assets') %></h1>
<table>
<thead> <thead>
<tr> <tr>
<td><%= t('admin.id') %></th> <th class="span1"></th>
<td><%= t('admin.file_name') %></th> <th class="span1-2"></th>
<td><%= t('admin.description') %></th> <th class="span1-2"></th>
<td><%= t('admin.format') %></th> <th class="span1-2"></th>
<td><%= t('admin.orig_upload_file') %></th> <th class="span1-2"></th>
<td><%= t('admin.file_size') %></th> <th class="span1-2"></th>
<td><%= t('admin.action') %></th>
</tr> </tr>
</thead> </thead>
<tbody id='asset_tbody'> <tbody id="tbody_assets" class="sort-holder">
<%= render :partial => 'asset', :collection => @assets %> <%= render :partial => 'asset', :collection => @assets %>
<tbody> </tbody>
</table> </table>
<% end %>
<div class="form-actions form-fixed pagination-right">
<%= 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' %>
<div id="asset_pagination" class="paginationFixed">
<%= paginate @assets, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]} %>
</div>
</div> </div>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "/static/jquery.cycle.all.latest.js" %>
<%= javascript_include_tag "inc/modal-preview" %>
<% end %>

View File

@ -24,6 +24,9 @@ Orbit::Application.configure do
config.action_dispatch.best_standards_support = :builtin config.action_dispatch.best_standards_support = :builtin
config.assets.debug = true
# config.middleware.use ExceptionNotifier, # config.middleware.use ExceptionNotifier,
# :email_prefix => "[R4_error]", # :email_prefix => "[R4_error]",
# :sender_address => %{"notifier" <redmine@rulingcom.com>}, # :sender_address => %{"notifier" <redmine@rulingcom.com>},

View File

@ -13,7 +13,12 @@ Orbit::Application.routes.draw do
# routes for admin # routes for admin
namespace :admin do namespace :admin do
mount Resque::Server.new, :at => "/resque" mount Resque::Server.new, :at => "/resque"
resources :assets resources :assets do
collection do
post 'delete'
end
end
resources :asset_categories
resources :app_auths resources :app_auths
resources :object_auths do resources :object_auths do
match 'new_interface/:ob_type/:title/new' => "object_auths_new_interface#new" ,:as => :init_ob_auth,:via => :get match 'new_interface/:ob_type/:title/new' => "object_auths_new_interface#new" ,:as => :init_ob_auth,:via => :get

View File

@ -50,13 +50,13 @@
<div class="control-group"> <div class="control-group">
<label class="control-label">Start</label> <label class="control-label">Start</label>
<div class="controls"> <div class="controls">
<%= f.date_select :postdate, {:use_month_numbers => true, :order => [:day, :month, :year] }, {:class => 'input-small'} %> <%= f.datetime_select :postdate, {:use_month_numbers => true, :order => [:day, :month, :year] }, {:class => 'input-small'} %>
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label class="control-label">End</label> <label class="control-label">End</label>
<div class="controls"> <div class="controls">
<%= f.date_select :deadline, {:use_month_numbers => true, :prompt => { :month => 'Month', :day => 'Day', :year => 'Year'}, :order => [:day, :month, :year] }, {:class => 'input-small'} %> <%= f.datetime_select :deadline, {:use_month_numbers => true, :prompt => { :month => 'Month', :day => 'Day', :year => 'Year'}, :order => [:day, :month, :year] }, {:class => 'input-small'} %>
</div> </div>
</div> </div>
</div> </div>