array( 'ID' ) ) ); foreach($users as $user){ $usermeta = get_user_meta ( $user->ID, 'sntg_user_to_be_deleted'); if (sizeof($usermeta) == 1){ write_log("user " . $user->ID . " has to be deleted: " .$usermeta[0]); delete_user($user->ID); } else { echo var_dump($usermeta); } } } /** add db entries for non-admin users (wp_user_level < 10) * that have not been logged in for longer than USER_DELETION_DELAY (->constants.php) * */ function prepare_users_for_deletion(){ //write_log("prepare users for deletion"); $users = get_users( array( 'fields' => array( 'ID' ) ) ); foreach($users as $user){ $wp_user_level = get_user_meta ( $user->ID, 'wp_user_level', true); $user_object = get_user_by('id', $user->ID); //only delete non admins if (($wp_user_level < 10) && ($user_object->user_login != DELETED_USER_NAME )){ $last_login = get_user_meta ($user->ID, 'sntg_last_login', true); //if no entry exists, create one with date now if ($last_login == ''){ update_user_meta($user->ID, 'sntg_last_login', time(), true); } //otherwise check if it was more then USER_DELETION_DELAY (one year) ago elseif ( ( (time() - $last_login) / SEC_TO_MONTH) > USER_DELETION_DELAY){ update_user_meta($user->ID, 'sntg_user_to_be_deleted', time(), true); write_log("deletion mail sent: " . send_deletion_warning_mail($user->ID)); write_log($user_object->user_login . " prepared for deletion"); } } } } /** creates an db entry with info about deletion, reassigns users content to default user (DELETED_USER_NAME -> constants.php) and deletes the user */ function delete_user($old_user_ID){ $reassign_user = get_user_by('login', DELETED_USER_NAME); $reassign_user_id = $reassign_user->ID; write_log ("deleting user with id: " . $old_user_ID); create_deletion_entry($old_user_ID); require_once(ABSPATH.'wp-admin/includes/user.php'); wp_delete_user($old_user_ID, $reassign_user_id); } /** creates a post with info about deleted user */ function create_deletion_entry($user_id){ $user = get_user_by('id', $user_id); $info = "user id: " . $user_id . "; " . "email: " . $user->user_email . '; ' . "username: " . $user->user_login .";"; wp_insert_post(array( 'post_type' => 'sntg_ud_info', 'post_content' => $info, 'post_status' => 'publish' )); } /** sends an email (templates/info_mail.php) to user with subject SUBJECT (->constants.php) */ function send_deletion_warning_mail($user_id){ $user = get_user_by('id', $user_id); add_filter( 'wp_mail_content_type', function( $content_type ) { return 'text/html'; }); $subject = get_bloginfo ('name') . ': ' . SUBJECT; //set subject in constants.php ob_start(); include (ABSPATH . 'wp-content/plugins/sntg-automatic-user-deletion/templates/info_mail.php'); $message = ob_get_clean(); wp_mail($user->user_email, $subject, $message); } /** after DELETION_DELETION_DELAY, most of the info about deleted users (eg email address) * has to be deleted as well (DSGVO), but the info that a user was deleted has to be stored*/ function delete_deletion_entries(){ $delay_years = intdiv( DELETION_DELETION_DELAY, 12 ); $delay_months = DELETION_DELETION_DELAY % 12; $entries_to_delete = get_posts(array( 'post_type' => 'sntg_ud_info', 'numberposts' => '-1', 'date_query' => array( array( 'before' => array( 'year' => date('Y') - $delay_years, 'month' => date('n') - $delay_months, ), 'inclusive' => true, ) ), )); foreach ($entries_to_delete as $entry){ $info = "deleted deletion info. post_id: " . $entry->ID . "; " . explode(";", $entry->post_content)[0]; write_log($info); wp_insert_post(array( 'post_type' => 'sntg_ud_deletion', 'post_content' => $info, 'post_status' => 'publish' )); wp_delete_post ($entry->ID); } }