class Course in Course 6
Same name and namespace in other branches
- 7.2 includes/Course.inc \Course
- 7 includes/Course.inc \Course
An object that holds CourseObjects and tracker functions?
Hierarchy
- class \CourseHandler
- class \Course
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
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
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
Course:: |
private | property | ||
Course:: |
private | property | ||
Course:: |
private | property | ||
Course:: |
private | property | ||
Course:: |
private | property | ||
Course:: |
private | property | ||
Course:: |
private | property | ||
Course:: |
public | function | Get the active CourseObject. | |
Course:: |
public | function | Generate navigation links. | |
Course:: |
public | function | Get the next course object, from the active course object. | |
Course:: |
public | function | ||
Course:: |
public | function | Get the course objects in this course. | |
Course:: |
public | function | Get the previous course object, from the active course object. | |
Course:: |
public | function | Get the course tracker for this course/user. | |
Course:: |
public | function | The Drupal path to take this course. | |
Course:: |
public | function | ||
Course:: |
public | function | Set the active CourseObject in this Course. | |
Course:: |
public | function | Track the course (scan required objects, update progress, completion, etc). | |
Course:: |
public | function | Un-enroll the user from all course objects and revoke access. | |
Course:: |
public | function |
Overrides CourseHandler:: |
|
CourseHandler:: |
private | property | ||
CourseHandler:: |
protected | property | ||
CourseHandler:: |
public | property | ||
CourseHandler:: |
public | property | ||
CourseHandler:: |
public | property | ||
CourseHandler:: |
public | property | ||
CourseHandler:: |
final public | function | Merge an array of options onto the existing options. | |
CourseHandler:: |
public | function | Get an array of access messages. | |
CourseHandler:: |
protected | function | Return an array of database fields. This determines what fields should be serialized instead of stored. | |
CourseHandler:: |
function | |||
CourseHandler:: |
final public | function | Get an option stored in this CourseObject. | |
CourseHandler:: |
public | function | Get an object's configuration. | 1 |
CourseHandler:: |
public | function | Stub. Get the summary of an object's options. | 1 |
CourseHandler:: |
public | function | Return a list of warning strings about this handler. | 1 |
CourseHandler:: |
protected | function | Handlers need to declare their defaults if they have a configuration form. | 4 |
CourseHandler:: |
public | function | Handlers can declare a form. | 4 |
CourseHandler:: |
private | function | Merge arrays with replace, not append. | |
CourseHandler:: |
public | function | Save data somewhere. | 1 |
CourseHandler:: |
public | function | Validate? | 3 |
CourseHandler:: |
public | function | 2 | |
CourseHandler:: |
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:: |
final public | function | Set an option for this handler. | |
CourseHandler:: |
final public | function | Set this entire handler's options. |