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

       #*****************************************************************************
       #
       # poll2014.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 2015";
       $pageAuthor          = "Chris Aniszczyk";
       $theme = "solstice";

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

	   # Poll 1
	   $Poll = new Poll(10, "Vote: What is your favorite name for the 2015 Eclipse Simultaneous Release?");
	   $Poll->addOption(1, "Magellan"); 
           $Poll->addOption(2, "Mandelbrot");
	   $Poll->addOption(3, "Mars");
	   $Poll->addOption(4, "Mercury"); 
	   $Poll->addOption(5, "Meridian");
	   $Poll->addOption(6, "Metis");
	   $Poll->addOption(7, "Mira");
	   $Poll->addOption(8, "Mimas");
	   $Poll->addOption(9, "Mithril");
	   $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 2015 Eclipse Simultaneous Release!</h2>
	
	                     <p>There will be an Eclipse Simultaneous Release on the fourth Wednesday of
	                     June, 2015. But what to call it? Please vote, for your favorite name for the 2015
	                     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=422883">bug
	                     422883</a>) and discussions inside the Eclipse Planning Council.</p>

                                    <div style="padding: 5px; margin-left: 1%; margin-right: 1%;">

<p>
Magellan: 23 %<br />
Mandelbrot: 7 %<br />
Mars: 12 %<br />
Mercury: 26 %<br />
Meridian: 7 %<br />
Metis: 3 %<br />
Mira: 14 %<br />
Mimas: 2 %<br />
Mithril: 7 %<br />

<b>Total votes: 407</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);
	?>

