model()->courseCart()->where('cart_token', $cookie)->get();
if ($carts->count() > 0) {
foreach ($carts as $cart) {
if (acadlix()->model()->courseCart()->where("item_id", $cart->item_id)->where('user_id', $user->ID)->first()) {
$cart->delete();
} else {
$cart->update([
'cart_token' => null,
'token_expiry' => 0,
'user_id' => $user->ID
]);
}
}
}
// Unset the cookie by setting its expiration time to a past time
setcookie($cookie_name, '', time() - 3600, "/");
// Optionally, unset it from the $_COOKIE superglobal to ensure it's gone during this request
if (array_key_exists($cookie_name, $_COOKIE)) {
unset($cookie);
}
}
// Sync user quiz data
$user_cookie_name = 'acadlix_user_token';
if (isset($_COOKIE[$user_cookie_name])) {
$cookie = sanitize_text_field(wp_unslash($_COOKIE[$user_cookie_name]));
$userActivityMetas = acadlix()->model()->userActivityMeta()->ofQuiz()
->ofQuizAttempt()
->where('user_token', $cookie)
->first();
if ($userActivityMetas) {
$userQuiz = acadlix()->model()->userActivityMeta()->ofQuiz()
->ofQuizAttempt()
->where('type_id', $userActivityMetas->type_id)
->where('user_id', $user->ID)
->first();
if ($userQuiz) {
$userQuiz->update([
'meta_value' => $userQuiz->meta_value + $userActivityMetas->meta_value // phpcs:ignore
]);
$userActivityMetas->delete();
} else {
$userActivityMetas->update([
'user_token' => null,
'user_id' => $user->ID
]);
}
}
$statisticRefs = acadlix()->model()->statisticRef()->where('user_token', $cookie)->get();
if ($statisticRefs->count() > 0) {
foreach ($statisticRefs as $statisticRef) {
$statisticRef->update([
'user_token' => null,
'user_id' => $user->ID
]);
}
}
$toplists = acadlix()->model()->toplist()->where('user_token', $cookie)->get();
if ($toplists->count() > 0) {
foreach ($toplists as $toplist) {
$toplist->update([
'user_token' => null,
'user_id' => $user->ID,
'name' => $user->display_name,
'email' => $user->user_email
]);
}
}
// Unset the cookie by setting its expiration time to a past time
setcookie($user_cookie_name, '', time() - 3600, "/");
// Optionally, unset it from the $_COOKIE superglobal to ensure it's gone during this request
if (array_key_exists($user_cookie_name, $_COOKIE)) {
unset($cookie);
}
}
}
public function acadlix_gutenberg_disable_cpt($use_block_editor, $post_type)
{
if ($post_type === ACADLIX_COURSE_CPT) {
$use_block_editor = false;
}
return $use_block_editor;
}
public function acadlix_delete_post_type_data()
{
global $wpdb;
$post_types = [
ACADLIX_COURSE_CPT,
ACADLIX_QUIZ_CPT,
ACADLIX_LESSON_CPT,
ACADLIX_COUPON_CPT,
];
foreach ($post_types as $post_type) {
// Get all post IDs of this post type
$post_ids = $wpdb->get_col($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_type = %s", $post_type)); // phpcs:ignore
if (!empty($post_ids)) {
foreach ($post_ids as $post_id) {
switch ($post_type) {
case ACADLIX_COURSE_CPT:
acadlix()->model()->course()->deleteCourse($post_id);
wp_delete_post($post_id, true);
break;
case ACADLIX_QUIZ_CPT:
acadlix()->model()->quiz()->deleteQuiz($post_id);
break;
case ACADLIX_LESSON_CPT:
acadlix()->model()->lesson()->deleteLesson($post_id);
break;
case ACADLIX_COUPON_CPT:
acadlix()->model()->coupon()->deleteCoupon($post_id);
break;
default:
break;
}
}
}
unregister_post_type($post_type);
}
$this->delete_taxonomy();
}
protected function delete_taxonomy()
{
$taxonomies = [
ACADLIX_COURSE_CATEGORY_TAXONOMY,
ACADLIX_COURSE_TAG_TAXONOMY,
ACADLIX_QUIZ_CATEGORY_TAXONOMY,
ACADLIX_QUIZ_LANGUAGE_TAXONOMY
];
foreach ($taxonomies as $taxonomy) {
$terms = get_terms([
'taxonomy' => $taxonomy,
'hide_empty' => false,
]);
if (!is_wp_error($terms) && !empty($terms)) {
foreach ($terms as $term) {
wp_delete_term($term->term_id, $taxonomy);
}
}
unregister_taxonomy($taxonomy);
}
}
public function acadlix_flush_rewrite_rules()
{
if (acadlix()->helper()->acadlix_get_option('acadlix_flush_rewrite')) {
flush_rewrite_rules();
acadlix()->helper()->acadlix_delete_option('acadlix_flush_rewrite'); // prevent repeated flushing
}
}
public function acadlix_plugin_action_links($links)
{
$setting_link = sprintf('%s', admin_url('admin.php?page=acadlix_setting'), __('Settings', "acadlix"));
array_unshift($links, $setting_link);
if (!acadlix()->pro) {
$links['go_pro'] = sprintf('%s', ACADLIX_MARKETPLACE_URL . 'pricing', __('Get Acadlix Pro', "acadlix"));
}
return $links;
}
public function add_toolbar_menu($admin_bar)
{
if (
current_user_can('acadlix_edit_course') ||
current_user_can('acadlix_add_lesson') ||
current_user_can('acadlix_add_quiz') ||
current_user_can('acadlix_show_setting')
) {
$admin_bar->add_menu([
'id' => 'acadlix-menu',
'title' => 'Acadlix',
'href' => admin_url('admin.php?page=acadlix'),
]);
if (current_user_can('acadlix_edit_course')) {
$admin_bar->add_menu([
'id' => 'acadlix-courses',
'parent' => 'acadlix-menu',
'title' => 'Create Courses',
'href' => admin_url('post-new.php?post_type=acadlix_course'),
]);
}
if (current_user_can('acadlix_add_lesson')) {
$admin_bar->add_menu([
'id' => 'acadlix-lessons',
'parent' => 'acadlix-menu',
'title' => 'Create Lessons',
'href' => admin_url('admin.php?page=acadlix_lesson#/create'),
]);
}
if (current_user_can('acadlix_add_quiz')) {
$admin_bar->add_menu([
'id' => 'acadlix-quizzes',
'parent' => 'acadlix-menu',
'title' => 'Create Quizzes',
'href' => admin_url('admin.php?page=acadlix_quiz#/create'),
]);
}
if (current_user_can('acadlix_show_setting')) {
$admin_bar->add_menu([
'id' => 'acadlix-settings',
'parent' => 'acadlix-menu',
'title' => 'Settings',
'href' => admin_url('admin.php?page=acadlix_setting'),
]);
}
}
}
public function filter_avatar($url, $id_or_email, $args)
{
$finder = false;
$is_id = is_numeric($id_or_email);
if ($is_id) {
$finder = absint($id_or_email);
} elseif (is_string($id_or_email)) {
$finder = $id_or_email;
} elseif ($id_or_email instanceof \WP_User) {
// User Object.
$finder = $id_or_email->ID;
} elseif ($id_or_email instanceof \WP_Post) {
// Post Object.
$finder = (int) $id_or_email->post_author;
} elseif ($id_or_email instanceof \WP_Comment) {
return $url;
}
if (!$finder) {
return $url;
}
$user = get_user_by($is_id ? 'ID' : 'email', $finder);
if ($user) {
$profile_photo = get_user_meta($user->ID, '_acadlix_profile_photo', true);
$attachment_id = acadlix()->model()->wpPosts()
->select('ID')
->where('guid', $profile_photo)
->where('post_type', 'attachment')
->first();
if ($attachment_id) {
$size = isset($args['size']) ? $args['size'] : 'thumbnail';
$url = wp_get_attachment_image_url($attachment_id->ID, $size);
}
}
return $url;
}
public function show_admin_bar_for_roles($show)
{
$hide = acadlix()->helper()->acadlix_get_option('acadlix_disable_admin_toolbar') == 'yes';
if (!is_admin() && $hide && !current_user_can('manage_options')) {
return false;
}
return $show;
}
protected function acadlix_cleanup_user_data_current_site($user_id)
{
if ($this->acadlix_table_exists('course_enrollments')) {
acadlix()->model()->courseEnrollment()->where('user_id', $user_id)->delete();
}
if ($this->acadlix_table_exists('user_activity_meta')) {
acadlix()->model()->userActivityMeta()->where('user_id', $user_id)->delete();
}
if ($this->acadlix_table_exists('statistic_ref')) {
acadlix()->model()->statisticRef()->where('user_id', $user_id)->delete();
}
if ($this->acadlix_table_exists('toplist')) {
acadlix()->model()->toplist()->where('user_id', $user_id)->delete();
}
if ($this->acadlix_table_exists('course_cart')) {
acadlix()->model()->courseCart()->where('user_id', $user_id)->delete();
}
}
public function acadlix_cleanup_user_data($user_id, $blog_id = 0)
{
$user_id = absint($user_id);
$blog_id = absint($blog_id);
if ($user_id <= 0) {
return;
}
if ($blog_id > 0 && function_exists('switch_to_blog')) {
switch_to_blog($blog_id);
$this->acadlix_cleanup_user_data_current_site($user_id);
restore_current_blog();
return;
}
$this->acadlix_cleanup_user_data_current_site($user_id);
}
public function acadlix_cleanup_user_data_network_wide($user_id)
{
$user_id = absint($user_id);
if ($user_id <= 0) {
return;
}
if (is_multisite() && function_exists('get_sites') && function_exists('switch_to_blog')) {
$site_ids = get_sites([
'fields' => 'ids',
]);
foreach ($site_ids as $site_id) {
if (!$this->is_acadlix_active_on_blog((int) $site_id)) {
continue;
}
switch_to_blog((int) $site_id);
$this->acadlix_cleanup_user_data_current_site($user_id);
restore_current_blog();
}
return;
}
$this->acadlix_cleanup_user_data_current_site($user_id);
}
protected function is_acadlix_active_on_blog($blog_id)
{
$blog_id = absint($blog_id);
if ($blog_id <= 0 || !is_multisite()) {
return true;
}
if (function_exists('is_plugin_active_for_network') && is_plugin_active_for_network(ACADLIX_PLUGIN_BASENAME)) {
return true;
}
if (!function_exists('get_blog_option')) {
return false;
}
$active_plugins = (array) get_blog_option($blog_id, 'active_plugins', []);
return in_array(ACADLIX_PLUGIN_BASENAME, $active_plugins, true);
}
protected function acadlix_table_exists($table_name)
{
$table_name = sanitize_key($table_name);
if ($table_name === '') {
return false;
}
return Manager::schema()->hasTable(acadlix()->helper()->acadlix_table_prefix($table_name));
}
public static function instance()
{
if (is_null(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
}