diff --git a/app/assets/javascripts/admin/filemanager.js b/app/assets/javascripts/admin/filemanager.js
new file mode 100644
index 0000000..1e2e9e8
--- /dev/null
+++ b/app/assets/javascripts/admin/filemanager.js
@@ -0,0 +1,141 @@
+!function ($) {
+ $.fn.checkListLength = function (param){
+ _defaultSettings = {
+ onlyOne: null,
+ };
+ _set = $.extend(_defaultSettings, param);
+ $this = this;
+ $li = this.children('li');
+ $dropzone = $('#dropzone');
+ if(($li.length - _set.onlyOne) == 0) {
+ $('#dropzone').fadeIn(300);
+ } else {
+ $('#dropzone').fadeOut(300);
+ };
+ $('#file-list').nanoScroller({ scrollTop: 0, iOSNativeScrolling: true });
+ }
+}(window.jQuery);
+$(function () {
+ 'use strict';
+ // Initialize the jQuery File Upload widget:
+ $('#fileupload').fileupload({
+ maxFileSize: 5000000,
+ acceptFileTypes: /(\.|\/)(gif|jpe?g|png|pdf|doc|docx|ppt|pptx|xls|xlsx)$/i,
+ dropZone: $('#dropzone'),
+ headers:{
+ 'X-CSRF-Token': $('meta[name="csrf-token"]').attr("content")
+ }
+ }).bind('fileuploadstop', function (e, data) {
+ window.location.reload();
+ });
+});
+$(document).ready(function(){
+ var insertBtn = $("#insert_btn"),
+ deleteBtn = $("#delete_btn"),
+ url = null;
+
+ var showPreview = function(elem){
+ var type = $("#ext_" + elem.val()).val(),
+ imgexp = new RegExp(/(\.|\/)(gif|jpe?g|png)$/i),
+ otherexp = new RegExp(/(\.|\/)(pdf|doc|docx|ppt|pptx|xls|xlsx)$/i)
+ img = $(""),
+ preview = $( ".preview-area" );
+ preview.text("Preview is loading...");
+ if( imgexp.test(type) ){
+ var url = $("#url_" + elem.val()).val();
+ img.attr("src",url).load(function(){
+ var ratio = this.width / this.height,
+ targetWidth = targetHeight = 200;
+ if( ratio < 1 ){
+ targetWidth = targetHeight * ratio;
+ }else{
+ targetHeight = targetWidth / ratio;
+ }
+ img.height(targetHeight).width(targetWidth);
+ preview.html(img);
+ })
+ }else if( otherexp.test(type) ) {
+ var t = type.replace(".",""),
+ url = "/assets/ft-icons/" + t + "/" + t + "-128_32.png";
+ img.attr('src', url).load(function(){
+ preview.html(img);
+ });
+ }else{
+ preview.html("Preview not available.");
+ }
+ }
+
+ $("#asset_sort_list").on(clickEvent,"input[type=checkbox]",function(){
+ if($("#asset_sort_list input[type=checkbox]:checked").length == 1){
+ url = window.location.protocol + "//" + window.location.host + $("#url_" + $("input[type=checkbox]:checked").val()).val();
+ insertBtn.show();
+ showPreview($("input[type=checkbox]:checked"))
+ }else{
+ insertBtn.hide();
+ url = null;
+ $( ".preview-area" ).empty();
+ }
+ if($("#asset_sort_list input[type=checkbox]:checked").length)
+ deleteBtn.show();
+ else
+ deleteBtn.hide();
+ })
+ insertBtn.bind(clickEvent,function(){
+ var alt_text = $("#"+language+"_desc_"+$("input[type=checkbox]:checked").val()).val();
+ alt_text = (alt_text ? alt_text : "This is an image");
+ if(url){
+ window.opener.CKEDITOR.tools.callFunction( funcNum, url, function() {
+ var element,
+ dialog = this.getDialog();
+ if ( dialog.getName() == 'image' ) {
+ element = dialog.getContentElement( 'info', 'txtAlt' );
+ if ( element )
+ element.setValue( alt_text );
+ }
+ });
+ window.close();
+ }
+ })
+ deleteBtn.bind( clickEvent,function(){
+ var items_to_delete = [],
+ type = getUrlParam("type");
+ $("input[type=checkbox]:checked").each(function(){
+ items_to_delete.push($(this).val());
+ })
+ $.post("/admin/assets/delete_files",{"files":items_to_delete,"type":type},function(){
+ deleteBtn.hide();
+ })
+ })
+ var currentEdit = null;
+ $(document).on("ajax:success","form[data-remote=true]",function(evt, data, xhr){
+ if(currentEdit){
+ currentEdit.replaceWith($(data));
+ $("#editform").modal("hide");
+ }
+ })
+
+ $("#asset_sort_list").on(clickEvent,".editform",function(){
+ currentEdit = $(this).parent().parent();
+ $.get($(this).attr("href"),function(data){
+ $("#editform").html(data).modal("show");
+ })
+ return false;
+ })
+
+ $("#editform").on("hidden",function(){
+ currentEdit = null;
+ })
+
+ function getUrlParam( paramName ) {
+ var reParam = new RegExp( '(?:[\?&]|&)' + paramName + '=([^&]+)', 'i' ) ;
+ var match = window.location.search.match(reParam) ;
+
+ return ( match && match.length > 1 ) ? match[ 1 ] : null ;
+ }
+ var funcNum = getUrlParam( 'CKEditorFuncNum' ),
+ t = getUrlParam('CKEditor').split("_"),
+ language = t[t.length-1];
+
+ language = (language == "tw" ? "zh_tw" : language);
+
+})
\ No newline at end of file
diff --git a/app/assets/javascripts/ckeditor/config.js.erb b/app/assets/javascripts/ckeditor/config.js.erb
index 1fe6b38..3c23e9e 100644
--- a/app/assets/javascripts/ckeditor/config.js.erb
+++ b/app/assets/javascripts/ckeditor/config.js.erb
@@ -25,10 +25,9 @@ CKEDITOR.editorConfig = function( config ) {
// config.filebrowserBrowseUrl = '/browser/browse.php';
// config.filebrowserImageBrowseUrl = '/browser/browse.php?type=Images';
// config.filebrowserUploadUrl = '/uploader/upload.php';
-
- config.filebrowserBrowseUrl = "<%= Rails.application.routes.url_helpers.admin_assets_path(:module_app_id=>ModuleApp.where(:key=>'asset').first.id) rescue '' %>";
- config.filebrowserImageBrowseUrl = "<%= Rails.application.routes.url_helpers.admin_assets_path(:type=>'image',:module_app_id=>ModuleApp.where(:key=>'asset').first.id) rescue '' %>";
- // config.filebrowserUploadUrl = "<%#= Rails.application.routes.url_helpers.file_upload_admin_assets_path %>";
+
+ config.filebrowserBrowseUrl = "<%= Rails.application.routes.url_helpers.admin_assets_path %>";
+ config.filebrowserImageBrowseUrl = "<%= Rails.application.routes.url_helpers.admin_assets_path %>";
// config.contentsCss = '/orbit_4.0.1/assets/javascripts/lib/ckeditor/plugins/stylesheetparser/samples/assets/sample.css';
diff --git a/app/assets/stylesheets/lib/filemanager.css b/app/assets/stylesheets/lib/filemanager.css
index 1240e4d..a3bd1c2 100644
--- a/app/assets/stylesheets/lib/filemanager.css
+++ b/app/assets/stylesheets/lib/filemanager.css
@@ -2,7 +2,7 @@ body > section {
padding: 20px;
}
#panel_l {
- width: 80%;
+ width: 75%;
}
#panel_l .control-label {
margin-right: 10px;
@@ -11,7 +11,7 @@ body > section {
margin-left: 0;
}
#panel_r {
- width: 18%;
+ width: 23%;
padding-left: 2%;
}
#panel_r .control-label {
@@ -30,7 +30,7 @@ body > section {
width: auto;
}
#filemanager .preview-area {
- margin-bottom: 0;
+ margin-bottom: 40px;
text-align: center;
}
#editform .edit_asset {
diff --git a/app/controllers/admin/assets_controller.rb b/app/controllers/admin/assets_controller.rb
new file mode 100644
index 0000000..7b3f632
--- /dev/null
+++ b/app/controllers/admin/assets_controller.rb
@@ -0,0 +1,66 @@
+class Admin::AssetsController < OrbitAdminController
+
+ def index
+ @assets = current_user.assets
+ @assets = @assets.page(params[:page]).per(10)
+ render :layout => "assets"
+ end
+
+ def new
+
+ end
+
+ def create
+
+ end
+
+ def edit
+ @asset = Asset.find(params[:id])
+ render layout: false
+ end
+
+ def update
+ @asset = Asset.find(params[:id])
+ @asset.update_attributes(asset_params)
+ if asset_params['data'].blank?
+ render layout: false
+ else
+ redirect_to admin_assets_path
+ end
+ end
+
+ def destroy
+
+ end
+
+ def delete
+
+ end
+
+ def delete_files
+ Asset.where(:id.in=>params[:files]).destroy
+ @assets = current_user.assets.page(params[:page]).per(10)
+ end
+
+ def file_upload
+ @files = params['files']
+ a = Array.new
+ @files.each do |file|
+ @asset = current_user.assets.new
+ @asset.data = file
+ @asset.title_translations = {:en => file.original_filename, :zh_tw => file.original_filename}
+ @asset.save!
+ a << {"url"=>@asset.data.url}
+ end
+ render :json=>{"files"=>a}.to_json
+ end
+
+ def file_select
+
+ end
+
+ def asset_params
+ params.require(:asset).permit! unless params[:asset].blank?
+ end
+
+end
\ No newline at end of file
diff --git a/app/helpers/orbit_backend_helper.rb b/app/helpers/orbit_backend_helper.rb
index 66ad114..a73884b 100644
--- a/app/helpers/orbit_backend_helper.rb
+++ b/app/helpers/orbit_backend_helper.rb
@@ -118,7 +118,7 @@ module OrbitBackendHelper
visits = Impression.where( created_at: {
'$gte' => Time.now.beginning_of_day-i.days,
'$lte' => Time.now.end_of_day-i.days}
- ).count
+ ).distinct(:request_hash).count
result.push([ Time.now.beginning_of_day-i.days, visits])
end
diff --git a/app/models/asset.rb b/app/models/asset.rb
new file mode 100644
index 0000000..2a1c18e
--- /dev/null
+++ b/app/models/asset.rb
@@ -0,0 +1,24 @@
+class Asset
+ include Mongoid::Document
+ include Mongoid::Timestamps
+
+ mount_uploader :data, AssetUploader
+
+ field :filename
+ field :description, localize: true
+ field :title, localize: true
+
+ delegate :url, :current_path, :size, :content_type, :filename, :to => :data
+
+ belongs_to :user
+
+ validates_presence_of :data
+
+ def content_type
+ data.file.content_type
+ end
+
+ def file_size
+ data.file.size
+ end
+end
diff --git a/app/models/ckeditor/asset.rb b/app/models/ckeditor/asset.rb
deleted file mode 100644
index 74f193e..0000000
--- a/app/models/ckeditor/asset.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-class Ckeditor::Asset
- include Ckeditor::Orm::Mongoid::AssetBase
-
- delegate :url, :current_path, :size, :content_type, :filename, :to => :data
-
- validates_presence_of :data
-end
diff --git a/app/models/ckeditor/attachment_file.rb b/app/models/ckeditor/attachment_file.rb
deleted file mode 100644
index 43a3872..0000000
--- a/app/models/ckeditor/attachment_file.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-class Ckeditor::AttachmentFile < Ckeditor::Asset
- mount_uploader :data, CkeditorAttachmentFileUploader, :mount_on => :data_file_name
-
- def url_thumb
- @url_thumb ||= Ckeditor::Utils.filethumb(filename)
- end
-end
diff --git a/app/models/ckeditor/picture.rb b/app/models/ckeditor/picture.rb
deleted file mode 100644
index 74f6da4..0000000
--- a/app/models/ckeditor/picture.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-class Ckeditor::Picture < Ckeditor::Asset
- mount_uploader :data, CkeditorPictureUploader, :mount_on => :data_file_name
-
- def url_content
- url(:content)
- end
-end
diff --git a/app/models/user.rb b/app/models/user.rb
index 8ed34c4..0a8e9d5 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -9,6 +9,7 @@ class User
field :password_digest, type: String
field :confirmation_token, type: String
field :reset_token, type: String
+ has_many :assets
index({ confirmation_token: 1}, { unique: true })
diff --git a/app/views/admin/assets/_asset.html.erb b/app/views/admin/assets/_asset.html.erb
new file mode 100644
index 0000000..36f1819
--- /dev/null
+++ b/app/views/admin/assets/_asset.html.erb
@@ -0,0 +1,17 @@
+