You are here

class CourseObjectAccessConditional in Course 6

Same name and namespace in other branches
  1. 7.2 plugins/course_object_access/conditional.inc \CourseObjectAccessConditional
  2. 7 plugins/course_object_access/conditional.inc \CourseObjectAccessConditional

Hierarchy

Expanded class hierarchy of CourseObjectAccessConditional

1 string reference to 'CourseObjectAccessConditional'
conditional.inc in plugins/course/access/conditional.inc

File

plugins/course/access/conditional.inc, line 11

View source
class CourseObjectAccessConditional extends CourseObjectAccess {
  function view() {
    return $this
      ->take();
  }
  function see() {
    if ($this
      ->getOption('conditional_hidden')) {
      return $this
        ->view();
    }
  }
  function take() {
    $type = $this
      ->getOption('conditional_type');
    $offset = $this
      ->getOption('conditional_time');
    $time = time();
    $access = TRUE;
    if ($type) {
      foreach ($this
        ->getCourseObject()
        ->getCourse()
        ->getObjects() as $courseObject) {
        if ($courseObject
          ->getId() == $this
          ->getOption('conditional_object')) {
          switch ($type) {
            case 'completed':
              $completed = $courseObject
                ->getFulfillment()
                ->getOption('date_completed');
              if (!$completed) {
                $access = FALSE;
              }
              else {
                $access = $time >= $completed + $offset;
              }
              break;
            case 'started':
              $started = $courseObject
                ->getFulfillment()
                ->getOption('date_started');
              if (!$started) {
                $access = FALSE;
              }
              else {
                $access = $time >= $started + $offset;
              }
              break;
          }
        }
      }
    }
    return $access;
  }
  function optionsDefinition() {
    $defaults = parent::optionsDefinition();
    $defaults += array(
      'conditional_type' => NULL,
      'conditional_time' => NULL,
      'conditional_object' => NULL,
      'conditional_hidden' => NULL,
    );
    return $defaults;
  }
  function optionsValidate(&$form, &$values) {
    if (module_exists('duration_element')) {
      $values['conditional_time'] = $values['conditional_time']
        ->to_single_metric('seconds');
    }
  }
  function optionsForm() {
    $form = array();
    $config = $this
      ->getOptions();
    ctools_include('dependent');
    $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.'),
    );
    $options = array(
      '',
    );
    foreach ($this
      ->getCourseObject()
      ->getCourse()
      ->getObjects() as $courseObject) {
      $options[$courseObject
        ->getId()] = $courseObject
        ->getTitle();
    }
    if (module_exists('duration_element')) {
      $conditional_time = duration_create();
      $conditional_time
        ->set_seconds($config['conditional_time']);
      $conditional_time
        ->normalize();
      $form['conditional_time'] = array(
        '#title' => t('Time'),
        '#type' => 'duration_combo',
        '#description' => t('Length of time after the event happens when this course object should be accessible.'),
        '#largest_metric' => 'days',
        '#smallest_metric' => 'minutes',
        '#default_value' => $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' => $options,
      '#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(
      '#process' => array(
        'ctools_dependent_process',
      ),
      '#dependency' => array(
        'edit-plugins-access-conditional-conditional-type' => array(
          'completed',
          'started',
        ),
      ),
    );
    foreach (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
CourseHandler::$accessMessages private property
CourseHandler::$config protected property
CourseHandler::$handlerType public property
CourseHandler::$primaryKey public property
CourseHandler::$serializedField public property
CourseHandler::$table public property
CourseHandler::addOptions final public function Merge an array of options onto the existing options.
CourseHandler::getAccessMessages public function Get an array of access messages.
CourseHandler::getDatabaseFields protected function Return an array of database fields. This determines what fields should be serialized instead of stored.
CourseHandler::getId function
CourseHandler::getOption final public function Get an option stored in this CourseObject.
CourseHandler::getOptions public function Get an object's configuration. 1
CourseHandler::getOptionsSummary public function Stub. Get the summary of an object's options. 1
CourseHandler::getWarnings public function Return a list of warning strings about this handler. 1
CourseHandler::optionsMerge private function Merge arrays with replace, not append.
CourseHandler::optionsSubmit public function Save data somewhere. 1
CourseHandler::save public function 2
CourseHandler::setAccessMessage public function Set an access message to be displayed along with the course object when it is in the outline. For example, "This activity will open on XYZ" or "Please complete Step 1 to take this activity."
CourseHandler::setOption final public function Set an option for this handler.
CourseHandler::setOptions final public function Set this entire handler's options.
CourseObjectAccess::$courseObject private property
CourseObjectAccess::getCourseObject public function
CourseObjectAccess::setCourseObject public function
CourseObjectAccess::__construct function Overrides CourseHandler::__construct
CourseObjectAccessConditional::optionsDefinition function Handlers need to declare their defaults if they have a configuration form. Overrides CourseHandler::optionsDefinition
CourseObjectAccessConditional::optionsForm function Handlers can declare a form. Overrides CourseHandler::optionsForm
CourseObjectAccessConditional::optionsValidate function Validate? Overrides CourseHandler::optionsValidate
CourseObjectAccessConditional::see function Overrides CourseObjectAccess::see
CourseObjectAccessConditional::take function Overrides CourseObjectAccess::take
CourseObjectAccessConditional::view function Overrides CourseObjectAccess::view