9419f5422ca9d812107a172af7bc8feea9c4d6c2
[atutor.git] / mods / openmeetings / lib / openmeetings.class.php
1 <?php
2 /************************************************************************/
3 /* ATutor                                                                                                                               */
4 /************************************************************************/
5 /* Copyright (c) 2002-2008 by Greg Gay, Cindy Qi Li, Harris Wong                */
6 /* Adaptive Technology Resource Centre / University of Toronto                  */
7 /* http://atutor.ca                                                                                                             */
8 /*                                                                                                                                              */
9 /* This program is free software. You can redistribute it and/or                */
10 /* modify it under the terms of the GNU General Public License                  */
11 /* as published by the Free Software Foundation.                                                */
12 /************************************************************************/
13 // $Id: openmeetings.class.php 7575 2008-06-04 18:17:14Z hwong $
14 if (!defined('AT_INCLUDE_PATH')) { exit; }
15 require('SOAP_openmeetings.php');
16
17 class Openmeetings {
18         var $_sid = '';         //Openmeetings session id
19         var $_course_id = '';
20         var $_member_id = '';
21         var $_group_id = '';
22
23         //Constructor
24         function Openmeetings($course_id, $member_id, $group_id=0){
25                 $this->_course_id       = abs($course_id);
26                 $this->_member_id       = abs($member_id);
27                 $this->_group_id        = abs($group_id);
28
29         }
30
31         /**
32          * Login to openmeetings
33          * Login process is, login, saveuserinstance
34          */
35         function om_login() {
36                 global $_config;
37                 $om = new SOAP_openmeetings($_config['openmeetings_location'].'/services/UserService?wsdl');
38                 $param = array (        'username' => $_config['openmeetings_username'], 
39                                                         'userpass' => $_config['openmeetings_userpass']);
40
41                 /**
42                  * Login to the openmeetings
43                  * ref: http://code.google.com/p/openmeetings/wiki/DirectLoginSoapGeneralFlow
44                  */
45                 $result = $om->login($param);
46                 if ($result < 0){
47                         debug($om->getError($result), 'error');
48                         return;
49                 } 
50                 
51                 //If no error, then get the generated OM session id
52                 $this->_sid = $om->getSid();
53
54                 //Retrieve members information
55                 $sql = 'SELECT login, first_name, last_name, email FROM '.TABLE_PREFIX.'members WHERE member_id='.$this->_member_id;
56                 $result = mysql_query($sql);
57                 $row = mysql_fetch_assoc($result);
58
59                 // Save user instance
60                 $params = array(
61                                         "username"                              => $row['login'],
62                                         "firstname"                             => $row['first_name'],
63                                         "lastname"                              => $row['last_name'],
64                                         "profilePictureUrl"             => '',
65                                         "email"                                 => $row['email']
66                                   );
67                 $om->saveUserInstance($params);
68         }
69
70
71
72         /**
73          * Add a room to the db iff it has not been created.  Each course should only have one room to it.
74          * @param int           sid is the auth session id that was logged in into openmeetings.
75          * @param array         the specification for openmeetings 
76          * @return room # of the created room, or the room # of the existed room
77          */
78         function om_addRoom($room_name, $om_param=array()){
79                 global $_config;
80
81                 if ($this->_course_id < 0){
82                         return false;
83                 }
84
85                 //Check if the room has already been created for this
86                 if (($room_id = $this->om_getRoom()) !=false){
87                         //instead of returning room id, we might have to delete it and carry on.
88                         return $room_id;
89                 }
90
91                 //Add this room
92                 $om = new SOAP_openmeetings($_config['openmeetings_location'].'/services/RoomService?wsdl');
93                 $param = array (        
94                                         'SID'                                   => $this->_sid,
95                                         'name'                                  => $room_name,
96                                         'roomtypes_id'                  => $om_param['openmeetings_roomtype'],
97                                         'numberOfPartizipants'  => $om_param['openmeetings_num_of_participants'],
98                                         'ispublic'                              => $om_param['openmeetings_ispublic'],
99                                         'videoPodWidth'                 => $om_param['openmeetings_vid_w'],
100                                         'videoPodHeight'                => $om_param['openmeetings_vid_h'],
101                                         'showWhiteBoard'                => $om_param['openmeetings_show_wb'],
102                                         'whiteBoardPanelWidth'  => $om_param['openmeetings_wb_w'],
103                                         'whiteBoardPanelHeight' => $om_param['openmeetings_wb_h'],
104                                         'showFilesPanel'                => $om_param['openmeetings_show_fp'],
105                                         'filesPanelHeight'              => $om_param['openmeetings_fp_h'],
106                                         'filesPanelWidth'               => $om_param['openmeetings_fp_w']
107                                         );
108                 $result = $om->addRoom($param);
109                 //TODO: Check for error, and handles success/failure
110                 if ($result){
111                         //TODO: On success, add to DB entry.
112                         $sql = 'INSERT INTO '.TABLE_PREFIX.'openmeetings_rooms SET rooms_id='.$result['return'].', course_id='.$this->_course_id 
113                                  . ', owner_id=' . $this->_member_id;
114                         $rs  = mysql_query($sql);
115                         if (!$rs){
116                                 return false;
117                         }
118                         $om_id = mysql_insert_id();
119                         $sql = 'INSERT INTO '.TABLE_PREFIX."openmeetings_groups SET om_id=$om_id, group_id=$this->_group_id";
120                         $rs = mysql_query($sql);
121         
122                         if ($rs){
123                                 return $result['return'];
124                         }
125                 }
126                 return false;
127         }
128
129         
130         /**
131          * update room
132          */
133         function om_updateRoom($room_id, $om_param=array()){
134                 global $_config;
135
136                 //update this room
137                 $om = new SOAP_openmeetings($_config['openmeetings_location'].'/services/RoomService?wsdl');
138                 $param = array (        
139                                         'SID'                                   => $this->_sid,
140                                         'rooms_id'                              => $room_id,
141                                         'name'                                  => $om_param['openmeetings_room_name'],
142                                         'roomtypes_id'                  => $om_param['openmeetings_roomtype'],
143                                         'numberOfPartizipants'  => $om_param['openmeetings_num_of_participants'],
144                                         'ispublic'                              => $om_param['openmeetings_ispublic'],
145                                         'videoPodWidth'                 => $om_param['openmeetings_vid_w'],
146                                         'videoPodHeight'                => $om_param['openmeetings_vid_h'],
147                                         'showWhiteBoard'                => $om_param['openmeetings_show_wb'],
148                                         'whiteBoardPanelWidth'  => $om_param['openmeetings_wb_w'],
149                                         'whiteBoardPanelHeight' => $om_param['openmeetings_wb_h'],
150                                         'showFilesPanel'                => $om_param['openmeetings_show_fp'],
151                                         'filesPanelHeight'              => $om_param['openmeetings_fp_h'],
152                                         'filesPanelWidth'               => $om_param['openmeetings_fp_w']
153                                         );
154                 $result = $om->updateRoom($param);
155                 return $result;
156         }
157
158         /**
159          * Retrieve Session id
160          */
161         function getSid(){
162                 return $this->_sid;
163         }
164
165         /**
166          * Checks if there is a room for the given course id.
167          *
168          * @param       course id
169          * @return      the room id if there is a room already assigned to this course; false otherwise
170          */
171         function om_getRoom(){
172 //              $sql = 'SELECT rooms_id FROM '.TABLE_PREFIX.'openmeetings_rooms INNER JOIN '.TABLE_PREFIX."openmeetings_groups WHERE 
173 //                              course_id = $this->_course_id AND owner_id = $this->_member_id AND group_id = $this->_group_id";
174                 $sql = 'SELECT rooms_id FROM '.TABLE_PREFIX.'openmeetings_rooms r NATURAL JOIN '.TABLE_PREFIX."openmeetings_groups g WHERE 
175                                 course_id = $this->_course_id AND group_id = $this->_group_id";
176                 $result = mysql_query($sql);
177                 if (mysql_numrows($result) > 0){
178                         $row = mysql_fetch_assoc($result);
179                         //instead of returning room id, we might have to delete it and carry on.
180                         return $row['rooms_id'];
181                 }
182                 return false;
183         }
184
185
186         /**
187          * Get room obj form the given room id
188          */
189         function om_getRoomById($room_id){
190                 global $_config;
191                 if ($room_id == ''){
192                         return false;
193                 }
194                 $om = new SOAP_openmeetings($_config['openmeetings_location'].'/services/RoomService?wsdl');
195                 $param = array (        
196                                         'SID'                   => $this->_sid,
197                                         'rooms_id'              => $room_id
198                                         );
199                 $result = $om->getRoomById($param);
200                 return $result;
201         }
202
203         /**
204          * Set the group id
205          * @param       int     group id.
206          */
207         function setGid($gid){
208                 $this->_group_id = $gid;
209         }
210
211         /**
212          * Delete a room
213          */
214         function om_deleteRoom($room_id){
215                 global $_config;
216                 $om = new SOAP_openmeetings($_config['openmeetings_location'].'/services/RoomService?wsdl');
217                 $param = array (        
218                                         'SID'                   => $this->_sid,
219                                         'rooms_id'              => $room_id
220                                         );
221
222                 $result = $om->deleteRoom($param);
223                 $sql = 'DELETE r, g FROM (SELECT om_id FROM '.TABLE_PREFIX."openmeetings_rooms WHERE rooms_id=$room_id) AS t, ".TABLE_PREFIX
224                                 .'openmeetings_rooms r NATURAL JOIN '.TABLE_PREFIX.'openmeetings_groups g WHERE r.om_id =t.om_id';
225                 mysql_query($sql);
226         }
227
228
229         /**
230          * Return true if this user created the given room.
231          * @param       int     room id
232          * @return      true if it is, false otherwise.
233          */
234         function isMine($room_id){
235                 $sql = 'SELECT * FROM '.TABLE_PREFIX."openmeetings_rooms WHERE rooms_id=$room_id AND owner_id=$this->_member_id";
236                 $result = mysql_query($sql);
237                 if (mysql_numrows($result) > 0){
238                         return true;
239                 } 
240                 return false;
241         }
242 }
243 ?>