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 +612 -125 4.2.04.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,52 +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 551 [],
255 552 array( 'dashboard' ),
256 553 0,
257 554 1
258 - ),
259 - 'lp-widgets-admin' => new LP_Asset_Key(
555 + ),*/
556 + 'lp-widgets-admin' => new LP_Asset_Key(
260 557 self::url( 'js/dist/admin/pages/widgets' . self::$_min_assets . '.js' ),
261 558 array(
262 559 'wp-url',
263 560 'wp-api-fetch',
264 561 'lodash',
562 + //'select2',
265 563 ),
266 564 array( 'widgets', 'elementor' ),
267 565 0,
268 566 1
269 567 ),
270 - 'lp-admin-notices' => new LP_Asset_Key(
568 + 'lp-admin-notices' => new LP_Asset_Key(
271 569 self::url( 'js/dist/admin/admin-notices' . self::$_min_assets . '.js' ),
272 - [ 'wp-api-fetch' ]
570 + array(),
571 + array(),
572 + 1,
573 + 0,
574 + '',
575 + array( 'strategy' => 'async' )
273 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 + ),
274 623 )
275 624 );
276 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 +
277 644 return $scripts;
278 645 }
279 646
280 647 /**
@@ -287,35 +654,88 @@
287 654
288 655 return apply_filters(
289 656 'learn-press/admin-default-styles',
290 657 array(
291 - 'select2' => new LP_Asset_Key(
658 + /*'select2' => new LP_Asset_Key(
292 659 $this->url( 'src/css/vendor/select2.min.css' )
293 - ),
660 + ),*/
661 + /*
294 662 'font-awesome' => new LP_Asset_Key(
295 663 $this->url( 'src/css/vendor/font-awesome-5.min.css' )
296 - ),
664 + ),*/
665 + /*
297 666 'jquery-ui' => new LP_Asset_Key(
298 667 $this->url( 'src/css/vendor/jquery-ui/jquery-ui.min.css' )
299 668 ),
300 669 'jquery-ui-timepicker' => new LP_Asset_Key(
301 670 $this->url( 'src/css/vendor/jquery-ui-timepicker-addon.css' )
302 - ),
671 + ),*/
303 672 'jquery-tipsy' => new LP_Asset_Key(
304 673 $this->url( 'src/css/vendor/jquery.tipsy.css' )
305 674 ),
306 675 'learn-press-admin' => new LP_Asset_Key(
307 676 $this->url( 'css/admin/admin' . $is_rtl . self::$_min_assets . '.css' ),
308 - 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 + ),
309 686 array(),
310 687 0
311 688 ),
312 - '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(
313 721 LP_CSS_URL . 'admin/statistic' . $is_rtl . self::$_min_assets . '.css',
314 722 array(),
315 723 array( 'learners_page_learn-press-statistics' ),
316 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
317 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 + ),
318 738 )
319 739 );
320 740 }
321 741
@@ -325,12 +745,12 @@
325 745 public function load_scripts() {
326 746 $screen_id = LP_Admin::instance()->get_screen_id();
327 747
328 748 if ( empty( $screen_id ) ) {
329 - return;
749 + $screen_id = '';
330 750 }
331 751
332 - wp_enqueue_media(); //Todo: tungnx need check why call for that using.
752 + // wp_enqueue_media(); //Todo: tungnx need check why call for that using.
333 753 $this->handle_js( $screen_id );
334 754 $this->handle_style( $screen_id );
335 755
336 756 do_action( 'learn-press/admin/after-enqueue-scripts' );
@@ -336,28 +756,96 @@
336 756 do_action( 'learn-press/admin/after-enqueue-scripts' );
337 757 }
338 758
339 759 /**
340 - * Register and enqueue a custom stylesheet in the WordPress admin.
341 - *
342 - * @author
343 - */
344 - public function wpdocs_enqueue_custom_admin_style() {
345 - wp_register_style( 'custom_wp_admin_css', get_template_directory_uri() . '/admin-style.css', false, '1.0.0' );
346 - wp_enqueue_style( 'custom_wp_admin_css' );
347 - }
348 -
349 - /**
350 760 * Show overlay
351 761 */
352 - public function show_overlay() {
762 + public function add_elements_global() {
353 763 echo '<div class="lp-overlay">';
354 764 apply_filters( 'learnpress/admin/modal-dialog', learn_press_get_template( 'global/lp-modal-overlay' ) );
355 765 echo '</div>';
356 766
357 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' );
358 771 }
359 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 + */
360 848 public static function instance() {
361 849 if ( ! is_admin() ) {
362 850 return null;
363 851 }
@@ -373,10 +861,9 @@
373 861 /**
374 862 * Shortcut function to get instance of LP_Admin_Assets
375 863 *
376 864 * @return LP_Admin_Assets|null
865 + * Addon Certificate, Import/Export is using.
377 866 */
378 867 function learn_press_admin_assets() {
379 868 return LP_Admin_Assets::instance();
380 869 }
381 -
382 -learn_press_admin_assets();