root/modules/branches/2.7/disa/functions.inc.php

Revision 10253, 7.1 kB (checked in by p_lindheimer, 3 years ago)

fixes #4537 use TRUNK_OPTIONS on the DISA call, in case transfer and other options are enabled

  • Property svn:mime-type set to text/html
  • Property svn:eol-style set to native
Line 
1 <?php
2 /* $Id */
3
4
5 // This is the hook for 'destinations'
6 function disa_destinations() {
7   $results = disa_list();
8   // return an associative array with destination and description
9   if (isset($results)) {
10     foreach($results as $result){
11       $extens[] = array('destination' => 'disa,'.$result['disa_id'].',1', 'description' => $result['displayname']);
12     }
13     return $extens;
14   } else {
15     return null;
16   }
17 }
18
19 function disa_getdest($exten) {
20   return array('disa,'.$exten.',1');
21 }
22
23 function disa_getdestinfo($dest) {
24   global $active_modules;
25
26   if (substr(trim($dest),0,5) == 'disa,') {
27     $exten = explode(',',$dest);
28     $exten = $exten[1];
29     $thisexten = disa_get($exten);
30     if (empty($thisexten)) {
31       return array();
32     } else {
33       //$type = isset($active_modules['announcement']['type'])?$active_modules['announcement']['type']:'setup';
34       return array('description' => sprintf(_("DISA: %s"),$thisexten['displayname']),
35                    'edit_url' => 'config.php?display=disa&itemid='.urlencode($exten),
36                   );
37     }
38   } else {
39     return false;
40   }
41 }
42
43 // This actually generates the dialplan
44 function disa_get_config($engine) {
45   global $ext;
46   switch($engine) {
47   case "asterisk":
48     $disalist = disa_list();
49     if(is_array($disalist)) {
50       foreach($disalist as $item) {
51         $nopass = false;
52           
53         // delete it incase there was one from before (of course if it was deleted???
54         // this should all be done properly in class, see pinsets, but for now ...
55         //
56         $filename = "/etc/asterisk/disa-".$item['disa_id'].".conf";
57         if (file_exists($filename)) {
58           unlink($filename);
59         }
60         if (isset($item['pin']) && !empty($item['pin']) && (strtolower($item['pin']) != 'no-password')) {
61           // Create the disa-$id.conf file
62           $fh = fopen($filename, "w+");
63           $pinarr = explode(',' , $item['pin'] );
64           if (count($pinarr) > 1) {
65             $is_file = true;
66             foreach($pinarr as $pin) {
67               // Don't support remote MWI, too easy for users to break.
68               fwrite($fh, "$pin\n");
69             }
70             fclose($fh);
71             chmod($filename, 0660);
72           } else {
73             $is_file = false;
74           }
75         } else {
76           $nopass = true;
77         }
78                                         
79         $thisitem = disa_get(ltrim($item['disa_id']));
80         // add dialplan
81
82         if ($thisitem['needconf'] == 'CHECKED') {
83           $ext->add('disa', $item['disa_id'], '', new ext_setvar('RESCOUNT', '1'));
84           $ext->add('disa', $item['disa_id'], 'loop',  new ext_gotoif('$[ ${RESCOUNT} > 5]', 'end'));
85           $ext->add('disa', $item['disa_id'], '',  new ext_read('RRES', 'press-1', '1', ',1,3'));
86           $ext->add('disa', $item['disa_id'], '', new ext_setvar('RESCOUNT', '$[${RESCOUNT}+1]'));
87           $ext->add('disa', $item['disa_id'], '', new ext_gotoif('$["x${RRES}"="x"]', 'loop'));
88         }
89         if (!$nopass) {
90           if ($is_file) {
91             $ext->add('disa', $item['disa_id'], '', new ext_authenticate('/etc/asterisk/disa-'.$item['disa_id'].'.conf'));
92           } else {
93             $ext->add('disa', $item['disa_id'], '', new ext_authenticate($item['pin']));
94           }
95         }
96         $ext->add('disa', $item['disa_id'], '', new ext_setvar('_DISA', '"disa,'.$item['disa_id'].',newcall"'));
97         $ext->add('disa', $item['disa_id'], 'newcall', new ext_setvar('_DISACONTEXT', $thisitem['context']));
98         $ext->add('disa', $item['disa_id'], '', new ext_setvar('_KEEPCID', 'TRUE'));
99         if ($thisitem['hangup'] == 'CHECKED') {
100           $ext->add('disa', $item['disa_id'], '', new ext_setvar('_HANGUP', '${TRUNK_OPTIONS}Hg'));
101         } else {
102           $ext->add('disa', $item['disa_id'], '', new ext_setvar('_HANGUP', '${TRUNK_OPTIONS}'));
103         }
104         $ext->add('disa', $item['disa_id'], '', new ext_setvar('TIMEOUT(digit)', $thisitem['digittimeout']));
105         $ext->add('disa', $item['disa_id'], '', new ext_setvar('TIMEOUT(response)', $thisitem['resptimeout']));
106           
107         if ($item['cid']) {
108           $ext->add('disa', $item['disa_id'], '', new ext_setvar('CALLERID(all)', $item['cid']));
109         }
110         $ext->add('disa', $item['disa_id'], '', new ext_disa('no-password,disa-dial'));
111     
112         $ext->add('disa', $item['disa_id'], 'end', new ext_hangup(''));
113       }
114
115
116       $context = 'disa-dial';
117       $exten = '_[0-9a-zA-Z*#].';
118       $ext->add($context, $exten, '', new ext_noop('called ${EXTEN} in ${DISACONTEXT} by ${DISA}'));
119       $ext->add($context, $exten, '', new ext_dial('Local/${EXTEN}@${DISACONTEXT}', '300,${HANGUP}'));  // Regular Trunk Dial
120       $ext->add($context, $exten, '', new ext_gosub('1', 's-${DIALSTATUS}'));
121       $ext->add($context, $exten, '', new ext_goto('${DISA}'));
122
123       $exten = 's-ANSWER';
124       $ext->add($context, $exten, '', new ext_return());
125
126       $exten = 's-CANCEL';
127       $ext->add($context, $exten, '', new ext_return());
128
129       $exten = 's-BUSY';
130       $ext->add($context, $exten, '', new ext_playtones('busy'));
131       $ext->add($context, $exten, '', new ext_wait('3'));
132       $ext->add($context, $exten, '', new ext_return());
133
134       $exten = '_s-.';
135       $ext->add($context, $exten, '', new ext_noop('DISA Dial failed due to ${DIALSTATUS} - returning to dial tone'));
136       $ext->add($context, $exten, '', new ext_playtones('congestion'));
137       $ext->add($context, $exten, '', new ext_wait('3'));
138       $ext->add($context, $exten, '', new ext_stopplaytones());
139       $ext->add($context, $exten, '', new ext_return());
140     }
141     break;
142   }
143 }
144
145 function disa_list() {
146   $results = sql("SELECT * FROM disa","getAll",DB_FETCHMODE_ASSOC);
147   if(is_array($results)){
148     foreach($results as $result){
149       // check to see if we have a dept match for the current AMP User.
150       if (!isset($results['deptname']) || checkDept($result['deptname'])){
151         // return this item's dialplan destination, and the description
152         $allowed[] = $result;
153       }
154     }
155   }
156   if (isset($allowed)) {
157     return $allowed;
158   } else {
159     return null;
160   }
161 }
162
163 function disa_get($id){
164   //get all the variables for the meetme
165   $results = sql("SELECT * FROM disa WHERE disa_id = '$id'","getRow",DB_FETCHMODE_ASSOC);
166   return $results;
167 }
168
169 function disa_chk($post) {
170   return true;
171 }
172
173 function disa_add($post) {
174   global $db;
175   if(!disa_chk($post)) {
176     return null;
177   }
178   extract($post);
179   if (!isset($needconf))
180     $needconf = '';
181     if(empty($displayname)) {
182       $displayname = "unnamed";
183     }
184     $results = sql("INSERT INTO disa (displayname,pin,cid,context,resptimeout,digittimeout,needconf,hangup) values ('".$db->escapeSimple($displayname)."','".$db->escapeSimple($pin)."','".$db->escapeSimple($cid)."','".$db->escapeSimple($context)."', '".$db->escapeSimple($resptimeout)."', '".$db->escapeSimple($digittimeout)."', '$needconf', '$hangup')");
185 }
186
187 function disa_del($id) {
188   $results = sql("DELETE FROM disa WHERE disa_id = \"$id\"","query");
189   unlink("/etc/asterisk/disa-{$id}.conf");
190 }
191
192 function disa_edit($id, $post) {
193   global $db;
194   if (!disa_chk($post)) {
195     return null;
196   }
197   extract($post);
198   if (!isset($needconf)) {
199     $needconf = '';
200   }
201   if(empty($displayname)) {
202     $displayname = "unnamed";
203   }
204   $results = sql("UPDATE disa  set displayname = '".$db->escapeSimple($displayname)."', pin = '".$db->escapeSimple($pin)."', cid = '".$db->escapeSimple($cid)."', context = '".$db->escapeSimple($context)."', resptimeout = '".$db->escapeSimple($resptimeout)."', digittimeout = '".$db->escapeSimple($digittimeout)."', needconf = \"$needconf\", hangup = \"$hangup\" where disa_id = '$id'");
205 }
206 ?>
Note: See TracBrowser for help on using the browser.