commit 06480007e96d175543d16ccb01de164a79a909a0 Author: Runa Date: Sun Aug 16 20:11:06 2020 +0200 first commit - seems to work diff --git a/sntg-automatic-user-deletion.php b/sntg-automatic-user-deletion.php new file mode 100644 index 0000000..1aa05d4 --- /dev/null +++ b/sntg-automatic-user-deletion.php @@ -0,0 +1,67 @@ + 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); + } +} \ No newline at end of file diff --git a/src/login_tracking.php b/src/login_tracking.php new file mode 100644 index 0000000..5218630 --- /dev/null +++ b/src/login_tracking.php @@ -0,0 +1,11 @@ + + +

Hallo login ?>

+ +

Du hast dein Nutzerkonto auf seit ca. einem Jahr nicht mehr genutzt. Aus Datenschutzgründen wird es daher in einer Woche gelöscht, falls du dich bis dahin nicht einloggst.

+ +

Liebe Grüße,
- \ No newline at end of file