@memberjunction/actions-bizapps-lms
Version:
LMS system integration actions for MemberJunction
244 lines • 9.64 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CreateUserAction = void 0;
const global_1 = require("@memberjunction/global");
const learnworlds_base_action_1 = require("../learnworlds-base.action");
const actions_1 = require("@memberjunction/actions");
/**
* Action to create a new user in LearnWorlds
*/
let CreateUserAction = class CreateUserAction extends learnworlds_base_action_1.LearnWorldsBaseAction {
/**
* Create a new user
*/
async InternalRunAction(params) {
const { Params, ContextUser } = params;
this.params = Params; // Set params for base class to use
try {
// Extract and validate parameters
const email = this.getParamValue(Params, 'Email');
const username = this.getParamValue(Params, 'Username');
const password = this.getParamValue(Params, 'Password');
const firstName = this.getParamValue(Params, 'FirstName');
const lastName = this.getParamValue(Params, 'LastName');
const role = this.getParamValue(Params, 'Role') || 'student';
const isActive = this.getParamValue(Params, 'IsActive') !== false;
const sendWelcomeEmail = this.getParamValue(Params, 'SendWelcomeEmail') !== false;
const tags = this.getParamValue(Params, 'Tags');
const customFields = this.getParamValue(Params, 'CustomFields');
const enrollInCourses = this.getParamValue(Params, 'EnrollInCourses');
if (!email) {
return {
Success: false,
ResultCode: 'VALIDATION_ERROR',
Message: 'Email is required',
Params
};
}
// Prepare user data
const userData = {
email: email,
role: role,
is_active: isActive
};
// Add optional fields
if (username)
userData.username = username;
if (password)
userData.password = password;
if (firstName)
userData.first_name = firstName;
if (lastName)
userData.last_name = lastName;
if (sendWelcomeEmail !== undefined)
userData.send_welcome_email = sendWelcomeEmail;
// Add tags if provided (expecting comma-separated string or array)
if (tags) {
userData.tags = Array.isArray(tags) ? tags : tags.split(',').map((t) => t.trim());
}
// Add custom fields if provided
if (customFields) {
userData.custom_fields = customFields;
}
// Create user
const newUser = await this.makeLearnWorldsRequest('users', 'POST', userData, ContextUser);
// Format user details
const userDetails = {
id: newUser.id,
email: newUser.email,
username: newUser.username,
firstName: newUser.first_name,
lastName: newUser.last_name,
fullName: `${newUser.first_name || ''} ${newUser.last_name || ''}`.trim(),
role: newUser.role,
status: newUser.is_active ? 'active' : 'inactive',
tags: newUser.tags || [],
customFields: newUser.custom_fields || {},
createdAt: newUser.created_at,
loginUrl: newUser.login_url,
resetPasswordUrl: newUser.reset_password_url
};
// Enroll in courses if requested
const enrollmentResults = [];
if (enrollInCourses && enrollInCourses.length > 0) {
const courseIds = Array.isArray(enrollInCourses) ? enrollInCourses : [enrollInCourses];
for (const courseId of courseIds) {
try {
const enrollData = await this.makeLearnWorldsRequest(`courses/${courseId}/enrollments`, 'POST', {
user_id: newUser.id,
justification: 'Enrolled during user creation',
notify_user: false
}, ContextUser);
enrollmentResults.push({
courseId: courseId,
success: true,
enrollmentId: enrollData.id
});
}
catch (enrollError) {
enrollmentResults.push({
courseId: courseId,
success: false,
error: enrollError instanceof Error ? enrollError.message : 'Enrollment failed'
});
}
}
}
// Create summary
const summary = {
userId: userDetails.id,
email: userDetails.email,
username: userDetails.username,
fullName: userDetails.fullName,
role: userDetails.role,
status: userDetails.status,
welcomeEmailSent: sendWelcomeEmail,
coursesEnrolled: enrollmentResults.filter(r => r.success).length,
totalCoursesRequested: enrollmentResults.length,
loginUrl: userDetails.loginUrl
};
// Update output parameters
const outputParams = [...Params];
const userDetailsParam = outputParams.find(p => p.Name === 'UserDetails');
if (userDetailsParam)
userDetailsParam.Value = userDetails;
const enrollmentResultsParam = outputParams.find(p => p.Name === 'EnrollmentResults');
if (enrollmentResultsParam)
enrollmentResultsParam.Value = enrollmentResults;
const summaryParam = outputParams.find(p => p.Name === 'Summary');
if (summaryParam)
summaryParam.Value = summary;
return {
Success: true,
ResultCode: 'SUCCESS',
Message: `Successfully created user ${userDetails.email}`,
Params: outputParams
};
}
catch (error) {
const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
return {
Success: false,
ResultCode: 'ERROR',
Message: `Error creating user: ${errorMessage}`,
Params
};
}
}
/**
* Define the parameters this action expects
*/
get Params() {
const baseParams = this.getCommonLMSParams();
const specificParams = [
{
Name: 'Email',
Type: 'Input',
Value: null
},
{
Name: 'Username',
Type: 'Input',
Value: null
},
{
Name: 'Password',
Type: 'Input',
Value: null
},
{
Name: 'FirstName',
Type: 'Input',
Value: null
},
{
Name: 'LastName',
Type: 'Input',
Value: null
},
{
Name: 'Role',
Type: 'Input',
Value: 'student'
},
{
Name: 'IsActive',
Type: 'Input',
Value: true
},
{
Name: 'SendWelcomeEmail',
Type: 'Input',
Value: true
},
{
Name: 'Tags',
Type: 'Input',
Value: null
},
{
Name: 'CustomFields',
Type: 'Input',
Value: null
},
{
Name: 'EnrollInCourses',
Type: 'Input',
Value: null
},
{
Name: 'UserDetails',
Type: 'Output',
Value: null
},
{
Name: 'EnrollmentResults',
Type: 'Output',
Value: null
},
{
Name: 'Summary',
Type: 'Output',
Value: null
}
];
return [...baseParams, ...specificParams];
}
/**
* Metadata about this action
*/
get Description() {
return 'Creates a new user in LearnWorlds with optional course enrollments and welcome email';
}
};
exports.CreateUserAction = CreateUserAction;
exports.CreateUserAction = CreateUserAction = __decorate([
(0, global_1.RegisterClass)(actions_1.BaseAction, 'CreateUserAction')
], CreateUserAction);
//# sourceMappingURL=create-user.action.js.map