summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Kozak <spag@golwen.net>2013-04-11 10:51:28 +0200
committerPeter Kozak <spag@golwen.net>2013-04-11 10:51:28 +0200
commit78ea4bcd397a4d8f39ad3c08066fe918a8fc89ad (patch)
treea22d63d7fcaa2c2c32d2905424777a1ff1a8a21d
parent145d774adece71282020603b699ab684537cc1b3 (diff)
file uploader
-rw-r--r--app/controllers/generic_files_controller.rb64
-rw-r--r--app/helpers/generic_files_helper.rb2
-rw-r--r--app/models/generic_file.rb44
-rw-r--r--app/uploaders/generic_file_uploader.rb18
-rw-r--r--app/views/generic_files/_form.html.haml7
-rw-r--r--app/views/generic_files/_form_core.html.haml7
-rw-r--r--app/views/generic_files/_index_core.html.haml14
-rw-r--r--app/views/generic_files/edit.html.haml3
-rw-r--r--app/views/generic_files/index.html.haml6
-rw-r--r--app/views/generic_files/new.html.haml3
-rw-r--r--app/views/generic_files/show.html.haml20
-rw-r--r--config/locales/views/generic_files/de.yml65
-rw-r--r--config/locales/views/generic_files/en.yml65
-rw-r--r--db/migrate/20130410123523_create_generic_files.rb17
-rw-r--r--test/functional/generic_files_controller_test.rb49
-rw-r--r--test/unit/generic_file_test.rb7
16 files changed, 391 insertions, 0 deletions
diff --git a/app/controllers/generic_files_controller.rb b/app/controllers/generic_files_controller.rb
new file mode 100644
index 0000000..b7dc453
--- /dev/null
+++ b/app/controllers/generic_files_controller.rb
@@ -0,0 +1,64 @@
+class GenericFilesController < ApplicationController
+
+ load_resource :sip_account
+ load_resource :conference
+ load_resource :hunt_group
+ load_resource :automatic_call_distributor
+ load_resource :user
+ load_resource :tenant
+ load_resource :generic_file
+
+ load_and_authorize_resource :generic_file, :through => [:sip_account, :conference, :hunt_group, :automatic_call_distributor, :user, :tenant]
+
+ before_filter :set_and_authorize_parent
+
+ def index
+ @generic_files = @parent.generic_files
+ end
+
+ def show
+
+ end
+
+ def new
+ @generic_file = @parent.generic_files.build()
+ end
+
+ def create
+ @generic_file = @parent.generic_files.new(params[:generic_file])
+ if @generic_file.save
+ m = method( :"#{@parent.class.name.underscore}_generic_files_url" )
+ redirect_to m.( @parent ), :notice => t('generic_files.controller.successfuly_created')
+ else
+ render :new
+ end
+ end
+
+ def edit
+ @generic_file = GenericFile.find(params[:id])
+ end
+
+ def update
+ @generic_file = GenericFile.find(params[:id])
+ if @generic_file.update_attributes(params[:generic_file])
+ m = method( :"#{@parent.class.name.underscore}_generic_files_url" )
+ redirect_to m.( @parent ), :notice => t('generic_files.controller.successfuly_updated')
+ else
+ render :edit
+ end
+ end
+
+ def destroy
+ @generic_file = GenericFile.find(params[:id])
+ @generic_file.destroy
+ m = method( :"#{@parent.class.name.underscore}_generic_files_url" )
+ redirect_to m.( @parent ), :notice => t('generic_files.controller.successfuly_destroyed')
+ end
+
+ private
+ def set_and_authorize_parent
+ @parent = @sip_account || @conference || @hunt_group || @automatic_call_distributor || @user || @tenant
+
+ authorize! :read, @parent
+ end
+end
diff --git a/app/helpers/generic_files_helper.rb b/app/helpers/generic_files_helper.rb
new file mode 100644
index 0000000..6e067ed
--- /dev/null
+++ b/app/helpers/generic_files_helper.rb
@@ -0,0 +1,2 @@
+module GenericFilesHelper
+end
diff --git a/app/models/generic_file.rb b/app/models/generic_file.rb
new file mode 100644
index 0000000..b6b3ede
--- /dev/null
+++ b/app/models/generic_file.rb
@@ -0,0 +1,44 @@
+class GenericFile < ActiveRecord::Base
+ FILE_TYPES = %w(pdf ps jpg gif png tif wav mp3)
+ CATEGORIES = %w(file document image greeting recording)
+
+ attr_accessible :name, :file, :file_type, :category, :owner_id, :owner_type
+
+ mount_uploader :file, GenericFileUploader
+
+ belongs_to :owner, :polymorphic => true
+
+ before_save :determine_file_type
+
+ def store_dir
+ "/var/opt/gemeinschaft/generic_files/#{self.id.to_i}"
+ end
+
+ def mime_type
+ return GenericFile.mime_type(self.file.to_s)
+ end
+
+ def self.mime_type(file_name)
+ mime_type = `file -b --mime-type "#{file_name}"`.strip
+ if mime_type.blank?
+ mime_type = MIME::Types.type_for(file_name).first.to_s
+ end
+
+ return mime_type
+ end
+
+ def file_size
+ if self.file
+ return File.size(self.file.to_s)
+ else
+ return 0
+ end
+ end
+
+ private
+ def determine_file_type
+ if self.file_changed?
+ self.file_type = self.mime_type
+ end
+ end
+end
diff --git a/app/uploaders/generic_file_uploader.rb b/app/uploaders/generic_file_uploader.rb
new file mode 100644
index 0000000..4a226ed
--- /dev/null
+++ b/app/uploaders/generic_file_uploader.rb
@@ -0,0 +1,18 @@
+# encoding: utf-8
+
+class GenericFileUploader < CarrierWave::Uploader::Base
+
+ storage :file
+
+ def store_dir
+ model.store_dir
+ end
+
+ def cache_dir
+ '/tmp/generic_file_uploader'
+ end
+
+ def extension_white_list
+ %w(pdf ps jpg jpeg gif png tif tiff wav mp3)
+ end
+end
diff --git a/app/views/generic_files/_form.html.haml b/app/views/generic_files/_form.html.haml
new file mode 100644
index 0000000..8912daa
--- /dev/null
+++ b/app/views/generic_files/_form.html.haml
@@ -0,0 +1,7 @@
+= simple_form_for([@parent, @generic_file]) do |f|
+ = f.error_notification
+
+ = render "form_core", :f => f
+
+ .form-actions
+ = f.button :submit, conditional_t('generic_files.form.submit')
diff --git a/app/views/generic_files/_form_core.html.haml b/app/views/generic_files/_form_core.html.haml
new file mode 100644
index 0000000..b0e8889
--- /dev/null
+++ b/app/views/generic_files/_form_core.html.haml
@@ -0,0 +1,7 @@
+.inputs
+ - if @generic_file.new_record?
+ = f.input :file, :label => t('generic_files.form.file.label'), :hint => conditional_hint('generic_files.form.file.hint')
+ - else
+ = f.input :file_type, :label => t('generic_files.form.file_type.label'), :hint => conditional_hint('generic_files.form.file_type.hint'), :disabled => true
+ = f.input :name, :label => t('generic_files.form.name.label'), :hint => conditional_hint('generic_files.form.name.hint')
+ = f.input :category, :label => t('generic_files.form.category.label'), :collection => GenericFile::CATEGORIES, :hint => conditional_hint('generic_files.form.category.hint'), :include_blank => false
diff --git a/app/views/generic_files/_index_core.html.haml b/app/views/generic_files/_index_core.html.haml
new file mode 100644
index 0000000..5fa66f7
--- /dev/null
+++ b/app/views/generic_files/_index_core.html.haml
@@ -0,0 +1,14 @@
+%table.table.table-striped
+ %tr
+ %th= t('generic_files.index.category')
+ %th= t('generic_files.index.name')
+ %th= t('generic_files.index.file_type')
+
+ - for generic_file in generic_files
+ %tr
+ %td= generic_file.category
+ %td= generic_file.name
+ %td= generic_file.file_type
+
+
+ =render :partial => 'shared/index_view_edit_destroy_part', :locals => {:parent => generic_file.owner, :child => generic_file} \ No newline at end of file
diff --git a/app/views/generic_files/edit.html.haml b/app/views/generic_files/edit.html.haml
new file mode 100644
index 0000000..b59dd2b
--- /dev/null
+++ b/app/views/generic_files/edit.html.haml
@@ -0,0 +1,3 @@
+- content_for :title, t("generic_files.edit.page_title")
+
+= render "form" \ No newline at end of file
diff --git a/app/views/generic_files/index.html.haml b/app/views/generic_files/index.html.haml
new file mode 100644
index 0000000..b3c489e
--- /dev/null
+++ b/app/views/generic_files/index.html.haml
@@ -0,0 +1,6 @@
+- content_for :title, t("generic_files.index.page_title")
+
+- if @generic_files && @generic_files.count > 0
+ = render "index_core", :generic_files => @generic_files
+
+= render :partial => 'shared/create_link', :locals => {:parent => @parent, :child_class => GenericFile} \ No newline at end of file
diff --git a/app/views/generic_files/new.html.haml b/app/views/generic_files/new.html.haml
new file mode 100644
index 0000000..05af0da
--- /dev/null
+++ b/app/views/generic_files/new.html.haml
@@ -0,0 +1,3 @@
+- content_for :title, t("generic_files.new.page_title")
+
+= render "form" \ No newline at end of file
diff --git a/app/views/generic_files/show.html.haml b/app/views/generic_files/show.html.haml
new file mode 100644
index 0000000..b375dfc
--- /dev/null
+++ b/app/views/generic_files/show.html.haml
@@ -0,0 +1,20 @@
+- content_for :title, t("generic_files.show.page_title")
+
+%p
+ %strong= t('generic_files.show.category') + ":"
+ = @generic_file.category
+
+%p
+ %strong= t('generic_files.show.name') + ":"
+ = @generic_file.name
+
+%p
+ %strong= t('generic_files.show.file_type') + ":"
+ = @generic_file.file_type
+
+%p
+ %strong= t('generic_files.show.file_size') + ":"
+ = number_to_human_size(@generic_file.file_size)
+
+
+= render :partial => 'shared/show_edit_destroy_part', :locals => { :parent => @parent, :child => @generic_file } \ No newline at end of file
diff --git a/config/locales/views/generic_files/de.yml b/config/locales/views/generic_files/de.yml
new file mode 100644
index 0000000..4bef46e
--- /dev/null
+++ b/config/locales/views/generic_files/de.yml
@@ -0,0 +1,65 @@
+de:
+ generic_files:
+ name: 'Genericfile'
+ controller:
+ successfuly_created: 'Genericfile wurde angelegt.'
+ successfuly_updated: 'Genericfile wurde aktualisiert.'
+ successfuly_destroyed: 'Genericfile wurde gelöscht.'
+ index:
+ page_title: 'Übersicht von Genericfile'
+ name: 'Name'
+ file: 'File'
+ file_type: 'File type'
+ category: 'Category'
+ owner_id: 'Owner'
+ owner_type: 'Owner type'
+ actions:
+ confirm_destroy: 'Sind Sie sicher, dass Sie folgendes löschen möchten: Genericfile'
+ destroy: 'Löschen'
+ edit: 'Bearbeiten'
+ show: 'Anzeigen'
+ create: 'Neu anlegen'
+ create_for: 'Genericfile neu anlegen für %{resource}'
+ show:
+ page_title: 'Genericfile bearbeiten'
+ name: 'Name'
+ file: 'File'
+ file_type: 'File type'
+ category: 'Category'
+ owner_id: 'Owner'
+ owner_type: 'Owner type'
+ actions:
+ confirm_destroy: 'Sind Sie sicher, dass die dieses Element löschen möchten?'
+ destroy: 'Löschen'
+ edit: 'Bearbeiten'
+ view_all: 'Alle anzeigen'
+ new:
+ page_title: 'Genericfile neu anlegen'
+ actions:
+ back_to_list: 'Zurück zur Übersicht'
+ edit:
+ page_title: 'Genericfile bearbeiten'
+ actions:
+ back_to_list: 'Zurück zur Übersicht'
+ edit: 'Bearbeiten'
+ view_all: 'Alle anzeigen'
+ form:
+ name:
+ label: 'Name'
+ hint: ''
+ file:
+ label: 'File'
+ hint: ''
+ file_type:
+ label: 'File type'
+ hint: ''
+ category:
+ label: 'Category'
+ hint: ''
+ owner_id:
+ label: 'Owner'
+ hint: ''
+ owner_type:
+ label: 'Owner type'
+ hint: ''
+ submit: 'Absenden' \ No newline at end of file
diff --git a/config/locales/views/generic_files/en.yml b/config/locales/views/generic_files/en.yml
new file mode 100644
index 0000000..dd1c300
--- /dev/null
+++ b/config/locales/views/generic_files/en.yml
@@ -0,0 +1,65 @@
+en:
+ generic_files:
+ name: 'Genericfile'
+ controller:
+ successfuly_created: 'Successfully created Genericfile.'
+ successfuly_updated: 'Successfully updated Genericfile.'
+ successfuly_destroyed: 'Successfully destroyed Genericfile.'
+ index:
+ page_title: 'Listing Genericfile'
+ name: 'Name'
+ file: 'File'
+ file_type: 'File type'
+ category: 'Category'
+ owner_id: 'Owner'
+ owner_type: 'Owner type'
+ actions:
+ confirm_destroy: 'Are you sure you want to delete this Genericfile?'
+ destroy: 'Delete'
+ edit: 'Edit'
+ show: 'View'
+ create: 'New'
+ create_for: 'New Genericfile for %{resource}'
+ show:
+ page_title: 'Show Genericfile'
+ name: 'Name'
+ file: 'File'
+ file_type: 'File type'
+ category: 'Category'
+ owner_id: 'Owner'
+ owner_type: 'Owner type'
+ actions:
+ confirm_destroy: 'Are you sure you want to delete this element?'
+ destroy: 'Delete'
+ edit: 'Edit'
+ view_all: 'View All'
+ new:
+ page_title: 'New Genericfile'
+ actions:
+ back_to_list: 'Back to Index'
+ edit:
+ page_title: 'Editing Genericfile'
+ actions:
+ back_to_list: 'Back to Index'
+ edit: 'Edit'
+ view_all: 'View All'
+ form:
+ name:
+ label: 'Name'
+ hint: ''
+ file:
+ label: 'File'
+ hint: ''
+ file_type:
+ label: 'File type'
+ hint: ''
+ category:
+ label: 'Category'
+ hint: ''
+ owner_id:
+ label: 'Owner'
+ hint: ''
+ owner_type:
+ label: 'Owner type'
+ hint: ''
+ submit: 'Submit' \ No newline at end of file
diff --git a/db/migrate/20130410123523_create_generic_files.rb b/db/migrate/20130410123523_create_generic_files.rb
new file mode 100644
index 0000000..a91f341
--- /dev/null
+++ b/db/migrate/20130410123523_create_generic_files.rb
@@ -0,0 +1,17 @@
+class CreateGenericFiles < ActiveRecord::Migration
+ def self.up
+ create_table :generic_files do |t|
+ t.string :name
+ t.string :file
+ t.string :file_type
+ t.string :category
+ t.integer :owner_id
+ t.string :owner_type
+ t.timestamps
+ end
+ end
+
+ def self.down
+ drop_table :generic_files
+ end
+end
diff --git a/test/functional/generic_files_controller_test.rb b/test/functional/generic_files_controller_test.rb
new file mode 100644
index 0000000..ef0a780
--- /dev/null
+++ b/test/functional/generic_files_controller_test.rb
@@ -0,0 +1,49 @@
+require 'test_helper'
+
+class GenericFilesControllerTest < ActionController::TestCase
+ setup do
+ @generic_file = generic_files(:one)
+ end
+
+ test "should get index" do
+ get :index
+ assert_response :success
+ assert_not_nil assigns(:generic_files)
+ end
+
+ test "should get new" do
+ get :new
+ assert_response :success
+ end
+
+ test "should create generic_file" do
+ assert_difference('GenericFile.count') do
+ post :create, generic_file: @generic_file.attributes
+ end
+
+ assert_redirected_to generic_file_path(assigns(:generic_file))
+ end
+
+ test "should show generic_file" do
+ get :show, id: @generic_file.to_param
+ assert_response :success
+ end
+
+ test "should get edit" do
+ get :edit, id: @generic_file.to_param
+ assert_response :success
+ end
+
+ test "should update generic_file" do
+ put :update, id: @generic_file.to_param, generic_file: @generic_file.attributes
+ assert_redirected_to generic_file_path(assigns(:generic_file))
+ end
+
+ test "should destroy generic_file" do
+ assert_difference('GenericFile.count', -1) do
+ delete :destroy, id: @generic_file.to_param
+ end
+
+ assert_redirected_to generic_files_path
+ end
+end
diff --git a/test/unit/generic_file_test.rb b/test/unit/generic_file_test.rb
new file mode 100644
index 0000000..e7fa53d
--- /dev/null
+++ b/test/unit/generic_file_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class GenericFileTest < ActiveSupport::TestCase
+ def test_should_be_valid
+ assert GenericFile.new.valid?
+ end
+end