示例#1
0
function delete_sysmaps_elements_with_groupid($groupids)
{
    zbx_value2array($groupids);
    if (empty($groupids)) {
        return true;
    }
    $db_elements = DBselect('SELECT selementid ' . ' FROM sysmaps_elements ' . ' WHERE ' . DBcondition('elementid', $groupids) . ' AND elementtype=' . SYSMAP_ELEMENT_TYPE_HOST_GROUP);
    $selementids = array();
    while ($db_element = DBfetch($db_elements)) {
        $selementids[$db_element['selementid']] = $db_element['selementid'];
    }
    delete_sysmaps_element($selementids);
    return TRUE;
}
示例#2
0
 /**
  * Delete Element from map
  *
  * @param array $selements multidimensional array with selement objects
  * @param array $selements[0, ...]['selementid'] selementid to delete
  */
 public static function deleteElements($selements)
 {
     $result = true;
     $selements = zbx_toArray($selements);
     $selementids = zbx_objectValues($selements, 'selementid');
     $sysmapids = zbx_objectValues($selements, 'sysmapid');
     try {
         self::BeginTransaction(__METHOD__);
         $options = array('sysmapids' => $sysmapids, 'editable' => 1, 'preservekeys' => 1);
         $upd_maps = self::get($options);
         foreach ($selements as $snumm => $selement) {
             if (!isset($upd_maps[$selement['sysmapid']])) {
                 self::exception(ZBX_API_ERROR_PARAMETERS, S_NO_PERMISSIONS);
             }
         }
         $result = delete_sysmaps_element($selementids);
         $result = self::EndTransaction($result, __METHOD__);
         if (!$result) {
             self::exception(ZBX_API_ERROR_INTERNAL, 'Map delete elements failed');
         }
         return $selementids;
     } catch (APIException $e) {
         self::EndTransaction(false, __METHOD__);
         $errors = $e->getErrors();
         $error = reset($errors);
         self::setError(__METHOD__, ZBX_API_ERROR_PARAMETERS, $error);
         return false;
     }
 }
示例#3
0
 public static function parseMap($rules)
 {
     global $USER_DETAILS;
     $importMaps = self::XMLtoArray(self::$xml);
     if (!isset($importMaps['zabbix_export'])) {
         $importMaps['zabbix_export'] = $importMaps;
     }
     try {
         if ($USER_DETAILS['type'] == USER_TYPE_SUPER_ADMIN) {
             $images = $importMaps['zabbix_export']['images'];
             $images_to_add = array();
             $images_to_update = array();
             foreach ($images as $inum => $image) {
                 if (CImage::exists($image)) {
                     if ($image['imagetype'] == IMAGE_TYPE_ICON && isset($rules['icons']['exist']) || $image['imagetype'] == IMAGE_TYPE_BACKGROUND && isset($rules['background']['exist'])) {
                         $options = array('filter' => array('name' => $image['name']), 'output' => API_OUTPUT_SHORTEN);
                         $imgs = CImage::get($options);
                         $img = reset($imgs);
                         $image['imageid'] = $img['imageid'];
                         // image will be decoded in class.image.php
                         $image['image'] = $image['encodedImage'];
                         unset($image['encodedImage']);
                         $images_to_update[] = $image;
                     }
                 } else {
                     if ($image['imagetype'] == IMAGE_TYPE_ICON && isset($rules['icons']['missed']) || $image['imagetype'] == IMAGE_TYPE_BACKGROUND && isset($rules['background']['missed'])) {
                         // No need to decode_base64
                         $image['image'] = $image['encodedImage'];
                         unset($image['encodedImage']);
                         $images_to_add[] = $image;
                     }
                 }
             }
             //sdi($images_to_add);
             if (!empty($images_to_add)) {
                 $result = CImage::create($images_to_add);
                 if (!$result) {
                     throw new Exception(S_CANNOT_ADD_IMAGE);
                 }
             }
             //sdi($images_to_update);
             if (!empty($images_to_update)) {
                 $result = CImage::update($images_to_update);
                 if (!$result) {
                     throw new Exception(S_CANNOT_UPDATE_IMAGE);
                 }
             }
         }
         $importMaps = $importMaps['zabbix_export']['sysmaps'];
         $sysmaps = array();
         foreach ($importMaps as $mnum => &$sysmap) {
             unset($sysmap['sysmapid']);
             $exists = CMap::exists(array('name' => $sysmap['name']));
             if ($exists && isset($rules['maps']['exist'])) {
                 $db_maps = CMap::getObjects(array('name' => $sysmap['name']));
                 if (empty($db_maps)) {
                     throw new Exception(S_NO_PERMISSIONS_FOR_MAP . ' [' . $sysmap['name'] . '] import');
                 }
                 $db_map = reset($db_maps);
                 $sysmap['sysmapid'] = $db_map['sysmapid'];
             } else {
                 if ($exists || !isset($rules['maps']['missed'])) {
                     info('Map [' . $sysmap['name'] . '] skipped - user rule');
                     unset($importMaps[$mnum]);
                     continue;
                     // break if not update exist
                 }
             }
             if (isset($sysmap['backgroundid'])) {
                 $image = getImageByIdent($sysmap['backgroundid']);
                 if (!$image) {
                     error(S_CANNOT_FIND_BACKGROUND_IMAGE . ' "' . $sysmap['backgroundid']['name'] . '" ' . S_USED_IN_EXPORTED_MAP_SMALL . ' "' . $sysmap['name'] . '"');
                     $sysmap['backgroundid'] = 0;
                 } else {
                     $sysmap['backgroundid'] = $image['imageid'];
                 }
             } else {
                 $sysmap['backgroundid'] = 0;
             }
             if (!isset($sysmap['selements'])) {
                 $sysmap['selements'] = array();
             }
             if (!isset($sysmap['links'])) {
                 $sysmap['links'] = array();
             }
             foreach ($sysmap['selements'] as $snum => &$selement) {
                 $nodeCaption = isset($selement['elementid']['node']) ? $selement['elementid']['node'] . ':' : '';
                 if (!isset($selement['elementid'])) {
                     $selement['elementid'] = 0;
                 }
                 switch ($selement['elementtype']) {
                     case SYSMAP_ELEMENT_TYPE_MAP:
                         $db_sysmaps = CMap::getObjects($selement['elementid']);
                         if (empty($db_sysmaps)) {
                             $error = S_CANNOT_FIND_MAP . ' "' . $nodeCaption . $selement['elementid']['name'] . '" ' . S_USED_IN_EXPORTED_MAP_SMALL . ' "' . $sysmap['name'] . '"';
                             throw new Exception($error);
                         }
                         $tmp = reset($db_sysmaps);
                         $selement['elementid'] = $tmp['sysmapid'];
                         break;
                     case SYSMAP_ELEMENT_TYPE_HOST_GROUP:
                         $db_hostgroups = CHostgroup::getObjects($selement['elementid']);
                         if (empty($db_hostgroups)) {
                             $error = S_CANNOT_FIND_HOSTGROUP . ' "' . $nodeCaption . $selement['elementid']['name'] . '" ' . S_USED_IN_EXPORTED_MAP_SMALL . ' "' . $sysmap['name'] . '"';
                             throw new Exception($error);
                         }
                         $tmp = reset($db_hostgroups);
                         $selement['elementid'] = $tmp['groupid'];
                         break;
                     case SYSMAP_ELEMENT_TYPE_HOST:
                         $db_hosts = CHost::getObjects($selement['elementid']);
                         if (empty($db_hosts)) {
                             $error = S_CANNOT_FIND_HOST . ' "' . $nodeCaption . $selement['elementid']['host'] . '" ' . S_USED_IN_EXPORTED_MAP_SMALL . ' "' . $sysmap['name'] . '"';
                             throw new Exception($error);
                         }
                         $tmp = reset($db_hosts);
                         $selement['elementid'] = $tmp['hostid'];
                         break;
                     case SYSMAP_ELEMENT_TYPE_TRIGGER:
                         $db_triggers = CTrigger::getObjects($selement['elementid']);
                         if (empty($db_triggers)) {
                             $error = S_CANNOT_FIND_TRIGGER . ' "' . $nodeCaption . $selement['elementid']['host'] . ':' . $selement['elementid']['description'] . '" ' . S_USED_IN_EXPORTED_MAP_SMALL . ' "' . $sysmap['name'] . '"';
                             throw new Exception($error);
                         }
                         $tmp = reset($db_triggers);
                         $selement['elementid'] = $tmp['triggerid'];
                         break;
                     case SYSMAP_ELEMENT_TYPE_IMAGE:
                     default:
                         break;
                 }
                 $icons = array('iconid_off', 'iconid_on', 'iconid_unknown', 'iconid_disabled', 'iconid_maintenance');
                 foreach ($icons as $icon) {
                     if (isset($selement[$icon])) {
                         $image = getImageByIdent($selement[$icon]);
                         if (!$image) {
                             $error = S_CANNOT_FIND_IMAGE . ' "' . $selement[$icon]['name'] . '" ' . S_USED_IN_EXPORTED_MAP_SMALL . ' "' . $sysmap['name'] . '"';
                             throw new Exception($error);
                         }
                         $selement[$icon] = $image['imageid'];
                     } else {
                         $selement[$icon] = 0;
                     }
                 }
             }
             unset($selement);
             foreach ($sysmap['links'] as $lnum => &$link) {
                 if (!isset($link['linktriggers'])) {
                     continue;
                 }
                 foreach ($link['linktriggers'] as $ltnum => &$linktrigger) {
                     $nodeCaption = isset($linktrigger['triggerid']['node']) ? $linktrigger['triggerid']['node'] . ':' : '';
                     $db_triggers = CTrigger::getObjects($linktrigger['triggerid']);
                     if (empty($db_triggers)) {
                         $error = S_CANNOT_FIND_TRIGGER . ' "' . $nodeCaption . $linktrigger['triggerid']['host'] . ':' . $linktrigger['triggerid']['description'] . '" ' . S_USED_IN_EXPORTED_MAP_SMALL . ' "' . $sysmap['name'] . '"';
                         throw new Exception($error);
                     }
                     $tmp = reset($db_triggers);
                     $linktrigger['triggerid'] = $tmp['triggerid'];
                 }
                 unset($linktrigger);
             }
             unset($link);
             $sysmaps[] = $sysmap;
         }
         unset($sysmap);
         $importMaps = $sysmaps;
         foreach ($importMaps as $mnum => $importMap) {
             $sysmap = $importMap;
             if (isset($importMap['sysmapid'])) {
                 $result = CMap::update($importMap);
                 $sysmapids = $result['sysmapids'];
                 // Deleteing all selements (with links)
                 $db_selementids = array();
                 $res = DBselect('SELECT selementid FROM sysmaps_elements WHERE sysmapid=' . $sysmap['sysmapid']);
                 while ($db_selement = DBfetch($res)) {
                     $db_selementids[$db_selement['selementid']] = $db_selement['selementid'];
                 }
                 delete_sysmaps_element($db_selementids);
                 //----
             } else {
                 // first we must create an empty map without any elements (they will be added below)
                 $mapToCreate = $importMap;
                 $mapToCreate['selements'] = array();
                 $mapToCreate['links'] = array();
                 $result = CMap::create($mapToCreate);
                 $sysmapids = $result['sysmapids'];
                 $sysmap['sysmapid'] = reset($sysmapids);
             }
             // adding elements and links
             $selements = $importMap['selements'];
             $links = $importMap['links'];
             foreach ($selements as $id => $selement) {
                 if (!isset($selement['elementid']) || $selement['elementid'] == 0) {
                     $selement['elementid'] = 0;
                     $selement['elementtype'] = SYSMAP_ELEMENT_TYPE_IMAGE;
                 }
                 if (!isset($selement['iconid_off']) || $selement['iconid_off'] == 0) {
                     throw new Exception(S_NO_ICON_FOR_MAP_ELEMENT . ' ' . $sysmap['name'] . ':' . $selement['label']);
                 }
                 $selement['sysmapid'] = $sysmap['sysmapid'];
                 $selementids = CMap::addElements($selement);
                 $selementid = reset($selementids);
                 foreach ($links as $id => &$link) {
                     if ($link['selementid1'] == $selement['selementid']) {
                         $links[$id]['selementid1'] = $selementid;
                     } else {
                         if ($link['selementid2'] == $selement['selementid']) {
                             $links[$id]['selementid2'] = $selementid;
                         }
                     }
                 }
                 unset($link);
             }
             foreach ($links as $id => $link) {
                 if (!isset($link['linktriggers'])) {
                     $link['linktriggers'] = array();
                 }
                 $link['sysmapid'] = $sysmap['sysmapid'];
                 $result = CMap::addLinks($link);
             }
             if (isset($importMap['sysmapid'])) {
                 info(S_MAP . ' [' . $sysmap['name'] . '] ' . S_UPDATED_SMALL);
             } else {
                 info(S_MAP . ' [' . $sysmap['name'] . '] ' . S_ADDED_SMALL);
             }
         }
         return true;
     } catch (Exception $e) {
         error($e->getMessage());
         return false;
     }
 }
示例#4
0
    if ($result) {
        unset($_REQUEST['form']);
    }
} else {
    if (isset($_REQUEST['delete'])) {
        if (isset($_REQUEST['linkid'])) {
            $result = delete_link($_REQUEST['linkid']);
            show_messages($result, 'Link deleted', 'Cannot delete link');
            add_audit_if($result, AUDIT_ACTION_UPDATE, AUDIT_RESOURCE_MAP, 'Name [' . $sysmap['name'] . '] Link [' . $_REQUEST['linkid'] . '] deleted');
            if ($result) {
                unset($_REQUEST['linkid']);
                unset($_REQUEST['form']);
            }
        } else {
            if (isset($_REQUEST['selementid'])) {
                $result = delete_sysmaps_element($_REQUEST['selementid']);
                show_messages($result, 'Element deleted', 'Cannot delete element');
                add_audit_if($result, AUDIT_ACTION_UPDATE, AUDIT_RESOURCE_MAP, 'Name [' . $sysmap['name'] . '] Element [' . $_REQUEST['selementid'] . '] deleteed ');
                if ($result) {
                    unset($_REQUEST['selementid']);
                    unset($_REQUEST['form']);
                }
            }
        }
    }
}
echo SBR;
if (isset($_REQUEST['form']) && ($_REQUEST['form'] == 'add_element' || $_REQUEST['form'] == 'update' && isset($_REQUEST['selementid']))) {
    show_table_header(S_DISPLAYED_ELEMENTS);
    echo SBR;
    insert_map_element_form();
示例#5
0
             if ($link['selementid1'] == $selement['selementid']) {
                 $links[$id]['selementid1'] = $selementid;
             } else {
                 if ($link['selementid2'] == $selement['selementid']) {
                     $links[$id]['selementid2'] = $selementid;
                 }
             }
         }
     } else {
         //SDII($selement);
         $selement['sysmapid'] = $sysmapid;
         $result = CMap::updateElements($selement);
         unset($db_selementids[$selement['selementid']]);
     }
 }
 delete_sysmaps_element($db_selementids);
 $db_linkids = array();
 $res = DBselect('SELECT linkid FROM sysmaps_links WHERE sysmapid=' . $sysmapid);
 while ($db_link = DBfetch($res)) {
     $db_linkids[$db_link['linkid']] = $db_link['linkid'];
 }
 foreach ($links as $id => $link) {
     $link['sysmapid'] = $sysmapid;
     if (isset($link['new'])) {
         $result = add_link($link);
     } else {
         $result = update_link($link);
         unset($db_linkids[$link['linkid']]);
     }
 }
 delete_link($db_linkids);