Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
7 / 7 |
CRAP | |
100.00% |
71 / 71 |
Hm_Server_List | |
100.00% |
1 / 1 |
|
100.00% |
8 / 8 |
33 | |
100.00% |
70 / 70 |
service_connect($id, $server, $user, $pass, $cache) | |
100.00% |
1 / 1 |
1 | ||||||
connect($id, $cache=false, $user=false, $pass=false, $save_credentials=false) | |
100.00% |
1 / 1 |
11 | |
100.00% |
20 / 20 |
|||
forget_credentials($id) | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
add($atts, $id=false) | |
100.00% |
1 / 1 |
2 | |
100.00% |
7 / 7 |
|||
del($id) | |
100.00% |
1 / 1 |
2 | |
100.00% |
4 / 4 |
|||
dump($id=false, $full=false) | |
100.00% |
1 / 1 |
7 | |
100.00% |
20 / 20 |
|||
clean_up($id=false) | |
100.00% |
1 / 1 |
4 | |
100.00% |
7 / 7 |
|||
disconnect($id) | |
100.00% |
1 / 1 |
4 | |
100.00% |
7 / 7 |
<?php | |
if (!defined('DEBUG_MODE')) { die(); } | |
/** | |
* Struct that makes it easy for a module set to manage a list of server connections | |
*/ | |
trait Hm_Server_List { | |
/* list of server connections */ | |
private static $server_list = array(); | |
/** | |
* Server lists must override this method to connect | |
* | |
* @param $id int server id | |
* @param $server string server hostname or ip | |
* @param $user string username for authentication | |
* @param $pass string password for authentication | |
* @param $cache mixed cached connection data | |
* | |
* @return bool true on success | |
*/ | |
abstract public function service_connect($id, $server, $user, $pass, $cache); | |
/** | |
* Connect to a server | |
* | |
* @param $id int server id | |
* @param $cache mixed cached server data | |
* @param $user string username | |
* @param $pass string password | |
* @param $save_credentials bool true to save the username and password | |
* | |
* @return mixed connection object on success, otherwise false | |
*/ | |
public static function connect($id, $cache=false, $user=false, $pass=false, $save_credentials=false) { | |
if (array_key_exists($id, self::$server_list)) { | |
$server = self::$server_list[$id]; | |
if ($server['object']) { | |
return $server['object']; | |
} | |
else { | |
if ((!$user || !$pass) && (!array_key_exists('user', $server) || !array_key_exists('pass', $server))) { | |
return false; | |
} | |
elseif (array_key_exists('user', $server) && array_key_exists('pass', $server)) { | |
$user = $server['user']; | |
$pass = $server['pass']; | |
} | |
$res = self::service_connect($id, $server, $user, $pass, $cache); | |
if ($res) { | |
self::$server_list[$id]['connected'] = true; | |
if ($save_credentials) { | |
self::$server_list[$id]['user'] = $user; | |
self::$server_list[$id]['pass'] = $pass; | |
} | |
} | |
return self::$server_list[$id]['object']; | |
} | |
} | |
return false; | |
} | |
/** | |
* Remove the username and password from a connection | |
* | |
* @param $id int server id | |
* | |
* @return void | |
*/ | |
public static function forget_credentials($id) { | |
if (array_key_exists($id, self::$server_list)) { | |
unset(self::$server_list[$id]['user']); | |
unset(self::$server_list[$id]['pass']); | |
} | |
} | |
/** | |
* Add a server definition | |
* | |
* @param $atts array server details | |
* @param $id int server id | |
* | |
* @return void | |
*/ | |
public static function add($atts, $id=false) { | |
$atts['object'] = false; | |
$atts['connected'] = false; | |
if ($id !== false) { | |
self::$server_list[$id] = $atts; | |
} | |
else { | |
self::$server_list[] = $atts; | |
} | |
} | |
/** | |
* Remove a server | |
* | |
* @param $id int server id | |
* | |
* @return bool true on success | |
*/ | |
public static function del($id) { | |
if (array_key_exists($id, self::$server_list)) { | |
unset(self::$server_list[$id]); | |
return true; | |
} | |
return false; | |
} | |
/** | |
* Return all server details | |
* | |
* @param $id int if not false, return details for this server only | |
* @param $full bool true to return passwords for server connections. CAREFUL! | |
* | |
* @return array server details | |
*/ | |
public static function dump($id=false, $full=false) { | |
$list = array(); | |
foreach (self::$server_list as $index => $server) { | |
if ($id !== false && $index != $id) { | |
continue; | |
} | |
if ($full) { | |
$list[$index] = $server; | |
} | |
else { | |
$list[$index] = array( | |
'name' => $server['name'], | |
'server' => $server['server'], | |
'port' => $server['port'], | |
'tls' => $server['tls'] | |
); | |
if (array_key_exists('user', $server)) { | |
$list[$index]['user'] = $server['user']; | |
} | |
} | |
if ($id !== false) { | |
return $list[$index]; | |
} | |
} | |
return $list; | |
} | |
/** | |
* Try to disconnect cleanly | |
* | |
* @param $id int server id | |
* | |
* @return void | |
*/ | |
public static function clean_up($id=false) { | |
if ($id !== false && array_key_exists($id, self::$server_list)) { | |
self::disconnect($id); | |
} | |
else { | |
foreach (self::$server_list as $index => $server) { | |
self::disconnect($index); | |
} | |
} | |
} | |
/** | |
* Disconnect from a server | |
* | |
* @param $id int the server id to disconnect | |
* | |
* @return void | |
*/ | |
public static function disconnect($id) { | |
if (self::$server_list[$id]['connected'] && self::$server_list[$id]['object']) { | |
if (method_exists(self::$server_list[$id]['object'], 'disconnect')) { | |
self::$server_list[$id]['object']->disconnect(); | |
} | |
self::$server_list[$id]['connected'] = false; | |
} | |
} | |
} | |
?> |