accessibility-8.x-1.x-dev/modules/accessibility_reporting/accessibility_reporting.module
modules/accessibility_reporting/accessibility_reporting.module
<?php
use Drupal\field\FieldInfo;
use Drupal\field\Field;
use Drupal\Core\Template\Attribute;
/**
* Implements hook_permission().
*/
function accessibility_reporting_permission() {
return array('report acessibility results' => array(
'title' => t('User will report accessibility problems'),
'description' => t('When a user views a page, all accessibility problems are reported back.'),
),
'view acessibility reports' => array(
'title' => t('User can view accessibility reports'),
'description' => t('Users can read the results of accessibility reports.'),
),
);
}
/**
* Implements hook_form_FORM_ID_alter().
*/
function accessibility_reporting_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_reporting'] = array(
'#type' => 'checkbox',
'#title' => t('Report on accessibility problems in this field.'),
'#description' => t('When checked, every time this field is viewed accessibility problems are reported back.'),
'#default_value' => (isset($form['#instance']['accessibility_reporting'])) ?
$form['#instance']['accessibility_reporting'] :
FALSE,
);
}
}
/**
* Implements hook_field_info_alter().
*/
function accessibility_reporting_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_reporting' => FALSE);
$field_type_info['instance_settings'] += array('accessibility_reporting' => FALSE);
}
}
}
/**
* Implements hook_field_attach_view_alter().
*/
function accessibility_reporting_field_attach_view_alter(&$output, $context) {
if (Drupal::currentUser()->hasPermission('report accessibility results')) {
$js_set = drupal_static(__FUNCTION__);
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_reporting']) && $field->settings['accessibility_reporting']) {
if(!$js_set) {
drupal_add_js(drupal_get_path('module' , 'accessibility_reporting') . '/js/accessibility_reporting.js');
accessibility_load();
$js_set = TRUE;
}
$output[$field_key]['#pre_render'][] = '_accessibility_reporting_field_pre_render';
}
}
}
}
}
/**
* Pre-render callback to wrap fields in a span.
*/
function _accessibility_reporting_field_pre_render($element) {
$element['#prefix'] = (isset($element['#prefix'])) ? $element['#prefix'] : '';
$element['#suffix'] = (isset($element['#suffix'])) ? $element['#suffix'] : '';
$info = entity_get_info($element['#entity_type']);
$attributes = array('class' => array('accessibility-report-field'),
'data-field' => $element['#field_name'],
'data-entity-type' => $element['#entity_type'],
'data-bundle' => $element['#bundle'],
'data-entity-id' => $element['#object']->id()
);
$element['#prefix'] = '<span ' . new Attribute($attributes) . '>' . $element['#prefix'];
$element['#suffix'] .= '</span>';
return $element;
}
