From c5c7c6c010a32a1cbc281b8e9f555b3db16c7e80 Mon Sep 17 00:00:00 2001 From: Joey Schulze Date: Sat, 12 Dec 2009 01:05:33 +0100 Subject: [PATCH] Initial implementation --- index.php | 49 +++++++++++++++++++++++-- phone.css | 6 ---- phone.js | 68 +++++++++++++++++++++++++++++++++++ phone.php | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 220 insertions(+), 9 deletions(-) create mode 100644 phone.js create mode 100644 phone.php diff --git a/index.php b/index.php index 7c08877..579282b 100644 --- a/index.php +++ b/index.php @@ -1,3 +1,22 @@ + Infodrom Phone Answering Machine @@ -5,13 +24,37 @@ - + - +
-Loading data... +
+ +
+
+

Incoming Calls

+
    +
  • Loading data...
  • +
+
+ +
+

Archived Calls

+
    +
  • Loading data...
  • +
+
+ +
+ +
+

Play message

+

 

+ +

 

+

diff --git a/phone.css b/phone.css index cf32ead..e69de29 100644 --- a/phone.css +++ b/phone.css @@ -1,6 +0,0 @@ -body { - font-family: Verdana, Helvetica, Arial, sans-serif; - font-size: 10px; - background-color: #f7f7f7; - color: #000000; -} diff --git a/phone.js b/phone.js new file mode 100644 index 0000000..ad7f6ae --- /dev/null +++ b/phone.js @@ -0,0 +1,68 @@ +function page_init() +{ + var frame = document.getElementById('phonecall'); + frame.src = ''; + fetch_incoming(); +} + +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]); + + if (data.incoming.length > 0) { + div.style.display = ''; + + for (var i=0; i < data.incoming.length; i++) { + var elem = document.createElement('li'); + var text = data.incoming[i].date + ', '; + if (data.incoming[i].name == '*** Unknown ***' && data.incoming[i].number != '0') + text += data.incoming[i].number; + else + text += data.incoming[i].name; + text += ', ' + data.incoming[i].length; + + elem.innerHTML = text; + elem.payload = new Array(); + elem.payload['dir'] = 'incoming'; + elem.payload['fname'] = data.incoming[i].fname; + elem.onclick = play_message; + calls.appendChild(elem); + } + } else { + div.style.display = 'none'; + } +} + +function fetch_incoming() +{ + ajax_request('incoming', '', fetch_incoming_callback); +} + +function play_message_callback(data) +{ + var speaker = document.getElementById('callspeaker'); + var date = document.getElementById('calldate'); + var note = document.getElementById('callnote'); + + Debug.ObjDump(data); + + var text = data.name; + if (data.number != '0') text += ' (' + data.number + ')'; + speaker.innerHTML = text; + date.innerHTML = data.date + ', ' + data.length; + note.innerHTML = data.note; +} + +function play_message(event) +{ + Debug.write('Request ' + event.originalTarget.payload['fname'] + ' in ' + event.originalTarget.payload['dir']); + + var frame = document.getElementById('phonecall'); + var parms = 'dir='+event.originalTarget.payload['dir']+'&call='+event.originalTarget.payload['fname']; + ajax_request('callinfo', parms, play_message_callback); + // frame.src = 'index.php?'+parms; +} diff --git a/phone.php b/phone.php new file mode 100644 index 0000000..c8f7381 --- /dev/null +++ b/phone.php @@ -0,0 +1,106 @@ +

Anruf %s in %s nicht gefunden!

", $call, $dir); + return; + } + + if (($p = popen('vboxtoau < ' . $fname, 'r')) === false) { + printf("

Anruf %s in %s konnte geoeffnet werden!

", $call, $dir); + return; + } + + header(sprintf('Content-disposition: inline; filename="%s.au"', $call)); + header('Content-Type: audio/basic'); + header("Cache-Control: "); + header("Pragma: "); + sleep(1); + fpassthru($p); + + pclose($p); +} + +?> \ No newline at end of file -- 2.20.1