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

Revision 2596, 5.6 kB (checked in by webrainstorm, 7 years ago)

Fix for #1142 (Alert-Info and ';') - ringgroups module

  • 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 /*     Generates dialplan for ringgroups
24     We call this with retrieve_conf
25 */
26 function ringgroups_get_config($engine) {
27     global $ext// is this the best way to pass this?
28     switch($engine) {
29         case "asterisk":
30             $ext->addInclude('from-internal-additional','ext-group');
31             $contextname = 'ext-group';
32             $ringlist = ringgroups_list();
33             if (is_array($ringlist)) {
34                 foreach($ringlist as $item) {
35                     $grpnum = ltrim($item['0']);
36                     $grp = ringgroups_get($grpnum);
37                     
38                     $strategy = $grp['strategy'];
39                     $grptime = $grp['grptime'];
40                     $grplist = $grp['grplist'];
41                     $postdest = $grp['postdest'];
42                     $grppre = (isset($grp['grppre'])?$grp['grppre']:'');
43                     $annmsg = (isset($grp['annmsg'])?$grp['annmsg']:'');
44                     $alertinfo = $grp['alertinfo'];
45                     $needsconf = $grp['needsconf'];
46                     $remotealert = $grp['remotealert'];
47                     $toolate = $grp['toolate'];
48                     $ringing = $grp['ringing'];
49
50                     if($ringing == 'Ring' || empty($ringing) ) {
51                         $dialopts = '${DIAL_OPTIONS}';
52                     } else {
53                         // We need the DIAL_OPTIONS variable
54                         $sops = sql("SELECT value from globals where variable='DIAL_OPTIONS'", "getRow");
55                         $dialopts = "m(${ringing})".str_replace('r', '', $sops[0]);
56                     }
57                         
58
59                     $ext->add($contextname, $grpnum, '', new ext_macro('user-callerid'));
60                     
61                     // deal with group CID prefix
62                     $ext->add($contextname, $grpnum, '', new ext_gotoif('$["foo${RGPREFIX}" = "foo"]', 'REPCID'));
63                     $ext->add($contextname, $grpnum, '', new ext_noop('Current RGPREFIX is ${RGPREFIX}....stripping from Caller ID'));
64                     $ext->add($contextname, $grpnum, '', new ext_setvar('CALLERID(name)', '${CALLERID(name):${LEN(${RGPREFIX})}}'));
65                     $ext->add($contextname, $grpnum, '', new ext_setvar('RGPREFIX', ''));
66                     $ext->add($contextname, $grpnum, 'REPCID', new ext_noop('CALLERID(name) is ${CALLERID(name)}'));
67                     if ($grppre != '') {
68                         $ext->add($contextname, $grpnum, '', new ext_setvar('RGPREFIX', $grppre));
69                         $ext->add($contextname, $grpnum, '', new ext_setvar('CALLERID(name)','${RGPREFIX}${CALLERID(name)}'));
70                     }
71                     
72                     // Set Alert_Info
73                     if ($alertinfo != '') {
74                         $ext->add($contextname, $grpnum, '', new ext_setvar('_ALERT_INFO', str_replace(';', '\;', $alertinfo)));
75                     }
76
77                     // recording stuff
78                     $ext->add($contextname, $grpnum, '', new ext_setvar('RecordMethod','Group'));
79                     $ext->add($contextname, $grpnum, '', new ext_macro('record-enable',$grplist.',${RecordMethod}'));
80
81                     // group dial
82                     $ext->add($contextname, $grpnum, '', new ext_setvar('RingGroupMethod',$strategy));
83                     if ($annmsg != '') {
84                         $ext->add($contextname, $grpnum, '', new ext_answer(''));
85                         $ext->add($contextname, $grpnum, '', new ext_wait(1));
86                         $ext->add($contextname, $grpnum, '', new ext_playback($annmsg));
87                     }
88                     if ($needsconf == "CHECKED") {
89                         $len=strlen($grpnum)+4;
90                         $ext->add("grps", "_RG-${grpnum}-.", '', new ext_macro('dial',$grptime.
91                             ",M(confirm^${remotealert}^${toolate}^${grpnum})$dialopts".',${EXTEN:'.$len.'}'));
92                         $ext->add($contextname, $grpnum, 'DIALGRP', new ext_macro('dial-confirm',"$grptime,$dialopts,$grplist,$grpnum"));
93                     } else {
94                         $ext->add($contextname, $grpnum, 'DIALGRP', new ext_macro('dial',$grptime.",$dialopts,".$grplist));
95                     }
96                     $ext->add($contextname, $grpnum, '', new ext_setvar('RingGroupMethod',''));
97
98                     // where next?
99                     if ((isset($postdest) ? $postdest : '') != '') {
100                         $ext->add($contextname, $grpnum, '', new ext_goto($postdest));
101                     } else {
102                         $ext->add($contextname, $grpnum, '', new ext_hangup(''));
103                     }
104                 }
105             }
106         break;
107     }
108 }
109
110 function ringgroups_add($grpnum,$strategy,$grptime,$grplist,$postdest,$desc,$grppre='',$annmsg='',$alertinfo,$needsconf,$remotealert,$toolate,$ringing) {
111     $sql = "INSERT INTO ringgroups (grpnum, strategy, grptime, grppre, grplist, annmsg, postdest, description, alertinfo, needsconf, remotealert, toolate, ringing) VALUES (".$grpnum.", '".str_replace("'", "''", $strategy)."', ".str_replace("'", "''", $grptime).", '".str_replace("'", "''", $grppre)."', '".str_replace("'", "''", $grplist)."', '".str_replace("'", "''", $annmsg)."', '".str_replace("'", "''", $postdest)."', '".str_replace("'", "''", $desc)."', '".str_replace("'", "''", $alertinfo)."', '$needsconf', '$remotealert', '$toolate', '$ringing')";
112     $results = sql($sql);
113 }
114
115 function ringgroups_del($grpnum) {
116     $results = sql("DELETE FROM ringgroups WHERE grpnum = $grpnum","query");
117 }
118
119 function ringgroups_list() {
120     $results = sql("SELECT grpnum, description FROM ringgroups ORDER BY grpnum","getAll",DB_FETCHMODE_ASSOC);
121     foreach ($results as $result) {
122         if (isset($result['grpnum']) && checkRange($result['grpnum'])) {
123             $grps[] = array($result['grpnum'], $result['description']);
124         }
125     }
126     if (isset($grps))
127         return $grps;
128     else
129         return null;
130 }
131
132 function ringgroups_get($grpnum) {
133     $results = sql("SELECT grpnum, strategy, grptime, grppre, grplist, annmsg, postdest, description, alertinfo, needsconf, remotealert, toolate, ringing FROM ringgroups WHERE grpnum = $grpnum","getRow",DB_FETCHMODE_ASSOC);
134     return $results;
135 }
136 ?>
137
Note: See TracBrowser for help on using the browser.