1 | <?php |
---|
2 | /**************************************************************************\ |
---|
3 | * eGroupWare API - phpgw Inter-server communications class * |
---|
4 | * This file written by Miles Lott <milosch@groupwhere.org> * |
---|
5 | * Maintain list and provide send interface to remote phpgw servers * |
---|
6 | * Copyright (C) 2001 Miles Lott * |
---|
7 | * -------------------------------------------------------------------------* |
---|
8 | * This library is part of the eGroupWare API * |
---|
9 | * http://www.egroupware.org * |
---|
10 | * ------------------------------------------------------------------------ * |
---|
11 | * This library is free software; you can redistribute it and/or modify it * |
---|
12 | * under the terms of the GNU Lesser General Public License as published by * |
---|
13 | * the Free Software Foundation; either version 2.1 of the License, * |
---|
14 | * or any later version. * |
---|
15 | * This library is distributed in the hope that it will be useful, but * |
---|
16 | * WITHOUT ANY WARRANTY; without even the implied warranty of * |
---|
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * |
---|
18 | * See the GNU Lesser General Public License for more details. * |
---|
19 | * You should have received a copy of the GNU Lesser General Public License * |
---|
20 | * along with this library; if not, write to the Free Software Foundation, * |
---|
21 | * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * |
---|
22 | \**************************************************************************/ |
---|
23 | |
---|
24 | |
---|
25 | class interserver |
---|
26 | { |
---|
27 | var $db; |
---|
28 | var $accounts; |
---|
29 | var $table = 'phpgw_interserv'; |
---|
30 | var $total = 0; |
---|
31 | var $result = ''; |
---|
32 | |
---|
33 | var $servers = array(); |
---|
34 | var $serverid = 0; |
---|
35 | var $security = ''; |
---|
36 | var $mode = ''; |
---|
37 | var $authed = False; |
---|
38 | var $sessionid = ''; |
---|
39 | var $kp3 = ''; |
---|
40 | |
---|
41 | /* These are now entered as defaults if the admin forgot to enter the full URL */ |
---|
42 | var $urlparts = array(); |
---|
43 | |
---|
44 | /* |
---|
45 | 0/none == no access |
---|
46 | 1/apps == read app data only |
---|
47 | 99/all == read accounts and other api data |
---|
48 | Two servers must have each other setup as 'all' for full coop |
---|
49 | */ |
---|
50 | var $trust_levels = array( |
---|
51 | 'none' => 0, |
---|
52 | 'apps' => 1, |
---|
53 | 'all' => 99 |
---|
54 | ); |
---|
55 | |
---|
56 | /* |
---|
57 | 0 - No trust, but they may trust us |
---|
58 | 1 - Trust to make requests of us |
---|
59 | 2 - Trust remote server's trusts also |
---|
60 | 3 - We both trust each other |
---|
61 | 4 - We both trust each other, and we trust the remote server's trusts also |
---|
62 | */ |
---|
63 | var $trust_relationships = array( |
---|
64 | 'outbound' => 0, |
---|
65 | 'inbound' => 1, |
---|
66 | 'passthrough' => 2, |
---|
67 | 'bi-directional' => 3, |
---|
68 | 'bi-dir passthrough' => 4 |
---|
69 | ); |
---|
70 | |
---|
71 | var $security_types = array( |
---|
72 | 'standard' => '', |
---|
73 | 'ssl' => 'ssl' |
---|
74 | ); |
---|
75 | |
---|
76 | var $server_modes = array( |
---|
77 | 'XML-RPC' => 'xmlrpc', |
---|
78 | 'SOAP' => 'soap' |
---|
79 | ); |
---|
80 | |
---|
81 | function interserver($serverid='') |
---|
82 | { |
---|
83 | $url = eregi_replace('https*://[^/]*/','',$GLOBALS['phpgw_info']['server']['webserver_url']); |
---|
84 | $this->urlparts = array( |
---|
85 | 'xmlrpc' => $url.'/xmlrpc.php', |
---|
86 | 'soap' => $url.'/soap.php' |
---|
87 | ); |
---|
88 | |
---|
89 | $this->db = $GLOBALS['phpgw']->db; |
---|
90 | if($serverid) |
---|
91 | { |
---|
92 | $this->serverid = (int)$serverid; |
---|
93 | $this->setup(); |
---|
94 | } |
---|
95 | } |
---|
96 | |
---|
97 | function debug($str,$debug=False) |
---|
98 | { |
---|
99 | if($debug) |
---|
100 | { |
---|
101 | $this->_debug($str); |
---|
102 | } |
---|
103 | } |
---|
104 | |
---|
105 | function _debug($err='') |
---|
106 | { |
---|
107 | if(!$err) |
---|
108 | { |
---|
109 | return; |
---|
110 | } |
---|
111 | echo $err . ' '; |
---|
112 | } |
---|
113 | |
---|
114 | function setup() |
---|
115 | { |
---|
116 | $this->read_repository(); |
---|
117 | if($this->server['trust_level']) |
---|
118 | { |
---|
119 | $this->accounts = CreateObject('phpgwapi.accounts'); |
---|
120 | $this->accounts->server = $this->serverid; |
---|
121 | } |
---|
122 | $this->security = $this->server['server_security']; |
---|
123 | $this->mode = $this->server['server_mode']; |
---|
124 | } |
---|
125 | |
---|
126 | /* send command to remote server */ |
---|
127 | function send($method_name, $args, $url, $debug=True) |
---|
128 | { |
---|
129 | $cmd = '_send_' . ($this->mode ? $this->mode : 'xmlrpc') . '_' . $this->security; |
---|
130 | $this->$cmd($method_name, $args, $url, $debug); |
---|
131 | return $this->result; |
---|
132 | } |
---|
133 | |
---|
134 | function _split_url($url) |
---|
135 | { |
---|
136 | preg_match('/^(.*?\/\/.*?)(\/.*)/',$url,$matches); |
---|
137 | $hostpart = $matches[1]; |
---|
138 | $hostpart = str_replace('https://','',$hostpart); |
---|
139 | $hostpart = str_replace('http://','',$hostpart); |
---|
140 | switch($this->mode) |
---|
141 | { |
---|
142 | case 'soap': |
---|
143 | if(!strstr($matches[2],'soap.php')) |
---|
144 | { |
---|
145 | $matches[2] .= $this->urlparts['soap']; |
---|
146 | } |
---|
147 | break; |
---|
148 | case 'xmlrpc': |
---|
149 | if(!strstr($matches[2],'xmlrpc.php')) |
---|
150 | { |
---|
151 | $matches[2] .= $this->urlparts['xmlrpc']; |
---|
152 | } |
---|
153 | break; |
---|
154 | default: |
---|
155 | break; |
---|
156 | } |
---|
157 | $uri = $matches[2]; |
---|
158 | return array($uri,$hostpart); |
---|
159 | } |
---|
160 | |
---|
161 | function _send_xmlrpc_ssl($method_name, $args, $url, $debug=True) |
---|
162 | { |
---|
163 | list($uri,$hostpart) = $this->_split_url($url); |
---|
164 | if(!@is_array($args)) |
---|
165 | { |
---|
166 | $arr[] = CreateObject('phpgwapi.xmlrpcval',$args,'string'); |
---|
167 | $f = CreateObject('phpgwapi.xmlrpcmsg', $method_name, $arr,'string'); |
---|
168 | } |
---|
169 | else |
---|
170 | { |
---|
171 | while(list($key,$val) = @each($args)) |
---|
172 | { |
---|
173 | if(@is_array($val)) |
---|
174 | { |
---|
175 | while(list($x,$y) = each($val)) |
---|
176 | { |
---|
177 | $tmp[$x] = CreateObject('phpgwapi.xmlrpcval',$y, 'string'); |
---|
178 | } |
---|
179 | $ele[$key] = CreateObject('phpgwapi.xmlrpcval',$tmp,'struct'); |
---|
180 | } |
---|
181 | else |
---|
182 | { |
---|
183 | $ele[$key] = CreateObject('phpgwapi.xmlrpcval',$val, 'string'); |
---|
184 | } |
---|
185 | } |
---|
186 | $arr[] = CreateObject('phpgwapi.xmlrpcval',$ele,'struct'); |
---|
187 | $f = CreateObject('phpgwapi.xmlrpcmsg', $method_name, $arr,'struct'); |
---|
188 | } |
---|
189 | |
---|
190 | $this->debug("<pre>" . htmlentities($f->serialize()) . "</pre>\n",$debug); |
---|
191 | $c = CreateObject('phpgwapi.xmlrpc_client',$uri, $hostpart, 443); |
---|
192 | $c->setCredentials($this->sessionid,$this->kp3); |
---|
193 | $c->setDebug(0); |
---|
194 | $r = $c->send($f,0,'https'); |
---|
195 | if (!$r) |
---|
196 | { |
---|
197 | $this->debug('send failed'); |
---|
198 | } |
---|
199 | $v = $r->value(); |
---|
200 | if (!$r->faultCode()) |
---|
201 | { |
---|
202 | $this->debug('<hr>I got this value back<br><pre>' . htmlentities($r->serialize()) . '</pre><hr>',$debug); |
---|
203 | $this->result = phpgw_xmlrpc_decode($v); |
---|
204 | } |
---|
205 | else |
---|
206 | { |
---|
207 | $this->debug('Fault Code: ' . $r->faultCode() . ' Reason "' . $r->faultString() . '"<br>',$debug); |
---|
208 | $this->result = htmlentities($r->serialize()); |
---|
209 | } |
---|
210 | return $this->result; |
---|
211 | } |
---|
212 | |
---|
213 | function _send_xmlrpc_($method_name, $args, $url, $debug=True) |
---|
214 | { |
---|
215 | list($uri,$hostpart) = $this->_split_url($url); |
---|
216 | if(!@is_array($args)) |
---|
217 | { |
---|
218 | $arr[] = CreateObject('phpgwapi.xmlrpcval',$args,'string'); |
---|
219 | $f = CreateObject('phpgwapi.xmlrpcmsg', $method_name, $arr,'string'); |
---|
220 | } |
---|
221 | else |
---|
222 | { |
---|
223 | while(list($key,$val) = @each($args)) |
---|
224 | { |
---|
225 | if(@is_array($val)) |
---|
226 | { |
---|
227 | while(list($x,$y) = each($val)) |
---|
228 | { |
---|
229 | $tmp[$x] = CreateObject('phpgwapi.xmlrpcval',$y, 'string'); |
---|
230 | } |
---|
231 | $ele[$key] = CreateObject('phpgwapi.xmlrpcval',$tmp,'struct'); |
---|
232 | } |
---|
233 | else |
---|
234 | { |
---|
235 | $ele[$key] = CreateObject('phpgwapi.xmlrpcval',$val, 'string'); |
---|
236 | } |
---|
237 | } |
---|
238 | $arr[] = CreateObject('phpgwapi.xmlrpcval',$ele,'struct'); |
---|
239 | $f = CreateObject('phpgwapi.xmlrpcmsg', $method_name, $arr,'struct'); |
---|
240 | } |
---|
241 | |
---|
242 | $this->debug('<pre>' . htmlentities($f->serialize()) . '</pre>' . "\n",$debug); |
---|
243 | $c = CreateObject('phpgwapi.xmlrpc_client',$uri, $hostpart, 80); |
---|
244 | $c->setCredentials($this->sessionid,$this->kp3); |
---|
245 | // _debug_array($c); |
---|
246 | $c->setDebug(0); |
---|
247 | $r = $c->send($f); |
---|
248 | if (!$r) |
---|
249 | { |
---|
250 | $this->debug('send failed'); |
---|
251 | } |
---|
252 | $v = $r->value(); |
---|
253 | if (!$r->faultCode()) |
---|
254 | { |
---|
255 | $this->debug('<hr>I got this value back<br><pre>' . htmlentities($r->serialize()) . '</pre><hr>',$debug); |
---|
256 | $this->result = phpgw_xmlrpc_decode($v); |
---|
257 | } |
---|
258 | else |
---|
259 | { |
---|
260 | $this->debug('Fault Code: ' . $r->faultCode() . ' Reason "' . $r->faultString() . '"<br>',$debug); |
---|
261 | $this->result = htmlentities($r->serialize()); |
---|
262 | } |
---|
263 | return $this->result; |
---|
264 | } |
---|
265 | |
---|
266 | function _send_soap_ssl($method_name, $args, $url, $debug=True) |
---|
267 | { |
---|
268 | $method_name = str_replace('.','_',$method_name); |
---|
269 | list($uri,$hostpart) = $this->_split_url($url); |
---|
270 | if(!@is_array($args)) |
---|
271 | { |
---|
272 | $arr[] = CreateObject('phpgwapi.soapval','','string',$args); |
---|
273 | } |
---|
274 | else |
---|
275 | { |
---|
276 | while(list($key,$val) = @each($args)) |
---|
277 | { |
---|
278 | if(@is_array($val)) |
---|
279 | { |
---|
280 | while(list($x,$y) = each($val)) |
---|
281 | { |
---|
282 | $tmp[] = CreateObject('phpgwapi.soapval',$x,'string',$y); |
---|
283 | } |
---|
284 | $arr[] = CreateObject('phpgwapi.soapval',$key, 'array',$tmp); |
---|
285 | } |
---|
286 | else |
---|
287 | { |
---|
288 | $arr[] = CreateObject('phpgwapi.soapval',$key, 'string',$val); |
---|
289 | } |
---|
290 | } |
---|
291 | } |
---|
292 | |
---|
293 | $soap_message = CreateObject('phpgwapi.soapmsg',$method_name,$arr); |
---|
294 | /* print_r($soap_message);exit; */ |
---|
295 | $soap = CreateObject('phpgwapi.soap_client',$uri,$hostpart); |
---|
296 | $soap->username = $this->sessionid; |
---|
297 | $soap->password = $this->kp3; |
---|
298 | /* _debug_array($soap);exit; */ |
---|
299 | if($r = $soap->send($soap_message,$method_name)) |
---|
300 | { |
---|
301 | $this->debug('<hr>I got this value back<br><pre>' . htmlentities($r->serialize()) . '</pre><hr>',$debug); |
---|
302 | $this->result = $r->decode(); |
---|
303 | return $this->result; |
---|
304 | } |
---|
305 | else |
---|
306 | { |
---|
307 | $this->debug('Fault Code: ' . $r->ernno . ' Reason "' . $r->errstring . '"<br>',$debug); |
---|
308 | } |
---|
309 | } |
---|
310 | |
---|
311 | function _send_soap_($method_name, $args, $url, $debug=True) |
---|
312 | { |
---|
313 | $method_name = str_replace('.','_',$method_name); |
---|
314 | list($uri,$hostpart) = $this->_split_url($url); |
---|
315 | |
---|
316 | if(!$args) |
---|
317 | { |
---|
318 | $arr = ''; |
---|
319 | } |
---|
320 | elseif(@is_array($args)) |
---|
321 | { |
---|
322 | while(list($key,$val) = @each($args)) |
---|
323 | { |
---|
324 | if(@is_array($val)) |
---|
325 | { |
---|
326 | while(list($x,$y) = each($val)) |
---|
327 | { |
---|
328 | $tmp[] = CreateObject('phpgwapi.soapval',$x,'string',$y); |
---|
329 | } |
---|
330 | $ele[] = CreateObject('phpgwapi.soapval',$key, 'array',$tmp); |
---|
331 | $complex = True; |
---|
332 | } |
---|
333 | else |
---|
334 | { |
---|
335 | $ele[] = CreateObject('phpgwapi.soapval',$key, 'string',$val); |
---|
336 | } |
---|
337 | } |
---|
338 | $arr[] = CreateObject('phpgwapi.soapval','','struct',$ele); |
---|
339 | } |
---|
340 | else |
---|
341 | { |
---|
342 | $arr[] = CreateObject('phpgwapi.soapval','','string',$args); |
---|
343 | } |
---|
344 | $this->request = $arr; |
---|
345 | |
---|
346 | $soap_message = CreateObject('phpgwapi.soapmsg',$method_name,$this->request); |
---|
347 | $soap = CreateObject('phpgwapi.soap_client',$uri,$hostpart); |
---|
348 | $soap->username = $this->sessionid; |
---|
349 | $soap->password = $this->kp3; |
---|
350 | if($r = $soap->send($soap_message,$method_name)) |
---|
351 | { |
---|
352 | _debug_array(htmlentities($soap->outgoing_payload)); |
---|
353 | _debug_array(htmlentities($soap->incoming_payload)); |
---|
354 | $this->debug('<hr>I got this value back<br><pre>' . htmlentities($r->serialize()) . '</pre><hr>',$debug); |
---|
355 | $this->result = $r->decode(); |
---|
356 | return $this->result; |
---|
357 | } |
---|
358 | else |
---|
359 | { |
---|
360 | _debug_array($soap->outgoing_payload); |
---|
361 | $this->debug('Fault Code: ' . $r->ernno . ' Reason "' . $r->errstring . '"<br>',$debug); |
---|
362 | } |
---|
363 | } |
---|
364 | |
---|
365 | function build_request($_req,$recursed=False,$ext='') |
---|
366 | { |
---|
367 | if(@is_array($_req)) |
---|
368 | { |
---|
369 | $ele = array(); |
---|
370 | @reset($_req); |
---|
371 | while(list($key,$val) = @each($_req)) |
---|
372 | { |
---|
373 | $ele[$key] = $this->build_request($val,True,$key); |
---|
374 | } |
---|
375 | $this->request[] = CreateObject('phpgwapi.soapval',$ext,'struct',$ele); |
---|
376 | $ext = ''; |
---|
377 | } |
---|
378 | else |
---|
379 | { |
---|
380 | $_type = (is_long($_req) ? 'int' : gettype($_req)); |
---|
381 | if($recursed) |
---|
382 | { |
---|
383 | return CreateObject('phpgwapi.soapval',$ext,$_type,$_req); |
---|
384 | } |
---|
385 | else |
---|
386 | { |
---|
387 | $this->request[$ext] = CreateObject('phpgwapi.soapval',$ext,$_type,$_req); |
---|
388 | } |
---|
389 | } |
---|
390 | } |
---|
391 | |
---|
392 | /* Following are for server list management and query */ |
---|
393 | function read_repository($serverid='') |
---|
394 | { |
---|
395 | if(!$serverid) |
---|
396 | { |
---|
397 | $serverid = $this->serverid; |
---|
398 | } |
---|
399 | $sql = "SELECT * FROM $this->table WHERE server_id=" . (int)$serverid; |
---|
400 | $this->db->query($sql,__LINE__,__FILE__); |
---|
401 | if($this->db->next_record()) |
---|
402 | { |
---|
403 | $this->server['server_name'] = $this->db->f('server_name'); |
---|
404 | $this->server['server_url'] = $this->db->f('server_url'); |
---|
405 | $this->server['server_mode'] = $this->db->f('server_mode'); |
---|
406 | $this->server['server_security'] = $this->db->f('server_security'); |
---|
407 | $this->server['trust_level'] = $this->db->f('trust_level'); |
---|
408 | $this->server['trust_rel'] = $this->db->f('trust_rel'); |
---|
409 | $this->server['username'] = $this->db->f('username'); |
---|
410 | $this->server['password'] = $this->db->f('password'); |
---|
411 | $this->server['admin_name'] = $this->db->f('admin_name'); |
---|
412 | $this->server['admin_email'] = $this->db->f('admin_email'); |
---|
413 | } |
---|
414 | return $this->server; |
---|
415 | } |
---|
416 | |
---|
417 | function save_repository($serverid='') |
---|
418 | { |
---|
419 | if(!$serverid) |
---|
420 | { |
---|
421 | $serverid = $this->serverid; |
---|
422 | } |
---|
423 | if((int)$serverid && @is_array($this->server)) |
---|
424 | { |
---|
425 | $sql = "UPDATE $this->table SET " |
---|
426 | . "server_name='" . $this->server['server_name'] . "'," |
---|
427 | . "server_url='" . $this->server['server_url'] . "'," |
---|
428 | . "server_mode='" . $this->server['server_mode'] . "'," |
---|
429 | . "server_security='" . $this->server['server_security'] . "'," |
---|
430 | . "trust_level=" . (int)$this->server['trust_level'] . "," |
---|
431 | . "trust_rel=" . (int)$this->server['trust_rel'] . "," |
---|
432 | . "username='" . $this->server['username'] . "'," |
---|
433 | . "password='" . $this->server['password'] . "'," |
---|
434 | . "admin_name='" . $this->server['admin_name'] . "'," |
---|
435 | . "admin_email='" . $this->server['admin_email'] . "' " |
---|
436 | . "WHERE server_id=" . (int)$serverid; |
---|
437 | $this->db->query($sql,__LINE__,__FILE__); |
---|
438 | return True; |
---|
439 | } |
---|
440 | return False; |
---|
441 | } |
---|
442 | |
---|
443 | function create($server_info='') |
---|
444 | { |
---|
445 | if(!@is_array($server_info)) |
---|
446 | { |
---|
447 | return False; |
---|
448 | } |
---|
449 | $sql = "INSERT INTO $this->table (server_name,server_url,server_mode,server_security," |
---|
450 | . "trust_level,trust_rel,username,password,admin_name,admin_email) " |
---|
451 | . "VALUES('" . $server_info['server_name'] . "','" . $server_info['server_url'] . "','" |
---|
452 | . $server_info['server_mode'] . "','" . $server_info['server_security'] . "'," |
---|
453 | . (int)$server_info['trust_level'] . "," . (int)$server_info['trust_rel'] . ",'" |
---|
454 | . $server_info['username'] . "','" . $server_info['password'] . "','" |
---|
455 | . $server_info['admin_name'] . "','" . $server_info['admin_email'] . "')"; |
---|
456 | $this->db->query($sql,__LINE__,__FILE__); |
---|
457 | |
---|
458 | $sql = "SELECT server_id FROM $this->table WHERE server_name='" . $server_info['server_name'] . "'"; |
---|
459 | $this->db->query($sql,__LINE__,__FILE__); |
---|
460 | if($this->db->next_record()) |
---|
461 | { |
---|
462 | $server_info['server_id'] = $this->db->f(0); |
---|
463 | $this->serverid = $server_info['server_id']; |
---|
464 | $this->server = $server_info; |
---|
465 | return $this->serverid; |
---|
466 | } |
---|
467 | return False; |
---|
468 | } |
---|
469 | |
---|
470 | function delete($serverid='') |
---|
471 | { |
---|
472 | if(!$serverid) |
---|
473 | { |
---|
474 | $serverid = $this->serverid; |
---|
475 | } |
---|
476 | if($serverid) |
---|
477 | { |
---|
478 | $sql = "DELETE FROM $this->table WHERE server_id=$serverid"; |
---|
479 | $this->db->query($sql,__LINE__,__FILE__); |
---|
480 | return True; |
---|
481 | } |
---|
482 | return False; |
---|
483 | } |
---|
484 | |
---|
485 | function get_list($start='',$sort='',$order='',$query='',$offset='',&$total) |
---|
486 | { |
---|
487 | if (!$sort) |
---|
488 | { |
---|
489 | $sort = 'DESC'; |
---|
490 | } |
---|
491 | if ($query) |
---|
492 | { |
---|
493 | $whereclause = "WHERE server_name LIKE '%$query%'" |
---|
494 | . "OR server_url LIKE '%$query%'" |
---|
495 | . "OR server_mode LIKE '%$query%'" |
---|
496 | . "OR admin_name LIKE '%$query%'" |
---|
497 | . "OR admin_email LIKE '%$query%'"; |
---|
498 | } |
---|
499 | if ($order) |
---|
500 | { |
---|
501 | $orderclause = 'ORDER BY ' . $order . ' ' . $sort; |
---|
502 | } |
---|
503 | else |
---|
504 | { |
---|
505 | $orderclause = 'ORDER BY server_name ASC'; |
---|
506 | } |
---|
507 | |
---|
508 | $sql = "SELECT * FROM $this->table $whereclause $orderclause"; |
---|
509 | $this->db->query($sql,__LINE__,__FILE__); |
---|
510 | |
---|
511 | while ($this->db->next_record()) |
---|
512 | { |
---|
513 | $this->servers[$this->db->f('server_name')]['server_id'] = $this->db->f('server_id'); |
---|
514 | $this->servers[$this->db->f('server_name')]['server_name'] = $this->db->f('server_name'); |
---|
515 | $this->servers[$this->db->f('server_name')]['server_url'] = $this->db->f('server_url'); |
---|
516 | $this->servers[$this->db->f('server_name')]['server_mode'] = $this->db->f('server_mode'); |
---|
517 | $this->servers[$this->db->f('server_name')]['server_security'] = $this->db->f('server_security'); |
---|
518 | $this->servers[$this->db->f('server_name')]['trust_level'] = $this->db->f('trust_level'); |
---|
519 | $this->servers[$this->db->f('server_name')]['trust_rel'] = $this->db->f('trust_rel'); |
---|
520 | $this->servers[$this->db->f('server_name')]['admin_name'] = $this->db->f('admin_name'); |
---|
521 | $this->servers[$this->db->f('server_name')]['admin_email'] = $this->db->f('admin_email'); |
---|
522 | } |
---|
523 | $this->total = $this->db->num_rows(); |
---|
524 | $total = $this->total; |
---|
525 | return $this->servers; |
---|
526 | } |
---|
527 | |
---|
528 | function formatted_list($server_id=0,$java=False,$local=False) |
---|
529 | { |
---|
530 | if ($java) |
---|
531 | { |
---|
532 | $jselect = ' onChange="this.form.submit();"'; |
---|
533 | } |
---|
534 | $select = "\n" .'<select name="server_id"' . $jselect . ">\n"; |
---|
535 | $select .= '<option value="0"'; |
---|
536 | if(!$server_id) |
---|
537 | { |
---|
538 | $select .= ' selected'; |
---|
539 | } |
---|
540 | $selectlang = $local ? lang('Local') : lang('Please Select'); |
---|
541 | $select .= '>' . $selectlang . '</option>'."\n"; |
---|
542 | |
---|
543 | $x = ''; |
---|
544 | $slist = $this->get_list('','','','','',$x); |
---|
545 | while (list($key,$val) = each($slist)) |
---|
546 | { |
---|
547 | $foundservers = True; |
---|
548 | $select .= '<option value="' . $val['server_id'] . '"'; |
---|
549 | if ($val['server_id'] == $server_id) |
---|
550 | { |
---|
551 | $select .= ' selected'; |
---|
552 | } |
---|
553 | $select .= '>' . $val['server_name'] . '</option>'."\n"; |
---|
554 | } |
---|
555 | |
---|
556 | $select .= '</select>'."\n"; |
---|
557 | $select .= '<noscript><input type="submit" name="server_id_select" value="' . lang('Select') . '"></noscript>' . "\n"; |
---|
558 | if(!$foundservers) |
---|
559 | { |
---|
560 | $select = ''; |
---|
561 | } |
---|
562 | |
---|
563 | return $select; |
---|
564 | } |
---|
565 | |
---|
566 | function name2id($server_name='') |
---|
567 | { |
---|
568 | if(!$server_name) |
---|
569 | { |
---|
570 | $server_name = $this->server['server_name']; |
---|
571 | } |
---|
572 | if($server_name) |
---|
573 | { |
---|
574 | $sql = "SELECT server_id FROM $this->table WHERE server_name='$server_name'"; |
---|
575 | $this->db->query($sql,__LINE__,__FILE__); |
---|
576 | if($this->db->next_record()) |
---|
577 | { |
---|
578 | $serverid = $this->db->f(0); |
---|
579 | return $serverid; |
---|
580 | } |
---|
581 | } |
---|
582 | return False; |
---|
583 | } |
---|
584 | |
---|
585 | function id2name($serverid='') |
---|
586 | { |
---|
587 | if(!$serverid) |
---|
588 | { |
---|
589 | $serverid = $this->serverid; |
---|
590 | } |
---|
591 | if($serverid) |
---|
592 | { |
---|
593 | $sql = "SELECT server_name FROM $this->table WHERE server_id=$serverid"; |
---|
594 | $this->db->query($sql,__LINE__,__FILE__); |
---|
595 | if($this->db->next_record()) |
---|
596 | { |
---|
597 | $server_name = $this->db->f(0); |
---|
598 | return $server_name; |
---|
599 | } |
---|
600 | } |
---|
601 | return False; |
---|
602 | } |
---|
603 | |
---|
604 | function exists($serverdata='') |
---|
605 | { |
---|
606 | if(!$serverdata) |
---|
607 | { |
---|
608 | return False; |
---|
609 | } |
---|
610 | if(is_int($serverdata)) |
---|
611 | { |
---|
612 | $serverid = $serverdata; |
---|
613 | settype($server_name,'string'); |
---|
614 | $server_name = $this->id2name($serverid); |
---|
615 | } |
---|
616 | else |
---|
617 | { |
---|
618 | $server_name = $serverdata; |
---|
619 | } |
---|
620 | $sql = "SELECT server_id FROM $this->table WHERE server_name='$server_name'"; |
---|
621 | $this->db->query($sql,__LINE__,__FILE__); |
---|
622 | if($this->db->next_record()) |
---|
623 | { |
---|
624 | return True; |
---|
625 | } |
---|
626 | return False; |
---|
627 | } |
---|
628 | |
---|
629 | /* TODO - Determine trust level here */ |
---|
630 | function auth($serverdata='') |
---|
631 | { |
---|
632 | if(!$serverdata || !@is_array($serverdata)) |
---|
633 | { |
---|
634 | return False; |
---|
635 | } |
---|
636 | $server_name = $serverdata['server_name']; |
---|
637 | $username = $serverdata['username']; |
---|
638 | $password = $serverdata['password']; |
---|
639 | |
---|
640 | $sql = "SELECT server_id,trust_rel FROM $this->table WHERE server_name='$server_name'"; |
---|
641 | $this->db->query($sql,__LINE__,__FILE__); |
---|
642 | if($this->db->next_record()) |
---|
643 | { |
---|
644 | if ($username == $GLOBALS['phpgw_info']['server']['site_username'] && |
---|
645 | $password == $GLOBALS['phpgw_info']['server']['site_password'] && |
---|
646 | $this->db->f('trust_rel') >= 1) |
---|
647 | { |
---|
648 | $this->authed = True; |
---|
649 | return True; |
---|
650 | } |
---|
651 | } |
---|
652 | return False; |
---|
653 | } |
---|
654 | } |
---|
655 | ?> |
---|