.
*/
/********
public function __construct($config)
public function enabled()
function get_hosts_for_system_management()
private function xml_to_array($xml,$alternative_method = FALSE)
public function send_action($type,$hostId,$mac)
public function list_clients( $hostId = "")
public function add_client($hostId,$macaddress,$notes,$description)
public function modify_client($hostId,$mac,$notes,$description)
public function get_netboot_products($host = "")
public function get_local_products($host = "")
public function get_product_properties($productId,$hostId = "")
public function set_product_properties($productId,$cfg,$hostId = "")
public function add_product_to_client($productId,$hostId)
public function del_product_from_client($productId,$hostId)
public function get_client_hardware($hostId)
public function get_client_software($hostId)
public function del_client($hostId)
public function job_opsi_install_client($hostId,$mac)
********/
/*! \brief This is the opsi base class, it handles
. gosa daemon requests and prepares data for opsi plugins.
*/
class opsi extends gosaSupportDaemon
{
private $config = NULL;
protected $use_alternative_xml_parse_method = TRUE;
protected $target = "";
/*! \brief Create opsi object.
@param
@return
*/
public function __construct($config)
{
$this->config = $config;
gosaSupportDaemon::__construct($config);
/* Detect the target opsi host
*/
$tmp= $this->config->search("faiManagement", "CLASS",array('menu','tabs'));
if(!empty($tmp) && class_available("faiManagement")){
$opsi_hosts = $this->get_hosts_with_module("opsi_com");
/* Just use the first result of the opsi hosts
*/
if(count($opsi_hosts) == 1 && isset($opsi_hosts[0])){
$this->target = $opsi_hosts[0];
}elseif(count($opsi_hosts) > 1){
$this->target = $opsi_hosts[0];
msg_dialog::display(_("Opsi"),sprintf(_("More than one Opsi server were found, using the first result '%s'."),$this->target));
}
}
}
public function enabled()
{
$tmp= $this->config->search("faiManagement", "CLASS",array('menu','tabs'));
if(!empty($tmp) && class_available("faiManagement") && !empty($this->target)){
return(TRUE);
}
return(FALSE);
}
/******************
Opsi handling
******************/
function get_hosts_for_system_management()
{
$res = $this->list_clients();
$data = array();
$ui = get_userinfo();
foreach($res as $entry){
if(!isset($entry['MAC'][0]['VALUE'])) $entry['MAC'][0]['VALUE'] = "";
$obj = array(
"dn" => "opsi:=".$entry['NAME'][0]['VALUE'].",".get_ou("sambaMachineAccountRDN").$this->config->current['BASE'],
"objectClass" => array("gosa_opsi_client"),
"cn" => array(0 => $entry['NAME'][0]['VALUE']),
"macAddress" => array(0 => $entry['MAC'][0]['VALUE']),
"opsi_notes" => array(0 => $entry['NOTES'][0]['VALUE']));
/* Check permissions */
$opsi_acl = $ui->get_permissions($obj['dn'],"opsi/opsiGeneric");
if(preg_match("/r/",$opsi_acl)){
if(!empty($entry['DESCRIPTION'][0]['VALUE'])){
$obj["description"]= array();
$obj["description"][0]= $entry['DESCRIPTION'][0]['VALUE'];
}
$data[] = $obj;
}
}
return($data);
}
/*! \brief Maps all xml to array conversion to an alternative method
then used in the parent class 'gosaSupportDaemon'.
The alternative method is able to handle more complex data.
*/
private function xml_to_array($xml,$alternative_method = FALSE)
{
return(gosaSupportDaemon::xml_to_array($xml,TRUE));
}
/*! \brief Trigger an event like wake or install for a specific hostId.
*/
public function send_action($type,$hostId,$mac)
{
switch($type){
case 'install' : $this->job_opsi_install_client($hostId,$mac); break;
default : trigger_error('Unknown type '.$type.'.');
}
}
public function job_opsi_activate_client($id,$mac)
{
$events = DaemonEvent::get_event_types(SYSTEM_EVENT | HIDDEN_EVENT);
$o_queue = new gosaSupportDaemon();
if(isset($events['TRIGGERED']['DaemonEvent_activate'])){
$evt = $events['TRIGGERED']['DaemonEvent_activate'];
$tmp = new $evt['CLASS_NAME']($this->config);
$tmp->set_type(TRIGGERED_EVENT);
$tmp->add_targets(array($mac));
if(!$o_queue->append($tmp)){
msg_dialog::display(_("Service infrastructure"),msgPool::siError($o_queue->get_error()),ERROR_DIALOG);
}
}
}
/******************
SI Communication functions
******************/
/*! \brief Returns a list of all opsi clients.
@param
@return
*/
public function list_clients( $hostId = "")
{
$data = array();
$res = $this->send_data("gosa_opsi_list_clients",$this->target,$data,TRUE);
$items = array();
if(isset($res['XML'][0]['ITEM'])){
$items = $res['XML'][0]['ITEM'];
}
return($items);
}
/*! \brief Adds a new opsi client.
@param
@return
*/
public function add_client($hostId,$macaddress,$notes,$description)
{
$data = array("hostId" => $hostId,"macaddress" => $macaddress);
if(empty($hostId)){
trigger_error("No valid host id given, check parameter 1.");
return;
}
/* Add optional attributes */
foreach(array("notes","description") as $attr) {
if(!empty($$attr)){
$data[$attr] = $$attr;
}
}
/* Query SI server */
$res = $this->send_data("gosa_opsi_add_client",$this->target,$data,TRUE);
}
/*! \brief Modify an opsi client.
@param
@return
*/
public function modify_client($hostId,$mac,$notes,$description)
{
$data = array("hostId" => $hostId,"mac" => $mac);
if(empty($hostId)){
trigger_error("No valid host id given, check parameter 1.");
return;
}
/* Add optional attributes */
foreach(array("notes","description") as $attr) {
$data[$attr] = $$attr;
}
/* Query SI server */
$res = $this->send_data("gosa_opsi_modify_client",$this->target,$data,TRUE);
}
/*! \brief Returns a list of netboot products.
@param
@return
*/
public function get_netboot_products($host = "")
{
/* Append host attribute to query data
*/
$data = array();
if(!empty($host)){
$data['hostId'] = trim($host);
}
$res = $this->send_data("gosa_opsi_get_netboot_products",$this->target,$data,TRUE);
$items = array();
if(isset($res['XML'][0]['ITEM'])){
foreach($res['XML'][0]['ITEM'] as $entry){
$e = array("DESC" => $entry['DESCRIPTION'][0]['VALUE'],
"NAME" => $entry['PRODUCTID'][0]['VALUE']);
$items[$entry['PRODUCTID'][0]['VALUE']] = $e;
}
}
return($items);
}
/*! \brief Returns a list of all local products.
@param
@return
*/
public function get_local_products($host = "")
{
/* Append host attribute to query data
*/
$data = array();
if(!empty($host)){
$data['hostId'] = trim($host);
}
$res = $this->send_data("gosa_opsi_get_local_products",$this->target,$data,TRUE);
$items = array();
if(isset($res['XML'][0]['ITEM'])){
foreach($res['XML'][0]['ITEM'] as $entry){
$e = array("DESC" => $entry['DESCRIPTION'][0]['VALUE'],
"NAME" => $entry['PRODUCTID'][0]['VALUE']);
$items[$entry['PRODUCTID'][0]['VALUE']] = $e;
}
}
return($items);
}
/*! \brief Returns a list of netboot products.
@param
@return
*/
public function get_full_product_host_information($host = "")
{
/* Append host attribute to query data
*/
$data = array();
if(!empty($host)){
$data['hostId'] = trim($host);
}
$res = $this->send_data("gosa_opsi_get_full_product_host_information",$this->target,$data,TRUE);
$items = array();
$attrs = array("TYPE","PRIORITY","ONCESCRIPT","LICENSEREQUIRED","PACKAGEVERSION","PRODUCTVERSION",
"ADVICE","SETUPSCRIPT","WINDOWSSOFTWAREIDS","PXECONFIGTEMPLATE","NAME","CREATIONTIMESTAMP", "TYPE",
"ALWAYSSCRIPT","PRODUCTID","DESCRIPTION","UNINSTALLSCRIPT","UPDATESCRIPT","PRODUCTCLASSNAMES");
if(isset($res['XML'][0]['ITEM'])){
foreach($res['XML'][0]['ITEM'] as $entry){
$e = array();
foreach($attrs as $attr){
if(isset($entry[$attr])){
foreach($entry[$attr] as $key => $value){
if(isset($value['VALUE'])){
$e['data'][$attr] = $value['VALUE'];
}elseif($value['ELEMENT']){
foreach($value['ELEMENT'] as $element){
$e['data'][$attr][] = $element['VALUE'];
}
}
}
}
}
$e["configurable"] = FALSE;
if(isset($entry['PROPERTIES']) && count($entry['PROPERTIES'])){
$e["configurable"] = TRUE;
$p_data = array();
foreach($entry['PROPERTIES'][0] as $p_name => $p_values){
if(empty($p_values)) continue;
$p_data[$p_name]= array();
foreach(array('CURRENT','DEFAULT','DESCRIPTION') as $p_tmp){
if(isset($p_values[0][$p_tmp])){
if(isset($p_values[0][$p_tmp][0]['VALUE'])){
$p_data[$p_name][$p_tmp] = $p_values[0][$p_tmp][0]['VALUE'];
}
}
}
if(isset($p_values[0]['VALUES'][0]['ELEMENT'])){
foreach($p_values[0]['VALUES'][0]['ELEMENT'] as $val){
$p_data[$p_name]['VALUE'][] = $val['VALUE'];
}
$p_data[$p_name]['VALUE_CNT'] = count($p_data[$p_name]['VALUE']);
}
}
$e["data"]['PROPERTIES'] = $p_data;
}
$e["installed"] = FALSE;
if(isset($entry['ACTIONREQUEST'])){
$e["installed"] = TRUE;
}
$e["requires_licence"] = FALSE;
if(isset($e['data']['LICENSEREQUIRED']) && preg_match("/true/i",$e['data']['LICENSEREQUIRED'])){
$e["requires_licence"] = TRUE;
}
$items[$entry['PRODUCTID'][0]['VALUE']] = $e;
}
}
return($items);
}
/*! \brief Returns a list of all product properties. \
. Additionally you can specify the host parameter to \
. get host specific product properties
@param
@return
*/
public function get_product_properties($productId,$hostId = "")
{
$data = array("productId" => $productId);
/* Append host attribute to query data
*/
if(!empty($hostId)){
$data['hostId'] = trim($hostId);
}
/* Check parameter */
if(empty($productId)){
trigger_error("No valid product id given, check parameter 1.");
return(array());
}
/* Query SI server */
$res = $this->send_data("gosa_opsi_get_product_properties",$this->target,$data,TRUE);
$items = array();
if(isset($res['XML'][0]['ITEM'])){
foreach($res['XML'][0]['ITEM'] as $entry){
foreach($entry as $name => $val){
foreach(array("DESCRIPTION","CURRENT") as $attr){
$items[$name][$attr] = "";
if(isset($val[0][$attr])){
$items[$name][$attr] = $val[0][$attr][0]['VALUE'];
}
}
$items[$name]['VALUE'] = array();
if(isset($val['0']['VALUE'])){
foreach($val['0']['VALUE'] as $value){
$items[$name]['VALUE'][] = $value['VALUE'];
}
}
$items[$name]['VALUE_CNT'] = count($items[$name]['VALUE']);
}
}
}
return($items);
}
/*! \brief Set product properties, globally or per host.
@param
@return
*/
public function set_product_properties($productId,$cfg,$hostId = "")
{
$data = array("productId" => $productId);
/* Append host attribute to query data
*/
if(!empty($hostId)){
$data['hostId'] = trim($hostId);
}
/* Check parameter */
if(empty($productId)){
trigger_error("No valid product id given, check parameter 1.");
return(array());
}
if(!count($cfg)) return;
/* Add properties */
$data['item'] = array();
foreach($cfg as $name => $value){
$data['item'][] = "".$name."".$value['CURRENT']."";
}
/* Query SI server */
$res = $this->send_data("gosa_opsi_set_product_properties",$this->target,$data,TRUE);
}
/*! \brief Adds a given product to a client.
@param
@return
*/
public function add_product_to_client($productId,$hostId)
{
$data = array("productId" => $productId,"hostId" => $hostId);
/* Check parameter */
if(empty($productId)){
trigger_error("No valid product id given, check parameter 1.");
return;
}
if(empty($hostId)){
trigger_error("No valid host id given, check parameter 2.");
return;
}
/* Query SI server */
$res = $this->send_data("gosa_opsi_add_product_to_client",$this->target,$data,TRUE);
}
/*! \brief Removes a given product from a client.
@param
@return
*/
public function del_product_from_client($productId,$hostId)
{
$data = array("productId" => $productId,"hostId" => $hostId);
/* Check parameter */
if(empty($productId)){
trigger_error("No valid product id given, check parameter 1.");
return;
}
if(empty($hostId)){
trigger_error("No valid host id given, check parameter 2.");
return;
}
/* Query SI server */
$res = $this->send_data("gosa_opsi_del_product_from_client",$this->target,$data,TRUE);
}
/*! \brief Returns the clients hardware setup.
@param
@return
*/
public function get_client_hardware($hostId)
{
$data = array("hostId" => $hostId);
/* Check parameter */
if(empty($hostId)){
trigger_error("No valid host id given, check parameter 1.");
return;
}
/* Query SI server */
$res = $this->send_data("gosa_opsi_get_client_hardware",$this->target,$data,TRUE);
if(isset($res['XML'][0]['ITEM'])){
return($res['XML'][0]['ITEM']);
}
return(array());
}
/*! \brief Returns the clients software setup.
@param
@return
*/
public function get_client_software($hostId)
{
$data = array("hostId" => $hostId);
/* Check parameter */
if(empty($hostId)){
trigger_error("No valid host id given, check parameter 1.");
return;
}
/* Query SI server */
$res = $this->send_data("gosa_opsi_get_client_software",$this->target,$data,TRUE);
if(isset($res['XML'][0]['ITEM'])){
return($res['XML'][0]['ITEM']);
}
return(array());
}
/*! \brief Deletes the given opsi client.
@param
@return
*/
public function del_client($hostId)
{
$data = array("hostId" => $hostId);
/* Check parameter */
if(empty($hostId)){
trigger_error("No valid host id given, check parameter 1.");
return;
}
/* Query SI server */
$res = $this->send_data("gosa_opsi_del_client",$this->target,$data,TRUE);
if(isset($res['XML'][0]['ITEM'])){
return($res['XML'][0]['ITEM']);
}
return(array());
}
/*! \brief Triggers install/reinstall of an opsi client.
@param
@return
*/
public function job_opsi_install_client($hostId,$mac)
{
$data = array("hostId" => $hostId,"macaddress"=>$mac);
/* Check parameter */
if(empty($hostId)){
trigger_error("No valid host id given, check parameter 1.");
return;
}
/* Query SI server */
$this->send_data("job_opsi_install_client",$this->target,$data,TRUE);
}
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
?>