/**
  * Returns the source choices in an array.
  *
  * @param boolean $validAfter True if it concerns _valid_after_ dates
  * @param boolean $firstRound List for first round
  * @param boolean $detailed   Return extended info
  * @return array source_name => label
  */
 protected function getSourceList($validAfter, $firstRound, $detailed = true)
 {
     if (!($validAfter || $this->project->isValidUntilRequired())) {
         $results[self::NO_TABLE] = array($this->_('Does not expire'));
     }
     if (!($validAfter && $firstRound)) {
         $results[self::ANSWER_TABLE] = array($this->_('Answers'), $this->_('Use an answer from a survey.'));
     }
     if ($this->_fieldsDefinition->hasAppointmentFields()) {
         $results[self::APPOINTMENT_TABLE] = array($this->_('Appointment'), $this->_('Use an appointment linked to this track.'));
     }
     if (!($validAfter && $firstRound)) {
         $results[self::TOKEN_TABLE] = array($this->_('Token'), $this->_('Use a standard token date.'));
     }
     $results[self::RESPONDENT_TRACK_TABLE] = array($this->_('Track'), $this->_('Use a track level date.'));
     if ($detailed) {
         foreach ($results as $key => $value) {
             if (is_array($value)) {
                 $results[$key] = \MUtil_Html::raw(sprintf('<strong>%s</strong> %s', reset($value), next($value)));
             }
         }
     } else {
         foreach ($results as $key => $value) {
             if (is_array($value)) {
                 $results[$key] = reset($value);
             }
         }
     }
     return $results;
 }