<?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());    

#
# Begin: page-specific settings.  Change these. 
$pageTitle 	= "Henshin - Getting Involved";
$pageKeywords	= "EMF, Henshin, model transformation, getting involved, community";
$pageAuthor	= "Daniel Strueber";

# 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 EOHTML markers!	
$html = <<<EOHTML

<div id="maincontent">
<div id="midcolumn">
<h1>$pageTitle</h1>

<p>As a community-driven project, we are happy to welcome new contributors offering their support to make Henshin better. To get involved with Henshin, you can follow any of the following steps:</p>

<h2>Join the mailing list</h2> 
<ul>
<li>We have two separate mailing lists: the <a href="https://dev.eclipse.org/mailman/listinfo/henshin-user">user mailing list</a> for user requests, and the <a href="https://dev.eclipse.org/mailman/listinfo/henshin-dev">developer mailing list</a> for coordinating the development of Henshin.</li>
</ul>

<h2>Contribute bug reports and feature requests</h2> 
<ul>
 <li>Use <a href="https://bugs.eclipse.org/bugs/describecomponents.cgi?product=EMFT.Henshin" target="_blank">Bugzilla</a> for bug reports and feature requests. To create issues in Bugzilla, all you need is <a href="https://accounts.eclipse.org/user/register">an Eclipse account</a>.</li>
 <li>To make sure that we can address your bug reports efficiently, please be as specific as possible. Provide a detailed, step-by-step description for reproducing the bug. Minimal example projects (use the <a href="http://agile.csc.ncsu.edu/SEMaterials/tutorials/import_export/index.html#section2_0" target="_blank">zip export</a>) and/or screenshots are a great help.</li>
 <li>For further information, see: <a href="https://wiki.eclipse.org/FAQ_How_do_I_report_a_bug_in_Eclipse%3F" target="_blank">FAQ How do I report a bug in Eclipse?</a></li>
</ul>



<h2>Contribute code</h2> 
<ul>
 <li>Check out our codebase from the <a href="http://git.eclipse.org/c/henshin/org.eclipse.emft.henshin.git" target="_blank">Git repository</a> at Eclipse.</li>
 <li>Ideally, please use <a href="https://git.eclipse.org/r/#/q/status%3Aopen+project%3Ahenshin/org.eclipse.emft.henshin" target="_blank">Gerrit</a> to contribute changes to the codebase. This allows us to apply our quality assurance process to all contributions. In our Wiki, we provide more detailed descriptions for <a href="https://wiki.eclipse.org/Henshin_Committer_Instructions" target="_blank">working with Gerrit</a>.</li>
 <li>Alternatively, you can also submit patches via e-mail -- especially if you want to contribute relatively small changes that do not justify the overhead of setting up Gerrit. In this case, <a href="#get-in-touch">get in touch with us</a>.</li>
</ul>


<h2>Contribute examples</h2>

<ul>
<li>Since our <a href="https://www.eclipse.org/henshin/examples.php" target="_blank">examples section</a> is one of the most important reference points for new Henshin users, we are thankful for additions to this section. If you have an idea for a contribution in this direction, <a href="#get-in-touch">get in touch with us</a>.</li>
</ul>


<h2>Contribute documentation</h2> 
<ul>
<li>Our <a href="https://wiki.eclipse.org/Henshin" target="_blank">Wiki</a> is another important resource for users, and we aim to make it as accurate and complete as possible. To improve articles in the Wiki or contribute new articles, all you need is  <a href="https://accounts.eclipse.org/user/register">an Eclipse account</a>. For feedback, <a href="#get-in-touch">get in touch with us</a>.</li>
</ul>



<h2><a name="get-in-touch"></a>Get in touch with us</h2> 
<ul>
<li>Do not hesitate to contact us with ideas and improvement suggestions. For establishing a first contact, please send an e-mail to <a href="https://rgse.uni-koblenz.de/web/pages/people/strueber/index_en.shtml">the project lead</a>.</li>
</ul>



</div>
</div>

EOHTML;

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

?>
