diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/generic_files_controller.rb | 64 | ||||
-rw-r--r-- | app/helpers/generic_files_helper.rb | 2 | ||||
-rw-r--r-- | app/models/generic_file.rb | 44 | ||||
-rw-r--r-- | app/uploaders/generic_file_uploader.rb | 18 | ||||
-rw-r--r-- | app/views/generic_files/_form.html.haml | 7 | ||||
-rw-r--r-- | app/views/generic_files/_form_core.html.haml | 7 | ||||
-rw-r--r-- | app/views/generic_files/_index_core.html.haml | 14 | ||||
-rw-r--r-- | app/views/generic_files/edit.html.haml | 3 | ||||
-rw-r--r-- | app/views/generic_files/index.html.haml | 6 | ||||
-rw-r--r-- | app/views/generic_files/new.html.haml | 3 | ||||
-rw-r--r-- | app/views/generic_files/show.html.haml | 20 |
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 |