summaryrefslogtreecommitdiff
path: root/app/controllers/call_forwards_controller.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/call_forwards_controller.rb')
-rw-r--r--app/controllers/call_forwards_controller.rb127
1 files changed, 127 insertions, 0 deletions
diff --git a/app/controllers/call_forwards_controller.rb b/app/controllers/call_forwards_controller.rb
new file mode 100644
index 0000000..5321b35
--- /dev/null
+++ b/app/controllers/call_forwards_controller.rb
@@ -0,0 +1,127 @@
+class CallForwardsController < ApplicationController
+ load_and_authorize_resource :phone_number
+ load_and_authorize_resource :call_forward, :through => [:phone_number]
+
+ before_filter :spread_breadcrumbs
+
+ class CallForwardingDestination
+ attr_accessor :id, :label
+
+ def to_s
+ return label
+ end
+ end
+
+
+ def index
+ end
+
+ def show
+ end
+
+ def new
+ @call_forward = @phone_number.call_forwards.build
+ @call_forward.depth = DEFAULT_CALL_FORWARD_DEPTH
+ @call_forward.active = true
+ @call_forwarding_destinations = call_forwarding_destination_types()
+ @call_forward.destination = CALLFORWARD_DESTINATION_DEFAULT.to_s if defined?(CALLFORWARD_DESTINATION_DEFAULT)
+
+ @available_call_forward_cases = []
+ CallForwardCase.all.each do |available_call_forward_case|
+ if GuiFunction.display?("call_forward_case_#{available_call_forward_case.value}_field_in_call_forward_form", @current_user)
+ @available_call_forward_cases << available_call_forward_case
+ end
+ end
+
+ if @phone_number.call_forwards.where(
+ :call_forward_case_id => CallForwardCase.find_by_value('noanswer').id,
+ :active => true
+ ).count == 0
+ @call_forward.call_forward_case_id = CallForwardCase.find_by_value('noanswer').id
+ @call_forward.timeout = 45
+ end
+ end
+
+ def create
+ @call_forward = @phone_number.call_forwards.build( params[:call_forward] )
+
+ if @call_forward.save
+ redirect_to phone_number_call_forward_path( @phone_number, @call_forward ), :notice => t('call_forwards.controller.successfuly_created')
+ else
+ @available_call_forward_cases = CallForwardCase.all
+ render :new
+ end
+ end
+
+ def edit
+ @available_call_forward_cases = CallForwardCase.all
+ @call_forwarding_destinations = call_forwarding_destination_types()
+ end
+
+ def update
+ @available_call_forward_cases = CallForwardCase.all
+ if @call_forward.update_attributes(params[:call_forward])
+ redirect_to phone_number_call_forward_path( @phone_number, @call_forward ), :notice => t('call_forwards.controller.successfuly_updated')
+ else
+ @call_forwarding_destinations = call_forwarding_destination_types()
+ render :edit
+ end
+ end
+
+ def destroy
+ @call_forward.destroy
+ redirect_to phone_number_call_forwards_path( @phone_number ), :notice => t('call_forwards.controller.successfuly_destroyed')
+ end
+
+ private
+ def spread_breadcrumbs
+ if @phone_number && @phone_number.phone_numberable_type == 'SipAccount'
+ @sip_account = @phone_number.phone_numberable
+ if @sip_account.sip_accountable_type == 'User'
+ @user = @phone_number.phone_numberable.sip_accountable
+ add_breadcrumb t("users.index.page_title"), tenant_users_path(@user.current_tenant)
+ add_breadcrumb @user, tenant_users_path(@user.current_tenant, @user)
+ add_breadcrumb t("sip_accounts.index.page_title"), user_sip_accounts_path(@user)
+ add_breadcrumb @sip_account, user_sip_account_path(@user, @sip_account)
+ end
+ if @sip_account.sip_accountable_type == 'Tenant'
+ @tenant = @sip_account.sip_accountable
+ add_breadcrumb t("sip_accounts.index.page_title"), tenant_sip_accounts_path(@tenant)
+ add_breadcrumb @sip_account, tenant_sip_account_path(@tenant, @sip_account)
+ end
+ add_breadcrumb t("phone_numbers.index.page_title"), sip_account_phone_numbers_path(@sip_account)
+ add_breadcrumb @phone_number, sip_account_phone_number_path(@sip_account, @phone_number)
+ add_breadcrumb t("call_forwards.index.page_title"), phone_number_call_forwards_path(@phone_number)
+ if @call_forward && !@call_forward.new_record?
+ add_breadcrumb @call_forward, phone_number_call_forward_path(@phone_number, @call_forward)
+ end
+ end
+ end
+
+ def call_forwarding_destination_types
+
+ phone_number_destination = CallForwardingDestination.new()
+ phone_number_destination.id = ':PhoneNumber'
+ phone_number_destination.label = 'Phone Number'
+ voice_mail_destination = CallForwardingDestination.new()
+ voice_mail_destination.id = ':Voicemail'
+ voice_mail_destination.label = 'Voice Mail'
+
+ call_forwarding_destinations = [
+ phone_number_destination,
+ voice_mail_destination,
+ ]
+
+ if GuiFunction.display?('huntgroup_in_destination_field_in_call_forward_form', @current_user)
+ HuntGroup.all.each do |hunt_group|
+ hunt_group_destination = CallForwardingDestination.new()
+ hunt_group_destination.id = "#{hunt_group.id}:HuntGroup"
+ hunt_group_destination.label = "HuntGroup: #{hunt_group.to_s}"
+ call_forwarding_destinations.push(hunt_group_destination)
+ end
+ end
+
+ return call_forwarding_destinations
+ end
+
+end