/** * Magic method for get/set/add/del relations * * @param string $name * @param array $arg */ public function __call($name, $arg) { $name = strtolower($name); if (!isset($arg[0])) { throw new CentreonClapiException(self::MISSINGPARAMETER); } $args = explode($this->delim, $arg[0]); $hcIds = $this->object->getIdByParameter($this->object->getUniqueLabelField(), array($args[0])); if (!count($hcIds)) { throw new CentreonClapiException(self::OBJECT_NOT_FOUND . ":" . $args[0]); } $categoryId = $hcIds[0]; if (preg_match("/^(get|set|add|del)member\$/", $name, $matches)) { $relobj = new Centreon_Object_Relation_Host_Category_Host(); $obj = new Centreon_Object_Host(); if ($matches[1] == "get") { $tab = $relobj->getTargetIdFromSourceId($relobj->getSecondKey(), $relobj->getFirstKey(), $hcIds); echo "id" . $this->delim . "name" . "\n"; foreach ($tab as $value) { $tmp = $obj->getParameters($value, array($obj->getUniqueLabelField())); echo $value . $this->delim . $tmp[$obj->getUniqueLabelField()] . "\n"; } } else { if (!isset($args[1])) { throw new CentreonClapiException(self::MISSINGPARAMETER); } $relation = $args[1]; $relations = explode("|", $relation); $relationTable = array(); foreach ($relations as $rel) { $tab = $obj->getIdByParameter($obj->getUniqueLabelField(), array($rel)); if (!count($tab)) { throw new CentreonClapiException(self::OBJECT_NOT_FOUND . ":" . $rel); } $relationTable[] = $tab[0]; } if ($matches[1] == "set") { $relobj->delete($categoryId); } $existingRelationIds = $relobj->getTargetIdFromSourceId($relobj->getSecondKey(), $relobj->getFirstKey(), array($categoryId)); foreach ($relationTable as $relationId) { if ($matches[1] == "del") { $relobj->delete($categoryId, $relationId); } elseif ($matches[1] == "set" || $matches[1] == "add") { if (!in_array($relationId, $existingRelationIds)) { $relobj->insert($categoryId, $relationId); } } } $acl = new CentreonACL(); $acl->reload(true); } } else { throw new CentreonClapiException(self::UNKNOWN_METHOD); } }
/** * * @param int $depId * @param string $objectToDelete * @param string $relType | 'parent' or 'child' */ protected function delServiceRelations($depId, $objectToDelete, $relType) { if ($relType == 'parent') { $sql = "DELETE FROM dependency_serviceParent_relation\n WHERE dependency_dep_id = ?\n AND host_host_id = ?\n AND service_service_id = ?"; if (!strstr($objectToDelete, ',')) { throw new CentreonClapiException('Invalid service definition'); } list($host, $service) = explode(",", $objectToDelete); $idTab = $this->serviceObj->getHostAndServiceId($host, $service); if (!count($idTab)) { throw new CentreonClapiException(sprintf('Could not find service %s on host %s', $service, $host)); } $params = array($depId, $idTab[0], $idTab[1]); } elseif ($relType == 'child' && strstr($objectToDelete, ',')) { // service child $sql = "DELETE FROM dependency_serviceChild_relation\n WHERE dependency_dep_id = ?\n AND host_host_id = ?\n AND service_service_id = ?"; list($host, $service) = explode(",", $objectToDelete); $idTab = $this->serviceObj->getHostAndServiceId($host, $service); if (!count($idTab)) { throw new CentreonClapiException(sprintf('Could not find service %s on host %s', $service, $host)); } $params = array($depId, $idTab[0], $idTab[1]); } elseif ($relType == 'child') { // host child $sql = "DELETE FROM dependency_hostChild_relation\n WHERE dependency_dep_id = ?\n AND host_host_id = ?"; $hostObj = new Centreon_Object_Host(); $hostIds = $hostObj->getIdByParameter($hostObj->getUniqueLabelField(), array($objectToDelete)); if (!count($hostIds)) { throw new CentreonClapiException(sprintf('Could not find host %s', $objectToDelete)); } $params = array($depId, $hostIds[0]); } $this->db->query($sql, $params); }
/** * Add a service * * @param string $parameters * @return void * @throws CentreonClapiException */ public function add($parameters) { $params = explode($this->delim, $parameters); if (count($params) < $this->nbOfCompulsoryParams) { throw new CentreonClapiException(self::MISSINGPARAMETER); } if ($this->serviceExists($params[self::ORDER_HOSTNAME], $params[self::ORDER_SVCDESC]) == true) { throw new CentreonClapiException(self::OBJECTALREADYEXISTS); } $hostObject = new Centreon_Object_Host(); $tmp = $hostObject->getIdByParameter($hostObject->getUniqueLabelField(), $params[self::ORDER_HOSTNAME]); if (!count($tmp)) { throw new CentreonClapiException(self::OBJECT_NOT_FOUND . ":" . $params[self::ORDER_HOSTNAME]); } $hostId = $tmp[0]; $addParams = array(); $addParams['service_description'] = $params[self::ORDER_SVCDESC]; $template = $params[self::ORDER_SVCTPL]; $tmp = $this->object->getList($this->object->getPrimaryKey(), -1, 0, null, null, array('service_description' => $template, 'service_register' => '0'), "AND"); if (!count($tmp)) { throw new CentreonClapiException(self::OBJECT_NOT_FOUND . ":" . $template); } $addParams['service_template_model_stm_id'] = $tmp[0][$this->object->getPrimaryKey()]; $this->params = array_merge($this->params, $addParams); $serviceId = parent::add(); $relObject = new Centreon_Object_Relation_Host_Service(); $relObject->insert($hostId, $serviceId); $extended = new Centreon_Object_Service_Extended(); $extended->insert(array($extended->getUniqueLabelField() => $serviceId)); }