Advertisement:

Author Topic: Enhancements to purge inactive members  (Read 61667 times)

Offline SMiFFER

  • Jr. Member
  • **
  • Posts: 390
Re: Enhancements to purge inactive members
« Reply #120 on: September 11, 2018, 10:05:44 AM »
No, Nirose, you are wrong there. It does NOT do this well.

What it does is "send emails to inactive users and deletes them if they haven't logged in on the forum."
and that is clearly NOT what I requested. Would you please read my post above yours.

And you also gave reasons yourself in addition.
QUOTE OF Aleksi "Lex" Kilpinen: "That version is old enough to go to school itself."

Offline aegersz

  • SMF Hero
  • ******
  • Posts: 1,476
  • Gender: Male
  • "mods" junkie
    • dopetalk
Re: Enhancements to purge inactive members
« Reply #121 on: September 15, 2018, 03:14:48 AM »
I also had problems so i wrote two php batch scripts that will send emails.

Don't set the "do_delete" flag and if you upload it to your web root then you will, by default, get a listing of who hasn't logged in since "n" number of days and whose account has never been logged into.

It shows you their post count also.

last_online_emailer.php

Code: [Select]
<?php
// SET THESE FIRST !
$servername "localhost";
$username "dbuser";
$password "dbpass";
$dbname "smf209";
$tbpref "smf209_";
$domain "forum.site-name.org";
$days_not_logged_in 365 // only those who have not not logged for 365 days or more
$do_email 0 // enable to send emails

$connect = new mysqli($servername$username$password$dbname);
if (
$connect->connect_error) {
        die(
"Connection failed: " $connect->connect_error);
}
$sql "SELECT * FROM" " " $tbpref "members ORDER BY last_login";
//$sql = "SELECT * FROM" . " " . $tbpref . "members WHERE member_name = 'test' ORDER BY last_login";
$result $connect->query($sql);
if (
$result->num_rows 0) {
        while(
$row $result->fetch_assoc()) {
                if (!empty(
$row["last_login"])) {
                        
$dateSin =  $row["last_login"];
                        
$current_date date("U"/* to have it in microseconds */;
                        
$your_month date("m"$dateSin);
                        
$your_day =  date("d"$dateSin);
                        
$your_year =  date("Y"$dateSin);
                        
$selected_date_stamp mktime(0,0,0,$your_month,$your_day,$your_year);
                        
$selected_date date("U",$selected_date_stamp);
                        
$difference round (($current_date $selected_date)/(3600*24));
if ($difference >= $days_not_logged_in) {
echo $row["member_name"] . " " $row["email_address"] . " " "posts=" $row["posts"] . " ";
echo "Last logged in" " " $difference " " "days ago" PHP_EOL;
        $to_member =  $row["member_name"];
        $from_name "SMF Administrator";
                        
$from_email "smfadmin@" $domain;
                        
$headers "From: $from_name <$from_email>";
                        
$body "Dear $to_member, \n
We miss you as you have not logged in to https://
$domain for over $difference days. \n
Please come and visit us soon! \n
Regards, \n
Server Admin"
;
         $subject "Regarding your last login";
         $to_email $row["email_address"];
         if ($do_email) {
         if (mail($to_email$subject$body$headers)) {
                 echo "email sent" " ";
       } else {
         echo "email failed" " ";
       }

                        }
                }
}
} else {
        echo 
"0 results";
}
$connect->close();
?>

never_online_emailer.php

Code: [Select]
<?php
// SET THESE FIRST !
$servername "localhost";
$username "dbuser";
$password "dbpass";
$dbname "smf209";
$tbpref "smf209_";
$domain "forum.site-name.org";
$days_since_registered 30;
$do_email 0 // enable to send emails
$do_delete 0// enable to remove members forcefully (NOT ADVISABLE as "Forum > Maintenance > Routine" repairs are required afterwards)

$connect = new mysqli($servername$username$password$dbname);
if (
$connect->connect_error) {
        die(
"Connection failed: " $connect->connect_error);
}
$sql "SELECT * FROM" " " $tbpref "members WHERE last_login = '0'";
//$sql = "SELECT * FROM" . " " . $tbpref . "members WHERE member_name = 'testr'";
$result $connect->query($sql);
if (
$result->num_rows 0) {
        while(
$row $result->fetch_assoc()) {
                
$datereg $row["date_registered"];
                
$current_date date("U"/* to have it in microseconds */;
                
$your_month date("m"$datereg);
                
$your_day date("d"$datereg);
                
$your_year =  date("Y"$datereg);
                
$selected_date_stamp mktime(0,0,0,$your_month,$your_day,$your_year);
                
$selected_date date("U",$selected_date_stamp);
                
$difference round (($current_date $selected_date)/(3600*24));
                if (
$difference >= $days_since_registered) {
                        echo 
$row["member_name"] . " " $row["email_address"] . " " "registered" " " $difference " " "days ago" PHP_EOL;
                        
$to_member =  $row["member_name"];
                        
$from_name "SMF Administrator";
                        
$from_email "smfadmin@" $domain;
                        
$headers "From: $from_name <$from_email>";
                        
$body "Dear $to_member, \n
You have never logged in to https://
$domain since you joined us so I will be removing you soon unless you do so. \n
I have already activated your account but both that email and your activation mail probably went to your spam folder. \n
If you have any questions or need any help on this matter then just reply to me. \n
Regards, \n
Server Admin"
;
                        
$subject "Regarding your inactive membership";
                        
$to_email $row["email_address"];
                        if (
$do_email) {
                                if (
mail($to_email$subject$body$headers)) {
                                        echo 
"email sent" " ";
                                } else {
                                        echo 
"email failed" " ";
                                }
                        }
                        if (
$do_delete) {
                                
$sql2 "DELETE FROM" " " $tbpref "members WHERE member_name = '$to_member' ";
                                if (
$connect->query($sql2) === TRUE) {
                                        echo 
"$to_member deleted successfully";
                                } else {
                                        echo 
"Error deleting record: " $connect->error;
                                }
                        }
                }
        }
} else {
        echo 
"0 results";
}
$connect->close();
?>
« Last Edit: September 15, 2018, 03:27:11 AM by aegersz »
The configuration of my Linux VPS (SMF 2.0 with 145 mods & some assorted manual tweaks) can be found here and notes on my mods can be found here (warning: those links will take you to a drug related forum)

Offline davidhs

  • Sophist Member
  • *****
  • Posts: 1,049
  • Gender: Male
Re: Enhancements to purge inactive members
« Reply #122 on: April 12, 2019, 12:09:43 PM »
New version:
Code: [Select]
1.3.8   2019-04-05
------------------
! SMF 2.1.x: Use HTML 5.
+ SMF compatibility: 2.1 RC1 to RC2.
! SMF 2.1.x: Languages: Only UTF-8 languages are used.