Allow playing of internal messages
authorJoey Schulze <joey@infodrom.org>
Sun, 13 Dec 2009 13:41:48 +0000 (14:41 +0100)
committerJoey Schulze <joey@infodrom.org>
Fri, 25 Feb 2011 17:40:23 +0000 (18:40 +0100)
index.php
phone.js
phone.php

index b227cf5..fbe62a0 100644 (file)
--- a/index.php
+++ b/index.php
@@ -17,6 +17,8 @@ if (!empty($_POST['func'])) {
     $data['call'] = $_POST['call'];
   } elseif ($_POST['func'] == 'save') {
     save_call();
+  } elseif ($_POST['func'] == 'messages') {
+    $data['messages'] = read_directory('messages');
   }
   header('Content-type: application/json; charset=UTF-8');
   echo json_encode($data);
@@ -60,7 +62,8 @@ if (!empty($_POST['func'])) {
 </div>
 
 <div class="controls">
-<img src="lib/reload.png" onclick="reload()" title="Check phone box">
+<img src="lib/reload.png" onclick="reload()" title="Check phone box"><br>
+<img src="lib/config.png" onclick="toggle_messages()" title="Display configured messages" style="margin-top: 10px;">
 </div>
 
 <div class="phonecall">
@@ -71,7 +74,7 @@ if (!empty($_POST['func'])) {
 <p id="callnote"></p>
 </div>
 
-<div class="editcall">
+<div class="editcall" id="container_edit">
 <p class="title">Edit message</p>
 <div style="padding-left: 5px;">
 <form id="edit_form">
@@ -86,5 +89,12 @@ Note<br><input id="edit_note" type="text" size="31"><br>
 </div>
 </div>
 
+<div class="editcall" id="container_config" >
+<p class="title">Configured messages</p>
+<ul class="phonelist" id="internal_calls">
+<li>Loading data...</li>
+</ul>
+</div>
+
 </body>
 </html>
index 0a2a996..b249880 100644 (file)
--- a/phone.js
+++ b/phone.js
@@ -20,13 +20,18 @@ function reload()
     fetch_archive();
 }
 
+function remove_children(obj)
+{
+    while (obj.childNodes.length > 0)
+       obj.removeChild(obj.childNodes[0]);
+}
+
 function fetch_incoming_callback(data)
 {
     var calls = document.getElementById('incoming_calls');
     var div = document.getElementById('incoming');
 
-    while (calls.childNodes.length > 0)
-       calls.removeChild(calls.childNodes[0]);
+    remove_children(calls);
 
     if (data.incoming.length > 0) {
        div.style.display = '';
@@ -65,8 +70,7 @@ function fetch_archive_callback(data)
     var calls = document.getElementById('archive_calls');
     var div = document.getElementById('archive');
 
-    while (calls.childNodes.length > 0)
-       calls.removeChild(calls.childNodes[0]);
+    remove_children(calls);
 
     if (data.archive.length > 0) {
        div.style.display = '';
@@ -104,6 +108,13 @@ function play_message_callback(data)
     var date = document.getElementById('calldate');
     var note = document.getElementById('callnote');
 
+    if (data.dir == 'messages') {
+       date.innerHTML = '&nbsp;';
+       speaker.innerHTML = 'Message ' + data.call;
+       note.innerHTML = '';
+       return;
+    }
+
     var text = data.name;
     if (data.number != '0') text += ' (' + data.number + ')';
     speaker.innerHTML = text;
@@ -196,6 +207,12 @@ function menu_list_edit(e)
     ajax_request('callinfo', params, menu_list_edit_callback);
 
     e.target.parentNode.style.display = 'none';
+
+    var edit = document.getElementById('container_edit');
+    var config = document.getElementById('container_config');
+
+    edit.style.display = '';
+    config.style.display = 'none';
 }
 
 function menu_list_delete(e)
@@ -205,3 +222,34 @@ function menu_list_delete(e)
 
     e.target.parentNode.style.display = 'none';
 }
+
+function fetch_messages_callback(data)
+{
+    var calls = document.getElementById('internal_calls');
+
+    remove_children(calls);
+
+    if (data.messages.length > 0) {
+       for (var i=0; i < data.messages.length; i++) {
+           var elem = document.createElement('li');
+
+           elem.innerHTML = data.messages[i].fname;
+           elem.payload = new Array();
+           elem.payload['dir'] = 'messages';
+           elem.payload['call'] = data.messages[i].fname;
+           elem.onclick = play_message;
+           calls.appendChild(elem);
+       }
+    }
+}
+
+function toggle_messages()
+{
+    var edit = document.getElementById('container_edit');
+    var config = document.getElementById('container_config');
+
+    config.style.display = '';
+    edit.style.display = 'none';
+
+    ajax_request('messages', '', fetch_messages_callback);
+}
index dc68c44..ff8e0bd 100644 (file)
--- a/phone.php
+++ b/phone.php
@@ -75,7 +75,7 @@ function read_directory($directory)
 
   if ($dir = opendir(SPOOL_DIR . '/' . $directory)) {
     while (($filename = readdir($dir)) !== false) {
-      if (($pos = strpos($filename, '.vmsg')) !== false) {
+      if (($pos = strpos($filename, '.vmsg')) !== false || ($pos = strpos($filename, '.msg')) !== false) {
        $fname = substr($filename,0,$pos);
        $info = message_info($directory, $fname);
        $info['fname'] = $fname;
@@ -98,7 +98,13 @@ function send_call($dir, $call)
 {
   $dir = str_replace('/','x',$dir);
   $call = str_replace('/','x',$call);
-  $fname = SPOOL_DIR . '/' . $dir . '/' . $call . '.vmsg';
+
+  if ($dir == 'messages')
+    $ext = '.msg';
+  else
+    $ext = '.vmsg';
+
+  $fname = SPOOL_DIR . '/' . $dir . '/' . $call . $ext;
 
   if (!is_file($fname)) {
     printf("<html><body><h3>Anruf %s in %s nicht gefunden!</h3></body></html>", $call, $dir);