]> git.ipfire.org Git - ipfire.org.git/commitdiff
talk: Allow hanging up channels from webapp
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 16 Mar 2017 11:34:40 +0000 (11:34 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 16 Mar 2017 11:34:40 +0000 (11:34 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
templates/talk/confirm-hangup.html [new file with mode: 0644]
templates/talk/modules/ongoing-calls.html
webapp/__init__.py
webapp/backend/talk.py
webapp/handlers_talk.py

diff --git a/templates/talk/confirm-hangup.html b/templates/talk/confirm-hangup.html
new file mode 100644 (file)
index 0000000..a6dfdad
--- /dev/null
@@ -0,0 +1,39 @@
+{% extends "../base.html" %}
+
+{% block title %}{{ _("Hangup Channel") }}{% end block %}
+
+{% block body %}
+       <form action="" method="POST">
+               {% raw xsrf_form_html() %}
+
+               <div class="row">
+                       <div class="col-md-4 col-md-offset-4">
+                               <div class="well well-sm ac">
+                                       <h4>{{ _("Hangup Channel") }}</h4>
+
+                                       <p>
+                                               {{ _("You are about to hangup this channel") }}
+                                       </p>
+
+                                       <hr>
+
+                                       <p>
+                                               {% module TalkContact(channel.caller, name=channel.caller_name) %}
+                                       </p>
+
+                                       <p>
+                                               <i class="glyphicon glyphicon-arrow-right text-success"></i>
+                                       </p>
+
+                                       <p>
+                                               {% module TalkContact(channel.callee, application=channel.application) %}
+                                       </p>
+
+                                       <br>
+
+                                       <input class="btn btn-danger btn-block" type="submit" value="{{ _("Hangup Channel") }}">
+                               </div>
+                       </div>
+               </div>
+       </form>
+{% end block %}
index 8473dcf8221f87eaeeaa7babe2dd11c7596604bf..eedeacd2f157e939cb478f1608170ab279e2b8d6 100644 (file)
                                        </td>
 
                                        <td class="ar">{{ format_time(c.duration) }}</td>
+
+                                       <td class="ar">
+                                               <a class="btn btn-xs btn-danger" title="{{ _("Hangup") }}" href="/hangup/{{ c.id }}">
+                                                       <i class="fa fa-times"></i>
+                                               </a>
+                                       </td>
                                </tr>
                        {% end %}
                </tbody>
index b378188c0e4b31f474ecc1a6d9ec3f7ce5596471..07d2f1a862095612360bdb8cbd84a206f7aa14a9 100644 (file)
@@ -254,6 +254,7 @@ class Application(tornado.web.Application):
                        (r"/", TalkIndexHandler),
                        (r"/conferences", TalkConferencesHandler),
                        (r"/diagnosis", TalkDiagnosisHandler),
+                       (r"/hangup/(.*)", TalkHangupChannelHandler),
                        (r"/phonebook/(\w+)", TalkPhonebookAccountHandler),
                        (r"/phonebook", TalkPhonebookHandler),
                        (r"/profile", TalkProfileHandler),
index da2f00282aa5a3d774de3884f50bbc8579cd2cf8..faf8d67bcc1207195f4a280de911353465dc5e3b 100644 (file)
@@ -159,6 +159,13 @@ class Talk(Object):
 
                 return sorted(channels)
 
+        def get_channel(self, channel_id, account=None):
+                channels = self.get_channels(account=account)
+
+                for channel in channels:
+                        if channel.id == channel_id:
+                                return channel
+
        def get_ongoing_calls(self, account=None, sip_id=None):
                if account and sip_id is None:
                        sip_id = account.sip_id
index 89486bdf3c4999c336f403a851ca377fbb522a55..39fccfbecf5e8c8f86dab62c6a241c9e4c7a91e7 100644 (file)
@@ -42,6 +42,32 @@ class TalkDiagnosisHandler(BaseHandler):
                return self.render("talk/diagnosis.html")
 
 
+class TalkHangupChannelHandler(BaseHandler):
+        def _get_channel(self, channel_id):
+                account = None if self.current_user.is_admin() else self.current_user
+
+                channel = self.talk.get_channel(channel_id, account=account)
+                if not channel:
+                        raise tornado.web.HTTPError(404)
+
+                return channel
+
+        @tornado.web.authenticated
+        def get(self, channel_id):
+                channel = self._get_channel(channel_id)
+
+                self.render("talk/confirm-hangup.html", channel=channel)
+
+        @tornado.web.authenticated
+        def post(self, channel_id):
+                channel = self._get_channel(channel_id)
+
+                # Hangup
+                channel.hangup()
+
+                self.redirect("/")
+
+
 class TalkConferencesHandler(BaseHandler):
        @tornado.web.authenticated
        def get(self):