You are here

class CourseObjectAccessConditional in Course 8.3

Same name and namespace in other branches
  1. 8.2 src/Plugin/course/CourseObjectAccess/CourseObjectAccessConditional.php \Drupal\course\Plugin\course\CourseObjectAccess\CourseObjectAccessConditional
  2. 3.x src/Plugin/course/CourseObjectAccess/CourseObjectAccessConditional.php \Drupal\course\Plugin\course\CourseObjectAccess\CourseObjectAccessConditional

Plugin annotation


@CourseObjectAccess(
  id = "conditional",
  label = @Translation("Conditional"),
)

Hierarchy

Expanded class hierarchy of CourseObjectAccessConditional

File

src/Plugin/course/CourseObjectAccess/CourseObjectAccessConditional.php, line 14

Namespace

Drupal\course\Plugin\course\CourseObjectAccess
View source
class CourseObjectAccessConditional extends CourseObjectAccessPluginBase {
  function view($account) {
    return $this
      ->take($account);
  }
  function see($account) {
    if ($this
      ->getOption('conditional_hidden')) {
      return $this
        ->view($account);
    }
  }
  function take($account) {
    $type = $this
      ->getOption('conditional_type');
    $offset = (int) $this
      ->getOption('conditional_time');
    $time = \Drupal::time()
      ->getRequestTime();
    $access = TRUE;
    $title = $this
      ->getCourseObject()
      ->getTitle();
    $msg = t('%title is not yet available.', array(
      '%title' => $title,
    ));
    if ($type) {
      foreach ($this
        ->getCourseObject()
        ->getCourse()
        ->getObjects() as $courseObject) {
        if ($courseObject
          ->getId() == $this
          ->getOption('conditional_object')) {
          switch ($type) {
            case 'completed':
              $completed = $courseObject
                ->getFulfillment($account)
                ->getOption('date_completed');
              if (!$completed) {
                $access = FALSE;
              }
              else {
                $date = $completed + $offset;
                $access = $time >= $date;
                $msg = t('%title will be available on %date', array(
                  '%title' => $title,
                  '%date' => \Drupal::service('date.formatter')
                    ->format($date, 'short'),
                ));
              }
              break;
            case 'started':
              $started = $courseObject
                ->getFulfillment($account)
                ->getOption('date_started');
              if (!$started) {
                $access = FALSE;
              }
              else {
                $date = $started + $offset;
                $access = $time >= $date;
                $msg = t('%title will be available on %date', array(
                  '%title' => $title,
                  '%date' => \Drupal::service('date.formatter')
                    ->format($date, 'short'),
                ));
              }
              break;
          }
        }
      }
    }
    if (!$access) {
      $this
        ->getCourseObject()
        ->setAccessMessage('conditional', $msg);
    }
    return $access;
  }
  function optionsDefinition() {
    $defaults = parent::optionsDefinition();
    $defaults += array(
      'conditional_type' => NULL,
      'conditional_time' => NULL,
      'conditional_object' => NULL,
      'conditional_hidden' => NULL,
    );
    return $defaults;
  }
  function optionsForm(&$form, &$form_state) {
    $config = $this
      ->getOptions();
    $form['conditional_type'] = array(
      '#title' => t('Event'),
      '#type' => 'select',
      '#options' => array(
        '',
        'started' => t('User started course object'),
        'completed' => t('User completed course object'),
      ),
      '#description' => t('This sets the conditional behavior.'),
    );
    if (Drupal::moduleHandler()
      ->moduleExists('timeperiod')) {
      $form['conditional_time'] = array(
        '#title' => t('Time'),
        '#type' => 'timeperiod_select',
        '#units' => array(
          '86400' => array(
            'max' => 30,
            'step size' => 1,
          ),
          '3600' => array(
            'max' => 24,
            'step size' => 1,
          ),
          '60' => array(
            'max' => 60,
            'step size' => 1,
          ),
        ),
        '#description' => t('Length of time after the event happens when this course object should be accessible.'),
        '#default_value' => $config['conditional_time'],
      );
    }
    else {
      $form['conditional_time'] = array(
        '#title' => t('Time'),
        '#type' => 'textfield',
        '#size' => 8,
        '#description' => t('Length of time in seconds after the event happens when this course object should be accessible.'),
        '#default_value' => $config['conditional_time'],
      );
    }
    $form['conditional_object'] = array(
      '#title' => t('Course object'),
      '#type' => 'select',
      '#options' => $this
        ->getObjectOptions(),
      '#description' => t('The course object to check for the type and time of conditional display.'),
    );
    $form['conditional_hidden'] = array(
      '#title' => t('Hide object until ready'),
      '#type' => 'checkbox',
      '#description' => t('This will prevent the course object from appearing in the course outline until it is ready.'),
    );
    $conditional_dependent = array(
      '#states' => array(
        'visible' => array(
          array(
            '#edit-plugins-access-conditional-conditional-type' => array(
              'value' => 'started',
            ),
          ),
          array(
            '#edit-plugins-access-conditional-conditional-type' => array(
              'value' => 'completed',
            ),
          ),
        ),
      ),
    );
    foreach (Drupal\Core\Render\Element::children($form) as $key) {
      if ($key != 'conditional_time') {
        $form[$key]['#default_value'] = $config[$key];
      }
      if ($key != 'conditional_type' && $key != 'conditional_time') {
        $form[$key] += $conditional_dependent;
      }
    }
    return $form;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CourseObjectAccessConditional::optionsDefinition function Overrides CourseObjectAccessPluginBase::optionsDefinition
CourseObjectAccessConditional::optionsForm function
CourseObjectAccessConditional::see function Overrides CourseObjectAccessPluginBase::see
CourseObjectAccessConditional::take function Overrides CourseObjectAccessPluginBase::take
CourseObjectAccessConditional::view function Overrides CourseObjectAccessPluginBase::view
CourseObjectAccessPluginBase::$courseObject private property
CourseObjectAccessPluginBase::$type private property
CourseObjectAccessPluginBase::getCourseObject public function
CourseObjectAccessPluginBase::getObjectOptions public function Helper method to get possible objects. 1
CourseObjectAccessPluginBase::getOption public function
CourseObjectAccessPluginBase::getOptions public function
CourseObjectAccessPluginBase::optionsValidate public function 1
CourseObjectAccessPluginBase::setCourseObject public function
CourseObjectAccessPluginBase::setType public function
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
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 3
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. 92
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
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.