'app-announcement-'.$row[0].',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' => 'Annoucement : '.$thisexten['description'], 'edit_url' => 'config.php?display=announcement&type='.$type.'&extdisplay='.urlencode($exten), ); } } else { return false; } } function announcement_get_config($engine) { global $ext; switch ($engine) { case 'asterisk': foreach (announcement_list() as $row) { if (! $row[6]) { $ext->add('app-announcement-'.$row[0], 's', '', new ext_gotoif('$["${CDR(disposition)}" = "ANSWERED"]','begin')); $ext->add('app-announcement-'.$row[0], 's', '', new ext_answer('')); $ext->add('app-announcement-'.$row[0], 's', '', new ext_wait('1')); } $ext->add('app-announcement-'.$row[0], 's', 'begin', new ext_noop('Playing announcement '.$row[1])); if ($row[3] || $row[7]) { // allow skip if ($row[7]) { $ext->add('app-announcement-'.$row[0], 's', '', new ext_responsetimeout(1)); } $ext->add('app-announcement-'.$row[0], 's', 'play', new ext_background($row[2].'|nm')); if ($row[7]) { $ext->add('app-announcement-'.$row[0], 's', '', new ext_waitexten('')); } if ($row[3]) { $ext->add('app-announcement-'.$row[0], '_X', '', new ext_noop('User skipped announcement')); if ($row[5]) { $ext->add('app-announcement-'.$row[0], '_X', '', new ext_gotoif('$["x${IVR_CONTEXT}" = "x"]', $row[4].':${IVR_CONTEXT},return,1')); } else { $ext->add('app-announcement-'.$row[0], '_X', '', new ext_goto($row[4])); } } if ($row[7]) { $ext->add('app-announcement-'.$row[0], $row[7], '', new ext_goto('s,play')); } } else { $ext->add('app-announcement-'.$row[0], 's', '', new ext_playback($row[2].',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[7] ? 't':'s'; if ($row[5]) { $ext->add('app-announcement-'.$row[0], $exten, '', new ext_gotoif('$["x${IVR_CONTEXT}" = "x"]', $row[4].':${IVR_CONTEXT},return,1')); if ($row[3] || $row[7]) $ext->add('app-announcement-'.$row[0], 'i', '', new ext_gotoif('$["x${IVR_CONTEXT}" = "x"]', $row[4].':${IVR_CONTEXT},return,1')); } else { $ext->add('app-announcement-'.$row[0], $exten, '', new ext_goto($row[4])); if ($row[3] || $row[7]) $ext->add('app-announcement-'.$row[0], 'i', '', new ext_goto($row[4])); } } break; } } function announcement_list() { global $db; $sql = "SELECT announcement_id, description, recording, allow_skip, post_dest, return_ivr, noanswer, repeat_msg FROM announcement ORDER BY description "; $results = $db->getAll($sql); if(DB::IsError($results)) { die_freepbx($results->getMessage()."

Error selecting from announcement"); } return $results; } function announcement_get($announcement_id) { global $db; $sql = "SELECT announcement_id, description, recording, allow_skip, post_dest, return_ivr, noanswer, repeat_msg FROM announcement WHERE announcement_id = '".addslashes($announcement_id)."'"; $row = $db->getRow($sql,DB_FETCHMODE_ASSOC); if(DB::IsError($row)) { die_freepbx($row->getMessage()."

Errpr 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, $allow_skip, $post_dest, $return_ivr, $noanswer, $repeat_msg) { global $db; $sql = "INSERT INTO announcement (description, recording, allow_skip, post_dest, return_ivr, noanswer, repeat_msg) VALUES (". "'".addslashes($description)."', ". "'".addslashes($recording)."', ". "'".($allow_skip ? 1 : 0)."', ". "'".addslashes($post_dest)."', ". "'".($return_ivr ? 1 : 0)."', ". "'".($noanswer ? 1 : 0)."', ". "'".addslashes($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 = ".addslashes($announcement_id); $result = $db->query($sql); if(DB::IsError($result)) { die_freepbx($result->getMessage().$sql); } } function announcement_edit($announcement_id, $description, $recording, $allow_skip, $post_dest, $return_ivr, $noanswer, $repeat_msg) { global $db; $sql = "UPDATE announcement SET ". "description = '".addslashes($description)."', ". "recording = '".addslashes($recording)."', ". "allow_skip = '".($allow_skip ? 1 : 0)."', ". "post_dest = '".addslashes($post_dest)."', ". "return_ivr = '".($return_ivr ? 1 : 0)."', ". "noanswer = '".($noanswer ? 1 : 0)."', ". "repeat_msg = '".addslashes($repeat_msg)."' ". "WHERE announcement_id = ".addslashes($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' => 'Announcement: '.$result['description'], 'edit_url' => 'config.php?display=announcement&type='.$type.'&extdisplay='.urlencode($thisid), ); } return $destlist; } ?>