public function readMembershipsSoap($membership)
 {
     try {
         $soap = $this->readMemberships(array('sourcedIdSet' => array('sourcedId' => $membership->getMembershipIds())));
         $response = new Response($this);
         if ($response->getStatus() == 'error') {
             throw new TurnitinSDKException($response->getStatusCode(), $response->getDescription());
         } else {
             $memberships = array();
             if (isset($soap->membershipRecordSet->membershipRecord)) {
                 if (!is_array($soap->membershipRecordSet->membershipRecord)) {
                     $soap->membershipRecordSet->membershipRecord = array($soap->membershipRecordSet->membershipRecord);
                 }
                 foreach ($soap->membershipRecordSet->membershipRecord as $record) {
                     $tiiMembership = new TiiMembership();
                     $tiiMembership->setMembershipId($record->sourcedGUID->sourcedId);
                     $tiiMembership->setClassId($record->membership->collectionSourcedId);
                     $tiiMembership->setUserId($record->membership->member->personSourcedId);
                     $tiiMembership->setRole($record->membership->member->role->roleType);
                     $memberships[] = $tiiMembership;
                 }
             }
             $response->setMemberships($memberships);
         }
         return $response;
     } catch (SoapFault $e) {
         throw new TurnitinSDKException($e->faultcode, $e->faultstring, parent::getLogPath());
     }
 }
 /**
  * Get the users from Turnitin for the specified role, gets the memberships
  * and loops through them to get each user
  *
  * @param string $role the user has in the class
  * @return array $users
  */
 public function get_tii_users_by_role($role = "Learner")
 {
     global $DB;
     $users = array();
     // Get Moodle Course Object.
     $course = $this->get_course_data($this->turnitintooltwo->course);
     $classmembers = $this->get_class_memberships($course->turnitin_cid);
     $turnitincomms = new turnitintooltwo_comms();
     $turnitincall = $turnitincomms->initialise_api();
     $membership = new TiiMembership();
     $membership->setMembershipIds($classmembers);
     // Get Enrolled users from Turnitin.
     try {
         $response = $turnitincall->readMemberships($membership);
         $readmemberships = $response->getMemberships();
     } catch (Exception $e) {
         $turnitincomms->handle_exceptions($e, 'membercheckerror');
     }
     // Add each user to an array.
     foreach ($readmemberships as $readmembership) {
         if ($readmembership->getRole() == $role) {
             // Check user is a Moodle user. otherwise we have to go to Turnitin for their name.
             $moodleuserid = turnitintooltwo_user::get_moodle_user_id($readmembership->getUserId());
             if (!empty($moodleuserid)) {
                 $user = $DB->get_record('user', array('id' => $moodleuserid));
                 $users[$readmembership->getUserId()]["firstname"] = $user->firstname;
                 $users[$readmembership->getUserId()]["lastname"] = $user->lastname;
                 $users[$readmembership->getUserId()]["membership_id"] = $readmembership->getMembershipId();
             } else {
                 $user = new TiiUser();
                 $user->setUserId($readmembership->getUserId());
                 try {
                     $response = $turnitincall->readUser($user);
                     $readuser = $response->getUser();
                     $users[$readmembership->getUserId()]["firstname"] = $readuser->getFirstName();
                     $users[$readmembership->getUserId()]["lastname"] = $readuser->getLastName();
                     $users[$readmembership->getUserId()]["membership_id"] = $readmembership->getMembershipId();
                 } catch (Exception $e) {
                     // A read user exception occurs when users are inactive. Re-enrol user to make them active.
                     $membership = new TiiMembership();
                     $membership->setClassId($course->turnitin_cid);
                     $membership->setUserId($readmembership->getUserId());
                     $membership->setRole($role);
                     try {
                         $turnitincall->createMembership($membership);
                     } catch (InnerException $e) {
                         // Ignore excepion.
                     }
                     try {
                         $user = new TiiUser();
                         $user->setUserId($readmembership->getUserId());
                         $response = $turnitincall->readUser($user);
                         $readuser = $response->getUser();
                         $users[$readmembership->getUserId()]["firstname"] = $readuser->getFirstName();
                         $users[$readmembership->getUserId()]["lastname"] = $readuser->getLastName();
                         $users[$readmembership->getUserId()]["membership_id"] = $readmembership->getMembershipId();
                     } catch (InnerException $e) {
                         $turnitincomms->handle_exceptions($e, 'tiiusergeterror');
                     }
                 }
             }
         }
     }
     return $users;
 }
 /**
  * Set the number of user messages and any instructor rubrics from Turnitin
  */
 public function set_user_values_from_tii()
 {
     $turnitincomms = new turnitintooltwo_comms();
     $turnitincall = $turnitincomms->initialise_api();
     $user = new TiiUser();
     $user->setUserId($this->tii_user_id);
     try {
         $response = $turnitincall->readUser($user);
         $readuser = $response->getUser();
         $this->usermessages = $readuser->getUserMessages();
         $this->save_instructor_rubrics($readuser->getInstructorRubrics());
         $tiiuser = array("id" => $readuser->getUserId(), "firstname" => $readuser->getFirstName(), "lastname" => $readuser->getLastName(), "email" => $readuser->getEmail());
         return $tiiuser;
     } catch (Exception $e) {
         try {
             // We need to join the user to the account, we can only do that by adding the user to a class
             // make one and add them, then delete it. Awful workaround but should be rare.
             $class = new TiiClass();
             $uuid = uniqid(microtime() . '-');
             $class->setTitle($uuid);
             $response = $turnitincall->createClass($class);
             $newclass = $response->getClass();
             $tiiclassid = $newclass->getClassId();
             $membership = new TiiMembership();
             $membership->setRole($this->role);
             $membership->setUserId($this->tii_user_id);
             $membership->setClassId($tiiclassid);
             $response = $turnitincall->createMembership($membership);
             $class->setClassId($tiiclassid);
             $response = $turnitincall->deleteClass($class);
             $response = $turnitincall->readUser($user);
             $readuser = $response->getUser();
             $this->usermessages = $readuser->getUserMessages();
             $this->save_instructor_rubrics($readuser->getInstructorRubrics());
         } catch (Exception $e) {
             $turnitincomms->handle_exceptions($e, 'tiiusergeterror');
         }
     }
 }
 /**
  * Get the users from Turnitin for the specified role, gets the memberships
  * and loops through them to get each user
  *
  * @param string $role the user has in the class
  * @return array $users
  */
 public function get_tii_users_by_role($role = "Learner")
 {
     $users = array();
     // Get Moodle Course Object.
     $course = $this->get_course_data($this->turnitintooltwo->course);
     $classmembers = $this->get_class_memberships($course->turnitin_cid);
     $turnitincomms = new turnitintooltwo_comms();
     $turnitincall = $turnitincomms->initialise_api();
     $membership = new TiiMembership();
     $membership->setMembershipIds($classmembers);
     // Get Enrolled users from Turnitin.
     try {
         $response = $turnitincall->readMemberships($membership);
         $readmemberships = $response->getMemberships();
     } catch (Exception $e) {
         $turnitincomms->handle_exceptions($e, 'membercheckerror');
     }
     // Add each user to an array.
     foreach ($readmemberships as $readmembership) {
         if ($readmembership->getRole() == $role) {
             $user = new TiiUser();
             $user->setUserId($readmembership->getUserId());
             try {
                 $response = $turnitincall->readUser($user);
                 $readuser = $response->getUser();
                 $users[$readmembership->getUserId()]["firstname"] = $readuser->getFirstName();
                 $users[$readmembership->getUserId()]["lastname"] = $readuser->getLastName();
                 $users[$readmembership->getUserId()]["membership_id"] = $readmembership->getMembershipId();
             } catch (Exception $e) {
                 // A read user exception occurs when users are inactive. Re-enrol user to make them active.
                 $membership = new TiiMembership();
                 $membership->setClassId($course->turnitin_cid);
                 $membership->setUserId($readmembership->getUserId());
                 $membership->setRole($role);
                 try {
                     $turnitincall->createMembership($membership);
                     $user = new TiiUser();
                     $user->setUserId($readmembership->getUserId());
                     $response = $turnitincall->readUser($user);
                     $readuser = $response->getUser();
                     $users[$readmembership->getUserId()]["firstname"] = $readuser->getFirstName();
                     $users[$readmembership->getUserId()]["lastname"] = $readuser->getLastName();
                     $users[$readmembership->getUserId()]["membership_id"] = $readmembership->getMembershipId();
                 } catch (InnerException $e) {
                     $turnitincomms->handle_exceptions($e, 'tiiusergeterror');
                 }
             }
         }
     }
     return $users;
 }