/**
  * Create form for managing campaign settings (start date, end date, languages, etc.)
  */
 function noticeDetailForm($notice)
 {
     global $wgRequest;
     if ($this->editable) {
         $readonly = array();
     } else {
         $readonly = array('disabled' => 'disabled');
     }
     $campaign = CentralNoticeDB::getCampaignSettings($notice);
     if ($campaign) {
         // If there was an error, we'll need to restore the state of the form
         if ($wgRequest->wasPosted()) {
             $startArray = $wgRequest->getArray('start');
             $startTimestamp = $startArray['year'] . $startArray['month'] . $startArray['day'] . $startArray['hour'] . $startArray['min'] . '00';
             $endArray = $wgRequest->getArray('end');
             $endTimestamp = $endArray['year'] . $endArray['month'] . $endArray['day'] . $endArray['hour'] . $endArray['min'] . '00';
             $isEnabled = $wgRequest->getCheck('enabled');
             $isPreferred = $wgRequest->getCheck('preferred');
             $isLocked = $wgRequest->getCheck('locked');
             $noticeProjects = $wgRequest->getArray('projects', array());
             $noticeLanguages = $wgRequest->getArray('project_languages', array());
             $isGeotargeted = $wgRequest->getCheck('geotargeted');
             $countries = $wgRequest->getArray('geo_countries', array());
         } else {
             // Defaults
             $startTimestamp = $campaign['start'];
             $endTimestamp = $campaign['end'];
             $isEnabled = $campaign['enabled'] == '1';
             $isPreferred = $campaign['preferred'] == '1';
             $isLocked = $campaign['locked'] == '1';
             $noticeProjects = CentralNotice::getNoticeProjects($notice);
             $noticeLanguages = CentralNotice::getNoticeLanguages($notice);
             $isGeotargeted = $campaign['geo'] == '1';
             $countries = CentralNotice::getNoticeCountries($notice);
         }
         // Build Html
         $htmlOut = '';
         $htmlOut .= Xml::tags('h2', null, wfMsg('centralnotice-notice-heading', $notice));
         $htmlOut .= Xml::openElement('table', array('cellpadding' => 9));
         // Rows
         // Start Date
         $htmlOut .= Xml::openElement('tr');
         $htmlOut .= Xml::tags('td', array(), wfMsgHtml('centralnotice-start-date'));
         $htmlOut .= Xml::tags('td', array(), $this->dateSelector('start', $this->editable, $startTimestamp));
         $htmlOut .= Xml::closeElement('tr');
         // Start Time
         $htmlOut .= Xml::openElement('tr');
         $htmlOut .= Xml::tags('td', array(), wfMsgHtml('centralnotice-start-time'));
         $htmlOut .= Xml::tags('td', array(), $this->timeSelector('start', $this->editable, $startTimestamp));
         $htmlOut .= Xml::closeElement('tr');
         // End Date
         $htmlOut .= Xml::openElement('tr');
         $htmlOut .= Xml::tags('td', array(), wfMsgHtml('centralnotice-end-date'));
         $htmlOut .= Xml::tags('td', array(), $this->dateSelector('end', $this->editable, $endTimestamp));
         $htmlOut .= Xml::closeElement('tr');
         // End Time
         $htmlOut .= Xml::openElement('tr');
         $htmlOut .= Xml::tags('td', array(), wfMsgHtml('centralnotice-end-time'));
         $htmlOut .= Xml::tags('td', array(), $this->timeSelector('end', $this->editable, $endTimestamp));
         $htmlOut .= Xml::closeElement('tr');
         // Project
         $htmlOut .= Xml::openElement('tr');
         $htmlOut .= Xml::tags('td', array('valign' => 'top'), wfMsgHtml('centralnotice-projects'));
         $htmlOut .= Xml::tags('td', array(), $this->projectMultiSelector($noticeProjects));
         $htmlOut .= Xml::closeElement('tr');
         // Languages
         $htmlOut .= Xml::openElement('tr');
         $htmlOut .= Xml::tags('td', array('valign' => 'top'), wfMsgHtml('centralnotice-languages'));
         $htmlOut .= Xml::tags('td', array(), $this->languageMultiSelector($noticeLanguages));
         $htmlOut .= Xml::closeElement('tr');
         // Countries
         $htmlOut .= Xml::openElement('tr');
         $htmlOut .= Xml::tags('td', array(), Xml::label(wfMsg('centralnotice-geo'), 'geotargeted'));
         $htmlOut .= Xml::tags('td', array(), Xml::check('geotargeted', $isGeotargeted, wfArrayMerge($readonly, array('value' => $notice, 'id' => 'geotargeted'))));
         $htmlOut .= Xml::closeElement('tr');
         if ($isGeotargeted) {
             $htmlOut .= Xml::openElement('tr', array('id' => 'geoMultiSelector'));
         } else {
             $htmlOut .= Xml::openElement('tr', array('id' => 'geoMultiSelector', 'style' => 'display:none;'));
         }
         $htmlOut .= Xml::tags('td', array('valign' => 'top'), wfMsgHtml('centralnotice-countries'));
         $htmlOut .= Xml::tags('td', array(), $this->geoMultiSelector($countries));
         $htmlOut .= Xml::closeElement('tr');
         // Enabled
         $htmlOut .= Xml::openElement('tr');
         $htmlOut .= Xml::tags('td', array(), Xml::label(wfMsg('centralnotice-enabled'), 'enabled'));
         $htmlOut .= Xml::tags('td', array(), Xml::check('enabled', $isEnabled, wfArrayMerge($readonly, array('value' => $notice, 'id' => 'enabled'))));
         $htmlOut .= Xml::closeElement('tr');
         // Preferred
         $htmlOut .= Xml::openElement('tr');
         $htmlOut .= Xml::tags('td', array(), Xml::label(wfMsg('centralnotice-preferred'), 'preferred'));
         $htmlOut .= Xml::tags('td', array(), Xml::check('preferred', $isPreferred, wfArrayMerge($readonly, array('value' => $notice, 'id' => 'preferred'))));
         $htmlOut .= Xml::closeElement('tr');
         // Locked
         $htmlOut .= Xml::openElement('tr');
         $htmlOut .= Xml::tags('td', array(), Xml::label(wfMsg('centralnotice-locked'), 'locked'));
         $htmlOut .= Xml::tags('td', array(), Xml::check('locked', $isLocked, wfArrayMerge($readonly, array('value' => $notice, 'id' => 'locked'))));
         $htmlOut .= Xml::closeElement('tr');
         if ($this->editable) {
             // Locked
             $htmlOut .= Xml::openElement('tr');
             $htmlOut .= Xml::tags('td', array(), Xml::label(wfMsg('centralnotice-remove'), 'remove'));
             $htmlOut .= Xml::tags('td', array(), Xml::check('remove', false, array('value' => $notice, 'id' => 'remove')));
             $htmlOut .= Xml::closeElement('tr');
         }
         $htmlOut .= Xml::closeElement('table');
         return $htmlOut;
     } else {
         return '';
     }
 }
 public function testGetCampaignSettings()
 {
     $campaignArray = array('enabled' => 0, 'end' => 20110818235500.0, 'geo' => 1, 'locked' => 0, 'preferred' => 0, 'start' => 20110718235500.0);
     $this->assertEquals($campaignArray, CentralNoticeDB::getCampaignSettings('PHPUnitTestCampaign', false));
 }