Skip to content
Snippets Groups Projects
Commit 35eb0b09 authored by Owen Bush's avatar Owen Bush
Browse files

Add config form for event series, and tie the values in the create form to the config settings

parent ce3281da
No related branches found
No related tags found
No related merge requests found
recurring_events.config:
recurring_events.eventseries.config:
type: config_object
label: 'Recurring Events'
label: 'Recurring Events Series Config'
mapping:
interval:
type: integer
......@@ -13,4 +13,7 @@ recurring_events.config:
label: 'The latest an event can start'
time_format:
type: string
label: 'The formatting of times when creating events'
\ No newline at end of file
label: 'The formatting of times when creating events'
days:
type: string
label: 'The days of the week available when creating events'
\ No newline at end of file
......@@ -14,6 +14,10 @@ delete eventseries entity:
clone eventseries entity:
title: 'Clone eventseries entity'
description: 'Clone existing event series entities'
administer eventseries entity:
title: 'Administer eventseries entity'
description: 'Make changes to the event series entity type.'
restrict access: true
# Event Series Administration.
administer eventseries:
......
......@@ -54,4 +54,13 @@ entity.eventseries.collection:
path: '/events/series'
requirements:
# Checks for permission directly.
_permission: 'access eventseries overview'
\ No newline at end of file
_permission: 'access eventseries overview'
# Event Series settings admin page.
eventseries.settings:
path: '/admin/structure/events/series/settings'
defaults:
_form: '\Drupal\recurring_events\Form\EventSeriesSettingsForm'
_title: 'Event Series Settings'
requirements:
_permission: 'administer eventseries entity'
\ No newline at end of file
<?php
namespace Drupal\recurring_events\Form;
use Drupal\Core\Form\ConfigFormBase;;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
use Drupal\Core\Link;
/**
* Class EventSeriesSettingsForm.
*
* @ingroup recurring_events
*/
class EventSeriesSettingsForm extends ConfigFormBase {
/**
* Returns a unique string identifying the form.
*
* @return string
* The unique string identifying the form.
*/
public function getFormId() {
return 'eventseries_settings';
}
/**
* {@inheritdoc}
*/
protected function getEditableConfigNames() {
return ['recurring_events.eventseries.config'];
}
/**
* Form submission handler.
*
* @param array $form
* An associative array containing the structure of the form.
* @param Drupal\Core\Form\FormStateInterface $form_state
* An associative array containing the current state of the form.
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$this->config('recurring_events.eventseries.config')
->set('interval', $form_state->getValue('interval'))
->set('min_time', $form_state->getValue('min_time'))
->set('max_time', $form_state->getValue('max_time'))
->set('time_format', $form_state->getValue('time_format'))
->set('days', implode(',', array_filter($form_state->getValue('days'))))
->save();
parent::submitForm($form, $form_state);
}
/**
* Define the form used for Events settings.
*
* @param array $form
* An associative array containing the structure of the form.
* @param Drupal\Core\Form\FormStateInterface $form_state
* An associative array containing the current state of the form.
*
* @return array
* Form definition array.
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$config = $this->config('recurring_events.eventseries.config');
$form['interval'] = [
'#type' => 'number',
'#title' => $this->t('Event Series Time Intervals'),
'#required' => TRUE,
'#description' => $this->t('Enter the interval, in minutes, to be used to separate event start times. Default is 15 minutes.'),
'#default_value' => $config->get('interval'),
];
$form['min_time'] = [
'#type' => 'textfield',
'#title' => $this->t('Event Series Minimum Time'),
'#required' => TRUE,
'#description' => $this->t('Enter the earliest an event can start, in h:ia format. For example 08:00am.'),
'#default_value' => $config->get('min_time'),
];
$form['max_time'] = [
'#type' => 'textfield',
'#title' => $this->t('Event Series Maximum Time'),
'#required' => TRUE,
'#description' => $this->t('Enter the latest an event can start, in h:ia format. For example 11:45pm.'),
'#default_value' => $config->get('max_time'),
];
$url = Url::fromUri('https://secure.php.net/manual/en/function.date.php');
$link = Link::fromTextAndUrl($this->t('PHP time format'), $url);
$form['time_format'] = [
'#type' => 'textfield',
'#title' => $this->t('Event Series Time Format'),
'#required' => TRUE,
'#description' => $this->t('Enter the @link used when selecting times. Default is h:i A.', [
'@link' => $link->toString(),
]),
'#default_value' => $config->get('time_format'),
];
$days = [
'monday' => t('Monday'),
'tuesday' => t('Tuesday'),
'wednesday' => t('Wednesday'),
'thursday' => t('Thursday'),
'friday' => t('Friday'),
'saturday' => t('Saturday'),
'sunday' => t('Sunday'),
];
$form['days'] = [
'#type' => 'checkboxes',
'#title' => $this->t('Event Series Days'),
'#required' => TRUE,
'#options' => $days,
'#description' => $this->t('Select the days of the week available when creating events.'),
'#default_value' => explode(',', $config->get('days')),
];
return parent::buildForm($form, $form_state);
}
}
......@@ -110,19 +110,15 @@ class WeeklyRecurringDateWidget extends DateRangeDefaultWidget {
protected function getTimeOptions() {
$times = [];
// TODO: Hook these up to configs.
/* $config = \Drupal::config('recurring_events.config');
$config = \Drupal::config('recurring_events.eventseries.config');
// Take interval in minutes, and multiply it by 60 to convert to seconds.
$interval = $config->get('interval') * 60;
$min_time = $config->get('min_time');
$max_time = $config->get('max_time');
$format = $config->get('time_format'); */
$format = $config->get('time_format');
// Take interval in minutes, and multiply it by 60 to convert to seconds.
$interval = 15 * 60;
$min_time = DrupalDateTime::createFromFormat('h:ia', '08:00am');
$max_time = DrupalDateTime::createFromFormat('h:ia', '11:00pm');
$format = 'h:i A';
$min_time = DrupalDateTime::createFromFormat('h:ia', $min_time);
$max_time = DrupalDateTime::createFromFormat('h:ia', $max_time);
// Convert the mininum time to a number of seconds after midnight.
$lower_hour = $min_time->format('H') * 60 * 60;
......@@ -201,19 +197,11 @@ class WeeklyRecurringDateWidget extends DateRangeDefaultWidget {
* An array of days suitable for a checkbox field.
*/
protected function getDayOptions() {
// TODO: Hook these up to configs.
/* $config = \Drupal::config('recurring_events.config');
$days = $config->get('days'); */
$days = [
'monday' => t('Monday'),
'tuesday' => t('Tuesday'),
'wednesday' => t('Wednesday'),
'thursday' => t('Thursday'),
'friday' => t('Friday'),
'saturday' => t('Saturday'),
'sunday' => t('Sunday'),
];
$config = \Drupal::config('recurring_events.eventseries.config');
$days = explode(',', $config->get('days'));
// All labels should have a capital first letter as they are proper nouns.
$day_labels = array_map('ucwords', $days);
$days = array_combine($days, $day_labels);
\Drupal::moduleHandler()->alter('recurring_events_days', $days);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment