/** * 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 );