Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
454 changes: 325 additions & 129 deletions composer.lock

Large diffs are not rendered by default.

3 changes: 0 additions & 3 deletions conf/cmi/config_ignore.settings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@ mode: simple
ignored_config_entities:
- 'easy_breadcrumb.settings:home_segment_title'
- 'hdbt_admin_tools.site_settings:site_settings'
- 'helfi_rekry_content.job_listings:hakuvahti_tos_checkbox_label'
- 'helfi_rekry_content.job_listings:hakuvahti_tos_link_text'
- 'helfi_rekry_content.job_listings:hakuvahti_tos_link_url'
- 'helfi_rekry_content.job_listings:redirect_403_page'
- 'helfi_rekry_content.job_listings:search_page'
- 'system.site:page.front'
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,3 @@ helfi_rekry_content.job_listings:
type: text
label: 'City description text'
translatable: true
hakuvahti_tos_checkbox_label:
type: label
label: 'Hakuvahti terms of service checkbox label'
translatable: true
hakuvahti_tos_link_text:
type: label
label: 'Hakuvahti terms of service link text'
translatable: true
hakuvahti_tos_link_url:
type: label
label: 'Hakuvahti terms of service URL'
translatable: true
hakuvahti_instructions_link_url:
type: label
label: 'Hakuvahti detailed instructions link URL'
translatable: true
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
declare(strict_types=1);

use Drupal\Core\Entity\TranslatableInterface;
use Drupal\language\ConfigurableLanguageManagerInterface;
use Drupal\media\Entity\Media;
use Drupal\migrate\MigrateExecutable;
use Drupal\migrate\MigrateMessage;
Expand Down Expand Up @@ -490,3 +491,62 @@ function helfi_rekry_content_update_9011(): void {
->dropTable($table_name);
}
}

/**
* Implements hook_update_dependencies().
*/
function helfi_rekry_content_update_dependencies(): array {
return [
'helfi_rekry_content' => [
11001 => [
'helfi_hakuvahti' => 11001,
],
],
];
}

/**
* UHF-12723: Move hakuvahti settings to hakuvahti module.
*/
function helfi_rekry_content_update_11001(): void {
$rekryConfig = \Drupal::configFactory()->getEditable('helfi_rekry_content.job_listings');

if ($rekryConfig->isNew()) {
return;
}

$languageManager = \Drupal::languageManager();
assert($languageManager instanceof ConfigurableLanguageManagerInterface);

$config = \Drupal::configFactory()
->getEditable('helfi_hakuvahti.settings');

$config
->set('hakuvahti_tos_link_url', $rekryConfig->get('hakuvahti_tos_link_url'))
->set('hakuvahti_instructions_link_url', $rekryConfig->get('hakuvahti_instructions_link_url'))
->save();

foreach (['fi', 'sv'] as $langcode) {
$original = $languageManager->getLanguageConfigOverride($langcode, 'helfi_rekry_content.job_listings');
$override = $languageManager->getLanguageConfigOverride($langcode, 'helfi_hakuvahti.settings');

$override
->set('hakuvahti_tos_link_url', $original->get('hakuvahti_tos_link_url'))
->set('hakuvahti_instructions_link_url', $original->get('hakuvahti_instructions_link_url'))
->save();

$original
->clear('hakuvahti_tos_checkbox_label')
->clear('hakuvahti_tos_link_text')
->clear('hakuvahti_tos_link_url')
->clear('hakuvahti_instructions_link_url')
->save();
}

$rekryConfig
->clear('hakuvahti_tos_checkbox_label')
->clear('hakuvahti_tos_link_text')
->clear('hakuvahti_tos_link_url')
->clear('hakuvahti_instructions_link_url')
->save();
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@

namespace Drupal\helfi_rekry_content\EventSubscriber;

use Drupal\Component\Utility\Unicode;
use Drupal\helfi_hakuvahti\Event\SubscriptionAlterEvent;
use Drupal\helfi_hakuvahti\Event\SubscriptionEvent;
use Drupal\helfi_hakuvahti\HakuvahtiRequest;
use Drupal\helfi_rekry_content\Service\HakuvahtiTracker;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
* {@inheritdoc}
* Hakuvahti event subscriber.
*/
class HakuvahtiSubscriptionSubscriber implements EventSubscriberInterface {
readonly class HakuvahtiSubscriptionSubscriber implements EventSubscriberInterface {

/**
* {@inheritdoc}
Expand Down Expand Up @@ -43,20 +44,11 @@ public function hakuvahtiAlterSubscription(SubscriptionAlterEvent $event): void
$request->lang,
includeKeyword: TRUE
);
$data = $request->getServiceRequestData();

// Extract free search term if present, limit to 10 characters.
$freeSearchTerm = $filters['vapaa-sana'][0] ?? '';
unset($filters['vapaa-sana']);
if (mb_strlen($freeSearchTerm) > 10) {
$freeSearchTerm = mb_substr($freeSearchTerm, 0, 10) . '...';
}

$parts = [];
if ($freeSearchTerm) {
$parts[] = $freeSearchTerm;
}
$parts[] = Unicode::truncate($filters['vapaa-sana'][0] ?? '', 10, add_ellipsis: TRUE);

unset($filters['vapaa-sana']);
foreach ($filters as $items) {
foreach ($items as $item) {
if ($item) {
Expand All @@ -65,8 +57,8 @@ public function hakuvahtiAlterSubscription(SubscriptionAlterEvent $event): void
}
}

$event->setHakuvahtiRequest(new HakuvahtiRequest(array_merge($data, [
'search_description' => implode(', ', $parts),
$event->setHakuvahtiRequest(new HakuvahtiRequest(array_merge((array) $request, [
'searchDescription' => implode(', ', array_filter($parts)),
])));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,32 +87,6 @@ public function buildForm(array $form, FormStateInterface $form_state): array {
'#description' => $this->t('This description text will be added to all job listings.'),
];

$form['job_listings']['hakuvahti_tos_checkbox_label'] = [
'#type' => 'textfield',
'#title' => $this->t('Hakuvahti terms of service checkbox label'),
'#default_value' => $siteConfig->get('hakuvahti_tos_checkbox_label'),
'#description' => $this->t('Label for the terms of service checkbox.'),
];

$form['job_listings']['hakuvahti_tos_link_text'] = [
'#type' => 'textfield',
'#title' => $this->t('Hakuvahti terms of service link text'),
'#default_value' => $siteConfig->get('hakuvahti_tos_link_text'),
];

$form['job_listings']['hakuvahti_tos_link_url'] = [
'#type' => 'textfield',
'#title' => $this->t('Hakuvahti terms of service URL'),
'#default_value' => $siteConfig->get('hakuvahti_tos_link_url'),
'#description' => $this->t('URL for the webpage or pdf to the Hakuvahti terms of service.'),
];

$form['job_listings']['hakuvahti_instructions_link_url'] = [
'#type' => 'textfield',
'#title' => $this->t('More detailed instructions on how to use saved searches'),
'#default_value' => $siteConfig->get('hakuvahti_instructions_link_url'),
];

return parent::buildForm($form, $form_state);
}

Expand All @@ -125,10 +99,6 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
->set('redirect_403_page', $form_state->getValue('redirect_403_page'))
->set('city_description_title', $form_state->getValue('city_description_title'))
->set('city_description_text', $form_state->getValue('city_description_text'))
->set('hakuvahti_tos_checkbox_label', $form_state->getValue('hakuvahti_tos_checkbox_label'))
->set('hakuvahti_tos_link_text', $form_state->getValue('hakuvahti_tos_link_text'))
->set('hakuvahti_tos_link_url', $form_state->getValue('hakuvahti_tos_link_url'))
->set('hakuvahti_instructions_link_url', $form_state->getValue('hakuvahti_instructions_link_url'))
->save();
parent::submitForm($form, $form_state);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php

declare(strict_types=1);

namespace Drupal\helfi_rekry_content\Hook;

use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Hook\Attribute\Hook;
use Drupal\Core\Language\LanguageInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\helfi_hakuvahti\DrupalSettings;

/**
* Theme hooks for job listings.
*/
final readonly class JobListingTheme {

public function __construct(
private LanguageManagerInterface $languageManager,
private EntityTypeManagerInterface $entityTypeManager,
private DrupalSettings $drupalSettings,
) {
}

/**
* Implements hook_preprocess_HOOK().
*/
#[Hook('preprocess_paragraph__job_search')]
public function preprocessParagraph(array &$variables): void {
/** @var \Drupal\paragraphs\Entity\Paragraph $paragraph */
$paragraph = $variables['paragraph'];
$paragraph_type = $paragraph->getType();
$langcode = $this->languageManager
->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)
->getId();

if ($paragraph_type == 'job_search') {
if ($search_result_page_nid = $paragraph->get('field_job_search_result_page')->getString()) {

$entity = $this->entityTypeManager
->getStorage('node')
->load($search_result_page_nid);

if ($entity->hasTranslation($langcode)) {
$entity = $entity->getTranslation($langcode);
}

$url = $entity->toUrl()->toString();
$variables['#attached']['drupalSettings']['helfi_rekry_job_search']['results_page_path'] = $url;
}
}

// Apply hakuvahti settings.
$this->drupalSettings->applyTo($variables);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@

namespace Drupal\Tests\helfi_rekry_content\Kernel;

use Drupal\KernelTests\KernelTestBase;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;

/**
* Tests file name transliteration.
*
* @group helfi_rekry_content
*/
class FilenameTest extends KernelTestBase {
#[Group('helfi_rekry_content')]
#[RunTestsInSeparateProcesses]
class FilenameTest extends RekryKernelTestBase {

/**
* {@inheritdoc}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,48 +7,70 @@
use Drupal\helfi_hakuvahti\Event\SubscriptionAlterEvent;
use Drupal\helfi_hakuvahti\HakuvahtiRequest;
use Drupal\helfi_rekry_content\Service\HakuvahtiTracker;
use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\helfi_rekry_content\Kernel\RekryKernelTestBase;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
use Prophecy\Argument;
use Psr\EventDispatcher\EventDispatcherInterface;

/**
* Tests hakuvahti event subscriber.
*/
class HakuvahtiEventSubscriberTest extends KernelTestBase {
#[RunTestsInSeparateProcesses]
class HakuvahtiEventSubscriberTest extends RekryKernelTestBase {

/**
* {@inheritdoc}
* Data provider for search description tests.
*/
protected static $modules = [
'helfi_rekry_content',
];
public static function searchDescriptionDataProvider(): array {
return [
'filters are joined' => [
[['a', 'b', 'c'], ['d']],
'a, b, c, d',
],
'vapaa-sana is included' => [
['vapaa-sana' => ['search'], 'other' => ['filter1', 'filter2']],
'search, filter1, filter2',
],
'empty filters' => [
[],
'',
],
'user-provided description is replaced' => [
[['safe-filter']],
'safe-filter',
],
'vapaa-sana is truncated' => [
['vapaa-sana' => ['some keyword']],
'some keyw…',
],
];
}

/**
* Tests alter event.
* Tests that searchDescription is computed correctly from filters.
*/
public function testHakuvahtiEventSubscriber(): void {
#[DataProvider('searchDescriptionDataProvider')]
public function testSearchDescription(array $filters, string $expected): void {
$tracker = $this->prophesize(HakuvahtiTracker::class);

$tracker->parseQuery(Argument::any(), Argument::any(), 'sv', Argument::any())
$tracker->parseQuery(Argument::any(), Argument::any(), Argument::any(), Argument::any())
->shouldBeCalled()
->willReturn([['a', 'b', 'c'], ['d']]);

->willReturn($filters);
$this->container->set(HakuvahtiTracker::class, $tracker->reveal());

$alterEvent = new SubscriptionAlterEvent(new HakuvahtiRequest([
$event = new SubscriptionAlterEvent(new HakuvahtiRequest([
'email' => 'valid@email.fi',
'lang' => 'sv',
'site_id' => 'rekry',
'siteId' => 'rekry',
'query' => '?query=123&parameters=4567',
'elastic_query' => 'this-is_the_base64_encoded_elasticsearch_query',
'search_description' => 'This, is the query filters string, separated, by comma',
'elasticQuery' => 'this-is_the_base64_encoded_elasticsearch_query',
'searchDescription' => 'Original description',
]));

$dispatcher = $this->container->get(EventDispatcherInterface::class);
$dispatcher->dispatch($alterEvent);
$dispatcher->dispatch($event);

// Alter event replaces the search description provided by the user.
$this->assertEquals('a, b, c, d', $alterEvent->getHakuvahtiRequest()->searchDescription);
$this->assertEquals($expected, $event->getHakuvahtiRequest()->searchDescription);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,16 @@
use Drupal\Tests\helfi_api_base\Traits\ApiTestTrait;
use Drupal\Tests\helfi_media\Kernel\HelfiMediaKernelTestBase;
use Drupal\Tests\taxonomy\Traits\TaxonomyTestTrait;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
use Prophecy\Argument;
use Symfony\Component\DependencyInjection\Loader\Configurator\Traits\PropertyTrait;

/**
* Tests file name transliteration.
*
* @group helfi_rekry_content
*/
#[RunTestsInSeparateProcesses]
#[Group('helfi_rekry_content')]
class HakuvahtiSubscribeTest extends HelfiMediaKernelTestBase {

use ApiTestTrait;
Expand All @@ -38,6 +40,7 @@ class HakuvahtiSubscribeTest extends HelfiMediaKernelTestBase {
'taxonomy',
'options',
'readonly_field_widget',
'helfi_hakuvahti',
'helfi_rekry_content',
];

Expand Down
Loading