You are here

class CourseReport in Course 7.2

Same name and namespace in other branches
  1. 6 includes/course.core.inc \CourseReport
  2. 7 includes/CourseReport.inc \CourseReport

Holds a user's total progress through a course and functionality to check for completion of required objects.

Hierarchy

Expanded class hierarchy of CourseReport

1 string reference to 'CourseReport'
course_entity_info in ./course.module
Implements hook_entity_info().

File

includes/CourseReport.inc, line 7

View source
class CourseReport extends CourseHandler {

  /**
   * Get the course of this tracker.
   *
   * @return Course
   */
  public function getCourse() {
    return entity_load_single('course', $this->nid);
  }

  /**
   * Track the course (scan required objects, update progress, completion, etc).
   */
  public function track() {
    $required = 0;
    $required_complete = 0;
    $prev = NULL;
    $account = user_load($this->uid);
    $grades = [];
    foreach ($this
      ->getCourse()
      ->getObjects() as $courseObject) {
      if (!$courseObject
        ->isEnabled()) {
        continue;
      }
      if (!$prev) {
        $this
          ->setOption('section_name', $courseObject
          ->getTitle());
        $this
          ->setOption('coid', $courseObject
          ->getId());
      }

      // Count required objects.
      $required += $courseObject
        ->isRequired();

      // Count completed required objects.
      $required_complete += $courseObject
        ->isRequired() && $courseObject
        ->getFulfillment($account)
        ->isComplete();

      // Log last grade.
      if ($courseObject
        ->isGraded() && $courseObject
        ->getOption('grade_include')) {
        $grades[$courseObject
          ->identifier()] = $courseObject
          ->getFulfillment($account)
          ->getOption('grade_result');
      }
      if (!$courseObject
        ->getFulfillment($account)
        ->isComplete() && $prev && $prev
        ->getFulfillment($account)
        ->isComplete()) {
        $this
          ->setOption('section_name', $courseObject
          ->getTitle());
        $this
          ->setOption('coid', $courseObject
          ->getId());
      }
      $prev = clone $courseObject;
    }
    if (!empty($grades)) {
      $this
        ->setOption('grade_result', array_sum($grades) / count($grades));
    }
    if ($required_complete >= $required) {

      // Course requirements have been met.
      $this
        ->setOption('section', 'complete');
      $this
        ->setOption('section_name', 'Complete');
      $this
        ->setOption('complete', 1);
      if (!$this
        ->getOption('date_completed')) {
        $this
          ->setOption('date_completed', REQUEST_TIME);
      }
    }
    $this
      ->save();
  }

  /**
   * Course report entity label callback.
   */
  function defaultLabel() {
    $node = node_load($this->nid);
    $account = user_load($this->uid);
    return t("@username's course report for @title", array(
      '@username' => format_username($account),
      '@title' => $node->title,
    ));
  }
  function save() {
    $this->updated = REQUEST_TIME;
    return parent::save();
  }

  /**
   * If the course is complete for this record.
   *
   * @return bool
   */
  function isComplete() {
    return $this
      ->getOption('complete');
  }

}

Members

Namesort descending Modifiers Type Description Overrides
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 public function Get an handler option's value.
CourseHandler::getOptions public function Get an object's configuration. 1
CourseHandler::getOptionsSummary public function 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 can declare their defaults if they have a configuration form. 2
CourseHandler::optionsForm public function Handlers can declare a form. 1
CourseHandler::optionsMerge private function Merge arrays with replace, not append.
CourseHandler::optionsSubmit public function Save data somewhere. 1
CourseHandler::optionsValidate public function Validate? 1
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 public function Set an option for this handler. 1
CourseHandler::setOptions final public function Set this entire handler's options.
CourseHandler::__construct function Overrides Entity::__construct 1
CourseReport::defaultLabel function Course report entity label callback. Overrides Entity::defaultLabel
CourseReport::getCourse public function Get the course of this tracker.
CourseReport::isComplete function If the course is complete for this record.
CourseReport::save function Permanently saves the entity. Overrides CourseHandler::save
CourseReport::track public function Track the course (scan required objects, update progress, completion, etc).
Entity::$defaultLabel protected property 1
Entity::$entityInfo protected property
Entity::$entityType protected property
Entity::$idKey protected property
Entity::$wrapper protected property
Entity::buildContent public function Builds a structured array representing the entity's content. Overrides EntityInterface::buildContent 1
Entity::bundle public function Returns the bundle of the entity. Overrides EntityInterface::bundle
Entity::defaultUri protected function Override this in order to implement a custom default URI and specify 'entity_class_uri' as 'uri callback' hook_entity_info().
Entity::delete public function Permanently deletes the entity. Overrides EntityInterface::delete
Entity::entityInfo public function Returns the info of the type of the entity. Overrides EntityInterface::entityInfo
Entity::entityType public function Returns the type of the entity. Overrides EntityInterface::entityType
Entity::export public function Exports the entity. Overrides EntityInterface::export
Entity::getTranslation public function Gets the raw, translated value of a property or field. Overrides EntityInterface::getTranslation
Entity::hasStatus public function Checks if the entity has a certain exportable status. Overrides EntityInterface::hasStatus
Entity::identifier public function Returns the entity identifier, i.e. the entities name or numeric id. Overrides EntityInterface::identifier
Entity::internalIdentifier public function Returns the internal, numeric identifier. Overrides EntityInterface::internalIdentifier
Entity::isDefaultRevision public function Checks whether the entity is the default revision. Overrides EntityInterface::isDefaultRevision
Entity::label public function Returns the label of the entity. Overrides EntityInterface::label
Entity::setUp protected function Set up the object instance on construction or unserializiation.
Entity::uri public function Returns the uri of the entity just as entity_uri(). Overrides EntityInterface::uri
Entity::view public function Generate an array for rendering the entity. Overrides EntityInterface::view
Entity::wrapper public function Returns the EntityMetadataWrapper of the entity. Overrides EntityInterface::wrapper
Entity::__sleep public function Magic method to only serialize what's necessary.
Entity::__wakeup public function Magic method to invoke setUp() on unserialization.