root/modules/branches/2.5/ringgroups/functions.inc.php

Revision 6900, 11.4 kB (checked in by p_lindheimer, 5 years ago)

translation enclosures to get tool tips in the reference links translated, more are needed this is just 4 modules

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1 <?php /* $Id$ */
2
3 // The destinations this module provides
4 // returns a associative arrays with keys 'destination' and 'description'
5 function ringgroups_destinations() {
6     //get the list of ringgroups
7     $results = ringgroups_list();
8     
9     // return an associative array with destination and description
10     if (isset($results)) {
11         foreach($results as $result){
12                 $thisgrp = ringgroups_get(ltrim($result['0']));
13                 $extens[] = array('destination' => 'ext-group,'.ltrim($result['0']).',1', 'description' => $thisgrp['description'].' <'.ltrim($result['0']).'>');
14         }
15     }
16     
17     if (isset($extens))
18         return $extens;
19     else
20         return null;
21 }
22
23 function ringgroups_getdest($exten) {
24     return array("ext-group,$exten,1");
25 }
26
27 function ringgroups_getdestinfo($dest) {
28     if (substr(trim($dest),0,10) == 'ext-group,') {
29         $grp = explode(',',$dest);
30         $grp = $grp[1];
31         $thisgrp = ringgroups_get($grp);
32         if (empty($thisgrp)) {
33             return array();
34         } else {
35             return array('description' => sprintf(_("Ring Group %s: "),$grp).$thisgrp['description'],
36                          'edit_url' => 'config.php?display=ringgroups&extdisplay=GRP-'.urlencode($grp),
37                                   );
38         }
39     } else {
40         return false;
41     }
42 }
43
44 function ringgroups_recordings_usage($recording_id) {
45     global $active_modules;
46
47     $results = sql("SELECT `grpnum`, `description` FROM `ringgroups` WHERE `annmsg_id` = '$recording_id' OR `remotealert_id` = '$recording_id' OR `toolate_id` = '$recording_id'","getAll",DB_FETCHMODE_ASSOC);
48     if (empty($results)) {
49         return array();
50     } else {
51         //$type = isset($active_modules['ivr']['type'])?$active_modules['ivr']['type']:'setup';
52         foreach ($results as $result) {
53             $usage_arr[] = array(
54                 'url_query' => 'config.php?display=ringgroups&extdisplay=GRP-'.urlencode($result['grpnum']),
55                 'description' => sprintf(_("Ring Group: %s "),$result['description']),
56             );
57         }
58         return $usage_arr;
59     }
60 }
61
62 /*     Generates dialplan for ringgroups
63     We call this with retrieve_conf
64 */
65 function ringgroups_get_config($engine) {
66     global $ext// is this the best way to pass this?
67     switch($engine) {
68         case "asterisk":
69             $ext->addInclude('from-internal-additional','ext-group');
70             $ext->addInclude('from-internal-additional','grps');
71             $contextname = 'ext-group';
72             $ringlist = ringgroups_list(true);
73             if (is_array($ringlist)) {
74                 foreach($ringlist as $item) {
75                     $grpnum = ltrim($item['0']);
76                     $grp = ringgroups_get($grpnum);
77                     
78                     $strategy = $grp['strategy'];
79                     $grptime = $grp['grptime'];
80                     $grplist = $grp['grplist'];
81                     $postdest = $grp['postdest'];
82                     $grppre = (isset($grp['grppre'])?$grp['grppre']:'');
83                     $annmsg_id = (isset($grp['annmsg_id'])?$grp['annmsg_id']:'');
84                     $alertinfo = $grp['alertinfo'];
85                     $needsconf = $grp['needsconf'];
86                     $cwignore = $grp['cwignore'];
87                     $cfignore = $grp['cfignore'];
88                     $remotealert_id = $grp['remotealert_id'];
89                     $toolate_id = $grp['toolate_id'];
90                     $ringing = $grp['ringing'];
91
92                     if($ringing == 'Ring' || empty($ringing) ) {
93                         $dialopts = '${DIAL_OPTIONS}';
94                     } else {
95                         // We need the DIAL_OPTIONS variable
96                         $sops = sql("SELECT value from globals where variable='DIAL_OPTIONS'", "getRow");
97                         $dialopts = "m(${ringing})".str_replace('r', '', $sops[0]);
98                     }
99                         
100
101                     $ext->add($contextname, $grpnum, '', new ext_macro('user-callerid'));
102
103                     // block voicemail until phone is answered at which point a macro should be called on the answering
104                     // line to clear this flag so that subsequent transfers can occur, if already set by a the caller
105                     // then don't change.
106                     //
107                     $ext->add($contextname, $grpnum, '', new ext_gotoif('$["foo${BLKVM_OVERRIDE}" = "foo"]', 'skipdb'));
108                     $ext->add($contextname, $grpnum, '', new ext_gotoif('$["${DB(${BLKVM_OVERRIDE})}" = "TRUE"]', 'skipov'));
109
110                     $ext->add($contextname, $grpnum, 'skipdb', new ext_setvar('__NODEST', ''));
111                     $ext->add($contextname, $grpnum, '', new ext_setvar('__BLKVM_OVERRIDE', 'BLKVM/${EXTEN}/${CHANNEL}'));
112                     $ext->add($contextname, $grpnum, '', new ext_setvar('__BLKVM_BASE', '${EXTEN}'));
113                     $ext->add($contextname, $grpnum, '', new ext_setvar('DB(${BLKVM_OVERRIDE})', 'TRUE'));
114
115                     // Remember if NODEST was set later, but clear it in case the call is answered so that subsequent
116                     // transfers work.
117                     //
118                     $ext->add($contextname, $grpnum, 'skipov', new ext_setvar('RRNODEST', '${NODEST}'));
119                     $ext->add($contextname, $grpnum, 'skipvmblk', new ext_setvar('__NODEST', '${EXTEN}'));
120                     
121                     // deal with group CID prefix
122                     // but strip only if you plan on setting a new one
123                     if ($grppre != '') {
124                         $ext->add($contextname, $grpnum, '', new ext_gotoif('$["foo${RGPREFIX}" = "foo"]', 'REPCID'));
125                         $ext->add($contextname, $grpnum, '', new ext_gotoif('$["${RGPREFIX}" != "${CALLERID(name):0:${LEN(${RGPREFIX})}}"]', 'REPCID'));
126                         $ext->add($contextname, $grpnum, '', new ext_noop('Current RGPREFIX is ${RGPREFIX}....stripping from Caller ID'));
127                         $ext->add($contextname, $grpnum, '', new ext_setvar('CALLERID(name)', '${CALLERID(name):${LEN(${RGPREFIX})}}'));
128                         $ext->add($contextname, $grpnum, '', new ext_setvar('_RGPREFIX', ''));
129                         $ext->add($contextname, $grpnum, 'REPCID', new ext_noop('CALLERID(name) is ${CALLERID(name)}'));
130                         $ext->add($contextname, $grpnum, '', new ext_setvar('_RGPREFIX', $grppre));
131                         $ext->add($contextname, $grpnum, '', new ext_setvar('CALLERID(name)','${RGPREFIX}${CALLERID(name)}'));
132                     }
133                     
134                     // Set Alert_Info
135                     if ($alertinfo != '') {
136                         $ext->add($contextname, $grpnum, '', new ext_setvar('__ALERT_INFO', str_replace(';', '\;', $alertinfo)));
137                     }
138                     if ($cwignore != '') {
139                          $ext->add($contextname, $grpnum, '', new ext_setvar('__CWIGNORE', 'TRUE'));
140                     }
141                     if ($cwignore != '') {
142                          $ext->add($contextname, $grpnum, '', new ext_setvar('_CFIGNORE', 'TRUE'));
143                          $ext->add($contextname, $grpnum, '', new ext_setvar('_FORWARD_CONTEXT', 'block-cf'));
144                     }
145
146                     // recording stuff
147                     $ext->add($contextname, $grpnum, '', new ext_setvar('RecordMethod','Group'));
148                     $ext->add($contextname, $grpnum, '', new ext_macro('record-enable',$grplist.',${RecordMethod}'));
149
150                     // group dial
151                     $ext->add($contextname, $grpnum, '', new ext_setvar('RingGroupMethod',$strategy));
152                     if ($annmsg_id) {
153                         $annmsg = recordings_get_file($annmsg_id);
154                         $ext->add($contextname, $grpnum, '', new ext_gotoif('$["foo${RRNODEST}" != "foo"]','DIALGRP'));           
155                         $ext->add($contextname, $grpnum, '', new ext_answer(''));
156                         $ext->add($contextname, $grpnum, '', new ext_wait(1));
157                         $ext->add($contextname, $grpnum, '', new ext_playback($annmsg));
158                     }
159                     if ($needsconf == "CHECKED") {
160                         $remotealert = recordings_get_file($remotealert_id);
161                         $toolate = recordings_get_file($toolate_id);
162                         $len=strlen($grpnum)+4;
163                         $ext->add("grps", "_RG-${grpnum}-.", '', new ext_macro('dial',$grptime.
164                             ",M(confirm^${remotealert}^${toolate}^${grpnum})$dialopts".',${EXTEN:'.$len.'}'));
165                         $ext->add($contextname, $grpnum, 'DIALGRP', new ext_macro('dial-confirm',"$grptime,$dialopts,$grplist,$grpnum"));
166                     } else {
167                         $ext->add($contextname, $grpnum, 'DIALGRP', new ext_macro('dial',$grptime.",$dialopts,".$grplist));
168                     }
169                     $ext->add($contextname, $grpnum, '', new ext_setvar('RingGroupMethod',''));
170
171
172                     // Now if we were told to skip the destination, do so now. Otherwise reset NODEST and proceed to our destination.
173                     //
174                     $ext->add($contextname, $grpnum, '', new ext_gotoif('$["foo${RRNODEST}" != "foo"]', 'nodest'));
175                     $ext->add($contextname, $grpnum, '', new ext_setvar('__NODEST', ''));
176
177                     $ext->add($contextname, $grpnum, '', new ext_dbdel('${BLKVM_OVERRIDE}'));
178
179                     // where next?
180                     if ((isset($postdest) ? $postdest : '') != '') {
181                         $ext->add($contextname, $grpnum, '', new ext_goto($postdest));
182                     } else {
183                         $ext->add($contextname, $grpnum, '', new ext_hangup(''));
184                     }
185                     $ext->add($contextname, $grpnum, 'nodest', new ext_noop('SKIPPING DEST, CALL CAME FROM Q/RG: ${RRNODEST}'));
186                 }
187             }
188         break;
189     }
190 }
191
192 function ringgroups_add($grpnum,$strategy,$grptime,$grplist,$postdest,$desc,$grppre='',$annmsg_id='',$alertinfo,$needsconf,$remotealert_id,$toolate_id,$ringing,$cwignore,$cfignore) {
193     global $db;
194
195     $extens = ringgroups_list();
196     if(is_array($extens)) {
197         foreach($extens as $exten) {
198             if ($exten[0]===$grpnum) {
199                 echo "<script>javascript:alert('"._("This ringgroup")." ({$grpnum}) "._("is already in use")."');</script>";
200                 return false;
201             }
202         }
203     }
204     print_r($extens);
205
206     $sql = "INSERT INTO ringgroups (grpnum, strategy, grptime, grppre, grplist, annmsg_id, postdest, description, alertinfo, needsconf, remotealert_id, toolate_id, ringing, cwignore, cfignore) VALUES ('".$db->escapeSimple($grpnum)."', '".$db->escapeSimple($strategy)."', ".$db->escapeSimple($grptime).", '".$db->escapeSimple($grppre)."', '".$db->escapeSimple($grplist)."', '".$annmsg_id."', '".$db->escapeSimple($postdest)."', '".$db->escapeSimple($desc)."', '".$db->escapeSimple($alertinfo)."', '$needsconf', '$remotealert_id', '$toolate_id', '$ringing', '$cwignore', '$cfignore')";
207     $results = sql($sql);
208     return true;
209 }
210
211 function ringgroups_del($grpnum) {
212     global $db;
213
214     $results = sql("DELETE FROM ringgroups WHERE grpnum = '".$db->escapeSimple($grpnum)."'","query");
215 }
216
217 function ringgroups_list($get_all=false) {
218     $results = sql("SELECT grpnum, description FROM ringgroups ORDER BY CAST(grpnum as UNSIGNED)","getAll",DB_FETCHMODE_ASSOC);
219     foreach ($results as $result) {
220         if ($get_all || (isset($result['grpnum']) && checkRange($result['grpnum']))) {
221             $grps[] = array(
222                 0 => $result['grpnum'],
223                 1 => $result['description'],
224                 'grpnum' => $result['grpnum'],
225                 'description' => $result['description'],
226             );
227         }
228     }
229     if (isset($grps))
230         return $grps;
231     else
232         return array();
233 }
234
235 function ringgroups_check_extensions($exten=true) {
236     $extenlist = array();
237     if (is_array($exten) && empty($exten)) {
238         return $extenlist;
239     }
240     $sql = "SELECT grpnum ,description FROM ringgroups ";
241     if (is_array($exten)) {
242         $sql .= "WHERE grpnum in ('".implode("','",$exten)."')";
243     }
244     $results = sql($sql,"getAll",DB_FETCHMODE_ASSOC);
245
246     foreach ($results as $result) {
247         $thisexten = $result['grpnum'];
248         $extenlist[$thisexten]['description'] = sprintf(_("Ring Group: %s"),$result['description']);
249         $extenlist[$thisexten]['status'] = _('INUSE');
250         $extenlist[$thisexten]['edit_url'] = 'config.php?display=ringgroups&extdisplay=GRP-'.urlencode($thisexten);
251     }
252     return $extenlist;
253 }
254
255 function ringgroups_check_destinations($dest=true) {
256     global $active_modules;
257
258     $destlist = array();
259     if (is_array($dest) && empty($dest)) {
260         return $destlist;
261     }
262     $sql = "SELECT grpnum, postdest, description FROM ringgroups ";
263     if ($dest !== true) {
264         $sql .= "WHERE postdest in ('".implode("','",$dest)."')";
265     }
266     $results = sql($sql,"getAll",DB_FETCHMODE_ASSOC);
267
268     //$type = isset($active_modules['announcement']['type'])?$active_modules['announcement']['type']:'setup';
269
270     foreach ($results as $result) {
271         $thisdest = $result['postdest'];
272         $thisid   = $result['grpnum'];
273         $destlist[] = array(
274             'dest' => $thisdest,
275             'description' => sprintf(_("Ringroup: %s (%s)"),$result['description'],$thisid),
276             'edit_url' => 'config.php?display=ringgroups&extdisplay=GRP-'.urlencode($thisid),
277         );
278     }
279     return $destlist;
280 }
281
282 function ringgroups_get($grpnum) {
283     global $db;
284
285     $results = sql("SELECT grpnum, strategy, grptime, grppre, grplist, annmsg_id, postdest, description, alertinfo, needsconf, remotealert_id, toolate_id, ringing, cwignore, cfignore FROM ringgroups WHERE grpnum = '".$db->escapeSimple($grpnum)."'","getRow",DB_FETCHMODE_ASSOC);
286     return $results;
287 }
288 ?>
289
Note: See TracBrowser for help on using the browser.