'vmblast-grp,'.ltrim($result['0']).',1', 'description' => $thisgrp['description'].' <'.ltrim($result['0']).'>');
}
}
if (isset($extens))
return $extens;
else
return null;
}
function vmblast_getdest($exten) {
return array("vmblast-grp,$exten,1");
}
function vmblast_getdestinfo($dest) {
if (substr(trim($dest),0,12) == 'vmblast-grp,') {
$grp = explode(',',$dest);
$grp = $grp[1];
$thisgrp = vmblast_get($grp);
if (empty($thisgrp)) {
return array();
} else {
return array('description' => 'Voicemail Group '.$grp.': '.$thisgrp['description'],
'edit_url' => 'config.php?display=vmblast&extdisplay=GRP-'.urlencode($grp),
);
}
} else {
return false;
}
}
/* Generates dialplan for vmblast We call this with retrieve_conf
*/
function vmblast_get_config($engine) {
global $ext; // is this the best way to pass this?
switch($engine) {
case "asterisk":
$ext->addInclude('from-internal-additional','vmblast-grp');
$contextname = 'vmblast-grp';
$vmlist = vmblast_list();
if (function_exists('recordings_list')) {
$recordings_installed = true;
$got_recordings = false;
} else {
$recordings_installed = false;
}
if (is_array($vmlist)) {
foreach($vmlist as $item) {
$grpnum = ltrim($item['0']);
$grp = vmblast_get($grpnum);
$grplist = $grp['grplist'];
$ext->add($contextname, $grpnum, '', new ext_macro('user-callerid'));
$ext->add($contextname, $grpnum, '', new ext_answer(''));
$ext->add($contextname, $grpnum, '', new ext_wait('1'));
if (isset($grp['password']) && trim($grp['password']) != "" && ctype_digit(trim($grp['password']))) {
$ext->add($contextname, $grpnum, '', new ext_authenticate($grp['password']));
}
$ext->add($contextname, $grpnum, '', new ext_setvar('GRPLIST',''));
foreach ($grplist as $exten) {
$ext->add($contextname, $grpnum, '', new ext_macro('get-vmcontext',$exten));
$ext->add($contextname, $grpnum, '', new ext_setvar('GRPLIST','${GRPLIST}&'.$exten.'@${VMCONTEXT}'));
}
// Add a message and confirmation so they know what group they are in
//
if ($grp['audio_label'] == -2) {
$ext->add($contextname, $grpnum, '', new ext_goto('1','1','app-vmblast'));
} elseif ($grp['audio_label'] == -1 || !$recordings_installed) {
$ext->add($contextname, $grpnum, '', new ext_setvar('DIGITS',$grpnum));
$ext->add($contextname, $grpnum, '', new ext_goto('digits','vmblast','app-vmblast'));
} else {
if (!$got_recordings) {
$recordings = recordings_list();
$got_recordings = true;
$recording_hash = array();
foreach ($recordings as $recording) {
$recording_hash[$recording[0]] = $recording[2];
}
}
if (isset($recording_hash[$grp['audio_label']])) {
$ext->add($contextname, $grpnum, '', new ext_setvar('MSG',$recording_hash[$grp['audio_label']]));
$ext->add($contextname, $grpnum, '', new ext_goto('msg','vmblast','app-vmblast'));
} else {
$ext->add($contextname, $grpnum, '', new ext_setvar('DIGITS',$grpnum));
$ext->add($contextname, $grpnum, '', new ext_goto('digits','vmblast','app-vmblast'));
}
}
}
$contextname = 'app-vmblast';
$ext->add($contextname, 'vmblast', 'digits', new ext_execif('$["${DIGITS}" != ""]','SayDigits','${DIGITS}'));
$ext->add($contextname, 'vmblast', 'msg', new ext_execif('$["${MSG}" != ""]','Background','${MSG}'));
$ext->add($contextname, 'vmblast', '', new ext_background('if-correct-press&digits/1'));
$ext->add($contextname, 'vmblast', '', new ext_waitexten('20'));
$ext->add($contextname, 'vmblast', '', new ext_playback('sorry-youre-having-problems&goodbye'));
$ext->add($contextname, 'vmblast', '', new ext_hangup(''));
$ext->add($contextname, '1', '', new ext_vm('${GRPLIST:1},s'));
$ext->add($contextname, '1', '', new ext_hangup(''));
}
break;
}
}
function vmblast_check_extensions($exten=true) {
$extenlist = array();
if (is_array($exten) && empty($exten)) {
return $extenlist;
}
$sql = "SELECT grpnum ,description FROM vmblast ";
if (is_array($exten)) {
$sql .= "WHERE grpnum in ('".implode("','",$exten)."')";
}
$results = sql($sql,"getAll",DB_FETCHMODE_ASSOC);
foreach ($results as $result) {
$thisexten = $result['grpnum'];
$extenlist[$thisexten]['description'] = _("Voicemail Group: ").$result['description'];
$extenlist[$thisexten]['status'] = 'INUSE';
$extenlist[$thisexten]['edit_url'] = 'config.php?display=vmblast&extdisplay=GRP-'.urlencode($thisexten);
}
return $extenlist;
}
function vmblast_add($grpnum,$grplist,$description,$audio_label= -1, $password = '', $default_group=0) {
global $db;
if (is_array($grplist)) {
$xtns = $grplist;
} else {
$xtns = explode("\n",$grplist);
}
foreach ($xtns as $key => $value) {
$xtns[$key] = addslashes(trim($value));
}
// Sanity check input.
$compiled = $db->prepare("INSERT INTO vmblast_groups (grpnum, ext) values ('$grpnum',?)");
$result = $db->executeMultiple($compiled,$xtns);
if(DB::IsError($result)) {
die_freepbx($result->getDebugInfo()."
".'error adding to vmblast_groups table');
}
$sql = "INSERT INTO vmblast (grpnum, description, audio_label, password) VALUES (".$grpnum.", '".str_replace("'", "''", $description)."', '$audio_label', '".str_replace("'","''", $password)."')";
$results = sql($sql);
if ($default_group) {
sql("DELETE FROM `admin` WHERE variable = 'default_vmblast_grp'");
sql("INSERT INTO `admin` (variable, value) VALUES ('default_vmblast_grp', '$grpnum')");
} else {
sql("DELETE FROM `admin` WHERE variable = 'default_vmblast_grp' AND value = '$grpnum'");
}
return true;
}
function vmblast_del($grpnum) {
$results = sql("DELETE FROM vmblast WHERE grpnum = '$grpnum'","query");
$results = sql("DELETE FROM vmblast_groups WHERE grpnum = '$grpnum'","query");
sql("DELETE FROM `admin` WHERE variable = 'default_vmblast_grp' AND value = '$grpnum'");
}
function vmblast_list() {
$results = sql("SELECT grpnum, description FROM vmblast ORDER BY grpnum","getAll",DB_FETCHMODE_ASSOC);
foreach ($results as $result) {
if (isset($result['grpnum']) && checkRange($result['grpnum'])) {
$grps[] = array($result['grpnum'], $result['description']);
}
}
if (isset($grps))
return $grps;
else
return null;
}
function vmblast_get($grpnum) {
global $db;
$results = sql("SELECT grpnum, description, audio_label, password FROM vmblast WHERE grpnum = '$grpnum'","getRow",DB_FETCHMODE_ASSOC);
$grplist = $db->getCol("SELECT ext FROM vmblast_groups WHERE grpnum = '$grpnum'");
if(DB::IsError($grplist)) {
die_freepbx($grplist->getDebugInfo()."
".'selecting from vmblast_groups table');
}
$results['grplist'] = $grplist;
$sql = "SELECT * FROM admin WHERE variable='default_vmblast_grp' AND value='$grpnum'";
$default_group = $db->getRow($sql, DB_FETCHMODE_ASSOC);
if(DB::IsError($default_group)) {
$results['default_group'] = 0;
} else {
$results['default_group'] = empty($default_group) ? 0 : $default_group['value'];
}
return $results;
}
function vmblast_check_default($extension) {
$sql = "SELECT ext FROM vmblast_groups WHERE ext = '$extension' AND grpnum = (SELECT value FROM admin WHERE variable = 'default_vmblast_grp' limit 1)";
$results = sql($sql,"getAll");
return (count($results) ? 1 : 0);
}
function vmblast_set_default($extension, $value) {
$default_group = sql("SELECT value FROM `admin` WHERE variable = 'default_vmblast_grp' limit 1", "getOne");
if ($default_group == '') {
return false;
}
sql("DELETE FROM vmblast_groups WHERE ext = '$extension' AND grpnum = '$default_group'");
if ($value == 1) {
sql("INSERT INTO vmblast_groups (grpnum, ext) VALUES ('$default_group', '$extension')");
}
}
function vmblast_configpageinit($pagename) {
global $currentcomponent;
$action = isset($_REQUEST['action'])?$_REQUEST['action']:null;
$extdisplay = isset($_REQUEST['extdisplay'])?$_REQUEST['extdisplay']:null;
$extension = isset($_REQUEST['extension'])?$_REQUEST['extension']:null;
$tech_hardware = isset($_REQUEST['tech_hardware'])?$_REQUEST['tech_hardware']:null;
// We only want to hook 'users' or 'extensions' pages.
if ($pagename != 'users' && $pagename != 'extensions') {
return true;
}
if ($tech_hardware != null || $pagename == 'users') {
vmblast_applyhooks();
$currentcomponent->addprocessfunc('vmblast_configprocess', 8);
} elseif ($action=="add") {
// We don't need to display anything on an 'add', but we do need to handle returned data.
$currentcomponent->addprocessfunc('vmblast_configprocess', 8);
} elseif ($extdisplay != '') {
// We're now viewing an extension, so we need to display _and_ process.
vmblast_applyhooks();
$currentcomponent->addprocessfunc('vmblast_configprocess', 8);
}
}
function vmblast_applyhooks() {
global $currentcomponent;
// Add the 'process' function - this gets called when the page is loaded, to hook into
// displaying stuff on the page.
$currentcomponent->addoptlistitem('vmblast_group', '0', _("Exclude"));
$currentcomponent->addoptlistitem('vmblast_group', '1', _("Include"));
$currentcomponent->setoptlistopts('vmblast_group', 'sort', false);
$currentcomponent->addguifunc('vmblast_configpageload');
}
// This is called before the page is actually displayed, so we can use addguielem().
function vmblast_configpageload() {
global $currentcomponent;
// Init vars from $_REQUEST[]
$action = isset($_REQUEST['action']) ? $_REQUEST['action']:null;
$extdisplay = isset($_REQUEST['extdisplay']) ? $_REQUEST['extdisplay']:null;
// Don't display this stuff it it's on a 'This xtn has been deleted' page.
if ($action != 'del') {
$default_group = sql("SELECT value FROM `admin` WHERE variable = 'default_vmblast_grp'", "getOne");
$section = _("Default Group Inclusion");
if ($default_group != "") {
$in_default_vmblast_grp = vmblast_check_default($extdisplay);
$currentcomponent->addguielem($section, new gui_selectbox('in_default_vmblast_grp', $currentcomponent->getoptlist('vmblast_group'), $in_default_vmblast_grp, _('Default VMblast Group'), _('You can include or exclude this extension/user from being part of the default voicemail blast group when creating or editing. Choosing this option will be ignored if the user does not have a voicemial box.'), false));
}
}
}
function vmblast_configprocess() {
global $db;
//create vars from the request
//
$action = isset($_REQUEST['action'])?$_REQUEST['action']:null;
$ext = isset($_REQUEST['extdisplay'])?$_REQUEST['extdisplay']:null;
$extn = isset($_REQUEST['extension'])?$_REQUEST['extension']:null;
$vm_enabled = isset($_REQUEST['vm']) && $_REQUEST['vm'] == 'enabled' ? true : false;
$in_default_vmblast_grp = isset($_REQUEST['in_default_vmblast_grp'])?$_REQUEST['in_default_vmblast_grp']:false;
$extdisplay = ($ext==='') ? $extn : $ext;
if (($action == "add" || $action == "edit") && $vm_enabled) {
if (!isset($GLOBALS['abort']) || $GLOBALS['abort'] !== true) {
if ($in_default_vmblast_grp !== false) {
vmblast_set_default($extdisplay, $in_default_vmblast_grp);
}
}
} elseif ($extdisplay != '' && ($action == "del" || ($action == "edit" && !$vm_enabled))) {
$sql = "DELETE FROM vmblast_groups WHERE ext = '$extdisplay'";
sql($sql);
}
}
?>