<?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 ();
$Menu = new Menu ();
include ($App->getProjectCommon ()); # All on the same line to unclutter the user's desktop'

  #*****************************************************************************
  #
  #
  #****************************************************************************
  
  #
  # 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>
    <table BORDER=0 CELLSPACING=5 CELLPADDING=2 WIDTH="100%">
      <tr>
        <td align=RIGHT valign=TOP><img
          src="http://eclipse.org/images/Adarrow.gif" width="16"
          height="16" border="0"></td>
        <td><a href="http://wiki.eclipse.org/index.php/Orbit"
          target="_top"><b>Wiki</b></a><br> The Orbit project Wiki.</td>
      </tr>
      <tr>
        <td align=RIGHT valign=TOP><img
          src="http://eclipse.org/images/Adarrow.gif" width="16"
          height="16" border="0"></td>
        <td><a href="news://news.eclipse.org/eclipse.tools.orbit"
          target="_top"><b>Newsgroup</b></a><br> Talk to the people
          using libraries in Orbit</td>
      </tr>
      <tr>
        <td width="2%" align=RIGHT valign=TOP><img
          src="http://eclipse.org/images/Adarrow.gif" width="16"
          height="16" border="0"></td>
        <td width="98%"><a
          href="http://dev.eclipse.org/mailman/listinfo/orbit-dev"
          target="_top"><b>Mailing list </b></a><br> Talk to the people
          working on Orbit</td>
      </tr>
      <tr>
        <td align=RIGHT valign=TOP><img
          src="http://eclipse.org/images/Adarrow.gif" width="16"
          height="16" border="0"></td>
        <td><a
          href=https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=%0F%22uct=Orbit&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&keywords_type=allwords&keywords=&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit(%22der=Reuse%2Bsame%2Bsort%2Bas%2Blast%2Btime&field0-0-0=noop&type0-0-0=noop&value0-0-0=
          target="_top"><b>Bugs/Issues</b></a><br> 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.</td>
      </tr>
      <tr>
        <td align=RIGHT valign=TOP><img
          src="http://eclipse.org/images/Adarrow.gif" width="16"
          height="16" border="0"></td>
        <td><a
          href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.orbit/?cvsroot=Tools_Project"
          target="_top"><b>CVS</b></a><br> The Orbit code is hosted in
          the normal Tools project repository and is available via <a
          href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.orbit/?cvsroot=Tools_Project">web
            access</a> or direct CVS access. For direct 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 not 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 accomodate multiple versions of the code library. You
            should ensure that you check out the correct branch for your
            needs.
          </p></td>
      </tr>
      <tr>
        <td align=RIGHT valign=TOP><img
          src="http://eclipse.org/images/Adarrow.gif" width="16"
          height="16" border="0"></td>
        <td><a href="http://eclipse.org/orbit/" target="_top"><b>Website</b></a><br>
          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, Flash, ... and enables versioning and
          diffing using Eclipse. 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>
          <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></td>
      </tr>
    </table>
  </div>
</div>

<?php
  include $_SERVER['DOCUMENT_ROOT'] . "/orbit/global-links.html";
  include "dir-links.html";
?>

<?php
  $html = ob_get_contents();
  ob_end_clean();

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