You are here

function course_init in Course 7.2

Same name and namespace in other branches
  1. 8.3 course.module \course_init()
  2. 8.2 course.module \course_init()
  3. 6 course.module \course_init()
  4. 7 course.module \course_init()
  5. 3.x course.module \course_init()

Implements hook_init().

Detect and set course context. Adds javascript for course objects that require polling. Hack for #1902104.

File

./course.module, line 2168
course.module Core functionality for Courses.

Code

function course_init() {
  course_context();
  if (!($courseNode = course_get_context())) {

    // Set course context for all modules that define course context handlers.
    // @see hook_course_handlers().
    $modules = course_get_handlers('object');
    foreach ($modules as $module => $handlers) {
      if (is_array($handlers)) {
        foreach ($handlers as $handler) {

          // We expect query parameters suitable for course_determine_context().
          if ($params = call_user_func(array(
            $handler['class'],
            'context',
          ))) {
            if (is_array($params) && isset($params['object_type']) && isset($params['instance'])) {
              if ($courseNode = course_determine_context($module, $params['object_type'], $params['instance'])) {

                // Set the course context.
                course_set_context($courseNode);

                // Find and set the active object.
                $efq = new EntityFieldQuery();
                $result = $efq
                  ->entityCondition('entity_type', 'course_object')
                  ->propertyCondition('nid', $courseNode->nid)
                  ->propertyCondition('instance', $params['instance'])
                  ->propertyCondition('module', $module)
                  ->propertyCondition('object_type', $params['object_type'])
                  ->execute();
                $coid = key($result['course_object']);
                $_SESSION['course'][$courseNode->nid]['taking']['active'] = $coid;
              }
            }
          }
        }
      }
    }
  }
}