You are here

abstract class CourseObjectAccessPluginBase in Course 3.x

Same name and namespace in other branches
  1. 8.3 src/Plugin/CourseObjectAccessPluginBase.php \Drupal\course\Plugin\CourseObjectAccessPluginBase
  2. 8.2 src/Plugin/CourseObjectAccessPluginBase.php \Drupal\course\Plugin\CourseObjectAccessPluginBase

Base class for Course object access plugins.

Hierarchy

Expanded class hierarchy of CourseObjectAccessPluginBase

4 files declare their use of CourseObjectAccessPluginBase
CourseObject.php in src/Entity/CourseObject.php
CourseObjectAccessConditional.php in src/Plugin/course/CourseObjectAccess/CourseObjectAccessConditional.php
CourseObjectAccessGrade.php in src/Plugin/course/CourseObjectAccess/CourseObjectAccessGrade.php
CourseObjectAccessTiming.php in src/Plugin/course/CourseObjectAccess/CourseObjectAccessTiming.php

File

src/Plugin/CourseObjectAccessPluginBase.php, line 13

Namespace

Drupal\course\Plugin
View source
abstract class CourseObjectAccessPluginBase extends PluginBase implements CourseObjectAccessInterface, PluginFormInterface {
  private $courseObject;
  private $type;
  public function setType($type) {
    $this->type = $type;
  }

  /**
   * Helper method to get possible objects.
   */
  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();
  }

  /**
   * Can the user take the object?
   *
   * @param type $account
   * @return boolean
   */
  public function take($account) {

    // Block access if conditions evaluate.
    $alter = $this
      ->getOption('alter');
    if ($this
      ->evaluate($account) xor !empty($alter['negate'])) {
      if ($alter['access']) {
        return FALSE;
      }
    }
    return TRUE;
  }

  /**
   * Can the user see the object in the outline?
   *
   * @param type $account
   * @return boolean
   */
  public function see($account) {
    return TRUE;
  }

  /**
   * Can the user view the object but not interact?
   *
   * @param type $account
   * @return boolean
   */
  public function view($account) {
    return TRUE;
  }

  /**
   * Alter a property during display/tracking. Does not affect the stored
   * options. This is called in CourseObject::getReadOnlyOptions().
   *
   * @param array $property
   *   Array of object options.
   *
   * @param object $account
   *   User account to evaluate.
   */
  public function alterOptions(&$options, $account) {
    $alter = $this
      ->getOption('alter');
    if ($this
      ->evaluate($account) xor !empty($alter['negate'])) {

      // Conditions passed. Apply modifications.
      if (isset($alter['required']) && $alter['required'] != -1) {
        $options['required'] = $alter['required'];
      }
      if (isset($alter['visible']) && $alter['visible'] != -1) {
        $options['hidden'] = !$alter['visible'];
      }
    }
  }

  /**
   * Evaluate the access conditions.
   *
   * @param AccountInterface $account
   *
   * @return bool
   */
  public function evaluate(AccountInterface $account) {
  }
  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
  }
  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
  }

  /**
   * Define the form to be used in the object access settings area.
   *
   * {@inheritdoc}
   */
  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;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CourseObjectAccessPluginBase::$courseObject private property
CourseObjectAccessPluginBase::$type private property
CourseObjectAccessPluginBase::alterOptions public function Alter a property during display/tracking. Does not affect the stored options. This is called in CourseObject::getReadOnlyOptions().
CourseObjectAccessPluginBase::buildConfigurationForm public function Define the form to be used in the object access settings area. Overrides PluginFormInterface::buildConfigurationForm 3
CourseObjectAccessPluginBase::evaluate public function Evaluate the access conditions. 1
CourseObjectAccessPluginBase::getCourseObject public function
CourseObjectAccessPluginBase::getObjectOptions public function Helper method to get possible objects. 1
CourseObjectAccessPluginBase::getOption public function
CourseObjectAccessPluginBase::getOptions public function
CourseObjectAccessPluginBase::optionsDefinition public function 3
CourseObjectAccessPluginBase::see public function Can the user see the object in the outline? 2
CourseObjectAccessPluginBase::setCourseObject public function
CourseObjectAccessPluginBase::setType public function
CourseObjectAccessPluginBase::submitConfigurationForm public function Form submission handler. Overrides PluginFormInterface::submitConfigurationForm
CourseObjectAccessPluginBase::take public function Can the user take the object? 2
CourseObjectAccessPluginBase::validateConfigurationForm public function Form validation handler. Overrides PluginFormInterface::validateConfigurationForm
CourseObjectAccessPluginBase::view public function Can the user view the object but not interact? 2
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function 2
DependencySerializationTrait::__wakeup public function 2
MessengerTrait::$messenger protected property The messenger. 27
MessengerTrait::messenger public function Gets the messenger. 27
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 2
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
PluginBase::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. 98
StringTranslationTrait::$stringTranslation protected property The string translation service. 4
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.