Skip to content

Commit

Permalink
= 4.2.7.4 =
Browse files Browse the repository at this point in the history
~ Tweak UserItemMode class: handle cache on find_user_item method, fix get_meta_model_from_key method, tweak get_meta_value_from_key
  • Loading branch information
tungnxt89 committed Nov 26, 2024
1 parent e4918e2 commit f6b64bf
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 20 deletions.
75 changes: 57 additions & 18 deletions inc/Models/UserItems/UserItemModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
use LearnPress\Models\CoursePostModel;
use LearnPress\Models\PostModel;
use LearnPress\Models\UserItemMeta\UserItemMetaModel;
use LearnPressAssignment\Models\UserAssignmentModel;
use LP_Cache;
use LP_Datetime;
use LP_User;
use LP_User_Guest;
Expand Down Expand Up @@ -240,19 +242,52 @@ public static function get_user_item_model_from_db( LP_User_Items_Filter $filter
* @param int $user_id
* @param int $item_id
* @param string $item_type
* @param int $ref_id
* @param string $ref_type
* @param bool $check_cache
*
* @return false|UserItemModel|static
* @since 4.2.7.3
* @version 1.0.0
*/
public static function find_user_item( int $user_id, int $item_id, string $item_type, bool $check_cache = false ) {
* @version 1.0.1
*/
public static function find_user_item(
int $user_id,
int $item_id,
string $item_type,
int $ref_id = 0,
string $ref_type = '',
bool $check_cache = false
) {
$key_cache = "userItemModel/find/{$user_id}/{$item_id}/{$item_type}";
$filter = new LP_User_Items_Filter();
$filter->user_id = $user_id;
$filter->item_id = $item_id;
$filter->item_type = $item_type;
if ( ! empty( $ref_id ) ) {
$filter->ref_id = $ref_id;
$key_cache .= "/{$ref_id}";
}
if ( ! empty( $ref_type ) ) {
$filter->ref_type = $ref_type;
$key_cache .= "/{$ref_type}";
}
$lpUserItemCache = new LP_Cache();

// Check cache
if ( $check_cache ) {
$userItemModel = $lpUserItemCache->get_cache( $key_cache );
if ( $userItemModel instanceof UserItemModel ) {
return $userItemModel;
}
}

$userItemModel = static::get_user_item_model_from_db( $filter );
// Set cache
if ( $userItemModel instanceof UserItemModel ) {
$lpUserItemCache->set_cache( $key_cache, $userItemModel );
}

return static::get_user_item_model_from_db( $filter );
return $userItemModel;
}

/**
Expand All @@ -261,22 +296,14 @@ public static function find_user_item( int $user_id, int $item_id, string $item_
* @param string $key
*
* @return false|UserItemMetaModel
* @since 4.2.5
* @version 1.0.1
*/
public function get_meta_model_from_key( string $key ) {
$user_item_metadata = false;

// Check object meta_data has value of key.
if ( $this->meta_data instanceof stdClass
&& property_exists( $this->meta_data, $key ) ) {
$user_item_metadata = $this->meta_data->{$key};
} else { // Get from DB
$filter = new LP_User_Item_Meta_Filter();
$filter->meta_key = $key;
$filter->learnpress_user_item_id = $this->get_user_item_id();
$user_item_metadata = UserItemMetaModel::get_user_item_meta_model_from_db( $filter );
}

return $user_item_metadata;
$filter = new LP_User_Item_Meta_Filter();
$filter->meta_key = $key;
$filter->learnpress_user_item_id = $this->get_user_item_id();
return UserItemMetaModel::get_user_item_meta_model_from_db( $filter );
}

/**
Expand All @@ -286,10 +313,16 @@ public function get_meta_model_from_key( string $key ) {
* @param bool $get_extra
*
* @return false|string
* @since 4.2.5
* @version 1.0.1
*/
public function get_meta_value_from_key( string $key, bool $get_extra = false ) {
$data = false;

if ( $this->meta_data instanceof stdClass && isset( $this->meta_data->{$key} ) ) {
return $this->meta_data->{$key};
}

$user_item_metadata = $this->get_meta_model_from_key( $key );
if ( $user_item_metadata instanceof UserItemMetaModel ) {
if ( ! $this->meta_data instanceof stdClass ) {
Expand Down Expand Up @@ -437,5 +470,11 @@ public function clean_caches() {
$this->item_type,
]
);

$key_cache_user_item = "userItemModel/find/{$this->user_id}/{$this->item_id}/{$this->item_type}";
$lp_user_items_cache->clear( $key_cache_user_item );

$key_cache_user_item_ref = "userItemModel/find/{$this->user_id}/{$this->item_id}/{$this->item_type}/{$this->ref_id}/{$this->ref_type}";
$lp_user_items_cache->clear( $key_cache_user_item_ref );
}
}
9 changes: 8 additions & 1 deletion inc/course/class-lp-course-item.php
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,14 @@ public function get_class_v2( $course_id, $item_id, $can_view_item, $more = arra
} elseif ( ! $can_view_item->flag ) {
$defaults[] = 'item-locked';
} else {
$userItemModel = UserItemModel::find_user_item( $user_id, $item_id, get_post_type( $item_id ) );
$userItemModel = UserItemModel::find_user_item(
$user_id,
$item_id,
get_post_type( $item_id ),
$course_id,
LP_COURSE_CPT,
true
);
$item_status = $userItemModel ? $userItemModel->get_status() : '';
$item_grade = $userItemModel ? $userItemModel->get_graduation() : '';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -664,7 +664,14 @@ public function continue_course( WP_REST_Request $request ): LP_REST_Response {
$item_id = $item->id ?? $item->item_id;
$item_type = $item->type ?? $item->item_type;

$userItemModel = UserItemModel::find_user_item( $user_id, $item_id, $item_type );
$userItemModel = UserItemModel::find_user_item(
$user_id,
$item_id,
$item_type,
$course_id,
LP_COURSE_CPT,
true
);
if ( ! $userItemModel || $userItemModel->get_status() !== LP_ITEM_COMPLETED ) {
$item_link = $course->get_item_link( $item->id );
$flag_found = true;
Expand Down

0 comments on commit f6b64bf

Please sign in to comment.