accessibility-8.x-1.x-dev/lib/Drupal/accessibility/Form/AccessibilityTestsImportForm.php
lib/Drupal/accessibility/Form/AccessibilityTestsImportForm.php
<?php
/**
* @file
* Contains \Drupal\accessibility\Form\AccessibilityTestsImportForm.
*/
namespace Drupal\accessibility\Form;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Cache\Cache;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Entity\DatabaseStorageControllerNG;
/**
* Provides a deletion confirmation form for accessibility test.
*/
class AccessibilityTestsImportForm extends FormBase {
/**
* The accessibility test storage controller.
*
* @var \Drupal\accessibility\AccessibilityTestStorageControllerInterface
*/
protected $testImportController;
/**
* Constructs a new testDelete object.
*
*/
public function __construct() {
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static();
}
/**
* {@inheritdoc}
*/
public function getFormID() {
return 'accessibility_tests_list';
}
private function getEnabledTests() {
static $tests;
if ($tests) {
return $tests;
}
$tests = \Drupal::database()->select('accessibility_test', 'a')
->fields('a', array('quail_name', 'name'))
->execute()
->fetchAllKeyed();
return $tests;
}
public function buildForm(array $form, array &$form_state) {
$library_path = libraries_get_path('quail');
$options = array();
$form = array();
$tests = module_invoke_all('accessibility_tests', TRUE);
$guidelines = module_invoke_all('accessibility_guidelines', TRUE);
$session = isset($_SESSION['accessibility_tests_filter']) ? $_SESSION['accessibility_tests_filter'] : array();
$form['filter'] = array(
'#type' => 'fieldset',
'#title' => t('Filter tests'),
'#collapsible' => TRUE,
);
$guideline_options = array();
foreach($guidelines as $k => $guideline) {
$guideline_options[$k] = $guideline['title'];
}
$form['filter']['guideline'] = array(
'#type' => 'select',
'#title' => t('Guideline'),
'#options' => $guideline_options,
'#default_value' => isset($session['guideline']) ? $session['guideline'] : '',
'#empty_option' => t('-- Any --'),
);
$categories = array();
foreach($tests as $test) {
foreach($test['tags'] as $tag) {
$categories[$tag] = $tag;
}
}
ksort($categories);
$form['filter']['category'] = array(
'#type' => 'select',
'#title' => t('Category'),
'#options' => $categories,
'#default_value' => isset($session['category']) ? $session['category'] : '',
'#empty_option' => t('-- Any --'),
);
$form['filter']['severity'] = array(
'#type' => 'select',
'#title' => t('Severity'),
'#options' => array(
ACCESSIBILITY_TEST_SEVERE => t('Severe'),
ACCESSIBILITY_TEST_MODERATE => t('Moderate'),
ACCESSIBILITY_TEST_SUGGESTION => t('Suggestion'),
),
'#default_value' => isset($session['severity']) ? $session['severity'] : '',
'#empty_option' => t('-- Any --'),
);
$form['filter']['filter'] = array(
'#type' => 'submit',
'#value' => t('Filter'),
);
$form['filter']['reset'] = array(
'#type' => 'submit',
'#value' => t('Reset'),
);
$enabled_tests = $this->getEnabledTests();
foreach ($tests as $testname => $test) {
if (!isset($enabled_tests[$testname]) &&
(!isset($session['category']) || !$session['category'] || in_array($session['category'], $test['tags'])) &&
(!isset($session['guideline']) || !$session['guideline'] || in_array($testname, $guidelines[$session['guideline']]['tests'])) &&
(!isset($session['severity']) || !$session['severity'] || $test['severity'] == $session['severity'])) {
$options[$testname] = array('test' => $test['title'],
'severity' => t(ucfirst($test['severity'])),
'categories' => implode(', ', $test['tags']),
);
}
}
$header = array('test' => t('Test'),
'categories' => t('Categories'),
'severity' => t('Severity'),
);
$form['tests'] = array(
'#type' => 'tableselect',
'#title' => t('Available accessibility tests'),
'#options' => $options,
'#header' => $header,
'#default_value' => $enabled_tests,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Import tests'),
);
return $form;
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, array &$form_state) {
if($form_state['triggering_element']['#value'] == t('Filter')) {
$_SESSION['accessibility_tests_filter'] = array(
'guideline' => $form_state['values']['guideline'],
'category' => $form_state['values']['category'],
'severity' => $form_state['values']['severity'],
);
return;
}
if($form_state['triggering_element']['#value'] == t('Reset')) {
$_SESSION['accessibility_tests_filter'] = array();
return;
}
$tests = module_invoke_all('accessibility_tests', TRUE);
$enabled_tests = $this->getEnabledTests();
$batch = array(
'operations' => array(),
'finished' => 'accessibility_tests_list_done',
'title' => t('Importing tests'),
'init_message' => t('Starting to import tests.'),
'progress_message' => t('Imported @current out of @total.'),
'error_message' => t('An error occurred while importing tests.'),
'file' => drupal_get_path('module', 'accessibility') . '/accessibility.admin.inc',
);
foreach ($form_state['values']['tests'] as $test => $enabled) {
if ($enabled && !isset($enabled_tests[$test])) {
$batch['operations'][] = array('_accessibility_create_test_from_quail', array($test, $tests[$test]));
}
}
batch_set($batch);
}
}