.
//
// Copyright 2006 Greg MacLellan
//
function announcement_destinations() {
// return an associative array with destination and description
$extens = array();
foreach (announcement_list() as $row) {
$extens[] = array('destination' => 'app-announcement-'.$row['announcement_id'].',s,1', 'description' => $row[1]);
}
return $extens;
}
function announcement_getdest($exten) {
return array('app-announcement-'.$exten.',s,1');
}
function announcement_getdestinfo($dest) {
global $active_modules;
if (substr(trim($dest),0,17) == 'app-announcement-') {
$exten = explode(',',$dest);
$exten = substr($exten[0],17);
$thisexten = announcement_get($exten);
if (empty($thisexten)) {
return array();
} else {
$type = isset($active_modules['announcement']['type'])?$active_modules['announcement']['type']:'setup';
return array('description' => sprintf(_("Announcement: %s"),$thisexten['description']),
'edit_url' => 'config.php?display=announcement&type='.$type.'&extdisplay='.urlencode($exten),
);
}
} else {
return false;
}
}
function announcement_recordings_usage($recording_id) {
global $active_modules;
$results = sql("SELECT announcement_id, description FROM announcement WHERE recording_id = '$recording_id'","getAll",DB_FETCHMODE_ASSOC);
if (empty($results)) {
return array();
} else {
$type = isset($active_modules['announcement']['type'])?$active_modules['announcement']['type']:'setup';
foreach ($results as $result) {
$usage_arr[] = array(
'url_query' => 'config.php?display=announcement&type='.$type.'&extdisplay='.urlencode($result['announcement_id']),
'description' => sprintf(_("Announcement: %s"),$result['description']),
);
}
return $usage_arr;
}
}
function announcement_get_config($engine) {
global $ext;
switch ($engine) {
case 'asterisk':
foreach (announcement_list() as $row) {
$recording = recordings_get_file($row['recording_id']);
if (! $row['noanswer']) {
$ext->add('app-announcement-'.$row['announcement_id'], 's', '', new ext_gotoif('$["${CDR(disposition)}" = "ANSWERED"]','begin'));
$ext->add('app-announcement-'.$row['announcement_id'], 's', '', new ext_answer(''));
$ext->add('app-announcement-'.$row['announcement_id'], 's', '', new ext_wait('1'));
}
$ext->add('app-announcement-'.$row['announcement_id'], 's', 'begin', new ext_noop('Playing announcement '.$row['description']));
if ($row['allow_skip'] || $row['repeat_msg']) {
// allow skip
if ($row['repeat_msg']) {
$ext->add('app-announcement-'.$row['announcement_id'], 's', '', new ext_responsetimeout(1));
}
$ext->add('app-announcement-'.$row['announcement_id'], 's', 'play', new ext_background($recording.',nm'));
if ($row['repeat_msg']) {
$ext->add('app-announcement-'.$row['announcement_id'], 's', '', new ext_waitexten(''));
}
if ($row['allow_skip']) {
$ext->add('app-announcement-'.$row['announcement_id'], '_X', '', new ext_noop('User skipped announcement'));
if ($row['return_ivr']) {
$ext->add('app-announcement-'.$row['announcement_id'], '_X', '', new ext_gotoif('$["x${IVR_CONTEXT}" = "x"]', $row['post_dest'].':${IVR_CONTEXT},return,1'));
} else {
$ext->add('app-announcement-'.$row['announcement_id'], '_X', '', new ext_goto($row['post_dest']));
}
}
if ($row['repeat_msg']) {
$ext->add('app-announcement-'.$row['announcement_id'], $row['repeat_msg'], '', new ext_goto('s,play'));
}
} else {
$ext->add('app-announcement-'.$row['announcement_id'], 's', '', new ext_playback($recording.',noanswer'));
}
// if repeat_msg enabled then set exten to t to allow for the key to be pressed, otherwise play message and go
$exten = $row['repeat_msg'] ? 't':'s';
if ($row['return_ivr']) {
$ext->add('app-announcement-'.$row['announcement_id'], $exten, '', new ext_gotoif('$["x${IVR_CONTEXT}" = "x"]', $row['post_dest'].':${IVR_CONTEXT},return,1'));
if ($row['allow_skip'] || $row['repeat_msg'])
$ext->add('app-announcement-'.$row['announcement_id'], 'i', '', new ext_gotoif('$["x${IVR_CONTEXT}" = "x"]', $row['post_dest'].':${IVR_CONTEXT},return,1'));
} else {
$ext->add('app-announcement-'.$row['announcement_id'], $exten, '', new ext_goto($row['post_dest']));
if ($row['allow_skip'] || $row['repeat_msg'])
$ext->add('app-announcement-'.$row['announcement_id'], 'i', '', new ext_goto($row['post_dest']));
}
}
break;
}
}
function announcement_list() {
global $db;
$sql = "SELECT announcement_id, description, recording_id, allow_skip, post_dest, return_ivr, noanswer, repeat_msg FROM announcement ORDER BY description ";
$results = $db->getAll($sql, DB_FETCHMODE_ASSOC);
if(DB::IsError($results)) {
die_freepbx($results->getMessage()."
Error selecting from announcement");
}
// Make array backward compatible.
$count = 0;
foreach($results as $item) {
$results[$count][0] = $item['announcement_id'];
$results[$count][1] = $item['description'];
$results[$count][2] = $item['recording_id'];
$results[$count][3] = $item['allow_skip'];
$results[$count][4] = $item['post_dest'];
$results[$count][5] = $item['return_ivr'];
$results[$count][6] = $item['noanswer'];
$results[$count][7] = $item['repeat_msg'];
$count++;
}
return $results;
}
function announcement_get($announcement_id) {
global $db;
$sql = "SELECT announcement_id, description, recording_id, allow_skip, post_dest, return_ivr, noanswer, repeat_msg FROM announcement WHERE announcement_id = '".$db->escapeSimple($announcement_id)."'";
$row = $db->getRow($sql,DB_FETCHMODE_ASSOC);
if(DB::IsError($row)) {
die_freepbx($row->getMessage()."
Error selecting row from announcement");
}
// Added Associative query above but put positional indexes back to maintain backward compatibility
//
$i = 0;
foreach ($row as $item) {
$row[$i] = $item;
$i++;
}
return $row;
}
function announcement_add($description, $recording_id, $allow_skip, $post_dest, $return_ivr, $noanswer, $repeat_msg) {
global $db;
$sql = "INSERT INTO announcement (description, recording_id, allow_skip, post_dest, return_ivr, noanswer, repeat_msg) VALUES (".
"'".$db->escapeSimple($description)."', ".
"'".$recording_id."', ".
"'".($allow_skip ? 1 : 0)."', ".
"'".$db->escapeSimple($post_dest)."', ".
"'".($return_ivr ? 1 : 0)."', ".
"'".($noanswer ? 1 : 0)."', ".
"'".$db->escapeSimple($repeat_msg)."')";
$result = $db->query($sql);
if(DB::IsError($result)) {
die_freepbx($result->getMessage().$sql);
}
}
function announcement_delete($announcement_id) {
global $db;
$sql = "DELETE FROM announcement WHERE announcement_id = ".$db->escapeSimple($announcement_id);
$result = $db->query($sql);
if(DB::IsError($result)) {
die_freepbx($result->getMessage().$sql);
}
}
function announcement_edit($announcement_id, $description, $recording_id, $allow_skip, $post_dest, $return_ivr, $noanswer, $repeat_msg) {
global $db;
$sql = "UPDATE announcement SET ".
"description = '".$db->escapeSimple($description)."', ".
"recording_id = '".$recording_id."', ".
"allow_skip = '".($allow_skip ? 1 : 0)."', ".
"post_dest = '".$db->escapeSimple($post_dest)."', ".
"return_ivr = '".($return_ivr ? 1 : 0)."', ".
"noanswer = '".($noanswer ? 1 : 0)."', ".
"repeat_msg = '".$db->escapeSimple($repeat_msg)."' ".
"WHERE announcement_id = ".$db->escapeSimple($announcement_id);
$result = $db->query($sql);
if(DB::IsError($result)) {
die_freepbx($result->getMessage().$sql);
}
}
function announcement_check_destinations($dest=true) {
global $active_modules;
$destlist = array();
if (is_array($dest) && empty($dest)) {
return $destlist;
}
$sql = "SELECT announcement_id, post_dest, description FROM announcement ";
if ($dest !== true) {
$sql .= "WHERE post_dest in ('".implode("','",$dest)."')";
}
$results = sql($sql,"getAll",DB_FETCHMODE_ASSOC);
$type = isset($active_modules['announcement']['type'])?$active_modules['announcement']['type']:'setup';
foreach ($results as $result) {
$thisdest = $result['post_dest'];
$thisid = $result['announcement_id'];
$destlist[] = array(
'dest' => $thisdest,
'description' => sprintf(_("Announcement: %s"),$result['description']),
'edit_url' => 'config.php?display=announcement&type='.$type.'&extdisplay='.urlencode($thisid),
);
}
return $destlist;
}
?>