<?php
/*******************************************************************************
 * Copyright (c) 2014 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://eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Anne Haugommard (Atos) - Initial implementation
 *    Antonio Campesino (Atos) - Adding compatible releases and milestones
 *******************************************************************************/
	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());	
	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/gendoc/public/css/pages.css" media="screen"/><link rel="shortcut icon" href="/gendoc/public/images/favicon.ico" />');
#	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="styles.css"/>' . "\n\t");
#	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="_styles.css"/>' . "\n\t");

  $variables['hide_breadcrumbs'] = true;
  $App->setThemeVariables($variables);

	
	#### Project dependant variables ####
	$projectTitle = "Gendoc";
	$pageTitle = "Gendoc";
	$pageAuthor = "Anne Haugommard";
	$pageKeywords = "Gendoc, downloads, release";

	
$html = <<<EOHTML
      <div="" id="midcolumn">
      <h3>Releases</h3>
      <ul class="fa-ul hidden-print">
        <li> <i class="fa fa-angle-double-right orange fa-fw"></i><a href="http://download.eclipse.org/gendoc/updates/releases/0.7.2/2018-09">Gendoc
            v0.7.2 (IDE 2018-09)</a> ( or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.7.1/2018-09/org.eclipse.gendoc.incubation.update-site-0.7.2-2018-09.zip">archive</a>)
          <ul>
            <li><a href="https://projects.eclipse.org/projects/modeling.gendoc/releases/0.7.2/bugs">Release
                content</a></li>
          </ul>
        </li>
      </ul>
      <ul class="fa-ul hidden-print">
        <li> <i class="fa fa-angle-double-right orange fa-fw"></i><a href="http://download.eclipse.org/gendoc/updates/releases/0.7.1/2018-09">Gendoc
            v0.7.1 (IDE 2018-09)</a> ( or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.7.1/2018-09/org.eclipse.gendoc.incubation.update-site-0.7.1-2018-09.zip">archive</a>)
          <ul>
            <li><a href="https://projects.eclipse.org/projects/modeling.gendoc/releases/0.7.1/bugs">Release
                content</a></li>
          </ul>
        </li>
      </ul>
      <ul class="fa-ul hidden-print">
        <li> <i class="fa fa-angle-double-right orange fa-fw"></i><a href="http://download.eclipse.org/gendoc/updates/releases/0.7.0/oxygen">Gendoc
            v0.7.0 </a> ( or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.7.0/oxygen/org.eclipse.gendoc.incubation.update-site-0.7.0-oxygen.zip">archive</a>)
          <ul>
            <li><a href="https://projects.eclipse.org/projects/modeling.gendoc/releases/0.7.0/bugs">Release
                content</a></li>
          </ul>
        </li>
      </ul>
      <ul class="fa-ul hidden-print">
        <li> <i class="fa fa-angle-double-right orange fa-fw"></i><a href="http://download.eclipse.org/gendoc/updates/releases/0.6.0">Gendoc
            v0.6.0 </a> ( or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.6.0/org.eclipse.gendoc.incubation.update-site-0.6.0.zip">archive</a>)
          <ul>
            <li><a href="https://projects.eclipse.org/projects/modeling.gendoc/releases/0.6.0/bugs">Release
                content</a></li>
          </ul>
        </li>
      </ul>
      <ul class="fa-ul hidden-print">
        <li> <i class="fa fa-angle-double-right orange fa-fw"></i><a href="http://download.eclipse.org/gendoc/updates/releases/0.5.0/">Gendoc
            v0.5.1 </a>update site ( or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.5.1/org.eclipse.gendoc.incubation.update-site-0.5.1.zip">archive</a>)</li>
      </ul>
      <ul class="fa-ul hidden-print">
        <li> <i class="fa fa-angle-double-right orange fa-fw"></i><a href="http://download.eclipse.org/gendoc/updates/releases/0.5.1-juno/">Gendoc
            v0.5.1-juno </a>update site ( or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.5.1-juno/org.eclipse.gendoc.incubation.update-site-0.5.1-juno.zip">archive</a>)</li>
        <ul>
          <li> Compatibility with Capella 1.0.2 </li>
          <li class="bugzilla-record bugzilla-Normal bugzilla-fixed bugzilla-resolved"><a

              href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=496192">496192</a>
            Provide a juno update site <span>[resolved/fixed]</span></li>
        </ul>
      </ul>
      <ul class="fa-ul hidden-print">
        <li> <i class="fa fa-angle-double-right orange fa-fw"></i>Gendoc v0.5.0
          update site ( download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.5/org.eclipse.gendoc.incubation.update-site-0.5.0.zip">archive</a>)</li>
      </ul>
      See how to add a new update site to your Eclipse installation <a href="http://help.eclipse.org/juno/index.jsp?topic=/org.eclipse.platform.doc.user/tasks/tasks-127.htm">on
        Eclipse Help page </a>.
      <!--h3>Milestones Releases</h3>
	  <ul class="fa-ul hidden-print">         <li> <i class="fa fa-angle-double-right orange fa-fw"></i><a href="http://download.eclipse.org/gendoc/updates/releases/0.7.0/oxygen">Gendoc v0.7.0-M2</a> ( or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.7.0/oxygen/org.eclipse.gendoc.incubation.update-site-0.7.0-oxygen.zip">archive</a>)			<ul>				<li><a href='https://projects.eclipse.org/projects/modeling.gendoc/releases/0.7.0/bugs'>Release content</a></li>			</ul>		</li>      </ul-->
      <h3>Older Eclipse Platform Compatible Releases</h3>
      Gendoc releases and update site for older eclipse releases:
      <ul class="fa-ul hidden-print">
        <li><b>IDE 2019-03:</b> <a href="http://download.eclipse.org/gendoc/updates/releases/0.7.2/2019-03">Gendoc
            v0.7.2</a> ( or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.7.2/2019-03/org.eclipse.gendoc.incubation.update-site-0.7.2-2019-03.zip">archive</a>)
          (Capella 1.3.x)
        <ul>
          <li>Due to a <strong>bug </strong>in EMF, you need: </li>
          <ul>
            <li>Install the EMF SDK v2.18.x ( from <a href="http://download.eclipse.org/modeling/emf/emf/builds/milestone/S201904050820">http://download.eclipse.org/modeling/emf/emf/builds/milestone/S201904050820</a>
              )</li>
          </ul>
        </ul>
          <ul>
            <li>Compatibility with <b>Papyrus 4.3.x</b></li>
            <li>Compatibility with <b>Sirius 6.1.2</b></li>
          </ul>
        </li>
        <li><b>IDE 2018-12:</b> <a href="http://download.eclipse.org/gendoc/updates/releases/0.7.2/2018-12">Gendoc
            v0.7.2</a> ( or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.7.2/2018-12/org.eclipse.gendoc.incubation.update-site-0.7.2-2018-12.zip">archive</a>)
          (Capella 1.3.x) </li>
        <ul>
          <li>Due to a <strong>bug </strong>in EMF, you need: </li>
          <ul>
            <li>Install the EMF SDK v2.18.x ( from <a href="http://download.eclipse.org/modeling/emf/emf/builds/milestone/S201904050820">http://download.eclipse.org/modeling/emf/emf/builds/milestone/S201904050820</a>
              )</li>
            <li>Install the Acceleo SDK v3.7.8 ( from <a href="http://download.eclipse.org/acceleo/updates/milestones/3.7/S201902261618">http://download.eclipse.org/acceleo/updates/milestones/3.7/S201902261618</a>)
            </li>
          </ul>
        </ul>
        <ul>
          <li>Compatibility with <b>Papyrus 4.2.x</b></li>
          <li>Compatibility with <b>Sirius 6.1.1</b></li>
        </ul>
      </ul>
      <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>IDE 2018-09:</b>
        <a href="http://download.eclipse.org/gendoc/updates/releases/0.7.2/2018-09">Gendoc
          v0.7.2</a> ( or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.7.2/2018-09/org.eclipse.gendoc.incubation.update-site-0.7.2-2018-09.zip">archive</a>)
        (Capella 1.2.x)
        <ul>
          <li>Compatibility with <b>Papyrus 4.1.x</b></li>
          <li>Compatibility with <b>Sirius 6.0.0</b></li>
        </ul>
      </li>
      <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>Photon:</b> <a

          href="http://download.eclipse.org/gendoc/updates/releases/0.7.2/photon">Gendoc
          v0.7.2</a> ( or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.7.2/photon/org.eclipse.gendoc.incubation.update-site-0.7.2-photon.zip">archive</a>)
        (Capella 1.2.x)
        <ul>
          <li>Compatibility with <b>Papyrus 4.0.x</b></li>
          <li>Compatibility with <b>Sirius 6.0.0</b></li>
        </ul>
      </li>
      <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>Oxygen:</b> <a

          href="http://download.eclipse.org/gendoc/updates/releases/0.7.2/oxygen">Gendoc
          v0.7.2</a> ( or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.7.2/oxygen/org.eclipse.gendoc.incubation.update-site-0.7.2-oxygen.zip">archive</a>)
        (Capella 1.2.x)
        <ul>
          <li>Compatibility with <b>Papyrus 3.x.x</b></li>
          <li>Compatibility with <b>Sirius 6.0.0</b></li>
        </ul>
      </li>
      <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>Neon:</b> <a

          href="http://download.eclipse.org/gendoc/updates/releases/0.7.2/neon">Gendoc
          v0.7.2</a> ( or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.7.2/neon/org.eclipse.gendoc.incubation.update-site-0.7.2-neon.zip">archive</a>)
        (Capella 1.2.x)
        <ul>
          <li>Compatibility with <b>Papyrus 2.0.x</b></li>
          <li>Compatibility with <b>Sirius 5.1.x / Capella 1.2.x</b></li>
        </ul>
      </li>
      <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>Mars:</b> <a

          href="http://download.eclipse.org/gendoc/updates/releases/0.7.2/mars">Gendoc
          v0.7.2</a> ( or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.7.2/mars/org.eclipse.gendoc.incubation.update-site-0.7.2-mars.zip">archive</a>)
        (Capella 1.1.x)
        <ul>
          <li>Compatibility with <b>Papyrus 1.1.x</b></li>
          <li>Compatibility with <b>Sirius 4.1.x / Capella 1.1.x</b></li>
        </ul>
      </li>
      <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>Juno:</b> <a

          href="http://download.eclipse.org/gendoc/updates/releases/0.7.2/juno">Gendoc
          v0.7.2</a> ( or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.7.2/juno/org.eclipse.gendoc.incubation.update-site-0.7.2-juno.zip">archive</a>)
        (Capella 1.0.x)
        <ul>
          <li>Compatibility with <b>Papyrus 0.9.2</b></li>
          <li>Compatibility with <b>Sirius 3.1.x / Capella 1.0.x</b></li>
        </ul>
      </li>
      <h3>Latest nightly build</h3>
      Gendoc update site from latest nightly build is available at the following
      URL :
      <ul class="fa-ul hidden-print">
        <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>2019-03</b>: <b>http://download.eclipse.org/gendoc/updates/nightly/latest</b></li>
      </ul>
      Gendoc update site from latest nightly build for <b>older Eclipse</b>
      releases:
      <ul class="fa-ul hidden-print">
        <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>2018-12</b>: <b>http://download.eclipse.org/gendoc/updates/nightly/latest/2018-12</b></li>
        <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>2018-09</b>: <b>http://download.eclipse.org/gendoc/updates/nightly/latest/2018-09</b></li>
        <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>Photon</b>: <b>http://download.eclipse.org/gendoc/updates/nightly/latest/photon</b></li>
        <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>Oxygen</b>: <b>http://download.eclipse.org/gendoc/updates/nightly/latest/oxygen</b></li>
        <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>Neon</b>: <b>http://download.eclipse.org/gendoc/updates/nightly/latest/neon</b></li>
        <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>Mars</b>: <b>http://download.eclipse.org/gendoc/updates/nightly/latest/mars</b></li>
        <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>Juno</b>: <b>http://download.eclipse.org/gendoc/updates/nightly/latest/juno</b></li>
      </ul>
      <div id="rightcolumn">
        <div style="height:100px"> </div>
        <div class="sideitem">
          <h6>
            <center>Incubation Phase</center>
          </h6>
          <center> <a href="http://www.eclipse.org/projects/what-is-incubation.php">
              <img alt="Incubation" src="http://www.eclipse.org/images/egg-incubation.png"

                border="0" width="70"> </a> </center>
        </div>
      </div>

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