There is one main profile type in EthosCE, used to store learner information, such as first name, last name, location, and any custom fields. Instructions on creating a user with the default profile are found at Creating a user via web service.
Customers using the Faculty Management Add-on feature have access to two additional profile types, Faculty Bio and Disclosure. The PHP script below details the calls required to populate the more complex fields found in these types. It will check a user exists in the system, and create a new account if not found. It then creates a main profile, faculty bio with biography text, and disclosure with two financial relationships.
<?php // #1 Verify the user does not exist by sending a GET request to the system, searching by user 'mail' attribute $curl = curl_init("http://your-domain.com/user.json?mail=newuser@dlc-solutions.com"); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json")); curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($curl, CURLOPT_USERPWD, 'restws_webservice:restws_password'); //Your credentials goes here curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $json = curl_exec($curl); $response = json_decode($json); // A list of users matching criteria will be returned. If this list is empty, a user does not exist in EthosCE with the given e-mail address. $list = $response->list; // #2 Send the user creation request, via POST if (empty($list)) { $user = array( 'name' => 'newuser_username', // Username 'mail' => 'newuser@ethosce.com', 'status' => 1, // Enabled. A value of 0 sets the account as 'Blocked' ); $curl = curl_init("http://your-domain.com/user"); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json")); curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($curl, CURLOPT_USERPWD, 'restws_webservice:restws_password'); //Your credentials goes here curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($user)); $json = curl_exec($curl); // An array detailing the new user entity is returned if successful $userInfo = json_decode($json); // Prepare the profile creation calls $curl = curl_init("http://your-domain.com/profile2"); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json")); curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($curl, CURLOPT_USERPWD, 'restws_webservice:restws_password'); //Your credentials goes here curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); // User profile data $profile = array( 'user' => $userInfo->id, // The value sent back is a user entity, which identifies itself by entity id, which is also the Drupal uid 'label' => 'Profile', 'type' => 'profile', 'field_first_name' => 'John', 'field_middle_name' => 'Middle', 'field_last_name' => 'Smith', 'field_profile_location' => array( 'street' => '1520 Locust Street', 'additional' => 'Suite 1000', 'city' => 'Philadelphia', 'province' => 'PA', 'postal_code' => '19102', 'country' => 'us', // A two character country code ), ); // Create the main profile curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($profile)); $json = curl_exec($curl); print_r("$json \n"); $response = json_decode($json); // User Bio data $bio = array( 'user' => $userInfo->id, 'label' => 'Bio', 'type' => 'bio', 'field_fm_biography' => array( 'value' => 'This is the learner <b>bio</b>",', 'format' => 'filtered_html', // Text format is required. Filtered HTML is availabe to all learners ), 'field_credentials' => 'PhD, MD', ); // Create the bio curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($bio)); $json = curl_exec($curl); $response = json_decode($json); // User disclosure data $disclosure = array( 'user' => $userInfo->id, 'label' => 'Disclosure', 'type' => 'disclosure', 'field_fm_disclose' => 1, ); // Create the disclosure curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($disclosure)); $json = curl_exec($curl); $disclosure_new = json_decode($json); // Add financial relationships field collections to the disclosure $financial_info = array( // Field 1 array( 'field_fm_attribution' => 'Other', 'field_fm_commercial_interest' => 'Pharma Clinic', 'field_fm_dates' => array( 'value' => "2014-08-20T00:00:00Z",// Dates must be sent in this ISO format, Y-m-d\TH:i:sZ, to be properly read from the database 'value2' => "2014-08-28T00:00:00Z", ), 'field_fm_relationship_type' => 'Other', 'field_fm_relationship_type_other' => 'I bought supplies which were reimbursed.', 'field_name' => 'field_fm_financial_relationships', 'host_entity' => array( 'id' => $disclosure_new->id, 'resource' => "profile2", ), ), // Field 2 array( 'field_fm_attribution' => 'Self', 'field_fm_commercial_interest' => 'Pharma Clinic', 'field_fm_dates' => array( 'value' => "2015-08-20T00:00:00Z", // Dates must be sent in this ISO format, Y-m-d\TH:i:sZ, to be properly read from the database 'value2' => "2015-08-28T00:00:00Z", ), 'field_fm_relationship_type' => 'Employment', 'field_fm_relationship_type_other' => 'Paid sponsorship', 'field_name' => 'field_fm_financial_relationships', 'host_entity' => array( 'id' => $disclosure_new->id, 'resource' => "profile2", ), ), ); curl_setopt($curl, CURLOPT_URL, "http://your-domain.com/field_collection_item.json"); foreach ($financial_info as $item) { curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($item)); $json = curl_exec($curl); $response = json_decode($json); print "\nCreated financial relationship " . $json; } }