root/modules/branches/2.3/core/page.trunks.php

Revision 10463, 34.4 kB (checked in by p_lindheimer, 1 year ago)

Merged revisions 10462 via svnmerge from
http://www.freepbx.org/v2/svn/modules/branches/2.4

................

r10462 | p_lindheimer | 2010-11-01 13:25:23 -0700 (Mon, 01 Nov 2010) | 53 lines


Merged revisions 10461 via svnmerge from
http://www.freepbx.org/v2/svn/modules/branches/2.5


................

r10461 | p_lindheimer | 2010-11-01 13:13:34 -0700 (Mon, 01 Nov 2010) | 46 lines


Merged revisions 10460 via svnmerge from
http://www.freepbx.org/v2/svn/modules/branches/2.6


................

r10460 | p_lindheimer | 2010-11-01 13:02:25 -0700 (Mon, 01 Nov 2010) | 39 lines


Merged revisions 10399-10418,10420-10422,10424-10426,10428-10429,10432,10436-10458 via svnmerge from
http://www.freepbx.org/v2/svn/modules/branches/2.7


................

r10399 | GameGamer?43 | 2010-10-14 10:05:48 -0700 (Thu, 14 Oct 2010) | 1 line


closes #4590 - fixes issues with phonebook import

................

r10457 | p_lindheimer | 2010-11-01 12:46:35 -0700 (Mon, 01 Nov 2010) | 24 lines


Merged revisions 10456 via svnmerge from
http://svn.freepbx.org/modules/branches/2.8


................

r10456 | p_lindheimer | 2010-11-01 12:39:25 -0700 (Mon, 01 Nov 2010) | 17 lines


Merged revisions 10444,10447,10449-10451,10453-10455 via svnmerge from
http://svn.freepbx.org/modules/branches/2.9


........

r10444 | mbrevda | 2010-10-25 05:43:18 -0700 (Mon, 25 Oct 2010) | 1 line


re #4604 - potential injection when uploading files. Can be closed by when published/backported

........

r10454 | p_lindheimer | 2010-11-01 10:51:02 -0700 (Mon, 01 Nov 2010) | 1 line


block xss re #4615

........

r10455 | p_lindheimer | 2010-11-01 12:12:39 -0700 (Mon, 01 Nov 2010) | 1 line


changes to some of the fixes re #4604

........

................

................

r10458 | p_lindheimer | 2010-11-01 12:49:10 -0700 (Mon, 01 Nov 2010) | 1 line


update xml re #4590

................

................

................

................

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1 <?php /* $Id$ */
2 // routing.php Copyright (C) 2004 Greg MacLellan (greg@mtechsolutions.ca)
3 // Asterisk Management Portal Copyright (C) 2004 Coalescent Systems Inc. (info@coalescentsystems.ca)
4 //
5 //This program is free software; you can redistribute it and/or
6 //modify it under the terms of the GNU General Public License
7 //as published by the Free Software Foundation; either version 2
8 //of the License, or (at your option) any later version.
9 //
10 //This program is distributed in the hope that it will be useful,
11 //but WITHOUT ANY WARRANTY; without even the implied warranty of
12 //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 //GNU General Public License for more details.
14
15
16
17 $display='trunks'; 
18 $extdisplay=isset($_REQUEST['extdisplay'])?$_REQUEST['extdisplay']:'';
19 $action = isset($_REQUEST['action'])?$_REQUEST['action']:'';
20 $tech = strtolower(isset($_REQUEST['tech'])?htmlentities($_REQUEST['tech']):'');
21
22 $trunknum = ltrim($extdisplay,'OUT_');
23
24
25 // populate some global variables from the request string
26 $set_globals = array("outcid","maxchans","dialoutprefix","channelid","peerdetails","usercontext","userconfig","register","keepcid","failtrunk","disabletrunk");
27 foreach ($set_globals as $var) {
28   if (isset($_REQUEST[$var])) {
29     $$var = stripslashes( $_REQUEST[$var] );
30   }
31 }
32
33 // ensure that keepcid is set to something:
34 if (!isset($keepcid)) {
35   $keepcid = "off";
36 }
37 // ensure that failtrunk is set to something:
38 if (!isset($failtrunk)) {
39   $failtrunk = "";
40 }
41 $failtrunk_enable = ($failtrunk == "")?'':'CHECKED';
42
43 if (!isset($disabletrunk)) {
44   $disabletrunk = "off";
45 }
46
47 if (isset($_REQUEST["dialrules"])) {
48   //$dialpattern = $_REQUEST["dialpattern"];
49   $dialrules = explode("\n",$_REQUEST["dialrules"]);
50
51   if (is_array($dialrules))
52     foreach (array_keys($dialrules) as $key) {
53       //trim it
54       $dialrules[$key] = trim($dialrules[$key]);
55      
56       // remove blanks
57       if ($dialrules[$key] == "") unset($dialrules[$key]);
58      
59       // remove leading underscores (we do that on backend)
60       if ($dialrules[$key][0] == "_") $dialrules[$key] = substr($dialrules[$key],1);
61     }
62  
63   // check for duplicates, and re-sequence
64   $dialrules = array_values(array_unique($dialrules));
65 } else {
66   $dialrules = array();
67 }
68
69 //if submitting form, update database
70 switch ($action) {
71   case "addtrunk":
72     if (!isset($failtrunk))
73         $failtrunk="";
74     $trunknum = core_trunks_add($tech, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register, $keepcid, trim($failtrunk),$disabletrunk);
75    
76     core_trunks_addDialRules($trunknum, $dialrules);
77     needreload();
78     redirect_standard();
79   break;
80   case "edittrunk":
81     if (!isset($failtrunk))
82         $failtrunk="";
83     core_trunks_edit($trunknum, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register, $keepcid, trim($failtrunk), $disabletrunk);
84    
85     /* //DIALRULES
86     deleteTrunkRules($channelid);
87     addTrunkRules($channelid, $dialrules);
88     */
89    
90     // this can rewrite too, so edit is the same
91     core_trunks_addDialRules($trunknum, $dialrules);
92     needreload();
93     redirect_standard('extdisplay');
94   break;
95   case "deltrunk":
96  
97     core_trunks_del($trunknum);
98     core_routing_trunk_del($trunknum);
99    
100     /* //DIALRULES
101     deleteTrunkRules($channelid);
102     */
103     core_trunks_deleteDialRules($trunknum);
104     needreload();
105     redirect_standard();
106   break;
107   case "populatenpanxx7":
108   case "populatenpanxx10":
109     if (preg_match("/^([2-9]\d\d)-?([2-9]\d\d)$/", $_REQUEST["npanxx"], $matches)) {
110       // first thing we do is grab the exch:
111       $ch = curl_init();
112       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
113       curl_setopt($ch, CURLOPT_URL, "http://www.localcallingguide.com/xmllocalprefix.php?npa=".$matches[1]."&nxx=".$matches[2]);
114       curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Linux; FreePBX Local Trunks Configuration)");
115       $str = curl_exec($ch);
116       curl_close($ch);
117
118       // quick 'n dirty - nabbed from PEAR
119       require_once($amp_conf['AMPWEBROOT'] . '/admin/modules/core/XML_Parser.php');
120       require_once($amp_conf['AMPWEBROOT'] . '/admin/modules/core/XML_Unserializer.php');
121
122       $xml = new xml_unserializer;
123       $xml->unserialize($str);
124       $xmldata = $xml->getUnserializedData();
125
126       if (isset($xmldata['lca-data']['prefix'])) {
127        
128         if ($action == 'populatenpanxx10') {
129           // 10 digit dialing
130           // - add area code to 7 digits
131           // - match local 10 digits
132           // - add 1 to anything else
133           $dialrules[] = $matches[1].'NXXXXXX';
134           // add NPA to 7-digits
135           foreach ($xmldata['lca-data']['prefix'] as $prefix) {
136             $dialrules[] = $prefix['npa'].'+'.$prefix['nxx'].'XXXX';
137           }
138           foreach ($xmldata['lca-data']['prefix'] as $prefix) {
139             $dialrules[] = $prefix['npa'].$prefix['nxx'].'XXXX';
140           }
141           // if a number was not matched as local, dial it with '1' prefix
142           $dialrules[] = '1+NXXNXXXXXX';
143         } else {
144           // 7 digit dialing
145           // - drop area code from local numbers
146           // - match local 7 digit numbers
147           // - add 1 to everything else
148           foreach ($xmldata['lca-data']['prefix'] as $prefix) {
149             $dialrules[] = $prefix['npa'].'|'.$prefix['nxx'].'XXXX';
150           }
151           foreach ($xmldata['lca-data']['prefix'] as $prefix) {
152             $dialrules[] = $prefix['nxx'].'XXXX';
153           }
154           $dialrules[] = '1+NXXNXXXXXX';
155           $dialrules[] = '1'.$matches[1].'+NXXXXXX';
156         }
157
158         // check for duplicates, and re-sequence
159         $dialrules = array_values(array_unique($dialrules));
160       } else {
161         $errormsg = _("Error fetching prefix list for: "). $_REQUEST["npanxx"];
162       }
163
164     } else {
165       // what a horrible error message... :p
166       $errormsg = _("Invalid format for NPA-NXX code (must be format: NXXNXX)");
167     }
168    
169     if (isset($errormsg)) {
170       echo "<script language=\"javascript\">alert('".addslashes($errormsg)."');</script>";
171       unset($errormsg);
172     }
173   break;
174 }
175  
176
177  
178 //get all rows from globals
179 $sql = "SELECT * FROM globals";
180 $globals = $db->getAll($sql);
181 if(DB::IsError($globals)) {
182   die_freepbx($globals->getMessage());
183 }
184
185 //create a set of variables that match the items in global[0]
186 foreach ($globals as $global) {
187   ${trim($global[0])} = htmlentities($global[1]);
188 }
189
190 ?>
191 </div>
192
193 <div class="rnav">
194 <ul>
195   <li><a <?php  echo ($extdisplay=='' ? 'class="current"':'') ?> href="config.php?display=<?php echo urlencode($display)?>"><?php echo _("Add Trunk")?></a></li>
196 <?php 
197 //get existing trunk info
198 $tresults = core_trunks_list();
199
200 foreach ($tresults as $tresult) {
201   $background = ($tresult[2] == 'on')?'#DDD':'';
202   echo "\t<li><a ".($extdisplay==$tresult[0] ? 'class="current"':'')." href=\"config.php?display=".urlencode($display)."&amp;extdisplay=".urlencode($tresult[0])."\" title=\"".urlencode($tresult[1])."\" style=\"background: $background;\" >"._("Trunk")." ".substr(str_replace('AMP:', '', $tresult[1]),0,15)."</a></li>\n";
203 }
204
205 ?>
206 </ul>
207 </div>
208
209 <div class="content">
210
211 <?php 
212
213 if (!$tech && !$extdisplay) {
214 ?>
215   <h2><?php echo _("Add a Trunk")?></h2>
216   <a href="<?php echo $_SERVER['PHP_SELF'].'?display='.urlencode($display); ?>&amp;tech=ZAP"><?php echo _("Add ZAP Trunk")?></a><br><br>
217   <a href="<?php echo $_SERVER['PHP_SELF'].'?display='.urlencode($display); ?>&amp;tech=IAX2"><?php echo _("Add IAX2 Trunk")?></a><br><br>
218   <a href="<?php echo $_SERVER['PHP_SELF'].'?display='.urlencode($display); ?>&amp;tech=SIP"><?php echo _("Add SIP Trunk")?></a><br><br>
219   <a href="<?php echo $_SERVER['PHP_SELF'].'?display='.urlencode($display); ?>&amp;tech=ENUM"><?php echo _("Add ENUM Trunk")?></a><br><br>
220   <a href="<?php echo $_SERVER['PHP_SELF'].'?display='.urlencode($display); ?>&amp;tech=CUSTOM"><?php echo _("Add Custom Trunk")?></a><br><br>
221 <?php 
222 } else {
223   if ($extdisplay) {
224     //list($trunk_tech, $trunk_name) = explode("/",$tname);
225     //if ($trunk_tech == "IAX2") $trunk_tech = "IAX"; // same thing
226     $tech = core_trunks_getTrunkTech($trunknum);
227
228     $outcid = ${"OUTCID_".$trunknum};
229     $maxchans = ${"OUTMAXCHANS_".$trunknum};
230     $dialoutprefix = ${"OUTPREFIX_".$trunknum};
231     $keepcid = isset(${"OUTKEEPCID_".$trunknum})?${"OUTKEEPCID_".$trunknum}:'';
232     $failtrunk = isset(${"OUTFAIL_".$trunknum})?${"OUTFAIL_".$trunknum}:'';
233     $failtrunk_enable = ($failtrunk == "")?'':'CHECKED';
234     $disabletrunk = isset(${"OUTDISABLE_".$trunknum})?${"OUTDISABLE_".$trunknum}:'';
235    
236     if ($tech!="enum") {
237  
238       if (!isset($channelid)) {
239         $channelid = core_trunks_getTrunkTrunkName($trunknum);
240       }
241
242       if ($tech!="custom") {  // custom trunks will not have user/peer details in database table
243         // load from db
244         if (!isset($peerdetails)) {
245           $peerdetails = core_trunks_getTrunkPeerDetails($trunknum);
246         }
247  
248         if (!isset($usercontext)) {
249           $usercontext = core_trunks_getTrunkUserContext($trunknum);
250         }
251  
252         if (!isset($userconfig)) { 
253           $userconfig = core_trunks_getTrunkUserConfig($trunknum);
254         }
255          
256         if (!isset($register)) { 
257           $register = core_trunks_getTrunkRegister($trunknum);
258         }
259       }
260     }
261    
262     if (count($dialrules) == 0) {
263       if ($temp = core_trunks_getDialRules($trunknum)) {
264         foreach ($temp as $key=>$val) {
265           // extract all ruleXX keys
266           if (preg_match("/^rule\d+$/",$key)) {
267             $dialrules[] = $val;
268           }
269         }
270       }
271       unset($temp);
272     }
273    
274     echo "<h2>".sprintf(_("Edit %s Trunk"),strtoupper($tech))."</h2>";
275 ?>
276     <p><a title="<?php echo $channelid ?>" href="config.php?display=<?php echo urlencode($display) ?>&amp;extdisplay=<?php echo urlencode($extdisplay) ?>&amp;action=deltrunk"><?php echo _("Delete Trunk")?> <?php  echo substr($channelid,0,20); ?></a></p>
277 <?php 
278
279     // find which routes use this trunk
280     $routes = core_trunks_gettrunkroutes($trunknum);
281     $num_routes = count($routes);
282     if ($num_routes > 0) {
283       echo "<a href=# class=\"info\">"._("In use by")." ".$num_routes." ".($num_routes == 1 ? _("route") : _("routes"))."<span>";
284       foreach($routes as $route=>$priority) {
285         echo _("Route")." <b>".$route."</b>: "._("Sequence")." <b>".$priority."</b><br>";
286       }
287       echo "</span></a>";
288     } else {
289       echo "<b>"._("WARNING:")."</b> <a href=# class=\"info\">"._("This trunk is not used by any routes!")."<span>";
290       echo _("This trunk will not be able to be used for outbound calls until a route is setup that uses it. Click on <b>Outbound Routes</b> to setup routing.");
291       echo "</span></a>";
292     }
293     echo "<br><br>";
294
295   } else {
296     // set defaults
297     $outcid = "";
298     $maxchans = "";
299     $dialoutprefix = "";
300    
301     if ($tech == "zap") {
302       $channelid = "g0";
303     } else {
304       $channelid = "";
305     }
306    
307     // only for iax2/sip
308     $peerdetails = "host=***provider ip address***\nusername=***userid***\nsecret=***password***\ntype=peer";
309     $usercontext = "";
310     $userconfig = "secret=***password***\ntype=user\ncontext=from-trunk";
311     $register = "";
312    
313     $localpattern = "NXXXXXX";
314     $lddialprefix = "1";
315     $areacode = "";
316  
317     echo "<h2>".sprintf("Add %s Trunk",strtoupper($tech))."</h2>";
318   }
319 ?>
320  
321     <form name="trunkEdit" action="config.php" method="post" onsubmit="return trunkEdit_onsubmit('<?php echo ($extdisplay ? "edittrunk" : "addtrunk") ?>');">
322       <input type="hidden" name="display" value="<?php echo $display?>"/>
323       <input type="hidden" name="extdisplay" value="<?php echo $extdisplay ?>"/>
324       <input type="hidden" name="action" value=""/>
325       <input type="hidden" name="tech" value="<?php echo $tech?>"/>
326       <table>
327       <tr>
328         <td colspan="2">
329           <h4><?php echo _("General Settings")?></h4>
330         </td>
331       </tr>
332       <tr>
333         <td>
334           <a href=# class="info"><?php echo _("Outbound Caller ID")?><span><br><?php echo _("Caller ID for calls placed out on this trunk<br><br>Format: <b>\"caller name\" &lt;#######&gt;</b>. You can also use the magic string 'hidden' to hide the CallerID sent out over Digital lines ONLY (E1/T1/J1/BRI/SIP/IAX)")?><br><br></span></a>:
335         </td><td>
336           <input type="text" size="20" name="outcid" value="<?php echo $outcid;?>"/>
337         </td>
338       </tr>
339       <tr>
340         <td>
341           <a href="#" class="info"><?php echo _("Never Override CallerID")?><span><br><?php echo _("Some VoIP providers will drop the call if you try to send an invalid CallerID (one you don't 'own.' Use this to never send a CallerID that you haven't explicitly specified in this trunk or in the outbound callerid field of an extension/user. You might notice this problem if you discover that Follow-Me or RingGroups with external numbers don't work properly. Checking this box has the effect of disabling 'foreign' callerids from going out this trunk. You must define an Outbound Caller ID on the this trunk when checking this.");?><br /><br /></span></a>:
342         </td><td>
343           <input type="checkbox" name="keepcid" <?php if ($keepcid=="on") {echo "checked";}?>/>
344         </td>
345       <tr>
346         <td>
347 <?php
348   if ($tech == "sip" || substr($tech,0,3) == "iax") {
349 ?>
350           <a href=# class="info"><?php echo _("Maximum channels")?><span><?php echo sprintf(_("Controls the maximum number of outbound channels (simultaneous calls) that can be used on this trunk. To count inbound calls against this maximum, use the auto-generated context: %s as the inbound trunk's context. (see extensions_additional.conf) Leave blank to specify no maximum."),((isset($channelid) && trim($channelid)!="")?"from-trunk-$channelid":"from-trunk-[trunkname]"))?></span></a>:
351 <?php
352   } else {
353 ?>
354           <a href=# class="info"><?php echo _("Maximum channels")?><span><?php echo _("Controls the maximum number of outbound channels (simultaneous calls) that can be used on this trunk. Inbound calls are not counted against the maximum. Leave blank to specify no maximum.")?></span></a>:
355 <?php
356   }
357 ?>
358         </td><td>
359           <input type="text" size="3" name="maxchans" value="<?php echo htmlspecialchars($maxchans); ?>"/>
360         </td>
361       </tr>
362
363       <tr>
364           <td><a class="info" href="#"><?php echo _("Disable Trunk")?><span><?php echo _("Check this to disable this trunk in all routes where it is used.")?></span></a>:
365           </td>
366           <td>
367         <input type='checkbox' name='disabletrunk' id="disabletrunk" <?php if ($disabletrunk=="on") { echo 'CHECKED'; }?> OnClick='disable_verify(disabletrunk); return true;'><small><?php echo _("Disable")?></small>
368           </td>
369       </tr>
370
371       <tr>
372           <td><a class="info" href="#"><?php echo _("Monitor Trunk Failures")?><span><?php echo _("If checked, supply the name of a custom AGI Script that will be called to report, log, email or otherwise take some action on trunk failures that are not caused by either NOANSWER or CANCEL.")?></span></a>:
373           </td>
374           <td>
375         <input <?php if (!$failtrunk_enable) echo "disabled style='background: #DDD;'"?> type="text" size="20" name="failtrunk" value="<?php echo htmlspecialchars($failtrunk)?>"/>
376         <input type='checkbox' name='failtrunk_enable' id="failtrunk_enable" value='1' <?php if ($failtrunk_enable) { echo 'CHECKED'; }?> OnClick='disable_field(failtrunk,failtrunk_enable); return true;'><small><?php echo _("Enable")?></small>
377           </td>
378       </tr>
379
380       <tr>
381         <td colspan="2">
382           <br><h4><?php echo _("Outgoing Dial Rules")?></h4>
383         </td>
384       </tr>
385       <tr>
386         <td valign="top">
387           <a href=# class="info"><?php echo _("Dial Rules")?><span><?php echo _("A Dial Rule controls how calls will be dialed on this trunk. It can be used to add or remove prefixes. Numbers that don't match any patterns defined here will be dialed as-is. Note that a pattern without a + or | (to add or remove a prefix) will not make any changes but will create a match. Only the first matched rule will be executed and the remaining rules will not be acted on.")?><br /><br /><b><?php echo _("Rules:")?></b><br />
388   <strong>X</strong>&nbsp;&nbsp;&nbsp; <?php echo _("matches any digit from 0-9")?><br />
389   <strong>Z</strong>&nbsp;&nbsp;&nbsp; <?php echo _("matches any digit from 1-9")?><br />
390   <strong>N</strong>&nbsp;&nbsp;&nbsp; <?php echo _("matches any digit from 2-9")?><br />
391   <strong>[1237-9]</strong>&nbsp;   <?php echo _("matches any digit or letter in the brackets (in this example, 1,2,3,7,8,9)")?><br />
392   <strong>.</strong>&nbsp;&nbsp;&nbsp; <?php echo _("wildcard, matches one or more characters (not allowed before a | or +)")?><br />
393   <strong>|</strong>&nbsp;&nbsp;&nbsp; <?php echo _("removes a dialing prefix from the number (for example, 613|NXXXXXX would match when some dialed \"6135551234\" but would only pass \"5551234\" to the trunk)")?>
394   <strong>+</strong>&nbsp;&nbsp;&nbsp; <?php echo _("adds a dialing prefix from the number (for example, 1613+NXXXXXX would match when some dialed \"5551234\" and would pass \"16135551234\" to the trunk)")?><br /><br />
395   <?php echo _("You can also use both + and |, for example: 01+0|1ZXXXXXXXXX would match \"016065551234\" and dial it as \"0116065551234\" Note that the order does not matter, eg. 0|01+1ZXXXXXXXXX does the same thing."); ?>
396           </span></a>:
397         </td><td valign="top">&nbsp;
398           <textarea id="dialrules" cols="20" rows="<?php 
399             if (is_array($dialrules)) {
400               $rows = count($dialrules)+1;
401               echo (($rows < 5) ? 5 : (($rows > 20) ? 20 : $rows) );
402             } else {
403               echo "5";
404             } ?>" name="dialrules"><?php if(is_array($dialrules)) { echo implode("\n",$dialrules); } ?></textarea><br>
405           
406           <input type="submit" style="font-size:10px;" value="<?php echo _("Clean & Remove duplicates")?>" />
407         </td>
408       </tr>
409       <tr>
410         <td>
411           <a href=# class="info"><?php echo _("Dial rules wizards")?><span>
412           <strong><?php echo _("Always dial with prefix")?></strong> <?php echo _("is useful for VoIP trunks, where if a number is dialed as \"5551234\", it can be converted to \"16135551234\".")?><br>
413           <strong><?php echo _("Remove prefix from local numbers")?></strong> <?php echo _("is useful for ZAP trunks, where if a local number is dialed as \"6135551234\", it can be converted to \"555-1234\".")?><br>
414           <strong><?php echo _("Lookup numbers for local trunk")?></strong> <?php echo _("This looks up your local number on www.localcallingguide.com (NA-only), and sets up so you can dial either 7 or 10 digits (regardless of what your PSTN is) on a local trunk (where you have to dial 1+areacode for long distance, but only 5551234 (7-digit dialing) or 6135551234 (10-digit dialing) for local calls")?><br>
415           </span></a>:
416         </td><td valign="top">&nbsp;&nbsp;<select id="autopop" name="autopop" onChange="changeAutoPop(); ">
417             <option value="" SELECTED><?php echo _("(pick one)")?></option>
418             <option value="always"><?php echo _("Always dial with prefix")?></option>
419             <option value="remove"><?php echo _("Remove prefix from local numbers")?></option>
420             <option value="lookup7"><?php echo _("Lookup numbers for local trunk (7-digit dialing)")?></option>
421             <option value="lookup10"><?php echo _("Lookup numbers for local trunk (10-digit dialing)")?></option>
422           </select>
423         </td>
424       </tr>
425       <input id="npanxx" name="npanxx" type="hidden" />
426       <script language="javascript">
427       
428       function disable_field(field, field_enable) {
429           if (field_enable.checked) {
430         field.style.backgroundColor = '#FFF';
431         field.disabled = false;
432           }
433           else {
434         field.style.backgroundColor = '#DDD';
435         field.disabled = true;
436           }
437       }
438
439       function disable_verify(field) {
440           if (field.checked) {
441         var answer=confirm("Are you sure you want to disable this trunk in all routes it is used?");
442         if (!answer) {
443             field.checked = false;
444         }
445           }
446           else {
447         alert("You have enabled this trunk in all routes it is used");
448           }
449       }
450
451       function populateLookup(digits) {
452 <?php 
453   if (function_exists("curl_init")) { // curl is installed
454 ?>        
455         //var npanxx = prompt("What is your areacode + prefix (NPA-NXX)?", document.getElementById('areacode').value);
456         do {
457           var npanxx = <?php echo 'prompt("'._("What is your areacode + prefix (NPA-NXX)?\\n\\n(Note: this database contains North American numbers only, and is not guaranteed to be 100% accurate. You will still have the option of modifying results.)\\n\\nThis may take a few seconds.".'")')?>;
458           if (npanxx == null) return;
459         } while (!npanxx.match("^[2-9][0-9][0-9][-]?[2-9][0-9][0-9]$") && <?php echo '!alert("'._("Invalid NPA-NXX. Must be of the format \'NXX-NXX\'").'")'?>);
460         
461         document.getElementById('npanxx').value = npanxx;
462         if (digits == 10) {
463           document.trunkEdit.action.value = "populatenpanxx10";
464         } else {
465           document.trunkEdit.action.value = "populatenpanxx7";
466         }
467         document.trunkEdit.submit();
468 <?php 
469   } else { // curl is not installed
470 ?>
471         <?php echo 'alert("'._("Error: Cannot continue!\\n\\nPrefix lookup requires cURL support in PHP on the server. Please install or enable cURL support in your PHP installation to use this function. See http://www.php.net/curl for more information.").'")'?>;
472 <?php 
473   }
474 ?>
475       }
476       
477       function populateAlwaysAdd() {
478         do {
479           var localpattern = <?php echo 'prompt("'._("What is the local dialing pattern?\\n\\n(ie. NXXNXXXXXX for US/CAN 10-digit dialing, NXXXXXX for 7-digit)").'"'?>,"NXXXXXX");
480           if (localpattern == null) return;
481         } while (!localpattern.match('^[0-9#*ZXN\.]+$') && <?php echo '!alert("'._("Invalid pattern. Only 0-9, #, *, Z, N, X and . are allowed.").'")'?>);
482         
483         do {
484           var localprefix = <?php echo 'prompt("'._("What prefix should be added to the dialing pattern?\\n\\n(ie. for US/CAN, 1+areacode, ie, \'1613\')?").'")'?>;
485           if (localprefix == null) return;
486         } while (!localprefix.match('^[0-9#*]+$') && <?php echo '!alert("'._("Invalid prefix. Only dialable characters (0-9, #, and *) are allowed.").'")'?>);
487
488         dialrules = document.getElementById('dialrules');
489         if (dialrules.value[dialrules.value.length-1] != '\n') {
490           dialrules.value = dialrules.value + '\n';
491         }
492         dialrules.value = dialrules.value + localprefix + '+' + localpattern + '\n';
493       }
494       
495       function populateRemove() {
496         do {
497           var localprefix = <?php echo 'prompt("'._("What prefix should be removed from the number?\\n\\n(ie. for US/CAN, 1+areacode, ie, \'1613\')").'")'?>;
498           if (localprefix == null) return;
499         } while (!localprefix.match('^[0-9#*ZXN\.]+$') && <?php echo '!alert("'._('Invalid prefix. Only 0-9, #, *, Z, N, and X are allowed.').'")'?>);
500         
501         do {
502           var localpattern = <?php echo 'prompt("'._("What is the dialing pattern for local numbers after")?> "+localprefix+"? \n\n<?php echo _("(ie. NXXNXXXXXX for US/CAN 10-digit dialing, NXXXXXX for 7-digit)").'"'?>,"NXXXXXX");
503           if (localpattern == null) return;
504         } while (!localpattern.match('^[0-9#*ZXN\.]+$') && <?php echo '!alert("'._("Invalid pattern. Only 0-9, #, *, Z, N, X and . are allowed.").'")'?>);
505         
506         dialrules = document.getElementById('dialrules');
507         if (dialrules.value[dialrules.value.length-1] != '\n') {
508           dialrules.value = dialrules.value + '\n';
509         }
510         dialrules.value = dialrules.value + localprefix + '|' + localpattern + '\n';
511       }
512       
513       function changeAutoPop() {
514         switch(document.getElementById('autopop').value) {
515           case "always":
516             populateAlwaysAdd();
517           break;
518           case "remove":
519             populateRemove();
520           break;
521           case "lookup7":
522             populateLookup(7);
523           break;
524           case "lookup10":
525             populateLookup(10);
526           break;
527         }
528         document.getElementById('autopop').value = '';
529       }
530       </script>
531 <?php /* //DIALRULES
532       <tr>
533         <td>
534           <a href=# class="info">Dial rules<span>The area code this trunk is in.</span></a>:
535         </td><td>&nbsp;
536           <select id="dialrulestype" name="dialrulestype" onChange="changeRulesType();">
537 <?php
538           $rules = array( "asis" => "Don't change number",
539               "always" => "Always dial prefix+areacode",
540               "local" => "Local 7-digit dialing",
541               "local10" => "Local 10-digit dialing");
542
543           foreach ($rules as $value=>$display) {
544             echo "<option value=\"".$value."\" ".(($value == $dialrulestype) ? "SELECTED" : "").">".$display."</option>";
545           }
546 ?>
547           </select>
548           
549         </td>
550       </tr>
551       <tr>
552         <td>
553           <a href=# class="info"><?php echo _("Local dialing pattern<span>The dialing pattern to make a 'local' call.</span>")</a>:
554         </td><td>
555           <input id="localpattern" type="text" size="10" maxlength="20" name="localpattern" value="<?php echo $localpattern ?>"/>
556           
557         </td>
558       </tr>
559       <tr>
560         <td>
561           <a href=# class="info"><?php echo _("Long-distance dial prefix<span>The prefix for dialing long-distance numbers. In north america, this should be \"1\".</span>")?></a>:
562         </td><td>
563           <input id="lddialprefix" type="text" size="3" maxlength="6" name="lddialprefix" value="<?php echo $lddialprefix ?>"/>
564           
565         </td>
566       </tr>
567       <tr>
568         <td>
569           <a href=# class="info"><?php echo _("Local LD prefix<span>The area code this trunk is in. Any 7-digit numbers that don't match a number in the below list will have dialprefix+areacode added to them. </span>")?></a>:
570         </td><td>
571           <input id="areacode" type="text" size="3" maxlength="6" name="areacode" value="<?php echo $areacode ?>"/>
572           
573         </td>
574       </tr>
575       <tr>
576         <td valign="top">
577           <a href=# class="info"><?php echo _("Local prefixes<span>This should be a list of local areacodes + prefixes to use for local dialing.</span>")?></a>:
578         </td><td valign="top">&nbsp;
579           <textarea id="localprefixes" cols="8" rows="<?php  $rows = count($localprefixes)+1; echo (($rows < 5) ? 5 : (($rows > 20) ? 20 : $rows) ); ?>" name="localprefixes"><?php echo  implode("\n",$localprefixes);?></textarea><br>
580           
581           <input id="npanxx" name="npanxx" type="hidden" /><br>
582           <a href=# class="info"><?php echo _("Populate with local rules<span>Do a lookup from http://members.dandy.net/~czg/search.html to find all local-reachable area codes and phone numbers.</span>")?></a>: <input type="button" value="Go" onClick="checkPopulate();" />
583           <br><br>
584         </td>
585       </tr>
586       <script language="javascript">
587       
588       function checkPopulate() {
589         //var npanxx = prompt("What is your areacode + prefix (NPA-NXX)?", document.getElementById('areacode').value);
590         var npanxx = <?php echo 'prompt("'._("What is your areacode + prefix (NPA-NXX)?").'")'?>;
591         
592         if (npanxx.match("^[2-9][0-9][0-9][-]?[2-9][0-9][0-9]$")) {
593           document.getElementById('npanxx').value = npanxx;
594           trunkEdit.action.value = "populatenpanxx";
595           trunkEdit.submit();
596         } else if (npanxx != null) {
597           <?php echo 'alert("'._("Invalid format for NPA-NXX code (must be format: NXXNXX)").'")'?>;
598         }
599       }
600       
601       function changeRulesType() {
602         switch(document.getElementById('dialrulestype').value) {
603           case "always":
604             document.getElementById('lddialprefix').disabled = false;
605             document.getElementById('areacode').disabled = false;
606             document.getElementById('localprefixes').disabled = true;
607           break;
608           case "local":
609           case "local10":
610             document.getElementById('lddialprefix').disabled = false;
611             document.getElementById('areacode').disabled = false;
612             document.getElementById('localprefixes').disabled = false;
613           break;
614           case "asis":
615           default:
616             document.getElementById('lddialprefix').disabled = true;
617             document.getElementById('areacode').disabled = true;
618             document.getElementById('localprefixes').disabled = true;
619           break;
620         }
621       }
622       changeRulesType();
623       </script>
624 */?>
625       <tr>
626         <td>
627           <a href=# class="info"><?php echo _("Outbound Dial Prefix")?><span><?php echo _("The outbound dialing prefix is used to prefix a dialing string to all outbound calls placed on this trunk. For example, if this trunk is behind another PBX or is a Centrex line, then you would put 9 here to access an outbound line. Another common use is to prefix calls with 'w' on a POTS line that need time to obtain dialtone to avoid eating digits.<br><br>Most users should leave this option blank.")?></span></a>:
628         </td><td>
629           <input type="text" size="8" name="dialoutprefix" value="<?php echo htmlspecialchars($dialoutprefix) ?>"/>
630         </td>
631       </tr>
632       <?php if ($tech != "enum") { ?>
633       <tr>
634         <td colspan="2">
635           <br><h4><?php echo _("Outgoing Settings")?></h4>
636         </td>
637       </tr>
638       <?php } ?>
639
640   <?php
641   switch ($tech) {
642     case "zap":
643   ?>
644         <tr>
645           <td>
646             <a href=# class="info"><?php echo _("Zap Identifier (trunk name)")?><span><br><?php echo _("ZAP channels are referenced either by a group number or channel number (which is defined in zapata.conf).  <br><br>The default setting is <b>g0</b> (group zero).")?><br><br></span></a>:
647           </td><td>
648             <input type="text" size="8" name="channelid" value="<?php echo htmlspecialchars($channelid) ?>"/>
649             <input type="hidden" size="14" name="usercontext" value="notneeded"/>
650           </td>
651         </tr>
652   <?php
653     break;
654     case "enum":
655     break;
656     case "custom":
657   ?>
658         <tr>
659           <td>
660             <a href=# class="info"><?php echo _("Custom Dial String")?><span><?php echo _("Define the custom Dial String.  Include the token")?> $OUTNUM$ <?php echo _("wherever the number to dial should go.<br><br><b>examples:</b><br><br>CAPI/XXXXXXXX/")?>$OUTNUM$<?php echo _("/b<br>H323/")?>$OUTNUM$@XX.XX.XX.XX<br>OH323/$OUTNUM$@XX.XX.XX.XX:XXXX<br>vpb/1-1/$OUTNUM$</span></a>:
661           </td><td>
662             <input type="text" size="35" maxlength="46" name="channelid" value="<?php echo htmlspecialchars($channelid) ?>"/>
663             <input type="hidden" size="14" name="usercontext" value="notneeded"/>
664           </td>
665         </tr>
666   <?php
667     break;
668     default:
669   ?>
670         <tr>
671           <td>
672             <a href=# class="info"><?php echo _("Trunk Name")?><span><br><?php echo _("Give this trunk a unique name.  Example: myiaxtel")?><br><br></span></a>:
673           </td><td>
674             <input type="text" size="14" name="channelid" value="<?php echo htmlspecialchars($channelid) ?>"/>
675           </td>
676         </tr>
677         <tr>
678           <td colspan="2">
679             <a href=# class="info"><?php echo _("PEER Details")?><span><br><?php echo _("Modify the default PEER connection parameters for your VoIP provider.<br><br>You may need to add to the default lines listed below, depending on your provider.")?><br><br></span></a>:
680           </td>
681         </tr>
682         <tr>
683           <td colspan="2">
684             <textarea rows="10" cols="40" name="peerdetails"><?php echo htmlspecialchars($peerdetails) ?></textarea>
685           </td>
686         </tr>
687         <tr>
688           <td colspan="2">
689             <br><h4><?php echo _("Incoming Settings")?></h4>
690           </td>
691         </tr>
692         <tr>
693           <td>
694             <a href=# class="info"><?php echo _("USER Context")?><span><br><?php echo _("This is most often the account name or number your provider expects.<br><br>This USER Context will be used to define the below user details.")?></span></a>:
695           </td><td>
696             <input type="text" size="14" name="usercontext" value="<?php echo htmlspecialchars($usercontext)  ?>"/>
697           </td>
698         </tr>
699         <tr>
700           <td colspan="2">
701             <a href=# class="info"><?php echo _("USER Details")?><span><br><?php echo _("Modify the default USER connection parameters for your VoIP provider.")?><br><br><?php echo _("You may need to add to the default lines listed below, depending on your provider.")?><br><br></span></a>:
702           </td>
703         </tr>
704         <tr>
705           <td colspan="2">
706             <textarea rows="10" cols="40" name="userconfig"><?php echo htmlspecialchars($userconfig); ?></textarea>
707           </td>
708         </tr>
709         <tr>
710           <td colspan="2">
711             <br><h4><?php echo _("Registration")?></h4>
712           </td>
713         </tr>
714         <tr>
715           <td colspan="2">
716             <a href=# class="info"><?php echo _("Register String")?><span><br><?php echo _("Most VoIP providers require your system to REGISTER with theirs. Enter the registration line here.<br><br>example:<br><br>username:password@switch.voipprovider.com.<br><br>Many providers will require you to provide a DID number, ex: username:password@switch.voipprovider.com/didnumber in order for any DID matching to work.")?><br><br></span></a>:
717           </td>
718         </tr>
719         <tr>
720           <td colspan="2">
721             <input type="text" size="40" name="register" value="<?php echo htmlspecialchars($register) ?>"/>
722           </td>
723         </tr>
724   <?php
725     break;
726   }
727   ?>
728         
729       <tr>
730         <td colspan="2">
731           <h6><input name="Submit" type="submit" value="<?php echo _("Submit Changes")?>"></h6>
732         </td>
733       </tr>
734       </table>
735
736 <script language="javascript">
737 <!--
738
739 var theForm = document.trunkEdit;
740
741 theForm.outcid.focus();
742
743 function trunkEdit_onsubmit(act) {
744   var msgInvalidOutboundCID = "<?php echo _('Invalid Outbound Caller ID'); ?>";
745   var msgInvalidMaxChans = "<?php echo _('Invalid Maximum Channels'); ?>";
746   var msgInvalidDialRules = "<?php echo _('Invalid Dial Rules'); ?>";
747   var msgInvalidOutboundDialPrefix = "<?php echo _('Invalid Outbound Dial Prefix'); ?>";
748   var msgInvalidTrunkName = "<?php echo _('Invalid Trunk Name entered'); ?>";
749   var msgInvalidChannelName = "<?php echo _('Invalid Custom Dial String entered'); ?>";
750   var msgInvalidTrunkAndUserSame = "<?php echo _('Trunk Name and User Context cannot be set to the same value'); ?>";
751   var msgConfirmBlankContext = "<?php echo _('User Context was left blank and User Details will not be saved!'); ?>";
752   var msgNeverOverrideCIDValue = "<?php echo _('You must define an Outbound Caller ID when Choosing Never Override CallerID'); ?>";
753
754   defaultEmptyOK = true;
755
756   if (theForm.keepcid.checked && isEmpty($.trim(theForm.outcid.value)))
757     return warnInvalid(theForm.outcid, msgNeverOverrideCIDValue);
758
759   if (!isCallerID(theForm.outcid.value))
760     return warnInvalid(theForm.outcid, msgInvalidOutboundCID);
761  
762   if (!isInteger(theForm.maxchans.value))
763     return warnInvalid(theForm.maxchans, msgInvalidMaxChans);
764  
765   if (!isDialrule(theForm.dialrules.value))
766     return warnInvalid(theForm.dialrules, msgInvalidDialRules);
767  
768   if (!isDialIdentifierSpecial(theForm.dialoutprefix.value))
769     return warnInvalid(theForm.dialoutprefix, msgInvalidOutboundDialPrefix);
770  
771   <?php if ($tech != "enum" && $tech != "custom") { ?>
772   defaultEmptyOK = true;
773   if (isEmpty(theForm.channelid.value) || isWhitespace(theForm.channelid.value))
774     return warnInvalid(theForm.channelid, msgInvalidTrunkName);
775  
776   if (theForm.channelid.value == theForm.usercontext.value)
777     return warnInvalid(theForm.usercontext, msgInvalidTrunkAndUserSame);
778   <?php } else if ($tech == "custom") { ?>
779   if (isEmpty(theForm.channelid.value) || isWhitespace(theForm.channelid.value))
780     return warnInvalid(theForm.channelid, msgInvalidChannelName);
781
782   if (theForm.channelid.value == theForm.usercontext.value)
783     return warnInvalid(theForm.usercontext, msgInvalidTrunkAndUserSame);
784   <?php } ?>
785
786   <?php if ($tech == "sip" || substr($tech,0,3) == "iax") { ?>
787   if ((isEmpty(theForm.usercontext.value) || isWhitespace(theForm.usercontext.value)) &&
788     (!isEmpty(theForm.userconfig.value) && !isWhitespace(theForm.userconfig.value)) &&
789       (theForm.userconfig.value != "secret=***password***\ntype=user\ncontext=from-trunk")) {
790         if (confirm(msgConfirmBlankContext) == false)
791         return false;
792       }
793   <?php } ?>
794
795   theForm.action.value = act;
796   return true;
797 }
798
799 function isDialIdentifierSpecial(s) { // special chars allowed in dial prefix (e.g. fwdOUT)
800     var i;
801
802     if (isEmpty(s))
803        if (isDialIdentifierSpecial.arguments.length == 1) return defaultEmptyOK;
804        else return (isDialIdentifierSpecial.arguments[1] == true);
805
806     for (i = 0; i < s.length; i++)
807     {   
808         var c = s.charAt(i);
809
810         if ( !isDialDigitChar(c) && (c != "w") && (c != "W") && (c != "q") && (c != "Q") && (c != "+") ) return false;
811     }
812
813     return true;
814 }
815 //-->
816 </script>
817
818     </form>
819 <?php 
820 }
821 ?>
Note: See TracBrowser for help on using the browser.