From 44a2061f8e977b74767a86e88915439bacd3a917 Mon Sep 17 00:00:00 2001 From: Tero Elonen Date: Mon, 10 Jun 2024 17:38:49 +0300 Subject: [PATCH 01/37] UHF-9708: Grant defined ad role the drupal role survey_editor --- public/sites/default/all.settings.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/public/sites/default/all.settings.php b/public/sites/default/all.settings.php index d23b71f4..346eeca7 100644 --- a/public/sites/default/all.settings.php +++ b/public/sites/default/all.settings.php @@ -38,6 +38,10 @@ 'ad_role' => 'Drupal_Helfi_Rekry_sisallontuottajat_suppea', 'roles' => ['content_producer'], ], + [ + 'ad_role' => 'Drupal_Helfi_Etusivu_kayttajakyselyt', + 'roles' => ['survey_editor'], + ], [ 'ad_role' => '947058f4-697e-41bb-baf5-f69b49e5579a', 'roles' => ['super_administrator'], From cc59be0735e4e843a7022a495b2fee8da6658843 Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Mon, 8 Jul 2024 08:14:43 +0300 Subject: [PATCH 02/37] UHF-10311: updated settings.php --- public/sites/default/settings.php | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/public/sites/default/settings.php b/public/sites/default/settings.php index 9006eeff..38cfb196 100755 --- a/public/sites/default/settings.php +++ b/public/sites/default/settings.php @@ -229,24 +229,30 @@ function drupal_get_env(string|array $variables) : mixed { } } } +$stage_file_proxy_origin = getenv('STAGE_FILE_PROXY_ORIGIN'); +$stage_file_proxy_dir = getenv('STAGE_FILE_PROXY_ORIGIN_DIR'); -if ($stage_file_proxy_origin = getenv('STAGE_FILE_PROXY_ORIGIN')) { - $config['stage_file_proxy.settings']['origin'] = $stage_file_proxy_origin; - $config['stage_file_proxy.settings']['origin_dir'] = getenv('STAGE_FILE_PROXY_ORIGIN_DIR') ?: 'test'; +if ($stage_file_proxy_origin || $stage_file_proxy_dir) { + $config['stage_file_proxy.settings']['origin'] = $stage_file_proxy_origin ?: 'https://stplattaprod.blob.core.windows.net'; + $config['stage_file_proxy.settings']['origin_dir'] = $stage_file_proxy_dir; $config['stage_file_proxy.settings']['hotlink'] = FALSE; $config['stage_file_proxy.settings']['use_imagecache_root'] = FALSE; } -// Map API accounts. The value should be a base64 encoded JSON string. -// @see https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/blob/main/documentation/api-accounts.md. -if ($api_accounts = getenv('DRUPAL_API_ACCOUNTS')) { - $config['helfi_api_base.api_accounts']['accounts'] = json_decode(base64_decode($api_accounts), TRUE); +if ($drupal_pubsub_vault = getenv('DRUPAL_PUBSUB_VAULT')) { + $config['helfi_api_base.api_accounts']['vault'][] = [ + 'id' => 'pubsub', + 'plugin' => 'json', + 'data' => trim($drupal_pubsub_vault), + ]; } -// Map vault accounts. The value should be a base64 encoded JSON string. -// @see https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/blob/main/documentation/api-accounts.md. -if ($vault_accounts = getenv('DRUPAL_VAULT_ACCOUNTS')) { - $config['helfi_api_base.api_accounts']['vault'] = json_decode(base64_decode($vault_accounts), TRUE); +if ($drupal_navigation_vault = getenv('DRUPAL_NAVIGATION_VAULT')) { + $config['helfi_api_base.api_accounts']['vault'][] = [ + 'id' => 'helfi_navigation', + 'plugin' => 'authorization_token', + 'data' => trim($drupal_navigation_vault), + ]; } // Override session suffix when present. @@ -382,4 +388,3 @@ function drupal_get_env(string|array $variables) : mixed { if (empty($settings['deployment_identifier'])) { $settings['deployment_identifier'] = filemtime(__DIR__ . '/../../../composer.lock'); } - From 1ee17070c3ac0c6edf311c3a435570ae3e7d0cb8 Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Fri, 12 Jul 2024 15:23:28 +0300 Subject: [PATCH 03/37] initial commit for the fix. Recursively find the parameters from the array tree --- .../HelfiHakuvahtiSubscribeController.php | 72 ++++++++++++++++--- .../custom/helfi_hakuvahti/translations/fi.po | 21 ++++++ 2 files changed, 83 insertions(+), 10 deletions(-) diff --git a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php index f157ff7d..fa98df22 100644 --- a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php +++ b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php @@ -153,21 +153,31 @@ private function getSearchDescriptionTaxonomies($obj): string { $taxonomyIds = []; $elasticQuery = base64_decode($obj->elastic_query); - $elasticQueryObject = json_decode($elasticQuery); + $queryAsArray = json_decode($elasticQuery, TRUE); // Free text search. - $query = $elasticQueryObject->query->bool->must[1]->bool->should[1]->combined_fields->query ?? NULL; + if ( + $this->queryContains('combined_fields', $elasticQuery) && + $combinedFields = $this->sliceTree($queryAsArray['query']['bool']['must'], 'combined_fields') + ) { + $query = $combinedFields['query']; + } - // Ammattiala / Task area. - $externalTaxonomyIds = array_merge($taxonomyIds, $elasticQueryObject->query->bool->must[2]->terms->task_area_external_id ?? []); - if (!empty($externalTaxonomyIds)) { - $terms = $this->getLabelsByExternalId($externalTaxonomyIds, $obj->lang); + $taskAreaField = 'task_area_external_id'; + if ( + $this->queryContains($taskAreaField, $elasticQuery) && + $taskAreaIds = $this->sliceTree($queryAsArray['query']['bool']['must'], $taskAreaField) + ) { + $terms = $this->getLabelsByExternalId($taskAreaIds, $obj->lang); } - // Type of employment. - $taxonomyIds = array_merge($taxonomyIds, $elasticQueryObject->query->bool->must[3]->bool->should[1]->terms->employment_type_id ?? []); - if (!empty($taxonomyIds)) { - $employmentTermLabels = $this->getLabelsByTermIds($taxonomyIds, $obj->lang); + + $employmentTypeField = 'employment_type_id'; + if ( + $this->queryContains($employmentTypeField, $elasticQuery) && + $employmentIds = $this->sliceTree($queryAsArray['query']['bool']['must'], $employmentTypeField) + ) { + $employmentTermLabels = $this->getLabelsByTermIds($employmentIds, $obj->lang); } // Job location: @@ -265,4 +275,46 @@ public function post(): JsonResponse { } } + /** + * Recursive function to get what we want from tree of arrays. + * + * @param $tree + * Array we are traversing. + * @param $needle + * What key are we looking for. + * + * @return false|array + * False or the array we are looking for. + */ + private function sliceTree($tree, $needle): false|array { + if (is_array($tree) && isset($tree[$needle])) return $tree[$needle]; + + $result = NULL; + foreach($tree as $branch) { + if (isset($branch[$needle])) return $branch[$needle]; + + $result = $this->sliceTree($branch, $needle); + if ($result) { + break; + } + } + + return $result ?? false; + } + + /** + * Check if the non-decoded query contains a specific string. + * + * @param string $term_name + * What are we looking for. + * @param string $query_string + * Where are we looking from. + * + * @return bool + * The string exists. + */ + private function queryContains(string $term_name, string $query_string): bool { + return str_contains($query_string, $term_name); + } + } diff --git a/public/modules/custom/helfi_hakuvahti/translations/fi.po b/public/modules/custom/helfi_hakuvahti/translations/fi.po index e2b023bc..03b99d0a 100644 --- a/public/modules/custom/helfi_hakuvahti/translations/fi.po +++ b/public/modules/custom/helfi_hakuvahti/translations/fi.po @@ -65,3 +65,24 @@ msgstr "Vahvista hakuvahti" msgid "Are you sure you wish to delete the saved search?" msgstr "Haluatko varmasti poistaa hakuvahdin?" + +msgid "Central area" +msgstr "Keskinen alue" + +msgid "Eastern area" +msgstr "Itäinen alue" + +msgid "Southern area" +msgstr "Eteläinen alue" + +msgid "South-Eastern area" +msgstr "Kaakkoinen alue" + +msgid "Western area" +msgstr "Läntinen alue" + +msgid "Northern area" +msgstr "Pohjoinen alue" + +msgid "North-Eastern area" +msgstr "Luoteinen alue" From 02a52ae34d6b26551ad41fd202e1f85e5ddc47b5 Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Mon, 15 Jul 2024 07:20:26 +0300 Subject: [PATCH 04/37] added contexts --- public/modules/custom/helfi_hakuvahti/translations/fi.po | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/public/modules/custom/helfi_hakuvahti/translations/fi.po b/public/modules/custom/helfi_hakuvahti/translations/fi.po index 03b99d0a..8132a6b0 100644 --- a/public/modules/custom/helfi_hakuvahti/translations/fi.po +++ b/public/modules/custom/helfi_hakuvahti/translations/fi.po @@ -66,23 +66,30 @@ msgstr "Vahvista hakuvahti" msgid "Are you sure you wish to delete the saved search?" msgstr "Haluatko varmasti poistaa hakuvahdin?" +msgctxt "Search filter option: Central area" msgid "Central area" msgstr "Keskinen alue" +msgctxt "Search filter option: Eastern area" msgid "Eastern area" msgstr "Itäinen alue" +msgctxt "Search filter option: Southern area" msgid "Southern area" msgstr "Eteläinen alue" +msgctxt "Search filter option: South-Eastern area" msgid "South-Eastern area" msgstr "Kaakkoinen alue" +msgctxt "Search filter option: Western area area" msgid "Western area" msgstr "Läntinen alue" +msgctxt "Search filter option: Northern area" msgid "Northern area" msgstr "Pohjoinen alue" +msgctxt "Search filter option: North-Eastern area" msgid "North-Eastern area" msgstr "Luoteinen alue" From 8b527dd90afdc7ef713d50c4cc00c459d491f5ee Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Mon, 15 Jul 2024 11:00:15 +0300 Subject: [PATCH 05/37] refactored the controller. Added recursive array search to fix the problem with missing parameters in email title --- .../helfi_hakuvahti.services.yml | 10 + .../HelfiHakuvahtiSubscribeController.php | 351 +++++++++--------- 2 files changed, 186 insertions(+), 175 deletions(-) create mode 100644 public/modules/custom/helfi_hakuvahti/helfi_hakuvahti.services.yml diff --git a/public/modules/custom/helfi_hakuvahti/helfi_hakuvahti.services.yml b/public/modules/custom/helfi_hakuvahti/helfi_hakuvahti.services.yml new file mode 100644 index 00000000..08a54ade --- /dev/null +++ b/public/modules/custom/helfi_hakuvahti/helfi_hakuvahti.services.yml @@ -0,0 +1,10 @@ +services: + _defaults: + autoconfigure: true + autowire: true + + logger.channel.helfi_hakuvahti: + parent: logger.channel_base + arguments: ['helfi_hakuvahti'] + + Drupal\helfi_hakuvahti\HelfiHakuvahtiSubscribeController: ~ diff --git a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php index fa98df22..e1b0ac1f 100644 --- a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php +++ b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php @@ -5,11 +5,12 @@ namespace Drupal\helfi_hakuvahti\Controller; use Drupal\Core\Controller\ControllerBase; -use Drupal\Core\Entity\EntityTypeManagerInterface; -use Drupal\Core\StringTranslation\StringTranslationTrait; -use GuzzleHttp\Client; +use Drupal\Core\Entity\EntityStorageInterface; +use GuzzleHttp\ClientInterface; +use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\RequestOptions; -use Symfony\Component\DependencyInjection\ContainerInterface; +use Psr\Log\LoggerInterface; +use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response; @@ -19,23 +20,134 @@ */ final class HelfiHakuvahtiSubscribeController extends ControllerBase { - use StringTranslationTrait; + private EntityStorageInterface $termStorage; /** * Constructor for the HelfiHakuvahtiSubscribeController class. * - * @param \Symfony\Component\DependencyInjection\ContainerInterface $container - * The container. * @param \Symfony\Component\HttpFoundation\RequestStack $requestStack * The request stack. - * @param \Drupal\Core\Entity\EntityTypeManagerInterface $_entityTypeManager - * The entity type manager. */ public function __construct( - protected ContainerInterface $container, protected RequestStack $requestStack, - protected EntityTypeManagerInterface $_entityTypeManager, - ) {} + private readonly ClientInterface $client, + #[Autowire(service: 'logger.channel.helfi_hakuvahti')] private readonly LoggerInterface $logger, + ) { + $this->termStorage = $this->entityTypeManager()->getStorage('taxonomy_term'); + } + + /** + * A method to handle the POST request for subscription. + * + * @return \Symfony\Component\HttpFoundation\JsonResponse + * The JSON response based on the subscription request. + */ + public function post(): JsonResponse { + if (!$hakuvahtiServer = getenv('HAKUVAHTI_URL')) { + $this->logger->error('Hakuvahti is missing a required HAKUVAHTI_URL configuration.'); + return new JsonResponse(['success' => FALSE, 'error' => 'Unable to process the request.'], Response::HTTP_INTERNAL_SERVER_ERROR); + } + + $request = $this->requestStack->getCurrentRequest(); + $body = $request->getContent(FALSE); + $bodyObj = json_decode($body); + $bodyObj->search_description = $this->getSearchDescriptionTaxonomies($bodyObj); + + $token = $request->headers->get('token'); + + // @todo Validate token. + // + // Somehow, we would need to validate token from + // /session/token from react + // side, but there's just no way to match it at backend?! + // $csrfTokenService = $this->container->get('csrf_token'); + // $expectedToken = $csrfTokenService->get('session'); + // if ($this->csrfTokenService->validate($token, 'session') === FALSE) {}. + try { + $this->client->request('POST', "$hakuvahtiServer/subscription", [ + RequestOptions::JSON => $bodyObj, + RequestOptions::HEADERS => [ + 'token' => $token, + 'Content-Type' => 'application/json', + ], + ]); + } + catch (GuzzleException $e) { + $this->logger->error("Unable to send Hakuvahti-request - Code {$e->getCode()}: {$e->getMessage()}"); + return new JsonResponse(['success' => FALSE, 'error' => 'Error while handling the request.'], Response::HTTP_INTERNAL_SERVER_ERROR); + } + + return new JsonResponse(['success' => TRUE], Response::HTTP_OK); + } + + /** + * Retrieves search description taxonomies from the provided object. + * + * @param mixed $obj + * The object containing elastic query data. + * + * @return string + * The concatenated search description taxonomies. + */ + private function getSearchDescriptionTaxonomies(mixed $obj): string { + $terms = []; + $employmentTermLabels = []; + $areaFiltersTranslated = []; + $query = ''; + + $elasticQuery = base64_decode($obj->elastic_query); + $queryAsArray = json_decode($elasticQuery, TRUE); + + // Free text search. + if ( + $this->elasticQueryContains('combined_fields', $elasticQuery) && + $combinedFields = $this->sliceTree($queryAsArray['query']['bool']['must'], 'combined_fields') + ) { + $query = $combinedFields['query']; + } + + $taskAreaField = 'task_area_external_id'; + if ( + $this->elasticQueryContains($taskAreaField, $elasticQuery) && + $taskAreaIds = $this->sliceTree($queryAsArray['query']['bool']['must'], $taskAreaField) + ) { + $terms = $this->getLabelsByExternalId($taskAreaIds, $obj->lang); + } + + $employmentTypeField = 'employment_type_id'; + if ( + $this->elasticQueryContains($employmentTypeField, $elasticQuery) && + $employmentIds = $this->sliceTree($queryAsArray['query']['bool']['must'], $employmentTypeField) + ) { + $employmentTermLabels = $this->getLabelsByTermIds($employmentIds, $obj->lang); + } + + // Job location: + if ($area_filters = $this->extractQueryParameters($obj->query, 'area_filter')) { + foreach ($area_filters as $area) { + $areaFiltersTranslated[] = $this->translateAreaString($area, $obj->lang); + } + } + + $description = $this->buildDescription($query, $terms, $areaFiltersTranslated, $employmentTermLabels); + + return $description ? $description : '*'; + } + + /** + * Check if the non-decoded query contains a specific string. + * + * @param string $term_name + * What are we looking for. + * @param string $query_string + * Where are we looking from. + * + * @return bool + * The string exists. + */ + private function elasticQueryContains(string $term_name, string $query_string): bool { + return str_contains($query_string, $term_name); + } /** * Retrieves taxonomy labels by field_external_id values in a given language. @@ -48,9 +160,9 @@ public function __construct( * @return array * An array of taxonomy term labels in the specified language. */ - private function getLabelsByExternalId(array $external_ids, $language) { + private function getLabelsByExternalId(array $external_ids, string $language): array { $labels = []; - $terms = $this->_entityTypeManager->getStorage('taxonomy_term')->loadByProperties(['field_external_id' => $external_ids]); + $terms = $this->termStorage->loadByProperties(['field_external_id' => $external_ids]); foreach ($terms as $term) { $translated_term = $term->hasTranslation($language) ? $term->getTranslation($language) : $term; $labels[] = $translated_term->label(); @@ -69,9 +181,9 @@ private function getLabelsByExternalId(array $external_ids, $language) { * @return array * An array of taxonomy term labels in the specified language. */ - private function getLabelsByTermIds(array $term_ids, $language) { + private function getLabelsByTermIds(array $term_ids, string $language): array { $labels = []; - $terms = $this->_entityTypeManager->getStorage('taxonomy_term')->loadMultiple($term_ids); + $terms = $this->termStorage->loadMultiple($term_ids); foreach ($terms as $term) { $translated_term = $term->hasTranslation($language) ? $term->getTranslation($language) : $term; $labels[] = $translated_term->label(); @@ -80,25 +192,6 @@ private function getLabelsByTermIds(array $term_ids, $language) { return $labels; } - /** - * Function to get translated string in a given language. - * - * phpcs:ignore is used to mute error about string literals as there - * is no other way to do this translation. - * - * @param string $string - * The string to be translated. - * @param string $language - * The language code for the desired translation. - * - * @return string - * The translated string. - */ - private function translateString($string, $language) { - $translatedString = $this->t($string, [], ['langcode' => $language]); // @phpcs:ignore - return (string) $translatedString; - } - /** * Function to extract specific query parameters from a URL string. * @@ -110,7 +203,7 @@ private function translateString($string, $language) { * @return array * An array of values for the specified query parameter. */ - private function extractQueryParameters($url, $parameter) { + private function extractQueryParameters(string $url, string $parameter): array { $parsed_url = parse_url($url); $query = $parsed_url['query'] ?? ''; $query_parameters = []; @@ -140,157 +233,80 @@ private function extractQueryParameters($url, $parameter) { } /** - * Retrieves search description taxonomies from the provided object. + * Build description string out of search parameters. * - * @param mixed $obj - * The object containing elastic query data. + * @param string $query + * The search query from text field. + * @param array $terms + * Array of term values. + * @param array $areaFiltersTranslated + * Array of area labels. + * @param array $employmentTermLabels + * Array of employment terms. * * @return string - * The concatenated search description taxonomies. + * The description string. */ - private function getSearchDescriptionTaxonomies($obj): string { - $terms = []; - $taxonomyIds = []; - - $elasticQuery = base64_decode($obj->elastic_query); - - $queryAsArray = json_decode($elasticQuery, TRUE); - // Free text search. - if ( - $this->queryContains('combined_fields', $elasticQuery) && - $combinedFields = $this->sliceTree($queryAsArray['query']['bool']['must'], 'combined_fields') - ) { - $query = $combinedFields['query']; - } - - $taskAreaField = 'task_area_external_id'; - if ( - $this->queryContains($taskAreaField, $elasticQuery) && - $taskAreaIds = $this->sliceTree($queryAsArray['query']['bool']['must'], $taskAreaField) - ) { - $terms = $this->getLabelsByExternalId($taskAreaIds, $obj->lang); - } - - - $employmentTypeField = 'employment_type_id'; - if ( - $this->queryContains($employmentTypeField, $elasticQuery) && - $employmentIds = $this->sliceTree($queryAsArray['query']['bool']['must'], $employmentTypeField) - ) { - $employmentTermLabels = $this->getLabelsByTermIds($employmentIds, $obj->lang); - } + private function buildDescription(string $query, array $terms, array $areaFiltersTranslated, array $employmentTermLabels): string { + $description = $query; + $allTerms = array_merge($terms, $areaFiltersTranslated); - // Job location: - $area_filters = $this->extractQueryParameters($obj->query, 'area_filter'); - if (!empty($area_filters)) { - // Duplicated from react frondend for proper translation mapping. - $areasList = [ - 'eastern' => 'Eastern area', - 'central' => 'Central area', - 'southern' => 'Southern area', - 'southeastern' => 'South-Eastern area', - 'western' => 'Western area', - 'northern' => 'Northern area', - 'northeast' => 'North-Eastern area', - ]; - - foreach ($area_filters as $area) { - $areaFiltersTranslated[] = $this->translateString($areasList[$area], $obj->lang); - } - } - - // Build description string: - $description = ''; - - // Search term first. - $description .= $query; - - // All these can be printed out with , separator. - if (!empty($areaFiltersTranslated)) { - $allTerms = array_merge($terms, $areaFiltersTranslated); - } - - if (!empty($allTerms)) { - if (!empty($description)) { - $description .= ', '; - } - $description .= implode(', ', array_filter($allTerms)); - } + $description .= $allTerms ? ', ' : ''; + $description .= implode(', ', array_filter($allTerms)); // Employment label should use / instead of comma. - if (!empty($employmentTermLabels)) { - if (!empty($description)) { - $description .= ', '; - } - $description .= implode(' / ', $employmentTermLabels); - } - - // Backup description if no terms or keywords found, must return something. - if (empty($description)) { - '*'; - } + $description .= $employmentTermLabels ? ', ': ''; + $description .= implode(' / ', $employmentTermLabels); return $description; } /** - * A method to handle the POST request for subscription. + * Function to get translated string in a given language. * - * @return \Symfony\Component\HttpFoundation\JsonResponse - * The JSON response based on the subscription request. + * phpcs:ignore is used to mute error about string literals as there + * is no other way to do this translation. + * + * @param string $string + * The string to be translated. + * @param string $language + * The language code for the desired translation. + * + * @return string + * The translated string. */ - public function post(): JsonResponse { - $request = $this->requestStack->getCurrentRequest(); - $body = $request->getContent(FALSE); - $bodyObj = json_decode($body); - $bodyObj->search_description = $this->getSearchDescriptionTaxonomies($bodyObj); + private function translateAreaString(string $area, string $language): string { + $translatedString = match(true) { + $area == 'eastern' => $this->t('Eastern area', [], ['langcode' => $language, 'context' => 'Search filter option: Eastern area']), + $area == 'central' => $this->t('Central area', [], ['langcode' => $language, 'context' => 'Search filter option: Central area']), + $area == 'southern' => $this->t('Southern area', [], ['langcode' => $language, 'context' => 'Search filter option: Southern area']), + $area == 'southeastern' => $this->t('South-Eastern area', [], ['langcode' => $language, 'context' => 'Search filter option: South-Eastern area']), + $area == 'western' => $this->t('Western area', [], ['langcode' => $language, 'context' => 'Search filter option: Western area']), + $area == 'northern' => $this->t('Northern area', [], ['langcode' => $language, 'context' => 'Search filter option: Northern area']), + $area == 'northeast' => $this->t('North-Eastern area', [], ['langcode' => $language, 'context' => 'Search filter option: North-Eastern area']), + default => '', + }; - $token = $request->headers->get('token'); - - // FIXME: somehow, we would need to validate token from - // /session/token from react - // side, but there's just no way to match it at backend?! - // $csrfTokenService = $this->container->get('csrf_token'); - // $expectedToken = $csrfTokenService->get('session'); - // if ($this->csrfTokenService->validate($token, 'session') === FALSE) { - // - // }. - $client = new Client(); - $hakuvahtiServer = getenv('HAKUVAHTI_URL'); - $response = $client->request('POST', $hakuvahtiServer . '/subscription', [ - RequestOptions::JSON => $bodyObj, - RequestOptions::HEADERS => [ - 'token' => $token, - 'Content-Type' => 'application/json', - ], - ]); - - $statusCode = $response->getStatusCode(); - - if ($statusCode >= 200 && $statusCode < 300) { - return new JsonResponse(['success' => TRUE], Response::HTTP_OK); - } - else { - return new JsonResponse(['success' => FALSE, 'error' => $response->getBody()->getContents()], Response::HTTP_INTERNAL_SERVER_ERROR); - } + return (string) $translatedString; } /** - * Recursive function to get what we want from tree of arrays. + * Recursive function to get an array by key from a tree of arrays. * - * @param $tree + * @param mixed $tree * Array we are traversing. - * @param $needle - * What key are we looking for. + * @param string $needle + * The key we are looking for. * * @return false|array * False or the array we are looking for. */ - private function sliceTree($tree, $needle): false|array { + private function sliceTree(array $tree, string $needle): array { if (is_array($tree) && isset($tree[$needle])) return $tree[$needle]; $result = NULL; foreach($tree as $branch) { + if (!is_array($branch)) return []; if (isset($branch[$needle])) return $branch[$needle]; $result = $this->sliceTree($branch, $needle); @@ -299,22 +315,7 @@ private function sliceTree($tree, $needle): false|array { } } - return $result ?? false; - } - - /** - * Check if the non-decoded query contains a specific string. - * - * @param string $term_name - * What are we looking for. - * @param string $query_string - * Where are we looking from. - * - * @return bool - * The string exists. - */ - private function queryContains(string $term_name, string $query_string): bool { - return str_contains($query_string, $term_name); + return $result ?? []; } } From 355f279b5b747c16fd78dee2f484b03a7aa9f014 Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Mon, 15 Jul 2024 13:44:22 +0300 Subject: [PATCH 06/37] Added text when no search filters selected --- .../HelfiHakuvahtiSubscribeController.php | 21 ++++++++++--------- .../custom/helfi_hakuvahti/translations/fi.po | 4 ++++ .../custom/helfi_hakuvahti/translations/sv.po | 4 ++++ 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php index e1b0ac1f..7f395401 100644 --- a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php +++ b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php @@ -125,13 +125,13 @@ private function getSearchDescriptionTaxonomies(mixed $obj): string { // Job location: if ($area_filters = $this->extractQueryParameters($obj->query, 'area_filter')) { foreach ($area_filters as $area) { - $areaFiltersTranslated[] = $this->translateAreaString($area, $obj->lang); + $areaFiltersTranslated[] = $this->translateString($area, $obj->lang); } } $description = $this->buildDescription($query, $terms, $areaFiltersTranslated, $employmentTermLabels); - return $description ? $description : '*'; + return $description ?: $this->translateString('No search filters', $obj->lang); } /** @@ -275,15 +275,16 @@ private function buildDescription(string $query, array $terms, array $areaFilter * @return string * The translated string. */ - private function translateAreaString(string $area, string $language): string { + private function translateString(string $string, string $language): string { $translatedString = match(true) { - $area == 'eastern' => $this->t('Eastern area', [], ['langcode' => $language, 'context' => 'Search filter option: Eastern area']), - $area == 'central' => $this->t('Central area', [], ['langcode' => $language, 'context' => 'Search filter option: Central area']), - $area == 'southern' => $this->t('Southern area', [], ['langcode' => $language, 'context' => 'Search filter option: Southern area']), - $area == 'southeastern' => $this->t('South-Eastern area', [], ['langcode' => $language, 'context' => 'Search filter option: South-Eastern area']), - $area == 'western' => $this->t('Western area', [], ['langcode' => $language, 'context' => 'Search filter option: Western area']), - $area == 'northern' => $this->t('Northern area', [], ['langcode' => $language, 'context' => 'Search filter option: Northern area']), - $area == 'northeast' => $this->t('North-Eastern area', [], ['langcode' => $language, 'context' => 'Search filter option: North-Eastern area']), + $string == 'eastern' => $this->t('Eastern area', [], ['langcode' => $language, 'context' => 'Search filter option: Eastern area']), + $string == 'central' => $this->t('Central area', [], ['langcode' => $language, 'context' => 'Search filter option: Central area']), + $string == 'southern' => $this->t('Southern area', [], ['langcode' => $language, 'context' => 'Search filter option: Southern area']), + $string == 'southeastern' => $this->t('South-Eastern area', [], ['langcode' => $language, 'context' => 'Search filter option: South-Eastern area']), + $string == 'western' => $this->t('Western area', [], ['langcode' => $language, 'context' => 'Search filter option: Western area']), + $string == 'northern' => $this->t('Northern area', [], ['langcode' => $language, 'context' => 'Search filter option: Northern area']), + $string == 'northeast' => $this->t('North-Eastern area', [], ['langcode' => $language, 'context' => 'Search filter option: North-Eastern area']), + $string == 'No search filters' => $this->t('No search filters', [], ['langcode' => $language, 'context' => 'Hakuvahti empty filters']), default => '', }; diff --git a/public/modules/custom/helfi_hakuvahti/translations/fi.po b/public/modules/custom/helfi_hakuvahti/translations/fi.po index 8132a6b0..347ad12e 100644 --- a/public/modules/custom/helfi_hakuvahti/translations/fi.po +++ b/public/modules/custom/helfi_hakuvahti/translations/fi.po @@ -93,3 +93,7 @@ msgstr "Pohjoinen alue" msgctxt "Search filter option: North-Eastern area" msgid "North-Eastern area" msgstr "Luoteinen alue" + +msgctxt "Hakuvahti empty filters" +msgid "No search filters" +msgstr "Ei hakuehtoja" diff --git a/public/modules/custom/helfi_hakuvahti/translations/sv.po b/public/modules/custom/helfi_hakuvahti/translations/sv.po index acd7651c..69c398cf 100644 --- a/public/modules/custom/helfi_hakuvahti/translations/sv.po +++ b/public/modules/custom/helfi_hakuvahti/translations/sv.po @@ -65,3 +65,7 @@ msgstr "Bekräfta sökvakten" msgid "Are you sure you wish to delete the saved search?" msgstr "Är du säker på att du vill ta bort sökvakten?" + +msgctxt "Hakuvahti empty filters" +msgid "No search filters" +msgstr "Inga ansökningskriterier" From 2066e63514f04878c8f62a459e9903b2250f2fc2 Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Mon, 15 Jul 2024 14:24:44 +0300 Subject: [PATCH 07/37] code fixes --- .../HelfiHakuvahtiSubscribeController.php | 49 +++++++++++++------ 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php index 7f395401..8109dea6 100644 --- a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php +++ b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php @@ -25,8 +25,12 @@ final class HelfiHakuvahtiSubscribeController extends ControllerBase { /** * Constructor for the HelfiHakuvahtiSubscribeController class. * - * @param \Symfony\Component\HttpFoundation\RequestStack $requestStack + * @param Symfony\Component\HttpFoundation\RequestStack $requestStack * The request stack. + * @param GuzzleHttp\ClientInterface $client + * The httpclient. + * @param Psr\Log\LoggerInterface $logger + * The logger. */ public function __construct( protected RequestStack $requestStack, @@ -255,7 +259,7 @@ private function buildDescription(string $query, array $terms, array $areaFilter $description .= implode(', ', array_filter($allTerms)); // Employment label should use / instead of comma. - $description .= $employmentTermLabels ? ', ': ''; + $description .= $employmentTermLabels ? ', ' : ''; $description .= implode(' / ', $employmentTermLabels); return $description; @@ -276,15 +280,24 @@ private function buildDescription(string $query, array $terms, array $areaFilter * The translated string. */ private function translateString(string $string, string $language): string { - $translatedString = match(true) { - $string == 'eastern' => $this->t('Eastern area', [], ['langcode' => $language, 'context' => 'Search filter option: Eastern area']), - $string == 'central' => $this->t('Central area', [], ['langcode' => $language, 'context' => 'Search filter option: Central area']), - $string == 'southern' => $this->t('Southern area', [], ['langcode' => $language, 'context' => 'Search filter option: Southern area']), - $string == 'southeastern' => $this->t('South-Eastern area', [], ['langcode' => $language, 'context' => 'Search filter option: South-Eastern area']), - $string == 'western' => $this->t('Western area', [], ['langcode' => $language, 'context' => 'Search filter option: Western area']), - $string == 'northern' => $this->t('Northern area', [], ['langcode' => $language, 'context' => 'Search filter option: Northern area']), - $string == 'northeast' => $this->t('North-Eastern area', [], ['langcode' => $language, 'context' => 'Search filter option: North-Eastern area']), - $string == 'No search filters' => $this->t('No search filters', [], ['langcode' => $language, 'context' => 'Hakuvahti empty filters']), + $context = [ + 'langcode' => $language, + 'context' => '' + ]; + + $context = fn($context) => ['langcode' => $language, 'context' => "Search filter option: $context"]; + $translatedString = match(TRUE) { + $string == 'eastern' => $this->t('Eastern area', [], $context('Eastern area')), + $string == 'central' => $this->t('Central area', [], $context('Central area')), + $string == 'southern' => $this->t('Southern area', [], $context('Southern area')), + $string == 'southeastern' => $this->t('South-Eastern area', [], $context('South-Eastern area')), + $string == 'western' => $this->t('Western area', [], $context('Western area')), + $string == 'northern' => $this->t('Northern area', [], $context('Northern area')), + $string == 'northeast' => $this->t('North-Eastern area', [], $context('North-Eastern area')), + $string == 'No search filters' => $this->t( + string: 'No search filters', + options: ['langcode' => $language, 'context' => 'Hakuvahti empty filters'], + ), default => '', }; @@ -303,12 +316,18 @@ private function translateString(string $string, string $language): string { * False or the array we are looking for. */ private function sliceTree(array $tree, string $needle): array { - if (is_array($tree) && isset($tree[$needle])) return $tree[$needle]; + if (is_array($tree) && isset($tree[$needle])) { + return $tree[$needle]; + } $result = NULL; - foreach($tree as $branch) { - if (!is_array($branch)) return []; - if (isset($branch[$needle])) return $branch[$needle]; + foreach ($tree as $branch) { + if (!is_array($branch)) { + return []; + } + if (isset($branch[$needle])) { + return $branch[$needle]; + } $result = $this->sliceTree($branch, $needle); if ($result) { From 2e639240441e4ba3418e61b1eb148f30a6ea56f1 Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Mon, 15 Jul 2024 14:35:58 +0300 Subject: [PATCH 08/37] code fixes --- .../HelfiHakuvahtiSubscribeController.php | 29 ++++++------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php index 8109dea6..cacb87a9 100644 --- a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php +++ b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php @@ -20,6 +20,11 @@ */ final class HelfiHakuvahtiSubscribeController extends ControllerBase { + /** + * The term storage. + * + * @var \Drupal\Core\Entity\EntityStorageInterface + */ private EntityStorageInterface $termStorage; /** @@ -104,7 +109,7 @@ private function getSearchDescriptionTaxonomies(mixed $obj): string { // Free text search. if ( - $this->elasticQueryContains('combined_fields', $elasticQuery) && + str_contains('combined_fields', $elasticQuery) && $combinedFields = $this->sliceTree($queryAsArray['query']['bool']['must'], 'combined_fields') ) { $query = $combinedFields['query']; @@ -112,7 +117,7 @@ private function getSearchDescriptionTaxonomies(mixed $obj): string { $taskAreaField = 'task_area_external_id'; if ( - $this->elasticQueryContains($taskAreaField, $elasticQuery) && + str_contains($taskAreaField, $elasticQuery) && $taskAreaIds = $this->sliceTree($queryAsArray['query']['bool']['must'], $taskAreaField) ) { $terms = $this->getLabelsByExternalId($taskAreaIds, $obj->lang); @@ -120,7 +125,7 @@ private function getSearchDescriptionTaxonomies(mixed $obj): string { $employmentTypeField = 'employment_type_id'; if ( - $this->elasticQueryContains($employmentTypeField, $elasticQuery) && + str_contains($employmentTypeField, $elasticQuery) && $employmentIds = $this->sliceTree($queryAsArray['query']['bool']['must'], $employmentTypeField) ) { $employmentTermLabels = $this->getLabelsByTermIds($employmentIds, $obj->lang); @@ -138,21 +143,6 @@ private function getSearchDescriptionTaxonomies(mixed $obj): string { return $description ?: $this->translateString('No search filters', $obj->lang); } - /** - * Check if the non-decoded query contains a specific string. - * - * @param string $term_name - * What are we looking for. - * @param string $query_string - * Where are we looking from. - * - * @return bool - * The string exists. - */ - private function elasticQueryContains(string $term_name, string $query_string): bool { - return str_contains($query_string, $term_name); - } - /** * Retrieves taxonomy labels by field_external_id values in a given language. * @@ -295,8 +285,7 @@ private function translateString(string $string, string $language): string { $string == 'northern' => $this->t('Northern area', [], $context('Northern area')), $string == 'northeast' => $this->t('North-Eastern area', [], $context('North-Eastern area')), $string == 'No search filters' => $this->t( - string: 'No search filters', - options: ['langcode' => $language, 'context' => 'Hakuvahti empty filters'], + 'No search filters', options: ['language' => $language, 'context' => 'Hakuvahti empty filters',] ), default => '', }; From 3b84dfe1c4eb5e95d88a684cbdd2a0c6b0329aef Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Mon, 15 Jul 2024 14:42:15 +0300 Subject: [PATCH 09/37] commas --- .../src/Controller/HelfiHakuvahtiSubscribeController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php index cacb87a9..a7aba7ed 100644 --- a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php +++ b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php @@ -272,7 +272,7 @@ private function buildDescription(string $query, array $terms, array $areaFilter private function translateString(string $string, string $language): string { $context = [ 'langcode' => $language, - 'context' => '' + 'context' => '', ]; $context = fn($context) => ['langcode' => $language, 'context' => "Search filter option: $context"]; @@ -285,7 +285,7 @@ private function translateString(string $string, string $language): string { $string == 'northern' => $this->t('Northern area', [], $context('Northern area')), $string == 'northeast' => $this->t('North-Eastern area', [], $context('North-Eastern area')), $string == 'No search filters' => $this->t( - 'No search filters', options: ['language' => $language, 'context' => 'Hakuvahti empty filters',] + 'No search filters', options: ['language' => $language, 'context' => 'Hakuvahti empty filters'] ), default => '', }; From 68d538987670a135064604fd9df35fc9dd3caa2f Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Mon, 15 Jul 2024 14:52:39 +0300 Subject: [PATCH 10/37] phpstan fixes --- .../src/Controller/HelfiHakuvahtiSubscribeController.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php index a7aba7ed..db49364e 100644 --- a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php +++ b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php @@ -6,6 +6,7 @@ use Drupal\Core\Controller\ControllerBase; use Drupal\Core\Entity\EntityStorageInterface; +use Drupal\taxonomy\TermInterface; use GuzzleHttp\ClientInterface; use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\RequestOptions; @@ -30,11 +31,11 @@ final class HelfiHakuvahtiSubscribeController extends ControllerBase { /** * Constructor for the HelfiHakuvahtiSubscribeController class. * - * @param Symfony\Component\HttpFoundation\RequestStack $requestStack + * @param \Symfony\Component\HttpFoundation\RequestStack $requestStack * The request stack. - * @param GuzzleHttp\ClientInterface $client + * @param \GuzzleHttp\ClientInterface $client * The httpclient. - * @param Psr\Log\LoggerInterface $logger + * @param \Psr\Log\LoggerInterface $logger * The logger. */ public function __construct( @@ -158,6 +159,7 @@ private function getLabelsByExternalId(array $external_ids, string $language): a $labels = []; $terms = $this->termStorage->loadByProperties(['field_external_id' => $external_ids]); foreach ($terms as $term) { + assert($term instanceof TermInterface); $translated_term = $term->hasTranslation($language) ? $term->getTranslation($language) : $term; $labels[] = $translated_term->label(); } From 86dbea74a3abfe835612c03f3f6f8749f2bd6c04 Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Mon, 15 Jul 2024 15:00:45 +0300 Subject: [PATCH 11/37] phpstan fixes --- .../src/Controller/HelfiHakuvahtiSubscribeController.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php index db49364e..a31f0eef 100644 --- a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php +++ b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php @@ -181,6 +181,7 @@ private function getLabelsByTermIds(array $term_ids, string $language): array { $labels = []; $terms = $this->termStorage->loadMultiple($term_ids); foreach ($terms as $term) { + assert($term instanceof TermInterface); $translated_term = $term->hasTranslation($language) ? $term->getTranslation($language) : $term; $labels[] = $translated_term->label(); } @@ -298,16 +299,16 @@ private function translateString(string $string, string $language): string { /** * Recursive function to get an array by key from a tree of arrays. * - * @param mixed $tree + * @param array $tree * Array we are traversing. * @param string $needle * The key we are looking for. * - * @return false|array + * @return array * False or the array we are looking for. */ private function sliceTree(array $tree, string $needle): array { - if (is_array($tree) && isset($tree[$needle])) { + if (isset($tree[$needle])) { return $tree[$needle]; } From bca244d05053f80090259d860a8b40dd283aab9a Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Mon, 15 Jul 2024 15:37:49 +0300 Subject: [PATCH 12/37] added compose override --- compose.override.yaml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 compose.override.yaml diff --git a/compose.override.yaml b/compose.override.yaml new file mode 100644 index 00000000..a369c861 --- /dev/null +++ b/compose.override.yaml @@ -0,0 +1,7 @@ +services: + app: + environment: + HAKUVAHTI_URL: 'http://helfi-rekry.docker.so:3000' +networks: + hakuvahti-network: + external: true From 58e8e5e2bce04de47105d235f6a5c0f201c56db1 Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Mon, 15 Jul 2024 15:38:52 +0300 Subject: [PATCH 13/37] removed useless code --- .../src/Controller/HelfiHakuvahtiSubscribeController.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php index a31f0eef..efd7d486 100644 --- a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php +++ b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php @@ -273,11 +273,6 @@ private function buildDescription(string $query, array $terms, array $areaFilter * The translated string. */ private function translateString(string $string, string $language): string { - $context = [ - 'langcode' => $language, - 'context' => '', - ]; - $context = fn($context) => ['langcode' => $language, 'context' => "Search filter option: $context"]; $translatedString = match(TRUE) { $string == 'eastern' => $this->t('Eastern area', [], $context('Eastern area')), From f970786e4994e982a91cd0b241f1608570c02c15 Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Mon, 15 Jul 2024 15:46:59 +0300 Subject: [PATCH 14/37] parameters in wrong order --- .../src/Controller/HelfiHakuvahtiSubscribeController.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php index efd7d486..0cd0ea56 100644 --- a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php +++ b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php @@ -110,15 +110,15 @@ private function getSearchDescriptionTaxonomies(mixed $obj): string { // Free text search. if ( - str_contains('combined_fields', $elasticQuery) && + str_contains($elasticQuery, 'combined_fields') && $combinedFields = $this->sliceTree($queryAsArray['query']['bool']['must'], 'combined_fields') ) { - $query = $combinedFields['query']; + $query = $combinedFields['query'] ?? ''; } $taskAreaField = 'task_area_external_id'; if ( - str_contains($taskAreaField, $elasticQuery) && + str_contains($elasticQuery, $taskAreaField) && $taskAreaIds = $this->sliceTree($queryAsArray['query']['bool']['must'], $taskAreaField) ) { $terms = $this->getLabelsByExternalId($taskAreaIds, $obj->lang); @@ -126,7 +126,7 @@ private function getSearchDescriptionTaxonomies(mixed $obj): string { $employmentTypeField = 'employment_type_id'; if ( - str_contains($employmentTypeField, $elasticQuery) && + str_contains($elasticQuery, $employmentTypeField) && $employmentIds = $this->sliceTree($queryAsArray['query']['bool']['must'], $employmentTypeField) ) { $employmentTermLabels = $this->getLabelsByTermIds($employmentIds, $obj->lang); From f6b53061a17c6e6e7174e8f5eec66443b3f760f6 Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Tue, 16 Jul 2024 12:11:52 +0300 Subject: [PATCH 15/37] swedish translations, fixed one bad translation --- .../custom/helfi_hakuvahti/translations/fi.po | 2 +- .../custom/helfi_hakuvahti/translations/sv.po | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/public/modules/custom/helfi_hakuvahti/translations/fi.po b/public/modules/custom/helfi_hakuvahti/translations/fi.po index 347ad12e..22d86991 100644 --- a/public/modules/custom/helfi_hakuvahti/translations/fi.po +++ b/public/modules/custom/helfi_hakuvahti/translations/fi.po @@ -92,7 +92,7 @@ msgstr "Pohjoinen alue" msgctxt "Search filter option: North-Eastern area" msgid "North-Eastern area" -msgstr "Luoteinen alue" +msgstr "Koillinen alue" msgctxt "Hakuvahti empty filters" msgid "No search filters" diff --git a/public/modules/custom/helfi_hakuvahti/translations/sv.po b/public/modules/custom/helfi_hakuvahti/translations/sv.po index 69c398cf..626ec461 100644 --- a/public/modules/custom/helfi_hakuvahti/translations/sv.po +++ b/public/modules/custom/helfi_hakuvahti/translations/sv.po @@ -69,3 +69,35 @@ msgstr "Är du säker på att du vill ta bort sökvakten?" msgctxt "Hakuvahti empty filters" msgid "No search filters" msgstr "Inga ansökningskriterier" + +msgctxt "Search filter option: Central area" +msgid "Central area" +msgstr "Mellersta området" + +msgctxt "Search filter option: Eastern area" +msgid "Eastern area" +msgstr "Östra området" + +msgctxt "Search filter option: Southern area" +msgid "Southern area" +msgstr "Södra området" + +msgctxt "Search filter option: South-Eastern area" +msgid "South-Eastern area" +msgstr "Sydöstra området" + +msgctxt "Search filter option: Western area area" +msgid "Western area" +msgstr "Västra området" + +msgctxt "Search filter option: Northern area" +msgid "Northern area" +msgstr "Norra området" + +msgctxt "Search filter option: North-Eastern area" +msgid "North-Eastern area" +msgstr "Nordöstra området" + +msgctxt "Hakuvahti empty filters" +msgid "No search filters" +msgstr "Ei hakuehtoja" From 9dcc2cc3c464a28e22757faac88f9bc5d837aba8 Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Tue, 16 Jul 2024 12:15:23 +0300 Subject: [PATCH 16/37] bad logic caused extra comma, fixed the logic --- .../src/Controller/HelfiHakuvahtiSubscribeController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php index 0cd0ea56..12a3bc2a 100644 --- a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php +++ b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php @@ -248,11 +248,11 @@ private function buildDescription(string $query, array $terms, array $areaFilter $description = $query; $allTerms = array_merge($terms, $areaFiltersTranslated); - $description .= $allTerms ? ', ' : ''; + $description .= $query ? ', ' : ''; $description .= implode(', ', array_filter($allTerms)); // Employment label should use / instead of comma. - $description .= $employmentTermLabels ? ', ' : ''; + $description .= $allTerms ? ', ' : ''; $description .= implode(' / ', $employmentTermLabels); return $description; From af2839c29a34821ec7b5c2a1ae5dc059e28f1d31 Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Tue, 16 Jul 2024 12:52:56 +0300 Subject: [PATCH 17/37] wrong key in translations, removed duplicate translation --- .../src/Controller/HelfiHakuvahtiSubscribeController.php | 2 +- public/modules/custom/helfi_hakuvahti/translations/sv.po | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php index 12a3bc2a..224ed581 100644 --- a/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php +++ b/public/modules/custom/helfi_hakuvahti/src/Controller/HelfiHakuvahtiSubscribeController.php @@ -283,7 +283,7 @@ private function translateString(string $string, string $language): string { $string == 'northern' => $this->t('Northern area', [], $context('Northern area')), $string == 'northeast' => $this->t('North-Eastern area', [], $context('North-Eastern area')), $string == 'No search filters' => $this->t( - 'No search filters', options: ['language' => $language, 'context' => 'Hakuvahti empty filters'] + 'No search filters', options: ['langcode' => $language, 'context' => 'Hakuvahti empty filters'] ), default => '', }; diff --git a/public/modules/custom/helfi_hakuvahti/translations/sv.po b/public/modules/custom/helfi_hakuvahti/translations/sv.po index 626ec461..86e478ff 100644 --- a/public/modules/custom/helfi_hakuvahti/translations/sv.po +++ b/public/modules/custom/helfi_hakuvahti/translations/sv.po @@ -97,7 +97,3 @@ msgstr "Norra området" msgctxt "Search filter option: North-Eastern area" msgid "North-Eastern area" msgstr "Nordöstra området" - -msgctxt "Hakuvahti empty filters" -msgid "No search filters" -msgstr "Ei hakuehtoja" From ca3a7b45e80ba966e7c4450986ee0e141ec3ab20 Mon Sep 17 00:00:00 2001 From: Tero Elonen Date: Tue, 16 Jul 2024 17:41:34 +0300 Subject: [PATCH 18/37] UHF-9660: Add some documentation about instance customizations to readme --- README.md | 46 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 938a6a9e..83771aea 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ -# City of Helsinki - Rekry Drupal 9 project +# City of Helsinki - Rekry Drupal project -Description of your project. +Rekry, which is short for recruitment in Finnish, is a site integrated with Helbit. It migrates job listings to the job +search found on the site and provides other recruitment information for the city of Helsinki. ## Environments @@ -41,10 +42,45 @@ This will log you inside the app container: $ make shell ``` -## Enable Hakuvahti features +## Instance specific features -To enable [Hakuvahti features](https://github.com/City-of-Helsinki/helfi-hakuvahti) for local development or usage, you need to first install Hakuvahti and then enable Hakuvahti network in compose.yaml. +Some instance specific configuration can be found in Rekry-instance configuration page in the +`/admin/tools/rekry-content` url. + +### Custom node types + +#### Job listing (job_listing) + +A _job listing_ is custom node type used to migrate job listings from Helbit, meaning all nodes are created +automatically. While you can create a _job listing_ node manually through the user interface, this is not the standard +workflow on the site. These listings appear in the `job_search` paragraph and a view called `of_interest`displayed in a +block on _job listing_ nodes. The _job listings_ utilize multiple taxonomies to categorize the content. Read more about +the Helbit integration that creates these nodes and the `job_search` feature that displays them below. + +### Custom paragraphs + +#### Job search (job_search) + +Job search is a React search that uses views listing (`job_listing_search`) as a fallback when JavaScript is not +enabled. All React searches are found in the `hdbt` theme, so most of the related logic is also found there. + +### Custom media type + +#### Job listing image (job_listing_image) + +## Customizations + +### Helbit integration + +### Hakuvahti + +#### Enable Hakuvahti features + +To enable [Hakuvahti features](https://github.com/City-of-Helsinki/helfi-hakuvahti) for local development or usage, you need to first install Hakuvahti and then enable +Hakuvahti network in compose.yaml. These lines are commented out with comment `# Uncomment to enable Hakuvahti:` -Specifically what is commented out: `HAKUVAHTI_URL` environment variable, `helfi-hakuvahti_helfi-hakuvahti-network` for `app` and `elastic` containers. Finally it needs to be listed under `networks`. This enables Hakuvahti server to access ElasticSearch. +Specifically what is commented out: `HAKUVAHTI_URL` environment variable, `helfi-hakuvahti_helfi-hakuvahti-network` for +`app` and `elastic` containers. Finally it needs to be listed under `networks`. This enables Hakuvahti server to access +ElasticSearch. From 9e45191b5328a5790642bfe3fa7e558255428f8a Mon Sep 17 00:00:00 2001 From: Tero Elonen Date: Tue, 16 Jul 2024 17:47:25 +0300 Subject: [PATCH 19/37] UHF-9660: Remove the obsolte helfi_rekry_job_search module that has been moved hdbt-theme --- .../helfi_rekry_job_search/helfi_rekry_job_search.info.yml | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 public/modules/custom/helfi_rekry_job_search/helfi_rekry_job_search.info.yml diff --git a/public/modules/custom/helfi_rekry_job_search/helfi_rekry_job_search.info.yml b/public/modules/custom/helfi_rekry_job_search/helfi_rekry_job_search.info.yml deleted file mode 100644 index 43adb94c..00000000 --- a/public/modules/custom/helfi_rekry_job_search/helfi_rekry_job_search.info.yml +++ /dev/null @@ -1,4 +0,0 @@ -name: 'HELfi Rekry job search' -type: module -core_version_requirement: ^9 || ^10 -package: HELfi From 4f8343f9c8743e6b431f8ccaacc926833b0e729f Mon Sep 17 00:00:00 2001 From: Tero Elonen Date: Tue, 16 Jul 2024 18:47:00 +0300 Subject: [PATCH 20/37] UHF-9660: Added more documentation about Rekry instance specific features --- README.md | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 83771aea..219d048e 100644 --- a/README.md +++ b/README.md @@ -55,14 +55,24 @@ A _job listing_ is custom node type used to migrate job listings from Helbit, me automatically. While you can create a _job listing_ node manually through the user interface, this is not the standard workflow on the site. These listings appear in the `job_search` paragraph and a view called `of_interest`displayed in a block on _job listing_ nodes. The _job listings_ utilize multiple taxonomies to categorize the content. Read more about -the Helbit integration that creates these nodes and the `job_search` feature that displays them below. +the [Helbit integration](#helbit) that creates these nodes and the [Job search](#job-search) feature that displays them below. ### Custom paragraphs -#### Job search (job_search) +#### Job search (job_search) -Job search is a React search that uses views listing (`job_listing_search`) as a fallback when JavaScript is not -enabled. All React searches are found in the `hdbt` theme, so most of the related logic is also found there. +_Job search_ is a paragraph with two modes. The first mode provides a few filters and a submit button that redirects to +the node specified in the _Search result page_ field, using the applied filters as parameters. If the +_Search result page_ field is not filled, the full _job search_ is displayed. _Job search_is a React-based search that +uses the (`job_listing_search`) view as a fallback when JavaScript is not enabled. All React searches are part of the +`hdbt` theme, where most related logic is also located. The _job search_ paragraph includes an editable title, +description, and the _Search result page_ field. There is also a saved search feature called _Hakuvahti_ embedded on the +_job search_. Read more about this feature on the [Hakuvahti section](#hakuvahti) of this document. + +- React search code can be found under the `hdbt` theme [here](https://github.com/City-of-Helsinki/drupal-hdbt/tree/main/src/js/react/apps/job-search). +- Check the `hdbt_subtheme` preprocesses for _job search_ related configuration [here](https://github.com/City-of-Helsinki/drupal-helfi-rekry/tree/dev/public/themes/custom/hdbt_subtheme). +- Fallback view when JavaScript is not enabled can be found in the `/conf/cim` folder [here](https://github.com/City-of-Helsinki/drupal-helfi-rekry/blob/dev/conf/cmi/views.view.job_listing_search.yml). +- The saved search feature _Hakuvahti_ uses a separate server and the code related to it can be found [here](https://github.com/City-of-Helsinki/helfi-hakuvahti). ### Custom media type @@ -70,9 +80,9 @@ enabled. All React searches are found in the `hdbt` theme, so most of the relate ## Customizations -### Helbit integration +### Helbit integration -### Hakuvahti +### Hakuvahti #### Enable Hakuvahti features From b7a6fdc8c46a19d7e7bb58842dfd8544999d93f2 Mon Sep 17 00:00:00 2001 From: Tero Elonen Date: Tue, 16 Jul 2024 18:52:41 +0300 Subject: [PATCH 21/37] UHF-9660: Added more documentation about Rekry instance specific features --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 219d048e..c93a8b16 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,9 @@ _job search_. Read more about this feature on the [Hakuvahti section](#hakuvahti #### Job listing image (job_listing_image) +_Job listing image_ is a media type that is used to save the imported images from Helbit. The original idea behind this +separate media type has perhaps been a way to separate images used for normal content and job listings. + ## Customizations ### Helbit integration From 8fb9a48691a1c42a7bffead5595fa6fd5ce9a25d Mon Sep 17 00:00:00 2001 From: Tero Elonen Date: Wed, 17 Jul 2024 11:52:27 +0300 Subject: [PATCH 22/37] UHF-9660: Added more documentation about Rekry instance specific features --- README.md | 58 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index c93a8b16..4a6a788e 100644 --- a/README.md +++ b/README.md @@ -54,8 +54,10 @@ Some instance specific configuration can be found in Rekry-instance configuratio A _job listing_ is custom node type used to migrate job listings from Helbit, meaning all nodes are created automatically. While you can create a _job listing_ node manually through the user interface, this is not the standard workflow on the site. These listings appear in the `job_search` paragraph and a view called `of_interest`displayed in a -block on _job listing_ nodes. The _job listings_ utilize multiple taxonomies to categorize the content. Read more about -the [Helbit integration](#helbit) that creates these nodes and the [Job search](#job-search) feature that displays them below. +block on _job listing_ nodes. The _job listings_ utilize multiple taxonomies to categorize the content. Some job listings +include media such as images and videos and there is much processing going into these on the `helfi_rekry_content` +module. Read more about the [Helbit integration](#helbit) that creates these nodes and the [Job search](#job-search) +feature that displays them below. ### Custom paragraphs @@ -74,26 +76,58 @@ _job search_. Read more about this feature on the [Hakuvahti section](#hakuvahti - Fallback view when JavaScript is not enabled can be found in the `/conf/cim` folder [here](https://github.com/City-of-Helsinki/drupal-helfi-rekry/blob/dev/conf/cmi/views.view.job_listing_search.yml). - The saved search feature _Hakuvahti_ uses a separate server and the code related to it can be found [here](https://github.com/City-of-Helsinki/helfi-hakuvahti). -### Custom media type +### Custom media types #### Job listing image (job_listing_image) _Job listing image_ is a media type that is used to save the imported images from Helbit. The original idea behind this separate media type has perhaps been a way to separate images used for normal content and job listings. -## Customizations - ### Helbit integration +_Helbit_ is the source from which job listings are migrated to this instance. The `helfi_rekry_content` module handles +the migration and data processing. It retrieves job listing information from the API and saves it as job listing nodes +in the database. Media such as images and videos are processed and stored as media entities, with unsupported video +types being skipped. Categorization is achieved using taxonomy terms created from the API data, which are then linked +to the job listing nodes. The migrations run periodically as a cron jobs. Both published and unpublished job listings +from the API are migrated, with future publish dates scheduled accordingly. A separate cron job ensures scheduled job +listings are published for indexing. + +- The `helfi_rekry_content` module code can be found from [here](https://github.com/City-of-Helsinki/drupal-helfi-rekry/tree/dev/public/modules/custom/helfi_rekry_content). +- The migration interval for the new job listings can be checked from the cron configuration [here](https://github.com/City-of-Helsinki/drupal-helfi-rekry/blob/dev/docker/openshift/crons/migrate-job-listings.sh). +- The migration interval for changed job listings poll is written on this cron configuration [here](https://github.com/City-of-Helsinki/drupal-helfi-rekry/blob/dev/docker/openshift/crons/migrate-changed-job-listings.sh). +- The scheduled publishing interval can be checked from this cron configuration [here](https://github.com/City-of-Helsinki/drupal-helfi-rekry/blob/dev/docker/openshift/crons/content-scheduler.sh). + ### Hakuvahti -#### Enable Hakuvahti features +_Hakuvahti_ is feature of the [Job search](#job-search) that allows users to save their job search criteria. Users will +receive automatic email notifications whenever new job listings that match their criteria are posted on the site. + +Hakuvahti consists of three main components: a Node.js server, `helfi_hakuvahti` custom module and a React part +integrated with the Job search. The Node.js server handles most of the heavy lifting, including sending emails. The +Drupal custom module manages communication between the Node.js server and the React form, which displays the +feature to users. -To enable [Hakuvahti features](https://github.com/City-of-Helsinki/helfi-hakuvahti) for local development or usage, you need to first install Hakuvahti and then enable -Hakuvahti network in compose.yaml. +- The Drupal code for hakuvahti can be found from the `helfi_hakuvahti` custom module [here](https://github.com/City-of-Helsinki/drupal-helfi-rekry/tree/dev/public/modules/custom/helfi_hakuvahti). +- The hakuvahti Node.js server is on a separate repository [here](https://github.com/City-of-Helsinki/helfi-hakuvahti). +- The React part is under the Job search in `hdbt` theme _react_ folder. The functionality is written in [this file](https://github.com/City-of-Helsinki/drupal-hdbt/blob/main/src/js/react/apps/job-search/containers/SearchMonitorContainer.tsx). + +#### How to enable Hakuvahti features on local + +To enable Hakuvahti features for local development or usage, you need to: + +1. Install [Hakuvahti Node.js server]((https://github.com/City-of-Helsinki/helfi-hakuvahti) locally. +2. Start the server on your local. Instructions on the [Hakuvahti server README](https://github.com/City-of-Helsinki/helfi-hakuvahti?tab=readme-ov-file#installing-and-running-hakuvahti). +3. Now clear the caches on your Rekry instance, and you should be able to see the Hakuvahti on the Job search on you +local site. +4. To test the functionality, you should use the Mailpit running on your local in the `https://mailpit.docker.so/` url +to view the emails being sent by the feature. + +## Customizations -These lines are commented out with comment `# Uncomment to enable Hakuvahti:` +### Not part of global navigation -Specifically what is commented out: `HAKUVAHTI_URL` environment variable, `helfi-hakuvahti_helfi-hakuvahti-network` for -`app` and `elastic` containers. Finally it needs to be listed under `networks`. This enables Hakuvahti server to access -ElasticSearch. +Unlike other instances the link to the instance is in the header top navigation and the main menu of the instance is not +part of the global navigation. There is however a link to this instance located under another instance's menu tree on +the global navigation too. The logic that dictates if the menu is added to the global navigation or not can be found +[here](https://github.com/City-of-Helsinki/drupal-module-helfi-navigation/blob/main/src/Plugin/rest/resource/GlobalMobileMenu.php). From 1bccded41b12eb1aeab1cbcd43c68352e7222440 Mon Sep 17 00:00:00 2001 From: Tero Elonen Date: Wed, 17 Jul 2024 12:07:27 +0300 Subject: [PATCH 23/37] UHF-9660: Added more documentation about Rekry instance specific features --- README.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a6a788e..19db8cf6 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,15 @@ _job search_. Read more about this feature on the [Hakuvahti section](#hakuvahti - Fallback view when JavaScript is not enabled can be found in the `/conf/cim` folder [here](https://github.com/City-of-Helsinki/drupal-helfi-rekry/blob/dev/conf/cmi/views.view.job_listing_search.yml). - The saved search feature _Hakuvahti_ uses a separate server and the code related to it can be found [here](https://github.com/City-of-Helsinki/helfi-hakuvahti). +##### Common issues + +Sometimes on local the search dropdowns don't have any content. In this case usually running the indexing helps: + +1. Run `make shell` on the root of the project +2. Inside the shell run `drush sapi-rt; drush sapi-c; drush sapi-i; drush cr` to clear the Elastic index and reindex it +and clear Drupal caches after the indexing is done. +3. Now retry the search dropdowns and they should have options. + ### Custom media types #### Job listing image (job_listing_image) @@ -111,13 +120,16 @@ feature to users. - The Drupal code for hakuvahti can be found from the `helfi_hakuvahti` custom module [here](https://github.com/City-of-Helsinki/drupal-helfi-rekry/tree/dev/public/modules/custom/helfi_hakuvahti). - The hakuvahti Node.js server is on a separate repository [here](https://github.com/City-of-Helsinki/helfi-hakuvahti). - The React part is under the Job search in `hdbt` theme _react_ folder. The functionality is written in [this file](https://github.com/City-of-Helsinki/drupal-hdbt/blob/main/src/js/react/apps/job-search/containers/SearchMonitorContainer.tsx). +- The React form has configurable texts that can be found from the Rekry instance configuration in + `/admin/tools/rekry-content` url. You can translate these configurations for the three main languages using the + _Translate_ tab. #### How to enable Hakuvahti features on local To enable Hakuvahti features for local development or usage, you need to: 1. Install [Hakuvahti Node.js server]((https://github.com/City-of-Helsinki/helfi-hakuvahti) locally. -2. Start the server on your local. Instructions on the [Hakuvahti server README](https://github.com/City-of-Helsinki/helfi-hakuvahti?tab=readme-ov-file#installing-and-running-hakuvahti). +2. Start the server on your local. Instructions are on the [Hakuvahti server README](https://github.com/City-of-Helsinki/helfi-hakuvahti?tab=readme-ov-file#installing-and-running-hakuvahti). 3. Now clear the caches on your Rekry instance, and you should be able to see the Hakuvahti on the Job search on you local site. 4. To test the functionality, you should use the Mailpit running on your local in the `https://mailpit.docker.so/` url From f3e937301303b8af1095b6c0fd426a87927a62b1 Mon Sep 17 00:00:00 2001 From: Tero Elonen Date: Wed, 17 Jul 2024 15:32:01 +0300 Subject: [PATCH 24/37] UHF-9660: Add mention of the custom role --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 19db8cf6..b5ad78c2 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,12 @@ and clear Drupal caches after the indexing is done. _Job listing image_ is a media type that is used to save the imported images from Helbit. The original idea behind this separate media type has perhaps been a way to separate images used for normal content and job listings. +### Custom roles + +#### HR (hr) + +User role for viewing and editing only the job listings on the site. + ### Helbit integration _Helbit_ is the source from which job listings are migrated to this instance. The `helfi_rekry_content` module handles From da164b7a140d925b7388545a0364d37da1e5d34c Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Fri, 19 Jul 2024 12:33:43 +0000 Subject: [PATCH 25/37] Update configuration --- composer.lock | 474 +++++++++--------- conf/cmi/easy_breadcrumb.settings.yml | 1 + ...cookie_compliance.cookie_category.chat.yml | 4 +- ...e_compliance.cookie_category.essential.yml | 4 +- ..._compliance.cookie_category.preference.yml | 4 +- ..._compliance.cookie_category.statistics.yml | 4 +- conf/cmi/eu_cookie_compliance.settings.yml | 2 +- ...cookie_compliance.cookie_consent_intro.yml | 1 - ...cookie_compliance.cookie_category.chat.yml | 2 +- ...e_compliance.cookie_category.essential.yml | 2 +- ..._compliance.cookie_category.preference.yml | 2 +- ..._compliance.cookie_category.statistics.yml | 2 +- ...cookie_compliance.cookie_category.chat.yml | 2 +- ...e_compliance.cookie_category.essential.yml | 2 +- ..._compliance.cookie_category.preference.yml | 2 +- ..._compliance.cookie_category.statistics.yml | 2 +- conf/cmi/views.view.archive.yml | 2 +- conf/cmi/views.view.content.yml | 2 +- .../cmi/views.view.editoria11y_dismissals.yml | 2 +- conf/cmi/views.view.editoria11y_results.yml | 10 +- conf/cmi/views.view.files.yml | 4 +- conf/cmi/views.view.glossary.yml | 2 +- conf/cmi/views.view.job_listing_search.yml | 2 +- conf/cmi/views.view.locked_content.yml | 2 +- conf/cmi/views.view.media.yml | 2 +- conf/cmi/views.view.media_library.yml | 4 +- conf/cmi/views.view.paragraphs_library.yml | 2 +- conf/cmi/views.view.paragraphs_selection.yml | 2 +- conf/cmi/views.view.redirect.yml | 2 +- ...views.view.scheduler_scheduled_content.yml | 2 +- conf/cmi/views.view.taxonomy_term.yml | 2 +- conf/cmi/views.view.user_admin_people.yml | 2 +- docker/elastic-proxy/nginx.conf | 2 +- public/sites/default/settings.php | 1 + 34 files changed, 284 insertions(+), 273 deletions(-) diff --git a/composer.lock b/composer.lock index 24cddeaf..f296f927 100644 --- a/composer.lock +++ b/composer.lock @@ -394,16 +394,16 @@ }, { "name": "composer/semver", - "version": "3.4.0", + "version": "3.4.2", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", "shasum": "" }, "require": { @@ -455,7 +455,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.2" }, "funding": [ { @@ -471,7 +471,7 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2024-07-12T11:35:52+00:00" }, { "name": "consolidation/annotated-command", @@ -1039,16 +1039,16 @@ }, { "name": "dflydev/dot-access-data", - "version": "v3.0.2", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "f41715465d65213d644d3141a6a93081be5d3549" + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", - "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", "shasum": "" }, "require": { @@ -1108,9 +1108,9 @@ ], "support": { "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" }, - "time": "2022-10-27T11:44:00+00:00" + "time": "2024-07-08T12:26:09+00:00" }, { "name": "doctrine/annotations", @@ -1852,27 +1852,27 @@ }, { "name": "drupal/config_rewrite", - "version": "1.5.0", + "version": "1.6.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/config_rewrite.git", - "reference": "8.x-1.5" + "reference": "8.x-1.6" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/config_rewrite-8.x-1.5.zip", - "reference": "8.x-1.5", - "shasum": "c4740c74fc6e48069cada1fab4c809f1b99d31ac" + "url": "https://ftp.drupal.org/files/projects/config_rewrite-8.x-1.6.zip", + "reference": "8.x-1.6", + "shasum": "caa66f28c03e680ce5163c2924733f75913231ad" }, "require": { - "drupal/core": "^8.6 || ^9 || ^10", + "drupal/core": "^8.6 || ^9 || ^10 || ^11", "php": ">=7.1" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.5", - "datestamp": "1659538494", + "version": "8.x-1.6", + "datestamp": "1719490162", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -1885,9 +1885,9 @@ ], "authors": [ { - "name": "Brant Wynn (brantwynn)", - "homepage": "https://www.drupal.org/u/brantwynn", - "role": "Maintainer" + "name": "Diana Wynn (saltednut)", + "homepage": "https://www.drupal.org/u/saltednut", + "role": "Co-Maintainer" }, { "name": "saltednut", @@ -1983,16 +1983,16 @@ }, { "name": "drupal/core", - "version": "10.3.0", + "version": "10.3.1", "source": { "type": "git", "url": "https://github.com/drupal/core.git", - "reference": "6f1af3070110d7d0f2a6671bea26add34667f765" + "reference": "d137403a30d4154404e473785f48dfc889d77e23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core/zipball/6f1af3070110d7d0f2a6671bea26add34667f765", - "reference": "6f1af3070110d7d0f2a6671bea26add34667f765", + "url": "https://api.github.com/repos/drupal/core/zipball/d137403a30d4154404e473785f48dfc889d77e23", + "reference": "d137403a30d4154404e473785f48dfc889d77e23", "shasum": "" }, "require": { @@ -2141,13 +2141,13 @@ ], "description": "Drupal is an open source content management platform powering millions of websites and applications.", "support": { - "source": "https://github.com/drupal/core/tree/10.3.0" + "source": "https://github.com/drupal/core/tree/10.3.1" }, - "time": "2024-06-20T18:58:42+00:00" + "time": "2024-07-04T11:33:45+00:00" }, { "name": "drupal/core-composer-scaffold", - "version": "10.3.0", + "version": "10.3.1", "source": { "type": "git", "url": "https://github.com/drupal/core-composer-scaffold.git", @@ -2191,32 +2191,32 @@ "drupal" ], "support": { - "source": "https://github.com/drupal/core-composer-scaffold/tree/10.3.0" + "source": "https://github.com/drupal/core-composer-scaffold/tree/10.3.1" }, "time": "2024-05-11T08:21:39+00:00" }, { "name": "drupal/crop", - "version": "2.3.0", + "version": "2.4.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/crop.git", - "reference": "8.x-2.3" + "reference": "8.x-2.4" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/crop-8.x-2.3.zip", - "reference": "8.x-2.3", - "shasum": "8e109cf60077f4c605c4d1f895cb3dc28613a23a" + "url": "https://ftp.drupal.org/files/projects/crop-8.x-2.4.zip", + "reference": "8.x-2.4", + "shasum": "be11fad0abf1d53544d35cb4ca6cedd8e91d2542" }, "require": { - "drupal/core": "^9.3 || ^10" + "drupal/core": "^9.3 || ^10 || ^11" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-2.3", - "datestamp": "1665437894", + "version": "8.x-2.4", + "datestamp": "1720455738", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -2597,26 +2597,26 @@ }, { "name": "drupal/easy_breadcrumb", - "version": "2.0.6", + "version": "2.0.7", "source": { "type": "git", "url": "https://git.drupalcode.org/project/easy_breadcrumb.git", - "reference": "2.0.6" + "reference": "2.0.7" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/easy_breadcrumb-2.0.6.zip", - "reference": "2.0.6", - "shasum": "622f31fb071dea25735cfc4eaab4cf96bde917ab" + "url": "https://ftp.drupal.org/files/projects/easy_breadcrumb-2.0.7.zip", + "reference": "2.0.7", + "shasum": "a17524ffc2c76bc0aedb04116c3647dc2025e762" }, "require": { - "drupal/core": "^9.2 || ^10" + "drupal/core": "^9.2 || ^10 || ^11" }, "type": "drupal-module", "extra": { "drupal": { - "version": "2.0.6", - "datestamp": "1707084295", + "version": "2.0.7", + "datestamp": "1719427042", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -2662,6 +2662,10 @@ "name": "NickDickinsonWilde", "homepage": "https://www.drupal.org/user/3094661" }, + { + "name": "rakesh.gectcr", + "homepage": "https://www.drupal.org/user/1177822" + }, { "name": "renatog", "homepage": "https://www.drupal.org/user/3326031" @@ -2670,6 +2674,10 @@ "name": "sonemonu", "homepage": "https://www.drupal.org/user/1667988" }, + { + "name": "spuky", + "homepage": "https://www.drupal.org/user/209353" + }, { "name": "tatarbj", "homepage": "https://www.drupal.org/user/649590" @@ -3277,26 +3285,26 @@ }, { "name": "drupal/externalauth", - "version": "2.0.5", + "version": "2.0.6", "source": { "type": "git", "url": "https://git.drupalcode.org/project/externalauth.git", - "reference": "2.0.5" + "reference": "2.0.6" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/externalauth-2.0.5.zip", - "reference": "2.0.5", - "shasum": "7c262c7ca20d26aae45896daee4249e47b637abc" + "url": "https://ftp.drupal.org/files/projects/externalauth-2.0.6.zip", + "reference": "2.0.6", + "shasum": "0dbc9fbab0901e940d52b239e08f031797f6bd2a" }, "require": { - "drupal/core": "^9 || ^10" + "drupal/core": "^9.5 || ^10 || ^11" }, "type": "drupal-module", "extra": { "drupal": { - "version": "2.0.5", - "datestamp": "1708329378", + "version": "2.0.6", + "datestamp": "1720689758", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3530,20 +3538,20 @@ }, { "name": "drupal/focal_point", - "version": "2.1.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://git.drupalcode.org/project/focal_point.git", - "reference": "2.1.0" + "reference": "2.1.1" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/focal_point-2.1.0.zip", - "reference": "2.1.0", - "shasum": "f5be307039e226953598932d30a4eb6b2e9ac7d9" + "url": "https://ftp.drupal.org/files/projects/focal_point-2.1.1.zip", + "reference": "2.1.1", + "shasum": "f8c24bb4257f784176e79ec6f2b4c11ed46391e0" }, "require": { - "drupal/core": "^9.3 || ^10", + "drupal/core": "^9.3 || ^10 || ^11", "drupal/crop": "^2.3" }, "require-dev": { @@ -3552,8 +3560,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "2.1.0", - "datestamp": "1715085292", + "version": "2.1.1", + "datestamp": "1721126807", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3605,7 +3613,7 @@ "extra": { "drupal": { "version": "8.x-3.0-rc11", - "datestamp": "1718354743", + "datestamp": "1719568502", "security-coverage": { "status": "not-covered", "message": "RC releases are not covered by Drupal security advisories." @@ -3706,31 +3714,32 @@ }, { "name": "drupal/hal", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://git.drupalcode.org/project/hal.git", - "reference": "2.0.2" + "reference": "2.0.3" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/hal-2.0.2.zip", - "reference": "2.0.2", - "shasum": "9ec3ad376678941bae2e0eae0c980c42cddfc8b2" + "url": "https://ftp.drupal.org/files/projects/hal-2.0.3.zip", + "reference": "2.0.3", + "shasum": "81bc4b0bfdc6c3b7c2ec50f5eb4739451ff5c2ae" }, "require": { - "drupal/core": "^10" + "drupal/core": "^10 || ^11" }, "require-dev": { "drupal/aggregator": "2.x-dev", "drupal/entity_reference_revisions": "1.x-dev", - "drupal/rdf": "2.x-dev" + "drupal/rdf": "^2.1 || 3.0.x-dev", + "drupal/tour": "^1" }, "type": "drupal-module", "extra": { "drupal": { - "version": "2.0.2", - "datestamp": "1700523711", + "version": "2.0.3", + "datestamp": "1721252595", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3759,16 +3768,16 @@ }, { "name": "drupal/hdbt", - "version": "6.5.27", + "version": "6.5.34", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt.git", - "reference": "6ea70e083d02bec8fb622d686d47943c819f3fa1" + "reference": "519362d9435f1b86da3d432d3bd88bc9f6aeca6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/6ea70e083d02bec8fb622d686d47943c819f3fa1", - "reference": "6ea70e083d02bec8fb622d686d47943c819f3fa1", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/519362d9435f1b86da3d432d3bd88bc9f6aeca6c", + "reference": "519362d9435f1b86da3d432d3bd88bc9f6aeca6c", "shasum": "" }, "require": { @@ -3786,10 +3795,10 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.5.27", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.5.34", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt/issues" }, - "time": "2024-06-20T12:41:39+00:00" + "time": "2024-07-19T12:30:27+00:00" }, { "name": "drupal/hdbt_admin", @@ -4084,16 +4093,16 @@ }, { "name": "drupal/helfi_platform_config", - "version": "4.4.1", + "version": "4.4.5", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config.git", - "reference": "682707108c1afbbba8f6d91667d5c209f8b6ef2a" + "reference": "b61591dc50af5b9112b3709ec7251f52138d0a40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/682707108c1afbbba8f6d91667d5c209f8b6ef2a", - "reference": "682707108c1afbbba8f6d91667d5c209f8b6ef2a", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/b61591dc50af5b9112b3709ec7251f52138d0a40", + "reference": "b61591dc50af5b9112b3709ec7251f52138d0a40", "shasum": "" }, "require": { @@ -4207,10 +4216,10 @@ ], "description": "HELfi platform config", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.4.1", + "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.4.5", "issues": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/issues" }, - "time": "2024-06-26T11:20:54+00:00" + "time": "2024-07-19T11:20:53+00:00" }, { "name": "drupal/helfi_proxy", @@ -4969,17 +4978,17 @@ }, { "name": "drupal/migrate_plus", - "version": "6.0.2", + "version": "6.0.3", "source": { "type": "git", "url": "https://git.drupalcode.org/project/migrate_plus.git", - "reference": "6.0.2" + "reference": "6.0.3" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/migrate_plus-6.0.2.zip", - "reference": "6.0.2", - "shasum": "4315bc293aa75ea9247582d5d1925b075865e467" + "url": "https://ftp.drupal.org/files/projects/migrate_plus-6.0.3.zip", + "reference": "6.0.3", + "shasum": "08feb88178a45d8354862b03fd7fcf9b47ae14e1" }, "require": { "drupal/core": ">=9.1", @@ -4996,8 +5005,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "6.0.2", - "datestamp": "1705424638", + "version": "6.0.3", + "datestamp": "1721333111", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5501,26 +5510,26 @@ }, { "name": "drupal/purge", - "version": "3.5.0", + "version": "3.6.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/purge.git", - "reference": "8.x-3.5" + "reference": "8.x-3.6" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/purge-8.x-3.5.zip", - "reference": "8.x-3.5", - "shasum": "3772c156be0a2fc1df179710d23b9d7bf645b112" + "url": "https://ftp.drupal.org/files/projects/purge-8.x-3.6.zip", + "reference": "8.x-3.6", + "shasum": "f01d53c5a1d34301e86371c70a1d237a517b2897" }, "require": { - "drupal/core": "^9.2 || ^10" + "drupal/core": "^9.5 || ^10 || ^11" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-3.5", - "datestamp": "1697142035", + "version": "8.x-3.6", + "datestamp": "1719557519", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5531,7 +5540,7 @@ }, "drush": { "services": { - "drush.services.yml": ">=9" + "drush.services.yml": ">=10" } } }, @@ -7540,16 +7549,16 @@ }, { "name": "fileeye/mimemap", - "version": "2.1.1", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/FileEye/MimeMap.git", - "reference": "7992d33502de8a82065fd9fe2d2e2b1f7f33d1ce" + "reference": "2cb60da59d5c6fb881a78b481d513c4c68a1a93c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FileEye/MimeMap/zipball/7992d33502de8a82065fd9fe2d2e2b1f7f33d1ce", - "reference": "7992d33502de8a82065fd9fe2d2e2b1f7f33d1ce", + "url": "https://api.github.com/repos/FileEye/MimeMap/zipball/2cb60da59d5c6fb881a78b481d513c4c68a1a93c", + "reference": "2cb60da59d5c6fb881a78b481d513c4c68a1a93c", "shasum": "" }, "require": { @@ -7592,9 +7601,9 @@ ], "support": { "issues": "https://github.com/FileEye/MimeMap/issues", - "source": "https://github.com/FileEye/MimeMap/tree/2.1.1" + "source": "https://github.com/FileEye/MimeMap/tree/2.1.2" }, - "time": "2024-05-17T19:22:06+00:00" + "time": "2024-06-29T16:52:07+00:00" }, { "name": "fileeye/pel", @@ -7883,22 +7892,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.8.1", + "version": "7.9.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" + "reference": "84ac2b2afc44e40d3e8e658a45d68d6d20437612" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/84ac2b2afc44e40d3e8e658a45d68d6d20437612", + "reference": "84ac2b2afc44e40d3e8e658a45d68d6d20437612", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.1", - "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -7909,9 +7918,9 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "guzzle/client-integration-tests": "3.0.2", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -7989,7 +7998,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.8.1" + "source": "https://github.com/guzzle/guzzle/tree/7.9.0" }, "funding": [ { @@ -8005,20 +8014,20 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:35:24+00:00" + "time": "2024-07-18T11:52:56+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", + "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", "shasum": "" }, "require": { @@ -8026,7 +8035,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "type": "library", "extra": { @@ -8072,7 +8081,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.2" + "source": "https://github.com/guzzle/promises/tree/2.0.3" }, "funding": [ { @@ -8088,20 +8097,20 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:19:20+00:00" + "time": "2024-07-18T10:29:17+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.6.2", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", "shasum": "" }, "require": { @@ -8116,8 +8125,8 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -8188,7 +8197,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.2" + "source": "https://github.com/guzzle/psr7/tree/2.7.0" }, "funding": [ { @@ -8204,7 +8213,7 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:05:35+00:00" + "time": "2024-07-18T11:15:46+00:00" }, { "name": "jean85/pretty-package-versions", @@ -9026,16 +9035,16 @@ }, { "name": "monolog/monolog", - "version": "3.6.0", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654" + "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/4b18b21a5527a3d5ffdac2fd35d3ab25a9597654", - "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", + "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", "shasum": "" }, "require": { @@ -9111,7 +9120,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.6.0" + "source": "https://github.com/Seldaek/monolog/tree/3.7.0" }, "funding": [ { @@ -9123,20 +9132,20 @@ "type": "tidelift" } ], - "time": "2024-04-12T21:02:21+00:00" + "time": "2024-06-28T09:40:51+00:00" }, { "name": "nikic/php-parser", - "version": "v5.0.2", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1", + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1", "shasum": "" }, "require": { @@ -9147,7 +9156,7 @@ }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" @@ -9179,9 +9188,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0" }, - "time": "2024-03-05T20:51:40+00:00" + "time": "2024-07-01T20:03:41+00:00" }, { "name": "nodespark/des-connector", @@ -10485,16 +10494,16 @@ }, { "name": "sentry/sentry", - "version": "4.8.0", + "version": "4.8.1", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "3cf5778ff425a23f2d22ed41b423691d36f47163" + "reference": "61770efd8b7888e0bdd7d234f0ba67b066e47d04" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/3cf5778ff425a23f2d22ed41b423691d36f47163", - "reference": "3cf5778ff425a23f2d22ed41b423691d36f47163", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/61770efd8b7888e0bdd7d234f0ba67b066e47d04", + "reference": "61770efd8b7888e0bdd7d234f0ba67b066e47d04", "shasum": "" }, "require": { @@ -10558,7 +10567,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/4.8.0" + "source": "https://github.com/getsentry/sentry-php/tree/4.8.1" }, "funding": [ { @@ -10570,7 +10579,7 @@ "type": "custom" } ], - "time": "2024-06-05T13:18:43+00:00" + "time": "2024-07-16T13:45:27+00:00" }, { "name": "stomp-php/stomp-php", @@ -10647,16 +10656,16 @@ }, { "name": "symfony/console", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "be5854cee0e8c7b110f00d695d11debdfa1a2a91" + "reference": "6edb5363ec0c78ad4d48c5128ebf4d083d89d3a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/be5854cee0e8c7b110f00d695d11debdfa1a2a91", - "reference": "be5854cee0e8c7b110f00d695d11debdfa1a2a91", + "url": "https://api.github.com/repos/symfony/console/zipball/6edb5363ec0c78ad4d48c5128ebf4d083d89d3a9", + "reference": "6edb5363ec0c78ad4d48c5128ebf4d083d89d3a9", "shasum": "" }, "require": { @@ -10721,7 +10730,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.8" + "source": "https://github.com/symfony/console/tree/v6.4.9" }, "funding": [ { @@ -10737,20 +10746,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-28T09:49:33+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "d3b618176e8c3a9e5772151c51eba0c52a0c771c" + "reference": "a4df9dfe5da2d177af6643610c7bee2cb76a9f5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/d3b618176e8c3a9e5772151c51eba0c52a0c771c", - "reference": "d3b618176e8c3a9e5772151c51eba0c52a0c771c", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/a4df9dfe5da2d177af6643610c7bee2cb76a9f5e", + "reference": "a4df9dfe5da2d177af6643610c7bee2cb76a9f5e", "shasum": "" }, "require": { @@ -10802,7 +10811,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.4.8" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.9" }, "funding": [ { @@ -10818,7 +10827,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-19T10:45:28+00:00" }, { "name": "symfony/deprecation-contracts", @@ -10889,16 +10898,16 @@ }, { "name": "symfony/error-handler", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "ef836152bf13472dc5fb5b08b0c0c4cfeddc0fcc" + "reference": "c9b7cc075b3ab484239855622ca05cb0b99c13ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/ef836152bf13472dc5fb5b08b0c0c4cfeddc0fcc", - "reference": "ef836152bf13472dc5fb5b08b0c0c4cfeddc0fcc", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c9b7cc075b3ab484239855622ca05cb0b99c13ec", + "reference": "c9b7cc075b3ab484239855622ca05cb0b99c13ec", "shasum": "" }, "require": { @@ -10944,7 +10953,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.8" + "source": "https://github.com/symfony/error-handler/tree/v6.4.9" }, "funding": [ { @@ -10960,7 +10969,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-21T16:04:15+00:00" }, { "name": "symfony/event-dispatcher", @@ -11120,16 +11129,16 @@ }, { "name": "symfony/filesystem", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "4d37529150e7081c51b3c5d5718c55a04a9503f3" + "reference": "b51ef8059159330b74a4d52f68e671033c0fe463" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/4d37529150e7081c51b3c5d5718c55a04a9503f3", - "reference": "4d37529150e7081c51b3c5d5718c55a04a9503f3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b51ef8059159330b74a4d52f68e671033c0fe463", + "reference": "b51ef8059159330b74a4d52f68e671033c0fe463", "shasum": "" }, "require": { @@ -11166,7 +11175,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.8" + "source": "https://github.com/symfony/filesystem/tree/v6.4.9" }, "funding": [ { @@ -11182,7 +11191,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-28T09:49:33+00:00" }, { "name": "symfony/finder", @@ -11327,16 +11336,16 @@ }, { "name": "symfony/http-kernel", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6c519aa3f32adcfd1d1f18d923f6b227d9acf3c1" + "reference": "cc4a9bec6e1bdd2405f40277a68a6ed1bb393005" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6c519aa3f32adcfd1d1f18d923f6b227d9acf3c1", - "reference": "6c519aa3f32adcfd1d1f18d923f6b227d9acf3c1", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/cc4a9bec6e1bdd2405f40277a68a6ed1bb393005", + "reference": "cc4a9bec6e1bdd2405f40277a68a6ed1bb393005", "shasum": "" }, "require": { @@ -11421,7 +11430,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.8" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.9" }, "funding": [ { @@ -11437,20 +11446,20 @@ "type": "tidelift" } ], - "time": "2024-06-02T16:06:25+00:00" + "time": "2024-06-28T11:48:06+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "76326421d44c07f7824b19487cfbf87870b37efc" + "reference": "e2d56f180f5b8c5e7c0fbea872bb1f529b6d6d45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/76326421d44c07f7824b19487cfbf87870b37efc", - "reference": "76326421d44c07f7824b19487cfbf87870b37efc", + "url": "https://api.github.com/repos/symfony/mailer/zipball/e2d56f180f5b8c5e7c0fbea872bb1f529b6d6d45", + "reference": "e2d56f180f5b8c5e7c0fbea872bb1f529b6d6d45", "shasum": "" }, "require": { @@ -11501,7 +11510,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.8" + "source": "https://github.com/symfony/mailer/tree/v6.4.9" }, "funding": [ { @@ -11517,20 +11526,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-28T07:59:05+00:00" }, { "name": "symfony/mime", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "618597ab8b78ac86d1c75a9d0b35540cda074f33" + "reference": "7d048964877324debdcb4e0549becfa064a20d43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/618597ab8b78ac86d1c75a9d0b35540cda074f33", - "reference": "618597ab8b78ac86d1c75a9d0b35540cda074f33", + "url": "https://api.github.com/repos/symfony/mime/zipball/7d048964877324debdcb4e0549becfa064a20d43", + "reference": "7d048964877324debdcb4e0549becfa064a20d43", "shasum": "" }, "require": { @@ -11544,7 +11553,7 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<5.4", - "symfony/serializer": "<6.3.2" + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", @@ -11554,7 +11563,7 @@ "symfony/process": "^5.4|^6.4|^7.0", "symfony/property-access": "^5.4|^6.0|^7.0", "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.3.2|^7.0" + "symfony/serializer": "^6.4.3|^7.0.3" }, "type": "library", "autoload": { @@ -11586,7 +11595,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.8" + "source": "https://github.com/symfony/mime/tree/v6.4.9" }, "funding": [ { @@ -11602,7 +11611,7 @@ "type": "tidelift" } ], - "time": "2024-06-01T07:50:16+00:00" + "time": "2024-06-28T09:49:33+00:00" }, { "name": "symfony/options-resolver", @@ -12763,16 +12772,16 @@ }, { "name": "symfony/serializer", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "d6eda9966a3e5d1823c1cedf41bf98f8ed969d7c" + "reference": "56ce31d19127e79647ac53387c7555bdcd5730ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/d6eda9966a3e5d1823c1cedf41bf98f8ed969d7c", - "reference": "d6eda9966a3e5d1823c1cedf41bf98f8ed969d7c", + "url": "https://api.github.com/repos/symfony/serializer/zipball/56ce31d19127e79647ac53387c7555bdcd5730ce", + "reference": "56ce31d19127e79647ac53387c7555bdcd5730ce", "shasum": "" }, "require": { @@ -12841,7 +12850,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.4.8" + "source": "https://github.com/symfony/serializer/tree/v6.4.9" }, "funding": [ { @@ -12857,7 +12866,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-28T07:59:05+00:00" }, { "name": "symfony/service-contracts", @@ -12944,16 +12953,16 @@ }, { "name": "symfony/string", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "a147c0f826c4a1f3afb763ab8e009e37c877a44d" + "reference": "76792dbd99690a5ebef8050d9206c60c59e681d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/a147c0f826c4a1f3afb763ab8e009e37c877a44d", - "reference": "a147c0f826c4a1f3afb763ab8e009e37c877a44d", + "url": "https://api.github.com/repos/symfony/string/zipball/76792dbd99690a5ebef8050d9206c60c59e681d7", + "reference": "76792dbd99690a5ebef8050d9206c60c59e681d7", "shasum": "" }, "require": { @@ -13010,7 +13019,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.8" + "source": "https://github.com/symfony/string/tree/v6.4.9" }, "funding": [ { @@ -13026,7 +13035,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-28T09:25:38+00:00" }, { "name": "symfony/translation-contracts", @@ -13108,16 +13117,16 @@ }, { "name": "symfony/validator", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "dab2781371d54c86f6b25623ab16abb2dde2870c" + "reference": "ee0a4d6a327a963aee094f730da238f7ea18cb01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/dab2781371d54c86f6b25623ab16abb2dde2870c", - "reference": "dab2781371d54c86f6b25623ab16abb2dde2870c", + "url": "https://api.github.com/repos/symfony/validator/zipball/ee0a4d6a327a963aee094f730da238f7ea18cb01", + "reference": "ee0a4d6a327a963aee094f730da238f7ea18cb01", "shasum": "" }, "require": { @@ -13185,7 +13194,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.8" + "source": "https://github.com/symfony/validator/tree/v6.4.9" }, "funding": [ { @@ -13201,20 +13210,20 @@ "type": "tidelift" } ], - "time": "2024-06-02T15:48:50+00:00" + "time": "2024-06-22T07:42:41+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "ad23ca4312395f0a8a8633c831ef4c4ee542ed25" + "reference": "c31566e4ca944271cc8d8ac6887cbf31b8c6a172" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ad23ca4312395f0a8a8633c831ef4c4ee542ed25", - "reference": "ad23ca4312395f0a8a8633c831ef4c4ee542ed25", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c31566e4ca944271cc8d8ac6887cbf31b8c6a172", + "reference": "c31566e4ca944271cc8d8ac6887cbf31b8c6a172", "shasum": "" }, "require": { @@ -13270,7 +13279,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.8" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.9" }, "funding": [ { @@ -13286,20 +13295,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-27T13:23:14+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.1.1", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "db82c2b73b88734557cfc30e3270d83fa651b712" + "reference": "b80a669a2264609f07f1667f891dbfca25eba44c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/db82c2b73b88734557cfc30e3270d83fa651b712", - "reference": "db82c2b73b88734557cfc30e3270d83fa651b712", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/b80a669a2264609f07f1667f891dbfca25eba44c", + "reference": "b80a669a2264609f07f1667f891dbfca25eba44c", "shasum": "" }, "require": { @@ -13346,7 +13355,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.1.1" + "source": "https://github.com/symfony/var-exporter/tree/v7.1.2" }, "funding": [ { @@ -13362,7 +13371,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-06-28T08:00:31+00:00" }, { "name": "symfony/yaml", @@ -13703,16 +13712,16 @@ }, { "name": "webflo/drupal-finder", - "version": "1.3.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/webflo/drupal-finder.git", - "reference": "1fa65484857c7a2e4dcf0d9e0b47198fe0681b8a" + "reference": "73045060b0894c77962a10cff047f72872d8810c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/1fa65484857c7a2e4dcf0d9e0b47198fe0681b8a", - "reference": "1fa65484857c7a2e4dcf0d9e0b47198fe0681b8a", + "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/73045060b0894c77962a10cff047f72872d8810c", + "reference": "73045060b0894c77962a10cff047f72872d8810c", "shasum": "" }, "require": { @@ -13721,7 +13730,8 @@ }, "require-dev": { "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "^10.4" + "phpunit/phpunit": "^10.4", + "symfony/process": "^6.4" }, "type": "library", "autoload": { @@ -13742,9 +13752,9 @@ "description": "Helper class to locate a Drupal installation.", "support": { "issues": "https://github.com/webflo/drupal-finder/issues", - "source": "https://github.com/webflo/drupal-finder/tree/1.3.0" + "source": "https://github.com/webflo/drupal-finder/tree/1.3.1" }, - "time": "2024-05-08T21:22:39+00:00" + "time": "2024-06-28T13:45:36+00:00" }, { "name": "webmozart/assert", diff --git a/conf/cmi/easy_breadcrumb.settings.yml b/conf/cmi/easy_breadcrumb.settings.yml index 17db6916..f2faf080 100644 --- a/conf/cmi/easy_breadcrumb.settings.yml +++ b/conf/cmi/easy_breadcrumb.settings.yml @@ -33,3 +33,4 @@ segment_display_limit: null truncator_mode: false truncator_length: 100 truncator_dots: true +segment_display_minimum: 1 diff --git a/conf/cmi/eu_cookie_compliance.cookie_category.chat.yml b/conf/cmi/eu_cookie_compliance.cookie_category.chat.yml index cc1ac815..bf334f7a 100644 --- a/conf/cmi/eu_cookie_compliance.cookie_category.chat.yml +++ b/conf/cmi/eu_cookie_compliance.cookie_category.chat.yml @@ -3,11 +3,11 @@ langcode: en status: true dependencies: { } _core: - default_config_hash: MtcUnaHor36G5nT42_iCaKuQEma5ifvUuS83W8ieHPo + default_config_hash: Fo0xGa_NGmRHechfzeoRkN1cxRB2-z_P0gHmfGny4E8 id: chat label: 'Functional chat cookies' description: - value: '

The chats on the hel.fi  website require functional chat cookies to function. By using a chat, you automatically accept the functional cookies it requires.  No separate cookie consent is needed. Functional chat cookies are only downloaded to your device if you start a chat.

NameProviderPurpose of the cookieValidityType
_genesys.widgets.*hel.fiUsed for storing data required by the chat functionality.Session 
leijuke.*hel.fiUsed for storing data required by the chat functionality.Session 
aiap-wbc-chat-app-button-statehel.fiUsed for chat app functionality. Stores chat app button settings and configuration data.Session 
aiap-chat-app-v1-statehel.fiUsed for chat app functionality. Stores chat app settings and configuration data.Session 
conversationTokenhttps://coh-chat-app-prod.ow6i4n9pdzm.eu-de.codeengine.appdomain.cloudUsed for chat app functionality. Stores chat app conversation token for authentication and data access purposes.SessionThird party
' + value: '

The chats on the www.hel.fi  website require functional chat cookies to function. By using a chat, you automatically accept the functional cookies it requires.  No separate cookie consent is needed. Functional chat cookies are only downloaded to your device if you start a chat.

NameProviderPurpose of the cookieValidityType
_genesys.widgets.*www.hel.fiUsed for storing data required by the chat functionality.Session 
leijuke.*www.hel.fiUsed for storing data required by the chat functionality.Session 
aiap-wbc-chat-app-button-statewww.hel.fiUsed for chat app functionality. Stores chat app button settings and configuration data.Session 
aiap-chat-app-v1-statewww.hel.fiUsed for chat app functionality. Stores chat app settings and configuration data.Session 
conversationTokenhttps://coh-chat-app-prod.ow6i4n9pdzm.eu-de.codeengine.appdomain.cloudUsed for chat app functionality. Stores chat app conversation token for authentication and data access purposes.SessionThird party
CallGuide.languagewww.hel.fiACE Chat: The language used in the ACE Web SDK is derived from the browsers' preferred language setting and ACE Web SDK settings.-Local storage
CallGuide.config_services_*www.hel.fiACE Chat: Configuring customer service integrations on a web page. Reduces web traffic when loading and navigating a page-Local storage
*_CGWebSDK_windowGUIDwds.ace.teliacompany.comACE Chat: The unique identity of this browser window. Is used if the browser has more than one open window for a website-Local storage
*_CGWebSDK_videoShowerwds.ace.teliacompany.comACE Chat: Only one window at a time can display video. This information tracks which of them (if any).-Local storage
*_CGWebSDK_videoClientswds.ace.teliacompany.comACE Chat: A list of all windows that are likely to display the video-Local storage
*_ACEChatState_ActiveClientwds.ace.teliacompany.comACE Chat: A website can have more than one chat client. This item tracks which customer the current chat belongs to.-Local storage
*_chatEntrancewds.ace.teliacompany.comACE Chat: Name of the chat entrance to the system-Local storage
*_chatUIDwds.ace.teliacompany.comACE Chat: Chat session ID when communicating with ACE-Local storage
humany-*www.hel.fiACE Chat: Preserves widget status when page reloads-Local storage
ARRAffinity.hel.humany.netACE Chat: Load balancing in the backend systemSessionThird party
ARRAffinitySameSite.hel.humany.netACE Chat: Load balancing in the backend systemSessionThird party
' format: full_html checkbox_default_state: unchecked weight: -5 diff --git a/conf/cmi/eu_cookie_compliance.cookie_category.essential.yml b/conf/cmi/eu_cookie_compliance.cookie_category.essential.yml index d768ff3d..4cad5075 100644 --- a/conf/cmi/eu_cookie_compliance.cookie_category.essential.yml +++ b/conf/cmi/eu_cookie_compliance.cookie_category.essential.yml @@ -3,11 +3,11 @@ langcode: en status: true dependencies: { } _core: - default_config_hash: oVn5Apol-q10_G1LoTbTJNj-k-1eYvCbO4vGiUF09t4 + default_config_hash: kfnLYqpxtvBYopdnyeB0TYzlfLynAY6hIegpzFNdDKw id: essential label: 'Essential cookies' description: - value: '

Essential cookies help to make the website usable by allowing basic functions, navigating the page and using the protected areas of the site. The website will not work properly without these cookies and their consent is not required.

NameProviderPurpose of the cookieValidityType
cookiehubcookiehub.comUsed by CookieHub to store information about whether visitors have given or declined the use of cookie categories used on the hel.fi site.365 days 
cookie-agreedhel.fiUsed by hel.fi Drupal to store information about whether visitors have given or declined the use of cookie categories used on the hel.fi site.100 days 
cookie-agreed-versionhel.fiUsed by hel.fi Drupal to store information about what version of the cookie consent the user has agreed to.100 days 
cookie-agreed-categorieshel.fiUsed by hel.fi Drupal to store information about what cookie categories the user has agreed to.100 days 
cookie-agreedavustukset.hel.fiUsed by avustukset.hel.fi Drupal to store information about whether visitors have given or declined the use of cookie categories used on the avustukset.hel.fi site.100 days 
cookie-agreed-versionavustukset.hel.fiUsed by avustukset.hel.fi Drupal to store information about what version of the cookie consent the user has agreed to.100 days 
cookie-agreed-categoriesavustukset.hel.fiUsed by avustukset.hel.fi Drupal to store information about what cookie categories the user has agreed to.100 days 
SSESS*hel.fiA cookie related to the operation of the content management system.23 days 
SSESS*avustukset.hel.fiA cookie related to the operation of the content management system.23 days 
AWSELBCORSsiteimproveanalytics.ioThe cookie is related to a load distribution function used to direct requests to servers with the least traffic.SessionThird party
mtm_cookie_consentkartta.hel.fiA technical cookie that stores information about how you responded to the notice in the cookie banner about the use of cookies.10950 days 
JSESSIONID

helsinkikanava.fi

coh-chat-app-prod.eu-de.mybluemix.net

The cookie is an obligatory cookie that facilitates visiting the website.SessionThird party
JSESSIONIDcoh-chat-app-prod.ow6i4n9pdzm.eu-de.codeengine.appdomain.cloudUsed for chat app functionality. Its value is used to access session data on server of the application.SessionThird party
COOKIE_SUPPORThelsinkikanava.fiThe cookie facilitates managing cookies on the website.365 daysThird party
GUEST_LANGUAGE_IDhelsinkikanava.fiThis cookie is generated by the Liferay, its function is to store the language preferences.365 daysThird party
helfi-settingshel.fiUsed by hel.fi Drupal to store information about closed announcements and accordions'' state.-Local storage
Drupal.visitor.autologout_loginavustukset.hel.fiUsed by avustukset.hel.fi Drupal to automatically logout user after a period of inactivity.365 days 
' + value: '

Essential cookies help to make the website usable by allowing basic functions, navigating the page and using the protected areas of the site. The website will not work properly without these cookies and their consent is not required.

NameProviderPurpose of the cookieValidityType
cookiehubcookiehub.comUsed by CookieHub to store information about whether visitors have given or declined the use of cookie categories used on the www.hel.fi site.365 days 
cookie-agreedwww.hel.fiUsed by www.hel.fi Drupal to store information about whether visitors have given or declined the use of cookie categories used on the www.hel.fi site.100 days 
cookie-agreed-versionwww.hel.fiUsed by www.hel.fi Drupal to store information about what version of the cookie consent the user has agreed to.100 days 
cookie-agreed-categorieswww.hel.fiUsed by www.hel.fi Drupal to store information about what cookie categories the user has agreed to.100 days 
cookie-agreedavustukset.hel.fiUsed by avustukset.hel.fi Drupal to store information about whether visitors have given or declined the use of cookie categories used on the avustukset.hel.fi site.100 days 
cookie-agreed-versionavustukset.hel.fiUsed by avustukset.hel.fi Drupal to store information about what version of the cookie consent the user has agreed to.100 days 
cookie-agreed-categoriesavustukset.hel.fiUsed by avustukset.hel.fi Drupal to store information about what cookie categories the user has agreed to.100 days 
SSESS*www.hel.fiA cookie related to the operation of the content management system.23 days 
SSESS*avustukset.hel.fiA cookie related to the operation of the content management system.23 days 
AWSELBCORSsiteimproveanalytics.ioThe cookie is related to a load distribution function used to direct requests to servers with the least traffic.SessionThird party
mtm_cookie_consentkartta.hel.fiA technical cookie that stores information about how you responded to the notice in the cookie banner about the use of cookies.10950 days 
JSESSIONID

helsinkikanava.fi

coh-chat-app-prod.eu-de.mybluemix.net

The cookie is an obligatory cookie that facilitates visiting the website.SessionThird party
JSESSIONIDcoh-chat-app-prod.ow6i4n9pdzm.eu-de.codeengine.appdomain.cloudUsed for chat app functionality. Its value is used to access session data on server of the application.SessionThird party
COOKIE_SUPPORThelsinkikanava.fiThe cookie facilitates managing cookies on the website.365 daysThird party
GUEST_LANGUAGE_IDhelsinkikanava.fiThis cookie is generated by the Liferay, its function is to store the language preferences.365 daysThird party
helfi-settingswww.hel.fiUsed by www.hel.fi Drupal to store information about closed announcements and accordions'' state.-Local storage
Drupal.visitor.autologout_loginavustukset.hel.fiUsed by avustukset.hel.fi Drupal to automatically logout user after a period of inactivity.365 days 
' format: full_html checkbox_default_state: required weight: -9 diff --git a/conf/cmi/eu_cookie_compliance.cookie_category.preference.yml b/conf/cmi/eu_cookie_compliance.cookie_category.preference.yml index 30cb3521..6e799ef3 100644 --- a/conf/cmi/eu_cookie_compliance.cookie_category.preference.yml +++ b/conf/cmi/eu_cookie_compliance.cookie_category.preference.yml @@ -3,11 +3,11 @@ langcode: en status: true dependencies: { } _core: - default_config_hash: wwt5AyVnGkL_AxTa10uXAzOVI_a51Rhkc7LZtHkYTFE + default_config_hash: 2nukTq0GW1ah8MZEHNDaOJ0Ygil0hTpw48HeCYekkZY id: preference label: Preference description: - value: '

Preference cookies modify the visuals and functions of the website based on the user''s previous sessions.

NameProviderPurpose of the cookieValidityType
httpskartta.hel.fi.SWCulturekartta.hel.fiThe City''s map service cookie saves the language in which the service is used.1826 days 
icareus-devicehelsinkikanava.fiThe Helsinki Channel video server cookie facilitates including videos as part of the website''s content.365 daysThird party
VISITOR_INFO1_LIVEyoutube.comThe YouTube cookie selects the old or new video player depending on the connection speed.180 daysThird party
CONSENTyoutube.comUsed by Google to store user consent preferences5947 days, 15 hoursThird party
activeTabhel.fiUsed for storing active tab data when user is using high school search.Session 
activeContenthel.fiUsed for storing active content data when user is using high school search.Session 
' + value: '

Preference cookies modify the visuals and functions of the website based on the user''s previous sessions.

NameProviderPurpose of the cookieValidityType
httpskartta.hel.fi.SWCulturekartta.hel.fiThe City''s map service cookie saves the language in which the service is used.1826 days 
icareus-devicehelsinkikanava.fiThe Helsinki Channel video server cookie facilitates including videos as part of the website''s content.365 daysThird party
VISITOR_INFO1_LIVEyoutube.comThe YouTube cookie selects the old or new video player depending on the connection speed.180 daysThird party
CONSENTyoutube.comUsed by Google to store user consent preferences5947 days, 15 hoursThird party
activeTabwww.hel.fiUsed for storing active tab data when user is using high school search.Session 
activeContentwww.hel.fiUsed for storing active content data when user is using high school search.Session 
' format: full_html checkbox_default_state: unchecked weight: -8 diff --git a/conf/cmi/eu_cookie_compliance.cookie_category.statistics.yml b/conf/cmi/eu_cookie_compliance.cookie_category.statistics.yml index 11dad826..dcfff68a 100644 --- a/conf/cmi/eu_cookie_compliance.cookie_category.statistics.yml +++ b/conf/cmi/eu_cookie_compliance.cookie_category.statistics.yml @@ -3,11 +3,11 @@ langcode: en status: true dependencies: { } _core: - default_config_hash: vfx2dT2Gn9ght_4rgTxtoMRgtOrfQ1zaMfLrnOOdoWs + default_config_hash: DocxmYG5rysx8IQZ_Mu2ZhNcPnpkNpXJAYeRDWSRMds id: statistics label: Statistics description: - value: '

The information collected by statistics cookies is used for developing the website.

NameProviderPurpose of the cookieValidityType
nmstathel.fiThe Siteimprove statistics cookie collects information about the use of the website.1000 days 
_pk_id.*hel.fiMatomo Analytics - used to store a few details about the user such as the unique visitor ID393 days 
_pk_ses.141.89f6hel.fi-1 hour 
_pk_id.*kartta.hel.fiMatomo Analytics - used to store a few details about the user such as the unique visitor ID393 days 
_pk_ses.*kartta.hel.fiMatomo Analytics - short lived cookies used to temporarily store data for the visit1 hour 
_pk_id.*palvelukartta.hel.fiMatomo Analytics - used to store a few details about the user such as the unique visitor ID393 days 
_pk_ses.*palvelukartta.hel.fiMatomo Analytics - short lived cookies used to temporarily store data for the visit1 hour 
_pk_id.*avustukset.hel.fiMatomo Analytics - used to store a few details about the user such as the unique visitor ID393 days 
_pk_ses.*avustukset.hel.fiMatomo Analytics - short lived cookies used to temporarily store data for the visit1 hour 
rnsbidreactandshare.com

A record related to the operation of the 

Askem

 react buttons.

-Local storage
rnsbid_tsreactandshare.com

A record related to the operation of the 

Askem

 react buttons.

-Local storage
rns_reaction_*reactandshare.com

A record related to the operation of the 

Askem

 react buttons.

-Local storage
YSCyoutube.comThe YouTube cookie facilitates including videos as part of the website''s content.SessionThird party
' + value: '

The information collected by statistics cookies is used for developing the website.

NameProviderPurpose of the cookieValidityType
nmstatwww.hel.fiThe Siteimprove statistics cookie collects information about the use of the website.1000 days 
_pk_id.*www.hel.fiMatomo Analytics - used to store a few details about the user such as the unique visitor ID393 days 
_pk_ses.141.89f6www.hel.fi-1 hour 
_pk_id.*kartta.hel.fiMatomo Analytics - used to store a few details about the user such as the unique visitor ID393 days 
_pk_ses.*kartta.hel.fiMatomo Analytics - short lived cookies used to temporarily store data for the visit1 hour 
_pk_id.*palvelukartta.hel.fiMatomo Analytics - used to store a few details about the user such as the unique visitor ID393 days 
_pk_ses.*palvelukartta.hel.fiMatomo Analytics - short lived cookies used to temporarily store data for the visit1 hour 
_pk_id.*avustukset.hel.fiMatomo Analytics - used to store a few details about the user such as the unique visitor ID393 days 
_pk_ses.*avustukset.hel.fiMatomo Analytics - short lived cookies used to temporarily store data for the visit1 hour 
rnsbidreactandshare.com

A record related to the operation of the 

Askem

 react buttons.

-Local storage
rnsbid_tsreactandshare.com

A record related to the operation of the 

Askem

 react buttons.

-Local storage
rns_reaction_*reactandshare.com

A record related to the operation of the 

Askem

 react buttons.

-Local storage
YSCyoutube.comThe YouTube cookie facilitates including videos as part of the website''s content.SessionThird party
' format: full_html checkbox_default_state: unchecked weight: -7 diff --git a/conf/cmi/eu_cookie_compliance.settings.yml b/conf/cmi/eu_cookie_compliance.settings.yml index 9af81af2..519e31d7 100644 --- a/conf/cmi/eu_cookie_compliance.settings.yml +++ b/conf/cmi/eu_cookie_compliance.settings.yml @@ -71,7 +71,7 @@ enable_save_preferences_button: true domain_all_sites: true settings_tab_enabled: false containing_element: body -cookie_policy_version: 1.2.4 +cookie_policy_version: 1.2.5 cookie_value_disagreed: '0' cookie_value_agreed_show_thank_you: '1' cookie_value_agreed: '2' diff --git a/conf/cmi/helfi_eu_cookie_compliance.cookie_consent_intro.yml b/conf/cmi/helfi_eu_cookie_compliance.cookie_consent_intro.yml index 30412ad8..368a0db9 100644 --- a/conf/cmi/helfi_eu_cookie_compliance.cookie_consent_intro.yml +++ b/conf/cmi/helfi_eu_cookie_compliance.cookie_consent_intro.yml @@ -1,6 +1,5 @@ _core: default_config_hash: eVNvfbEgjm25gLyG5DH8zDbCi17xs8djPZt0XHD_Q9s -langcode: en cc: title: 'Cookie settings' content: diff --git a/conf/cmi/language/fi/eu_cookie_compliance.cookie_category.chat.yml b/conf/cmi/language/fi/eu_cookie_compliance.cookie_category.chat.yml index 3ba97b22..e384bffd 100644 --- a/conf/cmi/language/fi/eu_cookie_compliance.cookie_category.chat.yml +++ b/conf/cmi/language/fi/eu_cookie_compliance.cookie_category.chat.yml @@ -1,4 +1,4 @@ description: - value: '

Toiminnallisten chat-evästeiden avulla mahdollistetaan helfi-sivujen chattien toiminta. Jos aloitat chatin, hyväksyt sen käyttöön liittyvät toiminnalliset evästeet automaattisesti.  Evästeiden hyväksymiseen ei tällöin tarvita erillistä suostumusta. Toiminnallisia chat-evästeitä ladataan laitteellesi vain, jos käynnistät chatin.

NimiTarjoajaTarkoitusVoimassaTyyppi
_genesys.widgets.*hel.fiKäytetään chatin tarvitseman datan tallentamiseen.Istunto 
leijuke.*hel.fiKäytetään chatin tarvitseman datan tallentamiseen.Istunto 
aiap-wbc-chat-app-button-statehel.fiKäytetään chat-sovellustoiminnallisuutta varten. Säilyttää chat-sovelluksen painikkeen asetukset ja kokoonpanotiedot.Istunto 
aiap-chat-app-v1-statehel.fiKäytetään chat-sovellustoiminnallisuutta varten. Säilyttää chat-sovelluksen asetukset ja kokoonpanotiedot.Istunto 
conversationTokenhttps://coh-chat-app-prod.ow6i4n9pdzm.eu-de.codeengine.appdomain.cloudKäytetään chat-sovellustoiminnallisuutta varten. Säilyttää chat-sovelluksen keskustelutunnisteen istunnnon tunnistamista ja tietojen hakemista varten.IstuntoKolmas osapuoli
' + value: '

Toiminnallisten chat-evästeiden avulla mahdollistetaan helfi-sivujen chattien toiminta. Jos aloitat chatin, hyväksyt sen käyttöön liittyvät toiminnalliset evästeet automaattisesti.  Evästeiden hyväksymiseen ei tällöin tarvita erillistä suostumusta. Toiminnallisia chat-evästeitä ladataan laitteellesi vain, jos käynnistät chatin.

NimiTarjoajaTarkoitusVoimassaTyyppi
_genesys.widgets.*www.hel.fiKäytetään chatin tarvitseman datan tallentamiseen.Istunto 
leijuke.*www.hel.fiKäytetään chatin tarvitseman datan tallentamiseen.Istunto 
aiap-wbc-chat-app-button-statewww.hel.fiKäytetään chat-sovellustoiminnallisuutta varten. Säilyttää chat-sovelluksen painikkeen asetukset ja kokoonpanotiedot.Istunto 
aiap-chat-app-v1-statewww.hel.fiKäytetään chat-sovellustoiminnallisuutta varten. Säilyttää chat-sovelluksen asetukset ja kokoonpanotiedot.Istunto 
conversationTokenhttps://coh-chat-app-prod.ow6i4n9pdzm.eu-de.codeengine.appdomain.cloudKäytetään chat-sovellustoiminnallisuutta varten. Säilyttää chat-sovelluksen keskustelutunnisteen istunnnon tunnistamista ja tietojen hakemista varten.IstuntoKolmas osapuoli
CallGuide.languagewww.hel.fiACE Chat: ACE Web SDK:ssa käytettävä kieli, joka on johdettu selainten ensisijaisesta kieliasetuksesta ja ACE Web SDK - asetuksista.-Paikallinen muisti
CallGuide.config_services_*www.hel.fiACE Chat: Asiakaspalveluintegraatioiden määritys verkkosivulla. Vähentää verkkoliikennettä sivun lataamisen ja navigoinnin yhteydessä.-Paikallinen muisti
*_CGWebSDK_windowGUIDwds.ace.teliacompany.comACE Chat: Tämän selainikkunan yksilöllinen identiteetti. Käytetään, jos selaimessa on useampi kuin yksi avoin ikkuna verkkosivustolle.-Paikallinen muisti
*_CGWebSDK_videoShowerwds.ace.teliacompany.comACE Chat: Vain yksi ikkuna kerrallaan voi näyttää videota. Nämä tiedot seuraavat, mikä niistä (jos sellainen on).-Paikallinen muisti
*_CGWebSDK_videoClientswds.ace.teliacompany.comACE Chat: Luettelo kaikista ikkunoista, jotka ovat todennäköisiä videon näyttämiseen.-Paikallinen muisti
*_ACEChatState_ActiveClientwds.ace.teliacompany.comACE Chat: Verkkosivustolla voi olla useampi kuin yksi chat-asiakasohjelma. Tämä kohde seuraa, mihin asiakkaaseen nykyinen chat kuuluu.-Paikallinen muisti
*_chatEntrancewds.ace.teliacompany.comACE Chat: Järjestelmän chat-sisäänkäynnin nimi-Paikallinen muisti
*_chatUIDwds.ace.teliacompany.comACE Chat: Keskustelun istuntotunnus kommunikoitaessa ACE:n kanssa-Paikallinen muisti
humany-*www.hel.fiACE Chat: Säilyttää widgetin tilan, kun sivu ladataan uudelleen -Paikallinen muisti
ARRAffinity.hel.humany.netACE Chat: Kuormituksen tasaus taustajärjestelmässäIstuntoKolmas osapuoli
ARRAffinitySameSite.hel.humany.netACE Chat: Kuormituksen tasaus taustajärjestelmässäIstuntoKolmas osapuoli
' format: full_html label: 'Toiminnalliset chat-evästeet' diff --git a/conf/cmi/language/fi/eu_cookie_compliance.cookie_category.essential.yml b/conf/cmi/language/fi/eu_cookie_compliance.cookie_category.essential.yml index 7bdeb019..f66aa525 100644 --- a/conf/cmi/language/fi/eu_cookie_compliance.cookie_category.essential.yml +++ b/conf/cmi/language/fi/eu_cookie_compliance.cookie_category.essential.yml @@ -1,4 +1,4 @@ description: - value: '

Välttämättömät evästeet auttavat tekemään verkkosivustosta käyttökelpoisen sallimalla perustoimintoja, kuten sivulla siirtymisen ja sivuston suojattujen alueiden käytön. Verkkosivusto ei toimi kunnolla ilman näitä evästeitä eikä niihin tarvita suostumusta.

NimiTarjoajaTarkoitusVoimassaTyyppi
cookiehubCookiehubMahdollistaa evästehallinnan hel.fi sivuilla.365 päivää 
cookie-agreedhel.fiSivusto käyttää tätä evästettä tietojen tallentamiseen siitä, ovatko kävijät antaneet hyväksyntänsä tai kieltäytyneet evästeiden käytöstä.100 päivää 
cookie-agreed-versionhel.fiTähän evästeeseen tallennetaan käyttäjän hyväksymän evästeselosteen versio.100 päivää 
cookie-agreed-categorieshel.fiTähän evästeeseen on tallennettu käyttäjän hyväksymät evästekategoriat.100 päivää 
cookie-agreedavustukset.hel.fiSivusto käyttää tätä evästettä tietojen tallentamiseen siitä, ovatko kävijät antaneet hyväksyntänsä tai kieltäytyneet evästeiden käytöstä.100 päivää 
cookie-agreed-versionavustukset.hel.fiTähän evästeeseen tallennetaan käyttäjän hyväksymän evästeselosteen versio.100 päivää 
cookie-agreed-categoriesavustukset.hel.fiTähän evästeeseen on tallennettu käyttäjän hyväksymät evästekategoriat.100 päivää 
SSESS*hel.fiSisällönhallintajärjestelmän toimintaan liittyvä eväste.23 päivää 
SSESS*avustukset.hel.fiSisällönhallintajärjestelmän toimintaan liittyvä eväste.23 päivää 
AWSELBCORSsiteimproveanalytics.ioEväste liittyy palvelinten kuormanjakotoiminnallisuuteen, jolla ohjataan pyynnöt vähimmällä käytöllä olevalle palvelimille.IstuntoKolmas osapuoli
mtm_cookie_consentkartta.hel.fiTekninen eväste johon talletetaan tieto valinnastasi evästeiden käytöstä kertovan bannerin kohdalla10950 päivää 
JSESSIONID

helsinkikanava.fi

coh-chat-app-prod.eu-de.mybluemix.net

Sivuston pakollinen eväste mahdollistaa kävijän vierailun sivustolla.IstuntoKolmas osapuoli
JSESSIONIDcoh-chat-app-prod.ow6i4n9pdzm.eu-de.codeengine.appdomain.cloudKäytetään chat-sovellustoiminnallisuutta varten. Evästettä käytetään sovelluksen palvelimella olevan istuntotiedon hakemiseen.IstuntoKolmas osapuoli
COOKIE_SUPPORThelsinkikanava.fiMahdollistaa evästeiden hallinnan sivustolla.365 päivääKolmas osapuoli
GUEST_LANGUAGE_IDhelsinkikanava.fiTämän evästeen on luonut Liferay, se tallentaa kieliasetukset.365 päivääKolmas osapuoli
helfi-settingshel.fiSivusto käyttää tätä tietuetta tietojen tallentamiseen siitä, mitä poikkeusilmoituksia on suljettu ja mikä on avattavien sisältöalueiden tila.-Paikallinen muisti
Drupal.visitor.autologout_loginavustukset.hel.fiKäytetään käyttäjän automaattiseen uloskirjautumiseen.365 päivää 
' + value: '

Välttämättömät evästeet auttavat tekemään verkkosivustosta käyttökelpoisen sallimalla perustoimintoja, kuten sivulla siirtymisen ja sivuston suojattujen alueiden käytön. Verkkosivusto ei toimi kunnolla ilman näitä evästeitä eikä niihin tarvita suostumusta.

NimiTarjoajaTarkoitusVoimassaTyyppi
cookiehubCookiehubMahdollistaa evästehallinnan www.hel.fi sivuilla.365 päivää 
cookie-agreedwww.hel.fiSivusto käyttää tätä evästettä tietojen tallentamiseen siitä, ovatko kävijät antaneet hyväksyntänsä tai kieltäytyneet evästeiden käytöstä.100 päivää 
cookie-agreed-versionwww.hel.fiTähän evästeeseen tallennetaan käyttäjän hyväksymän evästeselosteen versio.100 päivää 
cookie-agreed-categorieswww.hel.fiTähän evästeeseen on tallennettu käyttäjän hyväksymät evästekategoriat.100 päivää 
cookie-agreedavustukset.hel.fiSivusto käyttää tätä evästettä tietojen tallentamiseen siitä, ovatko kävijät antaneet hyväksyntänsä tai kieltäytyneet evästeiden käytöstä.100 päivää 
cookie-agreed-versionavustukset.hel.fiTähän evästeeseen tallennetaan käyttäjän hyväksymän evästeselosteen versio.100 päivää 
cookie-agreed-categoriesavustukset.hel.fiTähän evästeeseen on tallennettu käyttäjän hyväksymät evästekategoriat.100 päivää 
SSESS*www.hel.fiSisällönhallintajärjestelmän toimintaan liittyvä eväste.23 päivää 
SSESS*avustukset.hel.fiSisällönhallintajärjestelmän toimintaan liittyvä eväste.23 päivää 
AWSELBCORSsiteimproveanalytics.ioEväste liittyy palvelinten kuormanjakotoiminnallisuuteen, jolla ohjataan pyynnöt vähimmällä käytöllä olevalle palvelimille.IstuntoKolmas osapuoli
mtm_cookie_consentkartta.hel.fiTekninen eväste johon talletetaan tieto valinnastasi evästeiden käytöstä kertovan bannerin kohdalla10950 päivää 
JSESSIONID

helsinkikanava.fi

coh-chat-app-prod.eu-de.mybluemix.net

Sivuston pakollinen eväste mahdollistaa kävijän vierailun sivustolla.IstuntoKolmas osapuoli
JSESSIONIDcoh-chat-app-prod.ow6i4n9pdzm.eu-de.codeengine.appdomain.cloudKäytetään chat-sovellustoiminnallisuutta varten. Evästettä käytetään sovelluksen palvelimella olevan istuntotiedon hakemiseen.IstuntoKolmas osapuoli
COOKIE_SUPPORThelsinkikanava.fiMahdollistaa evästeiden hallinnan sivustolla.365 päivääKolmas osapuoli
GUEST_LANGUAGE_IDhelsinkikanava.fiTämän evästeen on luonut Liferay, se tallentaa kieliasetukset.365 päivääKolmas osapuoli
helfi-settingswww.hel.fiSivusto käyttää tätä tietuetta tietojen tallentamiseen siitä, mitä poikkeusilmoituksia on suljettu ja mikä on avattavien sisältöalueiden tila.-Paikallinen muisti
Drupal.visitor.autologout_loginavustukset.hel.fiKäytetään käyttäjän automaattiseen uloskirjautumiseen.365 päivää 
' format: full_html label: 'Välttämättömät toiminnalliset evästeet' diff --git a/conf/cmi/language/fi/eu_cookie_compliance.cookie_category.preference.yml b/conf/cmi/language/fi/eu_cookie_compliance.cookie_category.preference.yml index 58bceff4..93f9ff7d 100644 --- a/conf/cmi/language/fi/eu_cookie_compliance.cookie_category.preference.yml +++ b/conf/cmi/language/fi/eu_cookie_compliance.cookie_category.preference.yml @@ -1,4 +1,4 @@ label: Personointi description: - value: '

Mieltymysevästeet mukauttavat sivuston ulkoasua ja toimintaa käyttäjän aiemman käytön perusteella.

NimiTarjoajaTarkoitusVoimassaTyyppi
httpskartta.hel.fi.SWCulturekartta.hel.fiKaupungin karttapalvelun evästeeseen tallennetaan kieli, jolla palvelua käytetään.1826 päivää 
icareus-devicehelsinkikanava.fiHelsinki-kanavan videopalvelimen eväste.365 päivääKolmas osapuoli
VISITOR_INFO1_LIVEyoutube.comYouTuben eväste valitsee yhteyden nopeuden mukaan, joko vanhan tai uuden videosoittimen.180 päivääKolmas osapuoli
CONSENTyoutube.comGooglen eväste tallentaa kävijän evästehyväskynnän.5947 päivää, 15 tuntiaKolmas osapuoli
activeTabhel.fiKäytetään aktiivisten välilehtien tietojen tallentamiseen, kun käyttäjä käyttää lukioiden suodatushakua.Istunto 
activeContenthel.fiKäytetään aktiivisen sisältötietojen tallentamiseen, kun käyttäjä käyttää lukioiden hakua.Istunto 
' + value: '

Mieltymysevästeet mukauttavat sivuston ulkoasua ja toimintaa käyttäjän aiemman käytön perusteella.

NimiTarjoajaTarkoitusVoimassaTyyppi
httpskartta.hel.fi.SWCulturekartta.hel.fiKaupungin karttapalvelun evästeeseen tallennetaan kieli, jolla palvelua käytetään.1826 päivää 
icareus-devicehelsinkikanava.fiHelsinki-kanavan videopalvelimen eväste.365 päivääKolmas osapuoli
VISITOR_INFO1_LIVEyoutube.comYouTuben eväste valitsee yhteyden nopeuden mukaan, joko vanhan tai uuden videosoittimen.180 päivääKolmas osapuoli
CONSENTyoutube.comGooglen eväste tallentaa kävijän evästehyväskynnän.5947 päivää, 15 tuntiaKolmas osapuoli
activeTabwww.hel.fiKäytetään aktiivisten välilehtien tietojen tallentamiseen, kun käyttäjä käyttää lukioiden suodatushakua.Istunto 
activeContentwww.hel.fiKäytetään aktiivisen sisältötietojen tallentamiseen, kun käyttäjä käyttää lukioiden hakua.Istunto 
' format: full_html diff --git a/conf/cmi/language/fi/eu_cookie_compliance.cookie_category.statistics.yml b/conf/cmi/language/fi/eu_cookie_compliance.cookie_category.statistics.yml index 6b5487f5..4d0e745e 100644 --- a/conf/cmi/language/fi/eu_cookie_compliance.cookie_category.statistics.yml +++ b/conf/cmi/language/fi/eu_cookie_compliance.cookie_category.statistics.yml @@ -1,4 +1,4 @@ description: - value: '

Tilastointievästeiden keräämää tietoa käytetään verkkosivuston kehittämiseen.

NimiTarjoajaTarkoitusVoimassaTyyppi
nmstathel.fiSiteimproven tilastointieväste kerää tietoa kävijän sivujen käytöstä.1000 päivää 
_pk_id.*hel.fiMatomo-tilastointijärjestelmän eväste.393 päivää 
_pk_ses.141.89f6hel.fi-1 tunti 
_pk_id.*kartta.hel.fiMatomo-tilastointijärjestelmän eväste.393 päivää 
_pk_ses.*kartta.hel.fiMatomo-tilastointijärjestelmän eväste.1 tunti 
_pk_id.*palvelukartta.hel.fiMatomo-tilastointijärjestelmän eväste.393 päivää 
_pk_ses.*palvelukartta.hel.fiMatomo-tilastointijärjestelmän eväste.1 tunti 
_pk_id.*avustukset.hel.fiMatomo-tilastointijärjestelmän eväste.393 päivää 
_pk_ses.*avustukset.hel.fiMatomo-tilastointijärjestelmän eväste.1 tunti 
rnsbidreactandshare.comAskem-reaktionappien toimintaan liittyvä tietue.-Paikallinen muisti
rnsbid_tsreactandshare.comAskem-reaktionappien toimintaan liittyvä tietue.-Paikallinen muisti
rns_reaction_*reactandshare.comAskem-reaktionappien toimintaan liittyvä tietue.-Paikallinen muisti
YSCyoutube.comYouTuben eväste mahdollistaa videoiden upottamisen sivustolle.IstuntoKolmas osapuoli
' + value: '

Tilastointievästeiden keräämää tietoa käytetään verkkosivuston kehittämiseen.

NimiTarjoajaTarkoitusVoimassaTyyppi
nmstatwww.hel.fiSiteimproven tilastointieväste kerää tietoa kävijän sivujen käytöstä.1000 päivää 
_pk_id.*www.hel.fiMatomo-tilastointijärjestelmän eväste.393 päivää 
_pk_ses.141.89f6www.hel.fi-1 tunti 
_pk_id.*kartta.hel.fiMatomo-tilastointijärjestelmän eväste.393 päivää 
_pk_ses.*kartta.hel.fiMatomo-tilastointijärjestelmän eväste.1 tunti 
_pk_id.*palvelukartta.hel.fiMatomo-tilastointijärjestelmän eväste.393 päivää 
_pk_ses.*palvelukartta.hel.fiMatomo-tilastointijärjestelmän eväste.1 tunti 
_pk_id.*avustukset.hel.fiMatomo-tilastointijärjestelmän eväste.393 päivää 
_pk_ses.*avustukset.hel.fiMatomo-tilastointijärjestelmän eväste.1 tunti 
rnsbidreactandshare.comAskem-reaktionappien toimintaan liittyvä tietue.-Paikallinen muisti
rnsbid_tsreactandshare.comAskem-reaktionappien toimintaan liittyvä tietue.-Paikallinen muisti
rns_reaction_*reactandshare.comAskem-reaktionappien toimintaan liittyvä tietue.-Paikallinen muisti
YSCyoutube.comYouTuben eväste mahdollistaa videoiden upottamisen sivustolle.IstuntoKolmas osapuoli
' format: full_html label: Tilastointi diff --git a/conf/cmi/language/sv/eu_cookie_compliance.cookie_category.chat.yml b/conf/cmi/language/sv/eu_cookie_compliance.cookie_category.chat.yml index d94d887d..6464a1fe 100644 --- a/conf/cmi/language/sv/eu_cookie_compliance.cookie_category.chat.yml +++ b/conf/cmi/language/sv/eu_cookie_compliance.cookie_category.chat.yml @@ -1,4 +1,4 @@ description: - value: '

Chattarna på webbplatsen hel.fi  fungerar med hjälp av funktionella chattkakor. Om du inleder en chatt godkänner du automatiskt de nödvändiga funktionella kakorna.  Då behövs inget separat samtycke till kakor. Funktionella chattkakor laddas endast ner på din enhet om du inleder en chatt.

NamnTjänsteleverantörCookie syfteGiltighetTyp
_genesys.widgets.*hel.fiAnvänds för att lagra data som behövs för chatten.session 
leijuke.*hel.fiAnvänds för att lagra data som behövs för chatten.session 
aiap-wbc-chat-app-button-statehel.fiAnvänds för chattapplikationens funktionalitet. Lagrar inställningar och konfigurationsdata för chattapplikationens knapp.session 
aiap-chat-app-v1-statehel.fiAnvänds för chattapplikationens funktionalitet. Lagrar inställningar och konfigurationsdata för chattapplikationen.session 
conversationTokenhttps://coh-chat-app-prod.ow6i4n9pdzm.eu-de.codeengine.appdomain.cloudAnvänds för chattapplikationens funktionalitet. Lagrar konversationstoken för autentisering och åtkomst till dataändamål.sessionTredje part
' + value: '

Chattarna på webbplatsen www.hel.fi  fungerar med hjälp av funktionella chattkakor. Om du inleder en chatt godkänner du automatiskt de nödvändiga funktionella kakorna.  Då behövs inget separat samtycke till kakor. Funktionella chattkakor laddas endast ner på din enhet om du inleder en chatt.

NamnTjänsteleverantörCookie syfteGiltighetTyp
_genesys.widgets.*www.hel.fiAnvänds för att lagra data som behövs för chatten.session 
leijuke.*www.hel.fiAnvänds för att lagra data som behövs för chatten.session 
aiap-wbc-chat-app-button-statewww.hel.fiAnvänds för chattapplikationens funktionalitet. Lagrar inställningar och konfigurationsdata för chattapplikationens knapp.session 
aiap-chat-app-v1-statewww.hel.fiAnvänds för chattapplikationens funktionalitet. Lagrar inställningar och konfigurationsdata för chattapplikationen.session 
conversationTokenhttps://coh-chat-app-prod.ow6i4n9pdzm.eu-de.codeengine.appdomain.cloudAnvänds för chattapplikationens funktionalitet. Lagrar konversationstoken för autentisering och åtkomst till dataändamål.sessionTredje part
CallGuide.languagewww.hel.fiACE Chat: Språket som används i ACE Web SDK härleds från webbläsarnas föredragna språkinställning och ACE Web SDK-inställningar.-Lokalt minne
CallGuide.config_services_*www.hel.fiACE Chatt: Konfigurera kundtjänstintegrationer på en webbsida. Minskar webbtrafiken när du läser in och navigerar på en sida.-Lokalt minne
*_CGWebSDK_windowGUIDwds.ace.teliacompany.comACE Chatt: Den unika identiteten för det här webbläsarfönstret. Används om webbläsaren har mer än ett öppet fönster för en webbplats.-Lokalt minne
*_CGWebSDK_videoShowerwds.ace.teliacompany.comACE Chatt: Endast ett fönster i taget kan visa video. Den här informationen spårar vilka av dem (om några).-Lokalt minne
*_CGWebSDK_videoClientswds.ace.teliacompany.comACE Chatt: En lista över alla fönster som sannolikt kommer att visa videon.-Lokalt minne
*_ACEChatState_ActiveClientwds.ace.teliacompany.comACE Chatt: En webbplats kan ha mer än en chattklient. Det här objektet spårar vilken kund den aktuella chatten tillhör.-Lokalt minne
*_chatEntrancewds.ace.teliacompany.comACE Chatt: Namnet på chattingången till systemet-Lokalt minne
*_chatUIDwds.ace.teliacompany.comACE Chatt: Chattsessions-ID vid kommunikation med ACE-Lokalt minne
humany-*www.hel.fiACE Chatt: Bevarar widgetstatus när sidan laddas om-Lokalt minne
ARRAffinity.hel.humany.netACE Chatt: Lastbalansering i backend-systemetSessionTredje part
ARRAffinitySameSite.hel.humany.netACE Chatt: Lastbalansering i backend-systemetSessionTredje part
' format: full_html label: 'Funktionella chattkakor' diff --git a/conf/cmi/language/sv/eu_cookie_compliance.cookie_category.essential.yml b/conf/cmi/language/sv/eu_cookie_compliance.cookie_category.essential.yml index 87ac818c..d86d1934 100644 --- a/conf/cmi/language/sv/eu_cookie_compliance.cookie_category.essential.yml +++ b/conf/cmi/language/sv/eu_cookie_compliance.cookie_category.essential.yml @@ -1,4 +1,4 @@ description: - value: '

Nödvändiga cookies hjälper till att göra webbplatsen användbar genom att tillåta grundläggande funktioner som att navigera på sidan och använda de skyddade områdena på webbplatsen. Webbplatsen fungerar inte korrekt utan dessa cookies och kräver inte samtycke.

NamnTjänsteleverantörCookie syfteGiltighetTyp
cookiehubcookiehub.comCookie möjliggör hantering av cookies på hel.fi webbplatsen.365 dagar 
cookie-agreedhel.fiCookie möjliggör hantering av cookies på webbplatsen.100 dagar 
cookie-agreed-versionhel.fiAnvänds för att lagra information om versionen av cookies samtycke som användaren har godkänt.100 dagar 
cookie-agreed-categorieshel.fiAnvänds för att lagra information om vilka cookie -kategorier användaren har godkänt.100 dagar 
cookie-agreedavustukset.hel.fiCookie möjliggör hantering av cookies på webbplatsen.100 dagar 
cookie-agreed-versionavustukset.hel.fiAnvänds för att lagra information om versionen av cookies samtycke som användaren har godkänt.100 dagar 
cookie-agreed-categoriesavustukset.hel.fiAnvänds för att lagra information om vilka cookie -kategorier användaren har godkänt.100 dagar 
SSESS*hel.fiEn cookie relaterad till driften av innehållshanteringssystemet.23 dagar 
SSESS*avustukset.hel.fiEn cookie relaterad till driften av innehållshanteringssystemet.23 dagar 
AWSELBCORSsiteimproveanalytics.ioCookie är kopplad till funktionen för lastfördelning som styr begäran till en server med mindre belastning.sessionTredje part
mtm_cookie_consentkartta.hel.fiA technical cookie that stores information about how you responded to the notice in the cookie banner about the use of cookies.10950 dagar 
JSESSIONID

helsinkikanava.fi

coh-chat-app-prod.eu-de.mybluemix.net

Kakan är en obligatorisk kaka som gör det möjligt för besökaren att besöka webbplatsen.sessionTredje part
JSESSIONIDcoh-chat-app-prod.ow6i4n9pdzm.eu-de.codeengine.appdomain.cloudAnvänds för chattapplikationens funktionalitet. Dess värde används för att få tillgång till sessiondata på applikationens server.sessionTredje part
COOKIE_SUPPORThelsinkikanava.fiKakan möjliggör hanteringen av kakor på webbplatsen.365 dagarTredje part
GUEST_LANGUAGE_IDhelsinkikanava.fiDenna cookie genereras av Liferay, dess funktion är att lagra språkinställningarna.365 dagarTredje part
helfi-settingshel.fiAnvänds av hel.fi Drupal för att lagra information om stängda meddelanden och accordions'' tillstånd.-Lokalt minne
Drupal.visitor.autologout_loginavustukset.hel.fiAnvänds av avustukset.hel.fi Drupal för att automatiskt logga ut användare efter en period av inaktivitet.365 dagar 
' + value: '

Nödvändiga cookies hjälper till att göra webbplatsen användbar genom att tillåta grundläggande funktioner som att navigera på sidan och använda de skyddade områdena på webbplatsen. Webbplatsen fungerar inte korrekt utan dessa cookies och kräver inte samtycke.

NamnTjänsteleverantörCookie syfteGiltighetTyp
cookiehubcookiehub.comCookie möjliggör hantering av cookies på www.hel.fi webbplatsen.365 dagar 
cookie-agreedwww.hel.fiCookie möjliggör hantering av cookies på webbplatsen.100 dagar 
cookie-agreed-versionwww.hel.fiAnvänds för att lagra information om versionen av cookies samtycke som användaren har godkänt.100 dagar 
cookie-agreed-categorieswww.hel.fiAnvänds för att lagra information om vilka cookie -kategorier användaren har godkänt.100 dagar 
cookie-agreedavustukset.hel.fiCookie möjliggör hantering av cookies på webbplatsen.100 dagar 
cookie-agreed-versionavustukset.hel.fiAnvänds för att lagra information om versionen av cookies samtycke som användaren har godkänt.100 dagar 
cookie-agreed-categoriesavustukset.hel.fiAnvänds för att lagra information om vilka cookie -kategorier användaren har godkänt.100 dagar 
SSESS*www.hel.fiEn cookie relaterad till driften av innehållshanteringssystemet.23 dagar 
SSESS*avustukset.hel.fiEn cookie relaterad till driften av innehållshanteringssystemet.23 dagar 
AWSELBCORSsiteimproveanalytics.ioCookie är kopplad till funktionen för lastfördelning som styr begäran till en server med mindre belastning.sessionTredje part
mtm_cookie_consentkartta.hel.fiA technical cookie that stores information about how you responded to the notice in the cookie banner about the use of cookies.10950 dagar 
JSESSIONID

helsinkikanava.fi

coh-chat-app-prod.eu-de.mybluemix.net

Kakan är en obligatorisk kaka som gör det möjligt för besökaren att besöka webbplatsen.sessionTredje part
JSESSIONIDcoh-chat-app-prod.ow6i4n9pdzm.eu-de.codeengine.appdomain.cloudAnvänds för chattapplikationens funktionalitet. Dess värde används för att få tillgång till sessiondata på applikationens server.sessionTredje part
COOKIE_SUPPORThelsinkikanava.fiKakan möjliggör hanteringen av kakor på webbplatsen.365 dagarTredje part
GUEST_LANGUAGE_IDhelsinkikanava.fiDenna cookie genereras av Liferay, dess funktion är att lagra språkinställningarna.365 dagarTredje part
helfi-settingswww.hel.fiAnvänds av www.hel.fi Drupal för att lagra information om stängda meddelanden och accordions'' tillstånd.-Lokalt minne
Drupal.visitor.autologout_loginavustukset.hel.fiAnvänds av avustukset.hel.fi Drupal för att automatiskt logga ut användare efter en period av inaktivitet.365 dagar 
' format: full_html label: 'Nödvändiga funktionella cookies' diff --git a/conf/cmi/language/sv/eu_cookie_compliance.cookie_category.preference.yml b/conf/cmi/language/sv/eu_cookie_compliance.cookie_category.preference.yml index de0ec699..cef60a8e 100644 --- a/conf/cmi/language/sv/eu_cookie_compliance.cookie_category.preference.yml +++ b/conf/cmi/language/sv/eu_cookie_compliance.cookie_category.preference.yml @@ -1,4 +1,4 @@ label: Preferens description: - value: '

Preferenscookies ändrar webbplatsens utseende och funktioner enligt användarens tidigare användning.

NamnTjänsteleverantörCookie syfteGiltighetTyp
httpskartta.hel.fi.SWCulturekartta.hel.fiI kakan på stadens kaktjänst sparas det språk som användaren använder i tjänsten.1826 dagar 
icareus-devicehelsinkikanava.fiHelsinki-kanavas kaka gör det möjligt att göra videor till en del av innehållet på webbplatsen.365 dagarTredje part
VISITOR_INFO1_LIVEyoutube.comYouTubes kaka väljer antingen den nya eller gamla videospelaren enligt förbindelsens hastighet.180 dagarTredje part
CONSENTyoutube.comAnvänds av Google för att lagra inställningar för användarens samtycke.5947 dagar, 15 timmarTredje part
activeTabhel.fiAnvänds för att lagra aktiv flikdata när användaren använder gymnasiesökning.Session 
activeContenthel.fiAnvänds för att lagra aktivt innehållsdata när användaren använder gymnasiesökning.Session 

 

' + value: '

Preferenscookies ändrar webbplatsens utseende och funktioner enligt användarens tidigare användning.

NamnTjänsteleverantörCookie syfteGiltighetTyp
httpskartta.hel.fi.SWCulturekartta.hel.fiI kakan på stadens kaktjänst sparas det språk som användaren använder i tjänsten.1826 dagar 
icareus-devicehelsinkikanava.fiHelsinki-kanavas kaka gör det möjligt att göra videor till en del av innehållet på webbplatsen.365 dagarTredje part
VISITOR_INFO1_LIVEyoutube.comYouTubes kaka väljer antingen den nya eller gamla videospelaren enligt förbindelsens hastighet.180 dagarTredje part
CONSENTyoutube.comAnvänds av Google för att lagra inställningar för användarens samtycke.5947 dagar, 15 timmarTredje part
activeTabwww.hel.fiAnvänds för att lagra aktiv flikdata när användaren använder gymnasiesökning.Session 
activeContentwww.hel.fiAnvänds för att lagra aktivt innehållsdata när användaren använder gymnasiesökning.Session 

 

' format: full_html diff --git a/conf/cmi/language/sv/eu_cookie_compliance.cookie_category.statistics.yml b/conf/cmi/language/sv/eu_cookie_compliance.cookie_category.statistics.yml index a6ad5344..18a542a9 100644 --- a/conf/cmi/language/sv/eu_cookie_compliance.cookie_category.statistics.yml +++ b/conf/cmi/language/sv/eu_cookie_compliance.cookie_category.statistics.yml @@ -1,4 +1,4 @@ description: - value: '

De uppgifter statistikkakorna samlar in används för att utveckla webbplatsen.

NamnTjänsteleverantörCookie syfteGiltighetTyp
nmstathel.fiSiteimproves kaka samlar information om hur webbplatsen används.1000 dagar 
_pk_id.*hel.fiMatomo-statistiksystemets kaka samlar information om hur webbplatsen används.393 dagar 
_pk_ses.141.89f6hel.fi-1 timme 
_pk_id.*kartta.hel.fiMatomo-statistiksystemets kaka samlar information om hur webbplatsen används.393 dagar 
_pk_ses.*kartta.hel.fiMatomo-statistiksystemets kaka samlar information om hur webbplatsen används.1 timme 
_pk_id.*palvelukartta.hel.fiMatomo-statistiksystemets kaka samlar information om hur webbplatsen används.393 dagar 
_pk_ses.*palvelukartta.hel.fiMatomo-statistiksystemets kaka samlar information om hur webbplatsen används.1 timme 
_pk_id.*avustukset.hel.fiMatomo-statistiksystemets kaka samlar information om hur webbplatsen används.393 dagar 
_pk_ses.*avustukset.hel.fiMatomo-statistiksystemets kaka samlar information om hur webbplatsen används.1 timme 
rnsbidreactandshare.com

En post relaterad till driften av reaktionsknappen 

Askem

.

-Lokalt minne
rnsbid_tsreactandshare.com

En post relaterad till driften av reaktionsknappen 

Askem

.

-Lokalt minne
rns_reaction_*reactandshare.com

En post relaterad till driften av reaktionsknappen 

Askem

.

-Lokalt minne
YSCyoutube.comYouTubes kaka gör det möjligt att göra videor till en del av innehållet på webbplatsen.sessionTredje part

 

' + value: '

De uppgifter statistikkakorna samlar in används för att utveckla webbplatsen.

NamnTjänsteleverantörCookie syfteGiltighetTyp
nmstatwww.hel.fiSiteimproves kaka samlar information om hur webbplatsen används.1000 dagar 
_pk_id.*www.hel.fiMatomo-statistiksystemets kaka samlar information om hur webbplatsen används.393 dagar 
_pk_ses.141.89f6www.hel.fi-1 timme 
_pk_id.*kartta.hel.fiMatomo-statistiksystemets kaka samlar information om hur webbplatsen används.393 dagar 
_pk_ses.*kartta.hel.fiMatomo-statistiksystemets kaka samlar information om hur webbplatsen används.1 timme 
_pk_id.*palvelukartta.hel.fiMatomo-statistiksystemets kaka samlar information om hur webbplatsen används.393 dagar 
_pk_ses.*palvelukartta.hel.fiMatomo-statistiksystemets kaka samlar information om hur webbplatsen används.1 timme 
_pk_id.*avustukset.hel.fiMatomo-statistiksystemets kaka samlar information om hur webbplatsen används.393 dagar 
_pk_ses.*avustukset.hel.fiMatomo-statistiksystemets kaka samlar information om hur webbplatsen används.1 timme 
rnsbidreactandshare.com

En post relaterad till driften av reaktionsknappen 

Askem

.

-Lokalt minne
rnsbid_tsreactandshare.com

En post relaterad till driften av reaktionsknappen 

Askem

.

-Lokalt minne
rns_reaction_*reactandshare.com

En post relaterad till driften av reaktionsknappen 

Askem

.

-Lokalt minne
YSCyoutube.comYouTubes kaka gör det möjligt att göra videor till en del av innehållet på webbplatsen.sessionTredje part

 

' format: full_html label: Statistik diff --git a/conf/cmi/views.view.archive.yml b/conf/cmi/views.view.archive.yml index c41e519c..6dd54457 100644 --- a/conf/cmi/views.view.archive.yml +++ b/conf/cmi/views.view.archive.yml @@ -29,6 +29,7 @@ display: type: mini options: offset: 0 + pagination_heading_level: h4 items_per_page: 10 total_pages: 0 id: 0 @@ -43,7 +44,6 @@ display: items_per_page_options_all_label: '- All -' offset: false offset_label: Offset - pagination_heading_level: h4 exposed_form: type: basic options: diff --git a/conf/cmi/views.view.content.yml b/conf/cmi/views.view.content.yml index b050177f..8008221f 100644 --- a/conf/cmi/views.view.content.yml +++ b/conf/cmi/views.view.content.yml @@ -315,13 +315,13 @@ display: pager: type: full options: + pagination_heading_level: h4 items_per_page: 50 tags: next: 'Next ›' previous: '‹ Previous' first: '« First' last: 'Last »' - pagination_heading_level: h4 exposed_form: type: basic options: diff --git a/conf/cmi/views.view.editoria11y_dismissals.yml b/conf/cmi/views.view.editoria11y_dismissals.yml index fb7b97e2..851227d6 100644 --- a/conf/cmi/views.view.editoria11y_dismissals.yml +++ b/conf/cmi/views.view.editoria11y_dismissals.yml @@ -704,6 +704,7 @@ display: type: full options: offset: 0 + pagination_heading_level: h4 items_per_page: 50 total_pages: null id: 0 @@ -721,7 +722,6 @@ display: offset: false offset_label: Offset quantity: 9 - pagination_heading_level: h4 sorts: created: id: created diff --git a/conf/cmi/views.view.editoria11y_results.yml b/conf/cmi/views.view.editoria11y_results.yml index e25d3cea..2e63b7bc 100644 --- a/conf/cmi/views.view.editoria11y_results.yml +++ b/conf/cmi/views.view.editoria11y_results.yml @@ -1072,6 +1072,7 @@ display: type: full options: offset: 0 + pagination_heading_level: h4 items_per_page: 50 total_pages: null id: 0 @@ -1089,7 +1090,6 @@ display: offset: false offset_label: Offset quantity: 9 - pagination_heading_level: h4 sorts: result_name_count: id: result_name_count @@ -1453,6 +1453,7 @@ display: type: full options: offset: 0 + pagination_heading_level: h4 items_per_page: 50 total_pages: null id: 0 @@ -1470,7 +1471,6 @@ display: offset: false offset_label: Offset quantity: 9 - pagination_heading_level: h4 sorts: result_name_count: id: result_name_count @@ -1939,6 +1939,7 @@ display: type: mini options: offset: 0 + pagination_heading_level: h4 items_per_page: 50 total_pages: null id: 0 @@ -1953,7 +1954,6 @@ display: items_per_page_options_all_label: '- All -' offset: false offset_label: Offset - pagination_heading_level: h4 sorts: page_result_count: id: page_result_count @@ -2451,6 +2451,7 @@ display: type: mini options: offset: 0 + pagination_heading_level: h4 items_per_page: 50 total_pages: null id: 0 @@ -2465,7 +2466,6 @@ display: items_per_page_options_all_label: '- All -' offset: false offset_label: Offset - pagination_heading_level: h4 sorts: result_name_count: id: result_name_count @@ -2994,6 +2994,7 @@ display: type: mini options: offset: 0 + pagination_heading_level: h4 items_per_page: 50 total_pages: null id: 0 @@ -3008,7 +3009,6 @@ display: items_per_page_options_all_label: '- All -' offset: false offset_label: Offset - pagination_heading_level: h4 sorts: created: id: created diff --git a/conf/cmi/views.view.files.yml b/conf/cmi/views.view.files.yml index 6eaa88df..ca92d690 100644 --- a/conf/cmi/views.view.files.yml +++ b/conf/cmi/views.view.files.yml @@ -470,6 +470,7 @@ display: type: mini options: offset: 0 + pagination_heading_level: h4 items_per_page: 50 total_pages: 0 id: 0 @@ -484,7 +485,6 @@ display: items_per_page_options_all_label: '- All -' offset: false offset_label: Offset - pagination_heading_level: h4 exposed_form: type: basic options: @@ -1006,6 +1006,7 @@ display: type: mini options: offset: 0 + pagination_heading_level: h4 items_per_page: 10 total_pages: 0 id: 0 @@ -1020,7 +1021,6 @@ display: items_per_page_options_all_label: '- All -' offset: false offset_label: Offset - pagination_heading_level: h4 empty: { } arguments: fid: diff --git a/conf/cmi/views.view.glossary.yml b/conf/cmi/views.view.glossary.yml index 5ac516aa..1207a202 100644 --- a/conf/cmi/views.view.glossary.yml +++ b/conf/cmi/views.view.glossary.yml @@ -196,6 +196,7 @@ display: type: mini options: offset: 0 + pagination_heading_level: h4 items_per_page: 36 total_pages: 0 id: 0 @@ -210,7 +211,6 @@ display: items_per_page_options_all_label: '- All -' offset: false offset_label: Offset - pagination_heading_level: h4 exposed_form: type: basic options: diff --git a/conf/cmi/views.view.job_listing_search.yml b/conf/cmi/views.view.job_listing_search.yml index 0952f568..f64e1bb2 100644 --- a/conf/cmi/views.view.job_listing_search.yml +++ b/conf/cmi/views.view.job_listing_search.yml @@ -91,6 +91,7 @@ display: type: full options: offset: 0 + pagination_heading_level: h4 items_per_page: 40 total_pages: null id: 0 @@ -108,7 +109,6 @@ display: offset: false offset_label: Offset quantity: 9 - pagination_heading_level: h4 exposed_form: type: basic options: diff --git a/conf/cmi/views.view.locked_content.yml b/conf/cmi/views.view.locked_content.yml index 732667fe..da802437 100644 --- a/conf/cmi/views.view.locked_content.yml +++ b/conf/cmi/views.view.locked_content.yml @@ -434,6 +434,7 @@ display: type: full options: offset: 0 + pagination_heading_level: h4 items_per_page: 50 total_pages: null id: 0 @@ -451,7 +452,6 @@ display: offset: false offset_label: Offset quantity: 9 - pagination_heading_level: h4 exposed_form: type: basic options: diff --git a/conf/cmi/views.view.media.yml b/conf/cmi/views.view.media.yml index a1d6fe9f..f21fb580 100644 --- a/conf/cmi/views.view.media.yml +++ b/conf/cmi/views.view.media.yml @@ -522,6 +522,7 @@ display: type: full options: offset: 0 + pagination_heading_level: h4 items_per_page: 50 total_pages: null id: 0 @@ -539,7 +540,6 @@ display: offset: false offset_label: Offset quantity: 9 - pagination_heading_level: h4 exposed_form: type: basic options: diff --git a/conf/cmi/views.view.media_library.yml b/conf/cmi/views.view.media_library.yml index f06ad223..283ab654 100644 --- a/conf/cmi/views.view.media_library.yml +++ b/conf/cmi/views.view.media_library.yml @@ -139,6 +139,7 @@ display: type: mini options: offset: 0 + pagination_heading_level: h4 items_per_page: 24 total_pages: null id: 0 @@ -153,7 +154,6 @@ display: items_per_page_options_all_label: '- All -' offset: false offset_label: Offset - pagination_heading_level: h4 exposed_form: type: basic options: @@ -1078,6 +1078,7 @@ display: type: full options: offset: 0 + pagination_heading_level: h4 items_per_page: 24 total_pages: null id: 0 @@ -1095,7 +1096,6 @@ display: offset: false offset_label: Offset quantity: 9 - pagination_heading_level: h4 access: type: perm options: diff --git a/conf/cmi/views.view.paragraphs_library.yml b/conf/cmi/views.view.paragraphs_library.yml index 7a82ff54..c45cd178 100644 --- a/conf/cmi/views.view.paragraphs_library.yml +++ b/conf/cmi/views.view.paragraphs_library.yml @@ -541,6 +541,7 @@ display: type: mini options: offset: 0 + pagination_heading_level: h4 items_per_page: 50 total_pages: null id: 0 @@ -555,7 +556,6 @@ display: items_per_page_options_all_label: '- All -' offset: false offset_label: Offset - pagination_heading_level: h4 exposed_form: type: basic options: diff --git a/conf/cmi/views.view.paragraphs_selection.yml b/conf/cmi/views.view.paragraphs_selection.yml index b2762a54..630b6a3c 100644 --- a/conf/cmi/views.view.paragraphs_selection.yml +++ b/conf/cmi/views.view.paragraphs_selection.yml @@ -157,6 +157,7 @@ display: type: mini options: offset: 0 + pagination_heading_level: h4 items_per_page: 10 total_pages: null id: 0 @@ -171,7 +172,6 @@ display: items_per_page_options_all_label: '- Kaikki -' offset: false offset_label: Offset - pagination_heading_level: h4 exposed_form: type: basic options: diff --git a/conf/cmi/views.view.redirect.yml b/conf/cmi/views.view.redirect.yml index 6991b774..a4effd86 100644 --- a/conf/cmi/views.view.redirect.yml +++ b/conf/cmi/views.view.redirect.yml @@ -226,6 +226,7 @@ display: type: full options: offset: 0 + pagination_heading_level: h4 items_per_page: 50 total_pages: null id: 0 @@ -243,7 +244,6 @@ display: offset: false offset_label: Offset quantity: 9 - pagination_heading_level: h4 exposed_form: type: basic options: diff --git a/conf/cmi/views.view.scheduler_scheduled_content.yml b/conf/cmi/views.view.scheduler_scheduled_content.yml index 206b27a9..e5ac9892 100644 --- a/conf/cmi/views.view.scheduler_scheduled_content.yml +++ b/conf/cmi/views.view.scheduler_scheduled_content.yml @@ -530,6 +530,7 @@ display: type: full options: offset: 0 + pagination_heading_level: h4 items_per_page: 50 total_pages: null id: 0 @@ -538,7 +539,6 @@ display: previous: '‹ previous' first: '« first' last: 'last »' - pagination_heading_level: h4 exposed_form: type: basic options: diff --git a/conf/cmi/views.view.taxonomy_term.yml b/conf/cmi/views.view.taxonomy_term.yml index 4b6f510d..f9defa05 100644 --- a/conf/cmi/views.view.taxonomy_term.yml +++ b/conf/cmi/views.view.taxonomy_term.yml @@ -29,6 +29,7 @@ display: type: mini options: offset: 0 + pagination_heading_level: h4 items_per_page: 10 total_pages: 0 id: 0 @@ -43,7 +44,6 @@ display: items_per_page_options_all_label: '- All -' offset: false offset_label: Offset - pagination_heading_level: h4 exposed_form: type: basic options: diff --git a/conf/cmi/views.view.user_admin_people.yml b/conf/cmi/views.view.user_admin_people.yml index af7d0179..a6b0f475 100644 --- a/conf/cmi/views.view.user_admin_people.yml +++ b/conf/cmi/views.view.user_admin_people.yml @@ -463,6 +463,7 @@ display: type: full options: offset: 0 + pagination_heading_level: h4 items_per_page: 50 total_pages: 0 id: 0 @@ -480,7 +481,6 @@ display: offset: false offset_label: Offset quantity: 9 - pagination_heading_level: h4 exposed_form: type: basic options: diff --git a/docker/elastic-proxy/nginx.conf b/docker/elastic-proxy/nginx.conf index b3eb4c1d..5d9f2232 100644 --- a/docker/elastic-proxy/nginx.conf +++ b/docker/elastic-proxy/nginx.conf @@ -26,7 +26,7 @@ http { sub { use MIME::Base64; if (exists($ENV{"ELASTIC_USER"}) && exists($ENV{"ELASTIC_PASSWORD"})) { - return encode_base64($ENV{"ELASTIC_USER"} . ":" . $ENV{"ELASTIC_PASSWORD"}); + return encode_base64($ENV{"ELASTIC_USER"} . ":" . $ENV{"ELASTIC_PASSWORD"}, ""); } return ""; } diff --git a/public/sites/default/settings.php b/public/sites/default/settings.php index 38cfb196..2d58da1a 100755 --- a/public/sites/default/settings.php +++ b/public/sites/default/settings.php @@ -388,3 +388,4 @@ function drupal_get_env(string|array $variables) : mixed { if (empty($settings['deployment_identifier'])) { $settings['deployment_identifier'] = filemtime(__DIR__ . '/../../../composer.lock'); } + From f256869c4838fb6ce2170d2fb33094ce0c62b669 Mon Sep 17 00:00:00 2001 From: Tero Elonen Date: Fri, 19 Jul 2024 15:51:46 +0300 Subject: [PATCH 26/37] UHF-9660: Remove manual anchors from readme --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b5ad78c2..bc643c74 100644 --- a/README.md +++ b/README.md @@ -56,12 +56,12 @@ automatically. While you can create a _job listing_ node manually through the us workflow on the site. These listings appear in the `job_search` paragraph and a view called `of_interest`displayed in a block on _job listing_ nodes. The _job listings_ utilize multiple taxonomies to categorize the content. Some job listings include media such as images and videos and there is much processing going into these on the `helfi_rekry_content` -module. Read more about the [Helbit integration](#helbit) that creates these nodes and the [Job search](#job-search) +module. Read more about the [Helbit integration](#helbit-integration) that creates these nodes and the [Job search](#job-search-job_search) feature that displays them below. ### Custom paragraphs -#### Job search (job_search) +#### Job search (job_search) _Job search_ is a paragraph with two modes. The first mode provides a few filters and a submit button that redirects to the node specified in the _Search result page_ field, using the applied filters as parameters. If the @@ -98,7 +98,7 @@ separate media type has perhaps been a way to separate images used for normal co User role for viewing and editing only the job listings on the site. -### Helbit integration +### Helbit integration _Helbit_ is the source from which job listings are migrated to this instance. The `helfi_rekry_content` module handles the migration and data processing. It retrieves job listing information from the API and saves it as job listing nodes @@ -113,9 +113,9 @@ listings are published for indexing. - The migration interval for changed job listings poll is written on this cron configuration [here](https://github.com/City-of-Helsinki/drupal-helfi-rekry/blob/dev/docker/openshift/crons/migrate-changed-job-listings.sh). - The scheduled publishing interval can be checked from this cron configuration [here](https://github.com/City-of-Helsinki/drupal-helfi-rekry/blob/dev/docker/openshift/crons/content-scheduler.sh). -### Hakuvahti +### Hakuvahti -_Hakuvahti_ is feature of the [Job search](#job-search) that allows users to save their job search criteria. Users will +_Hakuvahti_ is feature of the [Job search](#job-search-job_search) that allows users to save their job search criteria. Users will receive automatic email notifications whenever new job listings that match their criteria are posted on the site. Hakuvahti consists of three main components: a Node.js server, `helfi_hakuvahti` custom module and a React part From 3efcb72fd91af2a65654a1ee15e5514b2587b15c Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Thu, 25 Jul 2024 09:17:37 +0300 Subject: [PATCH 27/37] UHF-10341: remove the publication_starts_today from backend and always render date on backend to prevent caching issues --- public/themes/custom/hdbt_subtheme/hdbt_subtheme.theme | 7 ------- .../templates/layout/node--job-listing.html.twig | 8 +------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/public/themes/custom/hdbt_subtheme/hdbt_subtheme.theme b/public/themes/custom/hdbt_subtheme/hdbt_subtheme.theme index f5603805..0ed6801b 100644 --- a/public/themes/custom/hdbt_subtheme/hdbt_subtheme.theme +++ b/public/themes/custom/hdbt_subtheme/hdbt_subtheme.theme @@ -183,13 +183,6 @@ function hdbt_subtheme_preprocess_node(&$variables): void { if ($node->getType() !== 'job_listing') { return; } - // Check if job listing publication starts today. - $variables['publication_starts_today'] = FALSE; - $publication_starts_value = $node->get('field_publication_starts')->value; - - if ($publication_starts_value && date('Y-m-d', strtotime($publication_starts_value)) == date('Y-m-d')) { - $variables['publication_starts_today'] = TRUE; - } if ($task_area_term = $node->get('field_task_area')?->first()?->get('entity')?->getValue()) { $langcode = \Drupal::languageManager()->getCurrentLanguage()->getId(); diff --git a/public/themes/custom/hdbt_subtheme/templates/layout/node--job-listing.html.twig b/public/themes/custom/hdbt_subtheme/templates/layout/node--job-listing.html.twig index 316d6d46..87a70c4c 100644 --- a/public/themes/custom/hdbt_subtheme/templates/layout/node--job-listing.html.twig +++ b/public/themes/custom/hdbt_subtheme/templates/layout/node--job-listing.html.twig @@ -62,8 +62,6 @@ * current user is a logged-in member. * - is_admin: Flag for admin user status. Will be true when the current user * is an administrator. - * - publication_starts_today: Helper variable for displaying 'today' instead - * of the actual timestamp if the job listing is published today. * - task_area_name: Task area name for Rekry search link. * - task_area_rekry_search_url: Rekry search url with task area url query param. * @@ -140,11 +138,7 @@ {% endif %} - {% if publication_starts_today == true %} - {% set publication_starts = 'today'|t %} - {% else %} - {% set publication_starts = content.field_publication_starts %} - {% endif %} + {% set publication_starts = content.field_publication_starts %} {% set metadata = [ { label: 'Application period ends'|t, icon: 'clock', content: content.field_publication_ends }, From daa66cfb3ac0027c71d8644c9661e969fd1d67a1 Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Thu, 25 Jul 2024 12:36:48 +0300 Subject: [PATCH 28/37] UHF-10341: javascript to process the datetime string --- .../src/js/helfi_datetime_comparison.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 public/themes/custom/hdbt_subtheme/src/js/helfi_datetime_comparison.js diff --git a/public/themes/custom/hdbt_subtheme/src/js/helfi_datetime_comparison.js b/public/themes/custom/hdbt_subtheme/src/js/helfi_datetime_comparison.js new file mode 100644 index 00000000..64cc13fc --- /dev/null +++ b/public/themes/custom/hdbt_subtheme/src/js/helfi_datetime_comparison.js @@ -0,0 +1,18 @@ +// Turn datetime into text (for example "today"), used on a job page. +((Drupal) => { + // Look for all time-elements from all metadata-wrappers. + const timeElements = Array.from(document.getElementsByClassName('job-listing__metadata-wrapper')) + ?.map(wrapper => wrapper.getElementsByTagName('time')) + ?.map(timeElementCollection => Array.from(timeElementCollection)) + ?.flat() + if (!timeElements) return; + + const today = new Date(); + Array.from(timeElements).forEach((element) => { + const originalDate = new Date(element.getAttribute('datetime')); + if (originalDate.toDateString() === today.toDateString()) { + const minutes = originalDate.getUTCMinutes() < 10 ? `0${originalDate.getMinutes()}` : originalDate.getMinutes(); + element.innerText = `${Drupal.t('today')} ${originalDate.getHours()}:${minutes}` + } + }); +})(Drupal); From 3726c997b441ab8409ea2d1b19a6546028d81572 Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Thu, 25 Jul 2024 12:37:09 +0300 Subject: [PATCH 29/37] UHF-10341: add the javascript to job_listing pages --- .../custom/hdbt_subtheme/hdbt_subtheme.libraries.yml | 8 ++++++++ public/themes/custom/hdbt_subtheme/hdbt_subtheme.theme | 1 + 2 files changed, 9 insertions(+) diff --git a/public/themes/custom/hdbt_subtheme/hdbt_subtheme.libraries.yml b/public/themes/custom/hdbt_subtheme/hdbt_subtheme.libraries.yml index e9d83df8..5a46e548 100644 --- a/public/themes/custom/hdbt_subtheme/hdbt_subtheme.libraries.yml +++ b/public/themes/custom/hdbt_subtheme/hdbt_subtheme.libraries.yml @@ -11,3 +11,11 @@ siteimprove-analytics: dependencies: - core/drupal - eu_cookie_compliance/eu_cookie_compliance + +# Turn datetime into text, f.ex "today" +datetime_comparison: + version: 1.0 + js: + src/js/helfi_datetime_comparison.js: {attributes: { defer: true }} + dependencies: + - core/drupal diff --git a/public/themes/custom/hdbt_subtheme/hdbt_subtheme.theme b/public/themes/custom/hdbt_subtheme/hdbt_subtheme.theme index 0ed6801b..0ad8440d 100644 --- a/public/themes/custom/hdbt_subtheme/hdbt_subtheme.theme +++ b/public/themes/custom/hdbt_subtheme/hdbt_subtheme.theme @@ -170,6 +170,7 @@ function hdbt_subtheme_preprocess_page(&$variables): void { // (job_listing) content type. if ($entity->getType() === 'job_listing') { $variables['has_sidebar_second'] = TRUE; + $variables["#attached"]["library"][] = 'hdbt_subtheme/datetime_comparison'; } } } From f0afb94c88a318a5073959bfff63067c305504d6 Mon Sep 17 00:00:00 2001 From: rpnykanen Date: Thu, 25 Jul 2024 12:41:57 +0300 Subject: [PATCH 30/37] UHF-10341: added comment to the template --- .../hdbt_subtheme/templates/layout/node--job-listing.html.twig | 1 + 1 file changed, 1 insertion(+) diff --git a/public/themes/custom/hdbt_subtheme/templates/layout/node--job-listing.html.twig b/public/themes/custom/hdbt_subtheme/templates/layout/node--job-listing.html.twig index 87a70c4c..e7f25c09 100644 --- a/public/themes/custom/hdbt_subtheme/templates/layout/node--job-listing.html.twig +++ b/public/themes/custom/hdbt_subtheme/templates/layout/node--job-listing.html.twig @@ -138,6 +138,7 @@ {% endif %} + {# The publication time is altered in custom javascript. #} {% set publication_starts = content.field_publication_starts %} {% set metadata = [ From 0de4539784e315b1d0181a6558d07249ebcdfe93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kalij=C3=A4rvi?= Date: Tue, 30 Jul 2024 14:22:42 +0300 Subject: [PATCH 31/37] Converted double quotes to single quotes. --- public/themes/custom/hdbt_subtheme/hdbt_subtheme.theme | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/public/themes/custom/hdbt_subtheme/hdbt_subtheme.theme b/public/themes/custom/hdbt_subtheme/hdbt_subtheme.theme index 0ad8440d..70766697 100644 --- a/public/themes/custom/hdbt_subtheme/hdbt_subtheme.theme +++ b/public/themes/custom/hdbt_subtheme/hdbt_subtheme.theme @@ -76,7 +76,7 @@ function hdbt_subtheme_preprocess_organization_information_block(array &$variabl $organization_field = $variables['elements']['field_organization_override']['#items']; } else { - $organization_field = $variables["elements"]["field_organization"]["#items"]; + $organization_field = $variables['elements']['field_organization']['#items']; } // Get organization. @@ -86,8 +86,8 @@ function hdbt_subtheme_preprocess_organization_information_block(array &$variabl } // Set organization default image variable. - if (!empty($organization) && !empty($organization->get("field_default_image")->first())) { - $variables['content']['organization_default_image'] = $organization->get("field_default_image")->first()->view([ + if (!empty($organization) && !empty($organization->get('field_default_image')->first())) { + $variables['content']['organization_default_image'] = $organization->get('field_default_image')->first()->view([ 'type' => 'image', 'label' => 'hidden', 'settings' => [ @@ -170,7 +170,7 @@ function hdbt_subtheme_preprocess_page(&$variables): void { // (job_listing) content type. if ($entity->getType() === 'job_listing') { $variables['has_sidebar_second'] = TRUE; - $variables["#attached"]["library"][] = 'hdbt_subtheme/datetime_comparison'; + $variables['#attached']['library'][] = 'hdbt_subtheme/datetime_comparison'; } } } From dd98fac7a5d402092c3291994635bcafbc73d13b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kalij=C3=A4rvi?= Date: Tue, 30 Jul 2024 14:34:36 +0300 Subject: [PATCH 32/37] Minified the helfi_datetime_comparison.js and use the minified version when loading the JS in the library. --- .../hdbt_subtheme/dist/js/helfi_datetime_comparison.min.js | 1 + .../themes/custom/hdbt_subtheme/hdbt_subtheme.libraries.yml | 2 +- public/themes/custom/hdbt_subtheme/package-lock.json | 6 +++--- 3 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 public/themes/custom/hdbt_subtheme/dist/js/helfi_datetime_comparison.min.js diff --git a/public/themes/custom/hdbt_subtheme/dist/js/helfi_datetime_comparison.min.js b/public/themes/custom/hdbt_subtheme/dist/js/helfi_datetime_comparison.min.js new file mode 100644 index 00000000..41f85c93 --- /dev/null +++ b/public/themes/custom/hdbt_subtheme/dist/js/helfi_datetime_comparison.min.js @@ -0,0 +1 @@ +(Drupal=>{const t=Array.from(document.getElementsByClassName("job-listing__metadata-wrapper"))?.map((t=>t.getElementsByTagName("time")))?.map((t=>Array.from(t)))?.flat();if(!t)return;const e=new Date;Array.from(t).forEach((t=>{const a=new Date(t.getAttribute("datetime"));if(a.toDateString()===e.toDateString()){const e=a.getUTCMinutes()<10?`0${a.getMinutes()}`:a.getMinutes();t.innerText=`${Drupal.t("today")} ${a.getHours()}:${e}`}}))})(Drupal); \ No newline at end of file diff --git a/public/themes/custom/hdbt_subtheme/hdbt_subtheme.libraries.yml b/public/themes/custom/hdbt_subtheme/hdbt_subtheme.libraries.yml index 5a46e548..42624f8a 100644 --- a/public/themes/custom/hdbt_subtheme/hdbt_subtheme.libraries.yml +++ b/public/themes/custom/hdbt_subtheme/hdbt_subtheme.libraries.yml @@ -16,6 +16,6 @@ siteimprove-analytics: datetime_comparison: version: 1.0 js: - src/js/helfi_datetime_comparison.js: {attributes: { defer: true }} + dist/js/helfi_datetime_comparison.min.js: {attributes: { defer: true }} dependencies: - core/drupal diff --git a/public/themes/custom/hdbt_subtheme/package-lock.json b/public/themes/custom/hdbt_subtheme/package-lock.json index 6f125351..3087f261 100644 --- a/public/themes/custom/hdbt_subtheme/package-lock.json +++ b/public/themes/custom/hdbt_subtheme/package-lock.json @@ -3343,9 +3343,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001636", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", - "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", + "version": "1.0.30001644", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001644.tgz", + "integrity": "sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==", "funding": [ { "type": "opencollective", From 364fe2afdcd019b363a9ff2b57c6295a87f912dd Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Tue, 6 Aug 2024 05:06:01 +0000 Subject: [PATCH 33/37] Update configuration --- composer.lock | 1153 ++++++++++++++++++++++++----- public/sites/default/settings.php | 6 +- 2 files changed, 962 insertions(+), 197 deletions(-) diff --git a/composer.lock b/composer.lock index f296f927..ce566161 100644 --- a/composer.lock +++ b/composer.lock @@ -183,6 +183,215 @@ }, "time": "2024-06-06T17:36:37+00:00" }, + { + "name": "chillerlan/php-qrcode", + "version": "4.4.1", + "source": { + "type": "git", + "url": "https://github.com/chillerlan/php-qrcode.git", + "reference": "f5e243f3b61a60934780579430a951460f40888d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/f5e243f3b61a60934780579430a951460f40888d", + "reference": "f5e243f3b61a60934780579430a951460f40888d", + "shasum": "" + }, + "require": { + "chillerlan/php-settings-container": "^2.1.4 || ^3.1", + "ext-mbstring": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phan/phan": "^5.4", + "phpmd/phpmd": "^2.15", + "phpunit/phpunit": "^9.6", + "setasign/fpdf": "^1.8.2", + "squizlabs/php_codesniffer": "^3.8" + }, + "suggest": { + "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.", + "setasign/fpdf": "Required to use the QR FPDF output.", + "simple-icons/simple-icons": "SVG icons that you can use to embed as logos in the QR Code" + }, + "type": "library", + "autoload": { + "psr-4": { + "chillerlan\\QRCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kazuhiko Arase", + "homepage": "https://github.com/kazuhikoarase" + }, + { + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" + }, + { + "name": "Contributors", + "homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors" + } + ], + "description": "A QR code generator with a user friendly API. PHP 7.4+", + "homepage": "https://github.com/chillerlan/php-qrcode", + "keywords": [ + "phpqrcode", + "qr", + "qr code", + "qrcode", + "qrcode-generator" + ], + "support": { + "issues": "https://github.com/chillerlan/php-qrcode/issues", + "source": "https://github.com/chillerlan/php-qrcode/tree/4.4.1" + }, + "funding": [ + { + "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4", + "type": "custom" + }, + { + "url": "https://ko-fi.com/codemasher", + "type": "ko_fi" + } + ], + "time": "2024-01-06T16:56:58+00:00" + }, + { + "name": "chillerlan/php-settings-container", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/chillerlan/php-settings-container.git", + "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/95ed3e9676a1d47cab2e3174d19b43f5dbf52681", + "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^8.1" + }, + "require-dev": { + "phpmd/phpmd": "^2.15", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-deprecation-rules": "^1.2", + "phpunit/phpunit": "^10.5", + "squizlabs/php_codesniffer": "^3.10" + }, + "type": "library", + "autoload": { + "psr-4": { + "chillerlan\\Settings\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" + } + ], + "description": "A container class for immutable settings objects. Not a DI container.", + "homepage": "https://github.com/chillerlan/php-settings-container", + "keywords": [ + "Settings", + "configuration", + "container", + "helper" + ], + "support": { + "issues": "https://github.com/chillerlan/php-settings-container/issues", + "source": "https://github.com/chillerlan/php-settings-container" + }, + "funding": [ + { + "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4", + "type": "custom" + }, + { + "url": "https://ko-fi.com/codemasher", + "type": "ko_fi" + } + ], + "time": "2024-07-16T11:13:48+00:00" + }, + { + "name": "christian-riesen/otp", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/ChristianRiesen/otp.git", + "reference": "aab865ae6d356993ad9d51f8a7e8f32b8a54730a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ChristianRiesen/otp/zipball/aab865ae6d356993ad9d51f8a7e8f32b8a54730a", + "reference": "aab865ae6d356993ad9d51f8a7e8f32b8a54730a", + "shasum": "" + }, + "require": { + "paragonie/constant_time_encoding": "^1|^2", + "paragonie/random_compat": ">=1", + "php": ">=5.6.0", + "symfony/polyfill-php56": "^1" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.11 || ^6.0.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Otp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Riesen", + "email": "chris.riesen@gmail.com", + "homepage": "http://christianriesen.com", + "role": "Developer" + } + ], + "description": "One Time Passwords, hotp and totp according to RFC4226 and RFC6238", + "homepage": "https://github.com/ChristianRiesen/otp", + "keywords": [ + "googleauthenticator", + "hotp", + "otp", + "rfc4226", + "rfc6238", + "totp" + ], + "support": { + "issues": "https://github.com/ChristianRiesen/otp/issues", + "source": "https://github.com/ChristianRiesen/otp/tree/2.7.0" + }, + "time": "2021-02-23T20:13:30+00:00" + }, { "name": "commerceguys/addressing", "version": "v1.4.2", @@ -1037,6 +1246,73 @@ }, "time": "2022-12-20T22:53:13+00:00" }, + { + "name": "defuse/php-encryption", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/defuse/php-encryption.git", + "reference": "f53396c2d34225064647a05ca76c1da9d99e5828" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/defuse/php-encryption/zipball/f53396c2d34225064647a05ca76c1da9d99e5828", + "reference": "f53396c2d34225064647a05ca76c1da9d99e5828", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "paragonie/random_compat": ">= 2", + "php": ">=5.6.0" + }, + "require-dev": { + "phpunit/phpunit": "^5|^6|^7|^8|^9|^10", + "yoast/phpunit-polyfills": "^2.0.0" + }, + "bin": [ + "bin/generate-defuse-key" + ], + "type": "library", + "autoload": { + "psr-4": { + "Defuse\\Crypto\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Hornby", + "email": "taylor@defuse.ca", + "homepage": "https://defuse.ca/" + }, + { + "name": "Scott Arciszewski", + "email": "info@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "Secure PHP Encryption Library", + "keywords": [ + "aes", + "authenticated encryption", + "cipher", + "crypto", + "cryptography", + "encrypt", + "encryption", + "openssl", + "security", + "symmetric key cryptography" + ], + "support": { + "issues": "https://github.com/defuse/php-encryption/issues", + "source": "https://github.com/defuse/php-encryption/tree/v2.4.0" + }, + "time": "2023-06-19T06:10:36+00:00" + }, { "name": "dflydev/dot-access-data", "version": "v3.0.3", @@ -1511,20 +1787,20 @@ }, { "name": "drupal/admin_toolbar", - "version": "3.4.2", + "version": "3.5.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/admin_toolbar.git", - "reference": "3.4.2" + "reference": "3.5.0" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/admin_toolbar-3.4.2.zip", - "reference": "3.4.2", - "shasum": "f5a008e5c73f5a11c6c8067c0ea6ebb76aa33854" + "url": "https://ftp.drupal.org/files/projects/admin_toolbar-3.5.0.zip", + "reference": "3.5.0", + "shasum": "099e8d4dc98e1d551b4f9cffdc39599eb8ad04e8" }, "require": { - "drupal/core": "^9.2 || ^10" + "drupal/core": "^9.5 || ^10 || ^11" }, "require-dev": { "drupal/admin_toolbar_tools": "*" @@ -1532,8 +1808,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "3.4.2", - "datestamp": "1696006195", + "version": "3.5.0", + "datestamp": "1722639094", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -1566,6 +1842,10 @@ "homepage": "https://www.drupal.org/u/matio89", "role": "Maintainer" }, + { + "name": "japerry", + "homepage": "https://www.drupal.org/user/45640" + }, { "name": "matio89", "homepage": "https://www.drupal.org/user/2320090" @@ -2829,6 +3109,76 @@ "issues": "https://www.drupal.org/project/issues/elasticsearch_connector" } }, + { + "name": "drupal/encrypt", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/encrypt.git", + "reference": "8.x-3.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/encrypt-8.x-3.1.zip", + "reference": "8.x-3.1", + "shasum": "357ca7fcf9879af66b5d0c5593da080f19664f17" + }, + "require": { + "drupal/core": "^8 || ^9 || ^10", + "drupal/key": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.1", + "datestamp": "1669655248", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10 || ^11" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "alexpott", + "homepage": "https://www.drupal.org/user/157725" + }, + { + "name": "greggles", + "homepage": "https://www.drupal.org/user/36762" + }, + { + "name": "nerdstein", + "homepage": "https://www.drupal.org/user/1557710" + }, + { + "name": "rlhawk", + "homepage": "https://www.drupal.org/user/352283" + }, + { + "name": "theunraveler", + "homepage": "https://www.drupal.org/user/71548" + }, + { + "name": "zzolo", + "homepage": "https://www.drupal.org/user/147331" + } + ], + "description": "Provides an API for two-way encryption.", + "homepage": "https://www.drupal.org/project/encrypt", + "support": { + "source": "https://git.drupalcode.org/project/encrypt" + } + }, { "name": "drupal/entity", "version": "1.4.0", @@ -2994,29 +3344,29 @@ }, { "name": "drupal/entity_reference_revisions", - "version": "1.11.0", + "version": "1.12.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/entity_reference_revisions.git", - "reference": "8.x-1.11" + "reference": "8.x-1.12" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity_reference_revisions-8.x-1.11.zip", - "reference": "8.x-1.11", - "shasum": "de21cbb0d8a0344dc3496addcad4ed536747cec5" + "url": "https://ftp.drupal.org/files/projects/entity_reference_revisions-8.x-1.12.zip", + "reference": "8.x-1.12", + "shasum": "2a2ff8617c7ce01b56df1caaf0a563da04948e26" }, "require": { - "drupal/core": "^9 || ^10" + "drupal/core": "^9 || ^10 || ^11" }, "require-dev": { - "drupal/diff": "1.x-dev" + "drupal/diff": "^1 || ^2" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.11", - "datestamp": "1705140721", + "version": "8.x-1.12", + "datestamp": "1722804497", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3058,20 +3408,20 @@ }, { "name": "drupal/entity_usage", - "version": "2.0.0-beta12", + "version": "2.0.0-beta13", "source": { "type": "git", "url": "https://git.drupalcode.org/project/entity_usage.git", - "reference": "8.x-2.0-beta12" + "reference": "8.x-2.0-beta13" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity_usage-8.x-2.0-beta12.zip", - "reference": "8.x-2.0-beta12", - "shasum": "cdd31e6c413cad6fbdb1bd0aac9ad8a0331eb429" + "url": "https://ftp.drupal.org/files/projects/entity_usage-8.x-2.0-beta13.zip", + "reference": "8.x-2.0-beta13", + "shasum": "3b07a629ed6c94ee23656556b0d1a1c7ba58a77f" }, "require": { - "drupal/core": "^9.1 || ^10" + "drupal/core": "^10.1 || ^11" }, "require-dev": { "drupal/block_field": "~1.0", @@ -3088,8 +3438,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-2.0-beta12", - "datestamp": "1684309054", + "version": "8.x-2.0-beta13", + "datestamp": "1721834455", "security-coverage": { "status": "not-covered", "message": "Beta releases are not covered by Drupal security advisories." @@ -3106,6 +3456,10 @@ "GPL-2.0+" ], "authors": [ + { + "name": "Lullabot", + "homepage": "https://www.drupal.org/user/3815489" + }, { "name": "marcoscano", "homepage": "https://www.drupal.org/user/1288796" @@ -3339,26 +3693,29 @@ }, { "name": "drupal/field_group", - "version": "3.4.0", + "version": "3.6.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/field_group.git", - "reference": "8.x-3.4" + "reference": "8.x-3.6" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/field_group-8.x-3.4.zip", - "reference": "8.x-3.4", - "shasum": "80b937e1a11f8b29c69d853fc4bf798c057c6f94" + "url": "https://ftp.drupal.org/files/projects/field_group-8.x-3.6.zip", + "reference": "8.x-3.6", + "shasum": "427c0a65dc1936e69e60c120776056cfe5b43e86" }, "require": { - "drupal/core": "^9.2 || ^10" + "drupal/core": "^9.2 || ^10 || ^11" + }, + "require-dev": { + "drupal/jquery_ui_accordion": "*" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-3.4", - "datestamp": "1667241979", + "version": "8.x-3.6", + "datestamp": "1722672510", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3888,16 +4245,16 @@ }, { "name": "drupal/helfi_api_base", - "version": "2.7.5", + "version": "2.7.6", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base.git", - "reference": "4165398e51c1657ffffb077d756d49db68b75832" + "reference": "a4bf1a64ccbcd3582e6d63cf2bcbc725146ae465" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-api-base/zipball/4165398e51c1657ffffb077d756d49db68b75832", - "reference": "4165398e51c1657ffffb077d756d49db68b75832", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-api-base/zipball/a4bf1a64ccbcd3582e6d63cf2bcbc725146ae465", + "reference": "a4bf1a64ccbcd3582e6d63cf2bcbc725146ae465", "shasum": "" }, "require": { @@ -3927,10 +4284,10 @@ ], "description": "Helfi - API Base", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/tree/2.7.5", + "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/tree/2.7.6", "issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/issues" }, - "time": "2024-06-25T09:02:27+00:00" + "time": "2024-07-30T06:54:52+00:00" }, { "name": "drupal/helfi_azure_fs", @@ -4093,16 +4450,16 @@ }, { "name": "drupal/helfi_platform_config", - "version": "4.4.5", + "version": "4.4.7", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config.git", - "reference": "b61591dc50af5b9112b3709ec7251f52138d0a40" + "reference": "fe7cd00be9a4df3d849d1ebb13ed7246ea520fde" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/b61591dc50af5b9112b3709ec7251f52138d0a40", - "reference": "b61591dc50af5b9112b3709ec7251f52138d0a40", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/fe7cd00be9a4df3d849d1ebb13ed7246ea520fde", + "reference": "fe7cd00be9a4df3d849d1ebb13ed7246ea520fde", "shasum": "" }, "require": { @@ -4113,8 +4470,8 @@ "drupal/config_ignore": "^3.0", "drupal/config_rewrite": "^1.4", "drupal/content_lock": "^2.2", - "drupal/core": "^10.1.5", - "drupal/core-composer-scaffold": "^10.0", + "drupal/core": "^10", + "drupal/core-composer-scaffold": "^10", "drupal/crop": "^2.1", "drupal/default_content": "^2.0.0-alpha2", "drupal/diff": "^1.0", @@ -4148,6 +4505,7 @@ "drupal/publication_date": "^2.0@beta", "drupal/rdf": "^2.0", "drupal/readonly_field_widget": "^1.0", + "drupal/real_aes": "^2.6", "drupal/redirect": "^1.6", "drupal/role_delegation": "^1.1", "drupal/scheduler": "^1.3", @@ -4157,6 +4515,7 @@ "drupal/siteimprove": "^2.0", "drupal/social_media": "^2.0", "drupal/stomp": "^2.0", + "drupal/tfa": "^1.7", "drupal/token": "^1.9", "drupal/translatable_menu_link_uri": "^2.0", "drupal/view_unpublished": "^1.0", @@ -4172,7 +4531,6 @@ "drupal/ctools": "<3.11 || ^4.0.1", "drupal/gin_toolbar": ">1.0.0-rc6", "drupal/helfi_media_map": "*", - "drupal/simple_sitemap": ">4.1.7", "drush/drush": "<12" }, "type": "drupal-module", @@ -4216,10 +4574,10 @@ ], "description": "HELfi platform config", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.4.5", + "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.4.7", "issues": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/issues" }, - "time": "2024-07-19T11:20:53+00:00" + "time": "2024-08-06T05:03:16+00:00" }, { "name": "drupal/helfi_proxy", @@ -4310,16 +4668,16 @@ }, { "name": "drupal/helfi_tunnistamo", - "version": "3.0.7", + "version": "3.0.8", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-module-helfi-tunnistamo.git", - "reference": "881201f804fd6350c8c4705a677619b25fd49c72" + "reference": "a7e4709c0b6407df0a68df87b113f06a1613d0fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-tunnistamo/zipball/881201f804fd6350c8c4705a677619b25fd49c72", - "reference": "881201f804fd6350c8c4705a677619b25fd49c72", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-tunnistamo/zipball/a7e4709c0b6407df0a68df87b113f06a1613d0fe", + "reference": "a7e4709c0b6407df0a68df87b113f06a1613d0fe", "shasum": "" }, "require": { @@ -4336,10 +4694,10 @@ ], "description": "Tunnistamo integration", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-tunnistamo/tree/3.0.7", + "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-tunnistamo/tree/3.0.8", "issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-tunnistamo/issues" }, - "time": "2024-06-18T07:56:54+00:00" + "time": "2024-08-05T07:39:24+00:00" }, { "name": "drupal/image_style_quality", @@ -4404,26 +4762,26 @@ }, { "name": "drupal/imagecache_external", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://git.drupalcode.org/project/imagecache_external.git", - "reference": "3.0.3" + "reference": "3.0.4" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/imagecache_external-3.0.3.zip", - "reference": "3.0.3", - "shasum": "83f5282a1854cc981fe19cea92f9b2b9d8167dd8" + "url": "https://ftp.drupal.org/files/projects/imagecache_external-3.0.4.zip", + "reference": "3.0.4", + "shasum": "0a6fc7f66f6ab39beb787ae0a5923009911de55d" }, "require": { - "drupal/core": "^9.3 || ^10" + "drupal/core": "^10.1 || ^11" }, "type": "drupal-module", "extra": { "drupal": { - "version": "3.0.3", - "datestamp": "1711900821", + "version": "3.0.4", + "datestamp": "1722719303", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -4686,7 +5044,78 @@ "description": "Provides jQuery UI Draggable library.", "homepage": "https://www.drupal.org/project/jquery_ui_draggable", "support": { - "source": "https://git.drupalcode.org/project/jquery_ui_draggable" + "source": "https://git.drupalcode.org/project/jquery_ui_draggable" + } + }, + { + "name": "drupal/key", + "version": "1.19.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/key.git", + "reference": "8.x-1.19" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/key-8.x-1.19.zip", + "reference": "8.x-1.19", + "shasum": "ee8f7b8f8babd381f1e4423dccede94b4eb5985c" + }, + "require": { + "drupal/core": ">=8.9 <12" + }, + "require-dev": { + "drush/drush": ">=9" + }, + "suggest": { + "drush/drush": ">=11" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.19", + "datestamp": "1720053341", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": ">=9" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Cellar Door", + "homepage": "https://www.drupal.org/user/658076" + }, + { + "name": "crashtest_", + "homepage": "https://www.drupal.org/user/261457" + }, + { + "name": "nerdstein", + "homepage": "https://www.drupal.org/user/1557710" + }, + { + "name": "rlhawk", + "homepage": "https://www.drupal.org/user/352283" + } + ], + "description": "Provides the ability to manage site-wide keys", + "homepage": "http://drupal.org/project/key", + "keywords": [ + "Drupal" + ], + "support": { + "source": "https://git.drupalcode.org/project/key", + "issues": "http://drupal.org/project/key" } }, { @@ -4978,17 +5407,17 @@ }, { "name": "drupal/migrate_plus", - "version": "6.0.3", + "version": "6.0.4", "source": { "type": "git", "url": "https://git.drupalcode.org/project/migrate_plus.git", - "reference": "6.0.3" + "reference": "6.0.4" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/migrate_plus-6.0.3.zip", - "reference": "6.0.3", - "shasum": "08feb88178a45d8354862b03fd7fcf9b47ae14e1" + "url": "https://ftp.drupal.org/files/projects/migrate_plus-6.0.4.zip", + "reference": "6.0.4", + "shasum": "0357c416d2a9fd3f4211dd13c6585ed8072fabe7" }, "require": { "drupal/core": ">=9.1", @@ -5005,8 +5434,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "6.0.3", - "datestamp": "1721333111", + "version": "6.0.4", + "datestamp": "1721745585", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5378,31 +5807,34 @@ }, { "name": "drupal/pathauto", - "version": "1.12.0", + "version": "1.13.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/pathauto.git", - "reference": "8.x-1.12" + "reference": "8.x-1.13" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/pathauto-8.x-1.12.zip", - "reference": "8.x-1.12", - "shasum": "b7b6432e315e38e59a7c6cc117134326c580de4c" + "url": "https://ftp.drupal.org/files/projects/pathauto-8.x-1.13.zip", + "reference": "8.x-1.13", + "shasum": "e64b5a82cf1b8ab48bce400b21ae6fc99c8078fd" }, "require": { - "drupal/core": "^9.3 || ^10", + "drupal/core": "^9.4 || ^10 || ^11", "drupal/ctools": "*", "drupal/token": "*" }, + "require-dev": { + "drupal/forum": "*" + }, "suggest": { "drupal/redirect": "When installed Pathauto will provide a new \"Update Action\" in case your URLs change. This is the recommended update action and is considered the best practice for SEO and usability." }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.12", - "datestamp": "1712319355", + "version": "8.x-1.13", + "datestamp": "1722507672", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5752,6 +6184,60 @@ "source": "https://git.drupalcode.org/project/readonly_field_widget" } }, + { + "name": "drupal/real_aes", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/real_aes.git", + "reference": "8.x-2.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/real_aes-8.x-2.6.zip", + "reference": "8.x-2.6", + "shasum": "c18f40c69beadac60836032a127e53d5c0cd0a57" + }, + "require": { + "defuse/php-encryption": "^2.0", + "drupal/core": "^8 || ^9 || ^10 || ^11", + "drupal/encrypt": "^3.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.6", + "datestamp": "1719066076", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Heine", + "homepage": "https://www.drupal.org/user/17943" + }, + { + "name": "nerdstein", + "homepage": "https://www.drupal.org/user/1557710" + }, + { + "name": "rlhawk", + "homepage": "https://www.drupal.org/user/352283" + } + ], + "description": "Provides an Authenticated AES encryption method for Encrypt through the Defuse PHP Encryption library.", + "homepage": "https://www.drupal.org/project/real_aes", + "support": { + "source": "https://git.drupalcode.org/project/real_aes" + } + }, { "name": "drupal/redirect", "version": "1.9.0", @@ -6123,17 +6609,17 @@ }, { "name": "drupal/simple_sitemap", - "version": "4.1.7", + "version": "4.1.9", "source": { "type": "git", "url": "https://git.drupalcode.org/project/simple_sitemap.git", - "reference": "4.1.7" + "reference": "4.1.9" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/simple_sitemap-4.1.7.zip", - "reference": "4.1.7", - "shasum": "3d55ee386b0ebb81ed4c3461451a9e32a15d93d7" + "url": "https://ftp.drupal.org/files/projects/simple_sitemap-4.1.9.zip", + "reference": "4.1.9", + "shasum": "d86d90408b334cd7470ea631e3be5acca2103377" }, "require": { "drupal/core": "^9.3 || ^10", @@ -6142,8 +6628,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "4.1.7", - "datestamp": "1698936269", + "version": "4.1.9", + "datestamp": "1712441608", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6535,28 +7021,119 @@ "source": "https://git.drupalcode.org/project/stomp" } }, + { + "name": "drupal/tfa", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/tfa.git", + "reference": "8.x-1.7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/tfa-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "a5e70d146da5bc44f97bfe6fbbda61cc8310fa87" + }, + "require": { + "chillerlan/php-qrcode": "^1.0.9 || ^2.0 || ^3.2 || ^4.0", + "christian-riesen/otp": "^2.1", + "drupal/core": "^8 || ^9 || ^10", + "drupal/encrypt": "~3.0", + "php": ">=7.0" + }, + "require-dev": { + "drupal/encrypt": "*", + "drupal/key": "*", + "drupal/services": "^4 || ^5", + "drush/drush": "^10 || ^11 || ^12", + "mglaman/phpstan-drupal": "^1.1", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.1", + "phpstan/phpstan-phpunit": "^1.3" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.7", + "datestamp": "1713484490", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10 || ^11" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "cmlara", + "homepage": "https://www.drupal.org/user/1790054" + }, + { + "name": "coltrane", + "homepage": "https://www.drupal.org/user/91990" + }, + { + "name": "daggerhart", + "homepage": "https://www.drupal.org/user/167806" + }, + { + "name": "greggles", + "homepage": "https://www.drupal.org/user/36762" + }, + { + "name": "jcnventura", + "homepage": "https://www.drupal.org/user/122464" + }, + { + "name": "nerdstein", + "homepage": "https://www.drupal.org/user/1557710" + }, + { + "name": "poker10", + "homepage": "https://www.drupal.org/user/272316" + } + ], + "description": "Pluggable provider of two factor authentication for Drupal", + "homepage": "https://www.drupal.org/project/tfa", + "support": { + "source": "https://git.drupalcode.org/project/tfa" + } + }, { "name": "drupal/token", - "version": "1.14.0", + "version": "1.15.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/token.git", - "reference": "8.x-1.14" + "reference": "8.x-1.15" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/token-8.x-1.14.zip", - "reference": "8.x-1.14", - "shasum": "df3cae709fcc1a99ac1111ce67a0d6af56d287d7" + "url": "https://ftp.drupal.org/files/projects/token-8.x-1.15.zip", + "reference": "8.x-1.15", + "shasum": "5916fbccc86458a5f51e71f832ac70ff4c84ebdf" }, "require": { - "drupal/core": "^9.2 || ^10" + "drupal/core": "^9.2 || ^10 || ^11" + }, + "require-dev": { + "drupal/book": "*" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.14", - "datestamp": "1713009399", + "version": "8.x-1.15", + "datestamp": "1722206211", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6654,24 +7231,23 @@ }, { "name": "drupal/twig_tweak", - "version": "3.3.0", + "version": "3.4.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/twig_tweak.git", - "reference": "3.3.0" + "reference": "3.4.0" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/twig_tweak-3.3.0.zip", - "reference": "3.3.0", - "shasum": "a029ab1775b62f08e573e5ad1ab27bc833e7f5b9" + "url": "https://ftp.drupal.org/files/projects/twig_tweak-3.4.0.zip", + "reference": "3.4.0", + "shasum": "1f47f71b4cfbad97fff11db1adc72c311bb1645e" }, "require": { - "drupal/core": "^9.3 || ^10.0", + "drupal/core": "^10.3 || ^11.0", "ext-json": "*", - "php": ">=7.3", - "symfony/polyfill-php80": "^1.17", - "twig/twig": "^2.15.3 || ^3.4.3" + "php": ">=8.1", + "twig/twig": "^3.10.3" }, "suggest": { "symfony/var-dumper": "Better dump() function for debugging Twig variables" @@ -6679,8 +7255,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "3.3.0", - "datestamp": "1708670116", + "version": "3.4.0", + "datestamp": "1721562308", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6688,7 +7264,7 @@ }, "drush": { "services": { - "drush.services.yml": "^9 || ^10 || ^11" + "drush.services.yml": "^10 || ^11" } } }, @@ -7025,16 +7601,16 @@ }, { "name": "drush/drush", - "version": "12.5.2", + "version": "12.5.3", "source": { "type": "git", "url": "https://github.com/drush-ops/drush.git", - "reference": "4aebed85dc818ff762f2e24a85b023d2a52050df" + "reference": "7fe0a492d5126c457c5fb184c4668a132b0aaac6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drush-ops/drush/zipball/4aebed85dc818ff762f2e24a85b023d2a52050df", - "reference": "4aebed85dc818ff762f2e24a85b023d2a52050df", + "url": "https://api.github.com/repos/drush-ops/drush/zipball/7fe0a492d5126c457c5fb184c4668a132b0aaac6", + "reference": "7fe0a492d5126c457c5fb184c4668a132b0aaac6", "shasum": "" }, "require": { @@ -7157,7 +7733,7 @@ "issues": "https://github.com/drush-ops/drush/issues", "security": "https://github.com/drush-ops/drush/security/advisories", "slack": "https://drupal.slack.com/messages/C62H9CWQM", - "source": "https://github.com/drush-ops/drush/tree/12.5.2" + "source": "https://github.com/drush-ops/drush/tree/12.5.3" }, "funding": [ { @@ -7165,7 +7741,7 @@ "type": "github" } ], - "time": "2024-05-02T17:20:48+00:00" + "time": "2024-08-02T11:57:29+00:00" }, { "name": "easyrdf/easyrdf", @@ -7892,16 +8468,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.9.0", + "version": "7.9.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "84ac2b2afc44e40d3e8e658a45d68d6d20437612" + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/84ac2b2afc44e40d3e8e658a45d68d6d20437612", - "reference": "84ac2b2afc44e40d3e8e658a45d68d6d20437612", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", "shasum": "" }, "require": { @@ -7998,7 +8574,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.0" + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" }, "funding": [ { @@ -8014,7 +8590,7 @@ "type": "tidelift" } ], - "time": "2024-07-18T11:52:56+00:00" + "time": "2024-07-24T11:22:20+00:00" }, { "name": "guzzlehttp/promises", @@ -8849,16 +9425,16 @@ }, { "name": "mck89/peast", - "version": "v1.16.2", + "version": "v1.16.3", "source": { "type": "git", "url": "https://github.com/mck89/peast.git", - "reference": "2791b08ffcc1862fe18eef85675da3aa58c406fe" + "reference": "645ec21b650bc2aced18285c85f220d22afc1430" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mck89/peast/zipball/2791b08ffcc1862fe18eef85675da3aa58c406fe", - "reference": "2791b08ffcc1862fe18eef85675da3aa58c406fe", + "url": "https://api.github.com/repos/mck89/peast/zipball/645ec21b650bc2aced18285c85f220d22afc1430", + "reference": "645ec21b650bc2aced18285c85f220d22afc1430", "shasum": "" }, "require": { @@ -8871,7 +9447,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.16.2-dev" + "dev-master": "1.16.3-dev" } }, "autoload": { @@ -8892,9 +9468,9 @@ "description": "Peast is PHP library that generates AST for JavaScript code", "support": { "issues": "https://github.com/mck89/peast/issues", - "source": "https://github.com/mck89/peast/tree/v1.16.2" + "source": "https://github.com/mck89/peast/tree/v1.16.3" }, - "time": "2024-03-05T09:16:03+00:00" + "time": "2024-07-23T14:00:32+00:00" }, { "name": "microsoft/azure-storage-blob", @@ -9309,6 +9885,123 @@ ], "time": "2021-11-18T09:23:29+00:00" }, + { + "name": "paragonie/constant_time_encoding", + "version": "v2.7.0", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105", + "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105", + "shasum": "" + }, + "require": { + "php": "^7|^8" + }, + "require-dev": { + "phpunit/phpunit": "^6|^7|^8|^9", + "vimeo/psalm": "^1|^2|^3|^4" + }, + "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" + } + ], + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" + }, + "time": "2024-05-08T12:18:48+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.100", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "shasum": "" + }, + "require": { + "php": ">= 7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T08:29:30+00:00" + }, { "name": "pear/archive_tar", "version": "1.5.0", @@ -10656,16 +11349,16 @@ }, { "name": "symfony/console", - "version": "v6.4.9", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "6edb5363ec0c78ad4d48c5128ebf4d083d89d3a9" + "reference": "504974cbe43d05f83b201d6498c206f16fc0cdbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/6edb5363ec0c78ad4d48c5128ebf4d083d89d3a9", - "reference": "6edb5363ec0c78ad4d48c5128ebf4d083d89d3a9", + "url": "https://api.github.com/repos/symfony/console/zipball/504974cbe43d05f83b201d6498c206f16fc0cdbc", + "reference": "504974cbe43d05f83b201d6498c206f16fc0cdbc", "shasum": "" }, "require": { @@ -10730,7 +11423,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.9" + "source": "https://github.com/symfony/console/tree/v6.4.10" }, "funding": [ { @@ -10746,20 +11439,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:49:33+00:00" + "time": "2024-07-26T12:30:32+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.9", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "a4df9dfe5da2d177af6643610c7bee2cb76a9f5e" + "reference": "5caf9c5f6085f13b27d70a236b776c07e4a1c3eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/a4df9dfe5da2d177af6643610c7bee2cb76a9f5e", - "reference": "a4df9dfe5da2d177af6643610c7bee2cb76a9f5e", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/5caf9c5f6085f13b27d70a236b776c07e4a1c3eb", + "reference": "5caf9c5f6085f13b27d70a236b776c07e4a1c3eb", "shasum": "" }, "require": { @@ -10811,7 +11504,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.4.9" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.10" }, "funding": [ { @@ -10827,7 +11520,7 @@ "type": "tidelift" } ], - "time": "2024-06-19T10:45:28+00:00" + "time": "2024-07-26T07:32:07+00:00" }, { "name": "symfony/deprecation-contracts", @@ -10898,16 +11591,16 @@ }, { "name": "symfony/error-handler", - "version": "v6.4.9", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c9b7cc075b3ab484239855622ca05cb0b99c13ec" + "reference": "231f1b2ee80f72daa1972f7340297d67439224f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c9b7cc075b3ab484239855622ca05cb0b99c13ec", - "reference": "c9b7cc075b3ab484239855622ca05cb0b99c13ec", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/231f1b2ee80f72daa1972f7340297d67439224f0", + "reference": "231f1b2ee80f72daa1972f7340297d67439224f0", "shasum": "" }, "require": { @@ -10953,7 +11646,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.9" + "source": "https://github.com/symfony/error-handler/tree/v6.4.10" }, "funding": [ { @@ -10969,7 +11662,7 @@ "type": "tidelift" } ], - "time": "2024-06-21T16:04:15+00:00" + "time": "2024-07-26T12:30:32+00:00" }, { "name": "symfony/event-dispatcher", @@ -11195,16 +11888,16 @@ }, { "name": "symfony/finder", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "3ef977a43883215d560a2cecb82ec8e62131471c" + "reference": "af29198d87112bebdd397bd7735fbd115997824c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/3ef977a43883215d560a2cecb82ec8e62131471c", - "reference": "3ef977a43883215d560a2cecb82ec8e62131471c", + "url": "https://api.github.com/repos/symfony/finder/zipball/af29198d87112bebdd397bd7735fbd115997824c", + "reference": "af29198d87112bebdd397bd7735fbd115997824c", "shasum": "" }, "require": { @@ -11239,7 +11932,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.8" + "source": "https://github.com/symfony/finder/tree/v6.4.10" }, "funding": [ { @@ -11255,20 +11948,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-24T07:06:38+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "27de8cc95e11db7a50b027e71caaab9024545947" + "reference": "117f1f20a7ade7bcea28b861fb79160a21a1e37b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/27de8cc95e11db7a50b027e71caaab9024545947", - "reference": "27de8cc95e11db7a50b027e71caaab9024545947", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/117f1f20a7ade7bcea28b861fb79160a21a1e37b", + "reference": "117f1f20a7ade7bcea28b861fb79160a21a1e37b", "shasum": "" }, "require": { @@ -11316,7 +12009,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.8" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.10" }, "funding": [ { @@ -11332,20 +12025,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T12:36:27+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.9", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "cc4a9bec6e1bdd2405f40277a68a6ed1bb393005" + "reference": "147e0daf618d7575b5007055340d09aece5cf068" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/cc4a9bec6e1bdd2405f40277a68a6ed1bb393005", - "reference": "cc4a9bec6e1bdd2405f40277a68a6ed1bb393005", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/147e0daf618d7575b5007055340d09aece5cf068", + "reference": "147e0daf618d7575b5007055340d09aece5cf068", "shasum": "" }, "require": { @@ -11430,7 +12123,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.9" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.10" }, "funding": [ { @@ -11446,7 +12139,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T11:48:06+00:00" + "time": "2024-07-26T14:52:04+00:00" }, { "name": "symfony/mailer", @@ -12162,6 +12855,74 @@ ], "time": "2024-06-19T12:30:46+00:00" }, + { + "name": "symfony/polyfill-php56", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", + "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "metapackage", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php56/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" + }, { "name": "symfony/polyfill-php72", "version": "v1.30.0", @@ -12606,16 +13367,16 @@ }, { "name": "symfony/psr-http-message-bridge", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "23a162bd446b93948a2c2f6909d80ad06195be10" + "reference": "89a24648d73e4eee30893b0da16abc454a65c53b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/23a162bd446b93948a2c2f6909d80ad06195be10", - "reference": "23a162bd446b93948a2c2f6909d80ad06195be10", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/89a24648d73e4eee30893b0da16abc454a65c53b", + "reference": "89a24648d73e4eee30893b0da16abc454a65c53b", "shasum": "" }, "require": { @@ -12669,7 +13430,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v6.4.8" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v6.4.10" }, "funding": [ { @@ -12685,20 +13446,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:51:39+00:00" + "time": "2024-07-15T09:36:38+00:00" }, { "name": "symfony/routing", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58" + "reference": "aad19fe10753ba842f0d653a8db819c4b3affa87" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58", - "reference": "8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58", + "url": "https://api.github.com/repos/symfony/routing/zipball/aad19fe10753ba842f0d653a8db819c4b3affa87", + "reference": "aad19fe10753ba842f0d653a8db819c4b3affa87", "shasum": "" }, "require": { @@ -12752,7 +13513,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.8" + "source": "https://github.com/symfony/routing/tree/v6.4.10" }, "funding": [ { @@ -12768,20 +13529,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-15T09:26:24+00:00" }, { "name": "symfony/serializer", - "version": "v6.4.9", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "56ce31d19127e79647ac53387c7555bdcd5730ce" + "reference": "9a67fcf320561e96f94d62bbe0e169ac534a5718" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/56ce31d19127e79647ac53387c7555bdcd5730ce", - "reference": "56ce31d19127e79647ac53387c7555bdcd5730ce", + "url": "https://api.github.com/repos/symfony/serializer/zipball/9a67fcf320561e96f94d62bbe0e169ac534a5718", + "reference": "9a67fcf320561e96f94d62bbe0e169ac534a5718", "shasum": "" }, "require": { @@ -12850,7 +13611,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.4.9" + "source": "https://github.com/symfony/serializer/tree/v6.4.10" }, "funding": [ { @@ -12866,7 +13627,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T07:59:05+00:00" + "time": "2024-07-26T13:13:26+00:00" }, { "name": "symfony/service-contracts", @@ -12953,16 +13714,16 @@ }, { "name": "symfony/string", - "version": "v6.4.9", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "76792dbd99690a5ebef8050d9206c60c59e681d7" + "reference": "ccf9b30251719567bfd46494138327522b9a9446" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/76792dbd99690a5ebef8050d9206c60c59e681d7", - "reference": "76792dbd99690a5ebef8050d9206c60c59e681d7", + "url": "https://api.github.com/repos/symfony/string/zipball/ccf9b30251719567bfd46494138327522b9a9446", + "reference": "ccf9b30251719567bfd46494138327522b9a9446", "shasum": "" }, "require": { @@ -13019,7 +13780,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.9" + "source": "https://github.com/symfony/string/tree/v6.4.10" }, "funding": [ { @@ -13035,7 +13796,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:25:38+00:00" + "time": "2024-07-22T10:21:14+00:00" }, { "name": "symfony/translation-contracts", @@ -13117,16 +13878,16 @@ }, { "name": "symfony/validator", - "version": "v6.4.9", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "ee0a4d6a327a963aee094f730da238f7ea18cb01" + "reference": "bcf939a9d1acd7d2912e9474c0c3d7840a03cbcd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/ee0a4d6a327a963aee094f730da238f7ea18cb01", - "reference": "ee0a4d6a327a963aee094f730da238f7ea18cb01", + "url": "https://api.github.com/repos/symfony/validator/zipball/bcf939a9d1acd7d2912e9474c0c3d7840a03cbcd", + "reference": "bcf939a9d1acd7d2912e9474c0c3d7840a03cbcd", "shasum": "" }, "require": { @@ -13194,7 +13955,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.9" + "source": "https://github.com/symfony/validator/tree/v6.4.10" }, "funding": [ { @@ -13210,20 +13971,20 @@ "type": "tidelift" } ], - "time": "2024-06-22T07:42:41+00:00" + "time": "2024-07-26T12:30:32+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.9", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "c31566e4ca944271cc8d8ac6887cbf31b8c6a172" + "reference": "a71cc3374f5fb9759da1961d28c452373b343dd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c31566e4ca944271cc8d8ac6887cbf31b8c6a172", - "reference": "c31566e4ca944271cc8d8ac6887cbf31b8c6a172", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a71cc3374f5fb9759da1961d28c452373b343dd4", + "reference": "a71cc3374f5fb9759da1961d28c452373b343dd4", "shasum": "" }, "require": { @@ -13279,7 +14040,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.9" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.10" }, "funding": [ { @@ -13295,7 +14056,7 @@ "type": "tidelift" } ], - "time": "2024-06-27T13:23:14+00:00" + "time": "2024-07-26T12:30:32+00:00" }, { "name": "symfony/var-exporter", diff --git a/public/sites/default/settings.php b/public/sites/default/settings.php index 2d58da1a..9e6f7a6b 100755 --- a/public/sites/default/settings.php +++ b/public/sites/default/settings.php @@ -334,6 +334,11 @@ function drupal_get_env(string|array $variables) : mixed { $settings['is_azure'] = FALSE; +if ($tfa_key = getenv('TFA_ENCRYPTION_KEY')) { + $config['key.key.tfa']['key_provider_settings']['key_value'] = $tfa_key; + $config['key.key.tfa']['key_provider_settings']['base64_encoded'] = TRUE; +} + /** * Deployment preflight checks. * @@ -388,4 +393,3 @@ function drupal_get_env(string|array $variables) : mixed { if (empty($settings['deployment_identifier'])) { $settings['deployment_identifier'] = filemtime(__DIR__ . '/../../../composer.lock'); } - From b2f73a89e4bf363ddd1da7fde84cf4977bd4f481 Mon Sep 17 00:00:00 2001 From: Santeri Hurnanen Date: Mon, 12 Aug 2024 09:02:34 +0300 Subject: [PATCH 34/37] UHF-10354: Test new cron entrypoint --- docker/openshift/Dockerfile | 2 ++ docker/openshift/cron-entrypoint.sh | 42 +++++++++++++++++++++++++ docker/openshift/crons/cron.sh | 9 ++++++ docker/openshift/crons/linked-events.sh | 6 ++++ docker/openshift/crons/migrate-tpr.sh | 6 ++++ docker/openshift/crons/pubsub.sh | 13 +++----- docker/openshift/init.sh | 8 +++++ 7 files changed, 77 insertions(+), 9 deletions(-) create mode 100644 docker/openshift/cron-entrypoint.sh create mode 100644 docker/openshift/crons/cron.sh diff --git a/docker/openshift/Dockerfile b/docker/openshift/Dockerfile index 3d009e9b..63e2a158 100644 --- a/docker/openshift/Dockerfile +++ b/docker/openshift/Dockerfile @@ -10,6 +10,8 @@ COPY docker/openshift/entrypoints/ /entrypoints RUN chmod +x /entrypoints/* COPY docker/openshift/init.sh / +COPY docker/openshift/cron-entrypoint.sh /usr/local/bin/cron-entrypoint +RUN chmod +x /usr/local/bin/cron-entrypoint # Copy cron scripts RUN mkdir /crons diff --git a/docker/openshift/cron-entrypoint.sh b/docker/openshift/cron-entrypoint.sh new file mode 100644 index 00000000..a7e71ff2 --- /dev/null +++ b/docker/openshift/cron-entrypoint.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +source /init.sh + +echo "Starting cron: $(date)" + +# You can add any additional cron "daemons" to docker/openshift/crons/ folder. +# +# Example: +# @code +# #!/bin/bash +# while true +# do +# drush some-command +# sleep 600 +# done +# @endcode + +for cron in /crons/*.sh; do + # Skip legacy base.sh script if it exists. + # Skip Kubernetes hooks that are stored in crons directory. + if [[ "${cron##*/}" == "base.sh" ]] || [[ "${cron##*/}" == *-hook.sh ]]; then + continue + elif [[ -r "$cron" ]]; then + echo "Starting $cron" + exec "$cron" & + fi +done + +while true +do + # Rudimentary process supervisor: + # Waits for the next process to terminate. The parent + # process is killed if any subprocess exists with failure. + # OpenShift should then restart the cron pod. + wait -n + exit_code=$? + if [[ "$exit_code" -ne 0 ]]; then + output_error_message "Subprocess failed with exit code $exit_code" + exit 1 + fi +done diff --git a/docker/openshift/crons/cron.sh b/docker/openshift/crons/cron.sh new file mode 100644 index 00000000..3af5b6ea --- /dev/null +++ b/docker/openshift/crons/cron.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +while true +do + echo "Running cron: $(date +'%Y-%m-%dT%H:%M:%S%:z')\n" + drush cron + # Sleep for 10 minutes. + sleep 600 +done diff --git a/docker/openshift/crons/linked-events.sh b/docker/openshift/crons/linked-events.sh index 4eecbdfb..a698f10a 100644 --- a/docker/openshift/crons/linked-events.sh +++ b/docker/openshift/crons/linked-events.sh @@ -1,5 +1,11 @@ #!/bin/bash +source /init.sh + +if ! is_drupal_module_enabled "helfi_react_search"; then + exit 0 +fi + while true do # Allow migrations to be run every 3 hours and reset stuck migrations every 12 hours. diff --git a/docker/openshift/crons/migrate-tpr.sh b/docker/openshift/crons/migrate-tpr.sh index 780bcbbf..637d1434 100644 --- a/docker/openshift/crons/migrate-tpr.sh +++ b/docker/openshift/crons/migrate-tpr.sh @@ -1,5 +1,11 @@ #!/bin/bash +source /init.sh + +if ! is_drupal_module_enabled "helfi_tpr"; then + exit 0 +fi + while true do # Allow migrations to be run every 3 hours and reset stuck migrations every 12 hours. diff --git a/docker/openshift/crons/pubsub.sh b/docker/openshift/crons/pubsub.sh index d5d0fc16..be359b9f 100644 --- a/docker/openshift/crons/pubsub.sh +++ b/docker/openshift/crons/pubsub.sh @@ -2,14 +2,9 @@ echo "Running PubSub daemon: $(date +'%Y-%m-%dT%H:%M:%S%:z')" -i=0 -# Attempt to start this service five times. -until [ $i -gt 5 ] +while true do - drush helfi:azure:pubsub-listen - - if [[ "$?" -ne 0 ]]; then - ((i=i+1)) - sleep 10 - fi + # PubSub process exists with success return code after + # certain number of messages and should then be restarted. + drush helfi:azure:pubsub-listen || exit 1 done diff --git a/docker/openshift/init.sh b/docker/openshift/init.sh index 8bef1380..22ccb583 100644 --- a/docker/openshift/init.sh +++ b/docker/openshift/init.sh @@ -30,6 +30,14 @@ function deployment_in_progress { return 1 } +function is_drupal_module_enabled { + if drush pm-list --status=Enabled --filter=${1} --format=json | jq --exit-status '. == []' > /dev/null; then + return 1 + fi + + return 0 +} + if [ ! -d "sites/default/files" ]; then output_error_message "Container start error: Public file folder does not exist. Exiting early." exit 1 From 02388f77147099ab7c21c31985fd2c669d7bc75c Mon Sep 17 00:00:00 2001 From: Santeri Hurnanen Date: Mon, 12 Aug 2024 09:20:32 +0300 Subject: [PATCH 35/37] UHF-10354: Fix sonarcloud --- docker/openshift/Dockerfile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docker/openshift/Dockerfile b/docker/openshift/Dockerfile index 63e2a158..0e4540ed 100644 --- a/docker/openshift/Dockerfile +++ b/docker/openshift/Dockerfile @@ -10,13 +10,12 @@ COPY docker/openshift/entrypoints/ /entrypoints RUN chmod +x /entrypoints/* COPY docker/openshift/init.sh / -COPY docker/openshift/cron-entrypoint.sh /usr/local/bin/cron-entrypoint -RUN chmod +x /usr/local/bin/cron-entrypoint # Copy cron scripts RUN mkdir /crons COPY docker/openshift/crons/ /crons -RUN chmod +x /crons/* +COPY docker/openshift/cron-entrypoint.sh /usr/local/bin/cron-entrypoint +RUN chmod +x /usr/local/bin/cron-entrypoint /crons/* # Copy nginx overrides. COPY docker/openshift/custom.locations /etc/nginx/conf.d/custom.locations From ee73b6241df0643745e1d70cb313eda69cef5ac9 Mon Sep 17 00:00:00 2001 From: tuutti Date: Mon, 12 Aug 2024 10:27:35 +0300 Subject: [PATCH 36/37] UHF-10409: TFA settings --- conf/cmi/core.extension.yml | 5 +++ conf/cmi/encrypt.profile.real_aes.yml | 15 +++++++ conf/cmi/encrypt.settings.yml | 4 ++ conf/cmi/hdbt_admin_tools.site_settings.yml | 2 +- conf/cmi/key.key.tfa.yml | 19 ++++++++ conf/cmi/tfa.settings.yml | 48 +++++++++++++++++++++ conf/cmi/user.role.admin.yml | 4 +- conf/cmi/user.role.authenticated.yml | 3 ++ conf/cmi/user.role.content_producer.yml | 3 ++ conf/cmi/user.role.editor.yml | 3 ++ conf/cmi/user.role.hr.yml | 3 ++ conf/cmi/user.role.read_only.yml | 8 ++++ 12 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 conf/cmi/encrypt.profile.real_aes.yml create mode 100644 conf/cmi/encrypt.settings.yml create mode 100644 conf/cmi/key.key.tfa.yml create mode 100644 conf/cmi/tfa.settings.yml diff --git a/conf/cmi/core.extension.yml b/conf/cmi/core.extension.yml index 1fd15d89..5cf1c941 100644 --- a/conf/cmi/core.extension.yml +++ b/conf/cmi/core.extension.yml @@ -24,6 +24,7 @@ module: editor: 0 editoria11y: 0 elasticsearch_connector: 0 + encrypt: 0 entity: 0 entity_reference_revisions: 0 entity_usage: 0 @@ -78,6 +79,7 @@ module: helfi_proxy: 0 helfi_react_search: 0 helfi_rekry_content: 0 + helfi_tfa: 0 helfi_toc: 0 helfi_tunnistamo: 0 helfi_user_roles: 0 @@ -88,6 +90,7 @@ module: imagemagick: 0 jquery_ui: 0 jquery_ui_draggable: 0 + key: 0 language: 0 link: 0 linkit: 0 @@ -122,6 +125,7 @@ module: purge_tokens: 0 raven: 0 readonly_field_widget: 0 + real_aes: 0 redirect: 0 redis: 0 responsive_image: 0 @@ -139,6 +143,7 @@ module: taxonomy: 0 telephone: 0 text: 0 + tfa: 0 token: 0 toolbar: 0 translatable_menu_link_uri: 0 diff --git a/conf/cmi/encrypt.profile.real_aes.yml b/conf/cmi/encrypt.profile.real_aes.yml new file mode 100644 index 00000000..94b4ba51 --- /dev/null +++ b/conf/cmi/encrypt.profile.real_aes.yml @@ -0,0 +1,15 @@ +uuid: 90d7b880-aa02-4cff-aeb9-69e03db7a21b +langcode: en +status: true +dependencies: + config: + - key.key.tfa + module: + - real_aes +_core: + default_config_hash: lDV_LbRGbNBnnVa6X72NK7xH7A1T9tasNNgP2hOhHKs +id: real_aes +label: 'Real AES' +encryption_method: real_aes +encryption_key: tfa +encryption_method_configuration: { } diff --git a/conf/cmi/encrypt.settings.yml b/conf/cmi/encrypt.settings.yml new file mode 100644 index 00000000..dbd39266 --- /dev/null +++ b/conf/cmi/encrypt.settings.yml @@ -0,0 +1,4 @@ +_core: + default_config_hash: CMyccvAuba2yH-HYmcEL0pq1Seyxzq9VHhKbQKwAWY4 +check_profile_status: true +allow_deprecated_plugins: false diff --git a/conf/cmi/hdbt_admin_tools.site_settings.yml b/conf/cmi/hdbt_admin_tools.site_settings.yml index b5f95a07..de99c273 100644 --- a/conf/cmi/hdbt_admin_tools.site_settings.yml +++ b/conf/cmi/hdbt_admin_tools.site_settings.yml @@ -1,10 +1,10 @@ _core: default_config_hash: OgPHnjkIjDn42IHAwLRXhNzdhX825gq2SrlYKw4kbQ8 langcode: en -path_to_json: /themes/contrib/hdbt/src/icons/editor-selectable-icons.json site_settings: default_icon: abstract-2 theme_color: coat-of-arms koro: basic footer_settings: footer_color: dark +path_to_json: /themes/contrib/hdbt/src/icons/editor-selectable-icons.json diff --git a/conf/cmi/key.key.tfa.yml b/conf/cmi/key.key.tfa.yml new file mode 100644 index 00000000..f241a8d1 --- /dev/null +++ b/conf/cmi/key.key.tfa.yml @@ -0,0 +1,19 @@ +uuid: 05f354f6-4d19-4cb0-9d95-0d16a1573e58 +langcode: en +status: true +dependencies: { } +_core: + default_config_hash: ARfRhKTJUSFXqKkDFwUncBUg8-5v7z_we3DETbYMYB0 +id: tfa +label: TFA +description: '' +key_type: encryption +key_type_settings: + key_size: 256 +key_provider: config +key_provider_settings: + key_value: thisvaluewillbeoverridden1234567 + base64_encoded: true +key_input: text_field +key_input_settings: + base64_encoded: false diff --git a/conf/cmi/tfa.settings.yml b/conf/cmi/tfa.settings.yml new file mode 100644 index 00000000..effc23d2 --- /dev/null +++ b/conf/cmi/tfa.settings.yml @@ -0,0 +1,48 @@ +_core: + default_config_hash: JyIkFj38h-aTLsrCfejAfP277qBJ61tlaLEBH44IHhg +langcode: en +enabled: true +required_roles: + hr: hr + admin: admin + content_producer: content_producer + editor: editor + super_administrator: super_administrator +send_plugins: { } +login_plugins: { } +login_plugin_settings: + tfa_trusted_browser: + cookie_allow_subdomains: true + cookie_expiration: 30 + cookie_name: tfa-trusted-browser +allowed_validation_plugins: + tfa_totp: tfa_totp +default_validation_plugin: tfa_totp +validation_plugin_settings: + tfa_recovery_code: + recovery_codes_amount: 10 + tfa_hotp: + counter_window: 10 + site_name_prefix: 1 + name_prefix: TFA + issuer: Drupal + tfa_totp: + time_skew: 2 + site_name_prefix: 1 + name_prefix: TFA + issuer: Hel.fi +validation_skip: 3 +users_without_tfa_redirect: false +reset_pass_skip_enabled: true +encryption: real_aes +tfa_flood_uid_only: 1 +tfa_flood_window: 300 +tfa_flood_threshold: 6 +help_text: 'Contact support to reset your access' +mail: + tfa_enabled_configuration: + subject: 'Your [site:name] account now has two-factor authentication' + body: "[user:display-name],\r\n\r\nThanks for configuring two-factor authentication on your [site:name] account!\r\n\r\nThis additional level of security will help to ensure that only you are able to log in to your account.\r\n\r\nIf you ever lose the device you configured, you should act quickly to delete its association with this account.\r\n\r\n--\r\n[site:name] team" + tfa_disabled_configuration: + subject: 'Your [site:name] account no longer has two-factor authentication' + body: "[user:display-name],\r\n\r\nTwo-factor authentication has been disabled on your [site:name] account.\r\n\r\nIf you did not take this action, please contact a site administrator immediately.\r\n\r\n--\r\n[site:name] team" diff --git a/conf/cmi/user.role.admin.yml b/conf/cmi/user.role.admin.yml index e2a25d24..74b35ec1 100644 --- a/conf/cmi/user.role.admin.yml +++ b/conf/cmi/user.role.admin.yml @@ -40,12 +40,12 @@ dependencies: - pathauto - publication_date - redirect - - rest - role_delegation - scheduler - simple_sitemap - system - taxonomy + - tfa - toolbar - view_unpublished - views_bulk_edit @@ -124,6 +124,7 @@ permissions: - 'delete page revisions' - 'delete remote entities' - 'delete terms in keywords' + - 'disable own tfa' - 'edit any announcement content' - 'edit any file media' - 'edit any hel_map media' @@ -159,6 +160,7 @@ permissions: - 'set announcement published on date' - 'set landing_page published on date' - 'set page published on date' + - 'setup own tfa' - 'translate announcement node' - 'translate any entity' - 'translate configuration' diff --git a/conf/cmi/user.role.authenticated.yml b/conf/cmi/user.role.authenticated.yml index 70932cd6..20f15695 100644 --- a/conf/cmi/user.role.authenticated.yml +++ b/conf/cmi/user.role.authenticated.yml @@ -13,6 +13,7 @@ dependencies: - paragraphs - rest - system + - tfa - toolbar _core: default_config_hash: dJ0L2DNSj5q6XVZAGsuVDpJTh5UeYkIPwKrUOOpr8YI @@ -24,8 +25,10 @@ permissions: - 'access content' - 'access toolbar' - 'delete own files' + - 'disable own tfa' - 'display eu cookie compliance popup' - 'restful get helfi_global_mobile_menu' + - 'setup own tfa' - 'view helfi_announcements external entity' - 'view helfi_news external entity' - 'view helfi_news_groups external entity' diff --git a/conf/cmi/user.role.content_producer.yml b/conf/cmi/user.role.content_producer.yml index 504d974d..779cd333 100644 --- a/conf/cmi/user.role.content_producer.yml +++ b/conf/cmi/user.role.content_producer.yml @@ -32,6 +32,7 @@ dependencies: - scheduler - system - taxonomy + - tfa - toolbar - view_unpublished _core: @@ -75,6 +76,7 @@ permissions: - 'delete own landing_page content' - 'delete own page content' - 'delete own remote_video media' + - 'disable own tfa' - 'edit any announcement content' - 'edit any file media' - 'edit any hel_map media' @@ -103,6 +105,7 @@ permissions: - 'set announcement published on date' - 'set landing_page published on date' - 'set page published on date' + - 'setup own tfa' - 'translate editable entities' - 'translate file media' - 'translate image media' diff --git a/conf/cmi/user.role.editor.yml b/conf/cmi/user.role.editor.yml index d5a4ef97..279a7d53 100644 --- a/conf/cmi/user.role.editor.yml +++ b/conf/cmi/user.role.editor.yml @@ -37,6 +37,7 @@ dependencies: - scheduler - system - taxonomy + - tfa - toolbar - view_unpublished _core: @@ -101,6 +102,7 @@ permissions: - 'delete page revisions' - 'delete remote entities' - 'delete terms in keywords' + - 'disable own tfa' - 'edit any announcement content' - 'edit any file media' - 'edit any hel_map media' @@ -134,6 +136,7 @@ permissions: - 'set announcement published on date' - 'set landing_page published on date' - 'set page published on date' + - 'setup own tfa' - 'translate announcement node' - 'translate any entity' - 'translate editable entities' diff --git a/conf/cmi/user.role.hr.yml b/conf/cmi/user.role.hr.yml index 0009a595..c6cee728 100644 --- a/conf/cmi/user.role.hr.yml +++ b/conf/cmi/user.role.hr.yml @@ -12,6 +12,7 @@ dependencies: - node - scheduler - system + - tfa - view_unpublished id: hr label: HR @@ -24,8 +25,10 @@ permissions: - 'cancel account' - 'change own username' - 'delete own files' + - 'disable own tfa' - 'edit any job_listing content' - 'schedule publishing of nodes' + - 'setup own tfa' - 'use text format full_html' - 'use text format minimal' - 'view any unpublished job_listing content' diff --git a/conf/cmi/user.role.read_only.yml b/conf/cmi/user.role.read_only.yml index 3cc110ab..f8bc63ae 100644 --- a/conf/cmi/user.role.read_only.yml +++ b/conf/cmi/user.role.read_only.yml @@ -2,10 +2,16 @@ uuid: 15d845bf-3de6-4301-b135-5863f40f66fe langcode: en status: true dependencies: + config: + - node.type.announcement + - node.type.job_listing + - node.type.landing_page + - node.type.page module: - file - node - paragraphs + - tfa - toolbar - view_unpublished _core: @@ -17,6 +23,8 @@ is_admin: null permissions: - 'access toolbar' - 'delete own files' + - 'disable own tfa' + - 'setup own tfa' - 'view any unpublished announcement content' - 'view any unpublished job_listing content' - 'view any unpublished landing_page content' From 803988c335194318c9179c4b10ec7d4dc9c1e615 Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Wed, 14 Aug 2024 08:43:16 +0000 Subject: [PATCH 37/37] Update configuration --- composer.lock | 195 +++++++++--------- conf/cmi/block.block.globalannouncement.yml | 20 -- conf/cmi/block.block.surveys.yml | 21 ++ ...ase_field_override.node.survey.promote.yml | 24 +++ ...base_field_override.node.survey.status.yml | 24 +++ ....base_field_override.node.survey.title.yml | 20 ++ ...ntity_form_display.node.survey.default.yml | 134 ++++++++++++ ...ntity_view_display.node.survey.default.yml | 50 +++++ ...entity_view_display.node.survey.teaser.yml | 40 ++++ conf/cmi/core.extension.yml | 3 +- conf/cmi/encrypt.profile.real_aes.yml | 2 +- ...ternal_entity_type.helfi_announcements.yml | 6 +- ...ies.external_entity_type.helfi_surveys.yml | 42 ++++ conf/cmi/field.field.node.survey.body.yml | 31 +++ ...node.survey.field_survey_content_pages.yml | 33 +++ ...ld.field.node.survey.field_survey_link.yml | 25 +++ ...torage.node.field_survey_content_pages.yml | 21 ++ .../field.storage.node.field_survey_link.yml | 21 ++ .../language.content_settings.node.survey.yml | 18 ++ ...ase_field_override.node.survey.promote.yml | 4 + ...base_field_override.node.survey.status.yml | 4 + ....base_field_override.node.survey.title.yml | 1 + ....announcement.field_publish_externally.yml | 4 + .../fi/field.field.node.survey.body.yml | 1 + ...node.survey.field_survey_content_pages.yml | 2 + ...ld.field.node.survey.field_survey_link.yml | 1 + conf/cmi/language/fi/key.key.tfa.yml | 1 + conf/cmi/language/fi/node.type.survey.yml | 2 + conf/cmi/language/fi/tfa.settings.yml | 1 + ...ase_field_override.node.survey.promote.yml | 4 + ...base_field_override.node.survey.status.yml | 4 + ....announcement.field_publish_externally.yml | 3 + .../sv/field.field.node.survey.body.yml | 1 + ...ld.field.node.survey.field_survey_link.yml | 1 + conf/cmi/language/sv/tfa.settings.yml | 26 +++ conf/cmi/node.type.survey.yml | 33 +++ ...aragraphs.paragraphs_type.from_library.yml | 5 +- ...ion.user_add_role_action.survey_editor.yml | 14 ++ ....user_remove_role_action.survey_editor.yml | 14 ++ conf/cmi/user.role.anonymous.yml | 1 + conf/cmi/user.role.authenticated.yml | 1 + conf/cmi/user.role.survey_editor.yml | 27 +++ docker/openshift/Dockerfile | 2 +- docker/openshift/cron-entrypoint.sh | 2 +- tools/make/drupal.mk | 3 +- 45 files changed, 767 insertions(+), 125 deletions(-) delete mode 100644 conf/cmi/block.block.globalannouncement.yml create mode 100644 conf/cmi/block.block.surveys.yml create mode 100644 conf/cmi/core.base_field_override.node.survey.promote.yml create mode 100644 conf/cmi/core.base_field_override.node.survey.status.yml create mode 100644 conf/cmi/core.base_field_override.node.survey.title.yml create mode 100644 conf/cmi/core.entity_form_display.node.survey.default.yml create mode 100644 conf/cmi/core.entity_view_display.node.survey.default.yml create mode 100644 conf/cmi/core.entity_view_display.node.survey.teaser.yml create mode 100644 conf/cmi/external_entities.external_entity_type.helfi_surveys.yml create mode 100644 conf/cmi/field.field.node.survey.body.yml create mode 100644 conf/cmi/field.field.node.survey.field_survey_content_pages.yml create mode 100644 conf/cmi/field.field.node.survey.field_survey_link.yml create mode 100644 conf/cmi/field.storage.node.field_survey_content_pages.yml create mode 100644 conf/cmi/field.storage.node.field_survey_link.yml create mode 100644 conf/cmi/language.content_settings.node.survey.yml create mode 100644 conf/cmi/language/fi/core.base_field_override.node.survey.promote.yml create mode 100644 conf/cmi/language/fi/core.base_field_override.node.survey.status.yml create mode 100644 conf/cmi/language/fi/core.base_field_override.node.survey.title.yml create mode 100644 conf/cmi/language/fi/field.field.node.announcement.field_publish_externally.yml create mode 100644 conf/cmi/language/fi/field.field.node.survey.body.yml create mode 100644 conf/cmi/language/fi/field.field.node.survey.field_survey_content_pages.yml create mode 100644 conf/cmi/language/fi/field.field.node.survey.field_survey_link.yml create mode 100644 conf/cmi/language/fi/key.key.tfa.yml create mode 100644 conf/cmi/language/fi/node.type.survey.yml create mode 100644 conf/cmi/language/fi/tfa.settings.yml create mode 100644 conf/cmi/language/sv/core.base_field_override.node.survey.promote.yml create mode 100644 conf/cmi/language/sv/core.base_field_override.node.survey.status.yml create mode 100644 conf/cmi/language/sv/field.field.node.announcement.field_publish_externally.yml create mode 100644 conf/cmi/language/sv/field.field.node.survey.body.yml create mode 100644 conf/cmi/language/sv/field.field.node.survey.field_survey_link.yml create mode 100644 conf/cmi/language/sv/tfa.settings.yml create mode 100644 conf/cmi/node.type.survey.yml create mode 100644 conf/cmi/system.action.user_add_role_action.survey_editor.yml create mode 100644 conf/cmi/system.action.user_remove_role_action.survey_editor.yml create mode 100644 conf/cmi/user.role.survey_editor.yml diff --git a/composer.lock b/composer.lock index ce566161..72b3fc08 100644 --- a/composer.lock +++ b/composer.lock @@ -2263,16 +2263,16 @@ }, { "name": "drupal/core", - "version": "10.3.1", + "version": "10.3.2", "source": { "type": "git", "url": "https://github.com/drupal/core.git", - "reference": "d137403a30d4154404e473785f48dfc889d77e23" + "reference": "10e79c67a903844bef02a5cf10475d9a8b623e7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core/zipball/d137403a30d4154404e473785f48dfc889d77e23", - "reference": "d137403a30d4154404e473785f48dfc889d77e23", + "url": "https://api.github.com/repos/drupal/core/zipball/10e79c67a903844bef02a5cf10475d9a8b623e7a", + "reference": "10e79c67a903844bef02a5cf10475d9a8b623e7a", "shasum": "" }, "require": { @@ -2421,13 +2421,13 @@ ], "description": "Drupal is an open source content management platform powering millions of websites and applications.", "support": { - "source": "https://github.com/drupal/core/tree/10.3.1" + "source": "https://github.com/drupal/core/tree/10.3.2" }, - "time": "2024-07-04T11:33:45+00:00" + "time": "2024-08-08T09:23:57+00:00" }, { "name": "drupal/core-composer-scaffold", - "version": "10.3.1", + "version": "10.3.2", "source": { "type": "git", "url": "https://github.com/drupal/core-composer-scaffold.git", @@ -2471,7 +2471,7 @@ "drupal" ], "support": { - "source": "https://github.com/drupal/core-composer-scaffold/tree/10.3.1" + "source": "https://github.com/drupal/core-composer-scaffold/tree/10.3.2" }, "time": "2024-05-11T08:21:39+00:00" }, @@ -2877,17 +2877,17 @@ }, { "name": "drupal/easy_breadcrumb", - "version": "2.0.7", + "version": "2.0.8", "source": { "type": "git", "url": "https://git.drupalcode.org/project/easy_breadcrumb.git", - "reference": "2.0.7" + "reference": "2.0.8" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/easy_breadcrumb-2.0.7.zip", - "reference": "2.0.7", - "shasum": "a17524ffc2c76bc0aedb04116c3647dc2025e762" + "url": "https://ftp.drupal.org/files/projects/easy_breadcrumb-2.0.8.zip", + "reference": "2.0.8", + "shasum": "49bfd9b8b0ec664963d05e360449876745cf2868" }, "require": { "drupal/core": "^9.2 || ^10 || ^11" @@ -2895,8 +2895,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "2.0.7", - "datestamp": "1719427042", + "version": "2.0.8", + "datestamp": "1723545040", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3181,26 +3181,26 @@ }, { "name": "drupal/entity", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/entity.git", - "reference": "8.x-1.4" + "reference": "8.x-1.5" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity-8.x-1.4.zip", - "reference": "8.x-1.4", - "shasum": "1cf7712318fad144eab106a8fcfcd396aeb5676f" + "url": "https://ftp.drupal.org/files/projects/entity-8.x-1.5.zip", + "reference": "8.x-1.5", + "shasum": "86c0b75c173144aaedde3e3258dc0d3ce11d1a22" }, "require": { - "drupal/core": "^9.2|^10.0" + "drupal/core": "^10.1 || ^11" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.4", - "datestamp": "1661898023", + "version": "8.x-1.5", + "datestamp": "1723380062", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3213,7 +3213,7 @@ ], "authors": [ { - "name": "Berdir", + "name": "berdir", "homepage": "https://www.drupal.org/user/214652" }, { @@ -3250,20 +3250,20 @@ }, { "name": "drupal/entity_browser", - "version": "2.10.0", + "version": "2.11.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/entity_browser.git", - "reference": "8.x-2.10" + "reference": "8.x-2.11" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity_browser-8.x-2.10.zip", - "reference": "8.x-2.10", - "shasum": "d52548ea66dc56108c2e211aeaff6e1cc0522e85" + "url": "https://ftp.drupal.org/files/projects/entity_browser-8.x-2.11.zip", + "reference": "8.x-2.11", + "shasum": "4ead3d3f9f6365fbc25cfbd0edcc5e0a9cc52e02" }, "require": { - "drupal/core": "^9.5 || ^10" + "drupal/core": "^10.2 || ^11" }, "conflict": { "drupal/media_entity": "1.*" @@ -3276,13 +3276,14 @@ "drupal/entityqueue": "^1.0", "drupal/inline_entity_form": "^1.0@rc", "drupal/paragraphs": "^1.0", + "drupal/search_api": "^1.0", "drupal/token": "^1.0" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-2.10", - "datestamp": "1702325310", + "version": "8.x-2.11", + "datestamp": "1723378138", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3936,7 +3937,7 @@ "role": "Maintainer" }, { - "name": "Rajeshreeputra", + "name": "rajeshreeputra", "homepage": "https://www.drupal.org/user/3418561" } ], @@ -4125,16 +4126,16 @@ }, { "name": "drupal/hdbt", - "version": "6.5.34", + "version": "6.6.3", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt.git", - "reference": "519362d9435f1b86da3d432d3bd88bc9f6aeca6c" + "reference": "260ed89837be3b1ae9a19248a0e21717b9597885" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/519362d9435f1b86da3d432d3bd88bc9f6aeca6c", - "reference": "519362d9435f1b86da3d432d3bd88bc9f6aeca6c", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/260ed89837be3b1ae9a19248a0e21717b9597885", + "reference": "260ed89837be3b1ae9a19248a0e21717b9597885", "shasum": "" }, "require": { @@ -4152,10 +4153,10 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.5.34", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.6.3", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt/issues" }, - "time": "2024-07-19T12:30:27+00:00" + "time": "2024-08-14T08:40:02+00:00" }, { "name": "drupal/hdbt_admin", @@ -4335,12 +4336,12 @@ "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-tools.git", - "reference": "cea692973b01424a3c3ffde13b9db48edbcbf6c9" + "reference": "eadca37ff757c3de0b1a309d37ddd2c6d4910740" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-tools/zipball/cea692973b01424a3c3ffde13b9db48edbcbf6c9", - "reference": "cea692973b01424a3c3ffde13b9db48edbcbf6c9", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-tools/zipball/eadca37ff757c3de0b1a309d37ddd2c6d4910740", + "reference": "eadca37ff757c3de0b1a309d37ddd2c6d4910740", "shasum": "" }, "require": { @@ -4412,7 +4413,7 @@ "source": "https://github.com/City-of-Helsinki/drupal-tools/tree/main", "issues": "https://github.com/City-of-Helsinki/drupal-tools/issues" }, - "time": "2024-06-12T09:40:19+00:00" + "time": "2024-08-12T09:17:00+00:00" }, { "name": "drupal/helfi_navigation", @@ -4450,16 +4451,16 @@ }, { "name": "drupal/helfi_platform_config", - "version": "4.4.7", + "version": "4.4.8", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config.git", - "reference": "fe7cd00be9a4df3d849d1ebb13ed7246ea520fde" + "reference": "10ca013c3e13c112eb9827fd1b91ed52833b2712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/fe7cd00be9a4df3d849d1ebb13ed7246ea520fde", - "reference": "fe7cd00be9a4df3d849d1ebb13ed7246ea520fde", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/10ca013c3e13c112eb9827fd1b91ed52833b2712", + "reference": "10ca013c3e13c112eb9827fd1b91ed52833b2712", "shasum": "" }, "require": { @@ -4548,7 +4549,7 @@ "[#UHF-7008] Admin toolbar and contextual links should always be rendered in the admin language (https://www.drupal.org/project/drupal/issues/2313309)": "https://www.drupal.org/files/issues/2023-12-19/2313309-179.patch", "[#UHF-9388] Process configuration translation files for custom modules (https://www.drupal.org/i/2845437)": "https://raw.githubusercontent.com/City-of-Helsinki/drupal-helfi-platform-config/fd68277191b8f8ec290e53b5fbbae699b2260384/patches/drupal-2845437-process-custom-module-translation-config-10.3.x.patch", "[#UHF-9690] Allow updating lists when switching from allowed values to allowed values function (https://www.drupal.org/i/2873353)": "https://www.drupal.org/files/issues/2021-05-18/allow-allowed-values-function-update-D9-2873353_1.patch", - "[#UHF-9952, #UHF-9980] Duplicate
tags (https://www.drupal.org/i/3083786)": "https://www.drupal.org/files/issues/2024-05-14/3083786-duplicate-br-tags-2024-05-14-no-tests.patch" + "[#UHF-9952, #UHF-9980] Duplicate
tags (https://www.drupal.org/i/3083786)": "https://www.drupal.org/files/issues/2024-08-08/3083786--mr-8066--10-3-backport.patch" }, "drupal/default_content": { "https://www.drupal.org/project/default_content/issues/2640734#comment-14638943": "https://raw.githubusercontent.com/City-of-Helsinki/drupal-helfi-platform-config/main/patches/default_content_2.0.0-alpha2-2640734_manual_imports-e164a354.patch" @@ -4574,10 +4575,10 @@ ], "description": "HELfi platform config", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.4.7", + "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.4.8", "issues": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/issues" }, - "time": "2024-08-06T05:03:16+00:00" + "time": "2024-08-12T09:33:04+00:00" }, { "name": "drupal/helfi_proxy", @@ -5472,20 +5473,20 @@ }, { "name": "drupal/monolog", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://git.drupalcode.org/project/monolog.git", - "reference": "3.0.3" + "reference": "3.0.4" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/monolog-3.0.3.zip", - "reference": "3.0.3", - "shasum": "99a8d46376f158da841f3fd524a535e37f9c84ad" + "url": "https://ftp.drupal.org/files/projects/monolog-3.0.4.zip", + "reference": "3.0.4", + "shasum": "5e86b3598b826dca767c52bc7e63cb2c049212d3" }, "require": { - "drupal/core": "^10", + "drupal/core": "^10 || ^11", "monolog/monolog": "^3.2.0", "php": "^8.1.0" }, @@ -5500,8 +5501,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "3.0.3", - "datestamp": "1718981516", + "version": "3.0.4", + "datestamp": "1723450250", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5656,20 +5657,20 @@ }, { "name": "drupal/paragraphs", - "version": "1.17.0", + "version": "1.18.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/paragraphs.git", - "reference": "8.x-1.17" + "reference": "8.x-1.18" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/paragraphs-8.x-1.17.zip", - "reference": "8.x-1.17", - "shasum": "81c05f6a1eb59ab957c9ac97b2e79d6c9837bd72" + "url": "https://ftp.drupal.org/files/projects/paragraphs-8.x-1.18.zip", + "reference": "8.x-1.18", + "shasum": "594e2937ea5c95fc88b60420590c4d83f5cd71ee" }, "require": { - "drupal/core": "^9.3 || ^10", + "drupal/core": "^10.2 || ^11", "drupal/entity_reference_revisions": "~1.3" }, "require-dev": { @@ -5677,6 +5678,7 @@ "drupal/diff": "1.x-dev", "drupal/entity_browser": "2.x-dev", "drupal/entity_usage": "2.x-dev", + "drupal/feeds": "^3", "drupal/field_group": "3.x-dev", "drupal/inline_entity_form": "1.x-dev", "drupal/paragraphs-paragraphs_library": "*", @@ -5690,8 +5692,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.17", - "datestamp": "1709804220", + "version": "8.x-1.18", + "datestamp": "1723029144", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6002,24 +6004,24 @@ }, { "name": "drupal/raven", - "version": "5.0.15", + "version": "5.0.16", "source": { "type": "git", "url": "https://git.drupalcode.org/project/raven.git", - "reference": "5.0.15" + "reference": "5.0.16" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/raven-5.0.15.zip", - "reference": "5.0.15", - "shasum": "ef3472e1ed7436ac4d453fb371065e8e3f5ed7d5" + "url": "https://ftp.drupal.org/files/projects/raven-5.0.16.zip", + "reference": "5.0.16", + "shasum": "cd4d545b74ad7d22691dd06177a164bc12074201" }, "require": { "drupal/core": "^10.1 || ^11", "sentry/sentry": "^4.4" }, "require-dev": { - "drupal/csp": "^1.17", + "drupal/csp": "^1.17 || ^2.0", "drupal/monitoring": "^1.13", "drupal/seckit": "^2.0", "drush/drush": "^11.0 || ^12.0 || ^13.0" @@ -6027,8 +6029,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "5.0.15", - "datestamp": "1719102344", + "version": "5.0.16", + "datestamp": "1723001088", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6240,26 +6242,26 @@ }, { "name": "drupal/redirect", - "version": "1.9.0", + "version": "1.10.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/redirect.git", - "reference": "8.x-1.9" + "reference": "8.x-1.10" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/redirect-8.x-1.9.zip", - "reference": "8.x-1.9", - "shasum": "2987de20f509e9f7cec8a0f81d3a6774f9b0ba3e" + "url": "https://ftp.drupal.org/files/projects/redirect-8.x-1.10.zip", + "reference": "8.x-1.10", + "shasum": "9d72d7e0717dbdea3ab3306c5d6840da5bd3024c" }, "require": { - "drupal/core": "^9.2 || ^10" + "drupal/core": "^9.2 || ^10 || ^11" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.9", - "datestamp": "1693393506", + "version": "8.x-1.10", + "datestamp": "1723277641", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6276,7 +6278,7 @@ "homepage": "https://www.drupal.org/user/214652" }, { - "name": "Dave Reid", + "name": "dave reid", "homepage": "https://www.drupal.org/user/53892" }, { @@ -11187,16 +11189,16 @@ }, { "name": "sentry/sentry", - "version": "4.8.1", + "version": "4.9.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "61770efd8b7888e0bdd7d234f0ba67b066e47d04" + "reference": "788ec170f51ebb22f2809a1e3f78b19ccd39b70d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/61770efd8b7888e0bdd7d234f0ba67b066e47d04", - "reference": "61770efd8b7888e0bdd7d234f0ba67b066e47d04", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/788ec170f51ebb22f2809a1e3f78b19ccd39b70d", + "reference": "788ec170f51ebb22f2809a1e3f78b19ccd39b70d", "shasum": "" }, "require": { @@ -11260,7 +11262,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/4.8.1" + "source": "https://github.com/getsentry/sentry-php/tree/4.9.0" }, "funding": [ { @@ -11272,7 +11274,7 @@ "type": "custom" } ], - "time": "2024-07-16T13:45:27+00:00" + "time": "2024-08-08T14:40:50+00:00" }, { "name": "stomp-php/stomp-php", @@ -14307,16 +14309,16 @@ }, { "name": "twig/twig", - "version": "v3.10.3", + "version": "v3.11.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "67f29781ffafa520b0bbfbd8384674b42db04572" + "reference": "e80fb8ebba85c7341a97a9ebf825d7fd4b77708d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/67f29781ffafa520b0bbfbd8384674b42db04572", - "reference": "67f29781ffafa520b0bbfbd8384674b42db04572", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/e80fb8ebba85c7341a97a9ebf825d7fd4b77708d", + "reference": "e80fb8ebba85c7341a97a9ebf825d7fd4b77708d", "shasum": "" }, "require": { @@ -14324,7 +14326,8 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php80": "^1.22" + "symfony/polyfill-php80": "^1.22", + "symfony/polyfill-php81": "^1.29" }, "require-dev": { "psr/container": "^1.0|^2.0", @@ -14370,7 +14373,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.10.3" + "source": "https://github.com/twigphp/Twig/tree/v3.11.0" }, "funding": [ { @@ -14382,7 +14385,7 @@ "type": "tidelift" } ], - "time": "2024-05-16T10:04:27+00:00" + "time": "2024-08-08T16:15:16+00:00" }, { "name": "twistor/flysystem-stream-wrapper", diff --git a/conf/cmi/block.block.globalannouncement.yml b/conf/cmi/block.block.globalannouncement.yml deleted file mode 100644 index 083066fd..00000000 --- a/conf/cmi/block.block.globalannouncement.yml +++ /dev/null @@ -1,20 +0,0 @@ -uuid: 2951e957-8677-4666-898f-de45abd2c142 -langcode: en -status: true -dependencies: - module: - - helfi_global_announcement - theme: - - hdbt_subtheme -id: globalannouncement -theme: hdbt_subtheme -region: before_content -weight: -14 -provider: helfi_global_announcement -plugin: global_announcements -settings: - id: global_announcements - label: 'Global announcement' - label_display: '' - provider: helfi_global_announcement -visibility: { } diff --git a/conf/cmi/block.block.surveys.yml b/conf/cmi/block.block.surveys.yml new file mode 100644 index 00000000..b15df313 --- /dev/null +++ b/conf/cmi/block.block.surveys.yml @@ -0,0 +1,21 @@ +uuid: 450b1e3e-7680-4439-802f-6f03e98fc259 +langcode: en +status: true +dependencies: + module: + - helfi_etusivu_entities + theme: + - hdbt_subtheme +id: surveys +theme: hdbt_subtheme +region: before_content +weight: -15 +provider: helfi_node_survey +plugin: surveys +settings: + id: surveys + label: Surveys + label_display: '' + provider: helfi_node_survey + use_remote_entities: true +visibility: { } diff --git a/conf/cmi/core.base_field_override.node.survey.promote.yml b/conf/cmi/core.base_field_override.node.survey.promote.yml new file mode 100644 index 00000000..a53be779 --- /dev/null +++ b/conf/cmi/core.base_field_override.node.survey.promote.yml @@ -0,0 +1,24 @@ +uuid: 0f67ac70-571e-43da-ae3f-eca271ee541a +langcode: en +status: true +dependencies: + config: + - node.type.survey +_core: + default_config_hash: jLPewbi-29Z_ekJ8NNa2EQwOjxhSBxFnXYwtX-8jx68 +id: node.survey.promote +field_name: promote +entity_type: node +bundle: survey +label: 'Promoted to front page' +description: '' +required: false +translatable: true +default_value: + - + value: 0 +default_value_callback: '' +settings: + on_label: 'On' + off_label: 'Off' +field_type: boolean diff --git a/conf/cmi/core.base_field_override.node.survey.status.yml b/conf/cmi/core.base_field_override.node.survey.status.yml new file mode 100644 index 00000000..81672353 --- /dev/null +++ b/conf/cmi/core.base_field_override.node.survey.status.yml @@ -0,0 +1,24 @@ +uuid: 66c7c3ae-fd35-4cd8-a4c2-54bc24cf5895 +langcode: en +status: true +dependencies: + config: + - node.type.survey +_core: + default_config_hash: G0OKH2o0P5SCpFGpXz9jp9Yuxkm746qvgyc0FbBteRA +id: node.survey.status +field_name: status +entity_type: node +bundle: survey +label: Published +description: '' +required: false +translatable: true +default_value: + - + value: 0 +default_value_callback: '' +settings: + on_label: 'On' + off_label: 'Off' +field_type: boolean diff --git a/conf/cmi/core.base_field_override.node.survey.title.yml b/conf/cmi/core.base_field_override.node.survey.title.yml new file mode 100644 index 00000000..95196bcd --- /dev/null +++ b/conf/cmi/core.base_field_override.node.survey.title.yml @@ -0,0 +1,20 @@ +uuid: 12bf02be-360b-498c-9891-fe06f94408b8 +langcode: en +status: true +dependencies: + config: + - node.type.survey +_core: + default_config_hash: Opcalm7vjcrzzKeswLKzQkVtm9qRopCjMHYKtVTXBE4 +id: node.survey.title +field_name: title +entity_type: node +bundle: survey +label: 'Survey title' +description: '' +required: true +translatable: true +default_value: { } +default_value_callback: '' +settings: { } +field_type: string diff --git a/conf/cmi/core.entity_form_display.node.survey.default.yml b/conf/cmi/core.entity_form_display.node.survey.default.yml new file mode 100644 index 00000000..e30e4576 --- /dev/null +++ b/conf/cmi/core.entity_form_display.node.survey.default.yml @@ -0,0 +1,134 @@ +uuid: 2dea284e-6cc0-4e34-9d2f-37baa7317502 +langcode: en +status: true +dependencies: + config: + - field.field.node.survey.body + - field.field.node.survey.field_survey_content_pages + - field.field.node.survey.field_survey_link + - node.type.survey + module: + - hdbt_admin_tools + - link + - path + - publication_date + - scheduler + - select2 + - text +_core: + default_config_hash: SpA7JjzzI-4nAK5XY8JDkYoTn3X7NpV6TqEAFpFP5tY +id: node.survey.default +targetEntityType: node +bundle: survey +mode: default +content: + body: + type: text_textarea_with_summary + weight: 18 + region: content + settings: + rows: 9 + summary_rows: 3 + placeholder: '' + show_summary: false + third_party_settings: { } + created: + type: datetime_timestamp + weight: 3 + region: content + settings: { } + third_party_settings: { } + field_survey_content_pages: + type: select2_entity_reference + weight: 14 + region: content + settings: + width: 100% + autocomplete: true + match_operator: CONTAINS + match_limit: 20 + third_party_settings: { } + field_survey_link: + type: link_default + weight: 19 + region: content + settings: + placeholder_url: '' + placeholder_title: '' + third_party_settings: { } + langcode: + type: language_select + weight: 1 + region: content + settings: + include_locked: false + third_party_settings: { } + path: + type: path + weight: 6 + region: content + settings: { } + third_party_settings: { } + publish_on: + type: datetime_timestamp_no_default + weight: 7 + region: content + settings: { } + third_party_settings: { } + published_at: + type: publication_date_timestamp + weight: 10 + region: content + settings: { } + third_party_settings: { } + scheduler_settings: + weight: 5 + region: content + settings: { } + third_party_settings: { } + simple_sitemap: + weight: 12 + region: content + settings: { } + third_party_settings: { } + status: + type: boolean_checkbox + weight: 9 + region: content + settings: + display_label: true + third_party_settings: { } + title: + type: string_textfield + weight: 0 + region: content + settings: + size: 60 + placeholder: '' + third_party_settings: { } + translation: + weight: 4 + region: content + settings: { } + third_party_settings: { } + uid: + type: entity_reference_autocomplete + weight: 2 + region: content + settings: + match_operator: CONTAINS + match_limit: 10 + size: 60 + placeholder: '' + third_party_settings: { } + unpublish_on: + type: datetime_timestamp_no_default + weight: 8 + region: content + settings: { } + third_party_settings: { } +hidden: + hide_sidebar_navigation: true + promote: true + sticky: true + url_redirects: true diff --git a/conf/cmi/core.entity_view_display.node.survey.default.yml b/conf/cmi/core.entity_view_display.node.survey.default.yml new file mode 100644 index 00000000..aa556471 --- /dev/null +++ b/conf/cmi/core.entity_view_display.node.survey.default.yml @@ -0,0 +1,50 @@ +uuid: 1dab22c0-e5e8-487c-9050-9ba480532d07 +langcode: en +status: true +dependencies: + config: + - field.field.node.survey.body + - field.field.node.survey.field_survey_content_pages + - field.field.node.survey.field_survey_link + - node.type.survey + module: + - link + - text + - user +_core: + default_config_hash: VYCHZ7byxSgOpSFDqb2ad2yb3M5fWI43qAJbGREtaSQ +id: node.survey.default +targetEntityType: node +bundle: survey +mode: default +content: + body: + type: text_default + label: hidden + settings: { } + third_party_settings: { } + weight: 2 + region: content + field_survey_link: + type: link + label: hidden + settings: + trim_length: 80 + url_only: false + url_plain: false + rel: '' + target: '' + third_party_settings: { } + weight: 3 + region: content + links: + settings: { } + third_party_settings: { } + weight: 0 + region: content +hidden: + field_survey_content_pages: true + langcode: true + published_at: true + search_api_excerpt: true + toc_enabled: true diff --git a/conf/cmi/core.entity_view_display.node.survey.teaser.yml b/conf/cmi/core.entity_view_display.node.survey.teaser.yml new file mode 100644 index 00000000..1aba7e1e --- /dev/null +++ b/conf/cmi/core.entity_view_display.node.survey.teaser.yml @@ -0,0 +1,40 @@ +uuid: 394e2865-baf3-4603-9d97-57f59e49f5a6 +langcode: en +status: true +dependencies: + config: + - core.entity_view_mode.node.teaser + - field.field.node.survey.body + - field.field.node.survey.field_survey_content_pages + - field.field.node.survey.field_survey_link + - node.type.survey + module: + - text + - user +_core: + default_config_hash: RFZBuDFa3w1RzcoB4xT4zbJFvgZSCmJDaIfZUOpYzXI +id: node.survey.teaser +targetEntityType: node +bundle: survey +mode: teaser +content: + body: + type: text_summary_or_trimmed + label: hidden + settings: + trim_length: 600 + third_party_settings: { } + weight: 101 + region: content + links: + settings: { } + third_party_settings: { } + weight: 100 + region: content +hidden: + field_survey_content_pages: true + field_survey_link: true + langcode: true + published_at: true + search_api_excerpt: true + toc_enabled: true diff --git a/conf/cmi/core.extension.yml b/conf/cmi/core.extension.yml index 5cf1c941..dcbe246e 100644 --- a/conf/cmi/core.extension.yml +++ b/conf/cmi/core.extension.yml @@ -44,8 +44,8 @@ module: helfi_azure_fs: 0 helfi_base_content: 0 helfi_ckeditor: 0 + helfi_etusivu_entities: 0 helfi_eu_cookie_compliance: 0 - helfi_global_announcement: 0 helfi_hakuvahti: 0 helfi_image_styles: 0 helfi_media: 0 @@ -55,6 +55,7 @@ module: helfi_node_announcement: 0 helfi_node_landing_page: 0 helfi_node_page: 0 + helfi_node_survey: 0 helfi_paragraphs_accordion: 0 helfi_paragraphs_banner: 0 helfi_paragraphs_chart: 0 diff --git a/conf/cmi/encrypt.profile.real_aes.yml b/conf/cmi/encrypt.profile.real_aes.yml index 94b4ba51..c9887b01 100644 --- a/conf/cmi/encrypt.profile.real_aes.yml +++ b/conf/cmi/encrypt.profile.real_aes.yml @@ -11,5 +11,5 @@ _core: id: real_aes label: 'Real AES' encryption_method: real_aes -encryption_key: tfa encryption_method_configuration: { } +encryption_key: tfa diff --git a/conf/cmi/external_entities.external_entity_type.helfi_announcements.yml b/conf/cmi/external_entities.external_entity_type.helfi_announcements.yml index 9865c389..8bd8bfb7 100644 --- a/conf/cmi/external_entities.external_entity_type.helfi_announcements.yml +++ b/conf/cmi/external_entities.external_entity_type.helfi_announcements.yml @@ -1,15 +1,15 @@ -uuid: 908fafd9-25b0-41aa-b97d-2bd708d18f60 +uuid: 072df4c4-3de5-44f9-bd4f-c1d09006ce88 langcode: en status: true dependencies: { } _core: - default_config_hash: znut8SNGQRsGO4_fUxjvl_SIZqbb0T7hsv98bRKxcM8 + default_config_hash: klULx3zqlYgz7OOfeGsjBYHQmFp8V6_aMlFUYaOQRmA id: helfi_announcements label: 'Helfi: Announcements' label_plural: 'Helfi: Announcements' description: '' -read_only: true generate_aliases: null +read_only: true field_mapper_id: jsonpath field_mapper_config: field_mappings: diff --git a/conf/cmi/external_entities.external_entity_type.helfi_surveys.yml b/conf/cmi/external_entities.external_entity_type.helfi_surveys.yml new file mode 100644 index 00000000..2a9fc569 --- /dev/null +++ b/conf/cmi/external_entities.external_entity_type.helfi_surveys.yml @@ -0,0 +1,42 @@ +uuid: be631905-d77b-418a-890e-b04fa3ed3e22 +langcode: en +status: true +dependencies: { } +_core: + default_config_hash: _EBh68cyUNEhZdqfsN5IEH5ieC-ND8JOMk5t_uhXdJc +id: helfi_surveys +label: 'Helfi: Survey' +label_plural: 'Helfi: Surveys' +description: '' +generate_aliases: null +read_only: true +field_mapper_id: jsonpath +field_mapper_config: + field_mappings: + id: + value: $.id + uuid: + value: $.id + title: + value: '$.attributes["title"]' + published_at: + value: '$.attributes["published_at"]' + unpublish_on: + value: '$.attributes["unpublish_on"]' + langcode: + value: '$.attributes["langcode"]' + body: + value: '$.attributes["body"]["value"]' + status: + value: '$.attributes["status"]' + survey_link_text: + value: '$.attributes["field_survey_link"]["title"]' + survey_link_url: + value: '$.attributes["field_survey_link"]["uri"]' +storage_client_id: helfi_surveys +storage_client_config: { } +persistent_cache_max_age: -1 +annotation_entity_type_id: null +annotation_bundle_id: null +annotation_field_name: null +inherits_annotation_fields: false diff --git a/conf/cmi/field.field.node.survey.body.yml b/conf/cmi/field.field.node.survey.body.yml new file mode 100644 index 00000000..b2aa1d75 --- /dev/null +++ b/conf/cmi/field.field.node.survey.body.yml @@ -0,0 +1,31 @@ +uuid: d1b45349-7c63-4ac3-b7b3-563eeb88f38c +langcode: en +status: true +dependencies: + config: + - field.storage.node.body + - node.type.survey + module: + - allowed_formats + - text +third_party_settings: + allowed_formats: + allowed_formats: + - minimal +_core: + default_config_hash: Xb4eSRbowaisX2qbRnKXbJKAH74H8t2-NtJaJ0Kz7hk +id: node.survey.body +field_name: body +entity_type: node +bundle: survey +label: Body +description: '' +required: true +translatable: true +default_value: { } +default_value_callback: '' +settings: + display_summary: false + required_summary: false + allowed_formats: { } +field_type: text_with_summary diff --git a/conf/cmi/field.field.node.survey.field_survey_content_pages.yml b/conf/cmi/field.field.node.survey.field_survey_content_pages.yml new file mode 100644 index 00000000..f97fd106 --- /dev/null +++ b/conf/cmi/field.field.node.survey.field_survey_content_pages.yml @@ -0,0 +1,33 @@ +uuid: 9cb9a071-2d67-43d0-a8e3-6e2b7142ee17 +langcode: en +status: true +dependencies: + config: + - field.storage.node.field_survey_content_pages + - node.type.landing_page + - node.type.page + - node.type.survey +_core: + default_config_hash: c72PoW8HQ-owmgvYD0syJeWNuTfkdhC88uY2a49GZSk +id: node.survey.field_survey_content_pages +field_name: field_survey_content_pages +entity_type: node +bundle: survey +label: 'Show on content pages' +description: 'Shown on all pages if left empty.' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: + handler: 'default:node' + handler_settings: + target_bundles: + page: page + landing_page: landing_page + sort: + field: title + direction: ASC + auto_create: false + auto_create_bundle: page +field_type: entity_reference diff --git a/conf/cmi/field.field.node.survey.field_survey_link.yml b/conf/cmi/field.field.node.survey.field_survey_link.yml new file mode 100644 index 00000000..b48a1f27 --- /dev/null +++ b/conf/cmi/field.field.node.survey.field_survey_link.yml @@ -0,0 +1,25 @@ +uuid: 21a43a79-869a-4758-b64a-b665aec0561a +langcode: en +status: true +dependencies: + config: + - field.storage.node.field_survey_link + - node.type.survey + module: + - link +_core: + default_config_hash: UaxdyCI0GV4wNetzWNnSTLZy7bnNtgHjMypvOl28HYo +id: node.survey.field_survey_link +field_name: field_survey_link +entity_type: node +bundle: survey +label: Link +description: '' +required: true +translatable: true +default_value: { } +default_value_callback: '' +settings: + title: 0 + link_type: 17 +field_type: link diff --git a/conf/cmi/field.storage.node.field_survey_content_pages.yml b/conf/cmi/field.storage.node.field_survey_content_pages.yml new file mode 100644 index 00000000..83208819 --- /dev/null +++ b/conf/cmi/field.storage.node.field_survey_content_pages.yml @@ -0,0 +1,21 @@ +uuid: 3a26e002-c1e2-4840-bb59-f29aea3489ea +langcode: en +status: true +dependencies: + module: + - node +_core: + default_config_hash: 4bzZX7tPEXAGP71HWAPeByOaqILWZoXmtBCjFWjrm2s +id: node.field_survey_content_pages +field_name: field_survey_content_pages +entity_type: node +type: entity_reference +settings: + target_type: node +module: core +locked: false +cardinality: -1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/conf/cmi/field.storage.node.field_survey_link.yml b/conf/cmi/field.storage.node.field_survey_link.yml new file mode 100644 index 00000000..2a642231 --- /dev/null +++ b/conf/cmi/field.storage.node.field_survey_link.yml @@ -0,0 +1,21 @@ +uuid: e9b298a6-f958-41b6-9c26-5fd7868e4120 +langcode: en +status: true +dependencies: + module: + - link + - node +_core: + default_config_hash: xr7_yR6YfdO7eML9XROtXbIDgHPw-h3zTdK2Ln6iz7g +id: node.field_survey_link +field_name: field_survey_link +entity_type: node +type: link +settings: { } +module: link +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/conf/cmi/language.content_settings.node.survey.yml b/conf/cmi/language.content_settings.node.survey.yml new file mode 100644 index 00000000..58cd44e5 --- /dev/null +++ b/conf/cmi/language.content_settings.node.survey.yml @@ -0,0 +1,18 @@ +uuid: c10c6c36-eccd-4664-bf08-bc58654eac6d +langcode: en +status: true +dependencies: + config: + - node.type.survey + module: + - content_translation +third_party_settings: + content_translation: + enabled: true +_core: + default_config_hash: k-YN8N-ocbCYxMId9l0JressnpIaJXCvHbUY265HLpU +id: node.survey +target_entity_type_id: node +target_bundle: survey +default_langcode: fi +language_alterable: true diff --git a/conf/cmi/language/fi/core.base_field_override.node.survey.promote.yml b/conf/cmi/language/fi/core.base_field_override.node.survey.promote.yml new file mode 100644 index 00000000..a29359aa --- /dev/null +++ b/conf/cmi/language/fi/core.base_field_override.node.survey.promote.yml @@ -0,0 +1,4 @@ +label: 'Näytetään etusivulla' +settings: + on_label: Kyllä + off_label: Ei diff --git a/conf/cmi/language/fi/core.base_field_override.node.survey.status.yml b/conf/cmi/language/fi/core.base_field_override.node.survey.status.yml new file mode 100644 index 00000000..b939375b --- /dev/null +++ b/conf/cmi/language/fi/core.base_field_override.node.survey.status.yml @@ -0,0 +1,4 @@ +label: Julkaistu +settings: + on_label: Kyllä + off_label: Ei diff --git a/conf/cmi/language/fi/core.base_field_override.node.survey.title.yml b/conf/cmi/language/fi/core.base_field_override.node.survey.title.yml new file mode 100644 index 00000000..93342164 --- /dev/null +++ b/conf/cmi/language/fi/core.base_field_override.node.survey.title.yml @@ -0,0 +1 @@ +label: 'Kyselyn otsikko' diff --git a/conf/cmi/language/fi/field.field.node.announcement.field_publish_externally.yml b/conf/cmi/language/fi/field.field.node.announcement.field_publish_externally.yml new file mode 100644 index 00000000..050d38a5 --- /dev/null +++ b/conf/cmi/language/fi/field.field.node.announcement.field_publish_externally.yml @@ -0,0 +1,4 @@ +label: 'Julkaise ulkoisella sivustolla ' +settings: + on_label: Päällä + off_label: 'Pois päältä' diff --git a/conf/cmi/language/fi/field.field.node.survey.body.yml b/conf/cmi/language/fi/field.field.node.survey.body.yml new file mode 100644 index 00000000..9d61cbc9 --- /dev/null +++ b/conf/cmi/language/fi/field.field.node.survey.body.yml @@ -0,0 +1 @@ +label: Sisältö diff --git a/conf/cmi/language/fi/field.field.node.survey.field_survey_content_pages.yml b/conf/cmi/language/fi/field.field.node.survey.field_survey_content_pages.yml new file mode 100644 index 00000000..6b1adffa --- /dev/null +++ b/conf/cmi/language/fi/field.field.node.survey.field_survey_content_pages.yml @@ -0,0 +1,2 @@ +label: 'Näytä sisältösivuilla' +description: 'Näytetään kaikilla sivuilla jos jätetään tyhjäksi.' diff --git a/conf/cmi/language/fi/field.field.node.survey.field_survey_link.yml b/conf/cmi/language/fi/field.field.node.survey.field_survey_link.yml new file mode 100644 index 00000000..d060ac6b --- /dev/null +++ b/conf/cmi/language/fi/field.field.node.survey.field_survey_link.yml @@ -0,0 +1 @@ +label: Linkki diff --git a/conf/cmi/language/fi/key.key.tfa.yml b/conf/cmi/language/fi/key.key.tfa.yml new file mode 100644 index 00000000..89839366 --- /dev/null +++ b/conf/cmi/language/fi/key.key.tfa.yml @@ -0,0 +1 @@ +label: 'Kaksivaiheinen tunnistautuminen (2FA)' diff --git a/conf/cmi/language/fi/node.type.survey.yml b/conf/cmi/language/fi/node.type.survey.yml new file mode 100644 index 00000000..d9e4a950 --- /dev/null +++ b/conf/cmi/language/fi/node.type.survey.yml @@ -0,0 +1,2 @@ +name: Kysely +description: 'Tämän sisältötyypin avulla voidaan näyttää kyselyitä eri sivuilla.' diff --git a/conf/cmi/language/fi/tfa.settings.yml b/conf/cmi/language/fi/tfa.settings.yml new file mode 100644 index 00000000..f6098159 --- /dev/null +++ b/conf/cmi/language/fi/tfa.settings.yml @@ -0,0 +1 @@ +help_text: 'Ota yhteyttä tukeen palauttaaksesi tunnuksesi käyttöön' diff --git a/conf/cmi/language/sv/core.base_field_override.node.survey.promote.yml b/conf/cmi/language/sv/core.base_field_override.node.survey.promote.yml new file mode 100644 index 00000000..1c731d26 --- /dev/null +++ b/conf/cmi/language/sv/core.base_field_override.node.survey.promote.yml @@ -0,0 +1,4 @@ +label: 'Visas på startsidan' +settings: + on_label: Ja + off_label: Nej diff --git a/conf/cmi/language/sv/core.base_field_override.node.survey.status.yml b/conf/cmi/language/sv/core.base_field_override.node.survey.status.yml new file mode 100644 index 00000000..97ac71a7 --- /dev/null +++ b/conf/cmi/language/sv/core.base_field_override.node.survey.status.yml @@ -0,0 +1,4 @@ +label: Publicerad +settings: + on_label: Ja + off_label: Nej diff --git a/conf/cmi/language/sv/field.field.node.announcement.field_publish_externally.yml b/conf/cmi/language/sv/field.field.node.announcement.field_publish_externally.yml new file mode 100644 index 00000000..83c1e838 --- /dev/null +++ b/conf/cmi/language/sv/field.field.node.announcement.field_publish_externally.yml @@ -0,0 +1,3 @@ +settings: + on_label: Ja + off_label: Nej diff --git a/conf/cmi/language/sv/field.field.node.survey.body.yml b/conf/cmi/language/sv/field.field.node.survey.body.yml new file mode 100644 index 00000000..7e34baf6 --- /dev/null +++ b/conf/cmi/language/sv/field.field.node.survey.body.yml @@ -0,0 +1 @@ +label: Body diff --git a/conf/cmi/language/sv/field.field.node.survey.field_survey_link.yml b/conf/cmi/language/sv/field.field.node.survey.field_survey_link.yml new file mode 100644 index 00000000..cb5c2337 --- /dev/null +++ b/conf/cmi/language/sv/field.field.node.survey.field_survey_link.yml @@ -0,0 +1 @@ +label: Länk diff --git a/conf/cmi/language/sv/tfa.settings.yml b/conf/cmi/language/sv/tfa.settings.yml new file mode 100644 index 00000000..9dcd2542 --- /dev/null +++ b/conf/cmi/language/sv/tfa.settings.yml @@ -0,0 +1,26 @@ +help_text: 'Kontakta supporten för att återställa din åtkomst' +mail: + tfa_enabled_configuration: + subject: 'Ditt [site:name]-konto har nu tvåfaktorsautentisering' + body: |- + [user:display-name], + + Tack för att du konfigurerade tvåfaktorsautentisering på ditt [site:name]konto! + + Denna extra nivå av säkerhet hjälper till att säkerställa att enbart du kan logga in på ditt konto. + + Om du någonsin förlorar den enhet som du konfigurerat detta med så bör du genast ta bort kopplingen till detta konto. + + -- + [site:name] teamet + tfa_disabled_configuration: + subject: 'Ditt [site:name] konto har inte längre tvåfaktorsautentisering' + body: |- + [user:display-name], + + Tvåfaktorsautentisering har stängts av på ditt [site:name] konto. + + Var vänlig och kontakta en administratör ifall det inte vara du som gjorde detta. + + -- + [site:name] teamet \ No newline at end of file diff --git a/conf/cmi/node.type.survey.yml b/conf/cmi/node.type.survey.yml new file mode 100644 index 00000000..1a55a53a --- /dev/null +++ b/conf/cmi/node.type.survey.yml @@ -0,0 +1,33 @@ +uuid: 1dc12a96-80cd-44c3-a566-f10debad1c49 +langcode: en +status: true +dependencies: + module: + - menu_ui + - scheduler +third_party_settings: + menu_ui: + available_menus: { } + parent: '' + scheduler: + expand_fieldset: when_required + fields_display_mode: vertical_tab + publish_enable: true + publish_past_date: error + publish_past_date_created: false + publish_required: false + publish_revision: false + publish_touch: true + show_message_after_update: true + unpublish_enable: true + unpublish_required: false + unpublish_revision: false +_core: + default_config_hash: pbMUCq9D1CxNNcFQ2S0S76xWDOgKC4WOgnFyazcRW3Y +name: Survey +type: survey +description: 'Content type for surveys that can be shown on different pages.' +help: null +new_revision: true +preview_mode: 1 +display_submitted: false diff --git a/conf/cmi/paragraphs.paragraphs_type.from_library.yml b/conf/cmi/paragraphs.paragraphs_type.from_library.yml index 47f587f7..81c13e0b 100644 --- a/conf/cmi/paragraphs.paragraphs_type.from_library.yml +++ b/conf/cmi/paragraphs.paragraphs_type.from_library.yml @@ -1,7 +1,10 @@ uuid: 4bd8a477-69fa-4b82-8723-3ce70a9d6f38 langcode: en status: true -dependencies: { } +dependencies: + enforced: + module: + - paragraphs_library _core: default_config_hash: OJUwL6xTTiHbXZy10swc5Fckkr7qhSm4b0nK3326LO8 id: from_library diff --git a/conf/cmi/system.action.user_add_role_action.survey_editor.yml b/conf/cmi/system.action.user_add_role_action.survey_editor.yml new file mode 100644 index 00000000..34e10f1f --- /dev/null +++ b/conf/cmi/system.action.user_add_role_action.survey_editor.yml @@ -0,0 +1,14 @@ +uuid: b14d0637-6028-4697-b62a-149e0134359d +langcode: en +status: true +dependencies: + config: + - user.role.survey_editor + module: + - user +id: user_add_role_action.survey_editor +label: 'Add the Survey editor role to the selected user(s)' +type: user +plugin: user_add_role_action +configuration: + rid: survey_editor diff --git a/conf/cmi/system.action.user_remove_role_action.survey_editor.yml b/conf/cmi/system.action.user_remove_role_action.survey_editor.yml new file mode 100644 index 00000000..4f70068b --- /dev/null +++ b/conf/cmi/system.action.user_remove_role_action.survey_editor.yml @@ -0,0 +1,14 @@ +uuid: 03f38fe2-b5d6-4bdb-93b0-16ac32f438c7 +langcode: en +status: true +dependencies: + config: + - user.role.survey_editor + module: + - user +id: user_remove_role_action.survey_editor +label: 'Remove the Survey editor role from the selected user(s)' +type: user +plugin: user_remove_role_action +configuration: + rid: survey_editor diff --git a/conf/cmi/user.role.anonymous.yml b/conf/cmi/user.role.anonymous.yml index 73273b89..930b58d5 100644 --- a/conf/cmi/user.role.anonymous.yml +++ b/conf/cmi/user.role.anonymous.yml @@ -26,5 +26,6 @@ permissions: - 'view helfi_news_groups external entity' - 'view helfi_news_neighbourhoods external entity' - 'view helfi_news_tags external entity' + - 'view helfi_surveys external entity' - 'view media' - 'view remote entities' diff --git a/conf/cmi/user.role.authenticated.yml b/conf/cmi/user.role.authenticated.yml index 20f15695..d98100b5 100644 --- a/conf/cmi/user.role.authenticated.yml +++ b/conf/cmi/user.role.authenticated.yml @@ -34,6 +34,7 @@ permissions: - 'view helfi_news_groups external entity' - 'view helfi_news_neighbourhoods external entity' - 'view helfi_news_tags external entity' + - 'view helfi_surveys external entity' - 'view media' - 'view remote entities' - 'view unpublished paragraphs' diff --git a/conf/cmi/user.role.survey_editor.yml b/conf/cmi/user.role.survey_editor.yml new file mode 100644 index 00000000..7ba1bc81 --- /dev/null +++ b/conf/cmi/user.role.survey_editor.yml @@ -0,0 +1,27 @@ +uuid: 9ec2282e-0675-4746-9892-cd37d2b6fc8a +langcode: en +status: true +dependencies: + config: + - node.type.survey + module: + - content_translation + - node + - publication_date +_core: + default_config_hash: CliaTgzCQcvNF9ot3u_EbHnydymXh8bvNgNFlSffj9s +id: survey_editor +label: 'Survey editor' +weight: 8 +is_admin: null +permissions: + - 'create survey content' + - 'delete any survey content' + - 'delete own survey content' + - 'delete survey revisions' + - 'edit any survey content' + - 'edit own survey content' + - 'revert survey revisions' + - 'set survey published on date' + - 'translate survey node' + - 'view survey revisions' diff --git a/docker/openshift/Dockerfile b/docker/openshift/Dockerfile index 0e4540ed..32d4a3a2 100644 --- a/docker/openshift/Dockerfile +++ b/docker/openshift/Dockerfile @@ -15,7 +15,7 @@ COPY docker/openshift/init.sh / RUN mkdir /crons COPY docker/openshift/crons/ /crons COPY docker/openshift/cron-entrypoint.sh /usr/local/bin/cron-entrypoint -RUN chmod +x /usr/local/bin/cron-entrypoint /crons/* +RUN chmod +x /crons/* /usr/local/bin/cron-entrypoint # Copy nginx overrides. COPY docker/openshift/custom.locations /etc/nginx/conf.d/custom.locations diff --git a/docker/openshift/cron-entrypoint.sh b/docker/openshift/cron-entrypoint.sh index a7e71ff2..b9f55232 100644 --- a/docker/openshift/cron-entrypoint.sh +++ b/docker/openshift/cron-entrypoint.sh @@ -36,7 +36,7 @@ do wait -n exit_code=$? if [[ "$exit_code" -ne 0 ]]; then - output_error_message "Subprocess failed with exit code $exit_code" + output_error_message "Cron subprocess failed with exit code $exit_code" exit 1 fi done diff --git a/tools/make/drupal.mk b/tools/make/drupal.mk index 5f81548c..e8c9a4a2 100644 --- a/tools/make/drupal.mk +++ b/tools/make/drupal.mk @@ -7,6 +7,7 @@ CLEAN_EXCLUDE += $(WEBROOT)/sites/default/files DRUPAL_DISABLE_MODULES ?= no DRUPAL_ENABLE_MODULES ?= no DRUPAL_PROFILE ?= minimal +DRUPAL_SITE_EMAIL ?= maintenance@druid.fi DRUPAL_SYNC_FILES ?= yes DRUPAL_SYNC_SOURCE ?= main DRUSH_RSYNC_MODE ?= Pakzu @@ -87,7 +88,7 @@ else endif drush-si: ## Site install $(call step,Do Drush site:install...\n) - $(call drush,si ${DRUSH_SI}) + $(call drush,si ${DRUSH_SI} --site-mail=$(DRUPAL_SITE_EMAIL)) PHONY += drush-deploy drush-deploy: ## Run Drush deploy