Skip to content
Snippets Groups Projects
Commit 0739993e authored by Steven Ayers's avatar Steven Ayers
Browse files

Issue #3485116 by bluegeek9: Content Standard Categories

parent 881bf09e
No related branches found
No related tags found
1 merge request!17Resolve #3485116 "Content standard categories"
Pipeline #425402 failed
Showing
with 481 additions and 58 deletions
langcode: en
status: true
dependencies:
config:
- field.storage.knowledge_quality.field_title_accurate
module:
- knowledge
id: knowledge_quality.knowledge_quality.field_title_accurate
field_name: field_title_accurate
entity_type: knowledge_quality
bundle: knowledge_quality
label: 'Title accurate'
description: ''
required: false
translatable: false
default_value:
-
value: 0
default_value_callback: ''
settings:
on_label: 'Yes'
off_label: 'No'
field_type: boolean
langcode: en
status: true
dependencies:
module:
- knowledge
id: knowledge_quality.field_title_accurate
field_name: field_title_accurate
entity_type: knowledge_quality
type: boolean
settings: { }
module: core
locked: false
cardinality: 1
translatable: true
indexes: { }
persist_with_no_fields: false
custom_storage: false
categories: "article|Article\r\ncontent|Content"
uuid: 9983e3d0-849f-4582-9734-3bbdba0c4525
langcode: en
status: true
dependencies:
config:
- field.field.knowledge_quality.knowledge_quality.field_complete
- field.field.knowledge_quality.knowledge_quality.field_content_clear
- field.field.knowledge_quality.knowledge_quality.field_hyperlinks
- field.field.knowledge_quality.knowledge_quality.field_metadata
- field.field.knowledge_quality.knowledge_quality.field_title
- field.field.knowledge_quality.knowledge_quality.field_unique
module:
- knowledge
id: knowledge_quality.knowledge_quality.default
targetEntityType: knowledge_quality
bundle: knowledge_quality
mode: default
content:
field_complete:
type: boolean_checkbox
weight: 1
region: content
settings:
display_label: true
third_party_settings: { }
field_content_clear:
type: boolean_checkbox
weight: 2
region: content
settings:
display_label: true
third_party_settings: { }
field_hyperlinks:
type: boolean_checkbox
weight: 4
region: content
settings:
display_label: true
third_party_settings: { }
field_metadata:
type: boolean_checkbox
weight: 5
region: content
settings:
display_label: true
third_party_settings: { }
field_title:
type: boolean_checkbox
weight: 3
region: content
settings:
display_label: true
third_party_settings: { }
field_unique:
type: boolean_checkbox
weight: 0
region: content
settings:
display_label: true
third_party_settings: { }
hidden:
user_id: true
uuid: b1c2af70-633d-40e2-8a00-0120404c60ce
langcode: en
status: true
dependencies:
config:
- field.field.knowledge_quality.knowledge_quality.field_complete
- field.field.knowledge_quality.knowledge_quality.field_content_clear
- field.field.knowledge_quality.knowledge_quality.field_hyperlinks
- field.field.knowledge_quality.knowledge_quality.field_metadata
- field.field.knowledge_quality.knowledge_quality.field_title
- field.field.knowledge_quality.knowledge_quality.field_unique
module:
- knowledge
id: knowledge_quality.knowledge_quality.default
targetEntityType: knowledge_quality
bundle: knowledge_quality
mode: default
content:
field_complete:
type: boolean
label: inline
settings:
format: yes-no
format_custom_false: ''
format_custom_true: ''
third_party_settings: { }
weight: 1
region: content
field_content_clear:
type: boolean
label: inline
settings:
format: yes-no
format_custom_false: ''
format_custom_true: ''
third_party_settings: { }
weight: 2
region: content
field_hyperlinks:
type: boolean
label: inline
settings:
format: yes-no
format_custom_false: ''
format_custom_true: ''
third_party_settings: { }
weight: 4
region: content
field_metadata:
type: boolean
label: inline
settings:
format: yes-no
format_custom_false: ''
format_custom_true: ''
third_party_settings: { }
weight: 5
region: content
field_title:
type: boolean
label: inline
settings:
format: yes-no
format_custom_false: ''
format_custom_true: ''
third_party_settings: { }
weight: 3
region: content
field_unique:
type: boolean
label: inline
settings:
format: default
format_custom_false: ''
format_custom_true: ''
third_party_settings: { }
weight: 0
region: content
hidden:
search_api_excerpt: true
user_id: true
uuid: 173aaa7a-9b58-472a-974f-f065bf008a9b
langcode: en
status: true
dependencies:
config:
- field.storage.knowledge_quality.field_content_complete
- field.storage.knowledge_quality.field_complete
module:
- knowledge
id: knowledge_quality.knowledge_quality.field_content_complete
field_name: field_content_complete
third_party_settings:
knowledge:
quality_category: article
id: knowledge_quality.knowledge_quality.field_complete
field_name: field_complete
entity_type: knowledge_quality
bundle: knowledge_quality
label: 'Content Complete'
label: Complete
description: ''
required: false
translatable: false
default_value:
-
value: 0
default_value: { }
default_value_callback: ''
settings:
on_label: 'Yes'
off_label: 'No'
on_label: 'On'
off_label: 'Off'
field_type: boolean
uuid: a428aaa6-0b88-46e4-a11e-1bf215c24786
langcode: en
status: true
dependencies:
config:
- field.storage.knowledge_quality.field_content_clear
module:
- knowledge
third_party_settings:
knowledge:
quality_category: article
id: knowledge_quality.knowledge_quality.field_content_clear
field_name: field_content_clear
entity_type: knowledge_quality
bundle: knowledge_quality
label: 'Content Clear'
description: ''
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings:
on_label: 'On'
off_label: 'Off'
field_type: boolean
uuid: 954f6aaf-1e67-47a8-a612-71c34bba53af
langcode: en
status: true
dependencies:
config:
- field.storage.knowledge_quality.field_meets_standard
- field.storage.knowledge_quality.field_hyperlinks
module:
- knowledge
id: knowledge_quality.knowledge_quality.field_meets_standard
field_name: field_meets_standard
third_party_settings:
knowledge:
quality_category: content
id: knowledge_quality.knowledge_quality.field_hyperlinks
field_name: field_hyperlinks
entity_type: knowledge_quality
bundle: knowledge_quality
label: 'Article meets content standard'
label: 'Hyperlinks Valid'
description: ''
required: false
translatable: false
default_value:
-
value: 0
default_value: { }
default_value_callback: ''
settings:
on_label: 'Yes'
off_label: 'No'
on_label: 'On'
off_label: 'Off'
field_type: boolean
uuid: 3f521933-3fc6-4118-8e7f-3f6730d21f87
langcode: en
status: true
dependencies:
config:
- field.storage.knowledge_quality.field_links_valid
- field.storage.knowledge_quality.field_metadata
module:
- knowledge
id: knowledge_quality.knowledge_quality.field_links_valid
field_name: field_links_valid
third_party_settings:
knowledge:
quality_category: content
id: knowledge_quality.knowledge_quality.field_metadata
field_name: field_metadata
entity_type: knowledge_quality
bundle: knowledge_quality
label: 'Links in article valid'
label: 'Metadata Correct'
description: ''
required: false
translatable: false
default_value:
-
value: 0
default_value: { }
default_value_callback: ''
settings:
on_label: 'Yes'
off_label: 'No'
on_label: 'On'
off_label: 'Off'
field_type: boolean
uuid: 409db086-8f8b-494f-aedf-00531e602ca4
langcode: en
status: true
dependencies:
config:
- field.storage.knowledge_quality.field_content_understandable
- field.storage.knowledge_quality.field_title
module:
- knowledge
id: knowledge_quality.knowledge_quality.field_content_understandable
field_name: field_content_understandable
third_party_settings:
knowledge:
quality_category: content
id: knowledge_quality.knowledge_quality.field_title
field_name: field_title
entity_type: knowledge_quality
bundle: knowledge_quality
label: 'Content understandable'
label: 'Title Relates to Article'
description: ''
required: false
translatable: false
default_value:
-
value: 0
default_value: { }
default_value_callback: ''
settings:
on_label: 'Yes'
off_label: 'No'
on_label: 'On'
off_label: 'Off'
field_type: boolean
uuid: c0544e83-4758-45b4-ad33-7c3f02d49fd9
langcode: en
status: true
dependencies:
......@@ -5,17 +6,20 @@ dependencies:
- field.storage.knowledge_quality.field_unique
module:
- knowledge
third_party_settings:
knowledge:
quality_category: article
_core:
default_config_hash: 44PriSvziPhQ_9FXnh42v7jc-ujXQwf4SR8sXLJiNkE
id: knowledge_quality.knowledge_quality.field_unique
field_name: field_unique
entity_type: knowledge_quality
bundle: knowledge_quality
label: 'Article Unique'
label: Unique
description: ''
required: false
translatable: false
default_value:
-
value: 0
default_value: { }
default_value_callback: ''
settings:
on_label: 'Yes'
......
uuid: cbd6c790-0479-426d-a7cd-1861a3976c4c
langcode: en
status: true
dependencies:
module:
- knowledge
id: knowledge_quality.field_links_valid
field_name: field_links_valid
id: knowledge_quality.field_complete
field_name: field_complete
entity_type: knowledge_quality
type: boolean
settings: { }
......
uuid: 2f1a3508-fe71-4e41-ac0f-835fde709dfd
langcode: en
status: true
dependencies:
module:
- knowledge
id: knowledge_quality.field_content_clear
field_name: field_content_clear
entity_type: knowledge_quality
type: boolean
settings: { }
module: core
locked: false
cardinality: 1
translatable: true
indexes: { }
persist_with_no_fields: false
custom_storage: false
uuid: d3257378-4acf-4dbc-9bd3-5d000be59284
langcode: en
status: true
dependencies:
module:
- knowledge
id: knowledge_quality.field_content_complete
field_name: field_content_complete
id: knowledge_quality.field_hyperlinks
field_name: field_hyperlinks
entity_type: knowledge_quality
type: boolean
settings: { }
......
uuid: 0e2fd57f-d456-4f87-9b47-5f5e62d4da22
langcode: en
status: true
dependencies:
module:
- knowledge
id: knowledge_quality.field_meets_standard
field_name: field_meets_standard
id: knowledge_quality.field_metadata
field_name: field_metadata
entity_type: knowledge_quality
type: boolean
settings: { }
......
uuid: 293ad1ad-0b4f-4c60-b1af-c508547ec58b
langcode: en
status: true
dependencies:
module:
- knowledge
id: knowledge_quality.field_content_understandable
field_name: field_content_understandable
id: knowledge_quality.field_title
field_name: field_title
entity_type: knowledge_quality
type: boolean
settings: { }
......
uuid: 5aa923ee-6e16-41d8-8cd2-89dfc72033c2
langcode: en
status: true
dependencies:
module:
- knowledge
_core:
default_config_hash: ZSagYckrnQUxI7nZY6brLBP3v0vIL1kXlxTNlGTRxMg
id: knowledge_quality.field_unique
field_name: field_unique
entity_type: knowledge_quality
......
......@@ -266,7 +266,7 @@ block.settings.knowledge_block:
knowledge.competency.settings:
type: config_object
label: 'Knowledge settings'
label: 'Knowledge Competency settings'
mapping:
roles:
type: sequence
......@@ -287,13 +287,31 @@ knowledge.competency.settings:
type: string
label: 'Promotion'
knowledge.quality.settings:
type: config_object
label: 'Knowledge Quality settings'
mapping:
categories:
type: string
field.field.*.*.*.third_party.knowledge:
type: mapping
type: config_entity
label: 'Competency field settings'
mapping:
competency_role:
label: 'The role the competency field belongs to'
type: string
quality_category:
label: 'The quality category'
type: string
field.field.*.knowledge_quality.*.third_party.knowledge:
type: mapping
label: 'Competency field settings'
mapping:
quality_category:
label: 'The quality category'
type: string
field.formatter.settings.knowledge_competency:
type: mapping
......
......@@ -1212,3 +1212,61 @@ function knowledge_views_post_execute(ViewExecutable $view) {
$view->result = SequenceService::fill($view->result);
}
/**
* Implements hook_form_FORM_ID_alter().
*/
function knowledge_form_field_config_edit_form_alter(&$form, FormStateInterface $form_state) {
$entity = $form['#entity'];
$entity_type = $entity->getEntityTypeId();
if ($entity_type != 'knowledge_quality') {
return;
}
$field_config = $form_state->getFormObject()->getEntity();
$field_type = $field_config->getType();
if ($field_type != 'boolean') {
return;
}
$quality_settings = \Drupal::config('knowledge.quality.settings');
$quality_categories = $quality_settings->get('categories');
$options_pipe = explode(PHP_EOL, $quality_categories);
$options = [
'_none' => t('None'),
];
foreach ($options_pipe as $option) {
$option = explode('|', $option);
$options[$option[0]] = $option[1] ?? $option[0];
}
$form['third_party_settings']['knowledge'] = [
'#type' => 'details',
'#title' => t('Knowledge Quality'),
'#open' => TRUE,
];
$form['third_party_settings']['knowledge']['quality_category'] = [
'#type' => 'select',
'#title' => t('Category'),
'#description' => t('Enter a custom setting value.'),
'#default_value' => $field_config->getThirdPartySetting('knowledge', 'quality_category', '_none'),
'#options' => $options,
];
$form['actions']['submit']['#submit'][] = 'knowledge_quality_field_config_edit_form_submit';
}
/**
* Submit handler for the knowledge field config edit form.
*/
function knowledge_quality_field_config_edit_form_submit(&$form, FormStateInterface $form_state) {
$field_config = $form_state->getFormObject()->getEntity();
$quality_category = $form_state->getValue(['third_party_settings', 'knowledge', 'quality_category']);
$field_config->setThirdPartySetting('knowledge', 'quality_category', $quality_category);
}
......@@ -4,7 +4,10 @@ namespace Drupal\knowledge\Form;
use Drupal\Core\Entity\ContentEntityForm;
use Drupal\Core\Form\FormStateInterface;
use Drupal\knowledge\Helper\QualityField;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Session\AccountProxyInterface;
use Drupal\Core\Config\ImmutableConfig;
/**
* Form controller for Quality edit forms.
......@@ -20,14 +23,46 @@ class KnowledgeQualityForm extends ContentEntityForm {
*/
protected $account;
/**
* The field definitions.
*
* @var array
*/
protected $definitions;
/**
* The knowledge settings config.
*
* @var \Drupal\Core\Config\ImmutableConfig
*/
protected $settings;
/**
* The Quality form.
*
* @param \Drupal\Core\Session\AccountProxyInterface $current_user
* The current user account.
* @param array $definitions
* The field definitions.
* @param \Drupal\Core\Config\ImmutableConfig $settings
* The quality settings.
*/
public function __construct(AccountProxyInterface $current_user, array $definitions, ImmutableConfig $settings) {
$this->account = $current_user;
$this->definitions = $definitions;
$this->settings = $settings;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
// Instantiates this form class.
$instance = parent::create($container);
$instance->account = $container->get('current_user');
return $instance;
return new static(
$container->get('current_user'),
$container->get('entity_field.manager')
->getFieldDefinitions('knowledge_quality', 'knowledge_quality'),
$container->get('config.factory')->get('knowledge.quality.settings'),
);
}
/**
......@@ -37,9 +72,63 @@ class KnowledgeQualityForm extends ContentEntityForm {
$form = parent::buildForm($form, $form_state);
unset($form['actions']['delete']);
$this->addFieldSets($form);
$this->addFields($form);
return $form;
}
/**
* Add fieldsets to the form.
*
* @param array $form
* The form array.
*/
protected function addFieldSets(array &$form) {
$quality_categories = $this->settings->get('categories');
$options_pipe = explode(PHP_EOL, $quality_categories);
$options = [];
foreach ($options_pipe as $option) {
$option = explode('|', $option);
$options[$option[0]] = trim($option[1] ?? $option[0]);
}
foreach ($options as $category => $title) {
$form[$category] = [
'#type' => 'fieldset',
'#title' => $title,
];
}
return $form;
}
/**
* Add fields to the fieldsets.
*
* @param array $form
* The form array.
*/
protected function addFields(array &$form) {
$category_fields = QualityField::categoryFields($this->definitions);
foreach ($category_fields as $category => $fields) {
foreach ($fields as $field_name) {
if (!isset($form[$field_name])) {
continue;
}
$form[$category][$field_name] = $form[$field_name];
unset($form[$field_name]);
}
}
}
/**
* {@inheritdoc}
*/
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment