accessibility-8.x-1.x-dev/modules/accessibility_content/accessibility_content.module
modules/accessibility_content/accessibility_content.module
<?php
use Drupal\field\FieldInfo;
use Drupal\field\Field;
/**
* Implements hook_menu().
*/
function accessibility_content_menu() {
$items = array();
$items['admin/config/accessibility/content'] = array(
'title' => 'Content',
'description' => 'Enable or disable toggle for users to view content alerts and manage language of content toggle.',
'route_name' => 'accessibility_content_admin_form',
);
return $items;
}
/**
* Implements hook_form_FORM_ID_alter().
*/
function accessibility_content_form_field_ui_field_instance_edit_form_alter(&$form, $form_state) {
if (in_array($form['#field']['type'], array('text_with_summary'))) {
$form['instance']['settings']['accessibility_content'] = array(
'#type' => 'checkbox',
'#title' => t('Check this field for accessibility'),
'#description' => t('Allow appropriate users to check this field for accessibility'),
'#default_value' => (isset($form_state['instance']->settings['accessibility_content'])) ?
$form_state['instance']->settings['accessibility_content'] :
FALSE,
);
$form['instance']['settings']['accessibility_content_block_submit'] = array(
'#type' => 'checkboxes',
'#title' => t('Block saving content if there are any errors that are:'),
'#options' => array('severe' => t('Severe'),
'moderate' => t('Moderate'),
'suggestion' => t('Suggestion')
),
'#default_value' => (isset($form_state['instance']->settings['accessibility_content_block_submit'])) ?
$form_state['instance']->settings['accessibility_content_block_submit'] :
FALSE,
);
}
}
/**
* Implements hook_field_info_alter().
*/
function accessibility_content_field_info_alter(&$info) {
foreach ($info as $field_type => &$field_type_info) {
if (in_array($field_type, array('text_with_summary'))) {
$field_type_info['settings'] += array('accessibility_content' => FALSE, 'accessibility_content_block_submit' => FALSE);
$field_type_info['instance_settings'] += array('accessibility_content' => FALSE, 'accessibility_content_block_submit' => FALSE);
}
}
}
/**
* Implements hook_field_attach_view_alter().
*/
function accessibility_content_field_attach_view_alter(&$output, $context) {
if (Drupal::currentUser()->hasPermission('check content for accessibility')) {
foreach ($output as $field_key => $field) {
if (is_array($field) && isset($field['#field_name'])) {
$field = Field::fieldInfo()->getInstance($field['#entity_type'], $field['#bundle'], $field['#field_name']);
if (isset($field->settings['accessibility_content']) && $field->settings['accessibility_content']) {
module_load_include('inc', 'accessibility_content', 'accessibility_content');
accessibility_content_init();
$output[$field_key]['#pre_render'][] = '_accessibility_content_field_pre_render';
}
}
}
}
}
/**
* Implements field_widget_form_alter().
*/
function accessibility_content_field_widget_form_alter(&$element, &$form_state, $context) {
if (!isset($element['#type']) || !in_array($element['#type'], array('text_format'))) {
return;
}
$field = field_info_instance($element['#entity_type'], $element['#field_name'], $element['#bundle']);
$options = array();
if (isset($field['accessibility_content_block_submit'])) {
foreach ($field['accessibility_content_block_submit'] as $severity => $active) {
if ($active) {
$options[] = $severity;
}
}
}
if (!count($options)) {
return;
}
drupal_add_js(array('accessibility_content_form_message' => variable_get('accessibility_disabled_form_message', t('You have been prevented from submitting this form because of the following accessibility errors.'))), 'setting');
module_load_include('inc', 'accessibility_content');
accessibility_content_init(array('form' => TRUE));
$element['#attributes'] = (is_array($element['#attributes']['class'])) ? $element['#attributes']['class'] : array();
$element['#attributes']['class'][] = 'accessible-content-check-form';
$element['#attributes']['data-accessible-content-severity'] = implode(',', $options);
}
/**
* Implements hook_permission().
*/
function accessibility_content_permission() {
return array(
'check content for accessibility' => array(
'title' => t('Check content for accessibility'),
'description' => t('Show accessibility problems in content the user has access to view.')
),
);
}