root/modules/branches/2.9/conferences/functions.inc.php

Revision 9099, 9.7 kB (checked in by p_lindheimer, 3 years ago)

closes #3331 adds maximum conference participants option, thanks Bryan from Schmooze

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1 <?php /* $Id$ */
2
3 // extend extensions class.
4 // This example is about as simple as it gets
5 class conferences_conf {
6     // return the filename to write
7     function get_filename() {
8         return "meetme_additional.conf";
9     }
10     function addMeetme($room, $pin) {
11         $this->_meetmes[$room] = $pin;
12     }
13     // return the output that goes in the file
14     function generateConf() {
15         $output = "";
16         if (isset($this->_meetmes) && is_array($this->_meetmes)) {
17             foreach (array_keys($this->_meetmes) as $meetme) {
18                 $output .= 'conf => '.$meetme.",".$this->_meetmes[$meetme]."\n";
19             }
20         }
21         return $output;
22     }
23 }
24
25 // returns a associative arrays with keys 'destination' and 'description'
26 function conferences_destinations() {
27     //get the list of meetmes
28     $results = conferences_list();
29
30     // return an associative array with destination and description
31     if (isset($results)) {
32         foreach($results as $result){
33                 $extens[] = array('destination' => 'ext-meetme,'.$result['0'].',1', 'description' => $result['1']." <".$result['0'].">");
34         }
35     return $extens;
36     } else {
37     return null;
38     }
39 }
40
41 function conferences_getdest($exten) {
42     return array('ext-meetme,'.$exten.',1');
43 }
44
45 function conferences_getdestinfo($dest) {
46     global $active_modules;
47
48     if (substr(trim($dest),0,11) == 'ext-meetme,') {
49         $exten = explode(',',$dest);
50         $exten = $exten[1];
51         $thisexten = conferences_get($exten);
52         if (empty($thisexten)) {
53             return array();
54         } else {
55             //$type = isset($active_modules['announcement']['type'])?$active_modules['announcement']['type']:'setup';
56             return array('description' => sprintf(_("Conference Room %s : %s"),$exten,$thisexten['description']),
57                          'edit_url' => 'config.php?display=conferences&extdisplay='.urlencode($exten),
58                                   );
59         }
60     } else {
61         return false;
62     }
63 }
64
65 function conferences_recordings_usage($recording_id) {
66     global $active_modules;
67
68     $results = sql("SELECT `exten`, `description` FROM `meetme` WHERE `joinmsg_id` = '$recording_id'","getAll",DB_FETCHMODE_ASSOC);
69     if (empty($results)) {
70         return array();
71     } else {
72         foreach ($results as $result) {
73             $usage_arr[] = array(
74                 'url_query' => 'config.php?display=conferences&extdisplay='.urlencode($result['exten']),
75                 'description' => sprintf(_("Conference: %s"),$result['description']),
76             );
77         }
78         return $usage_arr;
79     }
80 }
81
82 /*     Generates dialplan for conferences
83     We call this with retrieve_conf
84 */
85 function conferences_get_config($engine) {
86     global $ext// is this the best way to pass this?
87     global $conferences_conf;
88     global $version;
89     global $amp_conf;
90     switch($engine) {
91         case "asterisk":
92             $ext->addInclude('from-internal-additional','ext-meetme');
93             $contextname = 'ext-meetme';
94             if(is_array($conflist = conferences_list())) {
95                 
96                 // Start the conference
97                 $ext->add($contextname, 'STARTMEETME', '', new ext_execif('$["${MEETME_MUSIC}" != ""]','SetMusicOnHold','${MEETME_MUSIC}'));
98                 $ext->add($contextname, 'STARTMEETME', '', new ext_setvar('GROUP(meetme)','${MEETME_ROOMNUM}'));
99                 $ext->add($contextname, 'STARTMEETME', '', new ext_gotoif('$[${MAX_PARTICIPANTS} > 0 && ${GROUP_COUNT(${MEETME_ROOMNUM}@meetme)}>${MAX_PARTICIPANTS}]','MEETMEFULL,1'));
100                 $ext->add($contextname, 'STARTMEETME', '', new ext_meetme('${MEETME_ROOMNUM}','${MEETME_OPTS}','${PIN}'));
101                 $ext->add($contextname, 'STARTMEETME', '', new ext_hangup(''));
102
103                 //meetme full
104                 $ext->add($contextname, 'MEETMEFULL', '', new ext_playback('im-sorry&conf-full&goodbye'));
105                 $ext->add($contextname, 'MEETMEFULL', '', new ext_hangup(''));
106                 
107                 // hangup for whole context
108                 $ext->add($contextname, 'h', '', new ext_hangup(''));                       
109                 
110                 foreach($conflist as $item) {
111                     $room = conferences_get(ltrim($item['0']));
112                     
113                     $roomnum = ltrim($item['0']);
114                     $roomoptions = $room['options'];
115                     if (version_compare($version, "1.4",">=")) {
116                         $roomoptions = str_replace('i','I',$roomoptions);
117                     }
118                     if (version_compare($version, "1.4","lt")) {
119                         $roomoptions = str_replace('o','',$roomoptions);
120                         $roomoptions = str_replace('T','',$roomoptions);
121                     }
122                     $roomuserpin = $room['userpin'];
123                     $roomadminpin = $room['adminpin'];
124                     $roomusers = $room['users'];
125                     if(isset($room['music']) && $room['music'] !='' && $room['music']!='inherit') {
126             $music = $room['music'];
127           } else {
128                         $music='${MOHCLASS}'; // inherit channel moh class
129           }
130                     if (isset($room['joinmsg_id']) && $room['joinmsg_id'] != '') {
131                         $roomjoinmsg = recordings_get_file($room['joinmsg_id']);
132                     } else {
133                         $roomjoinmsg = '';
134                     }
135                     
136                     // Add optional hint
137                     if ($amp_conf['USEDEVSTATE']) {
138                         $ext->addHint($contextname, $roomnum, "MeetMe:".$roomnum);
139                     }
140                     // entry point
141                     $ext->add($contextname, $roomnum, '', new ext_macro('user-callerid'));
142                     $ext->add($contextname, $roomnum, '', new ext_setvar('MEETME_ROOMNUM',$roomnum));
143           $ext->add($contextname, $roomnum, '', new ext_setvar('MAX_PARTICIPANTS', $roomusers));
144                     $ext->add($contextname, $roomnum, '', new ext_setvar('MEETME_MUSIC',$music));
145                     if (strstr($room['options'],'r') !== false) {
146                         $ext->add($contextname, $roomnum, '', new ext_setvar('MEETME_RECORDINGFILE','${ASTSPOOLDIR}/monitor/meetme-conf-rec-${MEETME_ROOMNUM}-${UNIQUEID}'));
147                     }
148                     $ext->add($contextname, $roomnum, '', new ext_gotoif('$["${DIALSTATUS}" = "ANSWER"]',($roomuserpin == '' && $roomadminpin == '' ? 'USER' : 'READPIN')));   
149                     $ext->add($contextname, $roomnum, '', new ext_answer(''));
150                     $ext->add($contextname, $roomnum, '', new ext_wait(1));
151                     
152                     // Deal with PINs -- if exist
153                     if ($roomuserpin != '' || $roomadminpin != '') {
154                         $ext->add($contextname, $roomnum, '', new ext_setvar('PINCOUNT','0'));
155                         $ext->add($contextname, $roomnum, 'READPIN', new ext_read('PIN','enter-conf-pin-number'));
156                         
157                         // userpin -- must do always, otherwise if there is just an adminpin
158                         // there would be no way to get to the conference !
159                         $ext->add($contextname, $roomnum, '', new ext_gotoif('$[x${PIN} = x'.$roomuserpin.']','USER'));
160
161                         // admin pin -- exists
162                         if ($roomadminpin != '') {
163                             $ext->add($contextname, $roomnum, '', new ext_gotoif('$[x${PIN} = x'.$roomadminpin.']','ADMIN'));
164                         }
165
166                         // pin invalid
167                         $ext->add($contextname, $roomnum, '', new ext_setvar('PINCOUNT','$[${PINCOUNT}+1]'));
168                         $ext->add($contextname, $roomnum, '', new ext_gotoif('$[${PINCOUNT}>3]', "h"));
169                         $ext->add($contextname, $roomnum, '', new ext_playback('conf-invalidpin'));
170                         $ext->add($contextname, $roomnum, '', new ext_goto('READPIN'));
171                         
172                         // admin mode -- only valid if there is an admin pin
173                         if ($roomadminpin != '') {
174                             $ext->add($contextname, $roomnum, 'ADMIN', new ext_setvar('MEETME_OPTS','aA'.$roomoptions));
175                             if ($roomjoinmsg != '') {  // play joining message if one defined
176                                 $ext->add($contextname, $roomnum, '', new ext_playback($roomjoinmsg));
177                             }
178                             $ext->add($contextname, $roomnum, '', new ext_goto('STARTMEETME,1'));                           
179                         }
180                     }
181                     
182                     // user mode
183                     $ext->add($contextname, $roomnum, 'USER', new ext_setvar('MEETME_OPTS',$roomoptions));
184                     if ($roomjoinmsg != '') {  // play joining message if one defined
185                         $ext->add($contextname, $roomnum, '', new ext_playback($roomjoinmsg));
186                     }
187                     $ext->add($contextname, $roomnum, '', new ext_goto('STARTMEETME,1'));
188                     
189                     // add meetme config
190                     $conferences_conf->addMeetme($room['exten'],$room['userpin']);
191                 }
192             }
193
194         break;
195     }
196 }
197
198 function conferences_check_extensions($exten=true) {
199     $extenlist = array();
200     if (is_array($exten) && empty($exten)) {
201         return $extenlist;
202     }
203     $sql = "SELECT exten, description FROM meetme ";
204     if (is_array($exten)) {
205         $sql .= "WHERE exten in ('".implode("','",$exten)."')";
206     }
207     $sql .= " ORDER BY exten";
208     $results = sql($sql,"getAll",DB_FETCHMODE_ASSOC);
209
210     foreach ($results as $result) {
211         $thisexten = $result['exten'];
212         $extenlist[$thisexten]['description'] = _("Conference: ").$result['description'];
213         $extenlist[$thisexten]['status'] = 'INUSE';
214         $extenlist[$thisexten]['edit_url'] = 'config.php?display=conferences&extdisplay='.urlencode($thisexten);
215     }
216     return $extenlist;
217 }
218
219 //get the existing meetme extensions
220 function conferences_list() {
221     $results = sql("SELECT exten,description FROM meetme ORDER BY exten","getAll",DB_FETCHMODE_ASSOC);
222     foreach($results as $result){
223         // check to see if we are in-range for the current AMP User.
224         if (isset($result['exten']) && checkRange($result['exten'])){
225             // return this item's dialplan destination, and the description
226             $extens[] = array($result['exten'],$result['description']);
227         }
228     }
229     if (isset($extens)) {
230         return $extens;
231     } else {
232         return null;
233     }
234 }
235
236 function conferences_get($account){
237   global $db;
238     //get all the variables for the meetme
239   $results = sql("SELECT exten,options,userpin,adminpin,description,joinmsg_id,music,users FROM meetme WHERE exten = '".$db->escapeSimple($account)."'","getRow",DB_FETCHMODE_ASSOC);
240     return $results;
241 }
242
243 function conferences_del($account){
244   global $db;
245   $results = sql("DELETE FROM meetme WHERE exten = '".$db->escapeSimple($account)."'","query");
246 }
247
248 function conferences_add($account,$name,$userpin,$adminpin,$options,$joinmsg_id=null,$music='',$users=0){
249     global $active_modules;
250   global $db;
251   $account    = $db->escapeSimple($account);
252   $name       = $db->escapeSimple($name);
253   $userpin    = $db->escapeSimple($userpin);
254   $adminpin   = $db->escapeSimple($adminpin);
255   $options    = $db->escapeSimple($options);
256   $joinmsg_id = $db->escapeSimple($joinmsg_id);
257   $music      = $db->escapeSimple($music);
258   $users      = $db->escapeSimple($users);
259     $results = sql("INSERT INTO meetme (exten,description,userpin,adminpin,options,joinmsg_id,music,users) values (\"$account\",\"$name\",\"$userpin\",\"$adminpin\",\"$options\",\"$joinmsg_id\",\"$music\",\"$users\")");
260 }
261 ?>
262
Note: See TracBrowser for help on using the browser.