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