You are here

function course_uc_enroll_user_in_ordered_courses in Course 7

Same name and namespace in other branches
  1. 8.3 modules/course_uc/course_uc.module \course_uc_enroll_user_in_ordered_courses()
  2. 8.2 modules/course_uc/course_uc.module \course_uc_enroll_user_in_ordered_courses()
  3. 7.2 modules/course_uc/course_uc.module \course_uc_enroll_user_in_ordered_courses()
  4. 3.x modules/course_uc/course_uc.module \course_uc_enroll_user_in_ordered_courses()

Loops through items in an Ubercart order and enrolls the user in courses purchased.

File

modules/course_uc/course_uc.module, line 325

Code

function course_uc_enroll_user_in_ordered_courses($order) {
  foreach ($order->products as $product) {
    if (!is_array($product->data)) {
      $product->data = unserialize($product->data);
    }
    $node = node_load($product->nid);
    if (empty($product->data['uid'])) {
      $account = user_load($order->uid);
    }
    else {
      $account = user_load($product->data['uid']);
    }
    if (course_node_is_course($node)) {

      // This product is an actual course. They have to be enrolled.
      // This will also satisfy the first payment requirement.
      // @see course_uc_course_enroll()
      if (!($course_enrollment = course_enrollment_load($node->nid, $account->uid))) {

        // Maybe they were already enrolled.
        $course_enrollment = entity_create('course_enrollment', array());
      }
      if (!empty($product->data['course_enrollment'])) {

        // Attach enrollment bundle fields.
        foreach ($product->data['course_enrollment'] as $field => $value) {
          $course_enrollment->{$field} = $value;
        }
      }

      // Set enrollment data.
      $course_enrollment->type = $node->course['enrollment_type'];
      $course_enrollment->nid = $node->nid;
      $course_enrollment->uid = $account->uid;
      $course_enrollment->enrollmenttype = 'ubercart';

      // Activate this enrollment.
      $course_enrollment->status = 1;
      course_enrollment_save($course_enrollment);
    }
    if ($courseNode = course_determine_context('course_uc', 'payment', $node->nid)) {

      // This product is also a course object, other than the first one.
      // Satisfy it!
      $course = course_get_course($courseNode, $account);
      $courseObjects = $course
        ->getObjects();
      $first = reset($courseObjects);
      foreach ($course
        ->getObjects() as $courseObject) {
        if ($first
          ->identifier() != $courseObject
          ->identifier() && $courseObject
          ->getComponent() == 'payment' && $courseObject
          ->getInstanceId() == $node->nid) {

          // Found the course object that matched the instance (product).
          $courseObject
            ->getFulfillment()
            ->setComplete(TRUE)
            ->save();
        }
      }
    }
  }
}