You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

180 lines
5.7 KiB
PHP

<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
class AWSM_Job_Openings_Uninstall {
public static function uninstall() {
self::clear_cron_jobs();
self::remove_terms();
self::remove_posts();
self::remove_role_caps();
self::delete_options();
}
private static function get_all_options() {
$options = array(
'awsm_jobs_plugin_version',
'awsm_current_general_subtab',
'awsm_select_page_listing',
'awsm_job_company_name',
'awsm_hr_email_address',
'awsm_jobs_timezone',
'awsm_permalink_slug',
'awsm_jobs_remove_permalink_front_base',
'awsm_default_msg',
'awsm_jobs_email_digest',
'awsm_jobs_disable_archive_page',
'awsm_jobs_enable_featured_image',
'awsm_hide_uploaded_files',
'awsm_delete_data_on_uninstall',
'awsm_current_appearance_subtab',
'awsm_jobs_listing_view',
'awsm_jobs_list_per_page',
'awsm_jobs_number_of_columns',
'awsm_enable_job_search',
'awsm_enable_job_filter_listing',
'awsm_jobs_listing_available_filters',
'awsm_jobs_listing_specs',
'awsm_jobs_details_page_template',
'awsm_jobs_details_page_layout',
'awsm_jobs_expired_jobs_listings',
'awsm_jobs_specification_job_detail',
'awsm_jobs_show_specs_icon',
'awsm_jobs_make_specs_clickable',
'awsm_jobs_specs_position',
'awsm_jobs_expired_jobs_content_details',
'awsm_jobs_expired_jobs_block_search',
'awsm_jobs_hide_expiry_date',
'awsm_current_specifications_subtab',
'awsm_jobs_filter',
'awsm_jobs_remove_filters',
'awsm_current_form_subtab',
'awsm_jobs_admin_upload_file_ext',
'awsm_enable_gdpr_cb',
'awsm_gdpr_cb_text',
'awsm_jobs_enable_recaptcha',
'awsm_jobs_recaptcha_site_key',
'awsm_jobs_recaptcha_secret_key',
'awsm_current_notification_subtab',
'awsm_jobs_applicant_notification',
'awsm_jobs_from_email_notification',
'awsm_jobs_reply_to_notification',
'awsm_jobs_hr_notification',
'awsm_jobs_acknowledgement',
'awsm_jobs_notification_subject',
'awsm_jobs_notification_content',
'awsm_jobs_notification_mail_template',
'awsm_jobs_admin_to_notification',
'awsm_jobs_enable_admin_notification',
'awsm_jobs_admin_from_email_notification',
'awsm_jobs_admin_reply_to_notification',
'awsm_jobs_admin_hr_notification',
'awsm_jobs_admin_notification_subject',
'awsm_jobs_admin_notification_content',
'awsm_jobs_notification_admin_mail_template',
'awsm_jobs_notification_customizer',
'awsm_jobs_default_listing_page_id',
'awsm_jobs_insert_default_specs_terms',
'awsm_register_default_settings',
'awsm_gdpr_policies',
'awsm_plugin_rating_job_count',
'awsm_plugin_rating_application_count',
'awsm_jobs_plugin_rating',
);
return $options;
}
private static function get_custom_caps() {
$custom_caps = array(
'edit_jobs',
'delete_jobs',
'edit_applications',
'delete_applications',
'edit_published_jobs',
'delete_published_jobs',
'publish_jobs',
'edit_published_applications',
'delete_published_applications',
'publish_applications',
'edit_others_jobs',
'read_private_jobs',
'delete_private_jobs',
'delete_others_jobs',
'edit_private_jobs',
'edit_others_applications',
'read_private_applications',
'delete_private_applications',
'delete_others_applications',
'edit_private_applications',
'manage_awsm_jobs',
);
return $custom_caps;
}
private static function clear_cron_jobs() {
wp_clear_scheduled_hook( 'awsm_check_for_expired_jobs' );
wp_clear_scheduled_hook( 'awsm_jobs_email_digest' );
}
private static function remove_terms() {
global $wpdb;
$filters = get_option( 'awsm_jobs_filter' );
if ( ! empty( $filters ) ) {
foreach ( $filters as $filter ) {
$taxonomy = sanitize_text_field( $filter['taxonomy'] );
$terms = $wpdb->get_results( $wpdb->prepare( "SELECT t.term_id, tt.term_taxonomy_id FROM {$wpdb->terms} t INNER JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ( %s )", $taxonomy ) );
if ( ! empty( $terms ) ) {
foreach ( $terms as $term ) {
$wpdb->delete( $wpdb->term_taxonomy, array( 'term_taxonomy_id' => $term->term_taxonomy_id ), array( '%d' ) );
$wpdb->delete( $wpdb->term_relationships, array( 'term_taxonomy_id' => $term->term_taxonomy_id ), array( '%d' ) );
$wpdb->delete( $wpdb->terms, array( 'term_id' => $term->term_id ), array( '%d' ) );
}
}
$wpdb->delete( $wpdb->term_taxonomy, array( 'taxonomy' => $taxonomy ) );
}
}
}
private static function remove_attachments() {
global $wpdb;
$attachments = $wpdb->get_results( "SELECT posts.ID FROM {$wpdb->posts} posts INNER JOIN {$wpdb->posts} parent ON posts.post_parent = parent.ID WHERE posts.post_type = 'attachment' AND parent.post_type = 'awsm_job_application'" );
if ( ! empty( $attachments ) ) {
foreach ( $attachments as $attachment ) {
wp_delete_attachment( $attachment->ID, true );
}
}
}
private static function remove_posts() {
global $wpdb;
self::remove_attachments();
$wpdb->query( "DELETE FROM {$wpdb->posts} WHERE post_type IN( 'awsm_job_openings', 'awsm_job_application' );" );
$wpdb->query( "DELETE meta FROM {$wpdb->postmeta} meta LEFT JOIN {$wpdb->posts} posts ON posts.ID = meta.post_id WHERE posts.ID IS NULL;" );
}
private static function remove_role_caps() {
global $wp_roles;
$caps = self::get_custom_caps();
$role_slugs = array_keys( $wp_roles->roles );
foreach ( $role_slugs as $slug ) {
$role = get_role( $slug );
foreach ( $caps as $cap ) {
$role->remove_cap( $cap );
}
}
// Now, remove the custom role
if ( get_role( 'hr' ) ) {
remove_role( 'hr' );
}
}
private static function delete_options() {
$options = self::get_all_options();
foreach ( $options as $option ) {
delete_option( $option );
}
}
}