Skip to content

Commit d143b9e

Browse files
committed
= 4.3.4 =
~ Tweak UserService.php, UserModel.php, class-lp-submenu-settings.php
1 parent a636edb commit d143b9e

File tree

3 files changed

+61
-82
lines changed

3 files changed

+61
-82
lines changed

inc/Models/UserModel.php

Lines changed: 11 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use LearnPress\Databases\UserItemsDB;
1515
use LearnPress\Filters\Course\CourseJsonFilter;
1616
use LearnPress\Filters\UserItemsFilter;
17+
use LearnPress\Services\UserService;
1718
use LP_Cache;
1819
use LP_Debug;
1920
use LP_User;
@@ -243,39 +244,6 @@ public function get_pretty_slug( bool $fallback_to_username = true ): string {
243244
return $this->get_username();
244245
}
245246

246-
/**
247-
* Check if pretty slug exists of another user.
248-
*
249-
* @param string $slug
250-
*
251-
* @return int
252-
* @since 4.3.4
253-
* @version 1.0.0
254-
*/
255-
public function check_user_slug_pretty( string $slug ): int {
256-
$user_id = 0;
257-
258-
try {
259-
$lp_user_db = LP_User_DB::instance();
260-
$filter = new LP_User_Filter();
261-
$filter->only_fields = [ 'u.ID' ];
262-
$filter->run_query_count = false;
263-
$filter->limit = 1;
264-
$filter->return_string_query = true;
265-
$filter->join[] = "INNER JOIN {$lp_user_db->wpdb->usermeta} AS um ON um.user_id = u.ID";
266-
$filter->where[] = $lp_user_db->wpdb->prepare( 'AND um.meta_key = %s', self::META_KEY_USER_SLUG );
267-
$filter->where[] = $lp_user_db->wpdb->prepare( 'AND um.meta_value = %s', $slug );
268-
$filter->where[] = $lp_user_db->wpdb->prepare( 'AND u.ID != %d', $this->get_id() );
269-
$query = $lp_user_db->get_users( $filter );
270-
271-
$user_id = (int) $lp_user_db->wpdb->get_var( $query );
272-
} catch ( Throwable $e ) {
273-
LP_Debug::error_log( $e );
274-
}
275-
276-
return $user_id;
277-
}
278-
279247
/**
280248
* Create a unique pretty slug for user.
281249
*
@@ -306,7 +274,8 @@ public function generate_pretty_slug() {
306274
}
307275

308276
// Check slug exists.
309-
if ( ! $this->check_user_slug_pretty( $base_slug ) ) {
277+
$userModelFind = UserService::instance()->get_user_by_pretty_slug( $base_slug );
278+
if ( ! $userModelFind ) {
310279
$this->set_meta_value_by_key( self::META_KEY_USER_SLUG, $base_slug );
311280
} else {
312281
// Regenerate slug by adding random string at the end of base slug until it is unique.
@@ -340,7 +309,14 @@ public function update_pretty_slug( string $slug ) {
340309
return '';
341310
}
342311

343-
if ( $this->check_user_slug_pretty( $slug ) ) {
312+
$userModelFind = UserService::instance()->get_user_by_pretty_slug( $slug );
313+
// If not found any user with the slug, or found user is current user, update slug, else throw error.
314+
if ( ! $userModelFind ) {
315+
$this->set_meta_value_by_key( self::META_KEY_USER_SLUG, $slug );
316+
317+
return $slug;
318+
} elseif ( $userModelFind->get_id() !== $this->get_id() ) {
319+
// Found another user with the slug, throw error.
344320
throw new Exception(
345321
sprintf(
346322
/* translators: 1: user slug */
@@ -358,52 +334,6 @@ public function update_pretty_slug( string $slug ) {
358334
return $slug;
359335
}
360336

361-
/**
362-
* Generate pretty slug for users that still miss one (old sites support).
363-
*
364-
* @return array [ 'processed' => int, 'generated' => int, 'skipped' => int, 'failed' => int ]
365-
*/
366-
public static function generate_users_pretty_slug(): array {
367-
$user_ids = get_users(
368-
[
369-
'fields' => 'ids',
370-
'number' => - 1,
371-
]
372-
);
373-
374-
$result = [
375-
'processed' => 0,
376-
'generated' => 0,
377-
'skipped' => 0,
378-
'failed' => 0,
379-
];
380-
381-
foreach ( $user_ids as $user_id ) {
382-
$user_id = (int) $user_id;
383-
++ $result['processed'];
384-
385-
$userModel = UserModel::find( $user_id, true );
386-
if ( ! $userModel instanceof UserModel ) {
387-
++ $result['failed'];
388-
continue;
389-
}
390-
391-
if ( '' !== $userModel->get_pretty_slug( false ) ) {
392-
++ $result['skipped'];
393-
continue;
394-
}
395-
396-
$generated = $userModel->generate_pretty_slug();
397-
if ( is_wp_error( $generated ) ) {
398-
++ $result['failed'];
399-
} else {
400-
++ $result['generated'];
401-
}
402-
}
403-
404-
return $result;
405-
}
406-
407337
/**
408338
* Get upload profile src.
409339
*

inc/Services/UserService.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,52 @@ public function get_user_by_pretty_slug( string $slug ) {
5353

5454
return UserModel::find( $user_id, true );
5555
}
56+
57+
/**
58+
* Generate pretty slug for all users who don't have it yet.
59+
*
60+
* @return array [ 'processed' => int, 'generated' => int, 'skipped' => int, 'failed' => int ]
61+
* @since 4.3.4
62+
* @version 1.0.0
63+
*/
64+
public function generate_users_pretty_slug(): array {
65+
$user_ids = get_users(
66+
[
67+
'fields' => 'ids',
68+
'number' => - 1,
69+
]
70+
);
71+
72+
$result = [
73+
'processed' => 0,
74+
'generated' => 0,
75+
'skipped' => 0,
76+
'failed' => 0,
77+
];
78+
79+
foreach ( $user_ids as $user_id ) {
80+
$user_id = (int) $user_id;
81+
++ $result['processed'];
82+
83+
$userModel = UserModel::find( $user_id, true );
84+
if ( ! $userModel instanceof UserModel ) {
85+
++ $result['failed'];
86+
continue;
87+
}
88+
89+
if ( '' !== $userModel->get_pretty_slug( false ) ) {
90+
++ $result['skipped'];
91+
continue;
92+
}
93+
94+
$generated = $userModel->generate_pretty_slug();
95+
if ( is_wp_error( $generated ) ) {
96+
++ $result['failed'];
97+
} else {
98+
++ $result['generated'];
99+
}
100+
}
101+
102+
return $result;
103+
}
56104
}

inc/admin/sub-menus/class-lp-submenu-settings.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?php
22

33
use LearnPress\Models\UserModel;
4+
use LearnPress\Services\UserService;
45

56
defined( 'ABSPATH' ) || exit();
67

@@ -122,7 +123,7 @@ public function save_settings() {
122123
$redirect_args = array();
123124
if ( 'permalink' === $active_tab &&
124125
'yes' === LP_Request::get_param( 'lp_generate_user_slug' ) ) {
125-
$result = UserModel::generate_users_pretty_slug();
126+
$result = UserService::instance()->generate_users_pretty_slug();
126127
$redirect_args = array(
127128
'lp-user-slug-generated' => $result['generated'],
128129
'lp-user-slug-processed' => $result['processed'],

0 commit comments

Comments
 (0)