summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-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
11 files changed, 188 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