public function doConfigPageInit($page) { $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : ''; $itemid = isset($_REQUEST['itemid']) ? $_REQUEST['itemid'] : ''; switch ($action) { case "add": $_REQUEST['itemid'] = disa_add($_POST); needreload(); break; case "delete": $oldItem = disa_get($itemid); disa_del($itemid); needreload(); break; case "edit": //just delete and re-add disa_edit($itemid, $_POST); $_REQUEST['itemid'] = $itemid; needreload(); break; } }
<?php if (isset($disas)) { foreach ($disas as $d) { echo "<li><a id=\"" . ($itemid == $d['disa_id'] ? 'current' : 'std') . "\" href=\"config.php?display=" . urlencode($dispnum) . "&itemid=" . urlencode($d['disa_id']) . "\">{$d['displayname']} ({$d['disa_id']})</a></li>"; } } ?> </ul></div> <div class="content"> <?php if ($action == 'delete') { echo '<br><h3>DISA ' . $oldItem["displayname"] . ' ' . _("deleted") . '!</h3>'; } else { //get details for this time condition $thisItem = disa_get($itemid); ?> <h2><?php echo $itemid ? "DISA: " . $thisItem["displayname"] . " ({$itemid})" : _("Add DISA"); ?> </h2> <?php if ($itemid) { $delURL = $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING'] . '&action=delete'; $tlabel = sprintf(_("Delete DISA %s"), $thisItem["displayname"]); $label = '<span><img width="16" height="16" border="0" title="' . $tlabel . '" alt="" src="images/core_delete.png"/> ' . $tlabel . '</span>'; ?> <a href="<?php echo $delURL; ?>
function disa_get_config($engine) { global $ext; switch ($engine) { case "asterisk": $disalist = disa_list(); if (is_array($disalist)) { foreach ($disalist as $item) { $nopass = false; // delete it incase there was one from before (of course if it was deleted??? // this should all be done properly in class, see pinsets, but for now ... // $filename = "/etc/asterisk/disa-" . $item['disa_id'] . ".conf"; if (file_exists($filename)) { unlink($filename); } if (isset($item['pin']) && !empty($item['pin']) && strtolower($item['pin']) != 'no-password') { // Create the disa-$id.conf file $fh = fopen($filename, "w+"); $pinarr = explode(',', $item['pin']); if (count($pinarr) > 1) { $is_file = true; foreach ($pinarr as $pin) { // Don't support remote MWI, too easy for users to break. fwrite($fh, "{$pin}\n"); } fclose($fh); chmod($filename, 0660); } else { $is_file = false; } } else { $nopass = true; } $thisitem = disa_get(ltrim($item['disa_id'])); // add dialplan if ($thisitem['needconf'] == 'CHECKED') { $ext->add('disa', $item['disa_id'], '', new ext_setvar('RESCOUNT', '1')); $ext->add('disa', $item['disa_id'], 'loop', new ext_gotoif('$[ ${RESCOUNT} > 5]', 'end')); $ext->add('disa', $item['disa_id'], '', new ext_read('RRES', 'press-1', '1', ',1,3')); $ext->add('disa', $item['disa_id'], '', new ext_setvar('RESCOUNT', '$[${RESCOUNT}+1]')); $ext->add('disa', $item['disa_id'], '', new ext_gotoif('$["x${RRES}"="x"]', 'loop')); } if (!$nopass) { if ($is_file) { $ext->add('disa', $item['disa_id'], '', new ext_authenticate('/etc/asterisk/disa-' . $item['disa_id'] . '.conf')); } else { $ext->add('disa', $item['disa_id'], '', new ext_authenticate($item['pin'])); } } else { $ext->add('disa', $item['disa_id'], '', new ext_answer('')); } $ext->add('disa', $item['disa_id'], '', new ext_setvar('_DISA', 'disa^' . $item['disa_id'] . '^newcall')); $ext->add('disa', $item['disa_id'], 'newcall', new ext_setvar('_DISACONTEXT', $thisitem['context'])); $ext->add('disa', $item['disa_id'], '', new ext_setvar('_KEEPCID', 'TRUE')); if ($thisitem['hangup'] == 'CHECKED') { $ext->add('disa', $item['disa_id'], '', new ext_setvar('_HANGUP', '${TRUNK_OPTIONS}Hg')); } else { $ext->add('disa', $item['disa_id'], '', new ext_setvar('_HANGUP', '${TRUNK_OPTIONS}')); } $ext->add('disa', $item['disa_id'], '', new ext_setvar('TIMEOUT(digit)', $thisitem['digittimeout'])); $ext->add('disa', $item['disa_id'], '', new ext_setvar('TIMEOUT(response)', $thisitem['resptimeout'])); if ($item['cid']) { $ext->add('disa', $item['disa_id'], '', new ext_setvar('CALLERID(all)', $item['cid'])); } $ext->add('disa', $item['disa_id'], '', new ext_disa('no-password,disa-dial')); $ext->add('disa', $item['disa_id'], 'end', new ext_hangup('')); } $context = 'disa-dial'; $exten = '_[0-9a-zA-Z*#].'; $ext->add($context, $exten, '', new ext_noop('called ${EXTEN} in ${DISACONTEXT} by ID: ${CUT(DISA,^,2)}')); $ext->add($context, $exten, '', new ext_dial('Local/${EXTEN}@${DISACONTEXT}', '300,${HANGUP}')); // Regular Trunk Dial $ext->add($context, $exten, '', new ext_gosub('1', 's-${DIALSTATUS}')); $ext->add($context, $exten, '', new ext_goto('${CUT(DISA,^,1)},${CUT(DISA,^,2)},${CUT(DISA,^,3)}')); $exten = 's-ANSWER'; $ext->add($context, $exten, '', new ext_return()); $exten = 's-CANCEL'; $ext->add($context, $exten, '', new ext_return()); $exten = 's-BUSY'; $ext->add($context, $exten, '', new ext_playtones('busy')); $ext->add($context, $exten, '', new ext_wait('3')); $ext->add($context, $exten, '', new ext_return()); $exten = '_s-.'; $ext->add($context, $exten, '', new ext_noop('DISA Dial failed due to ${DIALSTATUS} - returning to dial tone')); $ext->add($context, $exten, '', new ext_playtones('congestion')); $ext->add($context, $exten, '', new ext_wait('3')); $ext->add($context, $exten, '', new ext_stopplaytones()); $ext->add($context, $exten, '', new ext_return()); } break; } }