<?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
 *******************************************************************************/
	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, Community, bug, question, contributing, support";

	
	$html = <<<EOHTML
			<div id="midcolumn">
			<h2> Community </h2>
			</br>
			<ul>
			<li> <p><strong>Found a bug ?</strong></p><p>You can open a bug using <a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Gendoc">Bugzilla</a>.</p>
			<p>Please explain the problem and provide a reduced but reproducable example (Gendoc template and model).
      Please explain the concrete use case when requesting enhancements.</p> </li>
			<li> <p><strong>Questions ?</strong></p><p>You can use <a href="https://www.eclipse.org/forums/index.php/f/286/">Gendoc forum</a> in order to ask questions to Gendoc community.</p>
			</li>
			<li> <p><strong>Contributing to Gendoc</strong></p><p>Developer mailing list :  <a href="https://dev.eclipse.org/mailman/listinfo/gendoc-dev">https://dev.eclipse.org/mailman/listinfo/gendoc-dev</a></p>
			<p>Source code is available on Eclipse Git repository : <a href="http://git.eclipse.org/c/gendoc/org.eclipse.gendoc.git/">http://git.eclipse.org/c/gendoc/org.eclipse.gendoc.git/</a></p>
			</li>
			<li> <p><strong>Professional support</strong></p><p>You need training, custom templates, enhancements ? Atos offers professional consulting aroung Gendoc product. </p> <table><tr><td><p> Contact : <a href="mailto:fr.gendoc-support@atos.net">fr.gendoc-support@atos.net</a></p></td><td><a target="_blank" href="https://www.eclipse.org/membership/showMember.php?member_id=980"><img class="img-responsive" style="margin:20px;" alt="Atos" src='/gendoc/public/images/Atos.gif'/></a></td></tr></table>
			</li>
			</ul>
			
			</div>
      <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 width="70" border="0" alt="Incubation" src="http://www.eclipse.org/images/egg-incubation.png">					</a>					                      
          </center>				                  
        </div>
      </div>	
EOHTML;
	
	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
