122 lines
4.7 KiB
PHP
122 lines
4.7 KiB
PHP
<?php
|
|
|
|
/** cron hooking function
|
|
* deletes users that were prepared last week
|
|
* prepares users for deletion next week
|
|
* deletes deletion info that is older than DELETION_DELETION_DELAY (months)
|
|
*/
|
|
function sntg_aud_cron_job(){
|
|
delete_prepared_users();
|
|
prepare_users_for_deletion();
|
|
delete_deletion_entries();
|
|
}
|
|
|
|
/** delete users that were prepared the last time the job ran */
|
|
function delete_prepared_users(){
|
|
$users = get_users( array( 'fields' => 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);
|
|
}
|
|
} |