PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.1
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.1
4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 All 139 releases
learnpress / assets / src / js / admin / tools / assign-user-course.js

assign-user-course.js in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.4.1, at assets/src/js/admin/tools/assign-user-course.js

229 lines 6.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Assign user to course
3 *
4 * @since 4.2.5.6
5 * @version 1.0.1
6 */
7 import * as AdminUtils from '../utils-admin.js';
8
9 export default function assignUserCourse() {
10 let elFormAssignUserCourse;
11 let elFormUnAssignUserCourse;
12 let elUserUnAssign, elCourseUnAssign, elUserAssign, elCourseAssign;
13 const limitHandle = 5;
14
15 const getAllElements = () => {
16 elFormAssignUserCourse = document.querySelector( '#lp-assign-user-course-form' );
17 elFormUnAssignUserCourse = document.querySelector( '#lp-unassign-user-course-form' );
18
19 if ( elFormAssignUserCourse ) {
20 elUserUnAssign = elFormUnAssignUserCourse.querySelector( '[name=user_ids]' );
21 elCourseUnAssign = elFormUnAssignUserCourse.querySelector( '[name=course_ids]' );
22 }
23
24 if ( elFormUnAssignUserCourse ) {
25 elUserAssign = elFormAssignUserCourse.querySelector( '[name=user_ids]' );
26 elCourseAssign = elFormAssignUserCourse.querySelector( '[name=course_ids]' );
27 }
28 };
29
30 const events = () => {
31 const elForm = document.querySelector( 'form' );
32 if ( ! elForm ) {
33 return;
34 }
35
36 document.addEventListener( 'submit', ( e ) => {
37 const elForm = e.target;
38 const formData = new FormData( e.target ); // Create a FormData object from the form
39
40 // get values of form.
41 const obj = Object.fromEntries( Array.from( formData.keys(), ( key ) => {
42 const val = formData.getAll( key );
43 return [ key, val.length > 1 ? val : val.pop() ];
44 } ) );
45
46 if ( elForm.id === 'lp-assign-user-course-form' ) {
47 e.preventDefault();
48
49 if ( ! confirm( 'Are you sure you want to Assign?' ) ) {
50 return;
51 }
52
53 const { packages, data, totalPage } = handleDataBeforeSend( obj );
54 fetchAPIAssignCourse( packages, data, 1, totalPage );
55 } else if ( elForm.id === 'lp-unassign-user-course-form' ) {
56 e.preventDefault();
57
58 if ( ! confirm( 'Are you sure you want to Unassign?' ) ) {
59 return;
60 }
61
62 const { packages, data, totalPage } = handleDataBeforeSend( obj );
63 fetchAPIUnAssignCourse( packages, data, 1, totalPage );
64 }
65 } );
66 };
67
68 const handleDataBeforeSend = ( dataRaw ) => {
69 // Cut to packages to send, 1 packages has 5 items.
70 let arrCourseIds = [];
71 let arrUserIds = [];
72 if ( typeof dataRaw.course_ids === 'string' ) {
73 arrCourseIds.push( dataRaw.course_ids );
74 } else if ( typeof dataRaw.course_ids === 'object' ) {
75 arrCourseIds = dataRaw.course_ids;
76 }
77
78 if ( typeof dataRaw.user_ids === 'string' ) {
79 arrUserIds.push( dataRaw.user_ids );
80 } else if ( typeof dataRaw.user_ids === 'object' ) {
81 arrUserIds = dataRaw.user_ids;
82 }
83
84 const packages = [];
85 arrCourseIds.map( ( courseId, indexCourse ) => {
86 const item = {};
87
88 item.course_id = courseId;
89 arrUserIds.map( ( userID, indexUser ) => {
90 const newItem = { ...item, user_id: userID };
91 packages.push( newItem );
92 } );
93 } );
94
95 const data = packages.slice( 0, limitHandle );
96 const totalPage = Math.ceil( packages.length / limitHandle );
97
98 return { packages, data, totalPage };
99 };
100
101 const fetchAPIAssignCourse = ( packages, data, page, totalPage ) => {
102 const url = AdminUtils.Api.admin.apiAssignUserCourse;
103 const params = {
104 headers: {
105 'Content-Type': 'application/json',
106 'X-WP-Nonce': lpDataAdmin.nonce,
107 },
108 method: 'POST',
109 body: JSON.stringify( { data, page, totalPage } ),
110 };
111 const elProgress = elFormAssignUserCourse.querySelector( '.percent' );
112 const elButtonAssign = elFormAssignUserCourse.querySelector( '.lp-button-assign-course' );
113 const elMessage = elFormAssignUserCourse.querySelector( '.message' );
114 elButtonAssign.disabled = true;
115
116 AdminUtils.Utils.lpFetchAPI( url, params, {
117 success: ( response ) => {
118 const { status, message } = response;
119 if ( status === 'success' ) {
120 let page = parseInt( response.data.page );
121 const begin = page * limitHandle;
122 const end = begin + limitHandle;
123 data = packages.slice( begin, end );
124 elProgress.innerHTML = response.data.percent;
125 fetchAPIAssignCourse( packages, data, ++page, totalPage );
126 } else if ( status === 'finished' ) {
127 elProgress.innerHTML = '';
128 elMessage.style.color = 'green';
129 elMessage.innerHTML = message;
130 setTimeout( () => {
131 elMessage.innerHTML = '';
132 }, 2000 );
133 elButtonAssign.disabled = false;
134 // Clear data selected on Tom Select.
135 if ( ! elUserAssign.tomselect || ! elCourseAssign.tomselect ) {
136 return;
137 }
138
139 elUserAssign.tomselect.clear();
140 elCourseAssign.tomselect.clear();
141 } else if ( status === 'error' ) {
142 elButtonAssign.disabled = false;
143 elMessage.style.color = 'red';
144 elMessage.innerHTML = message;
145 setTimeout( () => {
146 elMessage.innerHTML = '';
147 }, 2000 );
148 }
149 },
150 error: ( err ) => {
151 elButtonAssign.disabled = false;
152 elMessage.innerHTML = err.message;
153 },
154 completed: () => {
155
156 },
157 } );
158 };
159
160 const fetchAPIUnAssignCourse = ( packages, data, page, totalPage ) => {
161 const url = AdminUtils.Api.admin.apiUnAssignUserCourse;
162 const params = {
163 headers: {
164 'Content-Type': 'application/json',
165 'X-WP-Nonce': lpDataAdmin.nonce,
166 },
167 method: 'POST',
168 body: JSON.stringify( { data, page, totalPage } ),
169 };
170 const elProgress = elFormUnAssignUserCourse.querySelector( '.percent' );
171 const elButtonAssign = elFormUnAssignUserCourse.querySelector( '.lp-button-unassign-course' );
172 const elMessage = elFormUnAssignUserCourse.querySelector( '.message' );
173 elButtonAssign.disabled = true;
174
175 AdminUtils.Utils.lpFetchAPI( url, params, {
176 success: ( response ) => {
177 const { status, message } = response;
178 if ( status === 'success' ) {
179 let page = parseInt( response.data.page );
180 const begin = page * limitHandle;
181 const end = begin + limitHandle;
182 data = packages.slice( begin, end );
183 elProgress.innerHTML = response.data.percent;
184 fetchAPIUnAssignCourse( packages, data, ++page, totalPage );
185 } else if ( status === 'finished' ) {
186 elProgress.innerHTML = '';
187 elMessage.style.color = 'green';
188 elMessage.innerHTML = message;
189 setTimeout( () => {
190 elMessage.innerHTML = '';
191 }, 2000 );
192 elButtonAssign.disabled = false;
193 // Clear data selected on Tom Select.
194 if ( ! elUserUnAssign.tomselect || ! elCourseUnAssign.tomselect ) {
195 return;
196 }
197
198 elUserUnAssign.tomselect.clear();
199 elCourseUnAssign.tomselect.clear();
200 } else if ( status === 'error' ) {
201 elButtonAssign.disabled = false;
202 elMessage.style.color = 'red';
203 elMessage.innerHTML = message;
204 setTimeout( () => {
205 elMessage.innerHTML = '';
206 }, 2000 );
207 }
208 },
209 error: ( err ) => {
210 elButtonAssign.disabled = false;
211 elMessage.innerHTML = err.message;
212 },
213 completed: () => {
214
215 },
216 } );
217 };
218
219 // DOMContentLoaded.
220 document.addEventListener( 'DOMContentLoaded', () => {
221 getAllElements();
222 if ( ! elFormAssignUserCourse ) {
223 return;
224 }
225
226 events();
227 } );
228 }
229