/**
  * Build ValidityInput
  *
  * @param srCertificateDefinitionSetting $setting
  * @return ilRadioGroupInputGUI
  */
 protected function getValidityInput(srCertificateDefinitionSetting $setting)
 {
     $validity_value = $this->definition->getValidity();
     // Always
     $input = new ilRadioGroupInputGUI($this->pl->txt('setting_id_validity'), $setting->getIdentifier());
     $input->setRequired(true);
     $option = new ilRadioOption($this->pl->txt('always'), srCertificateTypeSetting::VALIDITY_TYPE_ALWAYS);
     $input->addOption($option);
     // Date range
     $option = new ilRadioOption($this->pl->txt('setting_validity_range'), srCertificateTypeSetting::VALIDITY_TYPE_DATE_RANGE);
     $subitem = new ilDurationInputGUI($this->pl->txt('date_range'), $setting->getIdentifier() . '_' . srCertificateTypeSetting::VALIDITY_TYPE_DATE_RANGE);
     $subitem->setShowMinutes(false);
     $subitem->setShowHours(false);
     $subitem->setShowDays(true);
     $subitem->setShowMonths(true);
     if ($setting->getValue() == srCertificateTypeSetting::VALIDITY_TYPE_DATE_RANGE && $validity_value) {
         $range_array = json_decode($validity_value, true);
         $data = array();
         $data[$subitem->getPostVar()]['MM'] = $range_array['m'];
         $data[$subitem->getPostVar()]['dd'] = $range_array['d'];
         $subitem->setValueByArray($data);
     }
     $option->addSubItem($subitem);
     $input->addOption($option);
     // Date
     $option = new ilRadioOption($this->pl->txt('setting_validity_date'), srCertificateTypeSetting::VALIDITY_TYPE_DATE);
     $subitem = new ilDateTimeInputGUI($this->pl->txt('date'), $setting->getIdentifier() . '_' . srCertificateTypeSetting::VALIDITY_TYPE_DATE);
     $subitem->setMode(ilDateTimeInputGUI::MODE_INPUT);
     if ($setting->getValue() == srCertificateTypeSetting::VALIDITY_TYPE_DATE && $validity_value) {
         $subitem->setDate(new ilDateTime($validity_value, IL_CAL_DATE));
     }
     $option->addSubItem($subitem);
     $input->addOption($option);
     $subitem->setDisabled(!$setting->isEditable());
     // SW This seems to have no effect...
     return $input;
 }
 /**
  * Get the calculated valid-to date based on the validity type
  *
  * @return null|string
  */
 protected function calculateValidTo()
 {
     $validity = $this->definition->getValidity();
     $validity_type = $this->definition->getValidityType();
     switch ($validity_type) {
         case srCertificateTypeSetting::VALIDITY_TYPE_DATE:
             // Date already stored in Y-m-d format
             $valid_to = $validity;
             break;
         case srCertificateTypeSetting::VALIDITY_TYPE_DATE_RANGE:
             $validity = json_decode($validity, true);
             $calc_str = '';
             if (isset($validity['m'])) {
                 $calc_str .= $validity['m'] . ' months';
             }
             if (isset($validity['d'])) {
                 $calc_str .= ' ' . $validity['d'] . 'days';
             }
             $to = $calc_str ? strtotime('+' . $calc_str) : time();
             $valid_to = date('Y-m-d', $to);
             break;
         default:
             $valid_to = null;
             // Always valid
     }
     return $valid_to;
 }