diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..2a8e53f
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,14 @@
+{
+ "name": "drupal/reserve",
+ "type": "drupal-module",
+ "description": "Reservation system.",
+ "keywords": ["Drupal"],
+ "license": "GPL-2.0+",
+ "homepage": "https://www.drupal.org/project/reserve",
+ "minimum-stability": "dev",
+ "support": {
+ "issues": "https://www.drupal.org/project/issues/reserve",
+ "source": "http://cgit.drupalcode.org/reserve"
+ },
+ "require": { }
+}
diff --git a/config/install/core.entity_form_display.reserve_category.reserve_category.default.yml b/config/install/core.entity_form_display.reserve_category.reserve_category.default.yml
new file mode 100644
index 0000000..3af8f7f
--- /dev/null
+++ b/config/install/core.entity_form_display.reserve_category.reserve_category.default.yml
@@ -0,0 +1,63 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.field.reserve_category.reserve_category.reserve_setup_buffer
+ - field.field.reserve_category.reserve_category.reserve_takedown_buffer
+ - field.field.reserve_category.reserve_category.reserve_minadv_std
+ - field.field.reserve_category.reserve_category.reserve_minadv_ext
+ - field.field.reserve_category.reserve_category.reserve_maxadv_std
+ - field.field.reserve_category.reserve_category.reserve_maxadv_ext
+ module:
+ - reserve
+id: reserve_category.reserve_category.default
+targetEntityType: reserve_category
+bundle: reserve_category
+mode: default
+content:
+ name:
+ weight: -10
+ type: string_textfield
+ region: content
+ settings:
+ size: 60
+ placeholder: ''
+ third_party_settings: { }
+ reserve_setup_buffer:
+ weight: 1
+ settings: { }
+ third_party_settings: { }
+ type: options_select
+ region: content
+ reserve_takedown_buffer:
+ weight: 2
+ settings: { }
+ third_party_settings: { }
+ type: options_select
+ region: content
+ reserve_minadv_std:
+ weight: 3
+ settings: { }
+ third_party_settings: { }
+ type: options_select
+ region: content
+ reserve_minadv_ext:
+ weight: 4
+ settings: { }
+ third_party_settings: { }
+ type: options_select
+ region: content
+ reserve_maxadv_std:
+ weight: 5
+ settings: { }
+ third_party_settings: { }
+ type: options_select
+ region: content
+ reserve_maxadv_ext:
+ weight: 6
+ settings: { }
+ third_party_settings: { }
+ type: options_select
+ region: content
+hidden:
+ user_id: true
\ No newline at end of file
diff --git a/config/install/core.entity_form_display.reserve_reservation.reserve_reservation.default.yml b/config/install/core.entity_form_display.reserve_reservation.reserve_reservation.default.yml
new file mode 100644
index 0000000..98a2e0c
--- /dev/null
+++ b/config/install/core.entity_form_display.reserve_reservation.reserve_reservation.default.yml
@@ -0,0 +1,108 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.field.reserve_reservation.reserve_reservation.reservable_content_type
+ - field.field.reserve_reservation.reserve_reservation.reservable_id
+ - field.field.reserve_reservation.reserve_reservation.reservation_date
+ - field.field.reserve_reservation.reserve_reservation.reservation_ebundle
+ - field.field.reserve_reservation.reserve_reservation.reservation_length
+ - field.field.reserve_reservation.reserve_reservation.reservation_private
+ - field.field.reserve_reservation.reserve_reservation.reservation_repeat_type
+ - field.field.reserve_reservation.reserve_reservation.reservation_repeat_until
+ - field.field.reserve_reservation.reserve_reservation.reservation_series_id
+ - field.field.reserve_reservation.reserve_reservation.reservation_time
+ module:
+ - datetime
+ - reserve
+_core:
+ default_config_hash: LCDU3FONhj8ylh6Px2atCBl0dR8sFemI3vnXDt5TyCE
+id: reserve_reservation.reserve_reservation.default
+targetEntityType: reserve_reservation
+bundle: reserve_reservation
+mode: default
+content:
+ name:
+ type: string_textfield
+ weight: 0
+ settings:
+ size: 60
+ placeholder: ''
+ third_party_settings: { }
+ region: content
+ reservable_content_type:
+ type: options_select
+ weight: 9
+ region: content
+ settings: { }
+ third_party_settings: { }
+ reservable_id:
+ weight: 9
+ settings:
+ placeholder: ''
+ third_party_settings: { }
+ type: number
+ region: content
+ reservation_date:
+ weight: 2
+ settings: { }
+ third_party_settings: { }
+ type: datetime_default
+ region: content
+ reservation_length:
+ weight: 4
+ settings: { }
+ third_party_settings: { }
+ type: options_select
+ region: content
+ reservation_private:
+ weight: 1
+ settings:
+ display_label: true
+ third_party_settings: { }
+ type: boolean_checkbox
+ region: content
+ reservation_repeat_type:
+ weight: 5
+ settings: { }
+ third_party_settings: { }
+ type: options_select
+ region: content
+ reservation_repeat_until:
+ weight: 6
+ settings: { }
+ third_party_settings: { }
+ type: datetime_default
+ region: content
+ reservation_series_id:
+ weight: 7
+ settings:
+ placeholder: ''
+ third_party_settings: { }
+ type: number
+ region: content
+ reservation_time:
+ weight: 3
+ settings:
+ size: 60
+ placeholder: ''
+ third_party_settings: { }
+ type: string_textfield
+ region: content
+ user_id:
+ type: entity_reference_autocomplete
+ weight: 8
+ settings:
+ match_operator: CONTAINS
+ size: 60
+ placeholder: ''
+ third_party_settings: { }
+ region: content
+ reservation_ebundle:
+ weight: 9
+ settings:
+ size: 60
+ placeholder: ''
+ third_party_settings: { }
+ type: string_textfield
+ region: content
diff --git a/config/install/core.entity_view_display.reserve_category.reserve_category.default.yml b/config/install/core.entity_view_display.reserve_category.reserve_category.default.yml
new file mode 100644
index 0000000..9bf5717
--- /dev/null
+++ b/config/install/core.entity_view_display.reserve_category.reserve_category.default.yml
@@ -0,0 +1,72 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.field.reserve_category.reserve_category.reserve_setup_buffer
+ - field.field.reserve_category.reserve_category.reserve_takedown_buffer
+ - field.field.reserve_category.reserve_category.reserve_minadv_std
+ - field.field.reserve_category.reserve_category.reserve_minadv_ext
+ - field.field.reserve_category.reserve_category.reserve_maxadv_std
+ - field.field.reserve_category.reserve_category.reserve_maxadv_ext
+ module:
+ - options
+ - reserve
+ - user
+id: reserve_category.reserve_category.default
+targetEntityType: reserve_category
+bundle: reserve_category
+mode: default
+content:
+ name:
+ weight: -10
+ label: hidden
+ type: string
+ region: content
+ settings:
+ link_to_entity: false
+ third_party_settings: { }
+ reserve_setup_buffer:
+ weight: 1
+ label: inline
+ type: list_default
+ region: content
+ settings: { }
+ third_party_settings: { }
+ reserve_takedown_buffer:
+ weight: 2
+ label: inline
+ type: list_default
+ region: content
+ settings: { }
+ third_party_settings: { }
+ reserve_minadv_std:
+ weight: 3
+ label: inline
+ type: list_default
+ region: content
+ settings: { }
+ third_party_settings: { }
+ reserve_minadv_ext:
+ weight: 4
+ label: inline
+ type: list_default
+ region: content
+ settings: { }
+ third_party_settings: { }
+ reserve_maxadv_std:
+ weight: 5
+ label: inline
+ type: list_default
+ region: content
+ settings: { }
+ third_party_settings: { }
+ reserve_maxadv_ext:
+ weight: 6
+ label: inline
+ type: list_default
+ region: content
+ settings: { }
+ third_party_settings: { }
+hidden:
+ user_id: true
+
diff --git a/config/install/core.entity_view_display.reserve_reservation.reserve_reservation.default.yml b/config/install/core.entity_view_display.reserve_reservation.reserve_reservation.default.yml
new file mode 100644
index 0000000..9d53bbe
--- /dev/null
+++ b/config/install/core.entity_view_display.reserve_reservation.reserve_reservation.default.yml
@@ -0,0 +1,104 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.field.reserve_reservation.reserve_reservation.reservable_content_type
+ - field.field.reserve_reservation.reserve_reservation.reservable_id
+ - field.field.reserve_reservation.reserve_reservation.reservation_date
+ - field.field.reserve_reservation.reserve_reservation.reservation_ebundle
+ - field.field.reserve_reservation.reserve_reservation.reservation_length
+ - field.field.reserve_reservation.reserve_reservation.reservation_private
+ - field.field.reserve_reservation.reserve_reservation.reservation_repeat_type
+ - field.field.reserve_reservation.reserve_reservation.reservation_repeat_until
+ - field.field.reserve_reservation.reserve_reservation.reservation_series_id
+ - field.field.reserve_reservation.reserve_reservation.reservation_time
+ module:
+ - datetime
+ - options
+ - reserve
+ - user
+_core:
+ default_config_hash: 2s_-pGyf2O4EgKGyzwqMfNGNDoQcLHAdTET2ioShrjo
+id: reserve_reservation.reserve_reservation.default
+targetEntityType: reserve_reservation
+bundle: reserve_reservation
+mode: default
+content:
+ name:
+ label: above
+ type: string
+ weight: -4
+ settings:
+ link_to_entity: false
+ third_party_settings: { }
+ region: content
+ reservation_date:
+ weight: 7
+ label: above
+ settings:
+ format_type: medium
+ timezone_override: ''
+ third_party_settings: { }
+ type: datetime_default
+ region: content
+ reservation_length:
+ weight: 2
+ label: above
+ settings: { }
+ third_party_settings: { }
+ type: list_default
+ region: content
+ reservation_private:
+ weight: 1
+ label: above
+ settings:
+ format: default
+ format_custom_false: ''
+ format_custom_true: ''
+ third_party_settings: { }
+ type: boolean
+ region: content
+ reservation_repeat_type:
+ weight: 3
+ label: above
+ settings: { }
+ third_party_settings: { }
+ type: list_default
+ region: content
+ reservation_repeat_until:
+ weight: 4
+ label: above
+ settings:
+ format_type: medium
+ timezone_override: ''
+ third_party_settings: { }
+ type: datetime_default
+ region: content
+ reservation_series_id:
+ weight: 6
+ label: above
+ settings:
+ thousand_separator: ''
+ prefix_suffix: true
+ third_party_settings: { }
+ type: number_integer
+ region: content
+ reservation_time:
+ weight: 5
+ label: above
+ settings:
+ link_to_entity: false
+ third_party_settings: { }
+ type: string
+ region: content
+ user_id:
+ label: hidden
+ type: author
+ weight: 0
+ settings: { }
+ third_party_settings: { }
+ region: content
+hidden:
+ reservable_content_type: true
+ reservable_id: true
+ reservation_ebundle: true
diff --git a/config/install/field.field.reserve_category.reserve_category.reserve_maxadv_ext.yml b/config/install/field.field.reserve_category.reserve_category.reserve_maxadv_ext.yml
new file mode 100644
index 0000000..8d75cf9
--- /dev/null
+++ b/config/install/field.field.reserve_category.reserve_category.reserve_maxadv_ext.yml
@@ -0,0 +1,22 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_category.reserve_maxadv_ext
+ module:
+ - options
+ - reserve
+id: reserve_category.reserve_category.reserve_maxadv_ext
+field_name: reserve_maxadv_ext
+entity_type: reserve_category
+bundle: reserve_category
+label: 'Maximum Advanced Booking (extended)'
+description: 'Maximum number of days in advance that a booking may be made (extended user). Default value is 180.'
+required: true
+translatable: false
+default_value:
+ -
+ value: 180
+default_value_callback: ''
+settings: { }
+field_type: list_integer
\ No newline at end of file
diff --git a/config/install/field.field.reserve_category.reserve_category.reserve_maxadv_std.yml b/config/install/field.field.reserve_category.reserve_category.reserve_maxadv_std.yml
new file mode 100644
index 0000000..b678dcc
--- /dev/null
+++ b/config/install/field.field.reserve_category.reserve_category.reserve_maxadv_std.yml
@@ -0,0 +1,22 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_category.reserve_maxadv_std
+ module:
+ - options
+ - reserve
+id: reserve_category.reserve_category.reserve_maxadv_std
+field_name: reserve_maxadv_std
+entity_type: reserve_category
+bundle: reserve_category
+label: 'Maximum Advanced Booking (standard)'
+description: 'Maximum number of days in advance that a booking may be made (standard user). Default value is 14.'
+required: true
+translatable: false
+default_value:
+ -
+ value: 14
+default_value_callback: ''
+settings: { }
+field_type: list_integer
\ No newline at end of file
diff --git a/config/install/field.field.reserve_category.reserve_category.reserve_minadv_ext.yml b/config/install/field.field.reserve_category.reserve_category.reserve_minadv_ext.yml
new file mode 100644
index 0000000..3ddcd9d
--- /dev/null
+++ b/config/install/field.field.reserve_category.reserve_category.reserve_minadv_ext.yml
@@ -0,0 +1,22 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_category.reserve_minadv_ext
+ module:
+ - options
+ - reserve
+id: reserve_category.reserve_category.reserve_minadv_ext
+field_name: reserve_minadv_ext
+entity_type: reserve_category
+bundle: reserve_category
+label: 'Minimum Advance Booking (extended)'
+description: 'Minimum number of days in advance that a booking may be made (extended user). Default value is 0.'
+required: true
+translatable: false
+default_value:
+ -
+ value: 0
+default_value_callback: ''
+settings: { }
+field_type: list_integer
\ No newline at end of file
diff --git a/config/install/field.field.reserve_category.reserve_category.reserve_minadv_std.yml b/config/install/field.field.reserve_category.reserve_category.reserve_minadv_std.yml
new file mode 100644
index 0000000..d1f544b
--- /dev/null
+++ b/config/install/field.field.reserve_category.reserve_category.reserve_minadv_std.yml
@@ -0,0 +1,22 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_category.reserve_minadv_std
+ module:
+ - options
+ - reserve
+id: reserve_category.reserve_category.reserve_minadv_std
+field_name: reserve_minadv_std
+entity_type: reserve_category
+bundle: reserve_category
+label: 'Minimum Advanced Booking (standard)'
+description: 'Minimum number of days in advance that a booking may be made (standard user). Default value is 0.'
+required: true
+translatable: false
+default_value:
+ -
+ value: 0
+default_value_callback: ''
+settings: { }
+field_type: list_integer
\ No newline at end of file
diff --git a/config/install/field.field.reserve_category.reserve_category.reserve_setup_buffer.yml b/config/install/field.field.reserve_category.reserve_category.reserve_setup_buffer.yml
new file mode 100644
index 0000000..3b1ac9e
--- /dev/null
+++ b/config/install/field.field.reserve_category.reserve_category.reserve_setup_buffer.yml
@@ -0,0 +1,22 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_category.reserve_setup_buffer
+ module:
+ - options
+ - reserve
+id: reserve_category.reserve_category.reserve_setup_buffer
+field_name: reserve_setup_buffer
+entity_type: reserve_category
+bundle: reserve_category
+label: 'Setup Buffer'
+description: 'Setup time required for reservations for all items in this category. This time will be added to each reservation to extend the reserved calendar time.'
+required: true
+translatable: false
+default_value:
+ -
+ value: 0
+default_value_callback: ''
+settings: { }
+field_type: list_integer
\ No newline at end of file
diff --git a/config/install/field.field.reserve_category.reserve_category.reserve_takedown_buffer.yml b/config/install/field.field.reserve_category.reserve_category.reserve_takedown_buffer.yml
new file mode 100644
index 0000000..597a5e6
--- /dev/null
+++ b/config/install/field.field.reserve_category.reserve_category.reserve_takedown_buffer.yml
@@ -0,0 +1,22 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_category.reserve_takedown_buffer
+ module:
+ - options
+ - reserve
+id: reserve_category.reserve_category.reserve_takedown_buffer
+field_name: reserve_takedown_buffer
+entity_type: reserve_category
+bundle: reserve_category
+label: 'Takedown Buffer'
+description: 'Takedown time required for reservations for all items in this category. This time will be added to each reservation to extend the reserved calendar time.'
+required: true
+translatable: false
+default_value:
+ -
+ value: 0
+default_value_callback: ''
+settings: { }
+field_type: list_integer
\ No newline at end of file
diff --git a/config/install/field.field.reserve_reservation.reserve_reservation.reservable_content_type.yml b/config/install/field.field.reserve_reservation.reserve_reservation.reservable_content_type.yml
new file mode 100644
index 0000000..97794c0
--- /dev/null
+++ b/config/install/field.field.reserve_reservation.reserve_reservation.reservable_content_type.yml
@@ -0,0 +1,21 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_reservation.reservable_content_type
+ module:
+ - options
+ - reserve
+id: reserve_reservation.reserve_reservation.reservable_content_type
+field_name: reservable_content_type
+entity_type: reserve_reservation
+bundle: reserve_reservation
+label: 'Reservable Entity Type'
+description: 'Holds the type of content entity that this reservation is being made on. Set through the UI.'
+required: false
+translatable: false
+default_value:
+default_value_callback: ''
+settings: { }
+field_type: list_string
+locked: true
\ No newline at end of file
diff --git a/config/install/field.field.reserve_reservation.reserve_reservation.reservable_id.yml b/config/install/field.field.reserve_reservation.reserve_reservation.reservable_id.yml
new file mode 100644
index 0000000..6588ca6
--- /dev/null
+++ b/config/install/field.field.reserve_reservation.reserve_reservation.reservable_id.yml
@@ -0,0 +1,24 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_reservation.reservable_id
+ module:
+ - reserve
+id: reserve_reservation.reserve_reservation.reservable_id
+field_name: reservable_id
+entity_type: reserve_reservation
+bundle: reserve_reservation
+label: 'Reservable ID'
+description: 'Holds the entity id of the item being reserved. Automatically added through the calendar UI.'
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings:
+ min: null
+ max: null
+ prefix: ''
+ suffix: ''
+field_type: integer
+locked: true
\ No newline at end of file
diff --git a/config/install/field.field.reserve_reservation.reserve_reservation.reservation_date.yml b/config/install/field.field.reserve_reservation.reserve_reservation.reservation_date.yml
new file mode 100644
index 0000000..d161969
--- /dev/null
+++ b/config/install/field.field.reserve_reservation.reserve_reservation.reservation_date.yml
@@ -0,0 +1,21 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_reservation.reservation_date
+ module:
+ - datetime
+ - reserve
+id: reserve_reservation.reserve_reservation.reservation_date
+field_name: reservation_date
+entity_type: reserve_reservation
+bundle: reserve_reservation
+label: Date
+description: ''
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings: { }
+field_type: datetime
+locked: true
\ No newline at end of file
diff --git a/config/install/field.field.reserve_reservation.reserve_reservation.reservation_ebundle.yml b/config/install/field.field.reserve_reservation.reserve_reservation.reservation_ebundle.yml
new file mode 100644
index 0000000..5e04ff6
--- /dev/null
+++ b/config/install/field.field.reserve_reservation.reserve_reservation.reservation_ebundle.yml
@@ -0,0 +1,19 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_reservation.reservation_ebundle
+ module:
+ - reserve
+id: reserve_reservation.reserve_reservation.reservation_ebundle
+field_name: reservation_ebundle
+entity_type: reserve_reservation
+bundle: reserve_reservation
+label: Ebundle
+description: ''
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings: { }
+field_type: string
diff --git a/config/install/field.field.reserve_reservation.reserve_reservation.reservation_length.yml b/config/install/field.field.reserve_reservation.reserve_reservation.reservation_length.yml
new file mode 100644
index 0000000..d7f6d57
--- /dev/null
+++ b/config/install/field.field.reserve_reservation.reserve_reservation.reservation_length.yml
@@ -0,0 +1,20 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_reservation.reservation_length
+ module:
+ - options
+ - reserve
+id: reserve_reservation.reserve_reservation.reservation_length
+field_name: reservation_length
+entity_type: reserve_reservation
+bundle: reserve_reservation
+label: 'Length'
+description: ''
+required: true
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings: { }
+field_type: list_integer
\ No newline at end of file
diff --git a/config/install/field.field.reserve_reservation.reserve_reservation.reservation_private.yml b/config/install/field.field.reserve_reservation.reserve_reservation.reservation_private.yml
new file mode 100644
index 0000000..9e43a94
--- /dev/null
+++ b/config/install/field.field.reserve_reservation.reserve_reservation.reservation_private.yml
@@ -0,0 +1,23 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_reservation.reservation_private
+ module:
+ - reserve
+id: reserve_reservation.reserve_reservation.reservation_private
+field_name: reservation_private
+entity_type: reserve_reservation
+bundle: reserve_reservation
+label: Private
+description: 'Check this to hide the Group Name for this reservation.'
+required: false
+translatable: false
+default_value:
+ -
+ value: 0
+default_value_callback: ''
+settings:
+ on_label: Private
+ off_label: Public
+field_type: boolean
diff --git a/config/install/field.field.reserve_reservation.reserve_reservation.reservation_repeat_type.yml b/config/install/field.field.reserve_reservation.reserve_reservation.reservation_repeat_type.yml
new file mode 100644
index 0000000..1cbf039
--- /dev/null
+++ b/config/install/field.field.reserve_reservation.reserve_reservation.reservation_repeat_type.yml
@@ -0,0 +1,22 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_reservation.reservation_repeat_type
+ module:
+ - options
+ - reserve
+id: reserve_reservation.reserve_reservation.reservation_repeat_type
+field_name: reservation_repeat_type
+entity_type: reserve_reservation
+bundle: reserve_reservation
+label: 'Repeat Type'
+description: ''
+required: true
+translatable: false
+default_value:
+ -
+ value: 0
+default_value_callback: ''
+settings: { }
+field_type: list_integer
diff --git a/config/install/field.field.reserve_reservation.reserve_reservation.reservation_repeat_until.yml b/config/install/field.field.reserve_reservation.reserve_reservation.reservation_repeat_until.yml
new file mode 100644
index 0000000..cd7e574
--- /dev/null
+++ b/config/install/field.field.reserve_reservation.reserve_reservation.reservation_repeat_until.yml
@@ -0,0 +1,20 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_reservation.reservation_repeat_until
+ module:
+ - datetime
+ - reserve
+id: reserve_reservation.reserve_reservation.reservation_repeat_until
+field_name: reservation_repeat_until
+entity_type: reserve_reservation
+bundle: reserve_reservation
+label: 'Repeat Until'
+description: ''
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings: { }
+field_type: datetime
\ No newline at end of file
diff --git a/config/install/field.field.reserve_reservation.reserve_reservation.reservation_series_id.yml b/config/install/field.field.reserve_reservation.reserve_reservation.reservation_series_id.yml
new file mode 100644
index 0000000..8952176
--- /dev/null
+++ b/config/install/field.field.reserve_reservation.reserve_reservation.reservation_series_id.yml
@@ -0,0 +1,23 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_reservation.reservation_series_id
+ module:
+ - reserve
+id: reserve_reservation.reserve_reservation.reservation_series_id
+field_name: reservation_series_id
+entity_type: reserve_reservation
+bundle: reserve_reservation
+label: 'Series ID'
+description: ''
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings:
+ min: null
+ max: null
+ prefix: ''
+ suffix: ''
+field_type: integer
\ No newline at end of file
diff --git a/config/install/field.field.reserve_reservation.reserve_reservation.reservation_time.yml b/config/install/field.field.reserve_reservation.reserve_reservation.reservation_time.yml
new file mode 100644
index 0000000..59a1d04
--- /dev/null
+++ b/config/install/field.field.reserve_reservation.reserve_reservation.reservation_time.yml
@@ -0,0 +1,19 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_reservation.reservation_time
+ module:
+ - reserve
+id: reserve_reservation.reserve_reservation.reservation_time
+field_name: reservation_time
+entity_type: reserve_reservation
+bundle: reserve_reservation
+label: Time
+description: ''
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings: { }
+field_type: string
\ No newline at end of file
diff --git a/config/install/field.storage.reserve_category.reserve_maxadv_ext.yml b/config/install/field.storage.reserve_category.reserve_maxadv_ext.yml
new file mode 100644
index 0000000..d6eba50
--- /dev/null
+++ b/config/install/field.storage.reserve_category.reserve_maxadv_ext.yml
@@ -0,0 +1,34 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - options
+ - reserve
+id: reserve_category.reserve_maxadv_ext
+field_name: reserve_maxadv_ext
+entity_type: reserve_category
+type: list_integer
+settings:
+ allowed_values:
+ -
+ value: 30
+ label: 30
+ -
+ value: 60
+ label: 60
+ -
+ value: 90
+ label: 90
+ -
+ value: 180
+ label: 180
+ -
+ value: 360
+ label: 360
+module: options
+locked: true
+cardinality: 1
+translatable: false
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
\ No newline at end of file
diff --git a/config/install/field.storage.reserve_category.reserve_maxadv_std.yml b/config/install/field.storage.reserve_category.reserve_maxadv_std.yml
new file mode 100644
index 0000000..9b2bcc6
--- /dev/null
+++ b/config/install/field.storage.reserve_category.reserve_maxadv_std.yml
@@ -0,0 +1,34 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - options
+ - reserve
+id: reserve_category.reserve_maxadv_std
+field_name: reserve_maxadv_std
+entity_type: reserve_category
+type: list_integer
+settings:
+ allowed_values:
+ -
+ value: 7
+ label: 7
+ -
+ value: 14
+ label: 14
+ -
+ value: 30
+ label: 30
+ -
+ value: 60
+ label: 60
+ -
+ value: 90
+ label: 90
+module: options
+locked: true
+cardinality: 1
+translatable: false
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
\ No newline at end of file
diff --git a/config/install/field.storage.reserve_category.reserve_minadv_ext.yml b/config/install/field.storage.reserve_category.reserve_minadv_ext.yml
new file mode 100644
index 0000000..e809ce9
--- /dev/null
+++ b/config/install/field.storage.reserve_category.reserve_minadv_ext.yml
@@ -0,0 +1,34 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - options
+ - reserve
+id: reserve_category.reserve_minadv_ext
+field_name: reserve_minadv_ext
+entity_type: reserve_category
+type: list_integer
+settings:
+ allowed_values:
+ -
+ value: 0
+ label: 0
+ -
+ value: 1
+ label: 1
+ -
+ value: 7
+ label: 7
+ -
+ value: 14
+ label: 14
+ -
+ value: 30
+ label: 30
+module: options
+locked: true
+cardinality: 1
+translatable: false
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
\ No newline at end of file
diff --git a/config/install/field.storage.reserve_category.reserve_minadv_std.yml b/config/install/field.storage.reserve_category.reserve_minadv_std.yml
new file mode 100644
index 0000000..ad47b1d
--- /dev/null
+++ b/config/install/field.storage.reserve_category.reserve_minadv_std.yml
@@ -0,0 +1,34 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - options
+ - reserve
+id: reserve_category.reserve_minadv_std
+field_name: reserve_minadv_std
+entity_type: reserve_category
+type: list_integer
+settings:
+ allowed_values:
+ -
+ value: 0
+ label: 0
+ -
+ value: 1
+ label: 1
+ -
+ value: 7
+ label: 7
+ -
+ value: 14
+ label: 14
+ -
+ value: 30
+ label: 30
+module: options
+locked: true
+cardinality: 1
+translatable: false
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
\ No newline at end of file
diff --git a/config/install/field.storage.reserve_category.reserve_setup_buffer.yml b/config/install/field.storage.reserve_category.reserve_setup_buffer.yml
new file mode 100644
index 0000000..23d54cb
--- /dev/null
+++ b/config/install/field.storage.reserve_category.reserve_setup_buffer.yml
@@ -0,0 +1,35 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - options
+ - reserve
+id: reserve_category.reserve_setup_buffer
+field_name: reserve_setup_buffer
+entity_type: reserve_category
+type: list_integer
+settings:
+ allowed_values:
+ -
+ value: 0
+ label: none
+ -
+ value: 30
+ label: '30 minutes'
+ -
+ value: 60
+ label: '1 hour'
+ -
+ value: 90
+ label: '90 minutes'
+ -
+ value: 120
+ label: '2 hours'
+ allowed_values_function: ''
+module: options
+locked: true
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
\ No newline at end of file
diff --git a/config/install/field.storage.reserve_category.reserve_takedown_buffer.yml b/config/install/field.storage.reserve_category.reserve_takedown_buffer.yml
new file mode 100644
index 0000000..4923d57
--- /dev/null
+++ b/config/install/field.storage.reserve_category.reserve_takedown_buffer.yml
@@ -0,0 +1,35 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - options
+ - reserve
+id: reserve_category.reserve_takedown_buffer
+field_name: reserve_takedown_buffer
+entity_type: reserve_category
+type: list_integer
+settings:
+ allowed_values:
+ -
+ value: 0
+ label: none
+ -
+ value: 30
+ label: '30 minutes'
+ -
+ value: 60
+ label: '1 hour'
+ -
+ value: 90
+ label: '90 minutes'
+ -
+ value: 120
+ label: '2 hours'
+ allowed_values_function: ''
+module: options
+locked: true
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/config/install/field.storage.reserve_reservation.reservable_content_type.yml b/config/install/field.storage.reserve_reservation.reservable_content_type.yml
new file mode 100644
index 0000000..2e15f54
--- /dev/null
+++ b/config/install/field.storage.reserve_reservation.reservable_content_type.yml
@@ -0,0 +1,19 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - options
+ - reserve
+id: reserve_reservation.reservable_content_type
+field_name: reservable_content_type
+entity_type: reserve_reservation
+type: list_string
+settings:
+ allowed_values_function: 'reserve_site_entity_types'
+module: options
+locked: true
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
\ No newline at end of file
diff --git a/config/install/field.storage.reserve_reservation.reservable_id.yml b/config/install/field.storage.reserve_reservation.reservable_id.yml
new file mode 100644
index 0000000..0a38f90
--- /dev/null
+++ b/config/install/field.storage.reserve_reservation.reservable_id.yml
@@ -0,0 +1,19 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - reserve
+id: reserve_reservation.reservable_id
+field_name: reservable_id
+entity_type: reserve_reservation
+type: integer
+settings:
+ unsigned: true
+ size: normal
+module: core
+locked: true
+cardinality: 1
+translatable: false
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
\ No newline at end of file
diff --git a/config/install/field.storage.reserve_reservation.reservation_date.yml b/config/install/field.storage.reserve_reservation.reservation_date.yml
new file mode 100644
index 0000000..287ca8f
--- /dev/null
+++ b/config/install/field.storage.reserve_reservation.reservation_date.yml
@@ -0,0 +1,19 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - datetime
+ - reserve
+id: reserve_reservation.reservation_date
+field_name: reservation_date
+entity_type: reserve_reservation
+type: datetime
+settings:
+ datetime_type: date
+module: datetime
+locked: true
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
\ No newline at end of file
diff --git a/config/install/field.storage.reserve_reservation.reservation_ebundle.yml b/config/install/field.storage.reserve_reservation.reservation_ebundle.yml
new file mode 100644
index 0000000..694e16a
--- /dev/null
+++ b/config/install/field.storage.reserve_reservation.reservation_ebundle.yml
@@ -0,0 +1,20 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - reserve
+id: reserve_reservation.reservation_ebundle
+field_name: reservation_ebundle
+entity_type: reserve_reservation
+type: string
+settings:
+ max_length: 255
+ is_ascii: false
+ case_sensitive: false
+module: core
+locked: true
+cardinality: 1
+translatable: false
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/config/install/field.storage.reserve_reservation.reservation_length.yml b/config/install/field.storage.reserve_reservation.reservation_length.yml
new file mode 100644
index 0000000..e3f8f85
--- /dev/null
+++ b/config/install/field.storage.reserve_reservation.reservation_length.yml
@@ -0,0 +1,49 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - reserve
+ - options
+id: reserve_reservation.reservation_length
+field_name: reservation_length
+entity_type: reserve_reservation
+type: list_integer
+settings:
+ allowed_values:
+ -
+ value: 30
+ label: '30 minutes'
+ -
+ value: 60
+ label: '1 hour'
+ -
+ value: 90
+ label: '1.5 hours'
+ -
+ value: 120
+ label: '2 hours'
+ -
+ value: 150
+ label: '2.5 hours'
+ -
+ value: 180
+ label: '3 hours'
+ -
+ value: 210
+ label: '3.5 hours'
+ -
+ value: 240
+ label: '4 hours'
+ -
+ value: 270
+ label: '4.5 hours'
+ -
+ value: 300
+ label: '5 hours'
+module: core
+locked: true
+cardinality: 1
+translatable: false
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/config/install/field.storage.reserve_reservation.reservation_private.yml b/config/install/field.storage.reserve_reservation.reservation_private.yml
new file mode 100644
index 0000000..5ba9805
--- /dev/null
+++ b/config/install/field.storage.reserve_reservation.reservation_private.yml
@@ -0,0 +1,17 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - reserve
+id: reserve_reservation.reservation_private
+field_name: reservation_private
+entity_type: reserve_reservation
+type: boolean
+settings: { }
+module: core
+locked: true
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/config/install/field.storage.reserve_reservation.reservation_repeat_type.yml b/config/install/field.storage.reserve_reservation.reservation_repeat_type.yml
new file mode 100644
index 0000000..d881f82
--- /dev/null
+++ b/config/install/field.storage.reserve_reservation.reservation_repeat_type.yml
@@ -0,0 +1,29 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - options
+ - reserve
+id: reserve_reservation.reservation_repeat_type
+field_name: reservation_repeat_type
+entity_type: reserve_reservation
+type: list_integer
+settings:
+ allowed_values:
+ -
+ value: 0
+ label: 'No repeat'
+ -
+ value: 1
+ label: 'Repeat all days until'
+ -
+ value: 2
+ label: 'Repeat this day of the week until'
+ allowed_values_function: ''
+module: options
+locked: true
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/config/install/field.storage.reserve_reservation.reservation_repeat_until.yml b/config/install/field.storage.reserve_reservation.reservation_repeat_until.yml
new file mode 100644
index 0000000..75a48a8
--- /dev/null
+++ b/config/install/field.storage.reserve_reservation.reservation_repeat_until.yml
@@ -0,0 +1,19 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - datetime
+ - reserve
+id: reserve_reservation.reservation_repeat_until
+field_name: reservation_repeat_until
+entity_type: reserve_reservation
+type: datetime
+settings:
+ datetime_type: date
+module: datetime
+locked: true
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
\ No newline at end of file
diff --git a/config/install/field.storage.reserve_reservation.reservation_series_id.yml b/config/install/field.storage.reserve_reservation.reservation_series_id.yml
new file mode 100644
index 0000000..caabcb8
--- /dev/null
+++ b/config/install/field.storage.reserve_reservation.reservation_series_id.yml
@@ -0,0 +1,19 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - reserve
+id: reserve_reservation.reservation_series_id
+field_name: reservation_series_id
+entity_type: reserve_reservation
+type: integer
+settings:
+ unsigned: false
+ size: normal
+module: core
+locked: true
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
\ No newline at end of file
diff --git a/config/install/field.storage.reserve_reservation.reservation_time.yml b/config/install/field.storage.reserve_reservation.reservation_time.yml
new file mode 100644
index 0000000..f7818b0
--- /dev/null
+++ b/config/install/field.storage.reserve_reservation.reservation_time.yml
@@ -0,0 +1,20 @@
+langcode: en
+status: true
+dependencies:
+ module:
+ - reserve
+id: reserve_reservation.reservation_time
+field_name: reservation_time
+entity_type: reserve_reservation
+type: string
+settings:
+ max_length: 255
+ is_ascii: false
+ case_sensitive: false
+module: core
+locked: true
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
\ No newline at end of file
diff --git a/config/install/reserve.hours.yml b/config/install/reserve.hours.yml
new file mode 100644
index 0000000..e69de29
diff --git a/config/install/reserve.settings.yml b/config/install/reserve.settings.yml
new file mode 100644
index 0000000..6b5f883
--- /dev/null
+++ b/config/install/reserve.settings.yml
@@ -0,0 +1,3 @@
+hour_format: 0
+max_length_standard: 120
+max_length_admin: 180
\ No newline at end of file
diff --git a/config/install/views.view.reservations.yml b/config/install/views.view.reservations.yml
new file mode 100644
index 0000000..33d6770
--- /dev/null
+++ b/config/install/views.view.reservations.yml
@@ -0,0 +1,1161 @@
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.reserve_reservation.reservable_content_type
+ - field.storage.reserve_reservation.reservation_date
+ - field.storage.reserve_reservation.reservation_ebundle
+ - field.storage.reserve_reservation.reservation_length
+ - field.storage.reserve_reservation.reservation_private
+ - field.storage.reserve_reservation.reservation_repeat_type
+ - field.storage.reserve_reservation.reservation_repeat_until
+ - field.storage.reserve_reservation.reservation_time
+ - system.menu.admin
+ module:
+ - datetime
+ - options
+ - reserve
+ - views_bulk_operations
+_core:
+ default_config_hash: qtxsAzivRyJgkwE59iiTdA2ucLdj2OtA9MwdI-OUYzI
+id: reservations
+label: Reservations
+module: views
+description: ''
+tag: ''
+base_table: reserve_reservation_field_data
+base_field: id
+core: 8.x
+display:
+ default:
+ display_plugin: default
+ id: default
+ display_title: Master
+ position: 0
+ display_options:
+ access:
+ type: none
+ options: { }
+ cache:
+ type: tag
+ options: { }
+ query:
+ type: views_query
+ options:
+ disable_sql_rewrite: false
+ distinct: false
+ replica: false
+ query_comment: ''
+ query_tags: { }
+ exposed_form:
+ type: basic
+ options:
+ submit_button: Apply
+ reset_button: false
+ reset_button_label: Reset
+ exposed_sorts_label: 'Sort by'
+ expose_sort_order: true
+ sort_asc_label: Asc
+ sort_desc_label: Desc
+ pager:
+ type: full
+ options:
+ items_per_page: 40
+ offset: 0
+ id: 0
+ total_pages: null
+ tags:
+ previous: ‹‹
+ next: ››
+ first: '« First'
+ last: 'Last »'
+ expose:
+ items_per_page: false
+ items_per_page_label: 'Items per page'
+ items_per_page_options: '5, 10, 25, 50'
+ items_per_page_options_all: false
+ items_per_page_options_all_label: '- All -'
+ offset: false
+ offset_label: Offset
+ quantity: 9
+ style:
+ type: table
+ options:
+ grouping: { }
+ row_class: ''
+ default_row_class: true
+ override: true
+ sticky: false
+ caption: ''
+ summary: ''
+ description: ''
+ columns:
+ views_bulk_operations_bulk_form: views_bulk_operations_bulk_form
+ name: name
+ reservation_date: reservation_date
+ reservation_time: reservation_date
+ reservation_length: reservation_date
+ reservation_private: reservation_private
+ reservation_repeat_type: reservation_repeat_type
+ reservation_repeat_until: reservation_repeat_type
+ reservable_content_type: reservable_content_type
+ reservation_ebundle: reservable_content_type
+ operations: operations
+ info:
+ views_bulk_operations_bulk_form:
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ name:
+ sortable: true
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ reservation_date:
+ sortable: true
+ default_sort_order: asc
+ align: ''
+ separator: ' '
+ empty_column: false
+ responsive: ''
+ reservation_time:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ reservation_length:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ reservation_private:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ reservation_repeat_type:
+ sortable: true
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ reservation_repeat_until:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ reservable_content_type:
+ sortable: true
+ default_sort_order: asc
+ align: ''
+ separator: '
'
+ empty_column: false
+ responsive: ''
+ reservation_ebundle:
+ sortable: false
+ default_sort_order: asc
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ operations:
+ align: ''
+ separator: ''
+ empty_column: false
+ responsive: ''
+ default: '-1'
+ empty_table: false
+ row:
+ type: fields
+ options:
+ inline: { }
+ separator: ''
+ hide_empty: false
+ default_field_elements: true
+ fields:
+ views_bulk_operations_bulk_form:
+ id: views_bulk_operations_bulk_form
+ table: views
+ field: views_bulk_operations_bulk_form
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: ''
+ exclude: false
+ alter:
+ alter_text: false
+ text: ''
+ make_link: false
+ path: ''
+ absolute: false
+ external: false
+ replace_spaces: false
+ path_case: none
+ trim_whitespace: false
+ alt: ''
+ rel: ''
+ link_class: ''
+ prefix: ''
+ suffix: ''
+ target: ''
+ nl2br: false
+ max_length: 0
+ word_boundary: true
+ ellipsis: true
+ more_link: false
+ more_link_text: ''
+ more_link_path: ''
+ strip_tags: false
+ trim: false
+ preserve_tags: ''
+ html: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: false
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ batch: true
+ batch_size: 50
+ form_step: true
+ buttons: false
+ action_title: Action
+ selected_actions:
+ views_bulk_edit: views_bulk_edit
+ views_bulk_operations_delete_entity: views_bulk_operations_delete_entity
+ preconfiguration:
+ views_bulk_edit:
+ label_override: ''
+ get_bundles_from_results: 1
+ views_bulk_operations_delete_entity:
+ label_override: ''
+ plugin_id: views_bulk_operations_bulk_form
+ name:
+ id: name
+ table: reserve_reservation_field_data
+ field: name
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Group
+ exclude: false
+ alter:
+ alter_text: false
+ text: ''
+ make_link: false
+ path: ''
+ absolute: false
+ external: false
+ replace_spaces: false
+ path_case: none
+ trim_whitespace: false
+ alt: ''
+ rel: ''
+ link_class: ''
+ prefix: ''
+ suffix: ''
+ target: ''
+ nl2br: false
+ max_length: 0
+ word_boundary: true
+ ellipsis: true
+ more_link: false
+ more_link_text: ''
+ more_link_path: ''
+ strip_tags: false
+ trim: false
+ preserve_tags: ''
+ html: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: true
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ click_sort_column: value
+ type: string
+ settings:
+ link_to_entity: false
+ group_column: value
+ group_columns: { }
+ group_rows: true
+ delta_limit: 0
+ delta_offset: 0
+ delta_reversed: false
+ delta_first_last: false
+ multi_type: separator
+ separator: ', '
+ field_api_classes: false
+ entity_type: null
+ entity_field: name
+ plugin_id: field
+ reservation_date:
+ id: reservation_date
+ table: reserve_reservation__reservation_date
+ field: reservation_date
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: When
+ exclude: false
+ alter:
+ alter_text: false
+ text: ''
+ make_link: false
+ path: ''
+ absolute: false
+ external: false
+ replace_spaces: false
+ path_case: none
+ trim_whitespace: false
+ alt: ''
+ rel: ''
+ link_class: ''
+ prefix: ''
+ suffix: ''
+ target: ''
+ nl2br: false
+ max_length: 0
+ word_boundary: true
+ ellipsis: true
+ more_link: false
+ more_link_text: ''
+ more_link_path: ''
+ strip_tags: false
+ trim: false
+ preserve_tags: ''
+ html: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: false
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ click_sort_column: value
+ type: datetime_default
+ settings:
+ timezone_override: ''
+ format_type: html_date
+ group_column: value
+ group_columns: { }
+ group_rows: true
+ delta_limit: 0
+ delta_offset: 0
+ delta_reversed: false
+ delta_first_last: false
+ multi_type: separator
+ separator: ', '
+ field_api_classes: false
+ plugin_id: field
+ reservation_time:
+ id: reservation_time
+ table: reserve_reservation__reservation_time
+ field: reservation_time
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: ''
+ exclude: false
+ alter:
+ alter_text: false
+ text: ''
+ make_link: false
+ path: ''
+ absolute: false
+ external: false
+ replace_spaces: false
+ path_case: none
+ trim_whitespace: false
+ alt: ''
+ rel: ''
+ link_class: ''
+ prefix: ''
+ suffix: ''
+ target: ''
+ nl2br: false
+ max_length: 0
+ word_boundary: true
+ ellipsis: true
+ more_link: false
+ more_link_text: ''
+ more_link_path: ''
+ strip_tags: false
+ trim: false
+ preserve_tags: ''
+ html: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: false
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ click_sort_column: value
+ type: string
+ settings:
+ link_to_entity: false
+ group_column: value
+ group_columns: { }
+ group_rows: true
+ delta_limit: 0
+ delta_offset: 0
+ delta_reversed: false
+ delta_first_last: false
+ multi_type: separator
+ separator: ', '
+ field_api_classes: false
+ plugin_id: field
+ reservation_length:
+ id: reservation_length
+ table: reserve_reservation__reservation_length
+ field: reservation_length
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: ''
+ exclude: false
+ alter:
+ alter_text: false
+ text: ''
+ make_link: false
+ path: ''
+ absolute: false
+ external: false
+ replace_spaces: false
+ path_case: none
+ trim_whitespace: false
+ alt: ''
+ rel: ''
+ link_class: ''
+ prefix: ''
+ suffix: ''
+ target: ''
+ nl2br: false
+ max_length: 0
+ word_boundary: true
+ ellipsis: true
+ more_link: false
+ more_link_text: ''
+ more_link_path: ''
+ strip_tags: false
+ trim: false
+ preserve_tags: ''
+ html: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: false
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ click_sort_column: value
+ type: list_default
+ settings: { }
+ group_column: value
+ group_columns: { }
+ group_rows: true
+ delta_limit: 0
+ delta_offset: 0
+ delta_reversed: false
+ delta_first_last: false
+ multi_type: separator
+ separator: ', '
+ field_api_classes: false
+ plugin_id: field
+ reservation_private:
+ id: reservation_private
+ table: reserve_reservation__reservation_private
+ field: reservation_private
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Private
+ exclude: false
+ alter:
+ alter_text: false
+ text: ''
+ make_link: false
+ path: ''
+ absolute: false
+ external: false
+ replace_spaces: false
+ path_case: none
+ trim_whitespace: false
+ alt: ''
+ rel: ''
+ link_class: ''
+ prefix: ''
+ suffix: ''
+ target: ''
+ nl2br: false
+ max_length: 0
+ word_boundary: true
+ ellipsis: true
+ more_link: false
+ more_link_text: ''
+ more_link_path: ''
+ strip_tags: false
+ trim: false
+ preserve_tags: ''
+ html: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: false
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ click_sort_column: value
+ type: boolean
+ settings:
+ format: default
+ format_custom_true: ''
+ format_custom_false: ''
+ group_column: value
+ group_columns: { }
+ group_rows: true
+ delta_limit: 0
+ delta_offset: 0
+ delta_reversed: false
+ delta_first_last: false
+ multi_type: separator
+ separator: ', '
+ field_api_classes: false
+ plugin_id: field
+ reservation_repeat_type:
+ id: reservation_repeat_type
+ table: reserve_reservation__reservation_repeat_type
+ field: reservation_repeat_type
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Repeating
+ exclude: false
+ alter:
+ alter_text: false
+ text: ''
+ make_link: false
+ path: ''
+ absolute: false
+ external: false
+ replace_spaces: false
+ path_case: none
+ trim_whitespace: false
+ alt: ''
+ rel: ''
+ link_class: ''
+ prefix: ''
+ suffix: ''
+ target: ''
+ nl2br: false
+ max_length: 0
+ word_boundary: true
+ ellipsis: true
+ more_link: false
+ more_link_text: ''
+ more_link_path: ''
+ strip_tags: false
+ trim: false
+ preserve_tags: ''
+ html: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: false
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ click_sort_column: value
+ type: list_default
+ settings: { }
+ group_column: value
+ group_columns: { }
+ group_rows: true
+ delta_limit: 0
+ delta_offset: 0
+ delta_reversed: false
+ delta_first_last: false
+ multi_type: separator
+ separator: ', '
+ field_api_classes: false
+ plugin_id: field
+ reservation_repeat_until:
+ id: reservation_repeat_until
+ table: reserve_reservation__reservation_repeat_until
+ field: reservation_repeat_until
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: ''
+ exclude: false
+ alter:
+ alter_text: false
+ text: ''
+ make_link: false
+ path: ''
+ absolute: false
+ external: false
+ replace_spaces: false
+ path_case: none
+ trim_whitespace: false
+ alt: ''
+ rel: ''
+ link_class: ''
+ prefix: ''
+ suffix: ''
+ target: ''
+ nl2br: false
+ max_length: 0
+ word_boundary: true
+ ellipsis: true
+ more_link: false
+ more_link_text: ''
+ more_link_path: ''
+ strip_tags: false
+ trim: false
+ preserve_tags: ''
+ html: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: false
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ click_sort_column: value
+ type: datetime_default
+ settings:
+ timezone_override: ''
+ format_type: html_date
+ group_column: value
+ group_columns: { }
+ group_rows: true
+ delta_limit: 0
+ delta_offset: 0
+ delta_reversed: false
+ delta_first_last: false
+ multi_type: separator
+ separator: ', '
+ field_api_classes: false
+ plugin_id: field
+ reservable_content_type:
+ id: reservable_content_type
+ table: reserve_reservation__reservable_content_type
+ field: reservable_content_type
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: 'Reservation Type'
+ exclude: false
+ alter:
+ alter_text: false
+ text: ''
+ make_link: false
+ path: ''
+ absolute: false
+ external: false
+ replace_spaces: false
+ path_case: none
+ trim_whitespace: false
+ alt: ''
+ rel: ''
+ link_class: ''
+ prefix: ''
+ suffix: ''
+ target: ''
+ nl2br: false
+ max_length: 0
+ word_boundary: true
+ ellipsis: true
+ more_link: false
+ more_link_text: ''
+ more_link_path: ''
+ strip_tags: false
+ trim: false
+ preserve_tags: ''
+ html: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: false
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ click_sort_column: value
+ type: list_default
+ settings: { }
+ group_column: value
+ group_columns: { }
+ group_rows: true
+ delta_limit: 0
+ delta_offset: 0
+ delta_reversed: false
+ delta_first_last: false
+ multi_type: separator
+ separator: ', '
+ field_api_classes: false
+ plugin_id: field
+ reservation_ebundle:
+ id: reservation_ebundle
+ table: reserve_reservation__reservation_ebundle
+ field: reservation_ebundle
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Ebundle
+ exclude: false
+ alter:
+ alter_text: false
+ text: ''
+ make_link: false
+ path: ''
+ absolute: false
+ external: false
+ replace_spaces: false
+ path_case: none
+ trim_whitespace: false
+ alt: ''
+ rel: ''
+ link_class: ''
+ prefix: ''
+ suffix: ''
+ target: ''
+ nl2br: false
+ max_length: 0
+ word_boundary: true
+ ellipsis: true
+ more_link: false
+ more_link_text: ''
+ more_link_path: ''
+ strip_tags: false
+ trim: false
+ preserve_tags: ''
+ html: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: true
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ click_sort_column: value
+ type: string
+ settings:
+ link_to_entity: false
+ group_column: value
+ group_columns: { }
+ group_rows: true
+ delta_limit: 0
+ delta_offset: 0
+ delta_reversed: false
+ delta_first_last: false
+ multi_type: separator
+ separator: ', '
+ field_api_classes: false
+ plugin_id: field
+ operations:
+ id: operations
+ table: reserve_reservation
+ field: operations
+ relationship: none
+ group_type: group
+ admin_label: ''
+ label: Operations
+ exclude: false
+ alter:
+ alter_text: false
+ text: ''
+ make_link: false
+ path: ''
+ absolute: false
+ external: false
+ replace_spaces: false
+ path_case: none
+ trim_whitespace: false
+ alt: ''
+ rel: ''
+ link_class: ''
+ prefix: ''
+ suffix: ''
+ target: ''
+ nl2br: false
+ max_length: 0
+ word_boundary: true
+ ellipsis: true
+ more_link: false
+ more_link_text: ''
+ more_link_path: ''
+ strip_tags: false
+ trim: false
+ preserve_tags: ''
+ html: false
+ element_type: ''
+ element_class: ''
+ element_label_type: ''
+ element_label_class: ''
+ element_label_colon: false
+ element_wrapper_type: ''
+ element_wrapper_class: ''
+ element_default_classes: true
+ empty: ''
+ hide_empty: false
+ empty_zero: false
+ hide_alter_empty: true
+ destination: true
+ entity_type: reserve_reservation
+ plugin_id: entity_operations
+ filters:
+ name:
+ id: name
+ table: reserve_reservation_field_data
+ field: name
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: contains
+ value: ''
+ group: 1
+ exposed: true
+ expose:
+ operator_id: name_op
+ label: Group
+ description: ''
+ use_operator: false
+ operator: name_op
+ identifier: name
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ anonymous: '0'
+ administrator: '0'
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ entity_type: reserve_reservation
+ entity_field: name
+ plugin_id: string
+ reservation_date_value:
+ id: reservation_date_value
+ table: reserve_reservation__reservation_date
+ field: reservation_date_value
+ relationship: none
+ group_type: group
+ admin_label: ''
+ operator: '='
+ value:
+ min: ''
+ max: ''
+ value: ''
+ type: date
+ group: 1
+ exposed: true
+ expose:
+ operator_id: reservation_date_value_op
+ label: Date
+ description: ''
+ use_operator: false
+ operator: reservation_date_value_op
+ identifier: reservation_date_value
+ required: false
+ remember: false
+ multiple: false
+ remember_roles:
+ authenticated: authenticated
+ anonymous: '0'
+ administrator: '0'
+ is_grouped: false
+ group_info:
+ label: ''
+ description: ''
+ identifier: ''
+ optional: true
+ widget: select
+ multiple: false
+ remember: false
+ default_group: All
+ default_group_multiple: { }
+ group_items: { }
+ plugin_id: datetime
+ sorts:
+ reservation_date_value:
+ id: reservation_date_value
+ table: reserve_reservation__reservation_date
+ field: reservation_date_value
+ relationship: none
+ group_type: group
+ admin_label: ''
+ order: ASC
+ exposed: false
+ expose:
+ label: ''
+ granularity: second
+ plugin_id: datetime
+ header: { }
+ footer: { }
+ empty:
+ area:
+ id: area
+ table: views
+ field: area
+ relationship: none
+ group_type: group
+ admin_label: ''
+ empty: true
+ tokenize: false
+ content:
+ value: 'The are no reservations.'
+ format: basic_html
+ plugin_id: text
+ relationships: { }
+ arguments: { }
+ display_extenders: { }
+ filter_groups:
+ operator: OR
+ groups:
+ 1: AND
+ title: 'My Rese'
+ cache_metadata:
+ max-age: 0
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ tags:
+ - 'config:field.storage.reserve_reservation.reservable_content_type'
+ - 'config:field.storage.reserve_reservation.reservation_date'
+ - 'config:field.storage.reserve_reservation.reservation_ebundle'
+ - 'config:field.storage.reserve_reservation.reservation_length'
+ - 'config:field.storage.reserve_reservation.reservation_private'
+ - 'config:field.storage.reserve_reservation.reservation_repeat_type'
+ - 'config:field.storage.reserve_reservation.reservation_repeat_until'
+ - 'config:field.storage.reserve_reservation.reservation_time'
+ page_1:
+ display_plugin: page
+ id: page_1
+ display_title: 'Manage (admin)'
+ position: 1
+ display_options:
+ display_extenders: { }
+ path: admin/structure/reservations/reserve_reservations/manage-reservations
+ menu:
+ type: normal
+ title: 'Manage Reservations'
+ description: ''
+ expanded: false
+ parent: entity.reserve_reservation.collection
+ weight: 0
+ context: '0'
+ menu_name: admin
+ display_description: ''
+ title: 'Manage Reservations'
+ defaults:
+ title: false
+ cache_metadata:
+ max-age: 0
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ tags:
+ - 'config:field.storage.reserve_reservation.reservable_content_type'
+ - 'config:field.storage.reserve_reservation.reservation_date'
+ - 'config:field.storage.reserve_reservation.reservation_ebundle'
+ - 'config:field.storage.reserve_reservation.reservation_length'
+ - 'config:field.storage.reserve_reservation.reservation_private'
+ - 'config:field.storage.reserve_reservation.reservation_repeat_type'
+ - 'config:field.storage.reserve_reservation.reservation_repeat_until'
+ - 'config:field.storage.reserve_reservation.reservation_time'
+ page_2:
+ display_plugin: page
+ id: page_2
+ display_title: 'My Reservations'
+ position: 2
+ display_options:
+ display_extenders: { }
+ display_description: ''
+ path: reserve/%ebundle/my-reservations
+ arguments:
+ reservation_ebundle_value:
+ id: reservation_ebundle_value
+ table: reserve_reservation__reservation_ebundle
+ field: reservation_ebundle_value
+ relationship: none
+ group_type: group
+ admin_label: ''
+ default_action: default
+ exception:
+ value: all
+ title_enable: false
+ title: All
+ title_enable: false
+ title: ''
+ default_argument_type: raw
+ default_argument_options:
+ index: 1
+ use_alias: false
+ default_argument_skip_url: false
+ summary_options:
+ base_path: ''
+ count: true
+ items_per_page: 25
+ override: false
+ summary:
+ sort_order: asc
+ number_of_records: 0
+ format: default_summary
+ specify_validation: false
+ validate:
+ type: none
+ fail: 'not found'
+ validate_options: { }
+ glossary: false
+ limit: 0
+ case: none
+ path_case: none
+ transform_dash: false
+ break_phrase: false
+ plugin_id: string
+ user_id:
+ id: user_id
+ table: reserve_reservation_field_data
+ field: user_id
+ relationship: none
+ group_type: group
+ admin_label: ''
+ default_action: default
+ exception:
+ value: all
+ title_enable: false
+ title: All
+ title_enable: false
+ title: ''
+ default_argument_type: current_user
+ default_argument_options: { }
+ default_argument_skip_url: false
+ summary_options:
+ base_path: ''
+ count: true
+ items_per_page: 25
+ override: false
+ summary:
+ sort_order: asc
+ number_of_records: 0
+ format: default_summary
+ specify_validation: false
+ validate:
+ type: none
+ fail: 'not found'
+ validate_options: { }
+ break_phrase: false
+ not: false
+ entity_type: reserve_reservation
+ entity_field: user_id
+ plugin_id: numeric
+ defaults:
+ arguments: false
+ title: false
+ menu:
+ type: tab
+ title: 'My Reservations'
+ description: ''
+ expanded: false
+ parent: ''
+ weight: 0
+ context: '0'
+ menu_name: main
+ title: 'My Reservations'
+ cache_metadata:
+ max-age: 0
+ contexts:
+ - 'languages:language_content'
+ - 'languages:language_interface'
+ - url
+ - url.query_args
+ - user
+ tags:
+ - 'config:field.storage.reserve_reservation.reservable_content_type'
+ - 'config:field.storage.reserve_reservation.reservation_date'
+ - 'config:field.storage.reserve_reservation.reservation_ebundle'
+ - 'config:field.storage.reserve_reservation.reservation_length'
+ - 'config:field.storage.reserve_reservation.reservation_private'
+ - 'config:field.storage.reserve_reservation.reservation_repeat_type'
+ - 'config:field.storage.reserve_reservation.reservation_repeat_until'
+ - 'config:field.storage.reserve_reservation.reservation_time'
diff --git a/config/schema/reserve.schema.yml b/config/schema/reserve.schema.yml
new file mode 100644
index 0000000..0d18981
--- /dev/null
+++ b/config/schema/reserve.schema.yml
@@ -0,0 +1,13 @@
+field.field_settings.reserve_category:
+ type: mapping
+ label: 'Reserve Category settings'
+ mapping:
+ categories:
+ type: int
+ label: 'Allowable Categories'
+ calendar_header:
+ type: text
+ label: 'Calendar Header'
+ reservation_instructions:
+ type: text
+ label: 'Reservation Instructions'
\ No newline at end of file
diff --git a/content/reserve_category/digital.json b/content/reserve_category/digital.json
new file mode 100644
index 0000000..2116d3a
--- /dev/null
+++ b/content/reserve_category/digital.json
@@ -0,0 +1,90 @@
+{
+ "_links": {
+ "self": {
+ "href": "http:\/\/default\/admin\/structure\/reserve_category\/3?_format=hal_json"
+ },
+ "type": {
+ "href": "http:\/\/drupal.org\/rest\/type\/reserve_category\/reserve_category"
+ },
+ "http:\/\/drupal.org\/rest\/relation\/reserve_category\/reserve_category\/user_id": [
+ {
+ "href": "http:\/\/default\/user\/1?_format=hal_json",
+ "lang": "en"
+ }
+ ]
+ },
+ "id": [
+ {
+ "value": 3
+ }
+ ],
+ "uuid": [
+ {
+ "value": "99996f75-ab71-4ab0-b8af-9c0df45c15c9"
+ }
+ ],
+ "langcode": [
+ {
+ "value": "en",
+ "lang": "en"
+ }
+ ],
+ "_embedded": {
+ "http:\/\/drupal.org\/rest\/relation\/reserve_category\/reserve_category\/user_id": [
+ {
+ "_links": {
+ "self": {
+ "href": "http:\/\/default\/user\/1?_format=hal_json"
+ },
+ "type": {
+ "href": "http:\/\/drupal.org\/rest\/type\/user\/user"
+ }
+ },
+ "uuid": [
+ {
+ "value": "1b16703e-48a1-4e8b-9611-3b1efbafb90d"
+ }
+ ],
+ "lang": "en"
+ }
+ ]
+ },
+ "name": [
+ {
+ "value": "Digital"
+ }
+ ],
+ "status": [
+ {
+ "value": true
+ }
+ ],
+ "created": [
+ {
+ "value": "2018-01-10T20:41:46+00:00",
+ "format": "Y-m-d\\TH:i:sP"
+ }
+ ],
+ "changed": [
+ {
+ "value": "2018-01-10T20:41:46+00:00",
+ "format": "Y-m-d\\TH:i:sP"
+ }
+ ],
+ "default_langcode": [
+ {
+ "value": true,
+ "lang": "en"
+ }
+ ],
+ "reserve_setup_buffer": [
+ {
+ "value": 0
+ }
+ ],
+ "reserve_takedown_buffer": [
+ {
+ "value": 0
+ }
+ ]
+}
\ No newline at end of file
diff --git a/content/reserve_category/instant.json b/content/reserve_category/instant.json
new file mode 100644
index 0000000..46cd4f5
--- /dev/null
+++ b/content/reserve_category/instant.json
@@ -0,0 +1,90 @@
+{
+ "_links": {
+ "self": {
+ "href": "http:\/\/default\/admin\/structure\/reserve_category\/4?_format=hal_json"
+ },
+ "type": {
+ "href": "http:\/\/drupal.org\/rest\/type\/reserve_category\/reserve_category"
+ },
+ "http:\/\/drupal.org\/rest\/relation\/reserve_category\/reserve_category\/user_id": [
+ {
+ "href": "http:\/\/default\/user\/1?_format=hal_json",
+ "lang": "en"
+ }
+ ]
+ },
+ "id": [
+ {
+ "value": 4
+ }
+ ],
+ "uuid": [
+ {
+ "value": "c3c9f13e-d620-4ef0-983f-6372b6f00e70"
+ }
+ ],
+ "langcode": [
+ {
+ "value": "en",
+ "lang": "en"
+ }
+ ],
+ "_embedded": {
+ "http:\/\/drupal.org\/rest\/relation\/reserve_category\/reserve_category\/user_id": [
+ {
+ "_links": {
+ "self": {
+ "href": "http:\/\/default\/user\/1?_format=hal_json"
+ },
+ "type": {
+ "href": "http:\/\/drupal.org\/rest\/type\/user\/user"
+ }
+ },
+ "uuid": [
+ {
+ "value": "1b16703e-48a1-4e8b-9611-3b1efbafb90d"
+ }
+ ],
+ "lang": "en"
+ }
+ ]
+ },
+ "name": [
+ {
+ "value": "Instant"
+ }
+ ],
+ "status": [
+ {
+ "value": true
+ }
+ ],
+ "created": [
+ {
+ "value": "2018-01-11T06:40:53+00:00",
+ "format": "Y-m-d\\TH:i:sP"
+ }
+ ],
+ "changed": [
+ {
+ "value": "2018-01-11T06:40:53+00:00",
+ "format": "Y-m-d\\TH:i:sP"
+ }
+ ],
+ "default_langcode": [
+ {
+ "value": true,
+ "lang": "en"
+ }
+ ],
+ "reserve_setup_buffer": [
+ {
+ "value": 0
+ }
+ ],
+ "reserve_takedown_buffer": [
+ {
+ "value": 0
+ }
+ ]
+}
\ No newline at end of file
diff --git a/content/reserve_category/large.json b/content/reserve_category/large.json
new file mode 100644
index 0000000..b63df0d
--- /dev/null
+++ b/content/reserve_category/large.json
@@ -0,0 +1,90 @@
+{
+ "_links": {
+ "self": {
+ "href": "http:\/\/default\/admin\/structure\/reserve_category\/1?_format=hal_json"
+ },
+ "type": {
+ "href": "http:\/\/drupal.org\/rest\/type\/reserve_category\/reserve_category"
+ },
+ "http:\/\/drupal.org\/rest\/relation\/reserve_category\/reserve_category\/user_id": [
+ {
+ "href": "http:\/\/default\/user\/1?_format=hal_json",
+ "lang": "en"
+ }
+ ]
+ },
+ "id": [
+ {
+ "value": 1
+ }
+ ],
+ "uuid": [
+ {
+ "value": "148994b4-dece-4323-9dfa-d6e9f86b3395"
+ }
+ ],
+ "langcode": [
+ {
+ "value": "en",
+ "lang": "en"
+ }
+ ],
+ "_embedded": {
+ "http:\/\/drupal.org\/rest\/relation\/reserve_category\/reserve_category\/user_id": [
+ {
+ "_links": {
+ "self": {
+ "href": "http:\/\/default\/user\/1?_format=hal_json"
+ },
+ "type": {
+ "href": "http:\/\/drupal.org\/rest\/type\/user\/user"
+ }
+ },
+ "uuid": [
+ {
+ "value": "1b16703e-48a1-4e8b-9611-3b1efbafb90d"
+ }
+ ],
+ "lang": "en"
+ }
+ ]
+ },
+ "name": [
+ {
+ "value": "Large"
+ }
+ ],
+ "status": [
+ {
+ "value": true
+ }
+ ],
+ "created": [
+ {
+ "value": "2018-01-02T23:05:14+00:00",
+ "format": "Y-m-d\\TH:i:sP"
+ }
+ ],
+ "changed": [
+ {
+ "value": "2018-01-02T23:05:14+00:00",
+ "format": "Y-m-d\\TH:i:sP"
+ }
+ ],
+ "default_langcode": [
+ {
+ "value": true,
+ "lang": "en"
+ }
+ ],
+ "reserve_setup_buffer": [
+ {
+ "value": 0
+ }
+ ],
+ "reserve_takedown_buffer": [
+ {
+ "value": 0
+ }
+ ]
+}
\ No newline at end of file
diff --git a/content/reserve_category/small.json b/content/reserve_category/small.json
new file mode 100644
index 0000000..884dc42
--- /dev/null
+++ b/content/reserve_category/small.json
@@ -0,0 +1,90 @@
+{
+ "_links": {
+ "self": {
+ "href": "http:\/\/default\/admin\/structure\/reserve_category\/2?_format=hal_json"
+ },
+ "type": {
+ "href": "http:\/\/drupal.org\/rest\/type\/reserve_category\/reserve_category"
+ },
+ "http:\/\/drupal.org\/rest\/relation\/reserve_category\/reserve_category\/user_id": [
+ {
+ "href": "http:\/\/default\/user\/1?_format=hal_json",
+ "lang": "en"
+ }
+ ]
+ },
+ "id": [
+ {
+ "value": 2
+ }
+ ],
+ "uuid": [
+ {
+ "value": "89a908f8-e90d-4536-a747-c411598fad89"
+ }
+ ],
+ "langcode": [
+ {
+ "value": "en",
+ "lang": "en"
+ }
+ ],
+ "_embedded": {
+ "http:\/\/drupal.org\/rest\/relation\/reserve_category\/reserve_category\/user_id": [
+ {
+ "_links": {
+ "self": {
+ "href": "http:\/\/default\/user\/1?_format=hal_json"
+ },
+ "type": {
+ "href": "http:\/\/drupal.org\/rest\/type\/user\/user"
+ }
+ },
+ "uuid": [
+ {
+ "value": "1b16703e-48a1-4e8b-9611-3b1efbafb90d"
+ }
+ ],
+ "lang": "en"
+ }
+ ]
+ },
+ "name": [
+ {
+ "value": "Small"
+ }
+ ],
+ "status": [
+ {
+ "value": true
+ }
+ ],
+ "created": [
+ {
+ "value": "2018-01-10T20:41:23+00:00",
+ "format": "Y-m-d\\TH:i:sP"
+ }
+ ],
+ "changed": [
+ {
+ "value": "2018-01-10T20:41:23+00:00",
+ "format": "Y-m-d\\TH:i:sP"
+ }
+ ],
+ "default_langcode": [
+ {
+ "value": true,
+ "lang": "en"
+ }
+ ],
+ "reserve_setup_buffer": [
+ {
+ "value": 0
+ }
+ ],
+ "reserve_takedown_buffer": [
+ {
+ "value": 0
+ }
+ ]
+}
\ No newline at end of file
diff --git a/content/reserve_category/video.json b/content/reserve_category/video.json
new file mode 100644
index 0000000..5891c02
--- /dev/null
+++ b/content/reserve_category/video.json
@@ -0,0 +1,90 @@
+{
+ "_links": {
+ "self": {
+ "href": "http:\/\/default\/admin\/structure\/reserve_category\/5?_format=hal_json"
+ },
+ "type": {
+ "href": "http:\/\/drupal.org\/rest\/type\/reserve_category\/reserve_category"
+ },
+ "http:\/\/drupal.org\/rest\/relation\/reserve_category\/reserve_category\/user_id": [
+ {
+ "href": "http:\/\/default\/user\/1?_format=hal_json",
+ "lang": "en"
+ }
+ ]
+ },
+ "id": [
+ {
+ "value": 5
+ }
+ ],
+ "uuid": [
+ {
+ "value": "a5eea3e2-e717-4428-9d86-fe0681daf653"
+ }
+ ],
+ "langcode": [
+ {
+ "value": "en",
+ "lang": "en"
+ }
+ ],
+ "_embedded": {
+ "http:\/\/drupal.org\/rest\/relation\/reserve_category\/reserve_category\/user_id": [
+ {
+ "_links": {
+ "self": {
+ "href": "http:\/\/default\/user\/1?_format=hal_json"
+ },
+ "type": {
+ "href": "http:\/\/drupal.org\/rest\/type\/user\/user"
+ }
+ },
+ "uuid": [
+ {
+ "value": "1b16703e-48a1-4e8b-9611-3b1efbafb90d"
+ }
+ ],
+ "lang": "en"
+ }
+ ]
+ },
+ "name": [
+ {
+ "value": "Video"
+ }
+ ],
+ "status": [
+ {
+ "value": true
+ }
+ ],
+ "created": [
+ {
+ "value": "2018-01-11T06:43:23+00:00",
+ "format": "Y-m-d\\TH:i:sP"
+ }
+ ],
+ "changed": [
+ {
+ "value": "2018-01-11T06:43:23+00:00",
+ "format": "Y-m-d\\TH:i:sP"
+ }
+ ],
+ "default_langcode": [
+ {
+ "value": true,
+ "lang": "en"
+ }
+ ],
+ "reserve_setup_buffer": [
+ {
+ "value": 0
+ }
+ ],
+ "reserve_takedown_buffer": [
+ {
+ "value": 0
+ }
+ ]
+}
\ No newline at end of file
diff --git a/css/reserve-calendar.css b/css/reserve-calendar.css
new file mode 100644
index 0000000..16fa02f
--- /dev/null
+++ b/css/reserve-calendar.css
@@ -0,0 +1,259 @@
+/* ----------------------------- ROOM RESERVATIONS ---------------------------- */
+
+#rooms-calendar .slink {
+ margin-right: 40px;
+}
+
+.reservations-block ul {
+ list-style-image: url(images/bullet.gif);
+}
+
+.reservations-block #reservations {
+ margin-bottom: 5px;
+}
+
+#rooms-calendar .room-tabs {
+ margin: 0 0 0 7px;
+ padding: 0;
+}
+
+#rooms-calendar ul li,
+#rooms-calendar ul.menu li,
+#rooms-calendar .item-list ul li,
+#rooms-calendar li.leaf {
+ background: none;
+ padding: 0 0.75em 0.2em 0.75em;
+}
+
+#rooms-calendar .room-tabs li {
+ float: left;
+ list-style: none;
+ margin: 0 0 -3px 0;
+ padding: 2px 3px;
+}
+
+#rooms-calendar .room-tabs li a {
+ background: #dddddd;
+ border: 1px solid #999999;
+ border-top-left-radius: 7px;
+ border-top-right-radius: 7px;
+ display: block;
+ -moz-border-radius-topleft: 7px;
+ -moz-border-radius-topright: 7px;
+ padding: 3px 5px;
+ text-decoration: none;
+ -webkit-border-top-left-radius: 7px;
+ -webkit-border-top-right-radius: 7px;
+}
+
+#rooms-calendar .room-tabs li a.active {
+ background: #ffffff;
+ border-bottom: 1px solid #ffffff;
+}
+
+#rooms-calendar .panelContainer {
+ border: 1px solid #999;
+ clear: left;
+}
+
+#rooms-calendar .panelContainer:after {
+ content: " ";
+ display: table;
+ clear: both;
+ min-height: 20px;
+}
+
+#rooms-calendar .panel {
+ padding: 0 10px;
+}
+
+#rooms-calendar #tabbedPanels .date {
+ clear: both;
+ margin: 0;
+ text-align: center;
+}
+
+#rooms-calendar #tabbedPanels .hours {
+ color: #666666;
+ font-weight: bold;
+ margin-bottom: 5px;
+ text-align: center;
+}
+
+#rooms-calendar #date-change,
+#rooms-calendar .reserve-center {
+ text-align: center;
+}
+
+#rooms-calendar .panel .gcolumns .grid-column {
+ float: left;
+}
+
+#rooms-calendar div.grid-column {
+ max-width: 113px;
+}
+
+#rooms-calendar .panel .gcolumns ul {
+ padding: 0 1px;
+}
+
+#rooms-calendar .panel .gcolumns li {
+ border: 1px solid #dddddd;
+ font-size: 85%;
+ height: 1.33em;
+ line-height: 15px;
+ list-style-type: none;
+ /* margin: -1px auto 0; */
+ padding: 2px 0;
+ text-align: center;
+}
+
+/*#rooms-calendar .panel .gcolumns li.odd {
+ border-top: 1px solid #999999;
+}
+*/
+#rooms-calendar .panel .gcolumns li.room-info {
+ border: none;
+}
+
+#rooms-calendar .panel .gcolumns li.room-info-heading {
+ padding-bottom: 5px;
+}
+
+#rooms-calendar .panel .gcolumns li.room-info-footer {
+ padding-top: 5px;
+}
+
+#rooms-calendar .panel .gcolumns .hours-column li {
+ width: 112px;
+}
+
+#rooms-calendar .panel .gcolumns .room-column li {
+ width: 115px;
+}
+
+#rooms-calendar .panel .gcolumns li.timeslot {
+ background-color: #fff;
+ *height: 1.33em;
+ *margin-bottom: 2px;
+}
+
+#rooms-calendar .panel .gcolumns li.reservable {
+ background-color: #fff;
+}
+
+#rooms-calendar .panel .gcolumns li.open {
+ background-color: #fff;
+ width: 112px !important;
+}
+
+#rooms-calendar .panel .gcolumns li.booked {
+ background-color: #ddd;
+ /*width: 109px !important;*/
+}
+
+#rooms-calendar .gcolumns li.setup {
+ background-color: #eee;
+}
+
+#rooms-calendar .panel .gcolumns li.closed {
+ background-color: #d1dfdf;
+ border: 1px solid #d1dfdf;
+}
+
+#rooms-calendar .hide {
+ display: none;
+}
+
+.page-room-reservations .form-item label {
+ display: inline;
+}
+
+#txtmsg-fields {
+ display: none;
+}
+
+#date-change {
+ margin-bottom:20px;
+}
+.clear {clear:both;}
+
+/* QTIP Overrides */
+
+.qtip {
+ box-shadow: -2px 2px 8px rgba(0,0,0,0.3);
+}
+
+.qtip canvas {
+ display: none;
+ width: 400px;
+}
+.qtip-link, .qtip-additional-element {
+ border-bottom: 1px dotted #999;
+}
+
+.qtip h4 {
+ margin: 0px;
+ margin-top: 0.5em;
+ font-size: 12px;
+ color: #999;
+ font-family: 'AvenirNextLTW01-Regular', Arial;
+}
+
+.qtip-tooltip {
+ font-family: 'AvenirNextLTW01-Regular', Arial;
+ font-size: 12px;
+ margin-bottom: 0.5em;
+ width: 400px;
+}
+
+/*! Light tooltip style */
+.ui-tooltip-light .ui-tooltip-titlebar,
+.ui-tooltip-light .ui-tooltip-content{
+ border-color: transparent;
+ color: #333;
+}
+
+.ui-tooltip-light .ui-tooltip-content {
+ background-color: white;
+ width: 270px !important;
+}
+
+.ui-tooltip-light .ui-tooltip-titlebar {
+ width: 244px !important;
+}
+
+
+#ui-datepicker-div {
+ z-index:2 !important;
+}
+
+#rooms-calendar ul li.reservable:hover, #rooms-calendar ul li.open:hover {
+ background-color:#FFF;
+}
+
+#rooms-calendar .panel .gcolumns li.reservable {
+ text-align:center;
+ vertical-align:middle;
+ background-color:#fff;
+ border:1px solid #ccc;
+}
+
+#rooms-calendar .panelContainer .grid-column li.highlighted {
+ background-color:#999;
+}
+
+#rooms-calendar .reserve-group {
+ /*border: 1px solid blue;*/
+ outline: 1px solid blue;
+ width: 111px;
+ position: relative;
+}
+
+#rooms-calendar .panel .gcolumns .reserve-series li.booked {
+ background-color: lightgreen;
+}
+
+.gcolumns a, .gcolumns a.link {
+ border-bottom: none !important;
+}
\ No newline at end of file
diff --git a/css/reserve-calendar.css-bak b/css/reserve-calendar.css-bak
new file mode 100644
index 0000000..60e3bd4
--- /dev/null
+++ b/css/reserve-calendar.css-bak
@@ -0,0 +1,252 @@
+/* ----------------------------- ROOM RESERVATIONS ---------------------------- */
+
+#rooms-calendar .slink {
+ margin-right: 40px;
+}
+
+.reservations-block ul {
+ list-style-image: url(images/bullet.gif);
+}
+
+.reservations-block #reservations {
+ margin-bottom: 5px;
+}
+
+#rooms-calendar .room-tabs {
+ margin: 0 0 0 7px;
+ padding: 0;
+}
+
+#rooms-calendar ul li,
+#rooms-calendar ul.menu li,
+#rooms-calendar .item-list ul li,
+#rooms-calendar li.leaf {
+ background: none;
+ padding: 0 0.75em 0.2em 0.75em;
+}
+
+#rooms-calendar .room-tabs li {
+ float: left;
+ list-style: none;
+ margin: 0 0 -3px 0;
+ padding: 2px 3px;
+}
+
+#rooms-calendar .room-tabs li a {
+ background: #dddddd;
+ border: 1px solid #999999;
+ border-top-left-radius: 7px;
+ border-top-right-radius: 7px;
+ display: block;
+ -moz-border-radius-topleft: 7px;
+ -moz-border-radius-topright: 7px;
+ padding: 3px 5px;
+ text-decoration: none;
+ -webkit-border-top-left-radius: 7px;
+ -webkit-border-top-right-radius: 7px;
+}
+
+#rooms-calendar .room-tabs li a.active {
+ background: #ffffff;
+ border-bottom: 1px solid #ffffff;
+}
+
+#rooms-calendar .panelContainer {
+ border: 1px solid #999;
+ clear: left;
+}
+
+#rooms-calendar .panelContainer:after {
+ content: " ";
+ display: table;
+ clear: both;
+ min-height: 20px;
+}
+
+#rooms-calendar .panel {
+ padding: 0 10px;
+}
+
+#rooms-calendar #tabbedPanels .date {
+ clear: both;
+ margin: 0;
+ text-align: center;
+}
+
+#rooms-calendar #tabbedPanels .hours {
+ color: #666666;
+ font-weight: bold;
+ margin-bottom: 5px;
+ text-align: center;
+}
+
+#rooms-calendar #date-change,
+#rooms-calendar .reserve-center {
+ text-align: center;
+}
+
+#rooms-calendar .panel .gcolumns .grid-column {
+ float: left;
+}
+
+#rooms-calendar div.grid-column {
+ max-width: 115px;
+}
+
+#rooms-calendar .panel .gcolumns ul {
+ padding: 0 1px;
+}
+
+#rooms-calendar .panel .gcolumns li {
+ border: 1px solid #dddddd;
+ font-size: 85%;
+ height: 1.33em;
+ line-height: 15px;
+ list-style-type: none;
+ margin: -1px auto 0;
+ padding: 2px 0;
+ text-align: center;
+}
+
+/*#rooms-calendar .panel .gcolumns li.odd {
+ border-top: 1px solid #999999;
+}
+*/
+#rooms-calendar .panel .gcolumns li.room-info {
+ border: none;
+}
+
+#rooms-calendar .panel .gcolumns li.room-info-heading {
+ padding-bottom: 5px;
+}
+
+#rooms-calendar .panel .gcolumns li.room-info-footer {
+ padding-top: 5px;
+}
+
+#rooms-calendar .panel .gcolumns .hours-column li {
+ width: 120px;
+}
+
+#rooms-calendar .panel .gcolumns .room-column li {
+ width: 115px;
+}
+
+#rooms-calendar .panel .gcolumns li.timeslot {
+ background-color: #fff;
+ *height: 1.33em;
+ *margin-bottom: 2px;
+}
+
+#rooms-calendar .panel .gcolumns li.reservable {
+ background-color: #fff;
+}
+
+#rooms-calendar .panel .gcolumns li.open {
+ background-color: #fff;
+}
+
+#rooms-calendar .panel .gcolumns li.booked {
+ background-color: #ddd;
+}
+
+#rooms-calendar .gcolumns li.setup {
+ background-color: #eee;
+}
+
+#rooms-calendar .panel .gcolumns li.closed {
+ background-color: #d1dfdf;
+ border: 1px solid #d1dfdf;
+}
+
+#rooms-calendar .hide {
+ display: none;
+}
+
+.page-room-reservations .form-item label {
+ display: inline;
+}
+
+#txtmsg-fields {
+ display: none;
+}
+
+#date-change {
+ margin-bottom:20px;
+}
+.clear {clear:both;}
+
+/* QTIP Overrides */
+
+.qtip {
+ box-shadow: -2px 2px 8px rgba(0,0,0,0.3);
+}
+
+.qtip canvas {
+ display: none;
+ width: 400px;
+}
+.qtip-link, .qtip-additional-element {
+ border-bottom: 1px dotted #999;
+}
+
+.qtip h4 {
+ margin: 0px;
+ margin-top: 0.5em;
+ font-size: 12px;
+ color: #999;
+ font-family: 'AvenirNextLTW01-Regular', Arial;
+}
+
+.qtip-tooltip {
+ font-family: 'AvenirNextLTW01-Regular', Arial;
+ font-size: 12px;
+ margin-bottom: 0.5em;
+ width: 400px;
+}
+
+/*! Light tooltip style */
+.ui-tooltip-light .ui-tooltip-titlebar,
+.ui-tooltip-light .ui-tooltip-content{
+ border-color: transparent;
+ color: #333;
+}
+
+.ui-tooltip-light .ui-tooltip-content {
+ background-color: white;
+ width: 270px !important;
+}
+
+.ui-tooltip-light .ui-tooltip-titlebar {
+ width: 244px !important;
+}
+
+
+#ui-datepicker-div {
+ z-index:2 !important;
+}
+
+#rooms-calendar ul li.reservable:hover, #rooms-calendar ul li.open:hover {
+ background-color:#FFF;
+}
+
+#rooms-calendar .panel .gcolumns li.reservable {
+ text-align:center;
+ vertical-align:middle;
+ background-color:#fff;
+ border:1px solid #ccc;
+}
+
+#rooms-calendar .panelContainer .grid-column li.highlighted {
+ background-color:#999;
+}
+
+#rooms-calendar .reserve-group {
+ border: 1px solid blue;
+ padding: 1px 0 1px 0 !important;
+ width: 122px !important;
+}
+
+#rooms-calendar .panel .gcolumns .reserve-series li.booked {
+ background-color: lightgreen;
+}
diff --git a/images/arrow-icon.png b/images/arrow-icon.png
new file mode 100644
index 0000000..18d4455
Binary files /dev/null and b/images/arrow-icon.png differ
diff --git a/images/clear.png b/images/clear.png
new file mode 100644
index 0000000..8070099
Binary files /dev/null and b/images/clear.png differ
diff --git a/js/reserve.js b/js/reserve.js
new file mode 100644
index 0000000..652f777
--- /dev/null
+++ b/js/reserve.js
@@ -0,0 +1,135 @@
+(function ($, Drupal) {
+
+ Drupal.behaviors.reserve = {
+ attach: function (context, settings) {
+ // set default Category tab if one is set in URL anchor
+ var anchor = window.location.hash;
+ if (anchor) {
+ $('.room-tabs a.active').removeClass('active');
+ $('.room-tabs li a[href=' + anchor + ']').addClass('active');
+ $('.panel').hide();
+ $(anchor).show();
+ }
+
+ // show the selected category panel
+ $('.room-tabs a').click(function () {
+ $this = $(this);
+ $('.panel').hide();
+ $('.room-tabs a.active').removeClass('active');
+ $this.addClass('active').blur();
+ var panel = $this.attr('href');
+ $(panel).fadeIn(250);
+ return false;
+ });
+
+ // change calendar date displayed
+ $('#edit-date').change(function () {
+ var datebits = $(this).val().split('-');
+ var formatarr = drupalSettings.reserve.dateFormat.split('/');
+ var dateobj = new Object();
+ $.each(formatarr, function (index, value) {
+ dateobj[value] = datebits[index];
+ });
+ var val = dateobj.m + '/' + dateobj.d;
+ var newpath = '/reserve/' + drupalSettings.reserve.ebundle + '/calendar/' + val;
+ window.location.href = newpath;
+ });
+
+ // show form fields for text message confirmation and reminder
+ $('#edit-textmsg').each(function () {
+ if ($(this).attr('checked')) {
+ $('#txtmsg-fields').slideDown('fast');
+ }
+ else {
+ $('#txtmsg-fields').slideUp('fast');
+ }
+ });
+ $('#edit-textmsg').click(function () {
+ if ($(this).attr('checked')) {
+ $('#txtmsg-fields').slideDown('fast');
+ }
+ else {
+ $('#txtmsg-fields').slideUp('fast');
+ }
+ });
+
+ var isMouseDown = false, isHighlighted;
+ var maxLength = drupalSettings.reserve.maxLength / 30;
+ $("#rooms-calendar .panel li.reservable")
+
+ .mousedown(function () {
+ isMouseDown = true;
+ // original code used toggleClass; but addClass works better
+ $(this).addClass("highlighted");
+ isHighlighted = $(this).hasClass("highlighted");
+ return false; // prevent text selection
+ })
+
+ .mouseover(function () {
+ if (isMouseDown) {
+ $(this).addClass("highlighted", isHighlighted);
+
+ // Limit the selection of cells equal to maxLength parameter
+ var limitselect = document.querySelectorAll('.highlighted').length - 1;
+ if (limitselect >= maxLength) {
+ isMouseDown = false;
+ }
+
+ // Disable further selection when drag on lunch / booked time slot
+ $('.booked').mouseover(function () {
+ isMouseDown = false;
+ });
+ $('.closed').mouseover(function () {
+ isMouseDown = false;
+ });
+
+ // Restrict horizontal selection
+ $('.grid-column').mouseleave(function () {
+ isMouseDown = false;
+ });
+ }
+ })
+
+ .bind("selectstart", function () {
+ return false;
+ })
+
+ .mouseup(function () {
+ isMouseDown = false;
+ var link = $('li.highlighted:first a');
+ var count = $('li.highlighted').length;
+ var href = $(link).attr('href');
+
+ // not sure why the count == 0 case is required; but it occurs 2nd+ times modal is opened
+ if (count == 0) return false;
+ if (count == 1) {
+ $('li.highlighted:first a').click();
+ }
+ else {
+ var callback = 'reserve/ajax/reservation_add';
+ $.ajax({
+ async: false,
+ url: Drupal.url(callback),
+ data: {
+ count: count,
+ path: href
+ },
+ //dataType: 'json',
+ success: function success(data) {
+ if (data) {
+ var $myDialog = $('
' . t('The Reserve module allows for the "booking" of entities. It provides a calendar for each bundle which is set up to be bookable. + From this calendar you can see what time slots have been booked as well as select a time slot to book. Many options are provided to make a very flexible + booking system.') . '
'; + $output .= '' . t('A few things must be set up before you may use the booking system:') . '
+' . t('The booking calendar will now be available at /reserve/{entitytype.bundle}/calendar. E.g. /reserve/node.room/calendar') . '
'; + + return $output; + + default: + } +} + +/** + * Implements hook_form_alter(). + */ +function reserve_form_alter(array &$form, FormStateInterface $form_state, $form_id) { + if ($form_state->getFormObject() instanceof BundleEntityFormBase) { + (new BundleFormAlter($form_state->getFormObject()->getEntity())) + ->formAlter($form, $form_state); + } + return; +} + + /** + * Implements hook_entity_insert(). + */ +function reserve_entity_insert(EntityInterface $entity) { + reserve_entity_type_save($entity); +} + +/** + * Implements hook_entity_update(). + */ +function reserve_entity_update(EntityInterface $entity) { + reserve_entity_type_save($entity); +} + +/** + * Helper to save group information. + * + * @param \Drupal\Core\Entity\EntityInterface $entity + * The entity object. + */ +function reserve_entity_type_save(EntityInterface $entity) { + $bundle = $entity->id(); + $definition = \Drupal::entityTypeManager()->getDefinition($entity->getEntityTypeId()); + $entity_type_id = $definition->getBundleOf(); +} + +/** + * Implements hook_theme(). + */ +function reserve_theme($existing, $type, $theme, $path) { + return array( + 'calendar_template' => array( + 'variables' => array( + 'date_picker' => NULL, + 'arrow' => NULL, + 'date' => NULL, + 'calendar_text' => NULL, + 'dates' => NULL, + 'categories' => NULL, + 'calendar_header' => NULL, + 'reservation_instructions' => NULL, + 'building_hours_display' => NULL, + ), + ), + ); +} diff --git a/reserve.permissions.yml b/reserve.permissions.yml new file mode 100644 index 0000000..3b1fb95 --- /dev/null +++ b/reserve.permissions.yml @@ -0,0 +1,58 @@ +# Admin +administer reservations: + title: 'Administer Reservations' + description: 'Allow access to the administration form to configure Reservations.' + restrict access: true + +administer reservation categories: + title: 'Administer Reservation Categories' + description: 'Allow access to the administration form to configure Reservation Categories.' + restrict access: true + +# Reservations +add reservations: + title: 'Create new Reservations' + +add reservations extended: + title: 'Create new Reservations (extended)' + +edit reservations: + title: 'Edit Reservations' + +delete reservations: + title: 'Delete Reservations' + +view published reservations: + title: 'View published Reservations' + +view unpublished reservations: + title: 'View unpublished Reservations' + +book over reservation buffer: + title: 'Book over reservation buffer' + +access reservation overview: + title: 'Access the Reservation overview page' + +# Categories +add reservation categories: + title: 'Create new Reservation Categories' + +edit reservation categories: + title: 'Edit Reservation Categories' + +delete reservation categories: + title: 'Delete Reservation Categories' + +view published reservation categories: + title: 'View published Reservation Categories' + +view unpublished reservation categories: + title: 'View unpublished Reservation Categories' + +access reservation category overview: + title: 'Access the Reservation Category overview page' + +permission_callbacks: + - Drupal\reserve\Controller\ReservePermissions::permissions + diff --git a/reserve.routing.yml b/reserve.routing.yml new file mode 100644 index 0000000..ec8d41e --- /dev/null +++ b/reserve.routing.yml @@ -0,0 +1,61 @@ +# Route name can be used in several places; e.g. links, redirects, and local +# actions. + +reserve.settings: + path: '/admin/config/system/reserve' + defaults: + _form: '\Drupal\reserve\Form\ReserveSettingsForm' + _title: 'Reserve Settings' + requirements: + _permission: 'administer reservation categories' + +reserve.settings.hours: + path: '/admin/config/system/reserve/hours' + defaults: + _form: '\Drupal\reserve\Form\ReserveDefaultHoursForm' + _title: 'Reserve Settings (Default Hours)' + requirements: + _permission: 'administer reservation categories' + +reserve.settings.hours.daily: + path: '/admin/config/system/reserve/hours/daily/{passed_month}' + defaults: + _form: '\Drupal\reserve\Form\ReserveDailyHoursForm' + _title: 'Reserve Settings (Daily Overrides)' + passed_month: 'yyyy_mm' + requirements: + _permission: 'administer reservation categories' + passed_month: '20[0-9][0-9]_[0-1][0-9]' + +reserve.settings.display: + path: '/admin/config/system/reserve/diplay' + defaults: + _form: '\Drupal\reserve\Form\ReserveDisplayForm' + _title: 'Reserve Settings (Display)' + requirements: + _permission: 'administer reservation categories' + +reserve.calendar: + path: '/reserve/{ebundle}/calendar/{selected_month}/{selected_day}' + defaults: + _controller: '\Drupal\reserve\Controller\CalendarController::calendar' + _title_callback: '\Drupal\reserve\Controller\CalendarController::calendarTitle' + selected_month: '' + selected_day: '' + requirements: + _custom_access: '\Drupal\reserve\Controller\CalendarController::accessCalendarPage' + +reserve.reservation.add: + path: '/reserve_reservation/add/{month}/{day}/{time}/{id}/{ebundle}' + defaults: + _entity_form: 'reserve_reservation.default' + _title: 'Add Reservation' + requirements: + _permission: 'access content' + +reserve.reservation.add.callback: + path: '/reserve/ajax/reservation_add' + defaults: + _controller: '\Drupal\reserve\Controller\CalendarController::reservationAddModalCallback' + requirements: + _permission: 'access content' \ No newline at end of file diff --git a/reserve.schema.yml b/reserve.schema.yml new file mode 100644 index 0000000..4cf45b6 --- /dev/null +++ b/reserve.schema.yml @@ -0,0 +1,21 @@ +field.storage_settings.reserve_category_reference: + type: mapping + label: 'Reserve Category reference field storage settings' + mapping: + target_type: + type: string + label: 'Type of entity to reference' + +field.field_settings.reserve_category_reference: + type: mapping + label: 'Reserve Category reference field settings' + mapping: + handler: + type: string + label: 'Reference method' + handler_settings: + type: entity_reference_selection.[%parent.handler] + label: 'Reserve Category reference selection plugin settings' + access_override: + type: boolean + label: 'Reserve Cateegories' diff --git a/reserve.series.inc b/reserve.series.inc new file mode 100644 index 0000000..ecdb5a5 --- /dev/null +++ b/reserve.series.inc @@ -0,0 +1,192 @@ +saved)){ + return; + } + + $repeat_type = $entity->reservation_repeat_type->getString(); + + // if No Repeat, do nothing + if (!$repeat_type) { + return; + } + + $eid = $entity->id(); + $start = $entity->reservation_date->getString(); + $start_yyyy_mm_dd = date('Y-m-d', strtotime($start)); + $end = date('Y-m-d', strtotime($entity->reservation_repeat_until->getString())); + $time = $entity->reservation_time->getString(); + $length = $entity->reservation_length->getString(); + $rid = $entity->reservable_id->getString(); + $rtype = $entity->reservable_content_type->getString(); + $ebundle = $rtype . '.' . entity_load($rtype, $rid)->bundle(); + $day = date('l', strtotime($start)); + + $msg = ''; + switch ($repeat_type) { + // every day until.... + case 1: + $skip = '+1 day'; + $back = '-1 day'; + $msg = t('You have booked every day from %start until %end', array('%start' => $start_yyyy_mm_dd, '%end' => $end)); + break; + + // this day of the week until.. + case 2: + $skip = '+7 day'; + $back = '-7 day'; + $msg = t('You have booked every %day from %start until %end', array('%day' => $day, '%start' => $start_yyyy_mm_dd, '%end' => $end)); + break; + } + + // set NID as Series ID for both the primary entity and the repeat nodes + $entity->set('reservation_series_id', $eid); + + // then lets save the original reservation with Series ID but set SAVED so we skip the update hook + $entity->saved = true; + $entity->save(); + + // lets build the rest of the reservations in the series + $tmp = $entity->createDuplicate(); + $date = $start; + $failed = array(); + while (strtotime($date) <= strtotime($back, strtotime($end))) { + $date = date('Y-m-d', strtotime($skip, strtotime($date))); + + // must check to see if next booking is available + // the first one we don't check as we could not have picked it if it wasn't + if (reserve_is_slot_free($rid, $ebundle, $date, $time, $length)) { + $new = $tmp->createDuplicate(); + $new->set('reservation_date', $date); + $new->saved = true; + $new->save(); + } + else { + $failed[] = $date; + } + } + + // lets spit out some useful msgs + // first clear the msg stating we just created the reservation entity + drupal_get_messages('status'); + drupal_set_message(t('Your reservation series has been booked.')); + drupal_set_message($msg); + if (count($failed)) { + $dates = Markup::create('