You are here

class Course in Course 6

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

An object that holds CourseObjects and tracker functions?

Hierarchy

Expanded class hierarchy of Course

23 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.core.inc, line 360
course.core.inc File for main Course class.

View source
class Course extends CourseHandler {

  // Node of course.
  private $node;

  // User in course.
  private $user;

  // Ordered list of course objects.
  private $courseObjects;

  // Course report tracker
  private $tracker;

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

  // The next course object.
  private $next;

  // The previous course object.
  private $prev;

  /**
   * @param stdClass $node
   * @param stdClass $user
   */
  public function __construct($node, $user = NULL) {
    $this->primaryKey = 'nid';
    $this->handlerType = 'course';
    $this->table = 'course_node';
    if (is_object($node)) {
      $this->node = $node;
    }
    else {
      $this->node = node_load($node);
    }
    if (is_object($user)) {
      $this->user = $user;
    }
    else {
      $this->user = user_load($user);
    }
    $sql = "SELECT * FROM {course_node} WHERE nid = %d";
    $result = db_query($sql, $this->node->nid);
    if ($config = db_fetch_array($result)) {
      parent::__construct($config);
    }
    else {
      parent::__construct(array(
        'nid' => $this->node->nid,
        'uid' => $this->user->uid,
      ));
    }
    $this->tracker = new CourseReport($this);
  }

  /**
   * Get the course tracker for this course/user.
   *
   * @return CourseReport
   */
  public function getTracker() {
    return $this->tracker;
  }

  /**
   * The Drupal path to take this course.
   *
   * @return string
   */
  public function getUrl() {
    return "node/{$this->node->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->node->nid]['taking']['active'])) {
      $id = $_SESSION['course'][$this->node->nid]['taking']['active'];
    }
    $old = NULL;
    $storeNext = FALSE;
    foreach ($this
      ->getObjects() as $courseObject) {
      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) {
      $links['prev'] = l('Previous', $prev
        ->getUrl(), array(
        'html' => TRUE,
      ));
    }
    $links['back'] = l('Back to course', $this
      ->getUrl());
    if ($next && $next
      ->access('take')) {
      $links['next'] = l('Next', $next
        ->getUrl(), 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() {
    $this->tracker
      ->track();
  }

  /**
   * Get the course objects in this course.
   *
   * @return array
   *   An array of course objects.
   */
  public function getObjects($flush = FALSE) {
    if (!$this->courseObjects || $flush) {
      $this->courseObjects = array();
      $sql = 'SELECT * FROM {course_outline} co
        WHERE nid = %d
        ORDER BY weight ASC';
      $result = db_query($sql, $this->node->nid);
      while ($row = db_fetch_object($result)) {
        if ($courseObject = course_get_course_object($row, NULL, NULL, $this->user, $this)) {
          $this->courseObjects[] = $courseObject;
        }
      }
    }
    return $this->courseObjects;
  }
  public function getNode() {
    return $this->node;
  }
  public function getUser() {
    return $this->user;
  }

  /**
   * 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();
    }
  }

}

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::setActive public function Set the active CourseObject in this Course.
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.
Course::__construct public function Overrides CourseHandler::__construct
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::optionsDefinition protected function Handlers need to declare their defaults if they have a configuration form. 4
CourseHandler::optionsForm public function Handlers can declare a form. 4
CourseHandler::optionsMerge private function Merge arrays with replace, not append.
CourseHandler::optionsSubmit public function Save data somewhere. 1
CourseHandler::optionsValidate public function Validate? 3
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.