diff --git a/config/sync/flag.flag.os2loop_subscription_term.yml b/config/sync/flag.flag.os2loop_subscription_term.yml index 7bb91dc2d..ed2f5789c 100644 --- a/config/sync/flag.flag.os2loop_subscription_term.yml +++ b/config/sync/flag.flag.os2loop_subscription_term.yml @@ -7,6 +7,7 @@ dependencies: id: os2loop_subscription_term label: 'Subscription term' bundles: + - os2loop_profession - os2loop_subject entity_type: taxonomy_term global: false @@ -19,7 +20,7 @@ unflag_message: '' unflag_denied_text: '' weight: 0 flag_type: 'entity:taxonomy_term' -link_type: ajax_link +link_type: reload flagTypeConfig: show_in_links: { } show_as_field: true diff --git a/config/sync/os2loop_subscriptions.settings.yml b/config/sync/os2loop_subscriptions.settings.yml index 496c8207d..6102be95d 100644 --- a/config/sync/os2loop_subscriptions.settings.yml +++ b/config/sync/os2loop_subscriptions.settings.yml @@ -14,3 +14,6 @@ favourite_node_types: os2loop_section_page: os2loop_section_page os2loop_external: 0 os2loop_page: 0 +subscription_required_taxonomy: + os2loop_profession: os2loop_profession + os2loop_subject: 0 diff --git a/config/sync/views.view.os2loop_subscription_term.yml b/config/sync/views.view.os2loop_subscription_term.yml index ab53b2547..3925586e5 100644 --- a/config/sync/views.view.os2loop_subscription_term.yml +++ b/config/sync/views.view.os2loop_subscription_term.yml @@ -4,8 +4,10 @@ status: true dependencies: config: - core.entity_view_mode.taxonomy_term.list_display + - taxonomy.vocabulary.os2loop_profession - taxonomy.vocabulary.os2loop_subject module: + - os2loop_subscriptions - taxonomy - user id: os2loop_subscription_term @@ -22,7 +24,7 @@ display: display_plugin: default position: 0 display_options: - title: 'Subscription term' + title: 'Subscription subject' fields: vid: id: vid @@ -282,26 +284,145 @@ display: - 'languages:language_content' - 'languages:language_interface' - user.permissions - tags: - - 'config:core.entity_view_display.taxonomy_term.os2loop_profession.default' - - 'config:core.entity_view_display.taxonomy_term.os2loop_profession.list_display' - - 'config:core.entity_view_display.taxonomy_term.os2loop_subject.default' - - 'config:core.entity_view_display.taxonomy_term.os2loop_subject.list_display' + tags: { } block_1: id: block_1 - display_title: Block + display_title: 'Subscription subject - Block' display_plugin: block position: 1 display_options: - display_extenders: { } + display_description: '' + display_extenders: + views_flag_refresh: + flags: { } + noscrolltop: 0 + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - user.permissions + tags: { } + block_2: + id: block_2 + display_title: 'Subscription profession - Block' + display_plugin: block + position: 1 + display_options: + title: 'Subscription profession' + filters: + status: + id: status + table: taxonomy_term_field_data + field: status + entity_type: taxonomy_term + entity_field: status + plugin_id: boolean + value: '1' + group: 1 + expose: + operator: '' + operator_limit_selection: false + operator_list: { } + vid: + id: vid + table: taxonomy_term_field_data + field: vid + relationship: none + group_type: group + admin_label: '' + entity_type: taxonomy_term + entity_field: vid + plugin_id: bundle + operator: in + value: + os2loop_profession: os2loop_profession + group: 1 + exposed: false + expose: + operator_id: '' + label: '' + description: '' + use_operator: false + operator: '' + operator_limit_selection: false + operator_list: { } + identifier: '' + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + reduce: false + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + webform_submission_serial_exists: + id: webform_submission_serial_exists + table: taxonomy_term_data + field: webform_submission_serial_exists + relationship: none + group_type: group + admin_label: '' + entity_type: taxonomy_term + plugin_id: taxonomy_term_user_has_profession + operator: '=' + value: '' + group: 1 + exposed: false + expose: + operator_id: '' + label: '' + description: '' + use_operator: false + operator: '' + operator_limit_selection: false + operator_list: { } + identifier: '' + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + placeholder: '' + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + filter_groups: + operator: AND + groups: + 1: AND + defaults: + title: false + filters: false + filter_groups: false + display_description: '' + display_extenders: + views_flag_refresh: + flags: { } + noscrolltop: 0 cache_metadata: max-age: -1 contexts: - 'languages:language_content' - 'languages:language_interface' - user.permissions - tags: - - 'config:core.entity_view_display.taxonomy_term.os2loop_profession.default' - - 'config:core.entity_view_display.taxonomy_term.os2loop_profession.list_display' - - 'config:core.entity_view_display.taxonomy_term.os2loop_subject.default' - - 'config:core.entity_view_display.taxonomy_term.os2loop_subject.list_display' + tags: { } diff --git a/web/profiles/custom/os2loop/modules/os2loop_subscriptions/os2loop_subscriptions.module b/web/profiles/custom/os2loop/modules/os2loop_subscriptions/os2loop_subscriptions.module index 0ad70f731..c75ba1e39 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_subscriptions/os2loop_subscriptions.module +++ b/web/profiles/custom/os2loop/modules/os2loop_subscriptions/os2loop_subscriptions.module @@ -5,6 +5,10 @@ * OS2loop subscriptions. */ +use Drupal\Core\Entity\EntityInterface; +use Drupal\Core\Session\AccountInterface; +use Drupal\flag\FlagInterface; + /** * Implements hook_theme(). * @@ -27,3 +31,32 @@ function os2loop_subscriptions_theme($existing, $type, $theme, $path) { function os2loop_subscriptions_os2loop_settings_is_granted(string $attribute, $object = NULL): bool { return Drupal::service('os2loop_subscriptions.helper')->isGranted($attribute, $object); } + +/** + * Implements hook_views_data(). + * + * @phpstan-return array + */ +function os2loop_subscriptions_views_data(): array { + $data['taxonomy_term_data']['webform_submission_serial_exists'] = [ + 'title' => t('User has profession filter'), + 'help' => t('Provides a filter for users profession.'), + 'filter' => [ + 'title' => t('User has profession'), + 'field' => 'id', + 'id' => 'taxonomy_term_user_has_profession', + 'allow empty' => TRUE, + ], + ]; + + return $data; +} + +/** + * Implements + * + * @see \Drupal\os2loop_subscriptions\Helper\Helper::flagActionAcess() + */ +function os2loop_subscriptions_flag_action_access($action, FlagInterface $flag, AccountInterface $account, EntityInterface $flaggable = NULL) { + return Drupal::service('os2loop_subscriptions.helper')->flagActionAccess($action, $flag, $account, $flaggable); +} \ No newline at end of file diff --git a/web/profiles/custom/os2loop/modules/os2loop_subscriptions/os2loop_subscriptions.services.yml b/web/profiles/custom/os2loop/modules/os2loop_subscriptions/os2loop_subscriptions.services.yml index 3b0962844..9815fd75d 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_subscriptions/os2loop_subscriptions.services.yml +++ b/web/profiles/custom/os2loop/modules/os2loop_subscriptions/os2loop_subscriptions.services.yml @@ -4,6 +4,7 @@ services: arguments: - '@Drupal\os2loop_settings\Settings' - '@database' + - '@entity_type.manager' os2loop_subscriptions.flag_subscriber: class: Drupal\os2loop_subscriptions\EventSubscriber\SubscriptionFlagSubscriber diff --git a/web/profiles/custom/os2loop/modules/os2loop_subscriptions/src/Form/SettingsForm.php b/web/profiles/custom/os2loop/modules/os2loop_subscriptions/src/Form/SettingsForm.php index 68c48b67b..121e76d46 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_subscriptions/src/Form/SettingsForm.php +++ b/web/profiles/custom/os2loop/modules/os2loop_subscriptions/src/Form/SettingsForm.php @@ -2,7 +2,10 @@ namespace Drupal\os2loop_subscriptions\Form; +use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException; +use Drupal\Component\Plugin\Exception\PluginNotFoundException; use Drupal\Core\Config\ConfigFactoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; @@ -33,7 +36,7 @@ final class SettingsForm extends ConfigFormBase { /** * Constructor. */ - public function __construct(ConfigFactoryInterface $config_factory, Settings $settings) { + public function __construct(ConfigFactoryInterface $config_factory, Settings $settings, private EntityTypeManagerInterface $entityTypeManager) { parent::__construct($config_factory); $this->settings = $settings; } @@ -44,7 +47,8 @@ public function __construct(ConfigFactoryInterface $config_factory, Settings $se public static function create(ContainerInterface $container) { return new static( $container->get('config.factory'), - $container->get(Settings::class) + $container->get(Settings::class), + $container->get('entity_type.manager') ); } @@ -75,6 +79,8 @@ public function buildForm(array $form, FormStateInterface $form_state) { return $nodeType->label(); }, $nodeTypes); + $subscriptionTaxonomyRequiredOptions = $this->getSubscriptionTaxonomyRequiredOptions(); + $form['subscribe_node_types'] = [ '#type' => 'checkboxes', '#title' => $this->t('Enable subscribe on content types'), @@ -91,6 +97,14 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#default_value' => $config->get('favourite_node_types') ?: [], ]; + $form['subscription_required_taxonomy'] = [ + '#type' => 'checkboxes', + '#title' => $this->t('Enable required subscription for taxonomies'), + '#description' => $this->t('Ensures that the user is always subscribed to at least one term of this taxonomy.'), + '#options' => $subscriptionTaxonomyRequiredOptions, + '#default_value' => $config->get('subscription_required_taxonomy') ?: [], + ]; + return parent::buildForm($form, $form_state); } @@ -101,6 +115,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) { $this->configFactory->getEditable(static::SETTINGS_NAME) ->set('subscribe_node_types', $form_state->getValue('subscribe_node_types')) ->set('favourite_node_types', $form_state->getValue('favourite_node_types')) + ->set('subscription_required_taxonomy', $form_state->getValue('subscription_required_taxonomy')) ->save(); drupal_flush_all_caches(); @@ -108,4 +123,26 @@ public function submitForm(array &$form, FormStateInterface $form_state) { parent::submitForm($form, $form_state); } + /** + * Get taxonomy options from flagged taxonomies. + * + * @return array + * Options for the taxonomy required list. + */ + private function getSubscriptionTaxonomyRequiredOptions(): array { + $options = []; + $enabledTaxonomies = $this->settings->getConfig('flag.flag.os2loop_subscription_term')->get('bundles'); + foreach ($enabledTaxonomies as $taxonomy) { + try { + $vocabulary = $this->entityTypeManager->getStorage('taxonomy_vocabulary') + ->load($taxonomy); + $options[$taxonomy] = $vocabulary->label(); + } + catch (InvalidPluginDefinitionException | PluginNotFoundException $e) { + } + } + + return $options; + } + } diff --git a/web/profiles/custom/os2loop/modules/os2loop_subscriptions/src/Helper/Helper.php b/web/profiles/custom/os2loop/modules/os2loop_subscriptions/src/Helper/Helper.php index 4eafaf626..ef3e805a6 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_subscriptions/src/Helper/Helper.php +++ b/web/profiles/custom/os2loop/modules/os2loop_subscriptions/src/Helper/Helper.php @@ -2,7 +2,12 @@ namespace Drupal\os2loop_subscriptions\Helper; +use Drupal\Core\Access\AccessResult; use Drupal\Core\Database\Connection; +use Drupal\Core\Entity\EntityInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\Core\Session\AccountInterface; +use Drupal\flag\FlagInterface; use Drupal\node\NodeInterface; use Drupal\os2loop_settings\Settings; use Drupal\os2loop_subscriptions\Form\SettingsForm; @@ -29,7 +34,7 @@ class Helper { /** * Constructor. */ - public function __construct(Settings $settings, Connection $database) { + public function __construct(Settings $settings, Connection $database, private EntityTypeManagerInterface $entityTypeManager) { $this->config = $settings->getConfig(SettingsForm::SETTINGS_NAME); $this->database = $database; } @@ -73,4 +78,76 @@ public function getSubscribedUserIds(Term $term): array { ->fetchCol(); } + /** + * Change access result for flag action. + * + * @param string $action + * The flag action flag/unflag. + * @param \Drupal\flag\FlagInterface $flag + * The flag being checked. + * @param \Drupal\Core\Session\AccountInterface $account + * A user account. + * @param \Drupal\Core\Entity\EntityInterface|null $flaggable + * The actual flagging. + * + * @return \Drupal\Core\Access\AccessResult + * The access result. + * + * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException + * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException + */ + public function flagActionAccess(string $action, FlagInterface $flag, AccountInterface $account, EntityInterface $flaggable = NULL): AccessResult { + // Only check unflagging on os2loop_subscription_terms. + if ('os2loop_subscription_term' !== $flag->id() || 'flag' === $action) { + return AccessResult::neutral(); + } + + $subscriptionRequiredTaxonomies = $this->config->get('subscription_required_taxonomy'); + + // Only act if subscription_required_taxonomy is set for this term. + if (!in_array($flaggable->bundle(), $subscriptionRequiredTaxonomies)) { + return AccessResult::neutral(); + } + + // Don't allow last unflagging within a taxonomy term bundle. + if (1 == count($this->getTermSubscriptionsOnType($flaggable->bundle(), $account))) { + return AccessResult::forbidden(); + } + + // Fallback. + return AccessResult::neutral(); + } + + /** + * Get term subscriptions for a taxonomy bundle and a user. + * + * @param string $bundle + * The bundle. + * @param \Drupal\Core\Session\AccountInterface $account + * A user account. + * + * @return array + * List of subscription flaggings. + * + * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException + * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException + */ + public function getTermSubscriptionsOnType(string $bundle, AccountInterface $account): array { + $terms = $this->entityTypeManager->getStorage('taxonomy_term') + ->getQuery() + ->condition('vid', $bundle, '=') + ->accessCheck() + ->execute(); + + $flaggings = $this->entityTypeManager->getStorage('flagging') + ->getQuery() + ->condition('entity_id', $terms, 'IN') + ->condition('uid', $account->id(), '=') + ->condition('flag_id', 'os2loop_subscription_term', '=') + ->accessCheck() + ->execute(); + + return $flaggings; + } + } diff --git a/web/profiles/custom/os2loop/modules/os2loop_subscriptions/src/Plugin/views/filter/UserHasProfessionFilter.php b/web/profiles/custom/os2loop/modules/os2loop_subscriptions/src/Plugin/views/filter/UserHasProfessionFilter.php new file mode 100644 index 000000000..937da9058 --- /dev/null +++ b/web/profiles/custom/os2loop/modules/os2loop_subscriptions/src/Plugin/views/filter/UserHasProfessionFilter.php @@ -0,0 +1,124 @@ + $configuration + */ + public function __construct( + $configuration, + $plugin_id, + $plugin_definition, + Connection $connection, + protected AccountInterface $currentUser, + protected EntityTypeManagerInterface $entityTypeManager, + ) { + parent::__construct($configuration, $plugin_id, $plugin_definition, $connection); + } + + /** + * {@inheritdoc} + * + * @phpstan-param array $configuration + */ + public static function create(ContainerInterface $container, $configuration, $plugin_id, $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('database'), + $container->get('current_user'), + $container->get('entity_type.manager') + ); + } + + /** + * {@inheritdoc} + */ + public function query(): void { + $this->ensureMyTable(); + + /** @var \Drupal\views\Plugin\views\query\Sql $query */ + $query = $this->query; + $table = array_key_first($query->tables); + + $user = $this->currentUser; + + if ($user) { + // Terms value can't be empty. + $defaultTerms = [0]; + $activeTermSubscriptions = $this->getActiveTermSubscriptions(); + $userProfessionsTermSubscriptions = $this->getTermSubscriptionsFromUserProfessions(); + + // Merge all sources for terms. + $termsValues = array_merge($defaultTerms, $activeTermSubscriptions, $userProfessionsTermSubscriptions); + + $query->addWhere($this->options['group'], $table . '.tid', $termsValues, 'IN'); + } + } + + /** + * Get terms that the user has subscribed to. + * + * @return array + * A list of term ids. + * + * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException + * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException + */ + private function getActiveTermSubscriptions(): array { + $termIds = []; + + $flags = $this->entityTypeManager->getStorage('flagging')->loadByProperties([ + 'uid' => $this->currentUser->id(), + 'flag_id' => 'os2loop_subscription_term', + 'entity_type' => 'taxonomy_term', + ]); + + foreach ($flags as $flag) { + $termIds[] = $flag->entity_id->value; + } + + return $termIds; + } + + /** + * Get terms from the users professions field. + * + * @return array + * A list of term ids. + * + * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException + * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException + */ + private function getTermSubscriptionsFromUserProfessions(): array { + $termIds = []; + + $user = $this->entityTypeManager->getStorage('user')->load($this->currentUser->id()); + $userProfessions = $user->os2loop_user_professions->getValue(); + + foreach ($userProfessions as $profession) { + $termIds[] = $profession['target_id']; + } + + return $termIds; + } + +} diff --git a/web/profiles/custom/os2loop/modules/os2loop_subscriptions/templates/os2loop-subscriptions-user.html.twig b/web/profiles/custom/os2loop/modules/os2loop_subscriptions/templates/os2loop-subscriptions-user.html.twig index 7f54e5dd8..2cdc0cda5 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_subscriptions/templates/os2loop-subscriptions-user.html.twig +++ b/web/profiles/custom/os2loop/modules/os2loop_subscriptions/templates/os2loop-subscriptions-user.html.twig @@ -4,12 +4,31 @@ * Display lists of user subscriptions. */ #} +{% set enabledBundles = drupal_config('flag.flag.os2loop_subscription_term', 'bundles') %} +{% set requiredBundles = drupal_config('os2loop_subscriptions.settings', 'subscription_required_taxonomy') %} +

{{ 'Content subscriptions'|t }}

{{ drupal_view('os2loop_subscriptions_node', 'block_1') }}

{{ 'Taxonomy term subscriptions'|t }}

-
- {{ drupal_view('os2loop_subscription_term', 'block_1') }} -
+{% if 'os2loop_profession' in enabledBundles %} +
+

{{ 'Professions'|t }}

+ {% if 'os2loop_profession' in requiredBundles %} +
{{ 'Note! At least one subscription is required for this group.' }}
+ {% endif %} + {{ drupal_view('os2loop_subscription_term', 'block_2') }} +
+ +{% endif %} +{% if 'os2loop_subject' in enabledBundles %} +
+

{{ 'Subjects'|t }}

+ {{ drupal_view('os2loop_subscription_term', 'block_1') }} + {% if 'os2loop_subject' in requiredBundles %} + {{ 'Note! At least one subscription is required for this group.' }} + {% endif %} +
+{% endif %} \ No newline at end of file diff --git a/web/profiles/custom/os2loop/modules/os2loop_user_login/os2loop_user_login.module b/web/profiles/custom/os2loop/modules/os2loop_user_login/os2loop_user_login.module index 9f700a40d..be393c8ed 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_user_login/os2loop_user_login.module +++ b/web/profiles/custom/os2loop/modules/os2loop_user_login/os2loop_user_login.module @@ -55,3 +55,10 @@ function os2loop_user_login_openid_connect_userinfo_alter(array &$userinfo, arra function os2loop_user_login_menu_links_discovered_alter(&$links) { Drupal::service('os2loop_user_login.helper')->menuLinksDiscoveredAlter($links); } + +/** + * Implements hook_openid_connect_userinfo_save(). + */ +function os2loop_user_login_openid_connect_userinfo_save(UserInterface $account, array $context) { + Drupal::service('os2loop_user_login.helper')->openidConnectUserinfoSave($account, $context); +} diff --git a/web/profiles/custom/os2loop/modules/os2loop_user_login/src/Form/SettingsForm.php b/web/profiles/custom/os2loop/modules/os2loop_user_login/src/Form/SettingsForm.php index 5dd65143b..1f4a7b6b3 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_user_login/src/Form/SettingsForm.php +++ b/web/profiles/custom/os2loop/modules/os2loop_user_login/src/Form/SettingsForm.php @@ -113,9 +113,36 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#description' => $this->t('If checked, the "Log out" item in the user menu will be hidden.'), ]; + $form['map_oidc_profession_claim_to_term'] = [ + '#type' => 'checkbox', + '#title' => $this->t('Map profession claim to term'), + '#default_value' => $config->get('map_oidc_profession_claim_to_term'), + '#description' => $this->t('If checked, the users Profession field will be set by OIDC on login. This requires a profession claim to be mapped. I.e $config["os2loop_user_login.settings"]["claims_mapping"]["taxonomy"]["user_professions"] = "professions"'), + '#states' => [ + 'visible' => [ + ':input[name="default_login_method"]' => ['value' => 'oidc'], + ], + ], + ]; + return parent::buildForm($form, $form_state); } + /** + * {@inheritdoc} + */ + public function validateForm(array &$form, FormStateInterface $form_state): void { + if ($form_state->getValue('map_oidc_profession_claim_to_term')) { + $config = $this->settings->getConfig(SettingsForm::SETTINGS_NAME); + + if (empty($config->get('claims_mapping.taxonomy.user_professions'))) { + $form_state->setErrorByName('map_oidc_profession_claim_to_term', 'Missing configuration $config["os2loop_user_login.settings"]["claims_mapping"]["taxonomy"]["user_professions"]'); + } + } + + parent::validateForm($form, $form_state); + } + /** * {@inheritdoc} */ @@ -125,6 +152,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) { ->set('show_oidc_login', $form_state->getValue('show_oidc_login')) ->set('default_login_method', $form_state->getValue('default_login_method')) ->set('hide_logout_menu_item', $form_state->getValue('hide_logout_menu_item')) + ->set('map_oidc_profession_claim_to_term', $form_state->getValue('map_oidc_profession_claim_to_term')) ->save(); drupal_flush_all_caches(); diff --git a/web/profiles/custom/os2loop/modules/os2loop_user_login/src/Helper/Helper.php b/web/profiles/custom/os2loop/modules/os2loop_user_login/src/Helper/Helper.php index 20d81f120..26984b845 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_user_login/src/Helper/Helper.php +++ b/web/profiles/custom/os2loop/modules/os2loop_user_login/src/Helper/Helper.php @@ -219,6 +219,17 @@ public function menuLinksDiscoveredAlter(&$links) { } } + /** + * Implements hook_openid_connect_userinfo_save(). + */ + public function openidConnectUserinfoSave($account, $context) { + // If profession mapping is enabled we save the professions as a taxonomy + // term in professions taxonomy. + if ($this->config->get('map_oidc_profession_claim_to_term')) { + $a = 1; + } + } + /** * Check if a user has empty required fields. *