<?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 2016 (Vote 2)");
$Theme->setPageAuthor("Chris Aniszczyk");

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

// Poll 1
$Poll = new Poll(12, "Vote: What is your favorite name for the 2016 Eclipse Simultaneous Release?");
$Poll->addOption(1, "N");
$Poll->addOption(2, "Namaste");
$Poll->addOption(3, "Nandini");
$Poll->addOption(4, "Narwhal");
$Poll->addOption(5, "Narvi");
$Poll->addOption(6, "Neon");
$Poll->addOption(7, "Neumond");
$Poll->addOption(8, "Nickel");
$Poll->addOption(9, "Nirvana");
$Poll->addOption(10, "Noir");
$Poll->addOption(11, "Nomad");
$Poll->addOption(12, "Number 2016");

// $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 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%;">

<?php print $pollHTML ?>
</div>
  <p>Thanks for your vote and your help with Eclipse!</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();

