assets/js/llms-metabox-students.js
/**
* LifterLMS Students Metabox Functions
*
* @package LifterLMS/Scripts
*
* @since 3.0.0
* @version 3.33.0
*/
/**
* LifterLMS Students Metabox Functions
*
* @since 3.0.0
* @since 3.33.0 Added the logic to handle the Student's enrollment deletion.
*/
( function( $, undefined ) {
window.llms = window.llms || {};
var MetaboxStudents = function() {
/**
* Initialize
*
* @return void
* @since 3.0.0
* @version 3.0.0
*/
this.init = function() {
var screens = [ 'course', 'llms_membership' ];
if ( window.llms.post.post_type && -1 !== screens.indexOf( window.llms.post.post_type ) ) {
this.$metabox = $( '#lifterlms-students' );
this.bind();
}
};
/**
* Bind dom events
*
* @since 3.0.0
* @since 3.4.0 Unknown.
* @since 3.33.0 Added enrollment deletion handlers.
*
* @return void
*/
this.bind = function() {
var self = this;
this.$metabox.on( 'click', 'a.llms-remove-student', function( e ) {
e.preventDefault();
self.remove_student( $( this ) );
} );
this.$metabox.on( 'click', 'a.llms-delete-enrollment', function( e ) {
e.preventDefault();
self.delete_student_enrollment( $( this ) );
} );
this.$metabox.on( 'click', 'a.llms-add-student', function( e ) {
e.preventDefault();
self.add_student( $( this ) );
} );
$( '#llms-add-student-select' ).llmsStudentsSelect2( { multiple: true } );
$( '#llms-enroll-students' ).on( 'click', function() {
self.enroll_students( $( this ) );
} );
};
/**
* Add a Student
*
* @param obj $el jQuery selector of the add button
* @since 3.0.0
* @version 3.0.0
*/
this.add_student = function( $el ) {
this.update_student_enrollment( $el.attr( 'data-id' ), 'add' );
};
/**
* Handle bulk enrollment via "Enroll New Students" area
*
* @param obj $el jQuery selector for the triggering button
* @return void
* @since 3.0.0
* @version 3.4.0
*/
this.enroll_students = function( $el ) {
var self = this,
$select = $( '#llms-add-student-select' ),
ids = $select.val(),
$container = this.$metabox.find( '.llms-metabox-students-add-new' );
LLMS.Spinner.start( $container );
window.LLMS.Ajax.call( {
data: {
action: 'bulk_enroll_students',
student_ids: ids,
},
beforeSend: function( xhr ) {
if ( ! ids ) {
$el.before( '<span class="llms-error">' + LLMS.l10n.translate( 'Please select a student to enroll' ) + '</span>' );
xhr.abort();
LLMS.Spinner.stop( $container );
}
},
success: function( r ) {
$select.val( null ).trigger( 'change' );
LLMS.Spinner.stop( $container );
window.llms.admin_tables.reload( $( '#llms-gb-table-student-management' ) );
},
} );
};
/**
* Remove a Student
*
* @param obj $el jQuery selector of the add button
* @since 3.0.0
* @version 3.0.0
*/
this.remove_student = function( $el ) {
this.update_student_enrollment( $el.attr( 'data-id' ), 'remove' );
};
/**
* Delete a Student's enrollment.
*
* @since 3.33.0
*
* @param obj $el jQuery selector of the add button.
* @return void
*/
this.delete_student_enrollment = function( $el ) {
this.update_student_enrollment( $el.attr( 'data-id' ), 'delete' );
};
/**
* Execute AJAX call, add spinners, update html view
*
* @since 3.0.0
*
* @param int id Student id.
* @param string status New status [add|remove|delete].
* @return void
*/
this.update_student_enrollment = function( id, status ) {
var $table = $( '#llms-gb-table-student-management' ),
$container = $table.closest( '.llms-table-wrap' );
LLMS.Spinner.start( $container );
window.LLMS.Ajax.call( {
data: {
action: 'update_student_enrollment',
status: status,
student_id: id,
},
success: function() {
// spinner doesn't stop because the table reloader will stop it
window.llms.admin_tables.reload( $table );
},
} );
};
// go
this.init();
};
// initialize the object
window.llms.MetaboxStudents = new MetaboxStudents();
} )( jQuery );