<?php
/**
 * Copyright (c) 2014, 2018 Eclipse Foundation and others.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 * Chris Aniszczyk - Initial implementation
 * Eric Poirier (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */

require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");

$App = new App();
$Theme = $App->getThemeClass();

$pageTitle = "Community Poll Vote";
$Theme->setPageTitle($pageTitle);
$Theme->setPageKeywords("Eclipse Simultaneous Release 2015");
$Theme->setPageAuthor("Chris Aniszczyk");

// 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">
  <h1><?php print $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();

$Theme->setHtml($html);
$Theme->generatePage();
