<?php

require_once ($_SERVER ['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
require_once ($_SERVER ['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
require_once ($_SERVER ['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
$App = new App ();
//$Nav = new Nav ();
$Nav = NULL;
$Menu = new Menu ();
include ($App->getProjectCommon ());
$theme = "solstice";
  #*****************************************************************************
  #
  #
  #****************************************************************************

  # Begin: page-specific settings.  Change these.
  $pageTitle = "Orbit Resources";
  $pageKeywords = "orbit, bundles, code library, osgi, framework, runtime, resources";

  # Add page-specific Nav bars here
  # Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
  # $Nav->addNavSeparator("My Page Links", "downloads.php");
  # $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
  # $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);

  # End: page-specific settings

  # Paste your HTML content between the markers!
ob_start ();
?>

<div id="midcolumn">
  <h1><?= $pageTitle ?></h1>
  <div class="homeitem3col">

<h3>Resources</h3>
<ul>
  <li><a href="https://wiki.eclipse.org/index.php/Orbit">The Orbit
      project Wiki</a>
    <p>Wide collection of technical and policy information entered by
      committers and the community.</p></li>
  <li><a href="news://news.eclipse.org/eclipse.tools.orbit">Orbit Newsgroup</a> (or, newsgroup via web, <a href="https://www.eclipse.org/forums/index.php/f/84/">Orbit Forum</a>).
    <p>Talk to the people using libraries in Orbit.</p></li>
  <li><a href="https://dev.eclipse.org/mailman/listinfo/orbit-dev">Mailing
      list</a>
    <p>Talk to the people working on Orbit.</p></li>
  <li><a
    href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;short_desc=%0F%22uct=Orbit&amp;long_desc_type=allwordssubstr&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;keywords_type=allwords&amp;keywords=&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;emailtype1=substring&amp;email1=&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;cmdtype=doit(%22der=Reuse%2Bsame%2Bsort%2Bas%2Blast%2Btime&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0">Bugs/Issues</a>
    <p>Discover the current bugs and issues in Orbit. Note that a large
      amount of the activity goes on in Bugzilla. Configure your Bugzilla
      account email preferences to watch the one of the Orbit inbox users (e.g.,
      orbit.bundles-inbox@eclipse.org) to monitor bug activity.</p></li>
  <li>The Orbit code in CVS
    <p>The Orbit packages (class files, and MANIFEST.MF files we create) are
      hosted in the Tools project CVS repository and is available via direct CVS
      access, under the <code>org.eclipse.orbit</code> directory.</p>
    <p>For direct read access, use anonymous login to the CVS repo:</p>
    <blockquote>
      <p>:pserver:anonymous@dev.eclipse.org/cvsroot/tools</p>
    </blockquote>
    <p>
      The Orbit work goes on in the org.eclipse.orbit in folders appropriate for
      the work being done. Please note that in general the code for a particular
      version of a library is held in a <b>branch</b> of the related project.
      This is done to accommodate multiple versions of the code library. You
      should ensure that you check out the correct branch for your needs.
    </p>
  </li>
  <li><a href="https://www.eclipse.org/orbit/">Website</a>
    <p>The Orbit website itself is hosted in a Git repository and mirrored
      on a conventional HTTP server every minute or so. This allows use of PHP,
      HTML, CSS, JavaScript, etc. The site is open for editing by all Orbit
      committers using:</p>
    <blockquote>
      <p>ssh://&lt;committer_id&gt;@git.eclipse.org/gitroot/www.eclipse.org/orbit.git</p>
    </blockquote>
    <p>You can use Eclipse to check out the whole site and then edit and
      commit. Remember your changes will take a minute or so to be reflected in
      the real site.</p></li>
</ul>
    
  </div>
</div>

<?php
  include ("../global-links.html");
?>

<?php
  $html = ob_get_clean();

  # Generate the web page
  $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
