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); } }
$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');
/** * 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; }
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; }