summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Wintermeyer <stefan.wintermeyer@amooma.de>2012-12-28 20:27:04 +0100
committerStefan Wintermeyer <stefan.wintermeyer@amooma.de>2012-12-28 20:27:04 +0100
commitf3c3e77eaa2b82567f02601b6f66177208674181 (patch)
tree1946390f7f697e80fcdab4164ad620d507b6a1fe
parent3e76142566ad8f55a64a88fe5c19e7d0ec7c11c0 (diff)
parent8d20201910b1915cffa495e6474d50f9c8e8331d (diff)
Merge branch 'develop'5.0.1
-rw-r--r--app/assets/javascripts/application.js1
-rw-r--r--app/assets/javascripts/phones.js.coffee5
-rw-r--r--app/controllers/config_siemens_controller.rb18
-rw-r--r--app/controllers/config_snom_controller.rb19
-rw-r--r--app/controllers/phones_controller.rb13
-rw-r--r--app/models/phone.rb31
-rw-r--r--app/views/layouts/application.html.haml7
-rw-r--r--app/views/phones/_form_core.html.haml10
-rw-r--r--app/views/phones/new.html.haml6
-rw-r--r--app/views/phones/show.html.haml11
-rw-r--r--config/initializers/gemeinschaft_parameters.rb2
-rw-r--r--config/locales/views/call_histories/de.yml1
-rw-r--r--config/locales/views/call_histories/en.yml2
-rw-r--r--config/locales/views/phones/de.yml5
-rw-r--r--config/locales/views/phones/en.yml5
-rw-r--r--db/migrate/20121223110948_add_tenant_to_phone.rb6
-rw-r--r--db/migrate/20121223111155_add_fallback_sip_account_to_phone.rb6
-rw-r--r--db/migrate/20121228101454_update_tenant_id.rb16
-rw-r--r--db/schema.rb4
-rw-r--r--misc/freeswitch/scripts/common/call_history.lua9
-rw-r--r--misc/freeswitch/scripts/dialplan/dialplan.lua8
-rw-r--r--misc/freeswitch/scripts/dialplan/functions.lua2
-rw-r--r--misc/freeswitch/scripts/phones/phone.lua72
23 files changed, 173 insertions, 86 deletions
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index 2e0b0d8..1762043 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -10,4 +10,5 @@
//= require vendor/modernizr-2.0.6.min.js
//= require vendor/jquery.condom.js
//= require vendor/jquery.survival-kit
+//= require phones
//= require softkeys
diff --git a/app/assets/javascripts/phones.js.coffee b/app/assets/javascripts/phones.js.coffee
new file mode 100644
index 0000000..ff54777
--- /dev/null
+++ b/app/assets/javascripts/phones.js.coffee
@@ -0,0 +1,5 @@
+jQuery ->
+ $(".fallback_sip_account_dropdown").hide()
+
+ $("#phone_hot_deskable").change ->
+ $(".fallback_sip_account_dropdown").show("slow")
diff --git a/app/controllers/config_siemens_controller.rb b/app/controllers/config_siemens_controller.rb
index f398b1a..c09dfcf 100644
--- a/app/controllers/config_siemens_controller.rb
+++ b/app/controllers/config_siemens_controller.rb
@@ -80,6 +80,7 @@ class ConfigSiemensController < ApplicationController
@phone.mac_address = mac_address
@phone.hot_deskable = true
@phone.phone_model = PhoneModel.where('name LIKE ?', "#{phone_type}").first
+ @phone.tenant = tenant
if ! @phone.save
render(
:status => 500,
@@ -128,16 +129,13 @@ class ConfigSiemensController < ApplicationController
return
end
- phone_sip_account = PhoneSipAccount.new()
- phone_sip_account.phone_id = @phone.id
- phone_sip_account.sip_account_id = @sip_account.id
-
- if ! phone_sip_account.save
+ @phone.fallback_sip_account = @sip_account
+ if ! @phone.save
render(
:status => 500,
:layout => false,
:content_type => 'text/plain',
- :text => "<!-- #{phone_sip_account.errors.messages.inspect} -->",
+ :text => "<!-- #{@phone.errors.messages.inspect} -->",
)
return
end
@@ -152,13 +150,17 @@ class ConfigSiemensController < ApplicationController
@sip_account = @phone.sip_accounts.where(:sip_accountable_type => @phone.phoneable_type,
:sip_accountable_id => @phone.phoneable_id).first
+ if !@sip_account
+ @sip_account = @phone.fallback_sip_account
+ end
+
+ tenant = @phone.tenant
+
if @phone.phoneable
if @phone.phoneable_type == 'Tenant'
- tenant = @phone.phoneable
language = tenant.language.code
elsif @phone.phoneable_type == 'User'
language = @phone.phoneable.language.code
- tenant = @phone.phoneable.current_tenant
end
end
diff --git a/app/controllers/config_snom_controller.rb b/app/controllers/config_snom_controller.rb
index 74a117d..4d12082 100644
--- a/app/controllers/config_snom_controller.rb
+++ b/app/controllers/config_snom_controller.rb
@@ -49,6 +49,7 @@ class ConfigSnomController < ApplicationController
@phone = tenant.phones.build
@phone.mac_address = @mac_address
@phone.hot_deskable = true
+ @phone.tenant = tenant
mac_address_to_model = {
'00041325' => 'Snom 300',
@@ -130,20 +131,16 @@ class ConfigSnomController < ApplicationController
return
end
- phone_sip_account = PhoneSipAccount.new()
- phone_sip_account.phone_id = @phone.id
- phone_sip_account.sip_account_id = @sip_account.id
-
- if ! phone_sip_account.save
+ @phone.fallback_sip_account = @sip_account
+ if ! @phone.save
render(
:status => 500,
:layout => false,
:content_type => 'text/plain',
- :text => "<!-- #{phone_sip_account.errors.messages.inspect} -->",
+ :text => "<!-- #{@phone.errors.messages.inspect} -->",
)
return
end
-
end
elsif ! params[:phone].blank? then
@phone = Phone.where({ :id => params[:phone].to_i }).first
@@ -238,9 +235,15 @@ class ConfigSnomController < ApplicationController
@softkeys = Array.new()
@sip_accounts = Array.new()
+ phone_sip_accounts = Array.new()
if send_sensitve
- @phone.sip_accounts.each do |sip_account|
+ if @phone.sip_accounts && @phone.sip_accounts.count > 0
+ phone_sip_accounts = @phone.sip_accounts
+ elsif @phone.fallback_sip_account
+ phone_sip_accounts.push( @phone.fallback_sip_account )
+ end
+ phone_sip_accounts.each do |sip_account|
if (sip_account.sip_accountable_type == @phone.phoneable_type) and (sip_account.sip_accountable_id == @phone.phoneable_id)
snom_sip_account = {
:id => sip_account.id,
diff --git a/app/controllers/phones_controller.rb b/app/controllers/phones_controller.rb
index d46bf86..f1dcd3e 100644
--- a/app/controllers/phones_controller.rb
+++ b/app/controllers/phones_controller.rb
@@ -13,6 +13,8 @@ class PhonesController < ApplicationController
end
def new
+ set_fallback_sip_accounts
+
@phone = @phoneable.phones.build()
# Use the last phone.phone_model as the default.
@@ -22,15 +24,21 @@ class PhonesController < ApplicationController
def create
@phone = @phoneable.phones.build(params[:phone])
+ if !@tenant
+ @tenant = @user.current_tenant
+ end
+ @phone.tenant = @tenant
if @phone.save
m = method( :"#{@phoneable.class.name.underscore}_phone_path" )
redirect_to m.( @phoneable, @phone ), :notice => t('phones.controller.successfuly_created')
else
+ set_fallback_sip_accounts
render :new
end
end
def edit
+ set_fallback_sip_accounts
end
def update
@@ -68,5 +76,10 @@ class PhonesController < ApplicationController
add_breadcrumb @phone, method( :"#{@phone.phoneable.class.name.underscore}_phone_path" ).(@phone.phoneable, @phone)
end
end
+
+ def set_fallback_sip_accounts
+ used_sip_account_ids = Phone.where(:fallback_sip_account_id => SipAccount.pluck(:id)).pluck(:fallback_sip_account_id)
+ @fallback_sip_accounts = SipAccount.where(:sip_accountable_type => 'Tenant').where(:hotdeskable => true) - SipAccount.where(:id => used_sip_account_ids)
+ end
end
diff --git a/app/models/phone.rb b/app/models/phone.rb
index 89371eb..1f3c497 100644
--- a/app/models/phone.rb
+++ b/app/models/phone.rb
@@ -4,7 +4,7 @@ class Phone < ActiveRecord::Base
attr_accessible :mac_address, :ip_address, :http_user, :http_password,
:phone_model_id, :hot_deskable, :nightly_reboot,
- :provisioning_key, :provisioning_key_active
+ :provisioning_key, :provisioning_key_active, :fallback_sip_account_id, :tenant
# Associations
#
@@ -14,6 +14,9 @@ class Phone < ActiveRecord::Base
has_many :phone_sip_accounts, :dependent => :destroy, :uniq => true, :order => :position
has_many :sip_accounts, :through => :phone_sip_accounts
+ belongs_to :tenant
+ belongs_to :fallback_sip_account, :class_name => "SipAccount"
+
# Validations
#
before_validation :sanitize_mac_address
@@ -29,6 +32,8 @@ class Phone < ActiveRecord::Base
validates_presence_of :phone_model
validates_presence_of :phoneable
+
+ validates_uniqueness_of :fallback_sip_account_id, :allow_nil => true
before_save :save_last_ip_address
before_save :destroy_phones_sip_accounts_if_phoneable_changed
@@ -138,6 +143,8 @@ class Phone < ActiveRecord::Base
end
end
+ PhoneSipAccount.where(:phone_id => self.id).destroy_all
+
self.phoneable = user
sip_accounts.each do |sip_account|
if ! self.sip_accounts.where(:id => sip_account.id).first
@@ -163,37 +170,21 @@ class Phone < ActiveRecord::Base
# OPTIMIZE i18n translations
def user_logout
- if ! self.hot_deskable or self.phoneable_type == 'Tenant'
+ if ! self.hot_deskable
errors.add(:hot_deskable, "Phone not hot-deskable")
return false
end
sip_account = self.sip_accounts.where(:sip_accountable_type => self.phoneable_type).first
- tenant_sip_account = self.sip_accounts.where(:sip_accountable_type => 'Tenant').first
- if tenant_sip_account
- tenant = tenant_sip_account.sip_accountable
- end
-
- sip_account_ids = Array.new()
- self.sip_accounts.where(:sip_accountable_type => 'User', :hotdeskable => true).each do |sip_account|
- sip_account_ids.push(sip_account.id)
- end
-
- if tenant
- self.phoneable = tenant
- @not_destroy_phones_sip_accounts = true
+ if self.tenant
+ self.phoneable = self.tenant
if ! self.save
errors.add(:phoneable, "Could not change owner")
return false
end
end
- if ! PhoneSipAccount.destroy_all(:sip_account_id => sip_account_ids)
- errors.add(:sip_accounts, "Could not delete sip_accounts")
- return false
- end
-
sleep(0.5)
if ! self.resync(true, sip_account)
diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml
index f2aff0a..2c7faec 100644
--- a/app/views/layouts/application.html.haml
+++ b/app/views/layouts/application.html.haml
@@ -20,7 +20,6 @@
%body
#container
= render :partial => "shared/header"
- = render :partial => "shared/system_message"
= render :partial => "shared/flash", :locals => { :flash => flash}
#content{:role => 'main'}
@@ -33,14 +32,16 @@
%footer#main
%ul
+ %li
+ %a{:href => "http://amooma.de/gemeinschaft/gs5"} Gemeinschaft #{GEMEINSCHAFT_VERSION}
- if GuiFunction.display?('amooma_commercial_support_link_in_footer', current_user)
%li
- %a{:href => "http://www.amooma.de"} Kommerzieller Support und Consulting
+ %a{:href => "http://amooma.de"} Kommerzieller Support und Consulting
- if GuiFunction.display?('gemeinschaft_mailinglist_link_in_footer', current_user)
%li
%a{:href => "https://groups.google.com/group/gs5-users/"} Kostenlose Mailingliste
.amooma-logo
%span brought to you by
- %a{ :target => '_blank', :href => "http://www.amooma.de/" } Amooma
+ %a{ :target => '_blank', :href => "http://amooma.de/" } Amooma
diff --git a/app/views/phones/_form_core.html.haml b/app/views/phones/_form_core.html.haml
index 51ceff5..fd69690 100644
--- a/app/views/phones/_form_core.html.haml
+++ b/app/views/phones/_form_core.html.haml
@@ -1,7 +1,11 @@
.inputs
- = f.input :mac_address, :label => t('phones.form.mac_address.label'), :hint => conditional_hint('phones.form.mac_address.hint')
- = f.association :phone_model, :label => t('phones.form.phone_model_id.label'), :hint => conditional_hint('phones.form.phone_model_id.hint')
- = f.input :hot_deskable, :label => t('phones.form.hot_deskable.label'), :hint => conditional_hint('phones.form.hot_deskable.hint')
+ = f.input :mac_address, :label => t('phones.form.mac_address.label'), :hint => conditional_hint('phones.form.mac_address.hint'), :autofocus => true
+ = f.association :phone_model, :label => t('phones.form.phone_model_id.label'), :hint => conditional_hint('phones.form.phone_model_id.hint'), :include_blank => false
+ - if @fallback_sip_accounts.any?
+ = f.input :hot_deskable, :label => t('phones.form.hot_deskable.label'), :hint => conditional_hint('phones.form.hot_deskable.hint')
+ .fallback_sip_account_dropdown
+ = f.association :fallback_sip_account, :collection => @fallback_sip_accounts, :label => t('phones.form.fallback_sip_account_id.label'), :hint => conditional_hint('phones.form.fallback_sip_account_id.hint'), :include_blank => false
+
- if defined? NIGHTLY_REBOOT_OF_PHONES && NIGHTLY_REBOOT_OF_PHONES == true
= f.input :nightly_reboot, :label => t('phones.form.nightly_reboot.label'), :hint => conditional_hint('phones.form.nightly_reboot.hint')
- if defined? PROVISIONING_KEY_LENGTH && PROVISIONING_KEY_LENGTH > 0
diff --git a/app/views/phones/new.html.haml b/app/views/phones/new.html.haml
index 61923cc..ae0a539 100644
--- a/app/views/phones/new.html.haml
+++ b/app/views/phones/new.html.haml
@@ -1,3 +1,9 @@
- title t("phones.new.page_title")
+- if !@fallback_sip_accounts.any? && can?(:create, current_user.current_tenant.sip_accounts.build)
+ %p
+ = t("phones.new.you_need_to_have_at_least_one_available_fallback_sip_account_for_hotdesking")
+ = link_to t("sip_accounts.index.actions.create_for", :resource => current_user.current_tenant), new_tenant_sip_account_path(current_user.current_tenant)
+
= render "form"
+
diff --git a/app/views/phones/show.html.haml b/app/views/phones/show.html.haml
index 2664ffa..090323e 100644
--- a/app/views/phones/show.html.haml
+++ b/app/views/phones/show.html.haml
@@ -6,9 +6,14 @@
%p
%strong= t('phones.show.phone_model_id') + ":"
= @phone.phone_model
-%p
- %strong= t('phones.show.hot_deskable') + ":"
- = @phone.hot_deskable
+- if @phone.hot_deskable == true
+ %p
+ %strong= t('phones.show.hot_deskable') + ":"
+ = @phone.hot_deskable
+ %p
+ %strong= t('phones.show.fallback_sip_account_id') + ":"
+ = @phone.fallback_sip_account
+
- if defined? NIGHTLY_REBOOT_OF_PHONES && NIGHTLY_REBOOT_OF_PHONES == true
%p
%strong= t('phones.show.nightly_reboot') + ":"
diff --git a/config/initializers/gemeinschaft_parameters.rb b/config/initializers/gemeinschaft_parameters.rb
index fbe9c56..ffb8fee 100644
--- a/config/initializers/gemeinschaft_parameters.rb
+++ b/config/initializers/gemeinschaft_parameters.rb
@@ -1,6 +1,6 @@
# Use this file to set generic parameters for Gemeinschaft
-GEMEINSCHAFT_VERSION = '5.0'
+GEMEINSCHAFT_VERSION = '5.0.1'
SUPER_TENANT_NAME = 'Super-Tenant'
# System defaults
diff --git a/config/locales/views/call_histories/de.yml b/config/locales/views/call_histories/de.yml
index 3f0459d..6c99aee 100644
--- a/config/locales/views/call_histories/de.yml
+++ b/config/locales/views/call_histories/de.yml
@@ -64,3 +64,4 @@ de:
NO_USER_RESPONSE: 'Keine Antwort'
NOANSWER: 'Keine Antwort'
USER_NOT_REGISTERED: 'Offline'
+ USER_BUSY: 'Besetzt'
diff --git a/config/locales/views/call_histories/en.yml b/config/locales/views/call_histories/en.yml
index 5adf453..839c912 100644
--- a/config/locales/views/call_histories/en.yml
+++ b/config/locales/views/call_histories/en.yml
@@ -64,4 +64,4 @@ en:
NO_USER_RESPONSE: 'No user response'
NOANSWER: 'No answer'
USER_NOT_REGISTERED: 'Offline'
- \ No newline at end of file
+ USER_BUSY: 'Busy'
diff --git a/config/locales/views/phones/de.yml b/config/locales/views/phones/de.yml
index 3a0adea..dafe279 100644
--- a/config/locales/views/phones/de.yml
+++ b/config/locales/views/phones/de.yml
@@ -33,6 +33,7 @@ de:
http_user: 'http user'
http_password: 'http password'
nightly_reboot: 'Nachts automatischer Reboot'
+ fallback_sip_account_id: 'Fallback SIP Account'
actions:
confirm: 'Sind Sie sicher, dass Sie diese Telefon aus Gemeinschaft entfernen möchten?'
destroy: 'Löschen'
@@ -41,6 +42,7 @@ de:
new:
page_title: 'Neues Telefon'
actions:
+ you_need_to_have_at_least_one_available_fallback_sip_account_for_hotdesking: 'Sie benötigen mindestens einen nicht benutzen und hotdeskfähigen SIP-Account, damit die Option für Hotdesking in diesem Formular angezeigt wird. '
edit:
page_title: 'Telefondaten bearbeiten'
form:
@@ -71,6 +73,9 @@ de:
provisioning_key_active:
label: 'Provisioning Schlüssel aktiv'
hint: ''
+ fallback_sip_account_id:
+ label: 'Fallback SIP Account'
+ hint: ''
button: 'Absenden'
sip_accounts:
title: 'Auf dem Telefon eingetragene SIP-Konten'
diff --git a/config/locales/views/phones/en.yml b/config/locales/views/phones/en.yml
index afcf9b5..ecd5a91 100644
--- a/config/locales/views/phones/en.yml
+++ b/config/locales/views/phones/en.yml
@@ -33,6 +33,7 @@ en:
http_password: 'http password'
nightly_reboot: 'Nightly reboot'
provisioning_key_active: 'Provisioning key active'
+ fallback_sip_account_id: 'Fallback SIP Account'
actions:
confirm: 'Are you sure you want to delete this phone?'
destroy: 'Delete phone'
@@ -41,6 +42,7 @@ en:
new:
page_title: 'New phone'
actions:
+ you_need_to_have_at_least_one_available_fallback_sip_account_for_hotdesking: 'You need to have at least one unconnected SIP account to see a hotdesking option in this form. '
edit:
page_title: 'Editing Phone'
form:
@@ -71,6 +73,9 @@ en:
provisioning_key_active:
label: 'Provisioning key active'
hint: ''
+ fallback_sip_account_id:
+ label: 'Fallback SIP Account'
+ hint: ''
button: 'Submit'
sip_accounts:
title: 'Listing of connected SIP accounts'
diff --git a/db/migrate/20121223110948_add_tenant_to_phone.rb b/db/migrate/20121223110948_add_tenant_to_phone.rb
new file mode 100644
index 0000000..dbe0412
--- /dev/null
+++ b/db/migrate/20121223110948_add_tenant_to_phone.rb
@@ -0,0 +1,6 @@
+class AddTenantToPhone < ActiveRecord::Migration
+ def change
+ add_column :phones, :tenant_id, :integer
+
+ end
+end
diff --git a/db/migrate/20121223111155_add_fallback_sip_account_to_phone.rb b/db/migrate/20121223111155_add_fallback_sip_account_to_phone.rb
new file mode 100644
index 0000000..94a8050
--- /dev/null
+++ b/db/migrate/20121223111155_add_fallback_sip_account_to_phone.rb
@@ -0,0 +1,6 @@
+class AddFallbackSipAccountToPhone < ActiveRecord::Migration
+ def change
+ add_column :phones, :fallback_sip_account_id, :integer
+
+ end
+end
diff --git a/db/migrate/20121228101454_update_tenant_id.rb b/db/migrate/20121228101454_update_tenant_id.rb
new file mode 100644
index 0000000..dc2f37c
--- /dev/null
+++ b/db/migrate/20121228101454_update_tenant_id.rb
@@ -0,0 +1,16 @@
+class UpdateTenantId < ActiveRecord::Migration
+ def up
+ Phone.all.each do |phone|
+ phone.tenant_id = Tenant.last.id
+ phone.save
+ end
+
+ Phone.where(:hot_deskable => true).each do |phone|
+ phone.fallback_sip_account = phone.sip_accounts.where(:sip_accountable_type => 'Tenant').first
+ phone.save
+ end
+ end
+
+ def down
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 1395e1b..804ff5f 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20121125084447) do
+ActiveRecord::Schema.define(:version => 20121228101454) do
create_table "access_authorizations", :force => true do |t|
t.string "access_authorizationable_type"
@@ -738,6 +738,8 @@ ActiveRecord::Schema.define(:version => 20121125084447) do
t.boolean "nightly_reboot"
t.string "provisioning_key"
t.boolean "provisioning_key_active"
+ t.integer "tenant_id"
+ t.integer "fallback_sip_account_id"
end
create_table "registrations", :id => false, :force => true do |t|
diff --git a/misc/freeswitch/scripts/common/call_history.lua b/misc/freeswitch/scripts/common/call_history.lua
index c5bc0bf..7a9ac07 100644
--- a/misc/freeswitch/scripts/common/call_history.lua
+++ b/misc/freeswitch/scripts/common/call_history.lua
@@ -70,8 +70,6 @@ function CallHistory.insert_event(self, uuid, account_type, account_id, entry_ty
call_history.callee_id_name = common.str.to_sql(event:getHeader('variable_effective_callee_id_name'));
call_history.result = common.str.to_sql(event:getHeader('variable_hangup_cause'));
call_history.start_stamp = 'FROM_UNIXTIME(' .. math.floor(common.str.to_i(event:getHeader('Caller-Channel-Created-Time')) / 1000000) .. ')';
- call_history.caller_account_type = common.str.to_sql(camelize_type(event:getHeader('variable_gs_caller_account_type') or event:getHeader('variable_gs_account_type')));
- call_history.caller_account_id = common.str.to_sql(event:getHeader('variable_gs_caller_account_id') or event:getHeader('variable_gs_account_id'));
call_history.auth_account_type = common.str.to_sql(camelize_type(event:getHeader('variable_gs_auth_account_type')));
call_history.auth_account_id = common.str.to_sql(event:getHeader('variable_gs_auth_account_id'));
call_history.callee_account_type = common.str.to_sql(camelize_type(event:getHeader('variable_gs_destination_type')));
@@ -79,6 +77,11 @@ function CallHistory.insert_event(self, uuid, account_type, account_id, entry_ty
call_history.destination_number = common.str.to_sql(event:getHeader('variable_gs_destination_number'));
call_history.forwarding_service = common.str.to_sql(event:getHeader('variable_gs_forwarding_service'));
+ if not common.str.to_b(event:getHeader('variable_gs_clir')) then
+ call_history.caller_account_type = common.str.to_sql(camelize_type(event:getHeader('variable_gs_caller_account_type') or event:getHeader('variable_gs_account_type')));
+ call_history.caller_account_id = common.str.to_sql(event:getHeader('variable_gs_caller_account_id') or event:getHeader('variable_gs_account_id'));
+ end
+
if common.str.to_s(event:getHeader('variable_gs_call_service')) == 'pickup' then
call_history.forwarding_service = common.str.to_sql('pickup');
end
@@ -111,7 +114,7 @@ function CallHistory.insert_forwarded(self, uuid, account_type, account_id, call
call_history.result = common.str.to_sql(result.cause or 'UNSPECIFIED');
call_history.start_stamp = 'FROM_UNIXTIME(' .. math.floor(caller:to_i('created_time') / 1000000) .. ')';
- if caller.account then
+ if caller.account and not caller.clir then
call_history.caller_account_type = common.str.to_sql(camelize_type(caller.account.class));
call_history.caller_account_id = common.str.to_sql(caller.account.id);
end
diff --git a/misc/freeswitch/scripts/dialplan/dialplan.lua b/misc/freeswitch/scripts/dialplan/dialplan.lua
index f4dca9e..391f5bf 100644
--- a/misc/freeswitch/scripts/dialplan/dialplan.lua
+++ b/misc/freeswitch/scripts/dialplan/dialplan.lua
@@ -872,6 +872,8 @@ function Dialplan.run(self, destination)
self.caller:set_variable('gs_save_cdr', true);
self.caller:set_variable('gs_call_service', 'dial');
self.caller.session:setAutoHangup(false);
+ self.caller.date = os.date('%y%m%d%w');
+ self.caller.time = os.date('%H%M%S');
self.routes = common.configuration_file.get('/opt/freeswitch/scripts/ini/routes.ini');
self.caller.domain_local = self.domain;
@@ -905,9 +907,8 @@ function Dialplan.run(self, destination)
end
end
- self.log:info('DIALPLAN start - caller_id: ',self.caller.caller_id_number, ' "', self.caller.caller_id_name,'"',
- ', number: ', destination.number);
-
+ self.log:info('DIALPLAN start - caller_id: ',self.caller.caller_id_number, ' "', self.caller.caller_id_name, '" , number: ', destination.number);
+
local result = { continue = false };
local loop = self.caller.loop_count;
while self.caller:ready() and loop < self.max_loops do
@@ -918,6 +919,7 @@ function Dialplan.run(self, destination)
' - destination: ', destination.type, '=', destination.id, '/', destination.uuid,'@', destination.node_id,
', number: ', destination.number);
+ self.caller:set_variable('gs_clir', self.caller.clir);
self.caller:set_variable('gs_destination_type', destination.type);
self.caller:set_variable('gs_destination_id', destination.id);
self.caller:set_variable('gs_destination_uuid', destination.uuid);
diff --git a/misc/freeswitch/scripts/dialplan/functions.lua b/misc/freeswitch/scripts/dialplan/functions.lua
index c104f89..9a89857 100644
--- a/misc/freeswitch/scripts/dialplan/functions.lua
+++ b/misc/freeswitch/scripts/dialplan/functions.lua
@@ -31,7 +31,7 @@ function Functions.dialplan_function(self, caller, dialed_number)
local fid = tostring(parameters[2]);
local result = { continue = false, code = 404, phrase = 'Function not found', no_cdr = true };
- self.log:debug('DIALPLAN_DUNCTION - execute: ', dialed_number);
+ self.log:debug('DIALPLAN_FUNCTION - execute: ', dialed_number);
if fid == "ta" then
result = self:transfer_all(caller, parameters[3]);
diff --git a/misc/freeswitch/scripts/phones/phone.lua b/misc/freeswitch/scripts/phones/phone.lua
index 5cd210b..bc2aa3d 100644
--- a/misc/freeswitch/scripts/phones/phone.lua
+++ b/misc/freeswitch/scripts/phones/phone.lua
@@ -18,6 +18,26 @@ function Phone.new(self, arg)
end
+function Phone.list_by_sql(self, sql_query)
+ local account_phones = {};
+
+ self.database:query(sql_query, function(account_entry)
+ local phone = Phone:new(self, {object = parent_class});
+ phone.record = account_entry;
+ phone.record.ieee_name = common.str.downcase(account_entry.ieee_name);
+
+ if phone.record.ieee_name == 'snom technology ag' then
+ require 'phones.snom'
+ phone.model = phones.snom.Snom:new();
+ elseif account_entry.ieee_name == 'siemens enterprise communicationsgmbh & co. kg' then
+ require 'phones.siemens'
+ phone.model = phones.siemens.Siemens:new();
+ end
+ table.insert(account_phones, phone);
+ end)
+
+ return account_phones;
+end
-- Find a hot-deskable phone by sip-account
function Phone.find_all_hot_deskable_by_account(self, account_id)
@@ -25,7 +45,7 @@ function Phone.find_all_hot_deskable_by_account(self, account_id)
local sql_query = 'SELECT \
`b`.`id`, `b`.`mac_address`, `b`.`ip_address`, `b`.`http_user`, `b`.`http_password`, `b`.`phoneable_type`, `b`.`phoneable_id`, \
- `d`.`ieee_name` \
+ `b`.`tenant_id`, `b`.`fallback_sip_account_id`, `d`.`ieee_name` \
FROM `phone_sip_accounts` `a` \
JOIN `phones` `b` ON `a`.`phone_id` = `b`.`id` \
JOIN `phone_models` `c` ON `b`.`phone_model_id` = `c`.`id` \
@@ -35,22 +55,21 @@ function Phone.find_all_hot_deskable_by_account(self, account_id)
AND `d`.`state` = "active" \
AND `a`.`sip_account_id` = ' .. tonumber(account_id);
- local account_phones = {};
+ local account_phones = self:list_by_sql(sql_query);
- self.database:query(sql_query, function(account_entry)
- local phone = Phone:new(self, {object = parent_class});
- phone.record = account_entry;
- phone.record.ieee_name = common.str.downcase(account_entry.ieee_name);
+ if #account_phones == 0 then
+ sql_query = 'SELECT `b`.`id`, `b`.`mac_address`, `b`.`ip_address`, `b`.`http_user`, `b`.`http_password`, `b`.`phoneable_type`, `b`.`phoneable_id`, \
+ `b`.`tenant_id`, `b`.`fallback_sip_account_id`, `d`.`ieee_name` \
+ FROM `phones` `b` \
+ JOIN `phone_models` `c` ON `b`.`phone_model_id` = `c`.`id` \
+ JOIN `manufacturers` `d` ON `c`.`manufacturer_id` = `d`.`id` \
+ WHERE `b`.`hot_deskable` IS TRUE \
+ AND `c`.`state` = "active" \
+ AND `d`.`state` = "active" \
+ AND `b`.`fallback_sip_account_id` = ' .. tonumber(account_id);
- if phone.record.ieee_name == 'snom technology ag' then
- require 'phones.snom'
- phone.model = phones.snom.Snom:new();
- elseif account_entry.ieee_name == 'siemens enterprise communicationsgmbh & co. kg' then
- require 'phones.siemens'
- phone.model = phones.siemens.Siemens:new();
- end
- table.insert(account_phones, phone);
- end)
+ account_phones = self:list_by_sql(sql_query);
+ end
return account_phones;
end
@@ -61,20 +80,6 @@ function Phone.find_hot_deskable_by_account(self, account_id)
end
-function Phone.tenant_id_get(self)
- local sql_query = 'SELECT `c`.`sip_accountable_id` \
- FROM `phones` `a` LEFT JOIN `phone_sip_accounts` `b` ON `a`.`id` = `b`.`phone_id` \
- JOIN `sip_accounts` `c` ON `b`.`sip_account_id` = `c`.`id` AND `sip_accountable_type` = "Tenant" \
- WHERE `a`.`id` = ' .. tonumber(self.record.id) .. ' LIMIT 1';
-
- local tenant_id = nil;
- self.database:query(sql_query, function(tenant_entry)
- tenant_id = tenant_entry.sip_accountable_id;
- end)
-
- return tenant_id;
-end
-
function Phone.phoneable_set(self, phoneable_id, phoneable_type)
sql_query = 'UPDATE `phones` SET `phoneable_type` = "' .. phoneable_type ..'", `phoneable_id` = ' .. phoneable_id .. ' \
WHERE `id` = ' .. tonumber(self.record.id);
@@ -82,7 +87,7 @@ function Phone.phoneable_set(self, phoneable_id, phoneable_type)
end
function Phone.logout(self, account_id)
- local tenant_id = self:tenant_id_get();
+ local tenant_id = tonumber(self.record.tenant_id);
if not tenant_id then
self.log:info('PHONE_LOGOUT - tenant not found');
@@ -91,7 +96,12 @@ function Phone.logout(self, account_id)
self:phoneable_set(tenant_id, 'Tenant');
- sql_query = 'DELETE FROM `phone_sip_accounts` WHERE `sip_account_id` = ' .. tonumber(account_id);
+ if account_id then
+ sql_query = 'DELETE FROM `phone_sip_accounts` WHERE `sip_account_id` = ' .. tonumber(account_id);
+ self.database:query(sql_query);
+ end
+
+ sql_query = 'DELETE FROM `phone_sip_accounts` WHERE `phone_id` = ' .. self.record.id;
return self.database:query(sql_query);
end