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

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc