send_data("gosa_opsi_getLicensePools_listOfHashes",$this->target,$data,TRUE); $items = array(); if(isset($res['XML'][0]['RESULT'][0]['HIT'])){ $items = $res['XML'][0]['RESULT'][0]['HIT']; $data =array(); foreach($items as $item){ $entry = array(); foreach( array( "DESCRIPTION" => "description", "LICENSEPOOLID" => "cn", "PRODUCTIDS" => "productId", "WINDOWSSOFTWAREIDS"=> "softwareId") as $source => $dest){ if(isset($item[$source])){ $entry[$dest] = array('count' => 0); foreach($item[$source] as $obj){ $entry[$dest][] = $obj['VALUE']; } $entry[$dest]['count'] = (count($entry[$dest]) -1 ); } } $data[] =$entry; } return($data); } return(FALSE); } /* @brief Create a license pool at Opsi server. * @param licensePoolId The name of the pool (optional). * @param description The description of the pool (optional). * @param productIds A list of assigned porducts of the pool (optional). * @param windowsSoftwareIds A list of windows software Ids associated to the pool (optional). */ function createPool($poolId,$desc = "",$products = array(),$softwareIds = array()) { $data= array(); $data['licensePoolId'] = htmlentities($poolId); if(!empty($desc)){ $data['description'] = htmlentities($desc); } if(count($products)){ $data['productIds'] = $products; } if(count($softwareIds)){ $data['windowsSoftwareIds'] = $softwareIds; } $res = $this->send_data("gosa_opsi_createLicensePool",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_CREATELICENSEPOOL'])){ return(TRUE); } return(FALSE); } /* * @brief Return productIds, windowsSoftwareIds and description for a given licensePoolId * @param licensePoolId The name of the pool. */ function getPool($licensePoolId) { $data= array(); $data['licensePoolId'] = htmlentities($licensePoolId); $res = $this->send_data("gosa_opsi_getPool",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_GETPOOL'])){ $item = array(); foreach(array("LICENSEPOOLID" => "cn", "DESCRIPTION" => "description", "LICENSES" => "licenses", "LICENSECONTRACTDATA" => "contract", "WINDOWSSOFTWAREIDS" => "softwareId", "PRODUCTIDS" => "productId") as $source => $target){ if(isset($res['XML'][0][$source])){ $item[$target] = array('count' => 0); foreach($res['XML'][0][$source] as $data){ if(isset($data['VALUE'])){ $item[$target][] = $data['VALUE']; }elseif(isset($data['HIT'])){ $item[$target] = array_merge($item[$target],$data['HIT']); } } $item[$target]['count'] = count($item[$target]) -1 ; } } return($item); } return(FALSE); } /* * @brief * Delete licnese pool by license pool Id. * A pool can only be deleted if there are no software licenses bound to the pool. * The fixed parameter deleteLicenses=True specifies that * all software licenses bound to the pool are being deleted. * @param licensePoolId The name of the pool. */ function deletePool($poolId, $force = FALSE) { $data= array(); $data['licensePoolId'] = htmlentities($poolId); if($force){ $data['deleteLicenses'] = 'TRUE'; } $res = $this->send_data("gosa_opsi_deleteLicensePool",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_DELETELICENSEPOOL'])){ return(TRUE); } return(FALSE); } /******************* * LICENSES *******************/ function listLicenses() { $data= array(); $res = $this->send_data("gosa_opsi_getAllSoftwareLicenses",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_GETALLSOFTWARELICENSES'])){ $licenses = array(); if(isset($res['XML'][0]['LICENSES'][0]['HIT'])){ foreach($res['XML'][0]['LICENSES'][0]['HIT'] as $entry){ $item = array(); // License keys are indexed by the pool id, map it here. if(isset($entry['LICENSEPOOLIDS'][0]['VALUE'])){ $n = strtoupper($entry['LICENSEPOOLIDS'][0]['VALUE']); $entry['LICENSEKEYS'] = $entry['LICENSEKEYS'][0][$n]; } // Now fake an ldap like result foreach(array( "BOUNDTOHOST" => "boundToHost", "LICENSEKEYS" => "licenseKey", "LICENSEPOOLIDS" => "licensePoolId", "LICENSETYPE" => "licenseType", "SOFTWARELICENSEID" => "softwareLicenseId") as $source => $target){ if(isset($entry[$source])){ $item[$target] = array('count' => 0); foreach($entry[$source] as $data){ $item[$target][] = $data['VALUE']; } $item[$target]['count'] = count($item[$target]) -1 ; } } $licenses[] = $item; } } return($licenses); } return(FALSE); } /* * @brief * Create a license contract, create a software * license and add the software license to the license pool * @param licensePoolId The name of the pool the license should be assigned. * @param licenseKey The license key. * @param licenseTyp Typ of a licnese, either "OEM", "VOLUME" or "RETAIL" * @param partner Name of the license partner (optional). * @param conclusionDate Date of conclusion of license contract (optional) * @param notificationDate Date of notification that license is running out soon (optional). * @param notes This is the place for some notes (optional) * @param softwareLicenseId Identificator of a license (optional). * @param maxInstallations The number of clients use this license (optional). * @param boundToHost The name of the client the license is bound to (optional). * @param expirationDate The date when the license is running down (optional). */ function createLicense($poolId, $licenseId, $licenseKey,$licenseType = "", $partner = "", $conclusionDate = "", $notificationDate ="", $notes = "", $softwareLicenseId = "", $maxInstallations = "", $boundToHost = "", $expirationDate = "") { $data= array(); $data['licensePoolId'] = htmlentities($poolId); $data['licenseKey'] = htmlentities($licenseKey); $data['licenseId'] = htmlentities($licenseId); // Append optional attributes foreach(array("partner","conclusionDate","notificationDate","notes","softwareLicenseId", "licenseType","maxInstallations","boundToHost","expirationDate") as $attr){ if(!empty($$attr)){ $data[$attr] = $$attr; } } $res = $this->send_data("gosa_opsi_createLicense",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_GETSOFTWARELICENSE_HASH'])){ return(TRUE); } return(FALSE); } /* @brief Returns expirationDate, boundToHost, maxInstallation, licenseTyp, * licensePoolIds and licenseKeys for a given softwareLicense Id. * @param softwareLicenseId Identificator of a license. */ function getLicense($softwareLicenseId) { $data= array(); $data['softwareLicenseId'] = htmlentities($softwareLicenseId); $res = $this->send_data("gosa_opsi_getSoftwareLicense_hash",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_GETSOFTWARELICENSE_HASH'])){ return($res); } return(FALSE); } function getReservedLicensesForHost($hostId) { $data= array(); if(!empty($hostId)){ $data['hostId'] = htmlentities($hostId); } $res = $this->send_data("gosa_opsi_getReservedLicenses",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_GETRESERVEDLICENSES'])){ $items = array(); if(isset($res['XML'][0]['LICENSES'][0]['HIT'])){ foreach($res['XML'][0]['LICENSES'][0]['HIT'] as $entry){ $item = array(); foreach(array( "LICENSEPOOLIDS" => "licensePoolId", "SOFTWARELICENSEID" => "softwareLicenseId") as $source => $target){ if(isset($entry[$source])){ $item[$target] = array('count' => 0); foreach($entry[$source] as $data){ $item[$target][] = $data['VALUE']; } $item[$target]['count'] = count($item[$target]) -1 ; } } $items[] = $item; } } return($items); } return(FALSE); } /* * @brief Returns softwareLicenseId, notes, licenseKey, hostId and licensePoolId for optional given licensePoolId and hostId * @param hostid Something like client_1.intranet.mydomain.de (optional). * @param licensePoolId The name of the pool (optional). */ function getLicenseUsage($hostId = "", $licensePoolId = "") { $data= array(); if(!empty($hostId)){ $data['hostId'] = htmlentities($hostId); } if(!empty($hostId)){ $data['licensePoolId'] = htmlentities($licensePoolId); } $res = $this->send_data("gosa_opsi_getSoftwareLicenseUsages",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_GETSOFTWARELICENSEUSAGES'])){ $items = array(); if(isset($res['XML'][0]['RESULT'][0]['HIT'])){ foreach($res['XML'][0]['RESULT'][0]['HIT'] as $entry){ $item = array(); foreach(array( "HOSTID" => "hostId", "LICENSEKEY" => "licenseKey", "LICENSEPOOLID" => "licensePoolId", "NOTES" => "notes", "SOFTWARELICENSEID" => "softwareLicenseId") as $source => $target){ if(isset($entry[$source])){ $item[$target] = array('count' => 0); foreach($entry[$source] as $data){ $item[$target][] = $data['VALUE']; } $item[$target]['count'] = count($item[$target]) -1 ; } } $items[] = $item; } } return($items); } return(FALSE); } /* @brief Assigns a software license to a host * @param hostId Something like client_1.intranet.mydomain.de * @param licensePoolId The name of the pool. */ function addLicenseToHost($licensePoolId,$hostId) { $data= array(); $data['licensePoolId'] = htmlentities($licensePoolId); $data['hostId'] = htmlentities($hostId); $res = $this->send_data("gosa_opsi_assignSoftwareLicenseToHost",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_ASSIGNSOFTWARELICENSETOHOST'])){ return(TRUE); } return(FALSE); } /* @brief Reserve a software license to a host * @param softwareLicenseId * @param hostId Something like client_1.intranet.mydomain.de */ function reserverLicenseForHost($softwareLicenseId,$hostId) { $data= array(); $data['softwareLicenseId'] = htmlentities($softwareLicenseId); $data['hostId'] = htmlentities($hostId); $res = $this->send_data("gosa_opsi_boundHostToLicense",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_BOUNDHOSTTOLICENSE'])){ return(TRUE); } return(FALSE); } /* * @brief Remove software licnese reservation for a host. * @param softwareLicenseId * @param hostid Something like client_1.intranet.mydomain.de */ function removeLicenseReservationFromHost($softwareLicenseId,$hostId) { $data= array(); $data['softwareLicenseId'] = htmlentities($softwareLicenseId); $data['hostId'] = htmlentities($hostId); $res = $this->send_data("gosa_opsi_unboundHostFromLicense",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_UNBOUNDHOSTFROMLICENSE'])){ return(TRUE); } return(FALSE); } /* * @brief Unassign a software license from a host. * @param hostid Something like client_1.intranet.mydomain.de * @param licensePoolId The name of the pool. */ function removeLicenseFromHost($licensePoolId,$hostId) { $data= array(); $data['licensePoolId'] = htmlentities($licensePoolId); $data['hostId'] = htmlentities($hostId); $res = $this->send_data("gosa_opsi_unassignSoftwareLicenseFromHost",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_UNASSIGNSOFTWARELICENSEFROMHOST'])){ return(TRUE); } return(FALSE); } /* * @brief Removes a single license from a license pool * Attention, the software license has to exists * otherwise it will lead to an Opsi internal server error. * @param softwareLicenseId * @param licensePoolId */ function removeLicenseFromPool($licensePoolId,$softwareLicenseId) { $data= array(); $data['licensePoolId'] = htmlentities($licensePoolId); $data['softwareLicenseId'] = htmlentities($softwareLicenseId); $res = $this->send_data("gosa_opsi_removeLicense",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_REMOVELICENSE'])){ return(TRUE); } return(FALSE); } /* * @brief Unassign all software licenses from a host * @param hostid Something like client_1.intranet.mydomain.de */ function removeAllLicensesFromHost($hostId) { $data= array(); $data['hostId'] = htmlentities($hostid); $res = $this->send_data("gosa_opsi_unassignAllSoftwareLicensesFromHost",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_UNASSIGNALLSOFTWARELICENSESFROMHOST'])){ return(TRUE); } return(FALSE); } /* @brief * Returns the assigned licensePoolId and licenses, * how often the product is installed and at which host * and the number of max and remaining installations for a given OPSI product. * @param productId Identificator of an OPSI product. */ function getLicensesForProduct($productId) { $data= array(); $data['productId'] = htmlentities($productId); $res = $this->send_data("gosa_opsi_getSoftwareLicenseUsagesForProductId",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_GETSOFTWARELICENSEUSAGESFORPRODUCTID'])){ if(isset($res['XML'][0]['RESULT'][0]['HIT'])){ return($res['XML'][0]['RESULT'][0]['HIT']); } return(array()); } return(FALSE); } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>