Skip to content

Commit 2014610

Browse files
committed
= 4.3.4 =
~ Added: UserService.php ~ Tweak: detect_instructor_by_page
1 parent 6b50565 commit 2014610

File tree

5 files changed

+77
-56
lines changed

5 files changed

+77
-56
lines changed

config/settings/open-ai-admin.php

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,4 @@
11
<?php
2-
$currencies = learn_press_currencies();
3-
4-
foreach ( $currencies as $code => $name ) {
5-
$currency_symbol = learn_press_get_currency_symbol( $code );
6-
$currencies[ $code ] = sprintf( '%s (%s)', $name, $currency_symbol );
7-
}
8-
9-
$settings = LP_Settings::instance();
10-
$user = wp_get_current_user();
11-
$user_model = new \LearnPress\Models\UserModel( $user );
12-
$username = $user_model->get_pretty_slug();
13-
$settings_slug = $settings->get( 'profile_endpoints.settings', 'settings' );
14-
$profile_slug = 'profile';
15-
16-
if ( learn_press_get_page_id( 'profile' ) ) {
17-
$profile_post = get_post( learn_press_get_page_id( 'profile' ) );
18-
19-
if ( $profile_post ) {
20-
$profile_slug = $profile_post->post_name;
21-
}
22-
}
23-
24-
$profile_url = site_url() . '/' . $profile_slug . '/' . $username;
25-
262
return apply_filters(
273
'lp/settings/open-ai',
284
array_merge(

config/settings/permalink.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
<?php
2+
3+
use LearnPress\Models\UserModel;
4+
25
$currencies = learn_press_currencies();
36

47
foreach ( $currencies as $code => $name ) {
@@ -7,9 +10,8 @@
710
}
811

912
$settings = LP_Settings::instance();
10-
$user = wp_get_current_user();
11-
$user_model = new \LearnPress\Models\UserModel( $user );
12-
$username = $user_model->get_pretty_slug();
13+
$userModel = UserModel::find( get_current_user_id(), true );
14+
$username = $userModel->get_pretty_slug();
1315
$settings_slug = $settings->get( 'profile_endpoints.settings', 'settings' );
1416
$profile_slug = 'profile';
1517

config/settings/profile.php

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,4 @@
11
<?php
2-
$currencies = learn_press_currencies();
3-
foreach ( $currencies as $code => $name ) {
4-
$currency_symbol = learn_press_get_currency_symbol( $code );
5-
$currencies[ $code ] = sprintf( '%s (%s)', $name, $currency_symbol );
6-
}
7-
8-
$settings = LP_Settings::instance();
9-
$user = wp_get_current_user();
10-
$user_model = new \LearnPress\Models\UserModel( $user );
11-
$username = $user_model->get_pretty_slug();
12-
$settings_slug = $settings->get( 'profile_endpoints.settings', 'settings' );
13-
$profile_slug = 'profile';
14-
15-
if ( learn_press_get_page_id( 'profile' ) ) {
16-
$profile_post = get_post( learn_press_get_page_id( 'profile' ) );
17-
18-
if ( $profile_post ) {
19-
$profile_slug = $profile_post->post_name;
20-
}
21-
}
22-
23-
$profile_url = site_url() . '/' . $profile_slug . '/' . $username;
24-
252
return apply_filters(
263
'lp/settings/profile',
274
apply_filters(

inc/Services/UserService.php

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
3+
namespace LearnPress\Services;
4+
5+
use Exception;
6+
use LearnPress\Helpers\Singleton;
7+
use LearnPress\Models\UserModel;
8+
use LP_User_DB;
9+
use LP_User_Filter;
10+
11+
12+
/**
13+
* Class UserService
14+
*
15+
* Handle logic business for user.
16+
*
17+
* @since 4.3.4
18+
* @version 1.0.0
19+
*/
20+
class UserService {
21+
use Singleton;
22+
23+
public function init() {}
24+
25+
/**
26+
* Check if pretty slug exists of another user.
27+
*
28+
* @param string $slug
29+
*
30+
* @return false|UserModel
31+
* @throws Exception
32+
* @version 1.0.0
33+
* @since 4.3.4
34+
*/
35+
public function get_user_by_pretty_slug( string $slug ) {
36+
$slug = trim( urldecode( $slug ) );
37+
$slug = sanitize_title( $slug );
38+
39+
if ( '' === $slug ) {
40+
return false;
41+
}
42+
43+
$lp_user_db = LP_User_DB::instance();
44+
$filter = new LP_User_Filter();
45+
$filter->only_fields = [ 'u.ID' ];
46+
$lp_user_db->get_query_single_row( $filter );
47+
$filter->join[] = "INNER JOIN {$lp_user_db->wpdb->usermeta} AS um ON um.user_id = u.ID";
48+
$filter->where[] = $lp_user_db->wpdb->prepare( 'AND um.meta_key = %s', UserModel::META_KEY_USER_SLUG );
49+
$filter->where[] = $lp_user_db->wpdb->prepare( 'AND um.meta_value = %s', $slug );
50+
$query = $lp_user_db->get_users( $filter );
51+
52+
$user_id = (int) $lp_user_db->wpdb->get_var( $query );
53+
54+
return UserModel::find( $user_id, true );
55+
}
56+
}

inc/TemplateHooks/Instructor/SingleInstructorTemplate.php

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use LearnPress\Models\CourseModel;
1313
use LearnPress\Models\Courses;
1414
use LearnPress\Models\UserModel;
15+
use LearnPress\Services\UserService;
1516
use LearnPress\TemplateHooks\Profile\ProfileTemplate;
1617
use LearnPress\TemplateHooks\Course\ListCoursesTemplate;
1718
use LearnPress\TemplateHooks\UserTemplate;
@@ -240,22 +241,31 @@ public function sections( array $data = [] ) {
240241
*
241242
* @return false|UserModel
242243
* @since 4.2.3.4
243-
* @version 1.0.1
244+
* @version 1.0.2
244245
*/
245246
public function detect_instructor_by_page() {
246247
$instructor = false;
247248

248249
try {
250+
$userModelCurrent = UserModel::find( get_current_user_id(), true );
249251
if ( get_query_var( 'is_single_instructor' ) ) {
250252
$instructor_name = get_query_var( 'instructor_name' );
251253
if ( $instructor_name && 'page' !== $instructor_name ) {
252-
$user_model = new UserModel();
253-
$user = $user_model->resolve_user_by_public_identifier( (string) $instructor_name );
254-
if ( $user ) {
255-
$instructor = UserModel::find( $user->ID, true );
254+
// Try to get user by pretty slug first, if not found, get by slug.
255+
$userModel = UserService::instance()->get_user_by_pretty_slug( $instructor_name );
256+
if ( $userModel instanceof UserModel ) {
257+
$instructor = $userModel;
258+
} else {
259+
// Get user by slug.
260+
$wp_user = get_user_by( 'slug', $instructor_name );
261+
// Only allow view instructor when user is administrator or view his/her profile.
262+
if ( current_user_can( UserModel::ROLE_ADMINISTRATOR )
263+
|| ( $userModelCurrent && $userModelCurrent->get_id() === $wp_user->ID ) ) {
264+
$instructor = $userModelCurrent;
265+
}
256266
}
257267
} else {
258-
$instructor = UserModel::find( get_current_user_id(), true );
268+
$instructor = $userModelCurrent;
259269
}
260270
}
261271
} catch ( Throwable $e ) {

0 commit comments

Comments
 (0)