From 1e3fb7b0ad142f78e2c26212882b8210f2a86823 Mon Sep 17 00:00:00 2001 From: arturu Date: Fri, 10 May 2024 11:14:41 +0200 Subject: [PATCH] release(2.5.0): review code --- README.md | 91 +++++--- includes/form.inc | 4 +- includes/preprocess-block.inc | 2 +- includes/preprocess-breadcrumb.inc | 4 +- includes/preprocess-region.inc | 12 +- includes/preprocess-views.inc | 1 - includes/preprocess.inc | 41 ++-- includes/suggestions.inc | 8 +- includes/theme-settings.inc | 6 +- modules/bi_calendar/bi_calendar.info.yml | 13 -- modules/bi_calendar/bi_calendar.module | 25 --- .../src/Plugin/Block/CalendarBlock.php | 157 -------------- .../templates/bi-calendar-block.html.twig | 67 ------ modules/bi_toc/bi_toc.info.yml | 9 - modules/bi_toc/bi_toc.libraries.yml | 8 - modules/bi_toc/bi_toc.module | 5 - modules/bi_toc/css/bi_toc.css | 0 modules/bi_toc/js/tableOfContents.js | 204 ------------------ .../bi_twig_extensions.info.yml | 6 - .../bi_twig_extensions.services.yml | 5 - .../src/TwigExtension/GetSectionExtension.php | 79 ------- skenografia.install | 2 +- skenografia.post_update.php | 8 +- src/Helper/Helper.php | 4 +- 24 files changed, 114 insertions(+), 647 deletions(-) delete mode 100644 modules/bi_calendar/bi_calendar.info.yml delete mode 100644 modules/bi_calendar/bi_calendar.module delete mode 100644 modules/bi_calendar/src/Plugin/Block/CalendarBlock.php delete mode 100644 modules/bi_calendar/templates/bi-calendar-block.html.twig delete mode 100644 modules/bi_toc/bi_toc.info.yml delete mode 100644 modules/bi_toc/bi_toc.libraries.yml delete mode 100644 modules/bi_toc/bi_toc.module delete mode 100644 modules/bi_toc/css/bi_toc.css delete mode 100644 modules/bi_toc/js/tableOfContents.js delete mode 100644 modules/bi_twig_extensions/bi_twig_extensions.info.yml delete mode 100644 modules/bi_twig_extensions/bi_twig_extensions.services.yml delete mode 100644 modules/bi_twig_extensions/src/TwigExtension/GetSectionExtension.php diff --git a/README.md b/README.md index 40f78946..ed53eb6b 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,8 @@ ![NPM Downloads](https://img.shields.io/npm/dt/%40ouitoulia%2Fskenografia?style=for-the-badge&label=NPM%20DOWNLOADS&logo=npm) -Skenografia è un sub-theme drupal, basato su [bootstrap_italia](https://drupal.org/project/bootstrap_italia), progettato per implementare il design delle scuole. +Skenografia è un sub-theme drupal, basato su [bootstrap_italia](https://drupal.org/project/bootstrap_italia), progettato +per implementare il design delle scuole. ## Architettura dei contenuti Skenografia rappresenta il frontend dell'[architettura dei contenuti delle scuole v1](https://designers.italia.it/modelli/scuole/adotta-il-modello-di-sito-scolastico/definisci-architettura-e-contenuti/) @@ -21,29 +22,33 @@ mentre il backend è gestito dal modulo [ouitoulia/themethla](https://github.com L'interfaccia grafica è basata sui [I template HTML](https://designers.italia.it/modelli/scuole/adotta-il-modello-di-sito-scolastico/realizza-l-interfaccia-del-sito-scolastico/) sviluppati da Designer Italia. -Skenografia aggiorna i Template HTML dalla versione 1.6 di Bootstrap Italia alla versione 2, -rendendo il tema compatibile con Bootstrap 5.2. +Skenografia aggiorna i Template HTML dalla versione 1.6 di Bootstrap Italia alla +versione 2, rendendo il tema compatibile con Bootstrap 5.2. ### Componenti Rispetto al repository [Design scuola pagine statiche](https://github.com/italia/design-scuole-pagine-statiche) -il tema usa componenti - menu, card, header, footer, ecc. - conformi a ![Libraries.io dependency status for latest release](https://img.shields.io/github/package-json/dependency-version/ouitoulia/skenografia/bootstrap-italia?style=flat&logo=github) +il tema usa componenti - menu, card, header, footer, ecc. - conformi a +![Libraries.io dependency status for latest release](https://img.shields.io/github/package-json/dependency-version/ouitoulia/skenografia/bootstrap-italia?style=flat&logo=github) al posto di `bootstrap-italia:1.6`. ### Librerie CSS/JS Rispetto al repository [Design scuola pagine statiche](https://github.com/italia/design-scuole-pagine-statiche) -gli stili CSS e i componenti JavaScript sono stati riscritti per essere conformi a ![Libraries.io dependency status for latest release](https://img.shields.io/github/package-json/dependency-version/ouitoulia/skenografia/bootstrap-italia?style=flat&logo=github) +gli stili CSS e i componenti JavaScript sono stati riscritti per essere conformi +a ![Libraries.io dependency status for latest release](https://img.shields.io/github/package-json/dependency-version/ouitoulia/skenografia/bootstrap-italia?style=flat&logo=github) al posto di `bootstrap-italia:1.6`. -La differenza più rilevante rispetto agli assets pubblicati nel repo [Design scuola pagine statiche](https://github.com/italia/design-scuole-pagine-statiche), -oltre alla compatibilità alla versione 2 di bootstrap-italia, riguarda il design del software. -Dal punto di vista del design, è stato abbandonato l'approccio della sovrascrittura -degli stili (noto come "override" e/o "on top") in favore di un'implementazione -più efficiente e scalabile. +La differenza più rilevante rispetto agli assets pubblicati nel repo +[Design scuola pagine statiche](https://github.com/italia/design-scuole-pagine-statiche), +oltre alla compatibilità alla versione 2 di bootstrap-italia, riguarda il design +del software. Dal punto di vista del design, è stato abbandonato l'approccio +della sovrascrittura degli stili (noto come "override" e/o "on top") in favore +di un'implementazione più efficiente e scalabile. Skenografia adotta un sistema di build dinamico, il processo di sviluppo si basa -sulla modifica delle variabili di bootstrap-italia per poi compilare la variante di -bootstrap-italia con il design delle scuole. -Questo approccio non solo migliora le prestazioni, ma anche la manutenibilità del codice, -consentendo al progetto un'espansione più fluida, gestibile e riusabile. +sulla modifica delle variabili di bootstrap-italia per poi compilare la variante +di bootstrap-italia con il design delle scuole. +Questo approccio non solo migliora le prestazioni, ma anche la manutenibilità +del codice, consentendo al progetto un'espansione più fluida, +gestibile e riusabile. ### Distribuzione @@ -52,23 +57,30 @@ consentendo al progetto un'espansione più fluida, gestibile e riusabile. ![Packagist Downloads](https://img.shields.io/packagist/dt/ouitoulia/skenografia?label=Composer%20downloads) ![NPM Downloads](https://img.shields.io/npm/dt/%40ouitoulia%2Fskenografia?label=NPM%20downloads&logo=npm) -I sorgenti SCSS e JavaScript vengono caricati automaticamente su npm per agevolare il -riutilizzo e la personalizzazione da parte degli sviluppatori. Inoltre attraverso l'uso delle -GitHub Actions, le librerie vengono automaticamente compilate e distribuite su diverse CDN +I sorgenti SCSS e JavaScript vengono caricati automaticamente +su npm per agevolare il riutilizzo e la personalizzazione +da parte degli sviluppatori. Inoltre attraverso l'uso delle GitHub Actions, +le librerie vengono automaticamente compilate e distribuite su diverse CDN in modo che siano già pronte per la produzione. -- https://github.com/ouitoulia/skenografia/releases/latest (build produzione e sorgenti tema) -- https://www.npmjs.com/package/@ouitoulia/skenografia (sorgenti scss e js) -- https://www.jsdelivr.com/package/npm/@ouitoulia/skenografia (build produzione) -- https://classic.yarnpkg.com/en/package/@ouitoulia/skenografia (build produzione) -- https://unpkg.com/browse/@ouitoulia/skenografia@1.20.0/ (sorgenti scss e js e build produzione) +- https://github.com/ouitoulia/skenografia/releases/latest +(build produzione e sorgenti tema) +- https://www.npmjs.com/package/@ouitoulia/skenografia +(sorgenti scss e js) +- https://www.jsdelivr.com/package/npm/@ouitoulia/skenografia +(build produzione) +- https://classic.yarnpkg.com/en/package/@ouitoulia/skenografia +(build produzione) +- https://unpkg.com/browse/@ouitoulia/skenografia@2.5.0/ +(sorgenti scss e js e build produzione) ## Issue Le issue vengono gestite nel repository principale del progetto: https://github.com/ouitoulia/diagraphe/issues ## Contributori, dipendenze e altre informazioni -Per contribuire al progetto effettua un Fork, aggiungi le tue modifiche e poi fai una Pull Request. +Per contribuire al progetto effettua un Fork, aggiungi le tue modifiche +e poi fai una Pull Request. - [Contributori di Skenografia](https://github.com/ouitoulia/skenografia/graphs/contributors) - [Elenco delle dipendenze di Skenografia](https://github.com/ouitoulia/skenografia/network/dependencies) @@ -76,13 +88,17 @@ Per contribuire al progetto effettua un Fork, aggiungi le tue modifiche e poi fa ## Licenze software dei componenti di terze parti ### Componenti distribuiti con Skenografia -Vengono di seguito elencate le licenze dei componenti distribuiti (fonte: [package.json/dependencies](package.json)) -- [Bootstrap Italia 2](https://italia.github.io/bootstrap-italia/) © Team per la Trasformazione Digitale, licenza BSD -- [Design scuole pagine statiche](https://github.com/italia/design-scuole-pagine-statiche) © Team per la Trasformazione Digitale, licenza BSD +Vengono di seguito elencate le licenze dei componenti distribuiti +(fonte: [package.json/dependencies](package.json)) +- [Bootstrap Italia 2](https://italia.github.io/bootstrap-italia/) © Team per la Trasformazione Digitale, +licenza BSD +- [Design scuole pagine statiche](https://github.com/italia/design-scuole-pagine-statiche) © Team per la +Trasformazione Digitale, licenza BSD - [Hamburgers](https://jonsuh.com/hamburgers/) © Jonathan Suh, licenza MIT ### Principali dipendenze per la fase di compilazione e sviluppo -Vengono di seguito elencate le licenze dei componenti usati per lo sviluppo (fonte: [package.json/devDependencies](package.json)) +Vengono di seguito elencate le licenze dei componenti usati per +lo sviluppo (fonte: [package.json/devDependencies](package.json)) - [clean-webpack-plugin](https://github.com/johnagan/clean-webpack-plugin) © PonteLabs, licenza MIT - [copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin) © webpack-contrib, licenza MIT - [cross-env](https://github.com/kentcdodds/cross-env) © Kent C. Dodds, licenza MIT @@ -106,12 +122,23 @@ Vengono di seguito elencate le licenze dei componenti usati per lo sviluppo (fon Copyright (C) 2023/2024 https://github.com/ouitoulia -This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3 as published by the Free Software Foundation. +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License version 3 +as published by the Free Software Foundation. -This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty +of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. -Questo è un software libero: puoi ridistribuirlo e/o modificarlo secondo i termini della GNU General Public License versione 3 pubblicata dalla Free Software Foundation. +Questo è un software libero: puoi ridistribuirlo e/o modificarlo secondo +i termini della GNU General Public License versione 3 pubblicata dalla +Free Software Foundation. -Questo programma è distribuito nella speranza che possa essere utile, ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di COMMERCIABILITÀ o IDONEITÀ PER UNO SCOPO PARTICOLARE. Vedere la GNU General Public License per maggiori dettagli. +Questo programma è distribuito nella speranza che possa essere utile, +ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di +COMMERCIABILITÀ o IDONEITÀ PER UNO SCOPO PARTICOLARE. +Vedere la GNU General Public License per maggiori dettagli. -Questo software è distribuito sotto i termini della GNU Affero General Public License versione 3 (AGPL-3.0) +Questo software è distribuito sotto i termini della GNU Affero General Public +License versione 3 (AGPL-3.0) diff --git a/includes/form.inc b/includes/form.inc index cc289fd8..1a54ed29 100644 --- a/includes/form.inc +++ b/includes/form.inc @@ -8,9 +8,9 @@ use Drupal\Core\Form\FormStateInterface; /** - * Implements hook_form_alter() + * Implements hook_form_alter(). */ -function skenografia_form_alter(&$form, FormStateInterface &$form_state,$form_id) { +function skenografia_form_alter(&$form, FormStateInterface &$form_state, $form_id):void { if (isset($form['#id']) && $form['#id'] == 'views-exposed-form-secondo-livello-servizi-personale-scolastico') { $tmp_array = []; $tmp_array[1202] = $form['field_tipologia_servizio_target_id']['#options'][1202]; diff --git a/includes/preprocess-block.inc b/includes/preprocess-block.inc index fecc36c0..b816d492 100644 --- a/includes/preprocess-block.inc +++ b/includes/preprocess-block.inc @@ -18,7 +18,7 @@ function skenografia_preprocess_block(array &$variables): void { try { $variables = array_merge_recursive($variables, Helper::getLocality()); } - catch (InvalidPluginDefinitionException|PluginNotFoundException $e) { + catch (InvalidPluginDefinitionException | PluginNotFoundException $e) { } } } diff --git a/includes/preprocess-breadcrumb.inc b/includes/preprocess-breadcrumb.inc index 13e4f7c1..54bd5b88 100644 --- a/includes/preprocess-breadcrumb.inc +++ b/includes/preprocess-breadcrumb.inc @@ -5,8 +5,6 @@ * Preprocess breadcrumb. */ -use Drupal\Core\Template\Attribute; - /** * Implements hook_preprocess_HOOK() for breadcrumb.html.twig. */ @@ -25,7 +23,7 @@ function skenografia_preprocess_breadcrumb(array &$variables): void { // Fix cache. $variables['#cache']['contexts'][] = 'url'; - $variables['breadcrumb'][ array_key_last($variables['breadcrumb']) ]["text"] = $page_title_sanitized; + $variables['breadcrumb'][array_key_last($variables['breadcrumb'])]["text"] = $page_title_sanitized; } } } diff --git a/includes/preprocess-region.inc b/includes/preprocess-region.inc index e9864444..ad264ec8 100644 --- a/includes/preprocess-region.inc +++ b/includes/preprocess-region.inc @@ -6,9 +6,9 @@ */ use Drupal\bootstrap_italia\Helper\Helper; -use Drupal\skenografia\Helper\Helper as SHelper; use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException; use Drupal\Component\Plugin\Exception\PluginNotFoundException; +use Drupal\skenografia\Helper\Helper as SHelper; /** * Implements hook_preprocess_region(). @@ -16,12 +16,16 @@ use Drupal\Component\Plugin\Exception\PluginNotFoundException; function skenografia_preprocess_region(array &$variables): void { if ($variables['region'] == 'header_nav') { - // Branding + // Branding. $variables['site_logo'] = Drupal::theme()->getActiveTheme()->getLogo(); $variables['site_name'] = Drupal::config('system.site')->get('name'); $variables['site_slogan'] = Drupal::config('system.site')->get('slogan'); - try {$variables = array_merge_recursive($variables, SHelper::getLocality());} - catch (InvalidPluginDefinitionException|PluginNotFoundException $e) {} + try { + $variables = array_merge_recursive($variables, SHelper::getLocality()); + } + catch (InvalidPluginDefinitionException | PluginNotFoundException $e) { + + } // Social. // NB queste due linee potrebbero sembrare duplicate ma non lo sono. diff --git a/includes/preprocess-views.inc b/includes/preprocess-views.inc index 56136159..d53382d6 100644 --- a/includes/preprocess-views.inc +++ b/includes/preprocess-views.inc @@ -4,4 +4,3 @@ * @file * Hook THEME_preprocess_views_view_HOOK(). */ - diff --git a/includes/preprocess.inc b/includes/preprocess.inc index 4d0310c4..d93065c8 100644 --- a/includes/preprocess.inc +++ b/includes/preprocess.inc @@ -5,24 +5,25 @@ * Hook THEME_preprocess. */ -use Drupal\skenografia\Helper\Helper as SHelper; use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException; use Drupal\Component\Plugin\Exception\PluginNotFoundException; +use Drupal\skenografia\Helper\Helper as SHelper; +use Drupal\user\Entity\User; /** * Implements hook_preprocess_HOOK() for all templates. */ function skenografia_preprocess(&$variables): void { - // @todo: Ricordarsi di fare UI per permettere la modifica della variabile + // @todo Ricordarsi di fare UI per permettere la modifica della variabile $variables['skenografia_libraries_path'] = '/libraries/ouitoulia-skenografia'; - // Restituisco l'anno scolastico corrente + // Restituisco l'anno scolastico corrente. $data_di_cambio_anno_scolastico = ((int) date('n') * 100) + (int) date('j'); if ($data_di_cambio_anno_scolastico > 831) { $variables['anno_scolastico_corrente'] = date('Y') . '/' . (int) date('Y') + 1; } else { - $variables['anno_scolastico_corrente'] = (int) date('Y') - 1 . '/' . date('Y'); + $variables['anno_scolastico_corrente'] = (int) date('Y') - 1 . '/' . date('Y'); } } @@ -31,7 +32,7 @@ function skenografia_preprocess(&$variables): void { */ function skenografia_preprocess_node(&$variables): void { // Recupero le informazioni sull'autore nel caso siano presenti in - // un contenuto di tipo Persona + // un contenuto di tipo Persona. if ( isset($variables['node']) && $variables['node']->hasField('field_persona_responsabile') @@ -39,39 +40,45 @@ function skenografia_preprocess_node(&$variables): void { /** @var \Drupal\node\Entity\Node $node */ $node = $variables['node']; - // Get node submitter + // Get node submitter. $uid = $node->getOwner()->id(); - // Load submitter account - $account = \Drupal\user\Entity\User::load($uid); + // Load submitter account. + $account = User::load($uid); if ($account->field_codice_fiscale->getValue()) { - // get codice fiscale from submitter account + // Get codice fiscale from submitter account. $cf = $account->field_codice_fiscale->getValue()[0]['value']; - // load profile (Persona), if exists return id else null + // Load profile (Persona), if exists return id else null // https://www.drupal.org/docs/drupal-apis/entity-api/working-with-the-entity-api#s-load-an-entity-from-the-database $nids = \Drupal::entityTypeManager() ->getStorage('node') ->loadByProperties([ 'field_codice_fiscale' => $cf, ]); - // nid or null + // Nid or null. $variables['author_profile_nid'] = array_key_first($nids); - } else { + } + else { $variables['author_profile_nid'] = NULL; } - } else { + } + else { $variables['author_profile_nid'] = NULL; } - // Variabili necessarie nel nodo "/scuola" + // Variabili necessarie nel nodo "/scuola". if ($variables['url'] == '/scuola') { $variables['site_logo'] = Drupal::theme()->getActiveTheme()->getLogo(); $variables['site_name'] = Drupal::config('system.site')->get('name'); $variables['site_slogan'] = Drupal::config('system.site')->get('slogan'); - try {$variables = array_merge_recursive($variables, SHelper::getLocality());} - catch (InvalidPluginDefinitionException|PluginNotFoundException $e) {} + try { + $variables = array_merge_recursive($variables, SHelper::getLocality()); + } + catch (InvalidPluginDefinitionException | PluginNotFoundException $e) { + + } } } @@ -81,7 +88,7 @@ function skenografia_preprocess_node(&$variables): void { */ function skenografia_preprocess_oembed_lazyload(&$variables): void { $variables['privacy_path'] = - null !== theme_get_setting('privacy_policy') ? + NULL !== theme_get_setting('privacy_policy') ? Drupal::service('path_alias.manager')->getAliasByPath('/node/' . theme_get_setting('privacy_policy')[0]['target_id']) : '#'; } diff --git a/includes/suggestions.inc b/includes/suggestions.inc index b87f3a3a..9ce73b46 100644 --- a/includes/suggestions.inc +++ b/includes/suggestions.inc @@ -17,7 +17,7 @@ function skenografia_theme_suggestions_page_alter(array &$suggestions, array &$v } /** - * Implements hook_theme_suggestions_node_alter(). + * Implements hook_theme_suggestions_HOOK_alter(). */ function skenografia_theme_suggestions_node_alter(array &$suggestions, array $variables): void { if (in_array('node__type_page__view_mode_full', $suggestions, TRUE)) { @@ -27,6 +27,9 @@ function skenografia_theme_suggestions_node_alter(array &$suggestions, array $va } } +/** + * Implements hook_theme_suggestions_HOOK_alter(). + */ function skenografia_theme_suggestions_views_view_fields_alter(array &$suggestions, array &$variables): void { if (isset($variables['view'])) { $view = $variables['view']; @@ -36,6 +39,9 @@ function skenografia_theme_suggestions_views_view_fields_alter(array &$suggestio } } +/** + * Implements hook_theme_suggestions_HOOK_alter(). + */ function skenografia_theme_suggestions_views_view_field_alter(array &$suggestions, array &$variables): void { if (isset($variables['field']) && isset($variables['view'])) { $field = $variables['field']; diff --git a/includes/theme-settings.inc b/includes/theme-settings.inc index e2aa083b..1bb7d20e 100644 --- a/includes/theme-settings.inc +++ b/includes/theme-settings.inc @@ -4,6 +4,7 @@ * @file * Theme settings. */ + use Drupal\Core\Form\FormStateInterface; use Drupal\node\Entity\Node; @@ -42,8 +43,8 @@ function skenografia_form_system_theme_settings_alter(array &$form, FormStateInt '#tags' => TRUE, '#selection_handler' => 'default', '#default_value' => - null !== theme_get_setting('privacy_policy') ? - Node::load(theme_get_setting('privacy_policy')[0]['target_id']) : 0, + NULL !== theme_get_setting('privacy_policy') ? + Node::load(theme_get_setting('privacy_policy')[0]['target_id']) : 0, ]; $form['#validate'][] = 'skenografia_form_system_theme_settings_validate'; @@ -75,4 +76,3 @@ function skenografia_form_system_theme_settings_validate(array &$form, FormState } } } - diff --git a/modules/bi_calendar/bi_calendar.info.yml b/modules/bi_calendar/bi_calendar.info.yml deleted file mode 100644 index f11ba70b..00000000 --- a/modules/bi_calendar/bi_calendar.info.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: "Bootstrap Italia Calendar" -description: This module adds a block with events calendar. -package: "Bootstrap Italia" - -type: module -core_version_requirement: ^9 || ^10 -# dependencies: - -components: - namespaces: - # Components library 2.0 - bi-bcl: - - ../../components/components-2 diff --git a/modules/bi_calendar/bi_calendar.module b/modules/bi_calendar/bi_calendar.module deleted file mode 100644 index b21efaae..00000000 --- a/modules/bi_calendar/bi_calendar.module +++ /dev/null @@ -1,25 +0,0 @@ - [ - // We use 'variables' when the item to be passed is an array whose - // structure must be described here. - 'variables' => [ - 'month_year' => NULL, - 'items' => NULL, - 'start_index' => NULL, - ], - ], - ]; -} diff --git a/modules/bi_calendar/src/Plugin/Block/CalendarBlock.php b/modules/bi_calendar/src/Plugin/Block/CalendarBlock.php deleted file mode 100644 index f1619337..00000000 --- a/modules/bi_calendar/src/Plugin/Block/CalendarBlock.php +++ /dev/null @@ -1,157 +0,0 @@ - 0, - 'bi_calendar_hp_stop' => 12, - ]; - } - - /** - * {@inheritdoc} - */ - public function blockForm($form, FormStateInterface $form_state) { - $form['bi_calendar_hp_start'] = [ - '#type' => 'number', - '#title' => $this->t('Numero di giorni precedenti ad oggi'), - '#description' => $this->t('Da quale giorno deve partire la visibilità. Inserire un numero negativo. Es: -4'), - '#default_value' => $this->configuration['bi_calendar_hp_start'], - ]; - $form['bi_calendar_hp_stop'] = [ - '#type' => 'number', - '#title' => $this->t('Numero di giorni dopo oggi'), - '#description' => $this->t('Fino a quale giorno deve arrivare la visibilità.'), - '#default_value' => $this->configuration['bi_calendar_hp_stop'], - ]; - $form['bi_calendar_days_number'] = [ - '#type' => 'number', - '#title' => $this->t('Numero di giorni da visualizzare'), - '#description' => $this->t('Numero di card giorno da visualizzare.'), - '#default_value' => $this->configuration['bi_calendar_days_number'], - ]; - - return $form; - } - - /** - * {@inheritdoc} - */ - public function blockSubmit($form, FormStateInterface $form_state) { - $this->configuration['bi_calendar_hp_start'] - = $form_state->getValue('bi_calendar_hp_start'); - $this->configuration['bi_calendar_hp_stop'] - = $form_state->getValue('bi_calendar_hp_stop'); - $this->configuration['bi_calendar_days_number'] - = $form_state->getValue('bi_calendar_days_number'); - } - - /** - * {@inheritdoc} - */ - public function build() { - $start = $this->configuration['bi_calendar_hp_start']; - $stop = $this->configuration['bi_calendar_hp_stop']; - /** @var Drupal\Core\Datetime\DateFormatterInterface $date_formatter */ - // $date_formatter = \Drupal::service('date.formatter'); - $utc_timezone = new \DateTimeZone("Europe/Rome"); - $today = date('U'); - - $date_time = DrupalDateTime::createFromTimestamp($today, $utc_timezone); - $today_date = DrupalDateTime::createFromTimestamp($today, $utc_timezone); - - $items = []; - - if ($start < 0) { - $dateInterval = 'P' . abs($start) . 'D'; - $date_time->sub(new \DateInterval($dateInterval)); - } - // $month_year = $date_formatter->format($today, 'month_year'); - $month = $date_time->format('F'); - $year = $date_time->format('Y'); - $month_year = $month . ' ' . $year; - $start_index = $ii = 1; - - for ($i=$start; $i < $stop; $i++) { - if ($today_date->diff($date_time)->days === 0) { - $start_index = $ii - 1; - } - $items[$i]['day'] = $date_time->format('d'); - $items[$i]['dayname'] = $date_time->format('D'); - $items[$i]['month'] = $date_time->format('m'); - $items[$i]['ext_month'] = $date_time->format('F'); - $nodes = $this->nodeByDay($date_time->format('Y-m-d')); - $items[$i]['nodes'] = []; - foreach ($nodes as $nid => $node) { - $items[$i]['nodes'][] = $node; - } - /* Next day step. */ - $date_time->add(new \DateInterval('P1D')); - $ii++; - } - if ($month !== $date_time->format('F')) { - if ($year === $date_time->format('Y')) { - $month .= '/' . $date_time->format('F'); - $month_year = $month . ' '. $year; - } - else { - $month_year = $month . ' '. $year . '/' . $date_time->format('F') . ' ' . $date_time->format('Y'); - } - } - - $slider_hp = $this->configuration['bi_calendar_hp'] ?? FALSE; - - $build['content'] = [ - '#theme' => 'bi_calendar_block', - '#month_year' => $month_year, - '#items' => $items, - '#start_index' => $start_index, - '#slider_hp' => $slider_hp, - ]; - $build['#cache']['max-age'] = 60; - - return $build; - } - - /** - * Get calendar nodes. - * - * @param string $day - * - * @return array - */ - private function nodeByDay(string $day) { - - $date_start = $day . 'T00:00:00'; - $date_end = $day . 'T23:59:59'; - $query = \Drupal::entityQuery('node') - ->accessCheck(TRUE) - ->condition('status', 1) - ->condition('type', 'evento') - ->condition('field_data_e_orario_di_inizio', [$date_start, $date_end], 'BETWEEN'); - // $debug = $query->__toString(); - $result = $query->execute(); - - return \Drupal::entityTypeManager()->getStorage('node')->loadMultiple($result); - } - -} diff --git a/modules/bi_calendar/templates/bi-calendar-block.html.twig b/modules/bi_calendar/templates/bi-calendar-block.html.twig deleted file mode 100644 index 3cf77f52..00000000 --- a/modules/bi_calendar/templates/bi-calendar-block.html.twig +++ /dev/null @@ -1,67 +0,0 @@ -{% set slides = [] %} -{% for item in items %} - {%- set card -%} - {% embed '@bi-bcl/card/card.html.twig' with { - card_title: item.day, - card_subtitle: item.dayname, - } %} - - {% block cardTitle %} - {% set _card_title_classes = [ - 'card-title', - _card_big_title ? 'big-heading', - 'pb-4', - 'mb-10', - ] %} -

- {{ _card_title }} - {% if _card_subtitle is not empty %} - {{ _card_subtitle }} - {% endif %} -

- {% endblock %} - - {% block cardText %} - {% for node in item['nodes'] %} -

- {% if node.field_immagine.value %} - - {% set image = node.field_immagine.entity.field_media_image %} - - {% set imagestyle = { - '#theme': 'image_style', - '#style_name': 'focal_point_thumbnail_1x_1_1_40x40_', - '#uri': image.entity.uri.value, - '#alt': image.alt, - '#attributes': { class: 'me-3 rounded' }, - } %} - - {{ imagestyle }} - {% endif %} - {{ link(node.label, 'entity:node/' ~ node.id, {'class': ['fw-bold'], 'data-focus-mouse': ['false']}) }} -

- {% endfor %} - {% endblock %} - - {% endembed %} - {%- endset -%} - {% set slides = slides|merge([card]) %} -{% endfor %} - - -{% embed '@bi-bcl/carousel/carousel.html.twig' with { - carousel_col_type: 'it-calendar-wrapper', - carousel_title: month_year, - slides: slides, -} %} - - {% block carouselTitle %} - {% if _carousel_title is not empty %} -
-
- -
-
- {% endif %} - {% endblock %} -{% endembed %} diff --git a/modules/bi_toc/bi_toc.info.yml b/modules/bi_toc/bi_toc.info.yml deleted file mode 100644 index 52311724..00000000 --- a/modules/bi_toc/bi_toc.info.yml +++ /dev/null @@ -1,9 +0,0 @@ -name: 'Bootstrap Italia Toc js' -description: 'Build a hierarchical table of contents from header tags present on a page with the tableOfContents.js library.' -package: "Bootstrap Italia" - -type: module -core_version_requirement: ^9 || ^10 - -dependencies: - - drupal:node diff --git a/modules/bi_toc/bi_toc.libraries.yml b/modules/bi_toc/bi_toc.libraries.yml deleted file mode 100644 index 944f2c72..00000000 --- a/modules/bi_toc/bi_toc.libraries.yml +++ /dev/null @@ -1,8 +0,0 @@ -bi_toc: - css: - theme: - css/bi_toc.css: {} - js: - js/tableOfContents.js: {} - dependencies: - - core/drupal diff --git a/modules/bi_toc/bi_toc.module b/modules/bi_toc/bi_toc.module deleted file mode 100644 index 6e47b8c6..00000000 --- a/modules/bi_toc/bi_toc.module +++ /dev/null @@ -1,5 +0,0 @@ -'; - } - return html; - }; - - /** - * Get the HTML to close an indented list a specific number of levels - * @param {Integer} count The number of times to "outdent" the list - * @return {String} The HTML - */ - var getOutdent = function (count) { - var html = ''; - for (var i = 0; i < count; i++) { - html += ''; - } - return html; - }; - - /** - * Get the HTML string to start a new list of headings - * @param {Integer} diff The number of levels in or out from the current level the list is - * @param {Integer} index The index of the heading in the "headings" NodeList - * @return {String} The HTML - */ - var getStartingHTML = function (diff, index) { - - // If indenting - if (diff > 0) { - return getIndent(diff); - } - - // If outdenting - if (diff < 0) { - return getOutdent(Math.abs(diff)); - } - - // If it's not the first item and there's no difference - if (index && !diff) { - return ''; - } - - return ''; - }; - - /** - * Inject the table of contents into the DOM - */ - var injectTOC = function () { - - // Track the current heading level - var level = headings[0].tagName.slice(1); - var startingLevel = level; - - // Cache the number of headings - var len = headings.length - 1; - - // Inject the HTML into the DOM - toc.innerHTML = - // '<' + settings.headingLevel + '>' + settings.heading + '' + - '<' + settings.listType + ' class="link-list">' + - Array.prototype.map.call(headings, function (heading, index) { - - // Add an ID if one is missing - // createID(heading); - - // Check the heading level vs. the current list - var currentLevel = heading.tagName.slice(1); - var levelDifference = currentLevel - level; - level = currentLevel; - // var title = heading.querySelector("h2.it-toc-header"); - // if (title) { - var html = getStartingHTML(levelDifference, index); - - // Generate the HTML - html += - '