PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.8
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.8
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
← All changes | inc/admin/class-lp-admin-assets.php +613 -135 4.1.7.3.24.4.8 View file →
@@ -1,11 +1,16 @@
1 1 <?php
2 +
3 +use LearnPress\Helpers\Config;
4 +use LearnPress\Helpers\Template;
5 +use LearnPress\Models\CourseModel;
6 +use LearnPress\Statistics\PeriodResolver;
7 +
2 8 /**
3 9 * Class LP_Admin_Assets
4 10 *
5 11 * Manage admin assets
6 12 */
7 -
8 13 class LP_Admin_Assets extends LP_Abstract_Assets {
9 14 protected static $_instance;
10 15
11 16 /**
@@ -11,13 +16,83 @@
11 16 /**
12 17 * LP_Admin_Assets constructor.
13 18 */
14 19 protected function __construct() {
15 - add_action( 'admin_footer', array( $this, 'show_overlay' ) );
20 + add_action( 'admin_footer', array( $this, 'add_elements_global' ) );
21 + add_action( 'admin_print_scripts', array( $this, 'load_scripts_styles_on_head' ), - 1 );
16 22 parent::__construct();
17 23 }
18 24
19 25 /**
26 + * Add javascript to head
27 + * Add style to head
28 + *
29 + * @return void
30 + * @version 1.0.0
31 + * @since 4.2.5.6
32 + */
33 + public function load_scripts_styles_on_head() {
34 + LP_Helper::print_inline_script_tag( 'lpDataAdmin', $this->localize_data_global(), array( 'id' => 'lpDataAdmin' ) );
35 + LP_Helper::print_inline_script_tag( 'lpData', $this->localize_data_global(), array( 'id' => 'lpData' ) );
36 + }
37 +
38 + /**
39 + * Localize data for all page backend.
40 + *
41 + * @return array
42 + * @since 4.2.5.6
43 + * @version 1.0.2
44 + */
45 + public function localize_data_global(): array {
46 + $screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;
47 +
48 + ob_start();
49 + Template::instance()->get_admin_template( 'search-author-field.php' );
50 + $html_search_author_field = ob_get_clean();
51 +
52 + return apply_filters(
53 + 'learn-press/admin/localize-data-global',
54 + array(
55 + 'site_url' => site_url(),
56 + 'user_id' => get_current_user_id(),
57 + 'is_admin' => current_user_can( ADMIN_ROLE ),
58 + 'theme' => get_stylesheet(),
59 + 'lp_version' => LP()->version,
60 + 'lp_rest_url' => get_rest_url(),
61 + 'lp_rest_load_ajax' => get_rest_url( null, 'lp/v1/load_content_via_ajax/' ), // @deprecated 4.3.0
62 + 'lpAjaxUrl' => LP_Settings::url_handle_lp_ajax(),
63 + 'nonce' => wp_create_nonce( 'wp_rest' ),
64 + 'courses_url' => learn_press_get_page_link( 'courses' ),
65 + 'urlParams' => lp_archive_skeleton_get_args(),
66 + 'i18n' => array(
67 + 'select_page' => esc_html__( 'Select page', 'learnpress' ),
68 + 'yes' => esc_html__( 'Yes' ),
69 + 'cancel' => esc_html__( 'Cancel' ),
70 + 'generate_with_ai' => esc_html__( 'Generate with AI', 'learnpress' ),
71 + 'confirm_close_ai' => esc_html__( 'Are you sure you want to close? Generate data will stop.', 'learnpress' ),
72 + ),
73 + 'current_screen' => $screen ? $screen->id : '',
74 + 'show_search_author_field' => empty( $html_search_author_field ) ? 0 : $html_search_author_field,
75 + 'toast' => array(
76 + 'gravity' => 'bottom',
77 + 'position' => 'center',
78 + 'duration' => 3000,
79 + 'close' => 1,
80 + 'stopOnFocus' => 1,
81 + 'classPrefix' => 'lp-toast',
82 + ),
83 + 'single_instructor_id' => learn_press_get_page_id( 'single_instructor' ),
84 + 'lpAi' => array(
85 + 'config' => Config::instance()->get( 'open-ai-modal', 'settings' ),
86 + 'modelImage' => LP_Settings::get_option( 'open_ai_image_model_type', 'gpt-image-1' ),
87 + ),
88 + 'enable_open_ai' => LP_Settings::get_option( 'enable_open_ai', 'no' ) === 'yes'
89 + && ! empty( LP_Settings::get_option( 'open_ai_secret_key', '' ) ),
90 + )
91 + );
92 + }
93 +
94 + /**
20 95 * Get localize script
21 96 *
22 97 * @return array
23 98 */
@@ -24,17 +99,19 @@
24 99 protected function _get_script_data(): array {
25 100 $current_screen = get_current_screen();
26 101
27 102 return array(
28 - 'learn-press-global' => learn_press_global_script_params(),
29 - 'learn-press-meta-box-order' => apply_filters(
103 + 'learn-press-global' => learn_press_global_script_params(),
104 + /*
105 + 'learn-press-meta-box-order' => apply_filters(
30 106 'learn-press/meta-box-order/script-data',
31 107 array(
32 108 'i18n_error' => esc_html__( 'Oops! Error.', 'learnpress' ),
33 109 'i18n_guest' => esc_html__( 'Guest', 'learnpress' ),
34 110 )
35 - ),
36 - 'learn-press-update' => apply_filters(
111 + ),*/
112 + /*
113 + 'learn-press-update' => apply_filters(
37 114 'learn-press/upgrade/script-data',
38 115 array(
39 116 'i18n_confirm' => esc_html__(
40 117 'Before taking this action, we strongly recommend you backup your site first before proceeding. If you encounter any problems, please do not hesitate to contact our support team. Are you sure to proceed with the update protocol?',
@@ -40,10 +117,10 @@
40 117 'Before taking this action, we strongly recommend you backup your site first before proceeding. If you encounter any problems, please do not hesitate to contact our support team. Are you sure to proceed with the update protocol?',
41 118 'learnpress'
42 119 ),
43 120 )
44 - ),
45 - 'lp-admin' => apply_filters(
121 + ),*/
122 + 'lp-admin' => apply_filters(
46 123 'learn-press/admin/script-data',
47 124 array(
48 125 'ajax' => admin_url( 'admin-ajax.php' ),
49 126 'questionTypes' => learn_press_question_types(),
@@ -50,12 +127,165 @@
50 127 'supportAnswerOptions' => learn_press_get_question_support_answer_options(),
51 128 'screen' => $current_screen,
52 129 )
53 130 ),
131 + // Statistics dashboard config → JS global lpAdminStatisticSettings.
132 + // REST root + nonce come from lpDataAdmin (already on every admin page).
133 + 'lp-admin-statistic' => apply_filters(
134 + 'learn-press/admin/statistics/script-data',
135 + array(
136 + 'restNamespace' => 'lp/v1/statistics',
137 + 'adminUrl' => admin_url(),
138 + // decode: JS renders via textContent, entities would show literally.
139 + 'currencySymbol' => html_entity_decode( learn_press_get_currency_symbol() ),
140 + 'completionTarget' => (int) apply_filters( 'learn-press/statistics/completion-target', 70 ),
141 + // Completion badge bands: >= green is green, >= yellow is yellow, below is red.
142 + 'completionBadge' => apply_filters(
143 + 'learn-press/statistics/completion-badge-thresholds',
144 + array(
145 + 'green' => 60,
146 + 'yellow' => 40,
147 + )
148 + ),
149 + // Date-range dropdown: per-preset resolved labels ( the server is the
150 + // single source of calendar logic — JS never re-derives windows ).
151 + 'dateRange' => array(
152 + 'presets' => self::statistics_date_range_presets(),
153 + 'startOfWeek' => (int) get_option( 'start_of_week', 1 ),
154 + 'dateFormat' => (string) get_option( 'date_format', 'F j, Y' ),
155 + ),
156 + 'i18n' => array(
157 + 'loadError' => esc_html__( 'Failed to load statistics data.', 'learnpress' ),
158 + 'noData' => esc_html__( 'No data for this period.', 'learnpress' ),
159 + // Date-range dropdown.
160 + 'presets' => esc_html__( 'Presets', 'learnpress' ),
161 + 'custom' => esc_html__( 'Custom', 'learnpress' ),
162 + 'compareTo' => esc_html__( 'Compare to', 'learnpress' ),
163 + 'previousPeriod' => esc_html__( 'Previous period', 'learnpress' ),
164 + 'previousYear' => esc_html__( 'Previous year', 'learnpress' ),
165 + 'update' => esc_html__( 'Update', 'learnpress' ),
166 + 'from' => esc_html__( 'From', 'learnpress' ),
167 + 'to' => esc_html__( 'To', 'learnpress' ),
168 + 'selectDateRange' => esc_html__( 'Select a date range', 'learnpress' ),
169 + 'itemsCount' => esc_html__( '%d items', 'learnpress' ),
170 + 'cappedNotice' => esc_html__( 'Showing the first %d rows. Narrow the period or filters to see the rest.', 'learnpress' ),
171 + 'vsPrevPeriod' => esc_html__( 'vs previous period', 'learnpress' ),
172 + 'revenue' => esc_html__( 'Revenue', 'learnpress' ),
173 + 'enrollments' => esc_html__( 'Enrollments', 'learnpress' ),
174 + 'aov' => esc_html__( 'Avg. order value: %s', 'learnpress' ),
175 + 'belowTarget' => esc_html__( '%d below completion target', 'learnpress' ),
176 + 'failRate' => esc_html__( '%s%% of all orders', 'learnpress' ),
177 + 'course' => esc_html__( 'Course', 'learnpress' ),
178 + 'orders' => esc_html__( 'Orders', 'learnpress' ),
179 + 'aovShort' => esc_html__( 'AOV', 'learnpress' ),
180 + 'status' => esc_html__( 'Status', 'learnpress' ),
181 + 'enrolled' => esc_html__( 'Enrolled', 'learnpress' ),
182 + 'completion' => esc_html__( 'Completion', 'learnpress' ),
183 + 'instructor' => esc_html__( 'Instructor', 'learnpress' ),
184 + 'courses' => esc_html__( 'Courses', 'learnpress' ),
185 + 'topCourses' => esc_html__( 'Top courses', 'learnpress' ),
186 + 'topSoldCourses' => esc_html__( 'Top sold courses', 'learnpress' ),
187 + 'healthy' => esc_html__( 'Healthy', 'learnpress' ),
188 + 'watchCompletion' => esc_html__( 'Watch completion', 'learnpress' ),
189 + 'highFailedQuizzes' => esc_html__( 'High failed quizzes', 'learnpress' ),
190 + 'needsFulfillmentReview' => esc_html__( 'Needs fulfillment review', 'learnpress' ),
191 + 'awaitingPayment' => esc_html__( 'Awaiting payment', 'learnpress' ),
192 + 'exceptionRate' => esc_html__( '%s%% of all orders', 'learnpress' ),
193 + 'orderId' => esc_html__( 'Order ID', 'learnpress' ),
194 + 'student' => esc_html__( 'Student', 'learnpress' ),
195 + 'issue' => esc_html__( 'Issue', 'learnpress' ),
196 + 'date' => esc_html__( 'Date', 'learnpress' ),
197 + 'severity' => esc_html__( 'Severity', 'learnpress' ),
198 + 'high' => esc_html__( 'High', 'learnpress' ),
199 + 'medium' => esc_html__( 'Medium', 'learnpress' ),
200 + 'low' => esc_html__( 'Low', 'learnpress' ),
201 + 'orderExceptions' => esc_html__( 'Recent order exceptions', 'learnpress' ),
202 + 'noOrderExceptions' => esc_html__( 'No failed or cancelled orders in this period.', 'learnpress' ),
203 + 'addedThisPeriod' => esc_html__( '%d added this period', 'learnpress' ),
204 + 'needsInstructorAction' => esc_html__( 'Needs instructor action', 'learnpress' ),
205 + 'scheduledReleases' => esc_html__( 'Scheduled releases', 'learnpress' ),
206 + 'targetPercent' => esc_html__( 'Target: %s%%', 'learnpress' ),
207 + 'publishedCourses' => esc_html__( 'Published courses', 'learnpress' ),
208 + 'noCoursePerformance' => esc_html__( 'No course performance data in this period.', 'learnpress' ),
209 + 'coursePerformance' => esc_html__( 'Course performance', 'learnpress' ),
210 + 'lessons' => esc_html__( 'Lessons', 'learnpress' ),
211 + 'quizzes' => esc_html__( 'Quizzes', 'learnpress' ),
212 + 'assignments' => esc_html__( 'Assignments', 'learnpress' ),
213 + 'published' => esc_html__( 'Published', 'learnpress' ),
214 + 'pending' => esc_html__( 'Pending', 'learnpress' ),
215 + 'future' => esc_html__( 'Future', 'learnpress' ),
216 + 'drafts' => esc_html__( 'Drafts', 'learnpress' ),
217 + 'total' => esc_html__( 'Total', 'learnpress' ),
218 + 'content' => esc_html__( 'Content', 'learnpress' ),
219 + 'newThisPeriod' => esc_html__( '+%d this period', 'learnpress' ),
220 + 'activeInPeriod' => esc_html__( '%d active in this period', 'learnpress' ),
221 + 'activeThisPeriod' => esc_html__( 'active this period', 'learnpress' ),
222 + 'afterEnrollment' => esc_html__( 'After enrollment', 'learnpress' ),
223 + 'currentLearners' => esc_html__( 'Current learners', 'learnpress' ),
224 + 'completionRateSub' => esc_html__( '%s%% completion rate', 'learnpress' ),
225 + 'registeredUsers' => esc_html__( 'Registered users', 'learnpress' ),
226 + 'topStudents' => esc_html__( 'Top students', 'learnpress' ),
227 + 'topCoursesByStudents' => esc_html__( 'Top courses by students', 'learnpress' ),
228 + 'avgScore' => esc_html__( 'Quiz pass rate', 'learnpress' ),
229 + 'lastActive' => esc_html__( 'Last active', 'learnpress' ),
230 + 'startedLabel' => esc_html__( 'Started', 'learnpress' ),
231 + 'completedLabel' => esc_html__( 'Completed', 'learnpress' ),
232 + 'activeLast7dShort' => esc_html__( 'Active 7d', 'learnpress' ),
233 + 'statusActive' => esc_html__( 'Active', 'learnpress' ),
234 + 'statusAtRisk' => esc_html__( 'At risk', 'learnpress' ),
235 + 'statusIdle' => esc_html__( 'Idle', 'learnpress' ),
236 + // Instructors tab.
237 + 'ofNetSales' => esc_html__( '%s%% of net sales', 'learnpress' ),
238 + 'ofTotalInstructors' => esc_html__( '%d total', 'learnpress' ),
239 + 'students' => esc_html__( 'Students', 'learnpress' ),
240 + 'sold' => esc_html__( 'Sold', 'learnpress' ),
241 + 'risk' => esc_html__( 'Risk', 'learnpress' ),
242 + 'actionRequired' => esc_html__( 'Action required', 'learnpress' ),
243 + 'riskHigh' => esc_html__( 'High', 'learnpress' ),
244 + 'riskMedium' => esc_html__( 'Medium', 'learnpress' ),
245 + 'riskHealthy' => esc_html__( 'Healthy', 'learnpress' ),
246 + 'instructorPerformance' => esc_html__( 'Instructor performance', 'learnpress' ),
247 + 'instructorReport' => esc_html__( 'Instructor report', 'learnpress' ),
248 + 'noInstructorData' => esc_html__( 'No instructor data in this period.', 'learnpress' ),
249 + 'instructorReportEmpty' => esc_html__( 'This instructor has no courses yet.', 'learnpress' ),
250 + 'watchlistActions' => array(
251 + 'review_quiz_difficulty' => esc_html__( 'Review quiz difficulty', 'learnpress' ),
252 + 'build_curriculum' => esc_html__( 'Build the curriculum', 'learnpress' ),
253 + 'add_practice_content' => esc_html__( 'Add practice content', 'learnpress' ),
254 + 'monitor' => esc_html__( 'Monitor', 'learnpress' ),
255 + ),
256 + ),
257 + )
258 + ),
259 + // @deprecated tag 'learn-press-admin-course-editor' 4.4.2 - no any enqueue js for that.
260 + // 'learn-press-admin-course-editor' => $this->get_course_data_for_editor_vue(),
54 261 );
55 262 }
56 263
57 264 /**
265 + * Preset entries for the statistics date-range dropdown.
266 + *
267 + * UI presets in display order. Labels are resolved server-side so JS never
268 + * re-implements calendar logic.
269 + *
270 + * @return array[] [ { value, name, rangeLabel } ]
271 + * @since 4.4.2
272 + */
273 + private static function statistics_date_range_presets(): array {
274 + $presets = array();
275 +
276 + foreach ( PeriodResolver::UI_PRESETS as $preset ) {
277 + $presets[] = array(
278 + 'value' => $preset,
279 + 'name' => PeriodResolver::preset_name( $preset ),
280 + 'rangeLabel' => PeriodResolver::range_label_for( PeriodResolver::resolve( $preset ) ),
281 + );
282 + }
283 +
284 + return $presets;
285 + }
286 +
287 + /**
58 288 * Get default scripts in admin.
59 289 *
60 290 * @return mixed
61 291 */
@@ -60,66 +290,108 @@
60 290 * @return mixed
61 291 */
62 292 protected function _get_scripts(): array {
63 293 $lp_admin_js = new LP_Asset_Key(
64 - $this->url( self::$_folder_source . 'js/admin/admin' . self::$_min_assets . '.js' ),
65 - array( 'learn-press-global', 'lp-utils', 'wp-color-picker', 'jspdf', 'vue-libs', 'wp-i18n' ),
294 + $this->url( 'js/dist/admin/admin' . self::$_min_assets . '.js' ),
295 + array( 'wp-i18n', 'lp-utils' ),
66 296 array(),
67 297 0,
68 - 1
298 + 0,
299 + '',
300 + array( 'strategy' => 'async' )
69 301 );
70 - $lp_admin_js->exclude_screen( array( 'plugin-install' ) );
302 + $lp_admin_js->exclude_screen(
303 + array(
304 + 'plugin-install',
305 + 'learnpress_page_learn-press-statistics',
306 + 'learnpress_page_learn-press-addons',
307 + )
308 + );
71 309
72 310 $scripts = apply_filters(
73 311 'learn-press/admin-default-scripts',
74 312 array(
313 + 'lp-load-ajax' => new LP_Asset_Key(
314 + self::url( 'js/dist/loadAJAX' . self::$_min_assets . '.js' ),
315 + array(),
316 + array(),
317 + 0,
318 + 0,
319 + '',
320 + array( 'strategy' => 'async' )
321 + ),
75 322 // need build if change source vue
76 - 'vue-libs' => new LP_Asset_Key( $this->url( 'js/vendor/vue/vue_libs.js' ) ),
77 - 'select2' => new LP_Asset_Key( $this->url( 'src/js/vendor/select2.full.min.js' ) ),
78 - 'jquery-tipsy' => new LP_Asset_Key( $this->url( 'src/js/vendor/jquery/jquery-tipsy.js' ) ),
79 - 'jspdf' => new LP_Asset_Key( $this->url( 'src/js/vendor/jspdf.min.js' ) ),
80 - 'chart' => new LP_Asset_Key( $this->url( 'src/js/vendor/chart.min.js' ) ),
81 - 'dropdown-pages' => new LP_Asset_Key( $this->url( self::$_folder_source . 'js/admin/share/dropdown-pages' . self::$_min_assets . '.js' ) ),
323 + //'vue-libs' => new LP_Asset_Key( $this->url( 'js/vendor/vue/vue_libs.js' ) ),
324 + //'select2' => new LP_Asset_Key( $this->url( 'src/js/vendor/select2.full.min.js' ) ),
325 + 'jquery-tipsy' => new LP_Asset_Key( $this->url( 'src/js/vendor/jquery/jquery-tipsy.js' ) ),
326 + 'html2pdf' => new LP_Asset_Key( $this->url( 'src/js/vendor/html2pdf.bundle.min.js' ) ),
327 + 'lp-utils' => new LP_Asset_Key(
328 + $this->url( 'js/dist/utils' . self::$_min_assets . '.js' ),
329 + array(),
330 + array(),
331 + 1
332 + ),
333 + /*
82 334 'jquery-ui-timepicker-addon' => new LP_Asset_Key(
83 335 $this->url( 'src/js/vendor/jquery/jquery-ui-timepicker-addon.js' ),
84 336 array( 'jquery-ui-datepicker' )
85 - ),
86 - 'themes-addons' => new LP_Asset_Key(
87 - $this->url( 'js/dist/admin/pages/themes-addons' . self::$_min_assets . '.js' ),
88 - array( 'jquery' ),
337 + ),*/
338 + 'lp-addons' => new LP_Asset_Key(
339 + $this->url( 'js/dist/admin/addons' . self::$_min_assets . '.js' ),
340 + array(),
89 341 array( 'learnpress_page_learn-press-addons' ),
90 342 0,
91 - 1
343 + 0,
344 + '',
345 + array( 'strategy' => 'async' )
92 346 ),
93 - 'advanced-list' => new LP_Asset_Key( $this->url( self::$_folder_source . 'js/admin/share/advanced-list' . self::$_min_assets . '.js' ) ),
94 - 'learn-press-global' => new LP_Asset_Key(
347 + // 'advanced-list' => new LP_Asset_Key( $this->url( self::$_folder_source . 'js/admin/share/advanced-list' . self::$_min_assets . '.js' ) ),
348 + 'learn-press-global' => new LP_Asset_Key(
95 349 $this->url( self::$_folder_source . 'js/global' . self::$_min_assets . '.js' ),
96 - array( 'jquery', 'underscore', 'utils', 'jquery-ui-sortable', 'select2' ),
97 - array( 'learnpress' )
350 + array( 'jquery', 'underscore', 'utils', 'jquery-ui-sortable' )
98 351 ),
99 - 'lp-utils' => new LP_Asset_Key(
100 - $this->url( 'js/dist/utils' . self::$_min_assets . '.js' ),
101 - array(),
102 - array(),
103 - 1
352 + 'lp-admin' => $lp_admin_js,
353 + 'lp-admin-mcp-api-keys' => new LP_Asset_Key(
354 + $this->url( 'js/dist/admin/mcp-api-keys.js' ),
355 + [ 'lp-load-ajax' ],
356 + [ 'learnpress_page_learn-press-settings' ],
357 + 0,
358 + 1,
359 + '',
360 + array( 'strategy' => 'defer' )
104 361 ),
105 - 'lp-admin' => $lp_admin_js,
106 - 'lp-admin-learnpress' => new LP_Asset_Key(
107 - $this->url( self::$_folder_source . 'js/admin/learnpress' . self::$_min_assets . '.js' ),
362 + 'lp-admin-webhooks' => new LP_Asset_Key(
363 + $this->url( 'js/dist/admin/webhooks.js' ),
364 + [ 'lp-load-ajax', 'lp-admin' ],
365 + [ 'learnpress_page_learn-press-settings' ],
366 + 0,
367 + 1,
368 + '',
369 + [ 'strategy' => 'defer' ]
370 + ),
371 + 'lp-admin-learnpress' => new LP_Asset_Key(
372 + $this->url( 'js/dist/admin/learnpress' . self::$_min_assets . '.js' ),
108 373 array(
109 374 'learn-press-global',
110 - 'lp-utils',
111 375 'wp-color-picker',
112 376 'jquery-tipsy',
113 - 'dropdown-pages',
114 377 'wp-api-fetch',
115 - 'jquery-ui-timepicker-addon',
378 + // 'jquery-ui-timepicker-addon',
379 + // 'select2'
116 380 ),
117 - array( LP_LESSON_CPT, LP_QUIZ_CPT, LP_COURSE_CPT, LP_ORDER_CPT, 'learnpress_page_learn-press-settings' ),
381 + array(
382 + LP_LESSON_CPT,
383 + LP_QUIZ_CPT,
384 + LP_COURSE_CPT,
385 + // LP_ORDER_CPT,
386 + 'learnpress_page_learn-press-settings',
387 + ),
118 388 0,
119 - 1
389 + 1,
390 + '',
391 + array( 'strategy' => 'defer' )
120 392 ),
121 - 'lp-duplicate-post' => new LP_Asset_Key(
393 + 'lp-duplicate-post' => new LP_Asset_Key(
122 394 $this->url( self::$_folder_source . 'js/admin/lp-duplicate-post' . self::$_min_assets . '.js' ),
123 395 array( 'jquery' ),
124 396 array(
125 397 'edit-' . LP_COURSE_CPT,
@@ -129,41 +401,101 @@
129 401 ),
130 402 0,
131 403 1
132 404 ),
405 + /*
133 406 'learn-press-admin-course-editor' => new LP_Asset_Key(
134 407 $this->url( 'js/dist/admin/editor/course' . self::$_min_assets . '.js' ),
135 - array( 'vue-libs' ),
408 + array( 'vue-libs', 'lp-utils' ),
136 409 array( LP_COURSE_CPT ),
137 410 0,
138 411 0
412 + ),*/
413 + 'lp-admin-courses' => new LP_Asset_Key(
414 + $this->url( 'dist/js/admin/admin-courses' . self::$_min_assets . '.js' ),
415 + array( 'lp-load-ajax', 'wp-i18n' ),
416 + array( 'edit-' . LP_COURSE_CPT ),
417 + 0,
418 + 0,
419 + '',
420 + array( 'strategy' => 'async' )
139 421 ),
422 + 'lp-edit-course' => new LP_Asset_Key(
423 + $this->url( 'dist/js/admin/edit-course' . self::$_min_assets . '.js' ),
424 + array( 'lp-load-ajax' ),
425 + array(),
426 + 1,
427 + 0,
428 + '',
429 + array( 'strategy' => 'async' )
430 + ),
431 + 'lp-edit-quiz' => new LP_Asset_Key(
432 + $this->url( 'dist/js/admin/edit-quiz' . self::$_min_assets . '.js' ),
433 + array( 'lp-load-ajax' ),
434 + array(),
435 + 1,
436 + 0,
437 + '',
438 + array( 'strategy' => 'async' )
439 + ),
440 + 'lp-edit-question' => new LP_Asset_Key(
441 + $this->url( 'dist/js/admin/edit-question' . self::$_min_assets . '.js' ),
442 + array( 'lp-load-ajax' ),
443 + array(),
444 + 1,
445 + 0,
446 + '',
447 + array( 'strategy' => 'async' )
448 + ),
449 + /*
140 450 'learn-press-admin-quiz-editor' => new LP_Asset_Key(
141 451 $this->url( 'js/dist/admin/editor/quiz' . self::$_min_assets . '.js' ),
142 - array( 'vue-libs' ),
452 + array( 'vue-libs', 'lp-utils' ),
143 453 array( LP_QUIZ_CPT ),
144 454 0,
145 455 0
146 - ),
456 + ),*/
457 + /*
147 458 'learn-press-admin-question-editor' => new LP_Asset_Key(
148 459 $this->url( 'js/dist/admin/editor/question' . self::$_min_assets . '.js' ),
149 - array( 'vue-libs', 'lodash' ),
460 + array( 'vue-libs', 'lodash', 'lp-utils' ),
150 461 array( LP_QUESTION_CPT ),
151 462 0,
152 463 0
153 - ),
464 + ),*/
465 + /*
154 466 'learn-press-meta-box-order' => new LP_Asset_Key(
155 467 $this->url( self::$_folder_source . 'js/admin/partial/meta-box-order' . self::$_min_assets . '.js' ),
156 468 array(
157 469 'vue-libs',
158 470 'advanced-list',
159 - 'lp-modal-search-courses',
160 - 'lp-modal-search-users',
471 + //'lp-modal-search-courses',
472 + //'lp-modal-search-users',
161 473 ),
162 474 array( LP_ORDER_CPT ),
163 475 0,
164 476 1
477 + ),*/
478 + 'lp-admin-order' => new LP_Asset_Key(
479 + $this->url( 'js/dist/admin/admin-order' . self::$_min_assets . '.js' ),
480 + array( 'html2pdf', 'lp-load-ajax' ),
481 + array( LP_ORDER_CPT ),
482 + 0,
483 + 0,
484 + '',
485 + array( 'strategy' => 'defer' )
165 486 ),
487 + 'lp-admin-orders' => new LP_Asset_Key(
488 + $this->url( 'js/dist/admin/admin-orders' . self::$_min_assets . '.js' ),
489 + array(),
490 + array( 'edit-' . LP_ORDER_CPT ),
491 + 0,
492 + 0,
493 + '',
494 + array( 'strategy' => 'async' )
495 + ),
496 +
497 + /*
166 498 'learn-press-sync-data' => new LP_Asset_Key(
167 499 $this->url( 'js/dist/admin/pages/sync-data' . self::$_min_assets . '.js' ),
168 500 array(),
169 501 array( 'learnpress_page_learn-press-tools' ),
@@ -168,16 +500,17 @@
168 500 array(),
169 501 array( 'learnpress_page_learn-press-tools' ),
170 502 0,
171 503 1
172 - ),
173 - 'lp-setup' => new LP_Asset_Key(
174 - $this->url( 'js/dist/admin/pages/setup' . self::$_min_assets . '.js' ),
175 - array( 'jquery', 'lp-utils', 'dropdown-pages' ),
504 + ),*/
505 + 'lp-setup-wizard' => new LP_Asset_Key(
506 + $this->url( 'dist/js/admin/setup-wizard' . self::$_min_assets . '.js' ),
507 + [],
176 508 array( 'lp-page-setup' ),
177 509 0,
178 510 1
179 511 ),
512 + /*
180 513 'learn-press-statistic' => new LP_Asset_Key(
181 514 $this->url( 'js/dist/admin/pages/statistic' . self::$_min_assets . '.js' ),
182 515 array( 'jquery', 'jquery-ui-datepicker', 'chart' ),
183 516 array( 'learnpress_page_learn-press-statistics' ),
@@ -182,25 +515,10 @@
182 515 array( 'jquery', 'jquery-ui-datepicker', 'chart' ),
183 516 array( 'learnpress_page_learn-press-statistics' ),
184 517 0,
185 518 1
186 - ),
187 - 'lp-advertisement' => new LP_Asset_Key(
188 - $this->url( self::$_folder_source . 'js/admin/share/advertisement' . self::$_min_assets . '.js' ),
189 - array(),
190 - array(
191 - 'edit-' . LP_COURSE_CPT,
192 - 'edit-' . LP_QUESTION_CPT,
193 - 'edit-' . LP_LESSON_CPT,
194 - 'edit-' . LP_ORDER_CPT,
195 - 'edit-' . LP_QUIZ_CPT,
196 - 'learnpress_page_learn-press-settings',
197 - 'learnpress_page_learn-press-tools',
198 - 'learnpress_page_learn-press-statistics',
199 - ),
200 - 0,
201 - 1
202 - ),
519 + ),*/
520 + /*
203 521 'lp-modal-search-courses' => new LP_Asset_Key(
204 522 $this->url( self::$_folder_source . 'js/admin/share/modal-search-courses' . self::$_min_assets . '.js' ),
205 523 array(
206 524 'vue-libs',
@@ -208,23 +526,10 @@
208 526 ),
209 527 array( LP_ORDER_CPT ),
210 528 1,
211 529 1
212 - ),
213 - 'lp-admin-tabs' => new LP_Asset_Key(
214 - $this->url( self::$_folder_source . 'js/admin/share/admin-tabs' . self::$_min_assets . '.js' ),
215 - array( 'jquery' ),
216 - array( LP_COURSE_CPT ),
217 - 0,
218 - 1
219 - ),
220 - 'lp-admin-notice' => new LP_Asset_Key(
221 - $this->url( self::$_folder_source . 'js/admin/share/admin-notice' . self::$_min_assets . '.js' ),
222 - array( 'jquery' ),
223 - array(),
224 - 0,
225 - 1
226 - ),
530 + ),*/
531 + /*
227 532 'lp-modal-search-users' => new LP_Asset_Key(
228 533 $this->url( self::$_folder_source . 'js/admin/share/modal-search-users' . self::$_min_assets . '.js' ),
229 534 array( 'jquery' ),
230 535 array( LP_ORDER_CPT ),
@@ -229,60 +534,114 @@
229 534 array( 'jquery' ),
230 535 array( LP_ORDER_CPT ),
231 536 1,
232 537 1
233 - ),
234 - 'lp-tools-course-tab' => new LP_Asset_Key(
538 + ),*/
539 + 'lp-tools-course-tab' => new LP_Asset_Key(
235 540 $this->url( 'js/dist/admin/pages/tools' . self::$_min_assets . '.js' ),
236 - array(
237 - 'jquery',
238 - 'wp-element',
239 - 'wp-compose',
240 - 'wp-components',
241 - 'wp-data',
242 - 'wp-hooks',
243 - 'wp-api-fetch',
244 - 'lodash',
245 - 'vue-libs',
246 -
247 - ),
541 + [],
248 542 array( 'learnpress_page_learn-press-tools' ),
249 543 0,
250 - 1
544 + 1,
545 + '',
546 + array( 'strategy' => 'defer' )
251 547 ),
252 - 'lp-dashboard' => new LP_Asset_Key(
548 + /*
549 + 'lp-dashboard' => new LP_Asset_Key(
253 550 self::url( 'js/dist/admin/pages/dashboard' . self::$_min_assets . '.js' ),
254 - array(
255 - 'jquery',
256 - 'wp-element',
257 - 'wp-compose',
258 - 'wp-data',
259 - 'wp-hooks',
260 - 'wp-api-fetch',
261 - 'lodash',
262 - ),
551 + [],
263 552 array( 'dashboard' ),
264 553 0,
265 554 1
266 - ),
267 - 'lp-widgets-admin' => new LP_Asset_Key(
555 + ),*/
556 + 'lp-widgets-admin' => new LP_Asset_Key(
268 557 self::url( 'js/dist/admin/pages/widgets' . self::$_min_assets . '.js' ),
269 558 array(
270 559 'wp-url',
271 560 'wp-api-fetch',
272 561 'lodash',
562 + //'select2',
273 563 ),
274 564 array( 'widgets', 'elementor' ),
275 565 0,
276 566 1
277 567 ),
278 - 'lp-admin-notices' => new LP_Asset_Key(
568 + 'lp-admin-notices' => new LP_Asset_Key(
279 569 self::url( 'js/dist/admin/admin-notices' . self::$_min_assets . '.js' ),
280 - ['wp-api-fetch']
570 + array(),
571 + array(),
572 + 1,
573 + 0,
574 + '',
575 + array( 'strategy' => 'async' )
281 576 ),
577 + 'lp-material' => new LP_Asset_Key(
578 + $this->url( 'js/dist/admin/course-material' . self::$_min_assets . '.js' ),
579 + array(),
580 + array(
581 + LP_COURSE_CPT,
582 + LP_LESSON_CPT,
583 + ),
584 + 0,
585 + 1
586 + ),
587 + 'lp-list-students-enrolled' => new LP_Asset_Key(
588 + $this->url( 'dist/js/admin/list-students-enrolled' . self::$_min_assets . '.js' ),
589 + array( 'lp-load-ajax' ),
590 + array( 'learnpress_page_learn-press-students-enrolled' ),
591 + 0,
592 + 0,
593 + '',
594 + array( 'strategy' => 'async' )
595 + ),
596 + 'lp-admin-tools' => new LP_Asset_Key(
597 + $this->url( 'dist/js/admin/admin-tools' . self::$_min_assets . '.js' ),
598 + array(),
599 + array( 'learnpress_page_learn-press-tools' ),
600 + 0,
601 + 0,
602 + '',
603 + array( 'strategy' => 'defer' )
604 + ),
605 + 'lp-themes' => new LP_Asset_Key(
606 + $this->url( 'dist/js/admin/lp-themes' . self::$_min_assets . '.js' ),
607 + array(),
608 + array( 'learnpress_page_learn-press-themes' ),
609 + 0,
610 + 0,
611 + '',
612 + array( 'strategy' => 'async' )
613 + ),
614 + 'lp-admin-statistic' => new LP_Asset_Key(
615 + $this->url( 'js/dist/admin/admin-statistic' . self::$_min_assets . '.js' ),
616 + array( 'lp-load-ajax' ),
617 + array( 'learnpress_page_learn-press-statistics' ),
618 + 0,
619 + 0,
620 + '',
621 + array( 'strategy' => 'defer' )
622 + ),
282 623 )
283 624 );
284 625
626 + /*
627 + $screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;
628 + if ( $screen && $screen->id === 'site-editor' ) {
629 + $scripts['editor-check'] = new LP_Asset_Key(
630 + self::url( 'js/dist/gutenberg/editor-check' . self::$_min_assets . '.js' ),
631 + array(
632 + 'wp-data',
633 + 'wp-edit-post',
634 + 'wp-editor',
635 + ),
636 + [],
637 + 0,
638 + 0,
639 + '1.0.0',
640 + [ 'strategy' => 'defer' ]
641 + );
642 + }*/
643 +
285 644 return $scripts;
286 645 }
287 646
288 647 /**
@@ -295,35 +654,88 @@
295 654
296 655 return apply_filters(
297 656 'learn-press/admin-default-styles',
298 657 array(
299 - 'select2' => new LP_Asset_Key(
658 + /*'select2' => new LP_Asset_Key(
300 659 $this->url( 'src/css/vendor/select2.min.css' )
301 - ),
660 + ),*/
661 + /*
302 662 'font-awesome' => new LP_Asset_Key(
303 663 $this->url( 'src/css/vendor/font-awesome-5.min.css' )
304 - ),
664 + ),*/
665 + /*
305 666 'jquery-ui' => new LP_Asset_Key(
306 667 $this->url( 'src/css/vendor/jquery-ui/jquery-ui.min.css' )
307 668 ),
308 669 'jquery-ui-timepicker' => new LP_Asset_Key(
309 670 $this->url( 'src/css/vendor/jquery-ui-timepicker-addon.css' )
310 - ),
671 + ),*/
311 672 'jquery-tipsy' => new LP_Asset_Key(
312 673 $this->url( 'src/css/vendor/jquery.tipsy.css' )
313 674 ),
314 675 'learn-press-admin' => new LP_Asset_Key(
315 676 $this->url( 'css/admin/admin' . $is_rtl . self::$_min_assets . '.css' ),
316 - array( 'wp-color-picker', 'wp-components', 'select2', 'jquery-ui', 'jquery-ui-timepicker', 'font-awesome', 'jquery-tipsy' ),
677 + array(
678 + 'wp-color-picker',
679 + 'wp-components',
680 + // 'select2',
681 + // 'jquery-ui',
682 + // 'jquery-ui-timepicker',
683 + // 'font-awesome',
684 + 'jquery-tipsy',
685 + ),
317 686 array(),
318 687 0
319 688 ),
320 - 'learn-press-statistic' => new LP_Asset_Key(
689 + 'lp-help-center' => new LP_Asset_Key(
690 + $this->url( 'css/admin/help-center' . $is_rtl . self::$_min_assets . '.css' ),
691 + array(),
692 + array( 'learnpress_page_learn-press-help-center' ),
693 + 0
694 + ),
695 + 'lp-themes' => new LP_Asset_Key(
696 + $this->url( 'css/admin/themes' . $is_rtl . self::$_min_assets . '.css' ),
697 + array(),
698 + array( 'learnpress_page_learn-press-themes' ),
699 + 0,
700 + 0
701 + ),
702 + 'lp-edit-curriculum' => new LP_Asset_Key(
703 + $this->url( 'css/edit-curriculum' . $is_rtl . self::$_min_assets . '.css' ),
704 + array(),
705 + array(),
706 + 1
707 + ),
708 + 'lp-edit-quiz' => new LP_Asset_Key(
709 + $this->url( 'css/edit-quiz' . $is_rtl . self::$_min_assets . '.css' ),
710 + array(),
711 + array(),
712 + 1
713 + ),
714 + 'lp-edit-question' => new LP_Asset_Key(
715 + $this->url( 'css/edit-question' . $is_rtl . self::$_min_assets . '.css' ),
716 + array(),
717 + array(),
718 + 1
719 + ),
720 + /*'learn-press-statistic' => new LP_Asset_Key(
321 721 LP_CSS_URL . 'admin/statistic' . $is_rtl . self::$_min_assets . '.css',
322 722 array(),
323 723 array( 'learners_page_learn-press-statistics' ),
324 724 0
725 + ),*/
726 + 'lp-tom-select' => new LP_Asset_Key(
727 + $this->url( 'src/css/vendor/tom-select.min.css' ),
728 + array(),
729 + array(),
730 + 0
325 731 ),
732 + 'lp-setup-wizard' => new LP_Asset_Key(
733 + $this->url( 'css/admin/setup-wizard' . $is_rtl . self::$_min_assets . '.css' ),
734 + array(),
735 + array(),
736 + 1
737 + ),
326 738 )
327 739 );
328 740 }
329 741
@@ -333,14 +745,13 @@
333 745 public function load_scripts() {
334 746 $screen_id = LP_Admin::instance()->get_screen_id();
335 747
336 748 if ( empty( $screen_id ) ) {
337 - return;
749 + $screen_id = '';
338 750 }
339 - wp_enqueue_media();
340 751
752 + // wp_enqueue_media(); //Todo: tungnx need check why call for that using.
341 753 $this->handle_js( $screen_id );
342 -
343 754 $this->handle_style( $screen_id );
344 755
345 756 do_action( 'learn-press/admin/after-enqueue-scripts' );
346 757 }
@@ -345,28 +756,96 @@
345 756 do_action( 'learn-press/admin/after-enqueue-scripts' );
346 757 }
347 758
348 759 /**
349 - * Register and enqueue a custom stylesheet in the WordPress admin.
350 - *
351 - * @author
352 - */
353 - public function wpdocs_enqueue_custom_admin_style() {
354 - wp_register_style( 'custom_wp_admin_css', get_template_directory_uri() . '/admin-style.css', false, '1.0.0' );
355 - wp_enqueue_style( 'custom_wp_admin_css' );
356 - }
357 -
358 - /**
359 760 * Show overlay
360 761 */
361 - public function show_overlay() {
762 + public function add_elements_global() {
362 763 echo '<div class="lp-overlay">';
363 764 apply_filters( 'learnpress/admin/modal-dialog', learn_press_get_template( 'global/lp-modal-overlay' ) );
364 765 echo '</div>';
365 766
366 767 apply_filters( 'learnpress/admin/steps', learn_press_get_template( 'global/lp-group-step' ) );
768 +
769 + // Added notify message when action done.
770 + Template::instance()->get_admin_template( 'global/notify-action.php' );
367 771 }
368 772
773 + /**
774 + * Get course data for Vue Editor Course use.
775 + *
776 + * @return array|mixed|null
777 + * @deprecated 4.4.2 - no any enqueue js for that.
778 + */
779 + /*
780 + public function get_course_data_for_editor_vue() {
781 + global $post, $pagenow;
782 +
783 + if ( empty( $post ) || ( get_post_type() !== LP_COURSE_CPT ) || ! in_array(
784 + $pagenow,
785 + array(
786 + 'post.php',
787 + 'post-new.php',
788 + )
789 + ) ) {
790 + return array();
791 + }
792 +
793 + $course = CourseModel::find( $post->ID, true );
794 + if ( $course ) {
795 + $course_section_items = $course->get_section_items();
796 + } else { // Code old if not found course on the table learnpress_courses.
797 + $course = learn_press_get_course( $post->ID );
798 + $course_section_items = $course->get_curriculum_raw();
799 + }
800 + $hidden_sections = get_post_meta( $post->ID, '_admin_hidden_sections', true );
801 +
802 + return apply_filters(
803 + 'learn-press/admin-localize-course-editor',
804 + array(
805 + 'root' => array(
806 + 'course_id' => $post->ID,
807 + 'auto_draft' => get_post_status( $post->ID ) == 'auto-draft',
808 + 'ajax' => admin_url( 'index.php' ),
809 + 'disable_curriculum' => false,
810 + 'action' => 'admin_course_editor',
811 + 'nonce' => wp_create_nonce( 'learnpress_update_curriculum' ),
812 + ),
813 + 'chooseItems' => array(
814 + 'types' => learn_press_course_get_support_item_types(),
815 + 'open' => false,
816 + 'addedItems' => array(),
817 + 'items' => array(),
818 + ),
819 + 'i18n' => array(
820 + 'item' => __( 'item', 'learnpress' ),
821 + 'new_section_item' => __( 'Create a new', 'learnpress' ),
822 + 'back' => __( 'Back', 'learnpress' ),
823 + 'selected_items' => __( 'Selected items', 'learnpress' ),
824 + 'confirm_remove_item' => __( 'Do you want to remove the "{{ITEM_NAME}}" item from the course?', 'learnpress' ),
825 + 'confirm_trash_item' => __( 'Do you want to move the "{{ITEM_NAME}}" item to the trash?', 'learnpress' ),
826 + 'item_labels' => array(
827 + 'singular' => __( 'Item', 'learnpress' ),
828 + 'plural' => __( 'Items', 'learnpress' ),
829 + ),
830 + 'notice_sale_price' => __( 'The course sale price must be less than the regular price', 'learnpress' ),
831 + 'notice_price' => __( 'The course price must be greater than the sale price', 'learnpress' ),
832 + 'notice_sale_start_date' => __( 'The sale start date must be before the sale end date', 'learnpress' ),
833 + 'notice_sale_end_date' => __( 'The sale end date must be after the sale start date', 'learnpress' ),
834 + 'notice_invalid_date' => __( 'Invalid date', 'learnpress' ),
835 + ),
836 + 'sections' => array(
837 + 'sections' => $course_section_items,
838 + 'hidden_sections' => ! empty( $hidden_sections ) ? $hidden_sections : array(),
839 + 'urlEdit' => admin_url( 'post.php?action=edit&post=' ),
840 + ),
841 + )
842 + );
843 + }*/
844 +
845 + /**
846 + * Instance
847 + */
369 848 public static function instance() {
370 849 if ( ! is_admin() ) {
371 850 return null;
372 851 }
@@ -382,10 +861,9 @@
382 861 /**
383 862 * Shortcut function to get instance of LP_Admin_Assets
384 863 *
385 864 * @return LP_Admin_Assets|null
865 + * Addon Certificate, Import/Export is using.
386 866 */
387 867 function learn_press_admin_assets() {
388 868 return LP_Admin_Assets::instance();
389 869 }
390 -
391 -learn_press_admin_assets();