Exemplo n.º 1
0
 /**
  * {@inheritdoc}
  */
 public function __construct(array $configuration, $plugin_id, array $plugin_definition)
 {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
     if (!isset(static::$timezones)) {
         static::$timezones = system_time_zones();
     }
 }
Exemplo n.º 2
0
 /**
  * Overrides \Drupal\views\Plugin\views\field\FieldPluginBase::buildOptionsForm().
  */
 public function buildOptionsForm(&$form, &$form_state)
 {
     $form['label'] = array('#type' => 'textfield', '#title' => t('Label'), '#default_value' => isset($this->options['label']) ? $this->options['label'] : '', '#description' => t('The label for this field that will be displayed to end users if the style requires it.'));
     $form['gcal'] = array('#type' => 'textfield', '#title' => t('Feed URL'), '#maxlength' => 1024, '#default_value' => $this->options['gcal']);
     $form['class'] = array('#type' => 'textfield', '#title' => t('CSS class'), '#default_value' => $this->options['class']);
     $form['timezone'] = array('#type' => 'select', '#title' => t('Time zone'), '#default_value' => $this->options['timezone'], '#options' => system_time_zones(), '#attributes' => array('class' => array('timezone-detect')));
 }
Exemplo n.º 3
0
 public function buildOptionsForm(&$form, FormStateInterface $form_state)
 {
     $date_formats = array();
     foreach ($this->dateFormatStorage->loadMultiple() as $machine_name => $value) {
         $date_formats[$machine_name] = $this->t('@name format: @date', array('@name' => $value->label(), '@date' => $this->dateFormatter->format(REQUEST_TIME, $machine_name)));
     }
     $form['date_format'] = array('#type' => 'select', '#title' => $this->t('Date format'), '#options' => $date_formats + array('custom' => $this->t('Custom'), 'raw time ago' => $this->t('Time ago'), 'time ago' => $this->t('Time ago (with "ago" appended)'), 'raw time hence' => $this->t('Time hence'), 'time hence' => $this->t('Time hence (with "hence" appended)'), 'raw time span' => $this->t('Time span (future dates have "-" prepended)'), 'inverse time span' => $this->t('Time span (past dates have "-" prepended)'), 'time span' => $this->t('Time span (with "ago/hence" appended)')), '#default_value' => isset($this->options['date_format']) ? $this->options['date_format'] : 'small');
     $form['custom_date_format'] = array('#type' => 'textfield', '#title' => $this->t('Custom date format'), '#description' => $this->t('If "Custom", see <a href="http://us.php.net/manual/en/function.date.php" target="_blank">the PHP docs</a> for date formats. Otherwise, enter the number of different time units to display, which defaults to 2.'), '#default_value' => isset($this->options['custom_date_format']) ? $this->options['custom_date_format'] : '');
     // Setup #states for all possible date_formats on the custom_date_format form element.
     foreach (array('custom', 'raw time ago', 'time ago', 'raw time hence', 'time hence', 'raw time span', 'time span', 'raw time span', 'inverse time span', 'time span') as $custom_date_possible) {
         $form['custom_date_format']['#states']['visible'][] = array(':input[name="options[date_format]"]' => array('value' => $custom_date_possible));
     }
     $form['timezone'] = array('#type' => 'select', '#title' => $this->t('Timezone'), '#description' => $this->t('Timezone to be used for date output.'), '#options' => array('' => $this->t('- Default site/user timezone -')) + system_time_zones(FALSE), '#default_value' => $this->options['timezone']);
     foreach (array_merge(array('custom'), array_keys($date_formats)) as $timezone_date_formats) {
         $form['timezone']['#states']['visible'][] = array(':input[name="options[date_format]"]' => array('value' => $timezone_date_formats));
     }
     parent::buildOptionsForm($form, $form_state);
 }
 /**
  * {@inheritdoc}
  */
 public function buildForm(array $form, FormStateInterface $form_state)
 {
     $countries = $this->countryManager->getList();
     $system_date = $this->config('system.date');
     // Date settings:
     $zones = system_time_zones();
     $form['locale'] = array('#type' => 'details', '#title' => t('Locale'), '#open' => TRUE);
     $form['locale']['site_default_country'] = array('#type' => 'select', '#title' => t('Default country'), '#empty_value' => '', '#default_value' => $system_date->get('country.default'), '#options' => $countries, '#attributes' => array('class' => array('country-detect')));
     $form['locale']['date_first_day'] = array('#type' => 'select', '#title' => t('First day of week'), '#default_value' => $system_date->get('first_day'), '#options' => array(0 => t('Sunday'), 1 => t('Monday'), 2 => t('Tuesday'), 3 => t('Wednesday'), 4 => t('Thursday'), 5 => t('Friday'), 6 => t('Saturday')));
     $form['timezone'] = array('#type' => 'details', '#title' => t('Time zones'), '#open' => TRUE);
     $form['timezone']['date_default_timezone'] = array('#type' => 'select', '#title' => t('Default time zone'), '#default_value' => $system_date->get('timezone.default') ?: date_default_timezone_get(), '#options' => $zones);
     $configurable_timezones = $system_date->get('timezone.user.configurable');
     $form['timezone']['configurable_timezones'] = array('#type' => 'checkbox', '#title' => t('Users may set their own time zone'), '#default_value' => $configurable_timezones);
     $form['timezone']['configurable_timezones_wrapper'] = array('#type' => 'container', '#states' => array('invisible' => array('input[name="configurable_timezones"]' => array('checked' => FALSE))));
     $form['timezone']['configurable_timezones_wrapper']['empty_timezone_message'] = array('#type' => 'checkbox', '#title' => t('Remind users at login if their time zone is not set'), '#default_value' => $system_date->get('timezone.user.warn'), '#description' => t('Only applied if users may set their own time zone.'));
     $form['timezone']['configurable_timezones_wrapper']['user_default_timezone'] = array('#type' => 'radios', '#title' => t('Time zone for new users'), '#default_value' => $system_date->get('timezone.user.default'), '#options' => array(DRUPAL_USER_TIMEZONE_DEFAULT => t('Default time zone'), DRUPAL_USER_TIMEZONE_EMPTY => t('Empty time zone'), DRUPAL_USER_TIMEZONE_SELECT => t('Users may set their own time zone at registration')), '#description' => t('Only applied if users may set their own time zone.'));
     return parent::buildForm($form, $form_state);
 }
Exemplo n.º 5
0
 /**
  * Defines allowed timezones for the field's AllowedValues constraint.
  *
  * @return string[]
  *   The allowed values.
  */
 public static function getAllowedTimezones()
 {
     return array_keys(system_time_zones());
 }
Exemplo n.º 6
0
 /**
  * {@inheritdoc}
  */
 public function buildForm(array $form, FormStateInterface $form_state)
 {
     $form['#title'] = $this->t('Configure site');
     // Warn about settings.php permissions risk
     $settings_dir = $this->sitePath;
     $settings_file = $settings_dir . '/settings.php';
     // Check that $_POST is empty so we only show this message when the form is
     // first displayed, not on the next page after it is submitted. (We do not
     // want to repeat it multiple times because it is a general warning that is
     // not related to the rest of the installation process; it would also be
     // especially out of place on the last page of the installer, where it would
     // distract from the message that the Drupal installation has completed
     // successfully.)
     $post_params = $this->getRequest()->request->all();
     if (empty($post_params) && (!drupal_verify_install_file($this->root . '/' . $settings_file, FILE_EXIST | FILE_READABLE | FILE_NOT_WRITABLE) || !drupal_verify_install_file($this->root . '/' . $settings_dir, FILE_NOT_WRITABLE, 'dir'))) {
         drupal_set_message(t('All necessary changes to %dir and %file have been made, so you should remove write permissions to them now in order to avoid security risks. If you are unsure how to do so, consult the <a href=":handbook_url">online handbook</a>.', array('%dir' => $settings_dir, '%file' => $settings_file, ':handbook_url' => 'https://www.drupal.org/server-permissions')), 'warning');
     }
     $form['#attached']['library'][] = 'system/drupal.system';
     // Add JavaScript time zone detection.
     $form['#attached']['library'][] = 'core/drupal.timezone';
     // We add these strings as settings because JavaScript translation does not
     // work during installation.
     $form['#attached']['drupalSettings']['copyFieldValue']['edit-site-mail'] = ['edit-account-mail'];
     $form['site_information'] = array('#type' => 'fieldgroup', '#title' => $this->t('Site information'));
     $form['site_information']['site_name'] = array('#type' => 'textfield', '#title' => $this->t('Site name'), '#required' => TRUE, '#weight' => -20);
     $form['site_information']['site_mail'] = array('#type' => 'email', '#title' => $this->t('Site email address'), '#default_value' => ini_get('sendmail_from'), '#description' => $this->t("Automated emails, such as registration information, will be sent from this address. Use an address ending in your site's domain to help prevent these emails from being flagged as spam."), '#required' => TRUE, '#weight' => -15);
     $form['admin_account'] = array('#type' => 'fieldgroup', '#title' => $this->t('Site maintenance account'));
     $form['admin_account']['account']['name'] = array('#type' => 'textfield', '#title' => $this->t('Username'), '#maxlength' => USERNAME_MAX_LENGTH, '#description' => $this->t("Several special characters are allowed, including space, period (.), hyphen (-), apostrophe ('), underscore (_), and the @ sign."), '#required' => TRUE, '#attributes' => array('class' => array('username')));
     $form['admin_account']['account']['pass'] = array('#type' => 'password_confirm', '#required' => TRUE, '#size' => 25);
     $form['admin_account']['account']['#tree'] = TRUE;
     $form['admin_account']['account']['mail'] = array('#type' => 'email', '#title' => $this->t('Email address'), '#required' => TRUE);
     $form['regional_settings'] = array('#type' => 'fieldgroup', '#title' => $this->t('Regional settings'));
     $countries = $this->countryManager->getList();
     $form['regional_settings']['site_default_country'] = array('#type' => 'select', '#title' => $this->t('Default country'), '#empty_value' => '', '#default_value' => $this->config('system.date')->get('country.default'), '#options' => $countries, '#description' => $this->t('Select the default country for the site.'), '#weight' => 0);
     $form['regional_settings']['date_default_timezone'] = array('#type' => 'select', '#title' => $this->t('Default time zone'), '#default_value' => @date_default_timezone_get(), '#options' => system_time_zones(), '#description' => $this->t('By default, dates in this site will be displayed in the chosen time zone.'), '#weight' => 5, '#attributes' => array('class' => array('timezone-detect')));
     $form['update_notifications'] = array('#type' => 'fieldgroup', '#title' => $this->t('Update notifications'));
     $form['update_notifications']['update_status_module'] = array('#type' => 'checkboxes', '#title' => $this->t('Update notifications'), '#options' => array(1 => $this->t('Check for updates automatically'), 2 => $this->t('Receive email notifications')), '#default_value' => array(1, 2), '#description' => $this->t('The system will notify you when updates and important security releases are available for installed components. Anonymous information about your site is sent to <a href=":drupal">Drupal.org</a>.', array(':drupal' => 'https://www.drupal.org')), '#weight' => 15);
     $form['update_notifications']['update_status_module'][2] = array('#states' => array('visible' => array('input[name="update_status_module[1]"]' => array('checked' => TRUE))));
     $form['actions'] = array('#type' => 'actions');
     $form['actions']['submit'] = array('#type' => 'submit', '#value' => $this->t('Save and continue'), '#weight' => 15, '#button_type' => 'primary');
     return $form;
 }
Exemplo n.º 7
0
/**
 * Form API array definition for site configuration.
 */
function install_configure_form(&$form_state, $url)
{
    $form['intro'] = array('#markup' => st('To configure your website, please provide the following information.'), '#weight' => -10);
    $form['site_information'] = array('#type' => 'fieldset', '#title' => st('Site information'), '#collapsible' => FALSE);
    $form['site_information']['site_name'] = array('#type' => 'textfield', '#title' => st('Site name'), '#required' => TRUE, '#weight' => -20);
    $form['site_information']['site_mail'] = array('#type' => 'textfield', '#title' => st('Site e-mail address'), '#default_value' => ini_get('sendmail_from'), '#description' => st("The <em>From</em> address in automated e-mails sent during registration and new password requests, and other notifications. (Use an address ending in your site's domain to help prevent this e-mail being flagged as spam.)"), '#required' => TRUE, '#weight' => -15);
    $form['admin_account'] = array('#type' => 'fieldset', '#title' => st('Administrator account'), '#collapsible' => FALSE);
    $form['admin_account']['account']['#tree'] = TRUE;
    $form['admin_account']['markup'] = array('#markup' => '<p class="description">' . st('The administrator account has complete access to the site; it will automatically be granted all permissions and can perform any administrative activity. This will be the only account that can perform certain activities, so keep its credentials safe.') . '</p>', '#weight' => -10);
    $form['admin_account']['account']['name'] = array('#type' => 'textfield', '#title' => st('Username'), '#maxlength' => USERNAME_MAX_LENGTH, '#description' => st('Spaces are allowed; punctuation is not allowed except for periods, hyphens, and underscores.'), '#required' => TRUE, '#weight' => -10, '#attributes' => array('class' => 'username'));
    $form['admin_account']['account']['mail'] = array('#type' => 'textfield', '#title' => st('E-mail address'), '#maxlength' => EMAIL_MAX_LENGTH, '#description' => st('All e-mails from the system will be sent to this address. The e-mail address is not made public and will only be used if you wish to receive a new password or wish to receive certain news or notifications by e-mail.'), '#required' => TRUE, '#weight' => -5);
    $form['admin_account']['account']['pass'] = array('#type' => 'password_confirm', '#required' => TRUE, '#size' => 25, '#weight' => 0);
    $form['server_settings'] = array('#type' => 'fieldset', '#title' => st('Server settings'), '#collapsible' => FALSE);
    $form['server_settings']['date_default_timezone'] = array('#type' => 'select', '#title' => st('Default time zone'), '#default_value' => date_default_timezone_get(), '#options' => system_time_zones(), '#description' => st('By default, dates in this site will be displayed in the chosen time zone.'), '#weight' => 5, '#attributes' => array('class' => 'timezone-detect'));
    $form['server_settings']['clean_url'] = array('#type' => 'radios', '#title' => st('Clean URLs'), '#default_value' => 0, '#options' => array(0 => st('Disabled'), 1 => st('Enabled')), '#description' => st('This option makes Drupal emit "clean" URLs (i.e. without <code>?q=</code> in the URL).'), '#disabled' => TRUE, '#prefix' => '<div id="clean-url" class="install">', '#suffix' => '</div>', '#weight' => 10);
    $form['server_settings']['update_status_module'] = array('#type' => 'checkboxes', '#title' => st('Update notifications'), '#options' => array(1 => st('Check for updates automatically')), '#default_value' => array(1), '#description' => st('With this option enabled, Drupal will notify you when new releases are available. This will significantly enhance your site\'s security and is <strong>highly recommended</strong>. This requires your site to periodically send anonymous information on its installed components to <a href="@drupal">drupal.org</a>. For more information please see the <a href="@update">update notification information</a>.', array('@drupal' => 'http://drupal.org', '@update' => 'http://drupal.org/handbook/modules/update')), '#weight' => 15);
    $form['submit'] = array('#type' => 'submit', '#value' => st('Save and continue'), '#weight' => 15);
    $form['#action'] = $url;
    $form['#redirect'] = FALSE;
    // Allow the profile to alter this form. $form_state isn't available
    // here, but to conform to the hook_form_alter() signature, we pass
    // an empty array.
    $hook_form_alter = $_GET['profile'] . '_form_alter';
    if (function_exists($hook_form_alter)) {
        $hook_form_alter($form, array(), 'install_configure');
    }
    return $form;
}
Exemplo n.º 8
0
/**
 * Form API array definition for site configuration.
 */
function _install_configure_form($form, &$form_state, &$install_state)
{
    include_once DRUPAL_ROOT . '/includes/locale.inc';
    $form['site_information'] = array('#type' => 'fieldset', '#title' => st('Site information'), '#collapsible' => FALSE);
    $form['site_information']['site_name'] = array('#type' => 'textfield', '#title' => st('Site name'), '#required' => TRUE, '#weight' => -20);
    $form['site_information']['site_mail'] = array('#type' => 'textfield', '#title' => st('Site e-mail address'), '#default_value' => ini_get('sendmail_from'), '#description' => st("Automated e-mails, such as registration information, will be sent from this address. Use an address ending in your site's domain to help prevent these e-mails from being flagged as spam."), '#required' => TRUE, '#weight' => -15);
    $form['admin_account'] = array('#type' => 'fieldset', '#title' => st('Site maintenance account'), '#collapsible' => FALSE);
    $form['admin_account']['account']['#tree'] = TRUE;
    $form['admin_account']['account']['name'] = array('#type' => 'textfield', '#title' => st('Username'), '#maxlength' => USERNAME_MAX_LENGTH, '#description' => st('Spaces are allowed; punctuation is not allowed except for periods, hyphens, and underscores.'), '#required' => TRUE, '#weight' => -10, '#attributes' => array('class' => array('username')));
    $form['admin_account']['account']['mail'] = array('#type' => 'textfield', '#title' => st('E-mail address'), '#maxlength' => EMAIL_MAX_LENGTH, '#required' => TRUE, '#weight' => -5);
    $form['admin_account']['account']['pass'] = array('#type' => 'password_confirm', '#required' => TRUE, '#size' => 25, '#weight' => 0);
    $form['server_settings'] = array('#type' => 'fieldset', '#title' => st('Server settings'), '#collapsible' => FALSE);
    $countries = country_get_list();
    $countries = array_merge(array('' => st('No default country')), $countries);
    $form['server_settings']['site_default_country'] = array('#type' => 'select', '#title' => t('Default country'), '#default_value' => variable_get('site_default_country', ''), '#options' => $countries, '#description' => st('Select the default country for the site.'), '#weight' => 0);
    $form['server_settings']['date_default_timezone'] = array('#type' => 'select', '#title' => st('Default time zone'), '#default_value' => date_default_timezone_get(), '#options' => system_time_zones(), '#description' => st('By default, dates in this site will be displayed in the chosen time zone.'), '#weight' => 5, '#attributes' => array('class' => array('timezone-detect')));
    $form['server_settings']['clean_url'] = array('#type' => 'hidden', '#default_value' => 0, '#attributes' => array('class' => array('install')));
    $form['update_notifications'] = array('#type' => 'fieldset', '#title' => st('Update notifications'), '#collapsible' => FALSE);
    $form['update_notifications']['update_status_module'] = array('#type' => 'checkboxes', '#options' => array(1 => st('Check for updates automatically'), 2 => st('Receive e-mail notifications')), '#default_value' => array(1, 2), '#description' => st('The system will notify you when updates and important security releases are available for installed components. Anonymous information about your site is sent to <a href="@drupal">Drupal.org</a>.', array('@drupal' => 'http://drupal.org')), '#weight' => 15);
    $form['submit'] = array('#type' => 'submit', '#value' => st('Save and continue'), '#weight' => 15);
    // Allow the profile to alter this form. $form_state isn't available
    // here, but to conform to the hook_form_alter() signature, we pass
    // an empty array.
    $hook_form_alter = $install_state['parameters']['profile'] . '_form_alter';
    if (function_exists($hook_form_alter)) {
        $hook_form_alter($form, array(), 'install_configure');
    }
    return $form;
}
Exemplo n.º 9
0
 /**
  * {@inheritdoc}
  */
 public function settingsForm(array $form, FormStateInterface $form_state)
 {
     $form = parent::settingsForm($form, $form_state);
     $form['timezone_override'] = array('#type' => 'select', '#title' => $this->t('Time zone override'), '#description' => $this->t('The time zone selected here will always be used'), '#options' => system_time_zones(TRUE), '#default_value' => $this->getSetting('timezone_override'));
     return $form;
 }
Exemplo n.º 10
0
 /**
  * {@inheritdoc}
  */
 public function settingsForm(array $form, FormStateInterface $form_state)
 {
     $elements = parent::settingsForm($form, $form_state);
     $date_formats = array();
     foreach ($this->dateFormatStorage->loadMultiple() as $machine_name => $value) {
         $date_formats[$machine_name] = $this->t('@name format: @date', array('@name' => $value->label(), '@date' => $this->dateFormatter->format(REQUEST_TIME, $machine_name)));
     }
     $date_formats['custom'] = $this->t('Custom');
     $elements['date_format'] = array('#type' => 'select', '#title' => $this->t('Date format'), '#options' => $date_formats, '#default_value' => $this->getSetting('date_format') ?: 'medium');
     $elements['custom_date_format'] = array('#type' => 'textfield', '#title' => $this->t('Custom date format'), '#description' => $this->t('See <a href="@url" target="_blank">the documentation for PHP date formats</a>.', ['@url' => 'http://php.net/manual/function.date.php']), '#default_value' => $this->getSetting('custom_date_format') ?: '');
     $elements['custom_date_format']['#states']['visible'][] = array(':input[name="options[settings][date_format]"]' => array('value' => 'custom'));
     $elements['timezone'] = array('#type' => 'select', '#title' => $this->t('Time zone'), '#options' => array('' => $this->t('- Default site/user time zone -')) + system_time_zones(FALSE), '#default_value' => $this->getSetting('timezone'));
     return $elements;
 }
Exemplo n.º 11
0
 /**
  * Parses a ical date element.
  *
  * Possible formats to parse include:
  *   PROPERTY:YYYYMMDD[T][HH][MM][SS][Z]
  *   PROPERTY;VALUE=DATE:YYYYMMDD[T][HH][MM][SS][Z]
  *   PROPERTY;VALUE=DATE-TIME:YYYYMMDD[T][HH][MM][SS][Z]
  *   PROPERTY;TZID=XXXXXXXX;VALUE=DATE:YYYYMMDD[T][HH][MM][SS]
  *   PROPERTY;TZID=XXXXXXXX:YYYYMMDD[T][HH][MM][SS]
  *
  *   The property and the colon before the date are removed in the import
  *   process above and we are left with $field and $data.
  *
  * @param string $field
  *   The text before the colon and the date, i.e.
  *   ';VALUE=DATE:', ';VALUE=DATE-TIME:', ';TZID='
  * @param string $data
  *   The date itself, after the colon, in the format YYYYMMDD[T][HH][MM][SS][Z]
  *   'Z', if supplied, means the date is in UTC.
  *
  * @return array
  *   $items array, consisting of:
  *      'datetime'   => date in YYYY-MM-DD HH:MM format, not timezone adjusted
  *      'all_day'    => whether this is an all-day event with no time
  *      'tz'         => the timezone of the date, could be blank if the ical
  *                      has no timezone; the ical specs say no timezone
  *                      conversion should be done if no timezone info is
  *                      supplied
  *  @todo
  *   Another option for dates is the format PROPERTY;VALUE=PERIOD:XXXX. The
  *   period may include a duration, or a date and a duration, or two dates, so
  *   would have to be split into parts and run through date_ical_parse_date()
  *   and date_ical_parse_duration(). This is not commonly used, so ignored for
  *   now. It will take more work to figure how to support that.
  */
 public static function parse_date($data, $field = 'DATE:')
 {
     $items = array('datetime' => '', 'all_day' => '', 'tz' => '');
     if (empty($data)) {
         return $items;
     }
     // Make this a little more whitespace independent.
     $data = trim($data);
     // Turn the properties into a nice indexed array of
     // array(PROPERTYNAME => PROPERTYVALUE);
     $field_parts = preg_split('/[;:]/', $field);
     $properties = array();
     foreach ($field_parts as $part) {
         if (strpos($part, '=') !== FALSE) {
             $tmp = explode('=', $part);
             $properties[$tmp[0]] = $tmp[1];
         }
     }
     // Make this a little more whitespace independent.
     $data = trim($data);
     // Record if a time has been found.
     $has_time = FALSE;
     // If a format is specified, parse it according to that format.
     if (isset($properties['VALUE'])) {
         switch ($properties['VALUE']) {
             case 'DATE':
                 preg_match(self::$regex_ical_date, $data, $regs);
                 // Date.
                 $datetime = DrupalDateTime::datePad($regs[1]) . '-' . DrupalDateTime::datePad($regs[2]) . '-' . DrupalDateTime::datePad($regs[3]);
                 break;
             case 'DATE-TIME':
                 preg_match(self::$regex_ical_datetime, $data, $regs);
                 // Date.
                 $datetime = DrupalDateTime::datePad($regs[1]) . '-' . DrupalDateTime::datePad($regs[2]) . '-' . DrupalDateTime::datePad($regs[3]);
                 // Time.
                 $datetime .= ' ' . DrupalDateTime::datePad($regs[4]) . ':' . DrupalDateTime::datePad($regs[5]) . ':' . DrupalDateTime::datePad($regs[6]);
                 $has_time = TRUE;
                 break;
         }
     } else {
         preg_match(self::$regex_loose, $data, $regs);
         if (!empty($regs) && count($regs) > 2) {
             // Date.
             $datetime = DrupalDateTime::datePad($regs[1]) . '-' . DrupalDateTime::datePad($regs[2]) . '-' . DrupalDateTime::datePad($regs[3]);
             if (isset($regs[4])) {
                 $has_time = TRUE;
                 // Time.
                 $datetime .= ' ' . (!empty($regs[5]) ? DrupalDateTime::datePad($regs[5]) : '00') . ':' . (!empty($regs[6]) ? DrupalDateTime::datePad($regs[6]) : '00') . ':' . (!empty($regs[7]) ? DrupalDateTime::datePad($regs[7]) : '00');
             }
         }
     }
     // Use timezone if explicitly declared.
     if (isset($properties['TZID'])) {
         $tz = $properties['TZID'];
         // Fix alternatives like US-Eastern which should be US/Eastern.
         $tz = str_replace('-', '/', $tz);
         // Unset invalid timezone names.
         module_load_include('inc', 'date_api', 'date_api.admin');
         $tz = _date_timezone_replacement($tz);
         if (!in_array($tz, array_keys(system_time_zones()))) {
             $tz = '';
         }
     } elseif (strpos($data, 'Z') !== FALSE) {
         $tz = 'UTC';
     } else {
         $tz = '';
     }
     $items['datetime'] = $datetime;
     $items['all_day'] = $has_time ? FALSE : TRUE;
     $items['tz'] = $tz;
     return $items;
 }