You are here

timing.inc in Course 6

File

plugins/course/access/timing.inc
View source
<?php

$plugin = array(
  'title' => t('Date-based access'),
  'description' => t('Controls access by release and expiration dates'),
  'handler' => array(
    'class' => 'CourseObjectAccessTiming',
  ),
);
class CourseObjectAccessTiming extends CourseObjectAccess {
  public function optionsDefinition() {
    $defaults = parent::optionsDefinition();
    $defaults += array(
      'duration' => NULL,
      'release' => NULL,
      'expiration' => NULL,
      'release_hidden' => NULL,
      'expiration_hidden' => NULL,
    );
    return $defaults;
  }
  function take() {
    $time = time();
    if ($this
      ->getOption('duration')) {
      if ($this
        ->getCourseObject()
        ->getFulfillment()
        ->getOption('date_started')) {
        $duration_end = $this
          ->getCourseObject()
          ->getFulfillment()
          ->getOption('date_started') + $this
          ->getOption('duration');
        if ($time > $duration_end) {
          $duration_end_h = date('Y-m-d H:i:s', $duration_end);
          $this
            ->getCourseObject()
            ->setAccessMessage('duration-expired', 'Your enrollment in this activity expired on ' . $duration_end_h);
          return FALSE;
        }
      }
    }
    $released = $this
      ->isReleased();
    $expired = $this
      ->isExpired();
    return $released && !$expired;
  }
  function see() {
    if (!$this
      ->isReleased() && $this
      ->getOption('release_hidden')) {
      return FALSE;
    }
    if ($this
      ->isExpired() && $this
      ->getOption('expiration_hidden')) {
      return FALSE;
    }
  }
  function view() {
    return $this
      ->take();
  }
  function optionsValidate(&$form, &$values) {
    if (module_exists('duration_element')) {
      $values['duration'] = $values['duration']
        ->to_single_metric('seconds');
    }
  }
  function optionsForm() {
    $form = array();
    $config = $this
      ->getOptions();
    if (module_exists('duration_element')) {
      $duration = duration_create();
      $duration
        ->set_seconds($config['duration']);
      $duration
        ->normalize();
      $form['duration'] = array(
        '#title' => t('Duration'),
        '#description' => 'Length of time a user can remain in this object before it is closed.',
        '#type' => 'duration_combo',
        '#largest_metric' => 'days',
        '#smallest_metric' => 'minutes',
        '#default_value' => $duration,
      );
    }
    else {
      $form['duration'] = array(
        '#title' => t('Duration'),
        '#description' => 'Length of time in seconds a user can remain in this object before it is closed.',
        '#type' => 'textfield',
        '#size' => 8,
        '#default_value' => $config['duration'],
      );
    }
    $form['release'] = array(
      '#title' => t('Release date'),
      '#description' => t('When this object can be accessed. If this object is required, users will not be able to proceed until after this date.'),
      '#type' => 'date_popup',
      '#default_value' => $config['release'],
    );
    $form['expiration'] = array(
      '#title' => t('Expiration date'),
      '#description' => t('When this object will close. If this object is required, users will not be able to proceed to the next activity after this date.'),
      '#type' => 'date_popup',
      '#default_value' => $config['expiration'],
    );
    $form['release_hidden'] = array(
      '#title' => 'Hide until release date',
      '#type' => 'checkbox',
      '#default_value' => $config['release_hidden'],
    );
    $form['expiration_hidden'] = array(
      '#title' => 'Hide after expiration date',
      '#type' => 'checkbox',
      '#description' => 'Hide the object after the expiration. For example, an optional pre-test that expires.',
      '#default_value' => $config['expiration_hidden'],
    );
    return $form;
  }
  function isReleased() {
    if (time() <= strtotime($this
      ->getOption('release'))) {
      $this
        ->getCourseObject()
        ->setAccessMessage('not-open', t('This activity will be available on @release.', array(
        '@release' => $this
          ->getOption('release'),
      )));
      return FALSE;
    }
    else {
      return TRUE;
    }
  }
  function isExpired() {
    if ($this
      ->getOption('expiration') && time() > strtotime($this
      ->getOption('expiration'))) {
      $this
        ->getCourseObject()
        ->setAccessMessage('closed', t('This activity closed on @expiration.', array(
        '@expiration' => $this
          ->getOption('expiration'),
      )));
      return TRUE;
    }
    else {
      return FALSE;
    }
  }

}

Classes