diff --git a/Plugin.php b/Plugin.php index 858604e..1d10c4c 100644 --- a/Plugin.php +++ b/Plugin.php @@ -3,7 +3,7 @@ namespace Silva\Adrema; use Backend; -use Silva\Adrema\Components\EventOverview; +use Silva\Adrema\Components\EventIndex; use Silva\Adrema\Models\Settings; use System\Classes\PluginBase; @@ -49,7 +49,7 @@ class Plugin extends PluginBase public function registerComponents() { return [ - EventOverview::class => 'adrema_event_overview', + EventIndex::class => 'adrema_event_index', ]; } diff --git a/assets/vendor/adrema-form b/assets/vendor/adrema-form index 93df5ba..e629345 160000 --- a/assets/vendor/adrema-form +++ b/assets/vendor/adrema-form @@ -1 +1 @@ -Subproject commit 93df5bac1d1a7ed971a5d98477b25514a75a59e0 +Subproject commit e62934504bf2d33b65d0282a8d311df9cecb178e diff --git a/components/EventIndex.php b/components/EventIndex.php new file mode 100644 index 0000000..4d8141f --- /dev/null +++ b/components/EventIndex.php @@ -0,0 +1,113 @@ + 'EventOverview Component', + 'description' => 'No description provided yet...' + ]; + } + + public function onRun() + { + $this->addJs('assets/vendor/adrema-form/dist/main.js'); + + $this->settings = [ + 'primary_color' => Settings::get('primary_color'), + ...$this->resolvePageUrls(), + ]; + $this->event = $this->property('event'); + } + + /** + * @return array + */ + protected function resolvePageUrls(): array + { + $indexPage = $this->getPageFromProperty('indexPage'); + $singlePage = $this->getPageFromProperty('singlePage'); + $registerPage = $this->getPageFromProperty('registerPage'); + + throw_if(!str($singlePage->url)->contains(':slug'), ComponentException::class, 'slug_not_found'); + throw_if(!str($registerPage->url)->contains(':slug'), ComponentException::class, 'slug_not_found'); + + return [ + 'indexUrl' => $indexPage->url, + 'singleUrl' => $singlePage->url, + 'registerUrl' => $registerPage->url, + ]; + } + + protected function getPageFromProperty(string $property): Page + { + throw_if(!$this->property('indexPage') || !$this->property('singlePage') || !$this->property('registerPage'), ComponentException::class, 'not_all_pages_set'); + + $page = Page::find($this->property($property)); + throw_if($page === null, ComponentException::class, 'page_not_found'); + + return $page; + } + + public function defineProperties() + { + return [ + 'indexPage' => [ + 'title' => __('properties.index_page_title'), + 'type' => 'dropdown', + 'default' => null, + ], + 'singlePage' => [ + 'title' => __('properties.single_page_title'), + 'type' => 'dropdown', + 'default' => null, + ], + 'registerPage' => [ + 'title' => __('properties.register_page_title'), + 'type' => 'dropdown', + 'default' => null, + ], + 'event' => [ + 'title' => __('properties.event_title'), + 'type' => 'text', + 'default' => null, + ], + ]; + } + + public function getIndexPageOptions(): array + { + return $this->pageOptions(); + } + + public function getSinglePageOptions(): array + { + return $this->pageOptions(); + } + + public function getRegisterPageOptions(): array + { + return $this->pageOptions(); + } + + private function pageOptions(): array + { + return Page::get() + ->mapWithKeys(fn ($page) => [$page->fileName => $page->title]) + ->toArray(); + } +} diff --git a/components/EventOverview.php b/components/EventOverview.php deleted file mode 100644 index 42ce204..0000000 --- a/components/EventOverview.php +++ /dev/null @@ -1,41 +0,0 @@ - 'EventOverview Component', - 'description' => 'No description provided yet...' - ]; - } - - public function onRun(): void - { - $this->addJs('assets/vendor/adrema-form/dist/main.js'); - $this->settings = [ - 'primary_color' => Settings::get('primary_color'), - ]; - } - - /** - * @link https://docs.octobercms.com/3.x/element/inspector-types.html - */ - public function defineProperties() - { - return []; - } -} diff --git a/components/eventindex/default.htm b/components/eventindex/default.htm new file mode 100644 index 0000000..4bf8120 --- /dev/null +++ b/components/eventindex/default.htm @@ -0,0 +1,8 @@ + diff --git a/components/eventoverview/default.htm b/components/eventoverview/default.htm deleted file mode 100644 index 1b3bc95..0000000 --- a/components/eventoverview/default.htm +++ /dev/null @@ -1,40 +0,0 @@ -{% set iconClass="w-3 h-3 flex-none text-dpsgred-700 mr-2" %} - -
- - - - -
- {% partial __SELF__.alias ~ '::events.htm' events=__SELF__.events %} -
- -
- - - -
diff --git a/components/eventoverview/events.htm b/components/eventoverview/events.htm deleted file mode 100644 index c3f52ac..0000000 --- a/components/eventoverview/events.htm +++ /dev/null @@ -1,29 +0,0 @@ -{% set iconClass="w-3 h-3 flex-none text-dpsgred-700 mr-2" %} - -{% for i, event in events %} - - {% partial 'site/components/box' - image=event.header_image - image_size='calc(50vw - 2rem)|845:calc(33vw - 1.666rem)|1112:calc(25vw - 1.5rem)|1375:calc(20vw - 1.4rem)|1568:282px' - header=event.name - image_rounded=0 - link={'link': '#', 'title': 'Zur Veranstaltung'} - buttonring=1 - body - %} - {% put tagextend %} href="#" @click.prevent="showDetail({{event.id}})" data-backstop-event-box {% endput %} - - - {{'calendar'|sprite(iconClass)}} - {{ event.formattedDates }} - - {% if event.formattedTimes %} - - {{'clock'|sprite(iconClass)}} - {{ event.formattedTimes }} - - {% endif %} - - {{event.excerpt}} - {% endpartial %} -{% endfor %} diff --git a/components/eventoverview/popup.htm b/components/eventoverview/popup.htm deleted file mode 100644 index 5c505f0..0000000 --- a/components/eventoverview/popup.htm +++ /dev/null @@ -1,16 +0,0 @@ -{% set iconClass="w-3 h-3 flex-none text-dpsgred-700 mr-2" %} - -

{{event.name}}

-
- {{'calendar' | sprite(iconClass)}} -
{{event.formattedDates}}
- {{'clock'|sprite(iconClass ~ ' ml-2')}} -
{{event.formattedTimes}}
-
-
{{event.content | raw }}
-{% if event.can_register %} -Zur Anmeldung -{% endif %} - - {{'close'|sprite('w-4 h-4 text-gray-700')}} - diff --git a/exceptions/ComponentException.php b/exceptions/ComponentException.php new file mode 100644 index 0000000..dae8629 --- /dev/null +++ b/exceptions/ComponentException.php @@ -0,0 +1,19 @@ +