Exemplo n.º 1
0
 public function doConfigPageInit($page)
 {
     //Reassign $_REQUEST as it will be immutable in the future.
     $request = $_REQUEST;
     global $amp_conf;
     if ($page == "advancedsettings") {
         $freepbx_conf = $this->config;
         $settings = $freepbx_conf->get_conf_settings();
         foreach ($request as $key => $val) {
             if (isset($settings[$key])) {
                 if ($key == 'CRONMAN_UPDATES_CHECK') {
                     $cm = \cronmanager::create($db);
                     if ($val == 'true') {
                         $cm->enable_updates();
                     } else {
                         $cm->disable_updates();
                     }
                 }
                 switch ($settings[$key]['type']) {
                     case CONF_TYPE_BOOL:
                         $val = $val == 'true' ? 1 : 0;
                         break;
                     default:
                         $val = trim($val);
                         break;
                 }
                 $freepbx_conf->set_conf_values(array($key => $val), true, $amp_conf['AS_OVERRIDE_READONLY']);
                 $status = $freepbx_conf->get_last_update_status();
                 if ($status[$key]['saved']) {
                     //debug(sprintf(_("Advanced Settings changed freepbx_conf setting: [$key] => [%s]"),$val));
                     needreload();
                 }
             }
         }
     }
     // $page == "advancedsettings"
     if ($page == "dahdichandids") {
         if (!isset($_REQUEST['action'])) {
             return;
         }
         $type = isset($request['type']) ? $request['type'] : 'setup';
         $action = isset($request['action']) ? $request['action'] : '';
         if (isset($request['delete'])) {
             $action = 'delete';
         }
         $extdisplay = isset($request['extdisplay']) ? $request['extdisplay'] : '';
         $channel = isset($request['channel']) ? $request['channel'] : false;
         $description = isset($request['description']) ? $request['description'] : '';
         $did = isset($request['did']) ? $request['did'] : '';
         switch ($action) {
             case 'add':
                 if (core_dahdichandids_add($description, $channel, $did)) {
                     needreload();
                     $_REQUEST['extdisplay'] = $channel;
                     $this->freepbx->View->redirect_standard('extdisplay');
                 }
                 break;
             case 'edit':
                 if (core_dahdichandids_edit($description, $channel, $did)) {
                     needreload();
                 }
                 break;
             case 'delete':
                 core_dahdichandids_delete($channel);
                 needreload();
                 break;
         }
     }
     // $page == "dahdichandids"
     if ($page == "routing") {
         $display = 'routing';
         $extdisplay = isset($request['extdisplay']) ? $request['extdisplay'] : '';
         $action = isset($request['action']) ? $request['action'] : '';
         if (isset($request['copyroute'])) {
             $action = 'copyroute';
         }
         $repotrunkdirection = isset($request['repotrunkdirection']) ? $request['repotrunkdirection'] : '';
         //this was effectively the sequence, now it becomes the route_id and the value past will have to change
         $repotrunkkey = isset($request['repotrunkkey']) ? $request['repotrunkkey'] : '';
         // Check if they uploaded a CSV file for their route patterns
         //
         if (isset($_FILES['pattern_file']) && $_FILES['pattern_file']['tmp_name'] != '') {
             $fh = fopen($_FILES['pattern_file']['tmp_name'], 'r');
             if ($fh !== false) {
                 $csv_file = array();
                 $index = array();
                 // Check first row, ingoring empty rows and get indices setup
                 //
                 while (($row = fgetcsv($fh, 5000, ",", "\"")) !== false) {
                     if (count($row) == 1 && $row[0] == '') {
                         continue;
                     } else {
                         $count = count($row) > 4 ? 4 : count($row);
                         for ($i = 0; $i < $count; $i++) {
                             switch (strtolower($row[$i])) {
                                 case 'prepend':
                                 case 'prefix':
                                 case 'match pattern':
                                 case 'callerid':
                                     $index[strtolower($row[$i])] = $i;
                                     break;
                                 default:
                                     break;
                             }
                         }
                         // If no headers then assume standard order
                         if (count($index) == 0) {
                             $index['prepend'] = 0;
                             $index['prefix'] = 1;
                             $index['match pattern'] = 2;
                             $index['callerid'] = 3;
                             if ($count == 4) {
                                 $csv_file[] = $row;
                             }
                         }
                         break;
                     }
                 }
                 $row_count = count($index);
                 while (($row = fgetcsv($fh, 5000, ",", "\"")) !== false) {
                     if (count($row) == $row_count) {
                         $csv_file[] = $row;
                     }
                 }
             }
         }
         // If we have a CSV file it replaces any existing patterns
         //
         if (!empty($csv_file)) {
             foreach ($csv_file as $row) {
                 $this_prepend = isset($index['prepend']) ? htmlspecialchars(trim($row[$index['prepend']])) : '';
                 $this_prefix = isset($index['prefix']) ? htmlspecialchars(trim($row[$index['prefix']])) : '';
                 $this_match_pattern = isset($index['match pattern']) ? htmlspecialchars(trim($row[$index['match pattern']])) : '';
                 $this_callerid = isset($index['callerid']) ? htmlspecialchars(trim($row[$index['callerid']])) : '';
                 if ($this_prepend != '' || $this_prefix != '' || $this_match_pattern != '' || $this_callerid != '') {
                     $dialpattern_insert[] = array('prepend_digits' => $this_prepend, 'match_pattern_prefix' => $this_prefix, 'match_pattern_pass' => $this_match_pattern, 'match_cid' => $this_callerid);
                 }
             }
         } else {
             if (isset($request["prepend_digit"])) {
                 $prepend_digit = $request["prepend_digit"];
                 $pattern_prefix = $request["pattern_prefix"];
                 $pattern_pass = $request["pattern_pass"];
                 $match_cid = $request["match_cid"];
                 foreach (array_keys($prepend_digit) as $key) {
                     if ($prepend_digit[$key] != '' || $pattern_prefix[$key] != '' || $pattern_pass[$key] != '' || $match_cid[$key] != '') {
                         $dialpattern_insert[] = array('prepend_digits' => htmlspecialchars(trim($prepend_digit[$key])), 'match_pattern_prefix' => htmlspecialchars(trim($pattern_prefix[$key])), 'match_pattern_pass' => htmlspecialchars(trim($pattern_pass[$key])), 'match_cid' => htmlspecialchars(trim($match_cid[$key])));
                     }
                 }
             } else {
                 if (isset($request["bulk_patterns"])) {
                     $prepend = '/^([^+]*)\\+/';
                     $prefix = '/^([^|]*)\\|/';
                     $match_pattern = '/([^/]*)/';
                     $callerid = '/\\/(.*)$/';
                     $data = explode("\n", $request['bulk_patterns']);
                     foreach ($data as $list) {
                         if (preg_match('/^\\s*$/', $list)) {
                             continue;
                         }
                         $this_prepend = $this_prefix = $this_callerid = '';
                         if (preg_match($prepend, $list, $matches)) {
                             $this_prepend = $matches[1];
                             $list = preg_replace($prepend, '', $list);
                         }
                         if (preg_match($prefix, $list, $matches)) {
                             $this_prefix = $matches[1];
                             $list = preg_replace($prefix, '', $list);
                         }
                         if (preg_match($callerid, $list, $matches)) {
                             $this_callerid = $matches[1];
                             $list = preg_replace($callerid, '', $list);
                         }
                         $dialpattern_insert[] = array('prepend_digits' => htmlspecialchars(trim($this_prepend)), 'match_pattern_prefix' => htmlspecialchars(trim($this_prefix)), 'match_pattern_pass' => htmlspecialchars(trim($list)), 'match_cid' => htmlspecialchars(trim($this_callerid)));
                         $i++;
                     }
                 }
             }
         }
         if (isset($request['reporoutedirection']) && $request['reporoutedirection'] != '' && isset($request['reporoutekey']) && $request['reporoutekey'] != '') {
             $request['route_seq'] = core_routing_setrouteorder($request['reporoutekey'], $request['reporoutedirection']);
         }
         $trunkpriority = array();
         if (isset($request["trunkpriority"])) {
             $trunkpriority = $request["trunkpriority"];
             if (!$trunkpriority) {
                 $trunkpriority = array();
             }
             // delete blank entries and reorder
             foreach (array_keys($trunkpriority) as $key) {
                 if ($trunkpriority[$key] == '') {
                     // delete this empty
                     unset($trunkpriority[$key]);
                 } else {
                     if ($key == $repotrunkkey - 1 && $repotrunkdirection == "up") {
                         // swap this one with the one before (move up)
                         $temptrunk = $trunkpriority[$key];
                         $trunkpriority[$key] = $trunkpriority[$key + 1];
                         $trunkpriority[$key + 1] = $temptrunk;
                     } else {
                         if ($key == $repotrunkkey && $repotrunkdirection == "down") {
                             // swap this one with the one after (move down)
                             $temptrunk = $trunkpriority[$key + 1];
                             $trunkpriority[$key + 1] = $trunkpriority[$key];
                             $trunkpriority[$key] = $temptrunk;
                         }
                     }
                 }
             }
             unset($temptrunk);
             $trunkpriority = array_unique(array_values($trunkpriority));
             // resequence our numbers
             if ($action == '') {
                 $action = "updatetrunks";
             }
         }
         $routename = isset($request['routename']) ? $request['routename'] : '';
         $routepass = isset($request['routepass']) ? $request['routepass'] : '';
         $emergency = isset($request['emergency']) ? $request['emergency'] : '';
         $intracompany = isset($request['intracompany']) ? $request['intracompany'] : '';
         $mohsilence = isset($request['mohsilence']) ? $request['mohsilence'] : '';
         $outcid = isset($request['outcid']) ? $request['outcid'] : '';
         $outcid_mode = isset($request['outcid_mode']) ? $request['outcid_mode'] : '';
         $time_group_id = isset($request['time_group_id']) ? $request['time_group_id'] : '';
         $route_seq = isset($request['route_seq']) ? $request['route_seq'] : '';
         $goto = isset($request['goto0']) ? $request['goto0'] : '';
         $dest = $goto ? $request[$goto . '0'] : '';
         //if submitting form, update database
         switch ($action) {
             case 'ajaxroutepos':
                 $ret = core_routing_setrouteorder($repotrunkkey, $repotrunkdirection);
                 needreload();
                 header("Content-type: application/json");
                 echo json_encode(array('position' => $ret));
                 exit;
                 break;
             case "copyroute":
                 $routename .= "_copy_{$extdisplay}";
                 $extdisplay = '';
                 $route_seq++;
                 // Fallthrough to addtrunk now...
                 //
             // Fallthrough to addtrunk now...
             //
             case "addroute":
                 $extdisplay = core_routing_addbyid($routename, $outcid, $outcid_mode, $routepass, $emergency, $intracompany, $mohsilence, $time_group_id, $dialpattern_insert, $trunkpriority, $route_seq, $dest);
                 needreload();
                 break;
             case "editroute":
                 $extdisplay = $_REQUEST['id'];
                 core_routing_editbyid($extdisplay, $routename, $outcid, $outcid_mode, $routepass, $emergency, $intracompany, $mohsilence, $time_group_id, $dialpattern_insert, $trunkpriority, $route_seq, $dest);
                 needreload();
                 break;
             case "delroute":
                 if (!function_exists('core_routing_delbyid')) {
                     if (file_exists(__DIR__ . "/functions.inc.php")) {
                         include __DIR__ . "/functions.inc.php";
                     }
                 }
                 $ret = core_routing_delbyid($_REQUEST['id']);
                 // re-order the routes to make sure that there are no skipped numbers.
                 // example if we have 001-test1, 002-test2, and 003-test3 then delete 002-test2
                 // we do not want to have our routes as 001-test1, 003-test3 we need to reorder them
                 // so we are left with 001-test1, 002-test3
                 needreload();
                 return $ret;
                 break;
             case "updatetrunks":
                 $ret = core_routing_updatetrunks($extdisplay, $trunkpriority, true);
                 header("Content-type: application/json");
                 echo json_encode(array('result' => $ret));
                 needreload();
                 exit;
                 break;
             case 'prioritizeroute':
                 needreload();
                 break;
             case 'getnpanxxjson':
                 try {
                     $npa = $request['npa'];
                     $nxx = $request['nxx'];
                     $url = 'http://www.localcallingguide.com/xmllocalprefix.php?npa=602&nxx=930';
                     $request = new \Pest('http://www.localcallingguide.com/xmllocalprefix.php');
                     $data = $request->get('?npa=' . $npa . '&nxx=' . $nxx);
                     $xml = new \SimpleXMLElement($data);
                     $pfdata = $xml->xpath('//lca-data/prefix');
                     $retdata = array();
                     foreach ($pfdata as $item) {
                         $inpa = (string) $item->npa;
                         $inxx = (string) $item->nxx;
                         $retdata[$inpa . $inxx] = array('npa' => $inpa, 'nxx' => $inxx);
                     }
                     $ret = json_encode($retdata);
                     header("Content-type: application/json");
                     echo $ret;
                     exit;
                 } catch (Pest_NotFound $e) {
                     header("Content-type: application/json");
                     echo json_encode(array('error' => $e));
                     exit;
                 }
                 break;
             case 'populatenpanxx':
                 $dialpattern_array = $dialpattern_insert;
                 if (preg_match("/^([2-9]\\d\\d)-?([2-9]\\d\\d)\$/", $_REQUEST["npanxx"], $matches)) {
                     // first thing we do is grab the exch:
                     $ch = curl_init();
                     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                     curl_setopt($ch, CURLOPT_URL, "http://www.localcallingguide.com/xmllocalprefix.php?npa=" . $matches[1] . "&nxx=" . $matches[2]);
                     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Linux; Ringfree PBX Local Trunks Configuration)");
                     $str = curl_exec($ch);
                     curl_close($ch);
                     // quick 'n dirty - nabbed from PEAR
                     global $amp_conf;
                     require_once $amp_conf['AMPWEBROOT'] . '/admin/modules/core/XML_Parser.php';
                     require_once $amp_conf['AMPWEBROOT'] . '/admin/modules/core/XML_Unserializer.php';
                     $xml = new xml_unserializer();
                     $xml->unserialize($str);
                     $xmldata = $xml->getUnserializedData();
                     $hash_filter = array();
                     //avoid duplicates
                     if (isset($xmldata['lca-data']['prefix'])) {
                         // we do the loops separately so patterns are grouped together
                         // match 1+NPA+NXX (dropping 1)
                         foreach ($xmldata['lca-data']['prefix'] as $prefix) {
                             if (isset($hash_filter['1' . $prefix['npa'] . $prefix['nxx']])) {
                                 continue;
                             } else {
                                 $hash_filter['1' . $prefix['npa'] . $prefix['nxx']] = true;
                             }
                             $dialpattern_array[] = array('prepend_digits' => '', 'match_pattern_prefix' => '1', 'match_pattern_pass' => htmlspecialchars($prefix['npa'] . $prefix['nxx']) . 'XXXX', 'match_cid' => '');
                         }
                         // match NPA+NXX
                         foreach ($xmldata['lca-data']['prefix'] as $prefix) {
                             if (isset($hash_filter[$prefix['npa'] . $prefix['nxx']])) {
                                 continue;
                             } else {
                                 $hash_filter[$prefix['npa'] . $prefix['nxx']] = true;
                             }
                             $dialpattern_array[] = array('prepend_digits' => '', 'match_pattern_prefix' => '', 'match_pattern_pass' => htmlspecialchars($prefix['npa'] . $prefix['nxx']) . 'XXXX', 'match_cid' => '');
                         }
                         // match 7-digits
                         foreach ($xmldata['lca-data']['prefix'] as $prefix) {
                             if (isset($hash_filter[$prefix['nxx']])) {
                                 continue;
                             } else {
                                 $hash_filter[$prefix['nxx']] = true;
                             }
                             $dialpattern_array[] = array('prepend_digits' => '', 'match_pattern_prefix' => '', 'match_pattern_pass' => htmlspecialchars($prefix['nxx']) . 'XXXX', 'match_cid' => '');
                         }
                         unset($hash_filter);
                     } else {
                         $errormsg = _("Error fetching prefix list for: ") . $request["npanxx"];
                     }
                 } else {
                     // what a horrible error message... :p
                     $errormsg = _("Invalid format for NPA-NXX code (must be format: NXXNXX)");
                 }
                 if (isset($errormsg)) {
                     echo "<script language=\"javascript\">alert('" . addslashes($errormsg) . "');</script>";
                     unset($errormsg);
                 }
                 break;
         }
     }
     // $page == "routing"
     if ($page == "did") {
         $extdisplay = htmlspecialchars(isset($request['extdisplay']) ? $request['extdisplay'] : '');
         $old_extdisplay = $extdisplay;
         $dispnum = 'did';
         //used for switch on config.php
         $account = isset($request['account']) ? $request['account'] : '';
         $action = isset($request['action']) ? $request['action'] : '';
         $goto = isset($request['goto0']) ? $request['goto0'] : '';
         $ringing = isset($request['ringing']) ? $request['ringing'] : '';
         $reversal = isset($request['reversal']) ? $request['reversal'] : '';
         $description = htmlspecialchars(isset($request['description']) ? $request['description'] : '');
         $privacyman = isset($request['privacyman']) ? $request['privacyman'] : '0';
         $pmmaxretries = isset($request['pmmaxretries']) ? $request['pmmaxretries'] : '';
         $pmminlength = isset($request['pmminlength']) ? $request['pmminlength'] : '';
         $alertinfo = htmlspecialchars(isset($request['alertinfo']) ? $request['alertinfo'] : '');
         $mohclass = isset($request['mohclass']) ? $request['mohclass'] : 'default';
         $grppre = isset($request['grppre']) ? $request['grppre'] : '';
         $delay_answer = isset($request['delay_answer']) && $request['delay_answer'] ? $request['delay_answer'] : '0';
         $pricid = isset($request['pricid']) ? $request['pricid'] : '';
         $rnavsort = isset($request['rnavsort']) ? $request['rnavsort'] : 'description';
         $didfilter = isset($request['didfilter']) ? $request['didfilter'] : '';
         if (isset($request['submitclear']) && isset($request['goto0'])) {
             $request[$request['goto0'] . '0'] = '';
         }
         if (isset($request['extension']) && isset($request['cidnum'])) {
             $extdisplay = $request['extension'] . "/" . $request['cidnum'];
         }
         if (isset($request['old_extension']) && isset($request['old_cidnum'])) {
             $old_extdisplay = $request['old_extension'] . "/" . $request['old_cidnum'];
         }
         //update db if submiting form
         switch ($action) {
             case 'addIncoming':
                 //create variables from request
                 extract($request, EXTR_SKIP);
                 //add details to the 'incoming' table
                 if (core_did_add($request)) {
                     needreload();
                     $_REQUEST['extdisplay'] = $_REQUEST['extension'] . "/" . $_REQUEST['cidnum'];
                     $this->freepbx->View->redirect_standard('extdisplay', 'didfilter', 'rnavsort');
                 }
                 break;
             case 'delIncoming':
                 $extarray = explode('/', $extdisplay, 2);
                 core_did_del($extarray[0], $extarray[1]);
                 needreload();
                 break;
             case 'edtIncoming':
                 $extarray = explode('/', $old_extdisplay, 2);
                 if (core_did_edit($extarray[0], $extarray[1], $_REQUEST)) {
                     needreload();
                 }
                 break;
         }
     }
     // $page == "did"
     if ($page == "astmodules") {
         $action = !empty($request['action']) ? $request['action'] : "";
         $section = !empty($request['section']) ? $request['section'] : "";
         $module = !empty($request['module']) ? $request['module'] : "";
         switch ($action) {
             case 'add':
                 switch ($section) {
                     case 'amodload':
                         $this->ModulesConf->load($module);
                         return true;
                         break;
                     case 'amodnoload':
                         $this->ModulesConf->noload($module);
                         return true;
                         break;
                     case 'amodpreload':
                         $this->ModulesConf->preload($module);
                         return true;
                         break;
                     default:
                         return false;
                         break;
                 }
                 break;
             case 'del':
                 switch ($section) {
                     case 'amodnoload':
                         $this->ModulesConf->removenoload($module);
                         return true;
                         break;
                     case 'amodpreload':
                         $this->ModulesConf->removepreload($module);
                         return true;
                         break;
                     default:
                         return false;
                         break;
                 }
                 break;
             default:
                 return false;
                 break;
         }
     }
     // $page == "astmodules"
 }
Exemplo n.º 2
0
     $_REQUEST['extdisplay'] = $extdisplay;
     //have not idea if this is needed or useful
     needreload();
     redirect_standard('extdisplay');
     break;
 case "editroute":
     core_routing_editbyid($extdisplay, $routename, $outcid, $outcid_mode, $routepass, $emergency, $intracompany, $mohsilence, $time_group_id, $dialpattern_insert, $trunkpriority, $route_seq, $dest);
     needreload();
     redirect_standard('extdisplay');
     break;
 case "updatetrunks":
     core_routing_updatetrunks($extdisplay, $trunkpriority, true);
     needreload();
     break;
 case "delroute":
     core_routing_delbyid($extdisplay);
     // re-order the routes to make sure that there are no skipped numbers.
     // example if we have 001-test1, 002-test2, and 003-test3 then delete 002-test2
     // we do not want to have our routes as 001-test1, 003-test3 we need to reorder them
     // so we are left with 001-test1, 002-test3
     needreload();
     redirect_standard();
     break;
 case 'prioritizeroute':
     needreload();
     break;
 case 'populatenpanxx':
     $dialpattern_array = $dialpattern_insert;
     if (preg_match("/^([2-9]\\d\\d)-?([2-9]\\d\\d)\$/", $_REQUEST["npanxx"], $matches)) {
         // first thing we do is grab the exch:
         $ch = curl_init();