X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=fs_selfservice%2Ffri%2Fmodules%2Fvoicemail.module;fp=fs_selfservice%2Ffri%2Fmodules%2Fvoicemail.module;h=aad14564f7b0a71d0e36cfb53e3a65bcc8c541ed;hp=0000000000000000000000000000000000000000;hb=3a17b276638200475d54201fa62566b7440e819a;hpb=46c6025ca0759b96e5bd16e7ce4b16d4df8a0988 diff --git a/fs_selfservice/fri/modules/voicemail.module b/fs_selfservice/fri/modules/voicemail.module new file mode 100644 index 000000000..aad14564f --- /dev/null +++ b/fs_selfservice/fri/modules/voicemail.module @@ -0,0 +1,805 @@ +" . _("Voicemail") . "

"; + } + + return $ret; + } + + /* + * Deletes selected voicemails and updates page + * + * @param $args + * Common arguments + */ + function navSubMenu($args) { + + global $ASTERISK_VOICEMAIL_PATH; + global $ASTERISK_VOICEMAIL_FOLDERS; + + // args + $m = getArgument($args,'m'); + $q = getArgument($args,'q'); + $current_folder = getArgument($args,'folder'); + + $context = $_SESSION['ari_user']['context']; + $extension = $_SESSION['ari_user']['extension']; + + // check for voicemail enabled or admin + if ($_SESSION['ari_user']['voicemail_enabled']!=1 || + $extension=='admin') { + return; + } + + // make folder list + $paths = split(';',$ASTERISK_VOICEMAIL_PATH); + $i = 0; + while ($ASTERISK_VOICEMAIL_FOLDERS[$i]) { + + $f = $ASTERISK_VOICEMAIL_FOLDERS[$i]['folder']; + $fn = $ASTERISK_VOICEMAIL_FOLDERS[$i]['name']; + + foreach($paths as $key => $path) { + + $path = appendPath($path,$context); + $path = appendPath($path,$extension); + + if (is_dir($path) && is_readable($path)) { + $dh = opendir($path); + while (false!== ($folder = readdir($dh))) { + + $folder_path = AppendPath($path,$folder); + + if($folder!="." && $folder!=".." && + filetype($folder_path)=='dir') { + + if ($f==$folder) { + + // get message count + $indexes = $this->getVoicemailIndex($folder_path,$q,$order,$sort); + $record_count = 0; + $record_count += $this->getVoicemailCount($indexes); + + // set current folder color + $class=''; + if ($current_folder==$folder || + ($current_folder=='' && $ASTERISK_VOICEMAIL_FOLDERS[0]['folder']==$folder)) { + $class = "class='current'"; + } + + // add folder to list + $ret .= "

+ + " . $fn . " (" . $record_count . ")" . " + +

"; + } + } + } + } + } + $i++; + } + + return $ret; + } + + /* + * Acts on the selected voicemails in the method indicated by the action and updates page + * + * @param $args + * Common arguments + */ + function msgAction($args) { + + global $ASTERISK_VOICEMAIL_FOLDERS; + + // args + $m = getArgument($args,'m'); + $a = getArgument($args,'a'); + $folder = getArgument($args,'folder'); + $q = getArgument($args,'q'); + $start = getArgument($args,'start'); + $span = getArgument($args,'span'); + $order = getArgument($args,'order'); + $sort = getArgument($args,'sort'); + + // get files + $files = array(); + foreach($_REQUEST as $key => $value) { + if (preg_match('/selected/',$key)) { + array_push($files, $value); + } + } + + if ($a=='delete') { + $this->deleteVoicemailData($files); + } + else if ($a=='move_to') { + $folder_rx = getArgument($args,'folder_rx'); + if ($folder_rx=='') { + $_SESSION['ari_error'] + = _("A folder must be selected before the message can be moved."); + } + else { + $context = $_SESSION['ari_user']['context']; + $extension = $_SESSION['ari_user']['extension']; + $this->moveVoicemailData($files, $context, $extension, $folder_rx); + } + } + else if ($a=='forward_to') { + + $mailbox_rx = getArgument($args,'mailbox_rx'); + list($context_rx,$extension_rx) = split('/',$mailbox_rx); + if ($extension_rx=='') { + $_SESSION['ari_error'] + = _("An extension must be selected before the message can be forwarded."); + } + else { + $folder_rx = $ASTERISK_VOICEMAIL_FOLDERS[0]['folder']; + $this->moveVoicemailData($files, $context_rx, $extension_rx, $folder_rx); + } + } + + // redirect to see updated page + $ret .= " + + + "; + + return $ret; + } + + /* + * Displays stats page + * + * @param $args + * Common arguments + */ + function display($args) { + + global $ASTERISK_VOICEMAIL_CONF; + global $ASTERISK_VOICEMAIL_PATH; + global $ASTERISK_VOICEMAIL_FOLDERS; + global $AJAX_PAGE_REFRESH_ENABLE; + + $voicemail_audio_format = $_COOKIE['ari_voicemail_audio_format']; + + $display = new DisplaySearch(); + + // args + $m = getArgument($args,'m'); + $f = getArgument($args,'f'); + $q = getArgument($args,'q'); + $start = getArgument($args,'start'); + $span = getArgument($args,'span'); + $order = getArgument($args,'order'); + $sort = getArgument($args,'sort'); + + $start = $start=='' ? 0 : $start; + $span = $span=='' ? 15 : $span; + $order = $order=='' ? 'calldate' : $order; + $sort = $sort=='' ? 'desc' : $sort; + + $paths = split(';',$ASTERISK_VOICEMAIL_PATH); + + $displayname = $_SESSION['ari_user']['displayname']; + $extension = $_SESSION['ari_user']['extension']; + $context = $_SESSION['ari_user']['context']; + $folder = getArgument($args,'folder'); + if (!$folder) { + $folder = $ASTERISK_VOICEMAIL_FOLDERS[0]['folder']; + } + + // get data + $data = array(); + foreach($paths as $key => $path) { + $path = fixPathSlash($path); + $vm_path = $path . "$context/$extension/$folder"; + $indexes = $this->getVoicemailIndex($vm_path,$q,$order,$sort); + $record_count += $this->getVoicemailCount($indexes); + $data = array_merge($data,$this->getVoicemailData($indexes,$start,$span)); + } + + // build controls + + // get the recordings from the asterisk server + $filter = ''; + $recursiveMax = 1; + $recursiveCount = 0; + $files = array(); + foreach($paths as $key => $path) { + $path_files = GetFiles($path,$filter,$recursiveMax,$recursiveCount); + $files = array_merge($files,$path_files); + } + + // move options + $i=0; + while ($ASTERISK_VOICEMAIL_FOLDERS[$i]) { + $cf = $ASTERISK_VOICEMAIL_FOLDERS[$i]['folder']; + $fn = $ASTERISK_VOICEMAIL_FOLDERS[$i]['name']; + if ($cf!=$folder) { + $move_options .= "