summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Wintermeyer <stefan.wintermeyer@amooma.de>2013-06-21 15:07:44 +0200
committerStefan Wintermeyer <stefan.wintermeyer@amooma.de>2013-06-21 15:07:44 +0200
commit4ce04ec03bc8f362d48ded43833645e7f454cb5c (patch)
treef078d226e17a64b6dc17b2976bb5dddcc9768715
parent51db65fb71e638a1e2b5b2d8f19f6a685017099f (diff)
Added blind transfer functionality for the switchboard.
-rw-r--r--app/controllers/api/v1/calls_controller.rb24
-rw-r--r--app/controllers/switchboard_entries_controller.rb2
-rw-r--r--app/views/switchboard_entries/_form_core.html.haml1
-rw-r--r--app/views/switchboard_entries/show.html.haml5
-rw-r--r--app/views/switchboards/show.html.erb22
-rw-r--r--config/routes.rb1
-rw-r--r--public/js/app.js21
7 files changed, 51 insertions, 25 deletions
diff --git a/app/controllers/api/v1/calls_controller.rb b/app/controllers/api/v1/calls_controller.rb
new file mode 100644
index 0000000..e6fbed4
--- /dev/null
+++ b/app/controllers/api/v1/calls_controller.rb
@@ -0,0 +1,24 @@
+module Api
+ module V1
+ class CallsController < ApplicationController
+ respond_to :json
+
+ def index
+ @calls = Call.limit(10)
+
+ respond_with @calls
+ end
+
+ def show
+ @call = Call.find(params[:id])
+
+ if params[:transfer_blind]
+ @call.transfer_blind(params[:transfer_blind])
+ end
+
+ respond_with @call
+ end
+
+ end
+ end
+end
diff --git a/app/controllers/switchboard_entries_controller.rb b/app/controllers/switchboard_entries_controller.rb
index ef6c72e..5b41816 100644
--- a/app/controllers/switchboard_entries_controller.rb
+++ b/app/controllers/switchboard_entries_controller.rb
@@ -58,7 +58,7 @@ class SwitchboardEntriesController < ApplicationController
private
def switchboard_entry_params
- params.require(:switchboard_entry).permit(:name, :sip_account_id)
+ params.require(:switchboard_entry).permit(:name, :sip_account_id, :switchable)
end
def spread_breadcrumbs
diff --git a/app/views/switchboard_entries/_form_core.html.haml b/app/views/switchboard_entries/_form_core.html.haml
index 6f340c2..2caaba5 100644
--- a/app/views/switchboard_entries/_form_core.html.haml
+++ b/app/views/switchboard_entries/_form_core.html.haml
@@ -1,3 +1,4 @@
.inputs
= f.association :sip_account, :collection => @sip_accounts, :label => t('switchboard_entries.form.sip_account_id.label'), :hint => conditional_hint('switchboard_entries.form.sip_account_id.hint'), :autofocus => true, :include_blank => false
= f.input :name, :label => t('switchboard_entries.form.name.label'), :hint => conditional_hint('switchboard_entries.form.name.hint')
+ = f.input :switchable, :as => :boolean, :label => t('switchboard_entries.form.switchable.label'), :hint => conditional_hint('switchboard_entries.form.switchable.hint') \ No newline at end of file
diff --git a/app/views/switchboard_entries/show.html.haml b/app/views/switchboard_entries/show.html.haml
index b519781..85b8166 100644
--- a/app/views/switchboard_entries/show.html.haml
+++ b/app/views/switchboard_entries/show.html.haml
@@ -18,5 +18,10 @@
%strong= t('switchboard_entries.show.position') + ":"
%td
= @switchboard_entry.position
+ %tr
+ %td
+ %strong= t('switchboard_entries.show.switchable') + ":"
+ %td
+ = @switchboard_entry.switchable
= render :partial => 'shared/show_edit_destroy_part', :locals => {:parent => @switchboard, :child => @switchboard_entry } \ No newline at end of file
diff --git a/app/views/switchboards/show.html.erb b/app/views/switchboards/show.html.erb
index 2a2765f..4877613 100644
--- a/app/views/switchboards/show.html.erb
+++ b/app/views/switchboards/show.html.erb
@@ -26,16 +26,27 @@
{{avatar_img switchboardEntry.avatar_src}}
<small>
<p>
+ {{#if switchboardEntry.name}}
<span class="label">{{switchboardEntry.name}}</span>
+ {{/if}}
{{#each phoneNumber in switchboardEntry.sipAccount.phoneNumberShortList}}
<span class="label">
{{phoneNumber.number}}
</span>
+
+ {{#if activeCalls.length}}
+ <p>
+ {{#each activeCall in activeCalls}}
+ <button {{action transfer_blind activeCall.id phoneNumber.number}} class="btn btn-small">Blind Transfer ({{activeCall.b_caller_id_number}})</button>
+ {{/each}}
+ </p>
+ {{/if}}
{{/each}}
</p>
{{show_callstate switchboardEntry.callstate}}
+
{{#if switchboardEntry.sipAccount.calls.length}}
<p>
Anrufe:
@@ -51,17 +62,6 @@
</p>
{{/if}}
- {{#if activeCalls.length}}
- <p>
- Verbinden mit:
- <br>
- {{#each activeCall in activeCalls}}
- <button {{action blind_transfer}}>
- {{activeCall.b_caller_id_number}}
- </button>
- {{/each}}
- </p>
- {{/if}}
</small>
</div>
</li>
diff --git a/config/routes.rb b/config/routes.rb
index 46562eb..eeb9c0b 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -11,6 +11,7 @@ Gemeinschaft42c::Application.routes.draw do
resources :sip_accounts, :only => [:show, :index]
resources :pager_groups
resources :phone_numbers, :only => [:show, :index]
+ resources :calls, :only => [:index, :show, :update]
end
resources :rows
diff --git a/public/js/app.js b/public/js/app.js
index 51b3b71..da887c4 100644
--- a/public/js/app.js
+++ b/public/js/app.js
@@ -1,5 +1,4 @@
App = Ember.Application.create({
- LOG_TRANSITIONS: true,
rootElement: '#emberjs-container',
// Reload the switchboard every x milliseconds
@@ -9,11 +8,6 @@ App = Ember.Application.create({
var switchboard = App.Switchboard.find(switchboard_id);
setInterval(function() {
switchboard.reload();
-
- // var switchboard_entries = App.SwitchboardEntry.find();
- // switchboard_entries.forEach(function(switchboard_entry) {
- // switchboard_entry.reload();
- // });
}, reload_interval);
}
}
@@ -32,8 +26,10 @@ App.SwitchboardRoute = Ember.Route.extend({
// Controller
App.SwitchboardController = Ember.ObjectController.extend({
- blind_transfer: function() {
- console.log('transfer')
+ transfer_blind: function(call_id, destination) {
+ console.log('test')
+ request_url = '/api/v1/calls/' + call_id + '.json';
+ jQuery.get(request_url, { transfer_blind: destination });
}
});
@@ -52,8 +48,6 @@ App.Switchboard = DS.Model.extend({
switchboardEntrys: DS.hasMany('App.SwitchboardEntry'),
activeCalls: DS.hasMany('App.ActiveCall'),
name: DS.attr('string')
-
-
});
App.SwitchboardEntry = DS.Model.extend({
@@ -114,8 +108,7 @@ App.Call = DS.Model.extend({
} else {
return false
}
- }.property('b_callstate')
-
+ }.property('b_callstate')
});
App.store.adapter.serializer.configure(App.PhoneNumber, { sideloadAs: 'phone_numbers' });
@@ -125,5 +118,7 @@ Ember.Handlebars.registerBoundHelper('avatar_img', function(value) {
});
Ember.Handlebars.registerBoundHelper('show_callstate', function(value) {
- return new Handlebars.SafeString('<span class="label">' + value + '</span>');
+ if (value) {
+ return new Handlebars.SafeString('<span class="label">' + value + '</span>');
+ }
});