You are here

class Course in Course 7

Same name and namespace in other branches
  1. 6 includes/course.core.inc \Course
  2. 7.2 includes/Course.inc \Course

An object that holds CourseObjects and tracker functions?

Hierarchy

Expanded class hierarchy of Course

34 string references to 'Course'
course.course_report.view.inc in views/default/course.course_report.view.inc
CourseAccessTestCase::getInfo in tests/CourseAccessTestCase.test
CourseContextTestCase::getInfo in tests/CourseContextTestCase.test
CourseEnrollmentTestCase::getInfo in tests/CourseEnrollmentTestCase.test
CourseGradeTestCase::getInfo in tests/CourseGradeTestCase.test

... See full list

File

includes/Course.inc, line 6

View source
class Course extends CourseHandler {

  // Node of course.
  private $node;

  // User in course.

  /** @deprecated */
  private $user;

  // Ordered list of course objects.
  private $courseObjects = array();

  // Course report tracker
  private $tracker;

  // The active course object.
  private $active = NULL;

  // The next course object.
  private $next;

  // The previous course object.
  private $prev;

  /**
   * Get the course tracker for this course/user.
   *
   * @return CourseReport
   */
  public function getTracker($account = NULL) {
    if (!$account) {

      /** @deprecated */
      if (!empty($this->user)) {
        $account = $this->user;
      }
      else {
        global $user;
        $account = $user;
      }
    }
    if ($entities = entity_load('course_report', FALSE, array(
      'nid' => $this
        ->getNode()->nid,
      'uid' => $account->uid,
    ), TRUE)) {
      return reset($entities);
    }
    else {
      return entity_create('course_report', array(
        'nid' => $this
          ->getNode()->nid,
        'uid' => $account->uid,
      ));
    }
  }

  /**
   * The Drupal path to take this course.
   *
   * @return string
   */
  public function getUrl() {
    return "node/{$this->nid}/takecourse";
  }

  /**
   * Set the active CourseObject in this Course.
   *
   * @param int $id
   *   A numeric course object ID.
   */
  public function setActive($id = NULL) {
    if (!$id && isset($_SESSION['course'][$this
      ->getNode()->nid]['taking']['active'])) {
      $id = $_SESSION['course'][$this
        ->getNode()->nid]['taking']['active'];
    }
    $old = NULL;
    $storeNext = FALSE;
    foreach ($this
      ->getObjects() as $courseObject) {
      if (!$courseObject
        ->getOption('enabled')) {

        // Skip disabled objects.
        continue;
      }
      if ($id == $courseObject
        ->getId()) {

        // Active - save old, store next.
        if ($old) {
          $this->prev = $old;
        }
        $storeNext = TRUE;
        $this->active = $courseObject;
      }
      elseif ($storeNext) {
        $this->next = clone $courseObject;
        $storeNext = FALSE;
      }
      $old = clone $courseObject;
    }
  }

  /**
   * Get the active CourseObject.
   *
   * @return CourseObject
   */
  public function getActive() {
    if (!$this->active) {
      $this
        ->setActive();
    }
    return $this->active;
  }

  /**
   * Get the next course object, from the active course object.
   *
   * @return CourseObject
   */
  public function getNext() {
    if (!$this->active) {
      $this
        ->setActive();
    }
    return $this->next;
  }

  /**
   * Get the previous course object, from the active course object.
   *
   * @return CourseObject
   */
  public function getPrev() {
    if (!$this->active) {
      $this
        ->setActive();
    }
    return $this->prev;
  }

  /**
   * Generate navigation links.
   */
  public function getNavigation() {

    // Initialize the active Course.
    $this
      ->setActive();
    $prev = $this
      ->getPrev();
    $next = $this
      ->getNext();
    $links = array();
    if ($prev && $prev
      ->access('take')) {
      $links['prev'] = l(t('Previous'), $prev
        ->getUrl(), array(
        'html' => TRUE,
      ));
    }
    $links['back'] = l(t('Back to course'), $this
      ->getUrl());
    if ($next && $next
      ->access('take')) {
      $links['next'] = l(t('Next'), $next
        ->getUrl(), array(
        'html' => TRUE,
      ));
    }
    elseif (!$next && $this
      ->getTracker()
      ->getOption('complete')) {
      $links['next'] = l(t('Next'), 'node/' . $this
        ->getOption('nid') . '/course-complete', array(
        'html' => TRUE,
      ));
    }

    // Ask course objects if they want to override the navigation.
    if ($active = $this
      ->getActive()) {
      foreach ($active
        ->overrideNavigation() as $key => $link) {
        $links[$key] = $link;
      }
    }
    return $links;
  }

  /**
   * Track the course (scan required objects, update progress, completion, etc).
   */
  public function track($account = NULL) {
    $this
      ->resetCache();
    $this
      ->getTracker($account)
      ->track();
  }

  /**
   * Get the course objects in this course.
   *
   * @return CourseObject[]
   *   An array of course objects.
   */
  public function getObjects() {
    if (empty($this->courseObjects)) {
      $efq = new EntityFieldQuery();
      $result = $efq
        ->entityCondition('entity_type', 'course_object')
        ->propertyCondition('nid', $this
        ->getNode()->nid)
        ->propertyOrderBy('weight')
        ->execute();
      if (!empty($result['course_object'])) {
        if ($this->courseObjects = entity_load('course_object', array_keys($result['course_object']))) {
          foreach ($this->courseObjects as $courseObject) {

            /** @deprecated do not use set|getUser() */
            $courseObject
              ->setUser($this
              ->getUser());
          }
        }
      }
    }
    return $this->courseObjects;
  }
  function resetCache() {

    // Reset this course's cache.
    $this->courseObjects = array();
    return $this;
  }
  public function getNode() {
    return node_load($this->nid);
  }

  /**
   * Un-enroll the user from all course objects and revoke access.
   *
   * Course object should clean up
   * and delete records related to this Course and user.
   *
   * NOT a top level class of CourseObject::unEnroll.
   *
   * @see CourseObjectNode::revoke()
   */
  public function unEnroll() {
    foreach ($this
      ->getObjects() as $courseObject) {

      // Remove access.
      $courseObject
        ->revoke();
      $courseObject
        ->unEnroll();
    }
  }

  /**
   * @deprecated
   */
  public function setUser($account) {
    $this->user = $account;
  }

  /**
   * @deprecated
   */
  public function getUser() {
    return $this->user;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Course::$active private property
Course::$courseObjects private property
Course::$next private property
Course::$node private property
Course::$prev private property
Course::$tracker private property
Course::$user private property
Course::getActive public function Get the active CourseObject.
Course::getNavigation public function Generate navigation links.
Course::getNext public function Get the next course object, from the active course object.
Course::getNode public function
Course::getObjects public function Get the course objects in this course.
Course::getPrev public function Get the previous course object, from the active course object.
Course::getTracker public function Get the course tracker for this course/user.
Course::getUrl public function The Drupal path to take this course.
Course::getUser public function
Course::resetCache function
Course::setActive public function Set the active CourseObject in this Course.
Course::setUser public function
Course::track public function Track the course (scan required objects, update progress, completion, etc).
Course::unEnroll public function Un-enroll the user from all course objects and revoke access.
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 public function Get an handler option's value.
CourseHandler::getOptions public function Get an object's configuration. 1
CourseHandler::getOptionsSummary public function Get the summary of an object's options. 1
CourseHandler::getWarnings public function Return a list of warning strings about this handler. 1
CourseHandler::optionsDefinition protected function Handlers can declare their defaults if they have a configuration form. 2
CourseHandler::optionsForm public function Handlers can declare a form. 1
CourseHandler::optionsMerge private function Merge arrays with replace, not append.
CourseHandler::optionsSubmit public function Save data somewhere. 1
CourseHandler::optionsValidate public function Validate? 1
CourseHandler::save public function Permanently saves the entity. Overrides Entity::save 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 public function Set an option for this handler.
CourseHandler::setOptions final public function Set this entire handler's options.
CourseHandler::__construct function Overrides Entity::__construct 1
Entity::$defaultLabel protected property 1
Entity::$entityInfo protected property
Entity::$entityType protected property
Entity::$idKey protected property
Entity::$wrapper protected property
Entity::buildContent public function Builds a structured array representing the entity's content. Overrides EntityInterface::buildContent 1
Entity::bundle public function Returns the bundle of the entity. Overrides EntityInterface::bundle
Entity::defaultLabel protected function Defines the entity label if the 'entity_class_label' callback is used. 1
Entity::defaultUri protected function Override this in order to implement a custom default URI and specify 'entity_class_uri' as 'uri callback' hook_entity_info().
Entity::delete public function Permanently deletes the entity. Overrides EntityInterface::delete
Entity::entityInfo public function Returns the info of the type of the entity. Overrides EntityInterface::entityInfo
Entity::entityType public function Returns the type of the entity. Overrides EntityInterface::entityType
Entity::export public function Exports the entity. Overrides EntityInterface::export
Entity::getTranslation public function Gets the raw, translated value of a property or field. Overrides EntityInterface::getTranslation
Entity::hasStatus public function Checks if the entity has a certain exportable status. Overrides EntityInterface::hasStatus
Entity::identifier public function Returns the entity identifier, i.e. the entities name or numeric id. Overrides EntityInterface::identifier
Entity::internalIdentifier public function Returns the internal, numeric identifier. Overrides EntityInterface::internalIdentifier
Entity::isDefaultRevision public function Checks whether the entity is the default revision. Overrides EntityInterface::isDefaultRevision
Entity::label public function Returns the label of the entity. Overrides EntityInterface::label
Entity::setUp protected function Set up the object instance on construction or unserializiation.
Entity::uri public function Returns the uri of the entity just as entity_uri(). Overrides EntityInterface::uri
Entity::view public function Generate an array for rendering the entity. Overrides EntityInterface::view
Entity::wrapper public function Returns the EntityMetadataWrapper of the entity. Overrides EntityInterface::wrapper
Entity::__sleep public function Magic method to only serialize what's necessary.
Entity::__wakeup public function Magic method to invoke setUp() on unserialization.