blob: ef25e8951dce40a958109c4081007207f2753380 [file] [log] [blame]
<?php
/**
* *****************************************************************************
* Copyright (c) 2006 Eclipse Foundation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Denis Roy (Eclipse Foundation)- initial API and implementation
* *****************************************************************************
*/
require_once ("link.class.php");
class Nav {
# *****************************************************************************
#
# nav.class.php
#
# Author: Denis Roy
# Date 2004-09-11
#
# Description: Functions and modules related to Navbar objects
#
# HISTORY:
#
# *****************************************************************************
private $LinkList = array();
private $HTMLBlock = "";
private $type = "";
/**
* Store html to use after <aside>
*
* @var string
*/
private $HTMLBlockSuffix = "";
# Main constructor
function __construct() {
$www_prefix = "";
global $App;
if (isset($App)) {
$www_prefix = $App->getWWWPrefix();
}
}
/**
* Get $HTMLBlockSuffix
*
* @return string
*/
public function getHtmlBlockSuffix() {
return $this->HTMLBlockSuffix;
}
/**
* Set $HTMLBlockSuffix
*
* @return string
*/
public function setHtmlBlockSuffix($html = "") {
if (!empty($html) && is_string($html)) {
$this->HTMLBlockSuffix = $html;
}
return $this->HTMLBlockSuffix;
}
function getLinkList() {
return $this->LinkList;
}
function setLinkList($_LinkList) {
$this->LinkList = $_LinkList;
}
function getHTMLBlock() {
return $this->HTMLBlock;
}
function setHTMLBlock($html) {
$this->HTMLBlock = $html;
}
/**
* Get the Nav type
*
* @return string
*/
function getType() {
return $this->type;
}
/**
* Set the Nav type
*
* @param string $type
*/
function setType($type) {
$this->type = $type;
}
function addCustomNav($_Text, $_URL, $_Target, $_Level, $_CSS = NULL) {
if ($_Level == "") {
$_Level = 0;
}
$Link = new Link($_Text, $_URL, $_Target, $_Level, $_CSS);
# Add incoming Nav Item
$this->LinkList[count($this->LinkList)] = $Link;
}
function addNavSeparator($_Text, $_URL) {
$Link = new Link($_Text, $_URL, "__SEPARATOR", 1);
# Add incoming Nav Item
$this->LinkList[count($this->LinkList)] = $Link;
}
function addMetaNav($_Project) {
if (!class_exists("projectInfoList")) {
require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/projects/projectInfoList.class.php");
}
# set the default depth
$depth = 1;
# New info data instance
$MetaNav = new projectInfoList();
# get the data
$MetaNav->selectProjectInfoList($_Project, "projectleftnav");
# sort the data & extract the data, which in this case should always be at 0
$MetaLeftNav = $this->orderNavList($MetaNav->list[0]->projectleftnav);
# is there something there?
if ($MetaLeftNav != NULL) {
# loop through the leftnav items and add them to the output array
foreach ($MetaLeftNav as $item) {
# the url has to start with http(s):// and be an eclipse.org site, or
# we'll ignore it
if (preg_match("/^http[s]{0,1}:\/\/(\S.+eclipse.org(\/|$)|eclipseplugincentral.com)/i", $item->url) >= 1) {
if ($item->separator == 1) {
$this->addNavSeparator($item->title, $item->url);
}
else {
$this->addCustomNav($item->title, $item->url, "", $depth + $item->indent);
$depth = 1;
}
}
}
}
}
# remove list function from projectInfoList class, and put it here where it
# really belongs
function orderNavList($_InfoList) {
if (!function_exists("cmp_navobj")) {
function cmp_navobj($a, $b) {
$al = $a->order;
$bl = $b->order;
if ($al == $bl) {
return 0;
}
return ($al > $bl) ? +1 : -1;
}
}
usort($_InfoList, "cmp_navobj");
return $_InfoList;
}
function getLinkCount() {
return count($this->LinkList);
}
function getLinkAt($_Pos) {
if ($_Pos < $this->getLinkCount()) {
return $this->LinkList[$_Pos];
}
}
}