public function FullCalendar::buildOptionsForm in FullCalendar 8.2
Same name in this branch
- 8.2 src/Plugin/views/style/FullCalendar.php \Drupal\fullcalendar\Plugin\views\style\FullCalendar::buildOptionsForm()
- 8.2 src/Plugin/fullcalendar/type/FullCalendar.php \Drupal\fullcalendar\Plugin\fullcalendar\type\FullCalendar::buildOptionsForm()
Same name and namespace in other branches
- 8.5 src/Plugin/fullcalendar/type/FullCalendar.php \Drupal\fullcalendar\Plugin\fullcalendar\type\FullCalendar::buildOptionsForm()
- 8 src/Plugin/fullcalendar/type/FullCalendar.php \Drupal\fullcalendar\Plugin\fullcalendar\type\FullCalendar::buildOptionsForm()
- 8.3 src/Plugin/fullcalendar/type/FullCalendar.php \Drupal\fullcalendar\Plugin\fullcalendar\type\FullCalendar::buildOptionsForm()
- 8.4 src/Plugin/fullcalendar/type/FullCalendar.php \Drupal\fullcalendar\Plugin\fullcalendar\type\FullCalendar::buildOptionsForm()
Overrides FullcalendarInterface::buildOptionsForm
File
- src/
Plugin/ fullcalendar/ type/ FullCalendar.php, line 97
Class
- FullCalendar
- Plugin annotation @FullcalendarOption( id = "fullcalendar", module = "fullcalendar", js = TRUE, weight = "-20" )
Namespace
Drupal\fullcalendar\Plugin\fullcalendar\typeCode
public function buildOptionsForm(&$form, FormStateInterface $form_state) {
/** @var \Drupal\fullcalendar\Plugin\views\style\FullCalendar $style_plugin */
$style_plugin = $this->style;
$form['intro'] = [
'#markup' => $this
->t('Fullcalendar defaults have been provided where appropriate. See the "more info" links for the documentation of settings.'),
];
$form['google'] = $this
->getFieldsetElement($this
->t('Google Calendar Settings'), $this
->t('Display events from a public Google Calendar you have configured. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/google-calendar', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]));
$form['google']['googleCalendarApiKey'] = [
'#type' => 'textfield',
'#title' => $this
->t('Google Calendar API key'),
'#default_value' => $style_plugin->options['google']['googleCalendarApiKey'],
'#size' => '60',
'#fieldset' => 'google',
];
$form['google']['googleCalendarId'] = [
'#type' => 'textfield',
'#title' => $this
->t('Google Calendar ID(s)'),
'#description' => $this
->t('You can specify multiple, comma-separated Google Calendar IDs'),
'#default_value' => $style_plugin->options['google']['googleCalendarId'],
'#size' => '60',
'#fieldset' => 'google',
];
// Toolbar settings.
$form['toolbar'] = $this
->getFieldsetElement($this
->t('Toolbar'));
$form['header'] = [
'#type' => 'textfield',
'#title' => $this
->t('Header'),
'#description' => $this
->t("Defines the buttons and title at the top of the calendar. Enter comma-separated key:value pairs for object properties e.g. left: 'title', center: '', right: 'today prev,next' @more-info", [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/header', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['header'],
'#size' => '40',
'#fieldset' => 'toolbar',
];
$form['footer'] = [
'#type' => 'textfield',
'#title' => $this
->t('Footer'),
'#description' => $this
->t('Defines the controls at the bottom of the calendar. These settings accept the same exact values as the header option. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/footer', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['footer'],
'#size' => '40',
'#fieldset' => 'toolbar',
];
$form['titleFormat'] = $this
->getTitleFormatElement($style_plugin->options['titleFormat'], 'toolbar');
$form['titleRangeSeparator'] = [
'#type' => 'textfield',
'#title' => $this
->t('Title range separator'),
'#description' => $this
->t('Determines the separator text when formatting the date range in the toolbar title. Default: \\u2013 (en dash)'),
'#default_value' => $style_plugin->options['titleRangeSeparator'],
'#prefix' => '<div class="views-left-50">',
'#suffix' => '</div>',
'#size' => '40',
'#fieldset' => 'toolbar',
];
$form['buttonText'] = $this
->getButtonTextElement($style_plugin->options['buttonText'], 'toolbar');
$form['buttonIcons'] = [
'#type' => 'textfield',
'#title' => $this
->t('Button icons'),
'#description' => $this
->t("Icons that will be displayed in buttons of the header/footer. Enter comma-separated key:value pairs for object properties e.g. prev:'left-single-arrow', next:'right-single-arrow', prevYear:'left-double-arrow', nextYear:'right-double-arrow' @more-info", [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/buttonIcons', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['buttonIcons'],
'#prefix' => '<div class="views-left-50">',
'#suffix' => '</div>',
'#size' => '40',
'#fieldset' => 'toolbar',
];
// FC Views.
$form['views'] = $this
->getFieldsetElement($this
->t('Views'), $this
->t('Select the Fullcalendar views to enable on this calendar.'));
$form['month_view'] = [
'#type' => 'checkbox',
'#title' => t('Month View'),
'#default_value' => $style_plugin->options['month_view'],
'#data_type' => 'bool',
'#fieldset' => 'views',
'#prefix' => '<div class="views-left-25">',
'#suffix' => '</div>',
];
$form['timegrid_view'] = [
'#type' => 'checkbox',
'#title' => t('TimeGrid View'),
'#default_value' => $style_plugin->options['timegrid_view'],
'#data_type' => 'bool',
'#fieldset' => 'views',
'#prefix' => '<div class="views-left-25">',
'#suffix' => '</div>',
];
$form['list_view'] = [
'#type' => 'checkbox',
'#title' => t('List View'),
'#default_value' => $style_plugin->options['list_view'],
'#data_type' => 'bool',
'#fieldset' => 'views',
'#prefix' => '<div class="views-left-25">',
'#suffix' => '</div>',
];
$form['daygrid_view'] = [
'#type' => 'checkbox',
'#title' => t('DayGrid View'),
'#default_value' => $style_plugin->options['daygrid_view'],
'#data_type' => 'bool',
'#fieldset' => 'views',
'#prefix' => '<div class="views-left-25">',
'#suffix' => '</div>',
];
// View.
$form['view_settings'] = $this
->getFieldsetElement($this
->t('View settings'), '', FALSE, '', [
'visible' => [
':input[name="style_options[month_view]"]' => [
'checked' => TRUE,
],
],
]);
// Month View.
$form['month_view_settings'] = $this
->getFieldsetElement($this
->t('Month View settings'), '', FALSE, 'view_settings', [
'visible' => [
':input[name="style_options[month_view]"]' => [
'checked' => TRUE,
],
],
]);
$form['month_view_settings']['fixedWeekCount'] = [
'#type' => 'checkbox',
'#title' => t('Number of weeks'),
'#description' => $this
->t('Determines the number of weeks displayed in a month view (true). If true, the calendar will always be 6 weeks tall. If false, the calendar will have either 4, 5, or 6 weeks, depending on the month.'),
'#default_value' => $style_plugin->options['month_view_settings']['fixedWeekCount'],
'#data_type' => 'bool',
'#fieldset' => 'month_view_settings',
'#prefix' => '<div class="views-left-50">',
'#suffix' => '</div>',
];
$form['month_view_settings']['showNonCurrentDates'] = [
'#type' => 'checkbox',
'#title' => t('Number of weeks'),
'#description' => $this
->t('In month view, whether dates in the previous or next month should be rendered at all. (true). Days that are disabled will not render events.'),
'#default_value' => $style_plugin->options['month_view_settings']['showNonCurrentDates'],
'#data_type' => 'bool',
'#fieldset' => 'month_view_settings',
'#prefix' => '<div class="views-left-50">',
'#suffix' => '</div>',
];
// TimeGrid View
$form['timegrid_view_settings'] = $this
->getFieldsetElement($this
->t('TimeGrid View settings'), '', FALSE, 'view_settings', [
'visible' => [
':input[name="style_options[timegrid_view]"]' => [
'checked' => TRUE,
],
],
]);
$form['timegrid_view_settings']['allDaySlot'] = [
'#type' => 'checkbox',
'#title' => t('Display "all-day" slot'),
'#description' => $this
->t('Determines the number of weeks displayed in a month view (true). When hidden with false, all-day events will not be displayed in TimeGrid views.'),
'#default_value' => $style_plugin->options['timegrid_view_settings']['allDaySlot'],
'#data_type' => 'bool',
'#fieldset' => 'timegrid_view_settings',
];
$form['timegrid_view_settings']['allDayText'] = [
'#type' => 'textfield',
'#title' => $this
->t('"All-day" text'),
'#description' => $this
->t('The text titling the “all-day” slot at the top of the calendar (default: all-day).'),
'#default_value' => $style_plugin->options['timegrid_view_settings']['allDayText'],
'#size' => '40',
'#fieldset' => 'timegrid_view_settings',
];
$form['timegrid_view_settings']['slotEventOverlap'] = [
'#type' => 'checkbox',
'#title' => t('Determines if timed events in TimeGrid view should visually overlap.'),
'#description' => $this
->t('When set to true (the default), events will overlap each other.'),
'#default_value' => $style_plugin->options['timegrid_view_settings']['slotEventOverlap'],
'#data_type' => 'bool',
'#fieldset' => 'timegrid_view_settings',
];
$form['timegrid_view_settings']['timeGridEventMinHeight'] = [
'#type' => 'textfield',
'#title' => t('Guaranteed minimum height.'),
'#description' => $this
->t('Guarantees that events within the TimeGrid views will be a minimum height. An integer pixel value can be specified to force all TimeGrid view events to be at least the given pixel height. (default: null). If not specified (the default), all events will have a height determined by their start and end times.'),
'#default_value' => $style_plugin->options['timegrid_view_settings']['timeGridEventMinHeight'],
'#size' => '40',
'#fieldset' => 'timegrid_view_settings',
];
// List View
$form['list_view_settings'] = $this
->getFieldsetElement($this
->t('List View settings'), '', FALSE, 'view_settings', [
'visible' => [
':input[name="style_options[list_view]"]' => [
'checked' => TRUE,
],
],
]);
$form['list_view_settings']['listDayFormat'] = [
'#type' => 'textfield',
'#title' => t('Day format (left)'),
'#description' => $this
->t('A @more-info that affects the text on the left side of the day headings in list view. If false is specified, no text is displayed.', [
'@more-info' => Link::fromTextAndUrl($this
->t('Date Formatter'), Url::fromUri(self::FC_DOCS_URL . '/listDayFormat', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['list_view_settings']['listDayFormat'],
'#size' => '40',
'#fieldset' => 'list_view_settings',
];
$form['list_view_settings']['listDayAltFormat'] = [
'#type' => 'textfield',
'#title' => t('Day format (right)'),
'#description' => $this
->t('A @more-info that affects the text on the right side of the day headings in list view. If false is specified, no text is displayed.', [
'@more-info' => Link::fromTextAndUrl($this
->t('Date Formatter'), Url::fromUri(self::FC_DOCS_URL . '/listDayFormat', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['list_view_settings']['listDayAltFormat'],
'#size' => '40',
'#fieldset' => 'list_view_settings',
];
$form['list_view_settings']['noEventsMessage'] = [
'#type' => 'textfield',
'#title' => t('No events message'),
'#description' => $this
->t('The text that is displayed in the middle of list view, alerting the user that there are no events within the given range.'),
'#default_value' => $style_plugin->options['list_view_settings']['noEventsMessage'],
'#size' => '40',
'#fieldset' => 'list_view_settings',
];
$form['views_options'] = $this
->getFieldsetElement($this
->t('View-Specific Options'), $this
->t('Options that apply only to specific calendar views, provided as options objects in the views option, keyed by the name of the view. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/view-specific-options', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]));
$form['views_year'] = $this
->getFieldsetElement($this
->t('Year'), $this
->t('Options that apply only to Year views'), FALSE, 'views_options');
$form['views_year']['listYear_buttonText'] = $this
->getButtonTextElement($style_plugin->options['views_year']['listYear_buttonText'], 'views_year', $this
->t('Button text (Year - List)'));
$form['views_year']['listYear_titleFormat'] = $this
->getTitleFormatElement($style_plugin->options['views_year']['listYear_titleFormat'], 'views_year', $this
->t('Title format (Year - List)'));
$form['views_month'] = $this
->getFieldsetElement($this
->t('Month'), $this
->t('Options that apply only to Month views'), FALSE, 'views_options');
$form['views_month']['listMonth_buttonText'] = $this
->getButtonTextElement($style_plugin->options['views_month']['listMonth_buttonText'], 'views_month', $this
->t('Button text (Month - List)'));
$form['views_month']['listMonth_titleFormat'] = $this
->getTitleFormatElement($style_plugin->options['views_month']['listMonth_titleFormat'], 'views_month', $this
->t('Title format (Month - List)'));
$form['views_month']['dayGridMonth_buttonText'] = $this
->getButtonTextElement($style_plugin->options['views_month']['dayGridMonth_buttonText'], 'views_month', $this
->t('Button text (Month - Day Grid)'));
$form['views_month']['dayGridMonth_titleFormat'] = $this
->getTitleFormatElement($style_plugin->options['views_month']['dayGridMonth_titleFormat'], 'views_month', $this
->t('Title format (Month - Day Grid)'));
$form['views_month']['dayGridMonth_columnHeaderFormat'] = $this
->getColumnHeaderFormatElement($style_plugin->options['views_month']['dayGridMonth_columnHeaderFormat'], 'views_month', $this
->t('Column header format (Month - Day Grid)'));
$form['views_week'] = $this
->getFieldsetElement($this
->t('Week'), $this
->t('Options that apply only to Week views'), FALSE, 'views_options');
$form['views_week']['listWeek_buttonText'] = $this
->getButtonTextElement($style_plugin->options['views_week']['listWeek_buttonText'], 'views_week', $this
->t('Button text (Week - List)'));
$form['views_week']['listWeek_titleFormat'] = $this
->getTitleFormatElement($style_plugin->options['views_week']['listWeek_titleFormat'], 'views_week', $this
->t('Title format (Week - List)'));
$form['views_week']['dayGridWeek_buttonText'] = $this
->getButtonTextElement($style_plugin->options['views_week']['dayGridWeek_buttonText'], 'views_week', $this
->t('Button text (Week - Day Grid)'));
$form['views_week']['dayGridWeek_titleFormat'] = $this
->getTitleFormatElement($style_plugin->options['views_week']['dayGridWeek_titleFormat'], 'views_week', $this
->t('Title format (Week - Day Grid)'));
$form['views_week']['dayGridWeek_columnHeaderFormat'] = $this
->getColumnHeaderFormatElement($style_plugin->options['views_week']['dayGridWeek_columnHeaderFormat'], 'views_week', $this
->t('Column header format (Week - Day Grid)'));
$form['views_week']['timeGridWeek_buttonText'] = $this
->getButtonTextElement($style_plugin->options['views_week']['timeGridWeek_buttonText'], 'views_week', $this
->t('Button text (Week - Time Grid)'));
$form['views_week']['timeGridWeek_titleFormat'] = $this
->getTitleFormatElement($style_plugin->options['views_week']['timeGridWeek_titleFormat'], 'views_week', $this
->t('Title format (Week - Time Grid)'));
$form['views_week']['timeGridWeek_columnHeaderFormat'] = $this
->getColumnHeaderFormatElement($style_plugin->options['views_week']['timeGridWeek_columnHeaderFormat'], 'views_week', $this
->t('Column header format (Week - Time Grid)'));
$form['views_day'] = $this
->getFieldsetElement($this
->t('Day'), $this
->t('Options that apply only to Day views'), FALSE, 'views_options');
$form['views_day']['listDay_buttonText'] = $this
->getButtonTextElement($style_plugin->options['views_day']['listDay_buttonText'], 'views_day', $this
->t('Button text (Day - List)'));
$form['views_day']['listDay_titleFormat'] = $this
->getTitleFormatElement($style_plugin->options['views_day']['listDay_titleFormat'], 'views_day', $this
->t('Title format (Day - List)'));
$form['views_day']['dayGridDay_buttonText'] = $this
->getButtonTextElement($style_plugin->options['views_day']['dayGridDay_buttonText'], 'views_day', $this
->t('Button text (Day - Day Grid)'));
$form['views_day']['dayGridDay_titleFormat'] = $this
->getTitleFormatElement($style_plugin->options['views_day']['dayGridDay_titleFormat'], 'views_day', $this
->t('Title format (Day - Day Grid)'));
$form['views_day']['dayGridDay_columnHeaderFormat'] = $this
->getColumnHeaderFormatElement($style_plugin->options['views_day']['dayGridDay_columnHeaderFormat'], 'views_day', $this
->t('Column header format (Day - Day Grid)'));
$form['views_day']['timeGridDay_buttonText'] = $this
->getButtonTextElement($style_plugin->options['views_day']['timeGridDay_buttonText'], 'views_day', $this
->t('Button text (Day - Time Grid)'));
$form['views_day']['timeGridDay_titleFormat'] = $this
->getTitleFormatElement($style_plugin->options['views_day']['timeGridDay_titleFormat'], 'views_day', $this
->t('Title format (Day - Time Grid)'));
$form['views_day']['timeGridDay_columnHeaderFormat'] = $this
->getColumnHeaderFormatElement($style_plugin->options['views_day']['timeGridDay_columnHeaderFormat'], 'views_day', $this
->t('Column header format (Day - Time Grid)'));
// Display settings
$form['display'] = $this
->getFieldsetElement($this
->t('Display settings'));
$form['display']['defaultView'] = [
'#type' => 'select',
'#title' => $this
->t('Initial display'),
'#options' => [
'dayGridMonth' => $this
->t('Month'),
'timeGridWeek' => $this
->t('Week (Agenda)'),
'dayGridWeek' => $this
->t('Week (Basic)'),
'timeGridDay' => $this
->t('Day (Agenda)'),
'dayGridDay' => $this
->t('Day (Basic)'),
'listYear' => $this
->t('Year (List)'),
'listMonth' => $this
->t('Month (List)'),
'listWeek' => $this
->t('Week (List)'),
'listDay' => $this
->t('Day (List)'),
],
'#empty_option' => $this
->t('- Select -'),
'#description' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/intro', [
'attributes' => [
'target' => '_blank',
],
])),
'#default_value' => $style_plugin->options['display']['defaultView'],
'#prefix' => '<div class="views-left-30">',
'#suffix' => '</div>',
'#fieldset' => 'display',
];
$form['display']['firstDay'] = [
'#type' => 'select',
'#title' => $this
->t('Week starts on'),
'#options' => DateHelper::weekDays(TRUE),
'#default_value' => $style_plugin->options['display']['firstDay'],
'#prefix' => '<div class="views-left-30">',
'#suffix' => '</div>',
'#fieldset' => 'display',
];
// Date/Time display
$form['times'] = $this
->getFieldsetElement($this
->t('Date & Time Display'), $this
->t('Settings that control presence/absence of dates as well as their styling and text. These settings work across a variety of different views. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/date-display', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]));
$form['times']['weekends'] = [
'#type' => 'checkbox',
'#title' => t('Weekends'),
'#description' => $this
->t('Whether to include Saturday/Sunday columns in any of the calendar views (true).'),
'#default_value' => $style_plugin->options['times']['weekends'],
'#data_type' => 'bool',
'#fieldset' => 'times',
];
$form['times']['hiddenDays'] = [
'#type' => 'textfield',
'#title' => t('Exclude days'),
'#description' => $this
->t('Exclude certain days-of-the-week from being displayed. By default, no days are hidden, unless weekends is set to false. Enter comma-separated numbers e.g. 2, 4 @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/hiddenDays', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['times']['hiddenDays'],
'#size' => '40',
'#fieldset' => 'times',
];
$form['times']['columnHeader'] = [
'#type' => 'checkbox',
'#title' => t('Column header'),
'#description' => $this
->t('Whether the day headers should appear. For the Month, TimeGrid, and DayGrid views (true).'),
'#default_value' => $style_plugin->options['times']['columnHeader'],
'#data_type' => 'bool',
'#fieldset' => 'times',
];
$form['axis'] = $this
->getFieldsetElement($this
->t('Time-axis settings'), $this
->t('Settings that control display of times along the side of the calendar. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/date-display', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]));
$form['axis']['slotDuration'] = [
'#type' => 'textfield',
'#title' => t('Duration of slots'),
'#description' => $this
->t('The frequency for displaying time slots. (default: 00:30:00) @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/slotDuration', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['axis']['slotDuration'],
'#size' => '40',
'#fieldset' => 'axis',
];
$form['axis']['slotLabelInterval'] = [
'#type' => 'textfield',
'#title' => t('Interval of slot labels'),
'#description' => $this
->t('The frequency that the time slots should be labelled with text. If not specified, a reasonable value will be automatically computed based on slotDuration. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/slotLabelInterval', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['axis']['slotLabelInterval'],
'#size' => '40',
'#fieldset' => 'axis',
];
$form['axis']['slotLabelFormat'] = [
'#type' => 'textfield',
'#title' => t('Format of slot labels'),
'#description' => $this
->t('Determines the text that will be displayed within a time slot. Enter comma-separated, object properties e.g. hour:numeric, minute:2-digit, omitZeroMinute:true, meridiem:short @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/slotLabelFormat', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['axis']['slotLabelFormat'],
'#size' => '40',
'#fieldset' => 'axis',
];
$form['axis']['minTime'] = [
'#type' => 'textfield',
'#title' => t('First time slot'),
'#description' => $this
->t('Determines the first time slot that will be displayed for each day. (default: 00:00:00) @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/minTime', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['axis']['minTime'],
'#size' => '40',
'#fieldset' => 'axis',
];
$form['axis']['maxTime'] = [
'#type' => 'textfield',
'#title' => t('Last time slot'),
'#description' => $this
->t('Determines the last time slot that will be displayed for each day. This MUST be specified as an exclusive end time. (default: 24:00:00) @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/maxTime', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['axis']['maxTime'],
'#size' => '40',
'#fieldset' => 'axis',
];
$form['axis']['scrollTime'] = [
'#type' => 'textfield',
'#title' => t('Scroll time'),
'#description' => $this
->t('Determines how far forward the scroll pane is initially scrolled. The user will be able to scroll back to see events before this time. (default: 06:00:00) @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/scrollTime', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['axis']['scrollTime'],
'#size' => '40',
'#fieldset' => 'axis',
];
$form['nav'] = $this
->getFieldsetElement($this
->t('Date navigation'));
$form['nav']['defaultDate'] = [
'#type' => 'textfield',
'#title' => $this
->t('Default date'),
'#description' => $this
->t('The initial date displayed when the calendar first loads. When not specified, this value defaults to the current date. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/defaultDate', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['nav']['defaultDate'],
'#size' => '40',
'#fieldset' => 'nav',
];
$form['nav']['validRange'] = [
'#type' => 'textfield',
'#title' => $this
->t('Valid date range'),
'#description' => $this
->t('Limits which dates the user can navigate to and where events can go. Dates outside of the valid range will be grayed-out. Enter comma-separated key:value properties e.g. start:2017-05-01, end:2017-06-01 @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/validRange', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['nav']['validRange'],
'#size' => '40',
'#fieldset' => 'nav',
];
$form['links'] = $this
->getFieldsetElement($this
->t('Date Nav Links'));
$form['links']['navLinks'] = [
'#type' => 'checkbox',
'#title' => t('Enable nav links'),
'#description' => $this
->t('Determines if day names and week names are clickable. When true, day headings and weekNumbers will become clickable. Default: false. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/navLinks', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['links']['navLinks'],
'#data_type' => 'bool',
'#fieldset' => 'links',
];
$form['links']['navLinkDayClick'] = [
'#type' => 'textfield',
'#title' => $this
->t('Day click function'),
'#description' => $this
->t('Determines what happens upon a day heading nav-link click. By default, the user is taken to the first day-view that appears in the header. Enter the name of a function you have written for this feature. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/navLinkDayClick', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['links']['navLinkDayClick'],
'#size' => '40',
'#fieldset' => 'links',
'#states' => [
'visible' => [
':input[name="style_options[links][navLinks]"]' => [
'checked' => TRUE,
],
],
],
];
$form['links']['navLinkWeekClick'] = [
'#type' => 'textfield',
'#title' => $this
->t('Week click function'),
'#description' => $this
->t('Determines what happens upon a week-number nav-link click. By default, the user is taken to the a the first week-view that appears in the header. Enter the name of a function you have written for this feature. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/navLinkWeekClick', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['links']['navLinkWeekClick'],
'#size' => '40',
'#fieldset' => 'links',
'#states' => [
'visible' => [
':input[name="style_options[links][navLinks]"]' => [
'checked' => TRUE,
],
],
],
];
$form['week'] = $this
->getFieldsetElement($this
->t('Week Numbers'));
$form['week']['weekNumbers'] = [
'#type' => 'checkbox',
'#title' => t('Display week numbers'),
'#description' => $this
->t('Determines if week numbers should be displayed on the calendar. If set to true, week numbers will be displayed in a separate left column in the Month/DayGrid views as well as at the top-left corner of the TimeGrid views. Default: false. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/weekNumbers', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['week']['weekNumbers'],
'#data_type' => 'bool',
'#fieldset' => 'week',
];
$form['week']['weekNumbersWithinDays'] = [
'#type' => 'checkbox',
'#title' => t('Display week numbers in Month and DayGrid views'),
'#description' => $this
->t('Determines the styling for week numbers in Month and DayGrid views. Default: false. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/weekNumbersWithinDays', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['week']['weekNumbersWithinDays'],
'#data_type' => 'bool',
'#fieldset' => 'week',
];
$form['week']['weekNumberCalculation'] = [
'#type' => 'textfield',
'#title' => $this
->t('Week label'),
'#description' => $this
->t('The method for calculating week numbers that are displayed with the weekNumbers setting e.g. local, ISO, or name of function you have written for this feature. Default: "local" @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/weekNumberCalculation', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['week']['weekNumberCalculation'],
'#size' => '40',
'#fieldset' => 'week',
];
$form['week']['weekLabel'] = [
'#type' => 'textfield',
'#title' => $this
->t('Week label'),
'#description' => $this
->t('The heading text for week numbers. Also affects weeks in date formatting. Default: "W" @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/weekLabel', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['week']['weekLabel'],
'#size' => '40',
'#fieldset' => 'week',
];
$form['now'] = $this
->getFieldsetElement($this
->t('Now Indicator'));
$form['now']['nowIndicator'] = [
'#type' => 'checkbox',
'#title' => t('Now indicator'),
'#description' => $this
->t('Whether or not to display a marker indicating the current time. Default: false. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/nowIndicator', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['now']['nowIndicator'],
'#data_type' => 'bool',
'#fieldset' => 'now',
];
$form['now']['now'] = [
'#type' => 'checkbox',
'#title' => t('Now'),
'#description' => $this
->t('Explicitly sets the "today" date of the calendar - the day that is normally highlighted in yellow. Enter a @parsable-date or name of function you have written for this feature. @more-info', [
'@parsable-date' => Link::fromTextAndUrl($this
->t('parsable date'), Url::fromUri(self::FC_DOCS_URL . '/date-parsing', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/now', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['now']['now'],
'#data_type' => 'bool',
'#fieldset' => 'now',
];
$form['business'] = $this
->getFieldsetElement($this
->t('Business Hours'));
$form['business']['businessHours'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Business Hours'),
'#description' => $this
->t('Emphasizes certain time slots on the calendar. By default, Monday-Friday, 9am-5pm. For better control, see below. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/businessHours', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['business']['businessHours'],
'#data_type' => 'bool',
'#fieldset' => 'business',
];
$form['business']['businessHours2'] = [
'#type' => 'textfield',
'#title' => t('Business hours format'),
'#description' => $this
->t('For fine-grain control over business hours enter key:value pairs for object properties. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/businessHours', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['business']['businessHours2'],
'#size' => '40',
'#fieldset' => 'business',
'#states' => [
'visible' => [
':input[name="style_options[business][businessHours]"]' => [
'checked' => TRUE,
],
],
],
];
$form['style'] = $this
->getFieldsetElement($this
->t('Appearance/Sizing'));
$form['style']['themeSystem'] = [
'#type' => 'select',
'#title' => $this
->t('Theme'),
'#options' => [
'standard' => $this
->t('Standard'),
'bootstrap' => $this
->t('Bootstrap 4'),
],
'#default_value' => $style_plugin->options['style']['themeSystem'],
'#fieldset' => 'style',
];
$form['style']['height'] = [
'#type' => 'textfield',
'#title' => t('Height'),
'#description' => $this
->t('Sets the height of the entire calendar, including header and footer. Enter a number, "parent", "auto" or name of function you have written for this feature. Default: This option is unset and the calendar\'s height is calculated by aspectRatio. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/sizing', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['style']['height'],
'#size' => '40',
'#fieldset' => 'style',
];
$form['style']['contentHeight'] = [
'#type' => 'textfield',
'#title' => t('View area height'),
'#description' => $this
->t('Sets the height of the view area of the calendar. Enter a number, "auto" or name of function you have written for this feature. Default: This option is unset and the calendar\'s height is calculated by aspectRatio. @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/sizing', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['style']['contentHeight'],
'#size' => '40',
'#fieldset' => 'style',
];
$form['style']['aspectRatio'] = [
'#type' => 'textfield',
'#title' => t('Width-height ratio'),
'#description' => $this
->t('Sets the width-to-height aspect ratio of the calendar. Enter a float. Default: 1.35 @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/sizing', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['style']['aspectRatio'],
'#size' => '40',
'#fieldset' => 'style',
];
$form['style']['handleWindowResize'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Resize calendar'),
'#description' => $this
->t('Automatically resize the calendar when the browser window resizes. Default: true @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/sizing', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['style']['handleWindowResize'],
'#data_type' => 'bool',
'#fieldset' => 'style',
];
$form['style']['windowResizeDelay'] = [
'#type' => 'textfield',
'#title' => $this
->t('Resize delay'),
'#description' => $this
->t('The time the calendar will wait to adjust its size after a window resize occurs, in milliseconds. Default: 100 @more-info', [
'@more-info' => Link::fromTextAndUrl($this
->t('More info'), Url::fromUri(self::FC_DOCS_URL . '/sizing', [
'attributes' => [
'target' => '_blank',
],
]))
->toString(),
]),
'#default_value' => $style_plugin->options['style']['windowResizeDelay'],
'#size' => '40',
'#fieldset' => 'style',
];
// Get the regular fields.
$field_options = $style_plugin->displayHandler
->getFieldLabels();
// Get the date fields.
$date_fields = $style_plugin
->parseFields();
$form['fields'] = $this
->getFieldsetElement($this
->t('Customise fields'), $this
->t('Customise the Drupal fields to use in the Calendar view.'));
$form['fields']['title'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Use a custom title'),
'#default_value' => $style_plugin->options['fields']['title'],
'#data_type' => 'bool',
'#fieldset' => 'fields',
];
$form['fields']['title_field'] = [
'#type' => 'select',
'#title' => $this
->t('Title field'),
'#options' => $field_options,
'#default_value' => $style_plugin->options['fields']['title_field'],
'#empty_option' => $this
->t('- Select -'),
'#description' => $this
->t('Choose the field with the custom title.'),
'#process' => [
'\\Drupal\\Core\\Render\\Element\\Select::processSelect',
],
'#states' => [
'visible' => [
':input[name="style_options[fields][title]"]' => [
'checked' => TRUE,
],
],
],
'#fieldset' => 'fields',
];
$form['fields']['url'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Use a custom URL'),
'#default_value' => $style_plugin->options['fields']['url'],
'#data_type' => 'bool',
'#fieldset' => 'fields',
];
$form['fields']['url_field'] = [
'#type' => 'select',
'#title' => $this
->t('URL field'),
'#options' => $field_options,
'#default_value' => $style_plugin->options['fields']['url_field'],
'#empty_option' => $this
->t('- Select -'),
'#description' => $this
->t('Choose the field with the custom link.'),
'#process' => [
'\\Drupal\\Core\\Render\\Element\\Select::processSelect',
],
'#states' => [
'visible' => [
':input[name="style_options[fields][url]"]' => [
'checked' => TRUE,
],
],
],
'#fieldset' => 'fields',
];
$form['fields']['date'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Use a custom date field'),
'#default_value' => $style_plugin->options['fields']['date'],
'#data_type' => 'bool',
'#fieldset' => 'fields',
];
$form['fields']['date_field'] = [
'#type' => 'select',
'#title' => $this
->t('Date fields'),
'#options' => $date_fields,
'#default_value' => $style_plugin->options['fields']['date_field'],
'#description' => $this
->t('Select one or more date fields.'),
'#multiple' => TRUE,
'#size' => count($date_fields),
'#process' => [
'\\Drupal\\Core\\Render\\Element\\Select::processSelect',
],
'#states' => [
'visible' => [
':input[name="style_options[fields][date]"]' => [
'checked' => TRUE,
],
],
],
'#fieldset' => 'fields',
];
// Disable form elements when not needed.
if (empty($field_options)) {
$form['fields']['#description'] = $this
->t('All the options are hidden, you need to add fields first.');
$form['fields']['title']['#type'] = 'hidden';
$form['fields']['url']['#type'] = 'hidden';
$form['fields']['date']['#type'] = 'hidden';
$form['fields']['title_field']['#disabled'] = TRUE;
$form['fields']['url_field']['#disabled'] = TRUE;
$form['fields']['date_field']['#disabled'] = TRUE;
}
elseif (empty($date_fields)) {
$form['fields']['date']['#type'] = 'hidden';
$form['fields']['date_field']['#disabled'] = TRUE;
}
// Custom CSS.
$form['#attached']['library'][] = 'fullcalendar/drupal.fullcalendar.admin';
}