/**
  * Host template update action
  *
  * @param array $givenParameters
  */
 public static function update($givenParameters, $origin = "", $route = "", $validate = true, $validateMandatory = true)
 {
     $previousLinkedServiceTemplates = HostTemplateServiceTemplateRelation::getTargetIdFromSourceId('service_service_id', 'host_host_id', $givenParameters['object_id']);
     parent::update($givenParameters, $origin, $route, $validate, $validateMandatory);
     $linkedServiceTemplates = HostTemplateServiceTemplateRelation::getTargetIdFromSourceId('service_service_id', 'host_host_id', $givenParameters['object_id']);
     if (count(array_diff_assoc($linkedServiceTemplates, $previousLinkedServiceTemplates))) {
         $linkedHosts = HostRepository::getTemplateChainInverse($givenParameters['object_id']);
         foreach ($linkedHosts as $host) {
             HostRepository::deployServices($host['id'], $givenParameters['object_id']);
         }
     }
 }
Beispiel #2
0
 /**
  * Deploy services by host templates
  *
  * @param int $hostId
  * @param int $hostTemplateId
  */
 public static function deployServices($hostId, $hostTemplateId = null)
 {
     static $deployedServices = array();
     $aServices = array();
     $db = Di::getDefault()->get('db_centreon');
     //get host template
     $aHostTemplates = HostRepository::getTemplateChain($hostId, array(), -1);
     // get host services
     $aHostServices = HostServiceRelation::getMergedParameters(array('host_id'), array('service_id', 'service_description', 'service_alias', 'inherited'), -1, 0, null, "ASC", array('host_id' => $hostId), "OR");
     // get all service templates linked to a host by its host templates
     $aHostServiceTemplates = array();
     foreach ($aHostTemplates as $oHostTemplate) {
         $aHostTemplateServiceTemplates = HostTemplateServiceTemplateRelation::getMergedParameters(array('host_id'), array('service_id', 'service_description', 'service_alias'), -1, 0, null, "ASC", array('host_id' => $oHostTemplate['id']), "OR");
         // Remove services with same description
         foreach ($aHostTemplateServiceTemplates as $oHostTemplateServiceTemplate) {
             if (!isset($aHostServiceTemplates[$oHostTemplateServiceTemplate['service_alias']])) {
                 $aHostServiceTemplates[$oHostTemplateServiceTemplate['service_alias']] = $oHostTemplateServiceTemplate;
             }
         }
     }
     // get services linked to the host
     $aServicesDescription = array_values(array_column($aHostServices, 'service_description'));
     $repository = "CentreonConfiguration\\Repository\\ServiceRepository";
     $repository::setRelationMap(array("service_hosts" => "\\CentreonConfiguration\\Models\\Relation\\Service\\Host", "service_parents" => "\\CentreonConfiguration\\Models\\Relation\\Service\\Serviceparents", "service_children" => "\\CentreonConfiguration\\Models\\Relation\\Service\\Servicechildren"));
     $repository::setObjectName("Service");
     $repository::setObjectClass("\\CentreonConfiguration\\Models\\Service");
     $oModel = "CentreonConfiguration\\Models\\Service";
     $oSlugify = new CentreonSlugify($oModel, $repository);
     $db->beginTransaction();
     $aTemplateServicesDescription = array_keys($aHostServiceTemplates);
     foreach ($aHostServices as $service) {
         if ($service['inherited'] == 1 && !in_array($service['service_description'], $aTemplateServicesDescription)) {
             Service::delete($service['service_id']);
         }
     }
     // create services which don't yet exist
     foreach ($aHostServiceTemplates as $oHostServiceTemplate) {
         if (!in_array($oHostServiceTemplate['service_alias'], $aServicesDescription)) {
             $sHostName = Host::get($hostId, 'host_name');
             if (isset($sHostName['host_name'])) {
                 $sString = $sHostName['host_name'] . " " . $oHostServiceTemplate['service_alias'];
             } else {
                 $sString = $oHostServiceTemplate['service_alias'];
             }
             $sSlug = $oSlugify->slug($sString);
             if (!empty($oHostServiceTemplate['service_alias'])) {
                 $sData = $oHostServiceTemplate['service_alias'];
             } else {
                 $sData = $oHostServiceTemplate['service_description'];
             }
             $newService['service_slug'] = $sSlug;
             $newService['service_description'] = $sData;
             $newService['service_template_model_stm_id'] = $oHostServiceTemplate['service_id'];
             $newService['service_register'] = 1;
             $newService['service_activate'] = 1;
             $newService['organization_id'] = Di::getDefault()->get('organization');
             $newService['inherited'] = 1;
             $serviceId = Service::insert($newService);
             HostServiceRelation::insert($hostId, $serviceId);
             ServiceHostTemplateRelation::insert($serviceId, $oHostServiceTemplate['host_id']);
         }
     }
     $db->commit();
 }