Sindbad~EG File Manager
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
/**
* Class LP_User_Items_DB
*
* @since 3.2.8.6
* @version 1.0.2
* @author tungnx
*/
class LP_User_Items_DB extends LP_Database {
private static $_instance;
public static $user_item_id_col = 'learnpress_user_item_id';
public static $extra_value_col = 'extra_value';
protected function __construct() {
parent::__construct();
}
public static function getInstance() {
if ( is_null( self::$_instance ) ) {
self::$_instance = new self();
}
return self::$_instance;
}
/**
* Get items by user_item_id | this is id where item_id = course_id
*
* @param int $user_item_id_by_course_id
* @param int $user_id
*
* @return object
* @throws Exception
*/
public function get_course_items_by_user_item_id( $user_item_id_by_course_id = 0, $user_id = 0 ) {
if ( empty( $user_item_id_by_course_id ) || empty( $user_id ) ) {
return null;
}
$query = $this->wpdb->prepare(
"
SELECT * FROM {$this->tb_lp_user_items}
WHERE parent_id = %d
AND ref_type = %s
AND user_id = %d
",
$user_item_id_by_course_id,
LP_COURSE_CPT,
$user_id
);
$course_items = $this->wpdb->get_results( $query );
$this->check_execute_has_error();
return $course_items;
}
/**
* Get data user_items by course_id, quiz_id, user_id
*
* @param [type] $course_id
* @param [type] $item_id
* @param [type] $user_id
* @return array
*/
public function get_result_by_item_id( $course_id, $item_id, $user_id ) {
if ( empty( $course_id ) || empty( $item_id ) ) {
return false;
}
$query = $this->wpdb->prepare(
"SELECT * FROM {$this->tb_lp_user_items}
WHERE ref_id = %d
AND item_id = %d
AND user_id=%d
ORDER BY user_item_id DESC",
$course_id,
$item_id,
$user_id
);
$results = $this->wpdb->get_row( $query, ARRAY_A );
return $results;
}
/**
* Remove items' of course and user learned
*
* @param LP_User_Items_Filter $filter .
*
* @return bool|int
* @throws Exception .
*/
public function remove_items_of_user_course( LP_User_Items_Filter $filter ) {
$query_extra = '';
// Check valid user.
if ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $filter->user_id ) ) {
throw new Exception( __( 'User invalid!', 'learnpress' ) . ' | ' . __FUNCTION__ );
}
if ( - 1 < $filter->limit ) {
$query_extra .= " LIMIT $filter->limit";
}
$query = $this->wpdb->prepare(
"
DELETE FROM {$this->tb_lp_user_items}
WHERE parent_id = %d
$query_extra;
",
$filter->parent_id
);
return $this->wpdb->query( $query );
}
public function get_item_status( $item_id, $course_id ) {
$query = $this->wpdb->prepare(
"
SELECT status FROM {$this->tb_lp_user_items}
WHERE ref_id = %d
AND ref_type = %s
AND item_id = %d
",
$course_id,
'lp_course',
$item_id
);
return $this->wpdb->get_var( $query );
}
/**
* Insert/Update extra value
*
* @param int $user_item_id
* @param string $meta_key
* @param string $value
* @since 4.0.0
* @version 1.0.0
* @author tungnx
*/
public function update_extra_value( $user_item_id = 0, $meta_key = '', $value = '' ) {
$data = array(
'learnpress_user_item_id' => $user_item_id,
'meta_key' => $meta_key,
'extra_value' => $value,
);
$format = array( '%s', '%s' );
$check_exist_data = $this->wpdb->get_var(
$this->wpdb->prepare(
"
SELECT meta_id FROM $this->tb_lp_user_itemmeta
WHERE " . self::$user_item_id_col . ' = %d
AND meta_key = %s
',
$user_item_id,
$meta_key
)
);
if ( $check_exist_data ) {
$this->wpdb->update(
$this->tb_lp_user_itemmeta,
$data,
array(
self::$user_item_id_col => $user_item_id,
'meta_key' => $meta_key,
),
$format
);
} else {
$this->wpdb->insert( $this->tb_lp_user_itemmeta, $data, $format );
}
}
/**
* Get extra value
*
* @param int $user_item_id
* @param string $meta_key
*/
public function get_extra_value( $user_item_id = 0, $meta_key = '' ) {
return $this->wpdb->get_var(
$this->wpdb->prepare(
'
SELECT ' . self::$extra_value_col . " FROM $this->tb_lp_user_itemmeta
WHERE " . self::$user_item_id_col . ' = %d
AND meta_key = %s
',
$user_item_id,
$meta_key
)
);
}
/**
* Re-set current item
* @param $course_id
* @param $item_id
* @editor hungkv
*/
public function reset_course_current_item( $course_id, $item_id ) {
// Select all course enrolled
$query = $this->wpdb->prepare(
"
SELECT user_item_id
FROM {$this->wpdb->prefix}learnpress_user_items
WHERE status = %s AND item_id = %d AND graduation = %s
",
'enrolled',
$course_id,
'in-progress'
);
$user_item_ids = $this->wpdb->get_col( $query );
if ( ! empty( $user_item_ids ) ) {
foreach ( $user_item_ids as $user_item_id ) {
// Check item is current item of all course
$query = $this->wpdb->prepare(
"
SELECT meta_value
FROM {$this->wpdb->prefix}learnpress_user_itemmeta
WHERE learnpress_user_item_id = %d
",
$user_item_id
);
$meta_value_id = $this->wpdb->get_var( $query );
// Check if the deleted item is current item or not
if ( $meta_value_id == $item_id ) {
$course = learn_press_get_course( $course_id );
// update _curent_item to database
learn_press_update_user_item_meta( $user_item_id, '_current_item', $course->get_first_item_id() );
}
}
}
}
/**
* Get total courses is has graduation is 'in_progress'
*
* @param int $user_id
* @param string $status
* @return int
* @throws Exception
*/
public function get_total_courses_has_status( int $user_id, string $status ): int {
$query = $this->wpdb->prepare(
"
SELECT COUNT(DISTINCT(item_id)) total
FROM $this->tb_lp_user_items
INNER JOIN $this->tb_posts AS p
ON item_id = p.ID
WHERE item_type = %s
AND user_id = %d
AND graduation = %s
AND p.post_status = 'publish'
",
LP_COURSE_CPT,
$user_id,
$status
);
$this->check_execute_has_error();
return (int) $this->wpdb->get_var( $query );
}
/**
* Get status course by order_id
*
* @param int $order_id
* @throws Exception
* @return null|string
*/
public function get_status_by_order_id( int $order_id ) {
$query = $this->wpdb->prepare(
"
SELECT status
FROM $this->tb_lp_user_items
WHERE ref_type = %s
AND ref_id = %d
AND item_type = %s
",
LP_ORDER_CPT,
$order_id,
LP_COURSE_CPT
);
$result = $this->wpdb->get_var( $query );
$this->check_execute_has_error();
return $result;
}
/**
* Get the newest item is course of user
*
* @param LP_User_Items_Filter $filter
* @throws Exception
*
* @return null|object
*/
public function get_last_user_course( LP_User_Items_Filter $filter ) {
$query = $this->wpdb->prepare(
"
SELECT user_item_id, user_id, item_id, item_type, status, graduation, ref_id, ref_type, start_time, end_time
FROM $this->tb_lp_user_items
WHERE item_type = %s
AND item_id = %d
AND user_id = %d
ORDER BY user_item_id DESC
LIMIT 1
",
LP_COURSE_CPT,
$filter->item_id,
$filter->user_id
);
$result = $this->wpdb->get_row( $query );
$this->check_execute_has_error();
return $result;
}
/**
* Get item of user and course
*
* @param LP_User_Items_Filter $filter
* @throws Exception
*
* @return null|object
*/
public function get_user_course_item( LP_User_Items_Filter $filter ) {
$query = $this->wpdb->prepare(
"
SELECT user_item_id, user_id, item_id, item_type, status, graduation, ref_id, ref_type, start_time, end_time, parent_id
FROM $this->tb_lp_user_items
WHERE parent_id = %d
AND item_id = %d
AND user_id = %d
ORDER BY user_item_id DESC
LIMIT 1
",
$filter->parent_id,
$filter->item_id,
$filter->user_id
);
$result = $this->wpdb->get_row( $query );
$this->check_execute_has_error();
return $result;
}
/**
* Query table learnpress_user_items
*
* @param LP_User_Items_Filter $filter
*/
public function get_user_items( LP_User_Items_Filter $filter ) {
if ( empty( $filter->select ) ) {
$filter->select = '*';
}
$WHERE = '';
$vars = get_class_vars( $this );
foreach ( $vars as $var ) {
if ( ! empty( $filter->{$var} ) ) {
if ( empty( $WHERE ) ) {
$WHERE = ' WHERE' . $filter->{$var};
} else {
$WHERE = ' AND' . $filter->{$var};
}
}
}
$query = $this->wpdb->prepare(
"
SELECT $filter->select FROM $this->tb_lp_user_items
$WHERE
",
$filter->item_type,
$filter->item_id,
$filter->user_id
);
$result = $this->wpdb->get_var( $query );
$this->check_execute_has_error();
return $result;
}
/**
* Get items is course has user
*
* @param LP_User_Items_Filter $filter $filter->user_id, $filter->item_id
*
* @throws Exception
* @author tungnx
* @since 4.1.4
* @version 1.0.0
*/
public function get_ids_course_user( LP_User_Items_Filter $filter ): array {
$query = $this->wpdb->prepare(
"SELECT user_item_id FROM {$this->tb_lp_user_items}
WHERE user_id = %d
AND item_id = %d
AND item_type = %s
",
$filter->user_id,
$filter->item_id,
LP_COURSE_CPT
);
return $this->wpdb->get_col( $query );
}
/**
* Get items of course has user
*
* @param LP_User_Items_Filter $filter user_item_ids
*
* @throws Exception
* @since 4.1.4
* @version 1.0.0
*/
public function get_item_ids_of_user_course( LP_User_Items_Filter $filter ): array {
if ( empty( $filter->user_item_ids ) ) {
return [];
}
$where = 'WHERE 1=1 ';
$where .= $this->wpdb->prepare(
'AND parent_id IN(' . LP_Helper::db_format_array( $filter->user_item_ids, '%d' ) . ')',
$filter->user_item_ids
);
return $this->wpdb->get_col(
"SELECT user_item_id FROM {$this->tb_lp_user_items}
{$where}
"
);
}
/**
* Remove rows IN user_item_ids
*
* @param LP_User_Items_Filter $filter $filter->user_item_ids, $filter->user_id
*
* @throws Exception
* @since 4.1.4
* @version 1.0.0
*/
public function remove_user_item_ids( LP_User_Items_Filter $filter ) {
// Check valid user.
if ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $filter->user_id ) ) {
throw new Exception( __( 'User invalid!', 'learnpress' ) . ' | ' . __FUNCTION__ );
}
if ( empty( $filter->user_item_ids ) ) {
return 1;
}
$where = 'WHERE 1=1 ';
$where .= $this->wpdb->prepare(
'AND user_item_id IN(' . LP_Helper::db_format_array( $filter->user_item_ids, '%d' ) . ')',
$filter->user_item_ids
);
return $this->wpdb->query(
"DELETE FROM {$this->tb_lp_user_items}
{$where}
"
);
}
/**
* Remove user_itemmeta has list user_item_ids
*
* @param LP_User_Items_Filter $filter $filter->user_item_ids, $filter->user_id
*
* @throws Exception
* @since 4.1.4
* @version 1.0.0
*/
public function remove_user_itemmeta( LP_User_Items_Filter $filter ) {
// Check valid user.
if ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $filter->user_id ) ) {
throw new Exception( __( 'User invalid!', 'learnpress' ) . ' | ' . __FUNCTION__ );
}
if ( empty( $filter->user_item_ids ) ) {
return 1;
}
$where = 'WHERE 1=1 ';
$where .= $this->wpdb->prepare(
'AND learnpress_user_item_id IN(' . LP_Helper::db_format_array( $filter->user_item_ids, '%d' ) . ')',
$filter->user_item_ids
);
return $this->wpdb->query(
"DELETE FROM {$this->tb_lp_user_itemmeta}
{$where}
"
);
}
/**
* Delete user_item_ids by user_id and course_id
*
* @param int $user_id
* @param int $course_id
* @author tungnx
* @since 4.1.4
* @version 1.0.0
*/
public function delete_user_items_old( int $user_id = 0, int $course_id = 0 ) {
$lp_user_items_db = LP_User_Items_DB::getInstance();
$lp_user_item_results = LP_User_Items_Result_DB::instance();
try {
// Check valid user.
if ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $user_id ) ) {
throw new Exception( __( 'User invalid!', 'learnpress' ) . ' | ' . __FUNCTION__ );
}
// Get all user_item_ids has user_id and course_id
$filter = new LP_User_Items_Filter();
$filter->user_id = $user_id;
$filter->item_id = $course_id;
$user_course_ids = $lp_user_items_db->get_ids_course_user( $filter );
if ( empty( $user_course_ids ) ) {
return;
}
// Get user_item_ids has parent in $user_course_ids
$filter = new LP_User_Items_Filter();
$filter->user_item_ids = $user_course_ids;
$user_item_ids = $lp_user_items_db->get_item_ids_of_user_course( $filter );
$user_item_ids_concat = array_merge( $user_course_ids, $user_item_ids );
// Delete on tb lp_user_items
$filter = new LP_User_Items_Filter();
$filter->user_item_ids = $user_item_ids_concat;
$filter->user_id = $user_id;
$lp_user_items_db->remove_user_item_ids( $filter );
// Delete user_itemmeta
$lp_user_items_db->remove_user_itemmeta( $filter );
// Delete user_item_results
$lp_user_item_results->remove_user_item_results( $filter );
} catch ( Throwable $e ) {
error_log( $e->getMessage() );
}
}
/**
* Update user_id for lp_user_item with Order buy User Guest
*
* @param LP_User_Items_Filter $filter
*
* @return bool|int
* @throws Exception
*/
public function update_user_id_by_order( LP_User_Items_Filter $filter ) {
// Check valid user.
if ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $filter->user_id ) ) {
throw new Exception( __( 'User invalid!', 'learnpress' ) . ' | ' . __FUNCTION__ );
}
$query = $this->wpdb->prepare(
"UPDATE {$this->tb_lp_user_items}
SET user_id = %d
WHERE ref_type = %s
AND ref_id = %d
",
$filter->user_id,
LP_ORDER_CPT,
$filter->ref_id
);
return $this->wpdb->query( $query );
}
}
LP_Course_DB::getInstance();
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists