You are here

function course_get_handlers in Course 7

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

Get course handlers.

Parameters

string $type: (optional) The course handler type to return. If no type is specified, all types are returned.

Return value

array A merged, structured array of course handlers, optionally limited by type.

array An array of hook implementations keyed by module name, containing:

  • A single handler type definition, if the $type parameter is passed.
  • Or an associative array of all course handler definitions keyed by type.
13 calls to course_get_handlers()
CourseObject::getComponentName in includes/CourseObject.inc
Get the object component title for this course object.
CourseObject::getTitle in includes/CourseObject.inc
CourseObjectContentTestCase::testContentCourseObjectCreation in modules/course_content/course_content.test
Test course content object creation.
CourseObjectController::create in includes/CourseObjectController.inc
Overrides EntityAPIController::create().
CourseObjectFulfillmentController::create in includes/CourseObjectFulfillmentController.inc
Overrides EntityAPIController::create().

... See full list

File

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

Code

function course_get_handlers($type = NULL, $flush = FALSE) {
  $all =& drupal_static(__FUNCTION__, array());
  if (!$all || $flush) {

    // Allow modules to define handlers that extend Course functionality.
    // Do not use module_invoke_all() here because we need to know which module
    // is providing the 'object' handler type. This is to avoid namespace
    // conflicts between multiple modules providing a 'quiz' object for example.
    $hook = 'course_handlers';
    foreach (module_implements($hook) as $module) {
      $function = $module . '_' . $hook;
      $handlers = $function();

      // Allow modules to alter each other's list of handlers.
      drupal_alter($hook, $handlers, $module);
      if (isset($handlers) && is_array($handlers)) {
        $all[$module] = $handlers;
      }
    }
  }
  if (isset($type)) {

    // Loop through each module's result again, and rebuild the array including
    // only the specified handler type. We do this again so we can static cache
    // the hook invocation and function calls above.
    $filtered = array();
    foreach ($all as $module => $handlers) {
      if (isset($handlers[$type])) {
        $filtered[$module] = $handlers[$type];
      }
    }

    // Return the keyed array of implementations, each filtered to include only
    // the specified handler type definition.
    return $filtered;
  }
  else {

    // Return the keyed array of all implementations.
    return $all;
  }
}