<?php 
//ini_set("display_errors", "true");
//error_reporting (E_ALL);
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();

       #*****************************************************************************
       #
       # poll.php
       #
       # Author:                   Chris Aniszczyk
       # Date:                     2014-01-28
       #
       # Description: Quick poll to get input for Luna +1 Sim. Release name. 
       #
       #
       #****************************************************************************
       
       #
       # Begin: page-specific settings.  Change these. 
       $pageTitle           = "Community Poll Vote";
       $pageKeywords = "Eclipse Simultaneous Release 2016";
       $pageAuthor          = "Chris Aniszczyk";
       $theme = "solstice";

	   # Polls are good for 3 months!
	   $App->usePolls();

	   # Poll 1
	   $Poll = new Poll(11, "Vote: What is your favorite name for the 2016 Eclipse Simultaneous Release?");
	   $Poll->addOption(1, "Naboo"); 
           $Poll->addOption(2, "Naiad");
	   $Poll->addOption(3, "Nano");
	   $Poll->addOption(4, "Narvi"); 
	   $Poll->addOption(5, "Nash");
	   $Poll->addOption(6, "Neo");
	   $Poll->addOption(7, "Neptune");
	   $Poll->addOption(8, "Newton");
	   $Poll->addOption(9, "Nibiru");
           $Poll->addOption(10, "Nova");
	   # $Poll->noGraph();  # uncomment to disable bar graph
	   $pollHTML = $Poll->getHTML();

	   $Poll->requireLogin(); # no anonymous votes

	       # Paste your HTML content between the markers!   
	ob_start();
	?>            


	<div id="maincontent" style="width: 90%; padding: 5%;">

	              <h1><?= $pageTitle ?></h1>
	                     <h2>Help decide the name for the 2016 Eclipse Simultaneous Release!</h2>
	
	                     <p>There will be an Eclipse Simultaneous Release on the fourth Wednesday of
	                     June, 2016. But what to call it? Please vote, for your favorite name for the 2016
	                     release. Remember, the simultaneous release name is an informal <i>marketing name</i>. It
	                     should be recognizable, pronounceable, relatively distinct and not obvious
	                     to confuse with other software or trademarks. Be sure to
	                     consider how it sounds in context, such as...</p>
						
						<p>
	                      <i>"Hey, go download the <b>Eclipse xyz Release</b> and see all the cool stuff in there!"</i>
						</p>

	                     <p>The following list was arrived at with input from the community (see
	                     <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=453927">bug
	                     453927</a>) and discussions inside the Eclipse Planning Council.</p>

                                    <div style="padding: 5px; margin-left: 1%; margin-right: 1%;">
                                    
<p>
Naboo: 8 %<br />
Naiad: 1 %<br />
Nano: 2 %<br />
Narvi: 3 %<br />
Nash: 2 %<br />
Neo: 8 %<br />
Neptune: 38 %<br />
Newton: 11 %<br />
Nibiru: 2 %<br />
Nova: 25 %<br />

<b>Total votes: 367</b><br />
</p>

				    </div>
<p>Thanks for your vote and your help with Eclipse! The poll is closed and names are under review.</p>  

	                     <p><b>Note: The Planning Council reserves the right to make the final decision, in case some
	                     popularly voted item is later found to be unsuitable for some reason.</b><p>

	                     <p>Current time: <?php echo date("d/m/y : H:i (T)", time()); ?></p>

	</div>

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

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

