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']);
    }
}
예제 #2
0
파일: helpers.php 프로젝트: Jokeramc/amc
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> &gt;
            <?php 
if (is_array($breadnav)) {
    foreach ($breadnav as $key => $bn) {
        ?>
<a href="<?php 
        echo $bn['href'];
        ?>
">
예제 #4
0
/**
 * 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;
}
예제 #10
0
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)' : '&nbsp;';
        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%'>&nbsp;</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%'>&nbsp;</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";
}
예제 #11
0
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;
}
예제 #12
0
/**
 * 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;
}
예제 #13
0
 /**
  * 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 '';
 }