示例#1
0
 function core_did_create_update($did_vars)
 {
     $did_create['extension'] = isset($did_vars['extension']) ? $did_vars['extension'] : '';
     $did_create['cidnum'] = isset($did_vars['cidnum']) ? $did_vars['cidnum'] : '';
     if (count(core_did_get($did_create['extension'], $did_create['$cidnum']))) {
         return core_did_edit_properties($did_vars);
         //already exists so just edit properties
     } else {
         $did_create['faxexten'] = isset($did_vars['faxexten']) ? $did_vars['faxexten'] : '';
         $did_create['faxemail'] = isset($did_vars['faxemail']) ? $did_vars['faxemail'] : '';
         $did_create['answer'] = isset($did_vars['answer']) ? $did_vars['answer'] : '0';
         $did_create['wait'] = isset($did_vars['wait']) ? $did_vars['wait'] : '0';
         $did_create['privacyman'] = isset($did_vars['privacyman']) ? $did_vars['privacyman'] : '';
         $did_create['alertinfo'] = isset($did_vars['alertinfo']) ? $did_vars['alertinfo'] : '';
         $did_create['ringing'] = isset($did_vars['ringing']) ? $did_vars['ringing'] : '';
         $did_create['mohclass'] = isset($did_vars['mohclass']) ? $did_vars['mohclass'] : 'default';
         $did_create['description'] = isset($did_vars['description']) ? $did_vars['description'] : '';
         $did_create['grppre'] = isset($did_vars['grppre']) ? $did_vars['grppre'] : '';
         $did_create['delay_answer'] = isset($did_vars['delay_answer']) ? $did_vars['delay_answer'] : '0';
         $did_create['pricid'] = isset($did_vars['pricid']) ? $did_vars['pricid'] : '';
         $did_create['channel'] = isset($did_vars['channel']) ? $did_vars['channel'] : '';
         // pre 2.4
         $did_dest = isset($did_vars['destination']) ? $did_vars['destination'] : '';
         return core_did_add($did_vars, $did_dest);
     }
 }
示例#2
0
$rnavsort = isset($_REQUEST['rnavsort']) ? $_REQUEST['rnavsort'] : 'description';
$didfilter = isset($_REQUEST['didfilter']) ? $_REQUEST['didfilter'] : '';
$tabindex = 0;
if (isset($_REQUEST['submitclear']) && isset($_REQUEST['goto0'])) {
    $_REQUEST[$_REQUEST['goto0'] . '0'] = '';
}
if (isset($_REQUEST['extension']) && isset($_REQUEST['cidnum'])) {
    $extdisplay = $_REQUEST['extension'] . "/" . $_REQUEST['cidnum'];
}
//update db if submiting form
switch ($action) {
    case 'addIncoming':
        //create variables from request
        extract($_REQUEST);
        //add details to the 'incoming' table
        if (core_did_add($_REQUEST)) {
            needreload();
            redirect_standard('extdisplay', 'extension', 'cidnum', 'didfilter', 'rnavsort');
        }
        break;
    case 'delIncoming':
        $extarray = explode('/', $extdisplay, 2);
        core_did_del($extarray[0], $extarray[1]);
        needreload();
        redirect_standard('didfilter', 'rnavsort');
        break;
    case 'edtIncoming':
        $extarray = explode('/', $old_extdisplay, 2);
        if (core_did_edit($extarray[0], $extarray[1], $_REQUEST)) {
            needreload();
            redirect_standard('extdisplay', 'extension', 'cidnum', 'didfilter', 'rnavsort');
示例#3
0
 /**
  * Add user (Part of Users/Devices)
  * @param int $extension The exten numer
  * @param array $settings  Array of settings to pass in
  * @param bool $editmode  If in edit mode (So that the AsteriskDB is not destroyed)
  */
 public function addUser($extension, $settings, $editmode = false)
 {
     if (trim($extension) == '') {
         throw new \Exception(_("You must put in an extension (or user) number"));
     }
     //ensure this id is not already in use
     $extens = $this->listUsers();
     if (is_array($extens)) {
         foreach ($extens as $exten) {
             if ($exten[0] === $extension) {
                 throw new \Exception(sprintf(_("This user/extension %s is already in use"), $extension));
             }
         }
     }
     $settings['newdid_name'] = isset($settings['newdid_name']) ? $settings['newdid_name'] : '';
     $settings['newdid'] = isset($settings['newdid']) ? preg_replace("/[^0-9._XxNnZz\\[\\]\\-\\+]/", "", trim($settings['newdid'])) : '';
     $settings['newdidcid'] = isset($settings['newdidcid']) ? trim($settings['newdidcid']) : '';
     if (!preg_match('/^priv|^block|^unknown|^restrict|^unavail|^anonym|^withheld/', strtolower($settings['newdidcid']))) {
         $settings['newdidcid'] = preg_replace("/[^0-9._XxNnZz\\[\\]\\-\\+]/", "", $settings['newdidcid']);
     }
     if ($settings['newdid'] != '' || $settings['newdidcid'] != '') {
         $existing = $this->getDID($settings['newdid'], $settings['newdidcid']);
         if (!empty($existing)) {
             throw new \Exception(sprintf(_("A route with this DID/CID: %s/%s already exists"), $existing['extension'], $existing['cidnum']));
         }
     }
     $settings['sipname'] = isset($settings['sipname']) ? preg_replace("/\\s/", "", trim($settings['sipname'])) : '';
     if (!$this->checkSipnameInUse($settings['sipname'], $extension)) {
         throw new \Exception(_("This sipname: {$sipname} is already in use"));
     }
     // strip the ugly return of the gui radio funciton which comes back as "recording_out_internal=always" for example
     // TODO this should be done with a hook
     if (isset($settings['recording_in_external'])) {
         $rec_tmp = explode('=', $settings['recording_in_external'], 2);
         $settings['recording_in_external'] = count($rec_tmp) == 2 ? $rec_tmp[1] : $rec_tmp[0];
     } else {
         $settings['recording_in_external'] = 'dontcare';
     }
     if (isset($settings['recording_out_external'])) {
         $rec_tmp = explode('=', $settings['recording_out_external'], 2);
         $settings['recording_out_external'] = count($rec_tmp) == 2 ? $rec_tmp[1] : $rec_tmp[0];
     } else {
         $settings['recording_out_external'] = 'dontcare';
     }
     if (isset($settings['recording_in_internal'])) {
         $rec_tmp = explode('=', $settings['recording_in_internal'], 2);
         $settings['recording_in_internal'] = count($rec_tmp) == 2 ? $rec_tmp[1] : $rec_tmp[0];
     } else {
         $settings['recording_in_internal'] = 'dontcare';
     }
     if (isset($settings['recording_out_internal'])) {
         $rec_tmp = explode('=', $settings['recording_out_internal'], 2);
         $settings['recording_out_internal'] = count($rec_tmp) == 2 ? $rec_tmp[1] : $rec_tmp[0];
     } else {
         $settings['recording_out_internal'] = 'dontcare';
     }
     if (isset($settings['recording_ondemand'])) {
         $rec_tmp = explode('=', $settings['recording_ondemand'], 2);
         $settings['recording_ondemand'] = count($rec_tmp) == 2 ? $rec_tmp[1] : $rec_tmp[0];
     } else {
         $settings['recording_ondemand'] = 'disabled';
     }
     //if voicemail is enabled, set the box@context to use
     //havn't checked but why is voicemail needed on users anyway?  Doesn't exactly make it modular !
     //TODO use a hook here
     if ($this->FreePBX->Modules->moduleHasMethod('Voicemail', 'getMailbox')) {
         $vmbox = $this->FreePBX->Voicemail->getMailbox($extension);
         if ($vmbox == null) {
             $settings['voicemail'] = "novm";
         } else {
             $settings['voicemail'] = $vmbox['vmcontext'];
         }
     }
     $sql = "INSERT INTO users (extension,password,name,voicemail,ringtimer,noanswer,recording,outboundcid,sipname,noanswer_cid,busy_cid,chanunavail_cid,noanswer_dest,busy_dest,chanunavail_dest) " . "VALUES (:extension, :password, :name, :voicemail, :ringtimer, :noanswer, :recording, :outboundcid, :sipname, :noanswer_cid, :busy_cid, :chanunavail_cid, :noanswer_dest, :busy_dest, :chanunavail_dest)";
     $sth = $this->database->prepare($sql);
     try {
         $sth->execute(array("extension" => $extension, "password" => isset($settings['password']) ? $settings['password'] : '', "name" => isset($settings['name']) ? preg_replace(array('/</', '/>/'), array('(', ')'), trim($settings['name'])) : '', "voicemail" => isset($settings['voicemail']) ? $settings['voicemail'] : 'default', "ringtimer" => isset($settings['ringtimer']) ? $settings['ringtimer'] : '', "noanswer" => isset($settings['noanswer']) ? $settings['noanswer'] : '', "recording" => isset($settings['recording']) ? $settings['recording'] : '', "outboundcid" => isset($settings['outboundcid']) ? $settings['outboundcid'] : '', "sipname" => isset($settings['sipname']) ? $settings['sipname'] : '', "noanswer_cid" => isset($settings['noanswer_cid']) ? $settings['noanswer_cid'] : "", "busy_cid" => isset($settings['busy_cid']) ? $settings['busy_cid'] : "", "chanunavail_cid" => isset($settings['chanunavail_cid']) ? $settings['chanunavail_cid'] : "", "noanswer_dest" => !empty($settings['noanswer_dest']) && !empty($settings[$settings[$settings['noanswer_dest']] . '0']) && $settings[$settings[$settings['noanswer_dest']] . '0'] != '' ? $settings[$settings[$settings['noanswer_dest']] . '0'] : "", "busy_dest" => !empty($settings['busy_dest']) && !empty($settings[$settings[$settings['busy_dest']] . '1']) && $settings[$settings[$settings['busy_dest']] . '1'] != '' ? $settings[$settings[$settings['busy_dest']] . '1'] : "", "chanunavail_dest" => !empty($settings['chanunavail_dest']) && !empty($settings[$settings[$settings['chanunavail_dest']] . '2']) && $settings[$settings[$settings['chanunavail_dest']] . '2'] != '' ? $settings[$settings[$settings['chanunavail_dest']] . '2'] : ""));
     } catch (\Exception $e) {
         throw new \Exception("Unable to insert into users: " . addSlashes($e->getMessage()));
     }
     //write to astdb
     $astman = $this->FreePBX->astman;
     $fpc = $this->FreePBX->Config();
     if ($astman->connected()) {
         $astman->database_put("AMPUSER", $extension . "/password", isset($settings['password']) ? $settings['password'] : '');
         $astman->database_put("AMPUSER", $extension . "/ringtimer", isset($settings['ringtimer']) ? $settings['ringtimer'] : $fpc->get('RINGTIMER'));
         $astman->database_put("AMPUSER", $extension . "/cfringtimer", isset($settings['cfringtimer']) ? $settings['cfringtimer'] : $fpc->get('CFRINGTIMERDEFAULT'));
         $astman->database_put("AMPUSER", $extension . "/concurrency_limit", isset($settings['concurrency_limit']) ? $settings['concurrency_limit'] : $fpc->get('CONCURRENCYLIMITDEFAULT'));
         $astman->database_put("AMPUSER", $extension . "/noanswer", isset($settings['noanswer']) ? $settings['noanswer'] : '');
         $astman->database_put("AMPUSER", $extension . "/recording", isset($settings['recording']) ? $settings['recording'] : '');
         $astman->database_put("AMPUSER", $extension . "/outboundcid", isset($settings['outboundcid']) ? $settings['outboundcid'] : '');
         $astman->database_put("AMPUSER", $extension . "/cidname", isset($settings['name']) ? $settings['name'] : '');
         $astman->database_put("AMPUSER", $extension . "/cidnum", isset($settings['cid_masquerade']) && trim($settings['cid_masquerade']) != "" ? trim($settings['cid_masquerade']) : $extension);
         $astman->database_put("AMPUSER", $extension . "/voicemail", isset($settings['voicemail']) ? $settings['voicemail'] : '');
         //TODO need to be in paging soon
         $astman->database_put("AMPUSER", $extension . "/answermode", isset($settings['answermode']) ? $settings['answermode'] : 'disabled');
         $astman->database_put("AMPUSER", $extension . "/intercom", isset($settings['intercom']) ? $settings['intercom'] : 'enabled');
         $astman->database_put("AMPUSER", $extension . "/recording/in/external", $settings['recording_in_external']);
         $astman->database_put("AMPUSER", $extension . "/recording/out/external", $settings['recording_out_external']);
         $astman->database_put("AMPUSER", $extension . "/recording/in/internal", $settings['recording_in_internal']);
         $astman->database_put("AMPUSER", $extension . "/recording/out/internal", $settings['recording_out_internal']);
         $astman->database_put("AMPUSER", $extension . "/recording/ondemand", $settings['recording_ondemand']);
         $astman->database_put("AMPUSER", $extension . "/recording/priority", isset($settings['recording_priority']) ? $settings['recording_priority'] : '10');
         // If not set then we are using system default so delete the tree all-together
         //
         if (isset($settings['dialopts'])) {
             $astman->database_put("AMPUSER", $extension . "/dialopts", $settings['dialopts']);
         } else {
             $astman->database_del("AMPUSER", $extension . "/dialopts");
         }
         $call_screen = isset($settings['call_screen']) ? $settings['call_screen'] : '0';
         switch ($call_screen) {
             case '0':
                 $astman->database_del("AMPUSER", $extension . "/screen");
                 break;
             case 'nomemory':
                 $astman->database_put("AMPUSER", $extension . "/screen", 'nomemory');
                 break;
             case 'memory':
                 $astman->database_put("AMPUSER", $extension . "/screen", 'memory');
                 break;
             default:
                 break;
         }
         if (!$editmode) {
             $astman->database_put("AMPUSER", $extension . "/device", isset($settings['device']) ? $settings['device'] : $extension);
         }
         if (trim($settings['callwaiting']) == 'enabled') {
             $astman->database_put("CW", $extension, "ENABLED");
         } else {
             if (trim($settings['callwaiting']) == 'disabled') {
                 $astman->database_del("CW", $extension);
             }
         }
         if (trim($settings['pinless']) == 'enabled') {
             $astman->database_put("AMPUSER", $extension . "/pinless", "NOPASSWD");
         } else {
             if (trim($settings['pinless']) == 'disabled') {
                 $astman->database_del("AMPUSER", $extension . "/pinless");
             }
         }
     } else {
         die_freepbx("Cannot connect to Asterisk Manager with " . $this->FreePBX->Config->get("AMPMGRUSER") . "/" . $this->FreePBX->Config->get("AMPMGRPASS"));
     }
     // OK - got this far, if they entered a new inbound DID/CID let's deal with it now
     // remember - in the nice and ugly world of this old code, $vars has been extracted
     // newdid and newdidcid
     // Now if $newdid is set we need to add the DID to the routes
     //
     if ($settings['newdid'] != '' || $settings['newdidcid'] != '') {
         $did_dest = 'from-did-direct,' . $extension . ',1';
         $did_vars = array();
         $did_vars['extension'] = $settings['newdid'];
         $did_vars['cidnum'] = $settings['newdidcid'];
         $did_vars['privacyman'] = '';
         $did_vars['alertinfo'] = '';
         $did_vars['ringing'] = '';
         $did_vars['reversal'] = '';
         $did_vars['mohclass'] = 'default';
         $did_vars['description'] = $settings['newdid_name'];
         $did_vars['grppre'] = '';
         $did_vars['delay_answer'] = '0';
         $did_vars['pricid'] = '';
         core_did_add($did_vars, $did_dest);
     }
     $this->getUserCache = array();
     $this->listUsersCache = array();
     return true;
 }
示例#4
0
function core_users_add($vars, $editmode = false)
{
    extract($vars);
    global $db;
    global $amp_conf;
    global $astman;
    $thisexten = isset($thisexten) ? $thisexten : '';
    if (trim($extension) == '') {
        echo "<script>javascript:alert('" . _("You must put in an extension (or user) number") . "');</script>";
        return false;
    }
    //ensure this id is not already in use
    $extens = core_users_list();
    if (is_array($extens)) {
        foreach ($extens as $exten) {
            if ($exten[0] === $extension) {
                echo "<script>javascript:alert('" . sprintf(_("This user/extension %s is already in use"), $extension) . "');</script>";
                return false;
            }
        }
    }
    $newdid_name = isset($newdid_name) ? $db->escapeSimple($newdid_name) : '';
    $newdid = isset($newdid) ? $newdid : '';
    $newdid = preg_replace("/[^0-9._XxNnZz\\[\\]\\-\\+]/", "", trim($newdid));
    $newdidcid = isset($newdidcid) ? trim($newdidcid) : '';
    if (!preg_match('/^priv|^block|^unknown|^restrict|^unavail|^anonym/', strtolower($newdidcid))) {
        $newdidcid = preg_replace("/[^0-9._XxNnZz\\[\\]\\-\\+]/", "", $newdidcid);
    }
    // Well more ugliness since the javascripts are already in here
    if ($newdid != '' || $newdidcid != '') {
        $existing = core_did_get($newdid, $newdidcid);
        if (!empty($existing)) {
            echo "<script>javascript:alert('" . sprintf(_("A route with this DID/CID: %s/%s already exists"), $existing['extension'], $existing['cidnum']) . "')</script>";
            return false;
        }
    }
    $sipname = preg_replace("/\\s/", "", trim($sipname));
    if (!core_sipname_check($sipname, $extension)) {
        echo "<script>javascript:alert('" . _("This sipname: {$sipname} is already in use") . "');</script>";
        return false;
    }
    //build the recording variable
    $recording = "out=" . $record_out . "|in=" . $record_in;
    //escape quotes and any other bad chars:
    if (!get_magic_quotes_gpc()) {
        $outboundcid = $db->escapeSimple($outboundcid);
        $name = $db->escapeSimple($name);
    }
    //if voicemail is enabled, set the box@context to use
    //havn't checked but why is voicemail needed on users anyway?  Doesn't exactly make it modular !
    if (function_exists('voicemail_mailbox_get')) {
        $vmbox = voicemail_mailbox_get($extension);
        if ($vmbox == null) {
            $voicemail = "novm";
        } else {
            $voicemail = $vmbox['vmcontext'];
        }
    }
    // Clean replace any <> with () in display name - should have javascript stopping this but ...
    //
    $name = preg_replace(array('/</', '/>/'), array('(', ')'), trim($name));
    //insert into users table
    $sql = "INSERT INTO users (extension,password,name,voicemail,ringtimer,noanswer,recording,outboundcid,sipname) values (\"";
    $sql .= "{$extension}\", \"";
    $sql .= isset($password) ? $password : '';
    $sql .= "\", \"";
    $sql .= isset($name) ? $name : '';
    $sql .= "\", \"";
    $sql .= isset($voicemail) ? $voicemail : 'default';
    $sql .= "\", \"";
    $sql .= isset($ringtimer) ? $ringtimer : '';
    $sql .= "\", \"";
    $sql .= isset($noanswer) ? $noanswer : '';
    $sql .= "\", \"";
    $sql .= isset($recording) ? $recording : '';
    $sql .= "\", \"";
    $sql .= isset($outboundcid) ? $outboundcid : '';
    $sql .= "\", \"";
    $sql .= isset($sipname) ? $sipname : '';
    $sql .= "\")";
    sql($sql);
    //write to astdb
    if ($astman) {
        $cid_masquerade = isset($cid_masquerade) && trim($cid_masquerade) != "" ? trim($cid_masquerade) : $extension;
        $astman->database_put("AMPUSER", $extension . "/password", isset($password) ? $password : '');
        $astman->database_put("AMPUSER", $extension . "/ringtimer", isset($ringtimer) ? $ringtimer : '');
        $astman->database_put("AMPUSER", $extension . "/noanswer", isset($noanswer) ? $noanswer : '');
        $astman->database_put("AMPUSER", $extension . "/recording", isset($recording) ? $recording : '');
        $astman->database_put("AMPUSER", $extension . "/outboundcid", isset($outboundcid) ? "\"" . $outboundcid . "\"" : '');
        $astman->database_put("AMPUSER", $extension . "/cidname", isset($name) ? "\"" . $name . "\"" : '');
        $astman->database_put("AMPUSER", $extension . "/cidnum", $cid_masquerade);
        $astman->database_put("AMPUSER", $extension . "/voicemail", "\"" . isset($voicemail) ? $voicemail : '' . "\"");
        switch ($call_screen) {
            case '0':
                $astman->database_del("AMPUSER", $extension . "/screen");
                break;
            case 'nomemory':
                $astman->database_put("AMPUSER", $extension . "/screen", "\"nomemory\"");
                break;
            case 'memory':
                $astman->database_put("AMPUSER", $extension . "/screen", "\"memory\"");
                break;
            default:
        }
        if (!$editmode) {
            $astman->database_put("AMPUSER", $extension . "/device", "\"" . (isset($device) ? $device : '') . "\"");
        }
        if (trim($callwaiting) == 'enabled') {
            $astman->database_put("CW", $extension, "\"ENABLED\"");
        } else {
            if (trim($callwaiting) == 'disabled') {
                $astman->database_del("CW", $extension);
            } else {
                echo "ERROR: this state should not exist<br>";
            }
        }
        if (trim($pinless) == 'enabled') {
            $astman->database_put("AMPUSER", $extension . "/pinless", "\"NOPASSWD\"");
        } else {
            if (trim($pinless) == 'disabled') {
                $astman->database_del("AMPUSER", $extension . "/pinless");
            } else {
                echo "ERROR: this state should not exist<br>";
            }
        }
        // Moved VmX setup to voicemail module since it is part of voicemail
        //
    } else {
        die_freepbx("Cannot connect to Asterisk Manager with " . $amp_conf["AMPMGRUSER"] . "/" . $amp_conf["AMPMGRPASS"]);
    }
    // OK - got this far, if they entered a new inbound DID/CID let's deal with it now
    // remember - in the nice and ugly world of this old code, $vars has been extracted
    // newdid and newdidcid
    // Now if $newdid is set we need to add the DID to the routes
    //
    if ($newdid != '' || $newdidcid != '') {
        $did_dest = 'from-did-direct,' . $extension . ',1';
        $did_vars['extension'] = $newdid;
        $did_vars['cidnum'] = $newdidcid;
        $did_vars['privacyman'] = '';
        $did_vars['alertinfo'] = '';
        $did_vars['ringing'] = '';
        $did_vars['mohclass'] = 'default';
        $did_vars['description'] = $newdid_name;
        $did_vars['grppre'] = '';
        $did_vars['delay_answer'] = '0';
        $did_vars['pricid'] = '';
        core_did_add($did_vars, $did_dest);
    }
    return true;
}