function getParents($pid) { $rs = $GLOBALS['db']->query("select *from tree where id='{$pid}'"); while ($row = $rs->fetch_array()) { array_push($GLOBALS['parents'], $row); getParents($row['pid']); } }
function getParents($list, $id) { static $ids = []; foreach ($list as $key => $value) { if ($value['id'] == $id) { $ids[] = $value['parent_id']; getParents($list, $value['parent_id']); } } return $ids; }
<?php if (ishttp($pd)) { ?> <div class="item item_1" style="background-image:url(<?php echo $pd; ?> );data:#2b74ba;"></div> <?php } else { ?> <div class="item item_1" style="background-image:url(/tpl/hualibootx/Public/images/page-general.png);data:#2b74ba;"></div><?php } ?> </div> <?php $breadnav = getParents($navList, $nid); $breadnav = array_slice($breadnav, 0, -1); ?> <div class="sitecon" style="position: absolute; top: 274px;"> <div class="container"> <div class="about_site"> 您的位置: <a href="/">首页</a> > <?php if (is_array($breadnav)) { foreach ($breadnav as $key => $bn) { ?> <a href="<?php echo $bn['href']; ?> ">
/** * generate permalink url from tokenized permalink structure * uses a very basic str_replace based token replacer, not a parser * TOKENS (%tokenid%) * %path% - path heirarchy to slug * %slug% - slug * %parent% - direct parent of slug * * supports prettyurl or any other permalink structure * eg. ?id=%slug%&parent=%parent%&path=%path% * * @param (str) $slug slug to resolve permalink for * @param (str) $permalink (optional) permalink structure * @return (str) */ function generate_permalink($slug, $permalink = null) { global $PERMALINK; $slug = (string) $slug; if (!isset($permalink)) { $plink = $PERMALINK; if (empty($PERMALINK)) { $plink = getDef('GSDEFAULTPERMALINK'); } } else { $plink = $permalink; } // replace PATH token if (containsToken('path', $plink)) { // remove PARENT tokens if path, since it would be pointless and probably accidental // leaving in for now lets not make assumptions // $plink = replaceToken('parent','',$plink); $pagepath = getParents($slug); if ($pagepath) { $pagepath = implode('/', array_reverse($pagepath)); $plink = replaceToken('path', $pagepath, $plink); } else { // page has no parents, remove token $plink = replaceToken('path', '', $plink); } } // replace PARENT token if (containsToken('parent', $plink)) { $parent = getParent($slug); $plink = replaceToken('parent', $parent, $plink); } // replace SLUG token $plink = replaceToken('slug', $slug, $plink); $plink = str_replace('//', '/', $plink); // clean up any double slashes // debugLog($url); // debugLog($plink); return no_lsl($plink); }
function updateObjectAllocation() { global $remote_username, $sic; if (!isset($_REQUEST['got_atoms'])) { unset($_GET['page']); unset($_GET['tab']); unset($_GET['op']); unset($_POST['page']); unset($_POST['tab']); unset($_POST['op']); return buildRedirectURL(NULL, NULL, $_REQUEST); } $object_id = getBypassValue(); $object = spotEntity('object', $object_id); $changecnt = 0; // Get a list of rack ids which are parents of the object $parentRacks = reduceSubarraysToColumn(getParents($object, 'rack'), 'id'); $workingRacksData = array(); foreach ($_REQUEST['rackmulti'] as $cand_id) { if (!isset($workingRacksData[$cand_id])) { $rackData = spotEntity('rack', $cand_id); amplifyCell($rackData); $workingRacksData[$cand_id] = $rackData; } else { $rackData = $workingRacksData[$cand_id]; } $is_ro = !rackModificationPermitted($rackData, 'updateObjectAllocation', FALSE); // It's zero-U mounted to this rack on the form, but not in the DB. Mount it. if (isset($_REQUEST["zerou_{$cand_id}"]) && !in_array($cand_id, $parentRacks)) { if ($is_ro) { continue; } $changecnt++; commitLinkEntities('rack', $cand_id, 'object', $object_id); } // It's not zero-U mounted to this rack on the form, but it is in the DB. Unmount it. if (!isset($_REQUEST["zerou_{$cand_id}"]) && in_array($cand_id, $parentRacks)) { if ($is_ro) { continue; } $changecnt++; commitUnlinkEntities('rack', $cand_id, 'object', $object_id); } } foreach ($workingRacksData as &$rd) { applyObjectMountMask($rd, $object_id); } $oldMolecule = getMoleculeForObject($object_id); foreach ($workingRacksData as $rack_id => $rackData) { $is_ro = !rackModificationPermitted($rackData, 'updateObjectAllocation', FALSE); if ($is_ro || !processGridForm($rackData, 'F', 'T', $object_id)) { continue; } $changecnt++; // Reload our working copy after form processing. $rackData = spotEntity('rack', $cand_id); amplifyCell($rackData); applyObjectMountMask($rackData, $object_id); $workingRacksData[$rack_id] = $rackData; } if ($changecnt) { // Log a record. $newMolecule = getMoleculeForObject($object_id); usePreparedInsertBlade('MountOperation', array('object_id' => $object_id, 'old_molecule_id' => count($oldMolecule) ? createMolecule($oldMolecule) : NULL, 'new_molecule_id' => count($newMolecule) ? createMolecule($newMolecule) : NULL, 'user_name' => $remote_username, 'comment' => empty($sic['comment']) ? NULL : $sic['comment'])); } ############################################################################################### # set hostgroup for zabbix host $allracks = getMoleculeForObject($object_id); $rackids = array(); $racknames = array(); foreach ($allracks as $rack) { if (in_array($rack['rack_id'], $rackids)) { continue; } array_push($rackids, $rack['rack_id']); $rackdata = spotEntity('rack', $rack['rack_id']); array_push($racknames, $rackdata['name']); } $result = updateHostGroup($object['name'], $racknames); if (isset($result['error'])) { showError('Setting hostgroup for zabbix host is failed. Error message:' . $result['error']); } # END ############################################################################################### showFuncMessage(__FUNCTION__, 'OK', array($changecnt)); }
function initRackTablesObject($rackDatas) { // zabbix host data $params = array('output' => 'extend'); $result = doPost('host.get', $params); $hosts = isset($result['result']) ? $result['result'] : array(); $objectDatas = array(); foreach ($hosts as $host) { $object_type_id = 4; $object_name = isset($host['host']) ? $host['host'] : ""; $object_label = ""; $object_asset_no = ""; $taglist = array(); $has_problems = $host['status'] == 0 ? 'no' : 'yes'; $object_id = commitAddObject($object_name, $object_label, $object_type_id, $object_asset_no, $taglist); usePreparedUpdateBlade('Object', array('has_problems' => $has_problems), array('id' => $object_id)); $objectDatas[$host['hostid']] = $object_id; // set hostgroup $params = array('output' => array('name'), 'hostids' => array($host['hostid'])); $result = doPost('hostgroup.get', $params); $hostgroups = isset($result['result']) ? $result['result'] : array(); $rack_ids = array(); $_REQUEST = array(); foreach ($hostgroups as $hostgroup) { if (isset($rackDatas[$hostgroup['name']])) { $rack = $rackDatas[$hostgroup['name']]; amplifyCell($rack); array_push($rack_ids, $rack['id']); $height = $rack['height']; for ($i = 0; $i < 3; $i++) { for ($j = $height; $j > 0; $j--) { if ($rack[$j][$i]['state'] == 'F') { # state == "T" : mounted $_REQUEST['atom_' . $rack['id'] . "_{$j}" . "_{$i}"] = 'on'; break 2; } } } } } $_REQUEST['object_id'] = $object_id; $_REQUEST['rackmulti'] = $rack_ids; $object = spotEntity('object', $object_id); $changecnt = 0; // Get a list of rack ids which are parents of the object $parentRacks = reduceSubarraysToColumn(getParents($object, 'rack'), 'id'); $workingRacksData = array(); foreach ($_REQUEST['rackmulti'] as $cand_id) { if (!isset($workingRacksData[$cand_id])) { $rackData = spotEntity('rack', $cand_id); amplifyCell($rackData); $workingRacksData[$cand_id] = $rackData; } else { $rackData = $workingRacksData[$cand_id]; } $is_ro = !rackModificationPermitted($rackData, 'updateObjectAllocation', FALSE); // It's zero-U mounted to this rack on the form, but not in the DB. Mount it. if (isset($_REQUEST["zerou_{$cand_id}"]) && !in_array($cand_id, $parentRacks)) { if ($is_ro) { continue; } $changecnt++; commitLinkEntities('rack', $cand_id, 'object', $object_id); } // It's not zero-U mounted to this rack on the form, but it is in the DB. Unmount it. if (!isset($_REQUEST["zerou_{$cand_id}"]) && in_array($cand_id, $parentRacks)) { if ($is_ro) { continue; } $changecnt++; commitUnlinkEntities('rack', $cand_id, 'object', $object_id); } } foreach ($workingRacksData as &$rd) { applyObjectMountMask($rd, $object_id); } $oldMolecule = getMoleculeForObject($object_id); foreach ($workingRacksData as $rack_id => $rackData) { $is_ro = !rackModificationPermitted($rackData, 'updateObjectAllocation', FALSE); if ($is_ro || !processGridForm($rackData, 'F', 'T', $object_id)) { continue; } $changecnt++; // Reload our working copy after form processing. $rackData = spotEntity('rack', $cand_id); amplifyCell($rackData); applyObjectMountMask($rackData, $object_id); $workingRacksData[$rack_id] = $rackData; } if ($changecnt) { // Log a record. $newMolecule = getMoleculeForObject($object_id); global $remote_username, $sic; usePreparedInsertBlade('MountOperation', array('object_id' => $object_id, 'old_molecule_id' => count($oldMolecule) ? createMolecule($oldMolecule) : NULL, 'new_molecule_id' => count($newMolecule) ? createMolecule($newMolecule) : NULL, 'user_name' => $remote_username, 'comment' => empty($sic['comment']) ? NULL : $sic['comment'])); } // set IP $params = array('output' => 'extend', 'hostids' => $host['hostid']); $result = doPost('hostinterface.get', $params); $hostinterfaces = isset($result['result']) ? $result['result'] : array(); foreach ($hostinterfaces as $interface) { if (isset($interface['ip']) && $interface['ip'] != '127.0.0.1') { $allocs = getObjectIPAllocations($object_id); $current_ips = array(); foreach ($allocs as $alloc) { $ip = $alloc["addrinfo"]["ip"]; $current_ips[$ip] = $ip; } $ip = $interface['ip']; if (!in_array($ip, array_values($current_ips))) { // new IP $ip_bin = ip_parse($ip); if (null == getIPAddressNetworkId($ip_bin)) { // if ip is not exists, adding it into RackTables IPv4Prefix. $range = substr($ip, 0, strripos($ip, '.')) . '.0/24'; $vlan_ck = NULL; $net_id = createIPv4Prefix($range, 'admim', isCheckSet('is_connected'), $taglist); $net_cell = spotEntity('ipv4net', $net_id); if (isset($vlan_ck)) { if (considerConfiguredConstraint($net_cell, 'VLANIPV4NET_LISTSRC')) { commitSupplementVLANIPv4($vlan_ck, $net_id); } } } bindIPToObject($ip_bin, $object_id, "", ""); } } } } return $objectDatas; }
<!-- PAGE CONTENT --> <div class="page-content"> <!-- START X-NAVIGATION VERTICAL --> <?php include "config/topbar.php"; ?> <!-- END X-NAVIGATION VERTICAL --> <!-- START BREADCRUMB --> <ol class="breadcrumb" id="navPath"> <li><a href="home.php">Home</a></li> <li><a href="link_status.php">Link Status</a></li> <?php getParents($current_IP['pid']); $parents = array_reverse($parents); foreach ($parents as $v) { ?> <li><a href="link_status.php?ip=<?php echo $v['ip']; ?> "><?php echo $v['sname']; ?> </a></li> <?php } ?> <li class="active"><?php echo $current_IP['sname'];
<span style="color:red; font-size: 20px;">Something Went Wrong.</span></span> <?php } ?> </h2> </div> <!--//banner--> <!--faq--> <div class="blank"> <div class="blank-page"> <h1>Link Status</h1> <div class="but_list"> <ol class="breadcrumb"> <?php getParents($ipdetails['pid']); $parents = array_reverse($parents); foreach ($parents as $v) { ?> <li><a href="link_status.php?ip=<?php echo $v['ip']; ?> "><?php echo $v['sname']; ?> </a></li> <?php } ?> <li class="active"><?php echo $ipdetails['sname'];
/** * @param string $categoryCode * @return null|string */ function getParentsToString($categoryCode) { $parents = getParents($categoryCode); if (!empty($parents)) { $parents = array_reverse($parents); $categories = array(); foreach ($parents as $category) { $categories[] = $category['code']; } $categoriesInString = implode(' > ', $categories) . ' > '; return $categoriesInString; } return null; }
function renderRackSpaceForObject($object_id) { // Always process occupied racks plus racks chosen by user. First get racks with // already allocated rackspace... $workingRacksData = getResidentRacksData($object_id); // ...and then add those chosen by user (if any). if (isset($_REQUEST['rackmulti'])) { foreach ($_REQUEST['rackmulti'] as $cand_id) { if (!isset($workingRacksData[$cand_id])) { $rackData = spotEntity('rack', $cand_id); amplifyCell($rackData); $workingRacksData[$cand_id] = $rackData; } } } // Get a list of rack ids that are parents of this object. $object = spotEntity('object', $object_id); $parentRacks = reduceSubarraysToColumn(getParents($object, 'rack'), 'id'); // Main layout starts. echo "<table border=0 class=objectview cellspacing=0 cellpadding=0><tr>"; // Left portlet with rack list. echo "<td class=pcleft height='1%'>"; startPortlet('Racks'); $allRacksData = listCells('rack'); // filter rack list to match only racks having common tags with the object (reducing $allRacksData) if (!isset($_REQUEST['show_all_racks']) and getConfigVar('FILTER_RACKLIST_BY_TAGS') == 'yes') { $matching_racks = array(); $object = spotEntity('object', $object_id); $matched_tags = array(); foreach ($allRacksData as $rack) { $tag_chain = array_merge($rack['etags'], $rack['itags']); foreach ($object['etags'] as $tag) { if (tagOnChain($tag, $tag_chain)) { $matching_racks[$rack['id']] = $rack; $matched_tags[$tag['id']] = $tag; break; } } } // add current object's racks even if they dont match filter foreach ($workingRacksData as $rack_id => $rack) { if (!isset($matching_racks[$rack_id])) { $matching_racks[$rack_id] = $rack; } } // if matching racks found, and rack list is reduced, show 'show all' link if (count($matching_racks) and count($matching_racks) != count($allRacksData)) { $filter_text = ''; foreach ($matched_tags as $tag) { $filter_text .= (empty($filter_text) ? '' : ' or ') . '{' . $tag['tag'] . '}'; } $href_show_all = trim($_SERVER['REQUEST_URI'], '&'); $href_show_all .= htmlspecialchars('&show_all_racks=1'); echo "(filtered by <span class='filter-text'>{$filter_text}</span>, <a href='{$href_show_all}'>show all</a>)<p>"; $allRacksData = $matching_racks; } } if (count($allRacksData) <= getConfigVar('RACK_PRESELECT_THRESHOLD')) { foreach ($allRacksData as $rack) { if (!array_key_exists($rack['id'], $workingRacksData)) { amplifyCell($rack); $workingRacksData[$rack['id']] = $rack; } } } foreach (array_keys($workingRacksData) as $rackId) { applyObjectMountMask($workingRacksData[$rackId], $object_id); } printOpFormIntro('updateObjectAllocation'); renderRackMultiSelect('rackmulti[]', $allRacksData, array_keys($workingRacksData)); echo "<br><br>"; finishPortlet(); echo "</td>"; // Middle portlet with comment and submit. echo "<td class=pcleft>"; startPortlet('Comment (for Rackspace History)'); echo "<textarea name=comment rows=10 cols=40></textarea><br>\n"; echo "<input type=submit value='Save' name=got_atoms>\n"; echo "<br><br>"; finishPortlet(); echo "</td>"; // Right portlet with rendered racks. If this form submit is not final, we have to // reflect the former state of the grid in current form. echo "<td class=pcright rowspan=2 height='1%'>"; startPortlet('Working copy'); includeJQueryUI(false); addJS('js/racktables.js'); addJS('js/bulkselector.js'); echo '<table border=0 cellspacing=10 align=center><tr>'; foreach ($workingRacksData as $rack_id => $rackData) { $is_ro = !rackModificationPermitted($rackData, 'updateObjectAllocation'); // Order is important here: only original allocation is highlighted. highlightObject($rackData, $object_id); markupAtomGrid($rackData, 'T'); // If we have a form processed, discard user input and show new database // contents. if (!$is_ro && isset($_REQUEST['rackmulti'][0])) { // is an update mergeGridFormToRack($rackData); } echo "<td valign=top>"; echo "<center>\n<h2 style='margin:0px'>{$rackData['name']}</h2>\n"; $read_only_text = $is_ro ? '(read-only)' : ' '; echo "<p style='color: red; margin-top:0px'>{$read_only_text}</p>\n"; echo "<table class=rack id=selectableRack border=0 cellspacing=0 cellpadding=1>\n"; echo "<tr><th width='10%'> </th>"; echo "<th width='20%'><a href='javascript:;' onclick=\"toggleColumnOfAtoms('{$rack_id}', '0', {$rackData['height']})\">Front</a></th>"; echo "<th width='50%'><a href='javascript:;' onclick=\"toggleColumnOfAtoms('{$rack_id}', '1', {$rackData['height']})\">Interior</a></th>"; echo "<th width='20%'><a href='javascript:;' onclick=\"toggleColumnOfAtoms('{$rack_id}', '2', {$rackData['height']})\">Back</a></th></tr>\n"; renderAtomGrid($rackData, $is_ro); echo "<tr><th width='10%'> </th>"; echo "<th width='20%'><a href='javascript:;' onclick=\"toggleColumnOfAtoms('{$rack_id}', '0', {$rackData['height']})\">Front</a></th>"; echo "<th width='50%'><a href='javascript:;' onclick=\"toggleColumnOfAtoms('{$rack_id}', '1', {$rackData['height']})\">Interior</a></th>"; echo "<th width='20%'><a href='javascript:;' onclick=\"toggleColumnOfAtoms('{$rack_id}', '2', {$rackData['height']})\">Back</a></th></tr>\n"; echo "</table>\n<br>\n"; // Determine zero-u checkbox status. // If form has been submitted, use form data, otherwise use DB data. if (!$is_ro && isset($_REQUEST['op'])) { $checked = isset($_REQUEST['zerou_' . $rack_id]) ? 'checked' : ''; } else { $checked = in_array($rack_id, $parentRacks) ? 'checked' : ''; } $disabled_text = $is_ro ? ' disabled' : ''; echo "<label for=zerou_{$rack_id}>Zero-U:</label> <input type=checkbox {$checked} name=zerou_{$rack_id} id=zerou_{$rack_id}{$disabled_text}>\n<br><br>\n"; echo "<input type='button' onclick='uncheckAll();' value='Uncheck all'>\n"; echo '</center></td>'; } echo "</tr></table>"; finishPortlet(); echo "</td>\n"; echo "</form>\n"; echo "</tr></table>\n"; }
function getParents($cate, $id, $pid_name = 'pid', $id_name = 'id') { $arr = array(); foreach ($cate as $v) { if ($v[$id_name] == $id) { $arr[] = $v; $arr = array_merge(getParents($cate, $v[$pid_name], $pid_name, $id_name), $arr); } } return $arr; }
/** * get PAGE path * @param str $pageId slug of PAGE to get path to * @return str path/to/pageId */ function getPagePath($pageId) { $parents = getParents($pageId); if ($parents) { return implode('/', array_reverse($parents)) . '/' . $pageId; } return $pageId; }
/** * get list of sub-locations, recursive * * @param array $locs cache * @param int $id locations parent * * @return list of sub-locations */ function getParents($locs, $id) { if (!$id) { return ''; } foreach ($locs as $loc) { if ($loc['id'] == $id) { return getParents($locs, $loc['parent_id']) . ' / ' . $loc['name']; } } return ''; }