View source
<?php
namespace Drupal\course\Plugin;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\PluginBase;
use Drupal\Core\Plugin\PluginFormInterface;
use Drupal\Core\Session\AccountInterface;
abstract class CourseObjectAccessPluginBase extends PluginBase implements CourseObjectAccessInterface, PluginFormInterface {
private $courseObject;
private $type;
public function setType($type) {
$this->type = $type;
}
public function getObjectOptions() {
$options = array(
'',
);
foreach ($this
->getCourseObject()
->getCourse()
->getObjects() as $courseObject) {
if ($courseObject
->id() != $this
->getCourseObject()
->id()) {
$options[$courseObject
->id()] = $courseObject
->getTitle();
}
}
return $options;
}
public function setCourseObject($courseObject) {
$this->courseObject = $courseObject;
}
public function getCourseObject() {
return $this->courseObject;
}
public function getOptions() {
$plugins = $this
->getCourseObject()
->getOption('plugins');
if (isset($plugins['access'][$this->pluginId])) {
return $plugins['access'][$this->pluginId];
}
else {
return $this
->optionsDefinition();
}
}
public function getOption($option) {
$options = $this
->getOptions();
if (isset($options[$option])) {
return $options[$option];
}
else {
return NULL;
}
}
public function optionsDefinition() {
return array();
}
public function take($account) {
$alter = $this
->getOption('alter');
if ($this
->evaluate($account) xor !empty($alter['negate'])) {
if ($alter['access']) {
return FALSE;
}
}
return TRUE;
}
public function see($account) {
return TRUE;
}
public function view($account) {
return TRUE;
}
public function alterOptions(&$options, $account) {
$alter = $this
->getOption('alter');
if ($this
->evaluate($account) xor !empty($alter['negate'])) {
if (isset($alter['required']) && $alter['required'] != -1) {
$options['required'] = $alter['required'];
}
if (isset($alter['visible']) && $alter['visible'] != -1) {
$options['hidden'] = !$alter['visible'];
}
}
}
public function evaluate(AccountInterface $account) {
}
public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
}
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
}
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$config = $this
->getOptions();
$form['alter']['#weight'] = 100;
$form['alter']['#type'] = 'fieldset';
$form['alter']['#collapsed'] = FALSE;
$form['alter']['#collapsible'] = FALSE;
$form['alter']['#title'] = t('Modifications');
$form['alter']['#attributes']['class'][] = 'course-object-access-alter';
$form['alter']['negate'] = [
'#title' => t('If the above condition(s) are:'),
'#type' => 'select',
'#options' => [
0 => t('Met'),
1 => t('Not met'),
],
'#default_value' => isset($config['alter']['negate']) ? $config['alter']['negate'] : 1,
];
$form['alter']['access'] = [
'#title' => t('Block access'),
'#description' => t('This will prevent the user from accessing the course object.'),
'#type' => 'checkbox',
'#default_value' => isset($config['alter']['access']) ? $config['alter']['access'] : 0,
];
$form['alter']['required'] = [
'#title' => t('Required'),
'#description' => t('Change the "Required" property.'),
'#type' => 'radios',
'#options' => [
'-1' => t('No change'),
1 => t('Make required'),
0 => t('Make optional'),
],
'#default_value' => isset($config['alter']['required']) ? $config['alter']['required'] : -1,
];
$form['alter']['visible'] = [
'#title' => t('Visibility'),
'#description' => t('Change the "Visible" property.'),
'#type' => 'radios',
'#options' => [
'-1' => t('No change'),
1 => t('Visible'),
0 => t('Hidden'),
],
'#default_value' => isset($config['alter']['visible']) ? $config['alter']['visible'] : -1,
];
return $form;
}
}