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

       #*****************************************************************************
       #
       # poll2011name.php
       #
       # Author:            David Williams
       # Date:                     2010-04-07
       #
       # Description: Quick poll to get input for Helios +1 Sim. Release name. 
       #
       #
       #****************************************************************************
       
       #
       # Begin: page-specific settings.  Change these. 
       $pageTitle           = "Community Poll Runoff Vote";
       $pageKeywords = "Eclipse Simultaneous Release 2011";
       $pageAuthor          = "David Williams";
       $theme = "Nova";


   # Enable polls on this page
   # Polls are good for 3 months!
   $App->usePolls();

   # Poll 1
   $Poll = new Poll(8, "Runoff vote - What is your favorite name for the 2012 Simultaneous Release?");
   $Poll->addOption(1, "Juno"); 
   $Poll->addOption(2, "Jupiter"); 
   $Poll->addOption(3,"Jubilate");
   $Poll->addOption(4,"Jura");
   $Poll->addOption(5,"Juliet");
   $Poll->addOption(6,"Jules");
   $Poll->addOption(7,"Jasmine");
   $Poll->addOption(8,"Jason");
   $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 2012 Eclipse Simultaneous Release ... again!</h2>
                     <p>There will be an Eclipse Simultaneous Release on the fourth Wednesday of
                     June, 2012. But what to call it? Please vote, only once, for your favorite name for that 2012
                     Release.</p>
                     
                     <p>Remember, the Simultaneous Release name is an informal "marketing name". It
                     should be recognizable, pronounceable, relatively distinct, and not obvious
                     to confuse with other software or software companies. Be sure to
                     consider how it sounds in context, such as "Hey, go download the Eclipse
                     xxxxxxxx Release and see all the cool stuff in there!" 
                     and how it looks in print, labels, or URLs, such
                     as the eventual http://..../releases/xxxxxxx.</p>
                     
                     <p>The following list was arrived at with input from the community, given
                     in bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336942">bug
                     336942</a> and discussions in the Eclipse Planning Council... </p>
                     
                     <p>... and an initial vote 
                     that requires a runoff between the 8 candidate names.</p> 
                  
                                      
                            <div style="padding: 10px; margin-left: 5%; margin-right: 5%;">
                                                 <?= $pollHTML ?>
                            </div>
                            
                     <p>Thanks for your vote. And your help with Eclipse!</p>              
                     
                     <p>This poll will be open until March 20.</p>
                     
                     <p>The Planning Council, by the
                     way, reserves the right to make the final decision, in case some
                     popularly voted item is later found to be unsuitable for some reason.<p>

                     <p>Current date/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);
?>


