Add folders to the documents plugin
This commit is contained in:
parent
611a29fe2d
commit
dc94e98138
19 changed files with 141 additions and 71 deletions
|
|
@ -6,39 +6,41 @@ class DocumentsController < ApplicationController
|
|||
def index
|
||||
if params["sort"]
|
||||
sort = case params["sort"]
|
||||
when "name" then "name"
|
||||
when "name" then "data IS NULL DESC, name"
|
||||
when "created_at" then "created_at"
|
||||
when "name_reverse" then "name DESC"
|
||||
when "name_reverse" then "data IS NULL, name DESC"
|
||||
when "created_at_reverse" then "created_at DESC"
|
||||
end
|
||||
else
|
||||
sort = "name"
|
||||
sort = "data IS NULL DESC, name"
|
||||
end
|
||||
|
||||
@documents = Document.page(params[:page]).per(@per_page).order(sort)
|
||||
@documents = Document.where(parent: @document).page(params[:page]).per(@per_page).order(sort)
|
||||
end
|
||||
|
||||
def new
|
||||
@document = Document.new
|
||||
@document = Document.new parent_id: params[:document_id]
|
||||
@document.mime = '' unless params[:type] == 'folder'
|
||||
end
|
||||
|
||||
def create
|
||||
@document = Document.new
|
||||
@document.data = params[:document][:data].read
|
||||
@document.mime = FileMagic.new(FileMagic::MAGIC_MIME).buffer(@document.data)
|
||||
raise t('.not_allowed_mime', mime: @document.mime) unless allowed_mime? @document.mime
|
||||
if params[:document][:name] == ''
|
||||
name = params[:document][:data].original_filename
|
||||
name = File.basename(name)
|
||||
@document.name = name.gsub(/[^\w\.\-]/, '_')
|
||||
else
|
||||
@document.name = params[:document][:name]
|
||||
@document = Document.new name: params[:document][:name]
|
||||
@document.parent = Document.find_by_id(params[:document][:parent_id])
|
||||
data = params[:document][:data]
|
||||
if data
|
||||
@document.data = data.read
|
||||
@document.mime = FileMagic.new(FileMagic::MAGIC_MIME).buffer(@document.data)
|
||||
raise t('.not_allowed_mime', mime: @document.mime) unless allowed_mime? @document.mime
|
||||
if @document.name.empty?
|
||||
name = File.basename(data.original_filename)
|
||||
@document.name = name.gsub(/[^\w\.\-]/, '_')
|
||||
end
|
||||
end
|
||||
@document.created_by = current_user
|
||||
@document.save!
|
||||
redirect_to documents_path, notice: t('.notice')
|
||||
redirect_to @document.parent || documents_path, notice: t('.notice')
|
||||
rescue => error
|
||||
redirect_to documents_path, alert: t('.error', error: error.message)
|
||||
redirect_to @document.parent || documents_path, alert: t('.error', error: error.message)
|
||||
end
|
||||
|
||||
def destroy
|
||||
|
|
@ -55,7 +57,12 @@ class DocumentsController < ApplicationController
|
|||
|
||||
def show
|
||||
@document = Document.find(params[:id])
|
||||
send_data(@document.data, filename: @document.filename, type: @document.mime)
|
||||
if @document.file?
|
||||
send_data(@document.data, filename: @document.filename, type: @document.mime)
|
||||
else
|
||||
index
|
||||
render :index
|
||||
end
|
||||
end
|
||||
|
||||
def allowed_mime?(mime)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,17 @@
|
|||
class Document < ActiveRecord::Base
|
||||
belongs_to :created_by, :class_name => 'User', :foreign_key => 'created_by_user_id'
|
||||
include ActsAsTree
|
||||
|
||||
validates_presence_of :data
|
||||
belongs_to :created_by, class_name: 'User', foreign_key: 'created_by_user_id'
|
||||
|
||||
acts_as_tree
|
||||
|
||||
def file?
|
||||
!folder?
|
||||
end
|
||||
|
||||
def folder?
|
||||
mime.nil?
|
||||
end
|
||||
|
||||
def filename
|
||||
types = MIME::Types[mime]
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
%tbody
|
||||
- for document in @documents
|
||||
%tr
|
||||
%td= link_to document.name, document
|
||||
%td= link_to document.name, document, class: "documents-item-#{document.folder? ? 'folder' : 'file'}"
|
||||
%td= format_time(document.created_at)
|
||||
%td= h show_user(document.created_by)
|
||||
%td
|
||||
|
|
|
|||
12
plugins/documents/app/views/documents/_form.html.haml
Normal file
12
plugins/documents/app/views/documents/_form.html.haml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
= simple_form_for @document, validate: true do |f|
|
||||
= f.hidden_field :parent_id
|
||||
.modal-header
|
||||
= close_button :modal
|
||||
%h3= @document.folder? ? t('.new_folder') : t('.new')
|
||||
.modal-body
|
||||
= f.input :name, as: :string, required: @document.folder?
|
||||
- if @document.file?
|
||||
= f.input :data, as: :file, required: true
|
||||
.modal-footer
|
||||
= link_to t('ui.close'), '#', class: 'btn', data: {dismiss: 'modal'}
|
||||
= f.submit t('.submit'), class: 'btn btn-primary'
|
||||
|
|
@ -1,7 +1,21 @@
|
|||
- title t('.title')
|
||||
|
||||
- content_for :actionbar do
|
||||
= link_to t('.new'), new_document_path, class: 'btn btn-primary'
|
||||
- options = { document_id: @document || 0 }
|
||||
= link_to t('.new_folder'), document_new_path(options.merge(type: :folder)), remote: true, class: 'btn'
|
||||
= link_to t('.new'), document_new_path(options), remote: true, class: 'btn btn-primary'
|
||||
|
||||
- if @document
|
||||
%ul.breadcrumb
|
||||
%li
|
||||
= link_to t('.title'), documents_path
|
||||
%span.divider /
|
||||
- for parent_folder in @document.ancestors.reverse
|
||||
%li
|
||||
= link_to parent_folder.name, parent_folder
|
||||
%span.divider /
|
||||
%li.active
|
||||
= @document.name
|
||||
|
||||
#documentsTable
|
||||
= render :partial => "documents"
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
- title t('.title')
|
||||
|
||||
= simple_form_for(@document) do |f|
|
||||
= f.input :name, as: :string
|
||||
= f.input :data, as: :file
|
||||
.form-actions
|
||||
= f.submit class: 'btn'
|
||||
= link_to t('ui.or_cancel'), :back
|
||||
2
plugins/documents/app/views/documents/new.js.haml
Normal file
2
plugins/documents/app/views/documents/new.js.haml
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
$('#modalContainer').html('#{j(render("form"))}');
|
||||
$('#modalContainer').modal();
|
||||
Loading…
Add table
Add a link
Reference in a new issue