Skip to content

Feature/required professions #357

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 4 commits into
base: main
Choose a base branch
from
Draft
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
3 changes: 2 additions & 1 deletion config/sync/flag.flag.os2loop_subscription_term.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ dependencies:
id: os2loop_subscription_term
label: 'Subscription term'
bundles:
- os2loop_profession
- os2loop_subject
entity_type: taxonomy_term
global: false
Expand All @@ -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
Expand Down
3 changes: 3 additions & 0 deletions config/sync/os2loop_subscriptions.settings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
147 changes: 134 additions & 13 deletions config/sync/views.view.os2loop_subscription_term.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -22,7 +24,7 @@ display:
display_plugin: default
position: 0
display_options:
title: 'Subscription term'
title: 'Subscription subject'
fields:
vid:
id: vid
Expand Down Expand Up @@ -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: { }
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
* OS2loop subscriptions.
*/

use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\flag\FlagInterface;

/**
* Implements hook_theme().
*
Expand All @@ -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<string, mixed>
*/
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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ services:
arguments:
- '@Drupal\os2loop_settings\Settings'
- '@database'
- '@entity_type.manager'

os2loop_subscriptions.flag_subscriber:
class: Drupal\os2loop_subscriptions\EventSubscriber\SubscriptionFlagSubscriber
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
Expand All @@ -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')
);
}

Expand Down Expand Up @@ -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'),
Expand All @@ -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);
}

Expand All @@ -101,11 +115,34 @@ 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();

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;
}

}
Loading
Loading