diff --git a/admin/operators.php b/admin/operators.php
index 8860ab08..c54aa46b 100644
--- a/admin/operators.php
+++ b/admin/operators.php
@@ -68,8 +68,8 @@ if (isset($_POST['operator']) && isset($_POST['adduser']))
$laste = $db->GetRow($sql);
- $extensionn = "2000";
- $extension = "'IAX2/2000'";
+ $extensionn = "1000";
+ $extension = "'IAX2/1000'";
//increment if exists
if (!empty($laste))
@@ -147,7 +147,7 @@ if (isset($_POST['operator']) && isset($_POST['adduser']))
$a = "
-
+
" class="btn btn-default fa" />
diff --git a/functions/functions.freepbx.php b/functions/functions.freepbx.php
index cdc63044..5937133b 100644
--- a/functions/functions.freepbx.php
+++ b/functions/functions.freepbx.php
@@ -34,6 +34,8 @@
*/
include_once(dirname(__FILE__).'/../config.inc.php');
+include_once(dirname(__FILE__).'/../db.inc.php');
+
/**
* FreePBX functions to add an extension
* This needs to be re-implemented here as there are too many code conflicts in including freepbx code
@@ -47,457 +49,40 @@ include_once(dirname(__FILE__).'/../config.inc.php');
*/
function freepbx_add_extension($extension,$name,$password)
{
- global $amp_conf_defaults;
-
if (FREEPBX_PATH == false) return false; //break out if not defined
- //include freepbx functions
- require_once(FREEPBX_PATH . "/functions.inc.php");
- require_once(FREEPBX_PATH . "/common/php-asmanager.php");
-
- // get settings
- $amp_conf = parse_amportal_conf("/etc/amportal.conf");
- $asterisk_conf = parse_asterisk_conf($amp_conf["ASTETCDIR"]."/asterisk.conf");
- $astman = new AGI_AsteriskManager();
-
- // attempt to connect to asterisk manager proxy
- if (!isset($amp_conf["ASTMANAGERPROXYPORT"]) || !$res = $astman->connect($amp_conf["ASTMANAGERHOST"] . ":" . $amp_conf["ASTMANAGERPROXYPORT"], $amp_conf["AMPMGRUSER"] , $amp_conf["AMPMGRPASS"])) {
- // attempt to connect directly to asterisk, if no proxy or if proxy failed
- if (!$res = $astman->connect($amp_conf["ASTMANAGERHOST"] . ":" . $amp_conf["ASTMANAGERPORT"], $amp_conf["AMPMGRUSER"] , $amp_conf["AMPMGRPASS"], 'off')) {
- // couldn't connect at all
- unset( $astman );
- }
- }
-
- //Defines from bulkextensions module of FreePBX
- $vars = array (
- "action" => "add",
- "extension" => $extension,
- "name" => $name,
- "cid_masquerade" => $extension,
- "ringtimer" => 0,
- "callwaiting" => "disabled",
- "call_screen" => 0,
- "pinless" => "disabled",
- "tech" => "iax2",
- "devinfo_secret" => $password,
- "devinfo_notransfer" => "yes", // for iax2 devices
- "devinfo_context" => "from-internal",
- "devinfo_host" => "dynamic",
- "devinfo_type" => "friend",
- "devinfo_port" => 4569,
- "devinfo_qualify" => "yes",
- "devinfo_dial" => "IAX2/$extension",
- "devinfo_mailbox" => $extension . "@device",
- "devinfo_deny" => "0.0.0.0/0.0.0.0",
- "devinfo_permit" => "0.0.0.0/0.0.0.0",
- "deviceid" => $extension,
- "devicetype" => "fixed",
- "deviceuser" => $extension,
- "description" => $name,
- "dictenabled" => "disabled",
- "dictformat" => "ogg",
- "record_in" => "Adhoc",
- "record_out" => "Adhoc",
- "vm" => "disabled",
- "voicemail" => "disabled",
- "attach" => "attach=no",
- "saycid" => "saycid=no",
- "envelope" => "envelope=no",
- "delete" => "delete=no",
- "requirecalltoken" => "no",
- "vmx_play_instructions" => "checked",
- "vmx_option_0_system_default" => "checked",
- "emergency_cid" => "null"
- );
-
-
- freepbx_core_users_add($amp_conf,$astman,$vars);
- freepbx_core_devices_add($amp_conf,$astman,$vars["deviceid"],$vars["tech"],$vars["devinfo_dial"],$vars["devicetype"],$vars["deviceuser"],$vars["description"],$vars["emergency_cid"],false,$vars);
- freepbx_do_reload($amp_conf,$astman,$asterisk_conf);
-}
-
-function freepbx_do_reload(&$amp_conf,&$astman,&$asterisk_conf)
-{
- global $db;
-
- array($return);
-
- if (isset($amp_conf["PRE_RELOAD"]) && !empty($amp_conf['PRE_RELOAD'])) {
- exec( $amp_conf["PRE_RELOAD"], $output, $exit_val );
-
- }
-
- $retrieve = $amp_conf['AMPBIN'].'/retrieve_conf 2>&1';
- //exec($retrieve.'&>'.$asterisk_conf['astlogdir'].'/freepbx-retrieve.log', $output, $exit_val);
- exec($retrieve, $output, $exit_val);
-
-
- if ($exit_val != 0) {
- $return['status'] = false;
- $return['message'] = sprintf(_('Reload failed because retrieve_conf encountered an error: %s'),$exit_val);
- $return['num_errors']++;
- $notify->add_critical('freepbx','RCONFFAIL', _("retrieve_conf failed, config not applied"), $return['message']);
- return $return;
- }
-
- if (!isset($astman) || !$astman) {
- $return['status'] = false;
- $return['message'] = _('Reload failed because FreePBX could not connect to the asterisk manager interface.');
- $return['num_errors']++;
- return $return;
- }
-
- //reload MOH to get around 'reload' not actually doing that.
- $astman->send_request('Command', array('Command'=>'moh reload'));
-
- //reload asterisk (>= 1.4)
- $astman->send_request('Command', array('Command'=>'module reload'));
-
- $return['status'] = true;
-
- if ($amp_conf['FOPRUN'] && !$amp_conf['FOPDISABLE']) {
- //bounce op_server.pl
- $wOpBounce = $amp_conf['AMPBIN'].'/bounce_op.sh';
- exec($wOpBounce.' &>'.$asterisk_conf['astlogdir'].'/freepbx-bounce_op.log', $output, $exit_val);
-
- if ($exit_val != 0) {
- $desc = _('Could not reload the FOP operator panel server using the bounce_op.sh script. Configuration changes may not be reflected in the panel display.');
- $return['num_errors']++;
- }
- }
-
- if (isset($amp_conf["POST_RELOAD"]) && !empty($amp_conf['POST_RELOAD'])) {
- exec( $amp_conf["POST_RELOAD"], $output, $exit_val );
-
- if ($exit_val != 0) {
- $desc = sprintf(_("Exit code was %s and output was: %s"), $exit_val, "\n\n".implode("\n",$output));
- $return['num_errors']++;
- }
- }
-
- $sql = "UPDATE ".FREEPBX_DATABASE.".admin SET value = 'false' WHERE variable = 'need_reload'";
-
- $db->Execute($sql);
-
- return $return;
-}
-
-
-
-function freepbx_need_reload()
-{
global $db;
- $sql = "UPDATE ".FREEPBX_DATABASE.".admin SET value = 'true' WHERE variable = 'need_reload'";
-
- $db->Execute($sql);
+ $iaxelements = array(
+ array('id' => $extension, 'keyword' => 'deny', 'data' => '0.0.0.0', 'flags' => '14'),
+ array('id' => $extension, 'keyword' => 'mailbox', 'data' => $extension . "@device", 'flags' => '13'),
+ array('id' => $extension, 'keyword' => 'accountcode', 'data' => '', 'flags' => '12'),
+ array('id' => $extension, 'keyword' => 'dial', 'data' => "IAX2/" . $extension, 'flags' => '11'),
+ array('id' => $extension, 'keyword' => 'allow', 'data' => '', 'flags' => '10'),
+ array('id' => $extension, 'keyword' => 'disallow', 'data' => '', 'flags' => '9'),
+ array('id' => $extension, 'keyword' => 'qualify', 'data' => 'yes', 'flags' => '8'),
+ array('id' => $extension, 'keyword' => 'port', 'data' => '4569', 'flags' => '7'),
+ array('id' => $extension, 'keyword' => 'type', 'data' => 'friend', 'flags' => '6'),
+ array('id' => $extension, 'keyword' => 'host', 'data' => 'dynamic', 'flags' => '5'),
+ array('id' => $extension, 'keyword' => 'context', 'data' => 'from-internal', 'flags' => '4'),
+ array('id' => $extension, 'keyword' => 'transfer', 'data' => 'yes', 'flags' => '3'),
+ array('id' => $extension, 'keyword' => 'secret', 'data' => $password, 'flags' => '2'),
+ array('id' => $extension, 'keyword' => 'permit', 'data' => '0.0.0.0/0.0.0.0', 'flags' => '15'),
+ array('id' => $extension, 'keyword' => 'requirecalltoken', 'data' => 'no', 'flags' => '16'),
+ array('id' => $extension, 'keyword' => 'account', 'data' => $extension, 'flags' => '17'),
+ array('id' => $extension, 'keyword' => 'callerid', 'data' => "device <" . $extension . ">", 'flags' => '18'),
+ array('id' => $extension, 'keyword' => 'setvar', 'data' => "REALCALLERIDNUM=" . $extension, 'flags' => '19'),
+ );
+
+ $devices = array('id' => $extension, 'tech' => 'iax2', 'dial' => "IAX2/$extension", 'devicetype' => 'fixed', 'user' => $extension, 'description' => $name, 'emergency_cid' => '');
+
+ $users = array('extension' => $extension, 'password' => '', 'name' => $extension, 'voicemail' => 'novm', 'ringtimer' => '0', 'noanswer' => '', 'recording' => '', 'outboundcid' => '', 'sipname' => '', 'noanswer_cid' => '', 'busy_cid' => '', 'chanunavail_cid' => '', 'noanswer_dest' => '', 'busy_dest' => '', 'chanunavail_dest' => '', 'mohclass' => 'default');
+
+ foreach ($iaxelements as $iax)
+ $db->AutoExecute(FREEPBX_DATABASE . ".iax",$iax,'INSERT');
+
+ $db->AutoExecute(FREEPBX_DATABASE . ".devices",$devices,'INSERT');
+ $db->AutoExecute(FREEPBX_DATABASE . ".users",$users,'INSERT');
}
-
-function freepbx_core_devices_add(&$amp_conf,&$astman,$id,$tech,$dial,$devicetype,$user,$description,$emergency_cid=null,$editmode=false,$vars){
- global $db;
-
- //ensure this id is not already in use
- $sql = "SELECT *
- FROM ".FREEPBX_DATABASE.".devices
- WHERE id = '$id'";
-
- $rs = $db->GetAll($sql);
-
- if (!empty($rs))
- return false; //device already exists
-
- //unless defined, $dial is TECH/id
- if ( $dial == '' ) {
- $dial = strtoupper($tech)."/".$id;
- }
-
- //check to see if we are requesting a new user
- if ($user == "new") {
- $user = $id;
- $jump = true;
- }
-
- //insert into devices table
- $sql="INSERT INTO ".FREEPBX_DATABASE.".devices (id,tech,dial,devicetype,user,description,emergency_cid) values (\"$id\",\"$tech\",\"$dial\",\"$devicetype\",\"$user\",\"$description\",\"$emergency_cid\")";
- $db->Execute($sql);
-
- //add details to astdb
- if ($astman) {
- // if adding or editting a fixed device, user property should always be set
- if ($devicetype == 'fixed' || !$editmode) {
- $astman->database_put("DEVICE",$id."/user",$user);
- }
- // If changing from a fixed to an adhoc, the user property should be intialized
- // to the new default, not remain as the previous fixed user
- if ($editmode) {
- $previous_type = $astman->database_get("DEVICE",$id."/type");
- if ($previous_type == 'fixed' && $devicetype == 'adhoc') {
- $astman->database_put("DEVICE",$id."/user",$user);
- }
- }
- $astman->database_put("DEVICE",$id."/dial",$dial);
- $astman->database_put("DEVICE",$id."/type",$devicetype);
- $astman->database_put("DEVICE",$id."/default_user",$user);
- if($emergency_cid != '') {
- $astman->database_put("DEVICE",$id."/emergency_cid","\"".$emergency_cid."\"");
- }
-
- if ($user != "none") {
- $existingdevices = $astman->database_get("AMPUSER",$user."/device");
- if (empty($existingdevices)) {
- $astman->database_put("AMPUSER",$user."/device",$id);
- } else {
- $existingdevices_array = explode('&',$existingdevices);
- if (!in_array($id, $existingdevices_array)) {
- $existingdevices_array[]=$id;
- $existingdevices = implode('&',$existingdevices_array);
- $astman->database_put("AMPUSER",$user."/device",$existingdevices);
- }
- }
- }
-
- } else {
- die("Cannot connect to Asterisk Manager with ".$amp_conf["AMPMGRUSER"]."/".$amp_conf["AMPMGRPASS"]);
- }
-
- // create a voicemail symlink if needed
- /*
- $thisUser = core_users_get($user);
- if(isset($thisUser['voicemail']) && ($thisUser['voicemail'] != "novm")) {
- if(empty($thisUser['voicemail'])) {
- $vmcontext = "default";
- } else {
- $vmcontext = $thisUser['voicemail'];
- }
-
- //voicemail symlink
- exec("rm -f /var/spool/asterisk/voicemail/device/".$id);
- exec("/bin/ln -s /var/spool/asterisk/voicemail/".$vmcontext."/".$user."/ /var/spool/asterisk/voicemail/device/".$id);
- }
- */
-
- //take care of sip/iax/zap config
- $funct = "freepbx_core_devices_add".strtolower($tech);
-
- if(function_exists($funct)){
- $funct($id,$vars);
- }
-
- return true;
-}
-
-function freepbx_core_devices_addiax2($account,$vars) {
- global $db;
-
- $flag = 2;
- foreach ($vars as $req=>$data) {
- if ( substr($req, 0, 8) == 'devinfo_' ) {
- $keyword = substr($req, 8);
- if ( $keyword == 'dial' && $data == '' ) {
- $iaxfields[] = array($account, $keyword, 'IAX2/'.$account, $flag++);
- } elseif ($keyword == 'mailbox' && $data == '') {
- $iaxfields[] = array($account,'mailbox',$account.'@device', $flag++);
- } else {
- $iaxfields[] = array($account, $keyword, $data, $flag++);
- }
- }
- }
-
- if ( !is_array($iaxfields) ) { // left for compatibilty....lord knows why !
- $iaxfields = array(
- array($account,'secret',$db->qstr(($vars['secret'])?$vars['secret']:''),$flag++),
- array($account,'notransfer',$db->qstr(($vars['notransfer'])?$vars['notransfer']:'yes'),$flag++),
- array($account,'context',$db->qstr(($vars['context'])?$vars['context']:'from-internal'),$flag++),
- array($account,'host',$db->qstr(($vars['host'])?$vars['host']:'dynamic'),$flag++),
- array($account,'type',$db->qstr(($vars['type'])?$vars['type']:'friend'),$flag++),
- array($account,'mailbox',$db->qstr(($vars['mailbox'])?$vars['mailbox']:$account.'@device'),$flag++),
- array($account,'username',$db->qstr(($vars['username'])?$vars['username']:$account),$flag++),
- array($account,'port',$db->qstr(($vars['port'])?$vars['port']:'4569'),$flag++),
- array($account,'qualify',$db->qstr(($vars['qualify'])?$vars['qualify']:'yes'),$flag++),
- array($account,'deny',$db->qstr((isset($vars['deny']))?$vars['deny']:''),$flag++),
- array($account,'permit',$db->qstr((isset($vars['permit']))?$vars['permit']:''),$flag++),
- array($account,'disallow',$db->qstr(($vars['disallow'])?$vars['disallow']:''),$flag++),
- array($account,'allow',$db->qstr(($vars['allow'])?$vars['allow']:''),$flag++),
- array($account,'accountcode',$db->qstr(($vars['accountcode'])?$vars['accountcode']:''),$flag++),
- array($account,'requirecalltoken',$db->qstr(($vars['requirecalltoken'])?$vars['requirecalltoken']:'no'),$flag++)
- );
- }
-
- // Very bad
- $iaxfields[] = array($account,'account',($account),$flag++);
- $iaxfields[] = array($account,'callerid',((isset($vars['description']) && $vars['description'] != '')?$vars['description']." <".$account.'>':'device'." <".$account.'>'),$flag++);
- // Asterisk treats no caller ID from an IAX device as 'hide callerid', and ignores the caller ID
- // set in iax.conf. As we rely on this for pretty much everything, we need to specify the
- // callerid as a variable which gets picked up in macro-callerid.
- // Ref - http://bugs.digium.com/view.php?id=456
- $iaxfields[] = array($account,'setvar',"REALCALLERIDNUM=$account",$flag++);
-
- // Where is this in the interface ??????
- $iaxfields[] = array($account,'record_in',(($vars['record_in'])?$vars['record_in']:'On-Demand'),$flag++);
- $iaxfields[] = array($account,'record_out',(($vars['record_out'])?$vars['record_out']:'On-Demand'),$flag++);
-
- $iaxfields[] = array($account,'requirecalltoken','no',$flag++);
-
- $compiled = $db->Prepare('INSERT INTO '.FREEPBX_DATABASE.'.iax (id, keyword, data, flags) values (?,?,?,?)');
- foreach($iaxfields as $i)
- $db->Execute($compiled, $i);
-}
-
-
-
-function freepbx_core_users_add(&$amp_conf, &$astman, $vars, $editmode=false) {
- extract($vars);
-
- global $db;
-
- $thisexten = isset($thisexten) ? $thisexten : '';
-
- if (trim($extension) == '' ) {
- return false;
- }
-
- //ensure this id is not already in use
- $sql = "SELECT *
- FROM ".FREEPBX_DATABASE.".users
- WHERE extension = '$extension'";
-
- $rs = $db->GetAll($sql);
-
- if (!empty($rs))
- return false; //device already exists
-
- $newdid_name = isset($newdid_name) ? $db->qstr($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);
- }
-
- //build the recording variable
- $recording = "out=".$record_out."|in=".$record_in;
-
- //escape quotes and any other bad chddddars:
- if(!get_magic_quotes_gpc()) {
- $outboundcid = '';
- $name = $db->qstr($name);
- }
-
- // 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 ".FREEPBX_DATABASE.".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:'novm';
- $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.= "\")";
-
- $db->Execute($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
";
- }
-
- 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
";
- }
-
- // Moved VmX setup to voicemail module since it is part of voicemail
- //
- } else {
- die("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']= '';
- freepbx_core_did_add($did_vars, $did_dest);
- }
-
- return true;
-}
-
-
-function freepbx_core_did_add($incoming,$target=false){
- global $db;
- foreach ($incoming as $key => $val) { ${$key} = $val; } // create variables from request
-
- $destination= ($target) ? $target : ${$goto0.'0'};
- $sql="INSERT INTO ".FREEPBX_DATABASE.".incoming (cidnum,extension,destination,privacyman,pmmaxretries,pmminlength,alertinfo, ringing, mohclass, description, grppre, delay_answer, pricid) values ('$cidnum','$extension','$destination','$privacyman','$pmmaxretries','$pmminlength','$alertinfo', '$ringing', '$mohclass', '$description', '$grppre', '$delay_answer', '$pricid')";
-
- return($db->Execute($sql));
-}
-
-
-
-
?>