<?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/2019-09">Gendoc
            v0.7.2 (2019-09)</a> or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.7.2/2019-09/org.eclipse.gendoc.incubation.update-site-0.7.2-2019-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-06:</b> <a href="http://download.eclipse.org/gendoc/updates/releases/0.7.2/2019-06">Gendoc
            v0.7.2</a> ( or download as <a href="http://www.eclipse.org/downloads/download.php?file=/gendoc/releases/0.7.2/2019-06/org.eclipse.gendoc.incubation.update-site-0.7.2-2019-06.zip">archive</a>)
          (Capella 1.3.x)
          <ul>
            <li>Compatibility with <b>Papyrus 4.3.x</b></li>
            <li>Compatibility with <b>Sirius 6.2.1</b></li>
          </ul>
        </li>
        <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.2.0</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-09</b>: <a href="http://download.eclipse.org/gendoc/updates/nightly/latest">http://download.eclipse.org/gendoc/updates/nightly/latest</a></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>2019-06</b>: <a href="http://download.eclipse.org/gendoc/updates/nightly/latest/2019-06">http://download.eclipse.org/gendoc/updates/nightly/latest/2019-06</a></li>
        <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>2019-03</b>: <a href="http://download.eclipse.org/gendoc/updates/nightly/latest/2019-03">http://download.eclipse.org/gendoc/updates/nightly/latest/2019-03</a></li>
        <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>2018-12</b>: <a href="http://download.eclipse.org/gendoc/updates/nightly/latest/2018-12">http://download.eclipse.org/gendoc/updates/nightly/latest/2018-12</a></li>
        <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>2018-09</b>: <a href="http://download.eclipse.org/gendoc/updates/nightly/latest/2018-09">http://download.eclipse.org/gendoc/updates/nightly/latest/2018-09</a></li>
        <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>Photon</b>: <a href="http://download.eclipse.org/gendoc/updates/nightly/latest/photon">http://download.eclipse.org/gendoc/updates/nightly/latest/photon</a></li>
        <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>Oxygen</b>: <a href="http://download.eclipse.org/gendoc/updates/nightly/latest/oxygen">http://download.eclipse.org/gendoc/updates/nightly/latest/oxygen</a></li>
        <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>Neon</b>: <a href="http://download.eclipse.org/gendoc/updates/nightly/latest/neon">http://download.eclipse.org/gendoc/updates/nightly/latest/neon</a></li>
        <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>Mars</b>: <a href="http://download.eclipse.org/gendoc/updates/nightly/latest/mars">http://download.eclipse.org/gendoc/updates/nightly/latest/mars</a></li>
        <li><i class="fa fa-angle-double-right orange fa-fw"></i><b>Juno</b>: <a href="http://download.eclipse.org/gendoc/updates/nightly/latest/juno">http://download.eclipse.org/gendoc/updates/nightly/latest/juno</a></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);
?>
      