You are here

function course_uc_enroll_user_in_ordered_courses in Course 3.x

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. 7 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.

Parameters

Order $order:

3 calls to course_uc_enroll_user_in_ordered_courses()
course_uc_uc_order_update in modules/course_uc/course_uc.module
Implements hook_uc_order_update().
EnrollUserInOrderedCourses::doExecute in modules/course_uc/src/Plugin/RulesAction/EnrollUserInOrderedCourses.php
Adds a comment to an order.
EnrollUserInOrderedCourses::doExecute in modules/course_commerce/src/Plugin/RulesAction/EnrollUserInOrderedCourses.php
Adds a comment to an order.

File

modules/course_uc/course_uc.module, line 331

Code

function course_uc_enroll_user_in_ordered_courses(Order $order) {
  $products = Drupal::entityTypeManager()
    ->getStorage('uc_order_product')
    ->loadByProperties([
    'order_id' => $order
      ->id(),
  ]);
  foreach ($products as $product) {
    $node = $product
      ->get('nid')
      ->referencedEntities()[0];
    $course = course_get_course($node);

    // Load a different user if purchasing a course for another user.
    $data = $product
      ->get('data');
    if (!empty($data['uid'])) {
      $account = User::load($data['uid']);
    }
    else {
      $account = $order
        ->getOwner();
    }
    $course_enrollment = $course
      ->enroll($account, [
      'enrollmenttype' => 'ubercart',
    ]);

    // Fill out questions
    if (!empty($data['course_enrollment'])) {

      // Attach enrollment bundle fields.
      foreach ($data['course_enrollment'] as $field => $value) {
        $course_enrollment->{$field} = $value;
      }
      $course_enrollment
        ->save();
    }
    if ($course = course_determine_context('ubercart', $course
      ->id())) {

      // This product is also a course object, other than the first one.
      // Satisfy it!
      $courseObjects = $course
        ->getObjects();
      foreach ($course
        ->getObjects() as $courseObject) {
        if ($courseObject
          ->getComponent() == 'ubercart' && $courseObject
          ->getInstanceId() == $course
          ->id()) {

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