PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.9.1
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.9.1
4.4.9.1 4.4.9 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 All 141 releases
← All changes | inc/class-lp-install.php +247 -389 4.1.7 → 4.4.9.1 View file →
@@ -3,12 +3,12 @@
3 3 * Install and update functions.
4 4 *
5 5 * @author ThimPress
6 6 * @package LearnPress/Classes
7 - * @version 3.0.0
7 + * @version 3.0.1
8 8 */
9 9
10 -use LP\Helpers\Config;
10 +use LearnPress\Helpers\Config;
11 11
12 12 defined( 'ABSPATH' ) || exit();
13 13
14 14 if ( ! function_exists( 'LP_Install' ) ) {
@@ -17,16 +17,59 @@
17 17 * Class LP_Install
18 18 */
19 19 class LP_Install {
20 20 protected static $instance;
21 + protected $lp_db;
21 22 /**
22 23 * Default pages used by LP
23 24 *
24 25 * @var array
25 26 */
26 - private static $_pages = array( 'checkout', 'profile', 'courses', 'become_a_teacher', 'term_conditions' );
27 + private static $_pages = array(
28 + 'checkout',
29 + 'profile',
30 + 'courses',
31 + 'instructors',
32 + 'single_instructor',
33 + 'become_a_teacher',
34 + 'term_conditions',
35 + );
27 36
28 37 protected function __construct() {
38 + $this->lp_db = LP_Database::getInstance();
39 + ini_set( 'max_execution_time', HOUR_IN_SECONDS );
40 + // From LP v4.2.2 temporary run create table thim_cache.
41 + // After a long time, will remove this code. Only run create table when activate plugin LP.
42 + if ( ! LP_Settings::is_created_tb_thim_cache() ) {
43 + $this->create_table_thim_cache();
44 + }
45 +
46 + // From LP v4.2.6.9 temporary run create table learnpress_files.
47 + // After a long time, will remove this code. Only run create table when activate plugin LP.
48 + if ( ! LP_Settings::is_created_tb_courses() ) {
49 + $this->create_table_courses();
50 + }
51 +
52 + // From LP v4.2.6.6 temporary run create table learnpress_files.
53 + // After a long time, will remove this code. Only run create table when activate plugin LP.
54 + if ( ! LP_Settings::is_created_tb_material_files() ) {
55 + $this->create_table_learnpress_files();
56 + }
57 +
58 + // Runtime migration for MCP API keys table.
59 + if ( ! LP_Settings::is_created_tb_mcp_api_keys() ) {
60 + $this->create_table_mcp_api_keys();
61 + }
62 +
63 + // Runtime migration for Webhooks table.
64 + if ( ! LP_Settings::is_created_tb_webhooks() ) {
65 + $this->create_table_webhooks();
66 + }
67 +
68 + // Set roles and capabilities.
69 + learn_press_add_user_roles();
70 +
71 + ini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );
29 72 }
30 73
31 74 /**
32 75 * Get instance
@@ -41,27 +84,24 @@
41 84 return self::$instance;
42 85 }
43 86
44 87 /**
45 - * Init action.
46 - */
47 - public static function init() {
48 - // add_action( 'learn-press/activate', array( __CLASS__, 'on_activate' ) );
49 - // add_action( 'admin_init', array( __CLASS__, 'do_install' ) );
50 - // add_action( 'admin_init', array( __CLASS__, 'subscription_button' ) );
51 - }
52 -
53 - /**
54 - * Do something after LP is activated.
88 + * Run installation tasks when LearnPress is activated.
55 89 *
90 + * 1. Create required database tables.
91 + * 2. Stop here if table creation failed.
92 + * 3. Save the current database version.
93 + * 4. Register LearnPress custom post types and taxonomies.
94 + * 5. Create default pages (courses, profile, checkout, become a teacher, etc.).
95 + * 6. Set permalink structure to post name if not configured.
96 + * 7. Soft flush rewrite rules so WordPress rebuilds them with LP CPTs and pages on the next request.
97 + *
56 98 * @since 4.0.0
57 99 */
58 100 public function on_activate() {
59 - // update_option( 'learn_press_status', 'activated' );
60 -
61 101 $this->create_tables();
62 102
63 - if ( ! self::tables_install_done() ) {
103 + if ( ! $this->tables_install_done() ) {
64 104 return;
65 105 }
66 106
67 107 // Check if LP install before has db version
@@ -69,8 +109,16 @@
69 109 // Save database version of LP
70 110 update_option( LP_KEY_DB_VERSION, LearnPress::instance()->db_version );
71 111 }
72 112
113 + // Register custom post type and taxonomies .
114 + include_once LP_PLUGIN_PATH . 'inc/custom-post-types/abstract.php';
115 + include_once LP_PLUGIN_PATH . 'inc/custom-post-types/course.php';
116 + include_once LP_PLUGIN_PATH . 'inc/custom-post-types/lesson.php';
117 + include_once LP_PLUGIN_PATH . 'inc/custom-post-types/quiz.php';
118 + include_once LP_PLUGIN_PATH . 'inc/custom-post-types/question.php';
119 + include_once LP_PLUGIN_PATH . 'inc/custom-post-types/order.php';
120 +
73 121 // Create pages default.
74 122 self::create_pages();
75 123
76 124 // Set permalink is "Post name".
@@ -78,194 +126,157 @@
78 126 update_option( 'permalink_structure', '/%postname%/' );
79 127 // flush_rewrite_rules();
80 128 }
81 129
130 + // Set roles and capabilities.
131 + learn_press_add_user_roles();
132 +
133 + // Rebuilds them with LP CPTs and pages on next request.
134 + flush_rewrite_rules();
135 +
82 136 // Force option users_can_register to ON.
83 - if ( ! get_option( 'users_can_register' ) ) {
137 + /*if ( ! get_option( 'users_can_register' ) ) {
84 138 update_option( 'users_can_register', 1 );
85 - }
139 + }*/
86 140 }
87 141
88 142 /**
89 - * Check to run installer in the first-time LP installed.
90 - *
91 - * @since 3.x.x
143 + * Create tables required for LP
144 + * @throws Exception
92 145 */
93 - public static function do_install() {
94 - if ( ! current_user_can( 'manage_options' ) ) {
95 - return;
146 + private function create_tables() {
147 + $db = LP_Database::getInstance();
148 + $tables = Config::instance()->get( 'tables-v4', 'table' );
149 + foreach ( $tables as $table ) {
150 + $db->wpdb->query( $table );
151 +
152 + $db->check_execute_has_error();
96 153 }
97 154
98 - $status = get_option( 'learn_press_status' );
155 + if ( ! LP_Settings::is_created_tb_thim_cache() ) {
156 + $this->create_table_thim_cache();
157 + }
99 158
100 - switch ( $status ) {
101 - case 'activated':
102 - self::install();
103 - update_option( 'learn_press_status', 'installed' );
159 + if ( ! LP_Settings::is_created_tb_material_files() ) {
160 + $this->create_table_learnpress_files();
104 161 }
105 - }
106 162
107 - public static function subscription_button() {
108 - // Only administrator of the site can do this
109 - if ( ! current_user_can( 'administrator' ) ) {
110 - return;
163 + // Ensure MCP API keys table exists for activation/upgrade flows.
164 + // Keep this explicit guard in addition to tables-v4 config loading.
165 + if ( ! LP_Settings::is_created_tb_mcp_api_keys() ) {
166 + $this->create_table_mcp_api_keys();
111 167 }
112 168
113 - LP_Admin_Notice::instance()->add( 'tools/subscription-button.php', '', true, 'newsletter-button' );
169 + // Ensure Webhooks table exists for activation/upgrade flows.
170 + // Keep this explicit guard in addition to tables-v4 config loading.
171 + if ( ! LP_Settings::is_created_tb_webhooks() ) {
172 + $this->create_table_webhooks();
173 + }
174 +
175 + update_option( 'learn_press_check_tables', 'yes' );
114 176 }
115 177
116 178 /**
117 - * Run installation after LearnPress is activated.
179 + * Create table thim_cache
118 180 *
119 - * @depecated 4.1.6.4
181 + * @since 4.2.2
120 182 */
121 - public static function install() {
122 - _deprecated_function( __FUNCTION__, '4.1.6.4' );
123 - /*self::create_options();
124 - self::_create_pages();
125 - self::_create_cron_jobs();
126 - self::_delete_transients();
127 - //self::_create_log_path();
128 - self::_clear_backgrounds();
183 + private function create_table_thim_cache() {
184 + global $wpdb;
129 185
130 - $current_version = get_option( 'learnpress_version', null );
131 - $current_db_version = get_option( 'learnpress_db_version', null );
186 + try {
187 + $collation = $wpdb->has_cap( 'collation' ) ? $wpdb->get_charset_collate() : 'ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';
132 188
133 - // Fresh installation .
134 - if ( is_null( $current_db_version ) ) {
135 - update_option( 'learn_press_install', 'yes' );
136 - set_transient( 'lp_activation_redirect', 'yes', 60 );
137 - }
189 + $sql = "CREATE TABLE IF NOT EXISTS {$this->lp_db->tb_thim_cache} (
190 + key_cache VARCHAR (191) NOT NULL UNIQUE,
191 + value LONGTEXT NOT NULL,
192 + expiration VARCHAR (191),
193 + PRIMARY KEY (key_cache)
194 + ) $collation";
138 195
139 - // Force to show notice outdated template .
140 - learn_press_delete_user_option( 'hide-notice-template-files' );
196 + $rs = $wpdb->query( $sql );
141 197
142 - LP_Admin_Notice::instance()->remove_dismissed_notice( array( 'outdated-template' ) );
143 -
144 - //if ( ! get_option( 'learnpress_db_version' ) ) {
145 - update_option( 'learnpress_db_version', (int) LEARNPRESS_VERSION );
146 - //}*/
198 + if ( $rs ) {
199 + update_option( 'thim_cache_tb_created', 'yes' );
200 + }
201 + } catch ( Throwable $e ) {
202 + error_log( $e->getMessage() );
203 + }
147 204 }
148 205
149 - protected static function _clear_backgrounds() {
150 - global $wpdb;
151 -
152 - $query = $wpdb->prepare(
153 - "
154 - DELETE FROM {$wpdb->options} WHERE option_name LIKE %s
155 - ",
156 - $wpdb->esc_like( 'lp_schedule_items_batch_' ) . '%'
157 - );
158 - $wpdb->query( $query );
159 -
160 - $query = $wpdb->prepare(
161 - "
162 - DELETE FROM {$wpdb->options} WHERE option_name LIKE %s
163 - ",
164 - $wpdb->esc_like( 'lp_installer_batch_' ) . '%'
165 - );
166 - $wpdb->query( $query );
167 - }
168 -
169 206 /**
170 - * Update default options for LP
207 + * Create table learnpress_courses
171 208 *
172 - * @editor tungnx - comment - not use on v4.1.6.6
209 + * @since 4.2.6.9
173 210 */
174 - /*public static function create_options() {
175 - $settings_classes = array(
176 - 'LP_Settings_General' => include_once LP_PLUGIN_PATH . '/inc/admin/settings/class-lp-settings-general.php',
177 - 'LP_Settings_Courses' => include_once LP_PLUGIN_PATH . '/inc/admin/settings/class-lp-settings-courses.php',
178 - 'LP_Settings_Profile' => include_once LP_PLUGIN_PATH . '/inc/admin/settings/class-lp-settings-profile.php',
179 - 'LP_Settings_Payments' => include_once LP_PLUGIN_PATH . '/inc/admin/settings/class-lp-settings-payments.php',
180 - );
211 + public function create_table_courses() {
212 + global $wpdb;
181 213
182 - ob_start();
183 - $str = array();
214 + try {
215 + $collation = $wpdb->has_cap( 'collation' ) ? $wpdb->get_charset_collate() : 'ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';
184 216
185 - foreach ( $settings_classes as $c => $class ) {
186 - if ( ! is_object( $class ) ) {
187 - $class = @new $c();
188 - }
217 + $sql = "CREATE TABLE IF NOT EXISTS {$this->lp_db->tb_lp_courses} (
218 + ID bigint(20) unsigned NOT NULL,
219 + json LONGTEXT NOT NULL,
220 + price_to_sort FLOAT,
221 + is_sale int(1) default 0,
222 + post_author bigint unsigned,
223 + post_date_gmt datetime,
224 + post_content LONGTEXT,
225 + post_title text not null,
226 + post_status varchar(20) default 'publish' not null,
227 + post_name varchar(200) default '',
228 + menu_order int default 0,
229 + lang varchar(20),
230 + PRIMARY KEY (ID),
231 + KEY post_title (post_title(191)),
232 + KEY post_status (post_status),
233 + KEY post_name (post_name(191)),
234 + KEY id_status (ID, post_status)
235 + ) $collation";
189 236
190 - $options = array();
237 + $rs = $wpdb->query( $sql );
191 238
192 - if ( is_callable( array( $class, 'get_settings' ) ) ) {
193 - $options = $class->get_settings( '', '' );
239 + if ( $rs ) {
240 + update_option( 'tb_learnpress_courses', 'yes' );
194 241 }
242 + } catch ( Throwable $e ) {
243 + error_log( $e->getMessage() );
244 + }
245 + }
195 246
196 - if ( ! $options ) {
197 - continue;
198 - }
247 + /**
248 + * Create table learnpress_material_files
249 + *
250 + * @since 4.2.6.6
251 + */
252 + private function create_table_learnpress_files() {
253 + global $wpdb;
199 254
200 - foreach ( $options as $option ) {
201 - if ( ! isset( $option['id'] ) ) {
202 - continue;
203 - }
255 + try {
256 + $collation = $wpdb->has_cap( 'collation' ) ? $wpdb->get_charset_collate() : 'ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';
204 257
205 - $default_value = '';
258 + $sql = "CREATE TABLE IF NOT EXISTS {$this->lp_db->tb_lp_files} (
259 + file_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
260 + file_name varchar(191) NOT NULL DEFAULT '',
261 + file_type varchar(100) NOT NULL DEFAULT '',
262 + item_id bigint(20) unsigned NOT NULL DEFAULT '0',
263 + item_type varchar(100) NOT NULL DEFAULT '',
264 + method varchar(10) NOT NULL DEFAULT 'upload',
265 + file_path varchar(255) NOT NULL DEFAULT '',
266 + orders int(4) NOT NULL DEFAULT '0',
267 + created_at datetime NULL DEFAULT NULL,
268 + PRIMARY KEY (file_id),
269 + KEY file_name (file_name),
270 + KEY item_id (item_id),
271 + KEY item_type (item_type)
272 + ) $collation";
206 273
207 - if ( array_key_exists( 'default', $option ) ) {
208 - $default_value = $option['default'];
209 - } elseif ( array_key_exists( 'std', $option ) ) {
210 - $default_value = $option['std'];
211 - }
274 + $rs = $wpdb->query( $sql );
212 275
213 - if ( $default_value === '' || $default_value === null ) {
214 - continue;
215 - }
216 -
217 - if ( ! preg_match( '~^learn_press_~', $option['id'] ) ) {
218 - $option_name = 'learn_press_' . $option['id'];
219 - } else {
220 - $option_name = $option['id'];
221 - }
222 -
223 - // Don't update existing option
224 - if ( false !== get_option( $option_name ) ) {
225 - continue;
226 - }
227 -
228 - // If option name doesn't like an array then update directly.
229 - if ( ! preg_match( '/\[|\]/', $option_name ) ) {
230 - update_option( $option_name, $default_value, 'yes' );
231 - continue;
232 - }
233 -
234 - // Concat option as query string to parse it later
235 - $value = maybe_serialize( $default_value );
236 - $str[] = "{$option_name}=$value";
276 + if ( $rs ) {
277 + update_option( 'table_learnpress_files_created', 'yes' );
237 278 }
238 - }
239 -
240 - // Parse query string to get options
241 - if ( $str ) {
242 - $str = join( '&', $str );
243 - $options = array();
244 - parse_str( $str, $options );
245 -
246 - if ( $options ) {
247 - foreach ( $options as $name => $value ) {
248 - $value = LP_Helper::maybe_unserialize( $value );
249 - update_option( $name, $value, 'yes' );
250 - }
251 - }
252 - }
253 -
254 - ob_get_clean();
255 - }*/
256 -
257 - /**
258 - * Create tables required for LP
259 - */
260 - private function create_tables() {
261 - try {
262 - $tables = Config::instance()->get( 'tables-v4', 'table' );
263 - foreach ( $tables as $table ) {
264 - LP_Database::getInstance()->wpdb->query( $table );
265 - }
266 -
267 - update_option( 'learn_press_check_tables', 'yes' );
268 279 } catch ( Throwable $e ) {
269 280 error_log( $e->getMessage() );
270 281 }
271 282 }
@@ -270,167 +281,75 @@
270 281 }
271 282 }
272 283
273 284 /**
274 - * Delete transients
275 - */
276 - private static function _delete_transients() {
277 - global $wpdb;
278 - $sql = "
279 - DELETE a, b FROM $wpdb->options a, $wpdb->options b
280 - WHERE a.option_name LIKE %s
281 - AND a.option_name NOT LIKE %s
282 - AND b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) )
283 - AND b.option_value < %d
284 - ";
285 - $wpdb->query(
286 - $wpdb->prepare(
287 - $sql,
288 - $wpdb->esc_like( '_transient_' ) . '%',
289 - $wpdb->esc_like( '_transient_timeout_' ) . '%',
290 - time()
291 - )
292 - );
293 - }
294 -
295 - /**
296 - * Remove learnpress page if total of learn page > 10
285 + * Create table learnpress_mcp_api_keys.
297 286 *
298 - * @return mixed
299 - * @depecated 4.1.6.4
287 + * @since 4.3.3
288 + * @return void
300 289 */
301 - /*public static function _remove_pages() {
290 + public function create_table_mcp_api_keys() {
302 291 global $wpdb;
303 292
304 - // Get all pages
305 - $sql = $wpdb->prepare(
306 - "
307 - SELECT *
308 - FROM {$wpdb->posts} p
309 - INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND pm.meta_key= %s AND p.post_type = %s
310 - ",
311 - '_learn_press_page',
312 - 'page'
313 - );
293 + try {
294 + $collation = $wpdb->has_cap( 'collation' ) ? $wpdb->get_charset_collate() : 'ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';
314 295
315 - $page_ids = $wpdb->get_col( $sql );
296 + $sql = "CREATE TABLE IF NOT EXISTS {$this->lp_db->tb_lp_mcp_api_keys} (
297 + key_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
298 + user_id bigint(20) unsigned NOT NULL,
299 + description varchar(200) NULL DEFAULT NULL,
300 + permissions varchar(10) NOT NULL DEFAULT 'read',
301 + consumer_key char(64) NOT NULL,
302 + consumer_secret char(64) NOT NULL,
303 + truncated_key char(7) NOT NULL,
304 + last_access datetime NULL DEFAULT NULL,
305 + call_count bigint(20) unsigned NOT NULL DEFAULT 0,
306 + created_at datetime NOT NULL,
307 + updated_at datetime NULL DEFAULT NULL,
308 + PRIMARY KEY (key_id),
309 + UNIQUE KEY consumer_key (consumer_key),
310 + KEY user_id (user_id)
311 + ) $collation";
316 312
317 - if ( sizeof( $page_ids ) < 10 ) {
318 - return $page_ids;
313 + $wpdb->query( $sql );
314 + } catch ( Throwable $e ) {
315 + error_log( $e->getMessage() );
319 316 }
317 + }
320 318
321 - // Delete pages
322 - $query = $wpdb->prepare(
323 - "
324 - DELETE FROM p, pm
325 - USING {$wpdb->posts} AS p LEFT JOIN {$wpdb->postmeta} AS pm ON p.ID = pm.post_id AND p.post_type = %s
326 - WHERE p.post_status = %s
327 - AND p.ID IN(" . implode( ',', $page_ids ) . ')
328 - ',
329 - 'page',
330 - 'publish'
331 - );
332 -
333 - $wpdb->query( $query );
334 -
335 - $pages = self::$_pages;
336 - foreach ( $pages as $page ) {
337 - delete_option( "learn_press_{$page}_page_id" );
338 - }
339 -
340 - return array();
341 - }*/
342 -
343 319 /**
344 - * Create default pages for LP
320 + * Create table learnpress_webhooks.
321 + *
322 + * @since 4.3.3
323 + * @return void
345 324 */
346 - /*public static function _create_pages() {
325 + public function create_table_webhooks() {
347 326 global $wpdb;
348 327
349 - // Just delete duplicated pages
350 - $created_page = self::_remove_pages();
351 - $pages = self::$_pages;
328 + try {
329 + $collation = $wpdb->has_cap( 'collation' ) ? $wpdb->get_charset_collate() : 'ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';
352 330
353 - foreach ( $pages as $page ) {
354 - // If page already existed
355 - $page_id = get_option( "learn_press_{$page}_page_id" );
331 + $sql = "CREATE TABLE IF NOT EXISTS {$this->lp_db->tb_lp_webhooks} (
332 + webhook_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
333 + user_id bigint(20) unsigned NOT NULL DEFAULT 0,
334 + status varchar(20) NOT NULL DEFAULT 'active',
335 + name varchar(200) NOT NULL DEFAULT '',
336 + delivery_url longtext NOT NULL,
337 + secret text NOT NULL,
338 + events longtext NOT NULL,
339 + created_at datetime NOT NULL,
340 + updated_at datetime NULL DEFAULT NULL,
341 + PRIMARY KEY (webhook_id),
342 + KEY user_id (user_id),
343 + KEY status (status)
344 + ) $collation";
356 345
357 - if ( $page_id && get_post_type( $page_id ) == 'page' && get_post_status( $page_id ) == 'publish' ) {
358 - continue;
359 - }
360 -
361 - $page_id = self::_search_page( $page, $pages );
362 -
363 - if ( ! $page_id ) {
364 - // Check if page has already existed
365 - switch ( $page ) {
366 - case 'courses':
367 - $_lpr_settings_pages = (array) get_option( '_lpr_settings_pages' );
368 -
369 - if ( ! empty( $_lpr_settings_pages['general'] ) ) {
370 - if ( ! empty( $_lpr_settings_pages['general']['courses_page_id'] ) ) {
371 - $page_id = $_lpr_settings_pages['general']['courses_page_id'];
372 - }
373 - }
374 - break;
375 - case 'profile':
376 - $_lpr_settings_general = (array) get_option( '_lpr_settings_general' );
377 - if ( ! empty( $_lpr_settings_general['set_page'] ) && $_lpr_settings_general['set_page'] == 'lpr_profile' ) {
378 - $page_id = $wpdb->get_var(
379 - $wpdb->prepare(
380 - "
381 - SELECT ID
382 - FROM $wpdb->posts p
383 - INNER JOIN $wpdb->postmeta pm ON p.ID = pm.post_id AND pm.meta_key = %s AND pm.meta_value = %d
384 - ",
385 - '_lpr_is_profile_page',
386 - 1
387 - )
388 - );
389 - }
390 - break;
391 - }
392 -
393 - if ( ! $page_id ) {
394 - if ( $page === 'courses' ) {
395 - $page_title = 'All Courses';
396 - } else {
397 - $page_title = ucwords( str_replace( '_', ' ', $page ) );
398 - }
399 -
400 - if ( $page === 'profile' ) {
401 - $page_content = '<!-- wp:shortcode -->[' . apply_filters( 'learn-press/shortcode/profile/tag', 'learn_press_profile' ) . ']<!-- /wp:shortcode -->';
402 - } else {
403 - $page_content = '';
404 - }
405 -
406 - $page_slug = 'lp-' . str_replace( '_', '-', $page );
407 -
408 - $inserted = wp_insert_post(
409 - array(
410 - 'post_title' => $page_title,
411 - 'post_name' => $page_slug,
412 - 'post_status' => 'publish',
413 - 'post_type' => 'page',
414 - 'comment_status' => 'closed',
415 - 'post_content' => isset( $page_content ) ? $page_content : '',
416 - 'post_author' => get_current_user_id(),
417 - )
418 - );
419 - if ( $inserted ) {
420 - $page_id = $inserted;
421 - }
422 - }
423 - }
424 - if ( $page_id ) {
425 - update_option( "learn_press_{$page}_page_id", $page_id );
426 - update_post_meta( $page_id, '_learn_press_page', $page );
427 - }
346 + $wpdb->query( $sql );
347 + } catch ( Throwable $e ) {
348 + error_log( $e->getMessage() );
428 349 }
350 + }
429 351
430 - flush_rewrite_rules();
431 - }*/
432 -
433 352 /**
434 353 * Create default pages for LP
435 354 */
436 355 public static function create_pages() {
@@ -440,46 +359,38 @@
440 359 foreach ( $pages as $page ) {
441 360 // Check if page has already existed
442 361 $page_id = get_option( "learn_press_{$page}_page_id", false );
443 362
444 - if ( $page_id && get_post_type( $page_id ) == 'page' && get_post_status( $page_id ) == 'publish' ) {
363 + if ( $page_id && get_post_type( $page_id ) === 'page' && get_post_status( $page_id ) == 'publish' ) {
445 364 continue;
446 365 }
447 366
448 - //$page_id = self::_search_page( $page, $pages );
449 -
450 367 if ( $page === 'courses' ) {
451 - $page_title = 'All Courses';
368 + $page_title = 'Courses';
452 369 $page_slug = $page;
370 + } elseif ( 'single_instructor' === $page ) {
371 + $page_title = 'Instructor';
372 + $page_slug = 'instructor';
373 + } elseif ( 'instructors' === $page ) {
374 + $page_title = 'Instructors';
375 + $page_slug = $page;
376 + } elseif ( 'become_a_teacher' === $page ) {
377 + $page_title = 'Become an Instructor';
378 + $page_slug = $page;
379 + } elseif ( 'term_conditions' === $page ) {
380 + $page_title = 'Terms and Conditions';
381 + $page_slug = $page;
453 382 } else {
454 383 $page_title = ucwords( str_replace( '_', ' ', $page ) );
455 384 $page_slug = 'lp-' . str_replace( '_', '-', $page );
456 385 }
457 386
458 - if ( $page === 'profile' ) {
459 - $page_content = '<!-- wp:shortcode -->[' . apply_filters( 'learn-press/shortcode/profile/tag', 'learn_press_profile' ) . ']<!-- /wp:shortcode -->';
460 - } else {
461 - $page_content = '';
462 - }
463 -
464 - $page_id = wp_insert_post(
465 - array(
466 - 'post_title' => $page_title,
467 - 'post_name' => $page_slug,
468 - 'post_status' => 'publish',
469 - 'post_type' => 'page',
470 - 'comment_status' => 'closed',
471 - 'post_content' => $page_content ?? '',
472 - 'post_author' => get_current_user_id(),
473 - )
387 + $data_create_page = array(
388 + 'post_title' => $page_title,
389 + 'post_name' => $page_slug,
474 390 );
475 -
476 - if ( ! $page_id instanceof WP_Error ) {
477 - update_option( "learn_press_{$page}_page_id", $page_id );
478 - }
391 + LP_Helper::create_page( $data_create_page, "learn_press_{$page}_page_id" );
479 392 }
480 -
481 - flush_rewrite_rules();
482 393 } catch ( Exception $ex ) {
483 394 error_log( $ex->getMessage() );
484 395 }
485 396 }
@@ -484,70 +395,17 @@
484 395 }
485 396 }
486 397
487 398 /**
488 - * Search LP page to see if they are already created.
489 - *
490 - * @param $type
491 - * @param $types
492 - *
493 - * @return int|mixed
494 - * @depecated 4.1.6.4
495 - */
496 - /*protected static function _search_page( $type, $types ) {
497 - static $pages = array();
498 -
499 - if ( empty( $pages[ $type ] ) ) {
500 - global $wpdb;
501 - $in_types = array_fill( 0, sizeof( $types ), '%s' );
502 - $args = array( '_learn_press_page' );
503 - $args = array_merge( $args, $types );
504 - $args[] = 'publish';
505 - $query = $wpdb->prepare(
506 - "
507 - SELECT ID, pm.meta_value as type
508 - FROM {$wpdb->posts} p
509 - INNER JOIN {$wpdb->postmeta} pm ON pm.post_id = p.ID AND pm.meta_key = %s AND pm.meta_value IN(" . join( ',',
510 - $in_types ) . ')
511 - WHERE p.post_status = %s
512 - ',
513 - $args
514 - );
515 -
516 - if ( $rows = $wpdb->get_results( $query ) ) {
517 - foreach ( $rows as $row ) {
518 - $pages[ $row->type ] = $row->ID;
519 - }
520 - }
521 - }
522 -
523 - $page_id = ! empty( $pages[ $type ] ) ? $pages[ $type ] : 0;
524 -
525 - return $page_id;
526 - }*/
527 -
528 - /**
529 - * @depecated 4.1.6.4
530 - */
531 - private static function _create_cron_jobs() {
532 - _deprecated_function( __FUNCTION__, '4.1.6.4' );
533 - wp_clear_scheduled_hook( 'learn_press_cleanup_sessions' );
534 - wp_schedule_event(
535 - time(),
536 - apply_filters( 'learn_press_cleanup_session_recurrence', 'twicedaily' ),
537 - 'learn_press_cleanup_sessions'
538 - );
539 - }
540 -
541 - /**
542 399 * Check installed all tables required for LearnPress.
543 400 *
544 401 * @return bool
545 402 */
546 403 public function tables_install_done(): bool {
547 - $install_done = get_option( 'learn_press_check_tables', 'no' );
548 - if ( is_multisite() && 'yes' !== $install_done ) {
404 + $install_done = 'yes' === get_option( 'learn_press_check_tables', 'no' );
405 + if ( ! $install_done ) {
549 406 $this->create_tables();
407 + $install_done = 'yes' === get_option( 'learn_press_check_tables', 'no' );
550 408 }
551 409
552 410 return $install_done;
553 411 }