211 lines
5.9 KiB
PHP
211 lines
5.9 KiB
PHP
<?php
|
|
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
|
|
exit();
|
|
}
|
|
|
|
//If the user is preserving the settings then don't delete them
|
|
$options = get_option( 'sby_settings' );
|
|
$sby_preserve_settings = isset( $options[ 'preserve_settings' ] ) ? $options[ 'preserve_settings' ] : false;
|
|
|
|
// allow the user to preserve their settings in case they are upgrading
|
|
if ( ! $sby_preserve_settings ) {
|
|
|
|
// clear cron jobs
|
|
wp_clear_scheduled_hook( 'sby_cron_job' );
|
|
wp_clear_scheduled_hook( 'sby_feed_update' );
|
|
|
|
// clean up options from the database
|
|
delete_option( 'sby_license_key' );
|
|
delete_option( 'sby_license_data' );
|
|
delete_option( 'sby_license_status' );
|
|
delete_option( 'sby_settings' );
|
|
delete_option( 'sby_cron_report' );
|
|
delete_option( 'sby_errors' );
|
|
delete_option( 'sby_ajax_status' );
|
|
delete_option( 'sby_db_version' );
|
|
delete_option( 'sby_statuses' );
|
|
delete_option( 'sby_channel_ids' );
|
|
delete_option( 'sby_check_license_api_when_expires' );
|
|
delete_option( 'sby_check_license_api_post_grace_period' );
|
|
|
|
delete_option( 'sby_rating_notice' );
|
|
delete_option( 'sby_notifications' );
|
|
delete_option( 'sby_newuser_notifications' );
|
|
delete_option( 'sby_usage_tracking_config' );
|
|
// delete role
|
|
global $wp_roles;
|
|
$wp_roles->remove_cap( 'administrator', 'manage_youtube_feed_options' );
|
|
|
|
// delete all custom post type data
|
|
global $wpdb;
|
|
|
|
$youtube_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_type = 'sby_videos';" );
|
|
|
|
$id_string = implode( ', ', $youtube_ids );
|
|
if ( ! empty( $id_string ) ) {
|
|
$wpdb->query( "DELETE FROM $wpdb->postmeta WHERE post_id IN ($id_string);" );
|
|
$wpdb->query( "DELETE FROM $wpdb->posts WHERE post_type = 'sby_videos';" );
|
|
}
|
|
|
|
// delete the onboarding data
|
|
$wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE meta_key LIKE `%sby_onboarding%`") );
|
|
|
|
// delete transients and backup data
|
|
$table_name = $wpdb->prefix . "options";
|
|
$wpdb->query( "
|
|
DELETE
|
|
FROM $table_name
|
|
WHERE `option_name` LIKE ('%\!sby\_%')
|
|
" );
|
|
$wpdb->query( "
|
|
DELETE
|
|
FROM $table_name
|
|
WHERE `option_name` LIKE ('%\_transient\_sby\_%')
|
|
" );
|
|
$wpdb->query( "
|
|
DELETE
|
|
FROM $table_name
|
|
WHERE `option_name` LIKE ('%\_transient\_timeout\_sby\_%')
|
|
" );
|
|
$wpdb->query( "
|
|
DELETE
|
|
FROM $table_name
|
|
WHERE `option_name` LIKE ('%\_transient\_&sby\_%')
|
|
" );
|
|
$wpdb->query( "
|
|
DELETE
|
|
FROM $table_name
|
|
WHERE `option_name` LIKE ('%\_transient\_timeout\_&sby\_%')
|
|
" );
|
|
$wpdb->query( "
|
|
DELETE
|
|
FROM $table_name
|
|
WHERE `option_name` LIKE ('%\_transient\_\$sby\_%')
|
|
" );
|
|
$wpdb->query( "
|
|
DELETE
|
|
FROM $table_name
|
|
WHERE `option_name` LIKE ('%\_transient\_timeout\_\$sby\_%')
|
|
" );
|
|
$wpdb->query( "
|
|
DELETE
|
|
FROM $table_name
|
|
WHERE `option_name` LIKE '%~sby%'
|
|
" );
|
|
|
|
// Delete sby_onboarding data from usermeta table
|
|
$usermeta_table_name = $wpdb->prefix . "usermeta";
|
|
$wpdb->query( "
|
|
DELETE
|
|
FROM $usermeta_table_name
|
|
WHERE `meta_key` LIKE '%sby_onboarding%'
|
|
" );
|
|
|
|
//delete image resizing related things
|
|
$posts_table_name = $wpdb->prefix . 'sby_items';
|
|
$feeds_posts_table_name = $wpdb->prefix . 'sby_items_feeds';
|
|
$locator_table_name = $wpdb->prefix . 'sby_feed_locator';
|
|
$feed_caches_table_name = $wpdb->prefix . 'sby_feed_caches';
|
|
$feeds_table_name = $wpdb->prefix . 'sby_feeds';
|
|
|
|
$upload = wp_upload_dir();
|
|
$wpdb->query( "DROP TABLE IF EXISTS $posts_table_name" );
|
|
$wpdb->query( "DROP TABLE IF EXISTS $feeds_posts_table_name" );
|
|
$wpdb->query( "DROP TABLE IF EXISTS $locator_table_name" );
|
|
$wpdb->query( "DROP TABLE IF EXISTS $feed_caches_table_name" );
|
|
$wpdb->query( "DROP TABLE IF EXISTS $feeds_table_name" );
|
|
|
|
$image_files = glob( trailingslashit( $upload['basedir'] ) . trailingslashit( 'sby-local-media' ) . '*' ); // get all file names
|
|
foreach ( $image_files as $file ) { // iterate files
|
|
if ( is_file( $file ) ) {
|
|
unlink( $file );
|
|
} // delete file
|
|
}
|
|
|
|
global $wp_filesystem;
|
|
|
|
$wp_filesystem->delete( trailingslashit( $upload['basedir'] ) . trailingslashit( 'sby-local-media' ) , true );
|
|
|
|
$pto = get_post_type_object( 'sby_videos' );
|
|
|
|
$admin_caps = array(
|
|
'edit_sby_videos',
|
|
'read_sby_videos',
|
|
'delete_sby_videos',
|
|
'edit_sby_videos',
|
|
'edit_others_sby_videos',
|
|
'publish_sby_videos',
|
|
'read_private_sby_videos',
|
|
'read',
|
|
'delete_sby_videos',
|
|
'delete_private_sby_videos',
|
|
'delete_published_sby_videos',
|
|
'delete_others_sby_videos',
|
|
'edit_private_sby_videos',
|
|
'edit_published_sby_videos',
|
|
);
|
|
$author_caps = array(
|
|
'edit_sby_videos',
|
|
'read_sby_videos',
|
|
'delete_sby_videos',
|
|
'edit_sby_videos',
|
|
'publish_sby_videos',
|
|
'read',
|
|
'delete_sby_videos',
|
|
'delete_published_sby_videos',
|
|
'edit_published_sby_videos',
|
|
);
|
|
|
|
if ( ! empty( $pto ) ) {
|
|
foreach ( array( 'administrator', 'editor' ) as $role_id ) {
|
|
foreach ( $admin_caps as $cap ) {
|
|
$wp_roles->remove_cap( $role_id, $cap );
|
|
}
|
|
}
|
|
foreach ( $author_caps as $cap ) {
|
|
$wp_roles->remove_cap( 'author', $cap );
|
|
}
|
|
}
|
|
|
|
$admin_caps = array(
|
|
'edit_sby_video',
|
|
'read_sby_video',
|
|
'delete_sby_video',
|
|
'edit_sby_video',
|
|
'edit_others_sby_video',
|
|
'publish_sby_video',
|
|
'read_private_sby_video',
|
|
'read',
|
|
'delete_sby_video',
|
|
'delete_private_sby_video',
|
|
'delete_published_sby_video',
|
|
'delete_others_sby_video',
|
|
'edit_private_sby_video',
|
|
'edit_published_sby_video',
|
|
);
|
|
$author_caps = array(
|
|
'edit_sby_video',
|
|
'read_sby_video',
|
|
'delete_sby_video',
|
|
'edit_sby_video',
|
|
'publish_sby_video',
|
|
'read',
|
|
'delete_sby_video',
|
|
'delete_published_sby_video',
|
|
'edit_published_sby_video',
|
|
);
|
|
|
|
if ( ! empty( $pto ) ) {
|
|
foreach ( array( 'administrator', 'editor' ) as $role_id ) {
|
|
foreach ( $admin_caps as $cap ) {
|
|
$wp_roles->remove_cap( $role_id, $cap );
|
|
}
|
|
}
|
|
foreach ( $author_caps as $cap ) {
|
|
$wp_roles->remove_cap( 'author', $cap );
|
|
}
|
|
}
|
|
}
|
|
|
|
|