final public function CourseObject::takeCourseObject in Course 7.2
Same name and namespace in other branches
- 6 includes/course_object.core.inc \CourseObject::takeCourseObject()
- 7 includes/CourseObject.inc \CourseObject::takeCourseObject()
Take a course object.
- Set the session of this course object being taken. This allows for non-node objects to be tracked.
- Delegate the course object take functionality
Return value
mixed HTML content or a redirect.
File
- includes/
CourseObject.inc, line 613
Class
- CourseObject
- Parent abstract base class of all course objects.
Code
public final function takeCourseObject() {
global $user;
$_SESSION['course']['active'] = $this
->getCourseNid();
$_SESSION['course'][$this
->getCourseNid()]['taking']['active'] = $this
->getId();
// Run access checks.
if ($this
->access('take')) {
// Grant access to external course object.
$this
->getFulfillment($user)
->grant();
// Record start date.
if (!$this
->getFulfillment($user)
->getOption('date_started')) {
$this
->getFulfillment($user)
->setOption('date_started', REQUEST_TIME)
->save();
}
}
else {
// User can't access this object, revoke access.
$this
->getFulfillment($user)
->revoke();
return FALSE;
}
// If we're not displaying any content but we want to fire take() anyway, to
// let the course object know we sent the user.
$out = $this
->take();
$url = $this
->getTakeUrl();
switch ($this
->getTakeType()) {
case 'iframe':
return course_iframe($url);
case 'popup':
return "will popup {$url}";
case 'content':
return $out;
case 'redirect':
default:
// This URL should have already been url()'d (it might be external).
drupal_goto($url, array(
'external' => TRUE,
));
}
}