PDA

View Full Version : Small request, Newest member display on forum home ignores banned & inactive users.


voogru
08-02-2004, 06:59 AM
Hello,

I have a small request, which should be simple.

For the past 5-6 months I've been having a user constantly register on my forums with fake emails & insulting user names with no intent to use his registrations, he just wants to see his name which is supposed to offend me, calling me derogatory names on the “Welcome our newest member” area.

I don’t want to remove the user (collecting them for an abuse report and want to preserve the data). And an IP ban is not feasible since I have members that are in his area, plus the IP range I'd have to ban is huge.

But I don’t want his fake registrations showing up on my forum home on the "Welcome our newest member, <insert insulting name here>"

So what I want is the "Welcome our newest member" thing, to ignore members that are banned, or haven’t been authorized yet by email.

Any takers?

Thanks.

Michael Morris
08-02-2004, 07:45 AM
Ok, figuring out the newest member is the last thing index.php does before spitting out the HTML. Here's the code.


// get total members and newest member from template
$userstats = unserialize($datastore['userstats']);
$numbermembers = vb_number_format($userstats['numbermembers']);
$newusername = $userstats['newusername'];
$newuserid = $userstats['newuserid'];


Now, if you can run newuserid through the is_member_of function you could prune out new users who's registration is pending confirmation. However, I don't know how you would go back through the list of users to find the most recent confirmed member.

nexialys
08-02-2004, 10:13 AM
the best thing would be to forget him... one day, this gnome will stop harassing you because he will not have the attention he ask for...

and yes, filtering the Newset Member can be good... i always thought it was already doing so... i may take a look later, if nobody do it.

CarCdr
08-02-2004, 01:07 PM
I had to rework that area myself just after we installed vB. Understand that we run a corporate site where we might add only one user per week (after the initial load). Anyway, the main thing we wanted was to issue the welcome to the last N users rather than simple the last user to be registered. Here is what that looks like in index.php: // get newest members
$homepage_ShowNewMembersMaxCount = 3; // show this many new members
$homepage_ShowNewMembersDaysCutoff = 7; // no longer new after this many days
$homepage_ShowNewMembersExclGroups = '3,4'; // never show users from these groups

$dateCutoffTmp = TIMENOW - ($homepage_ShowNewMembersDaysCutoff * 86400);
$membersNew = $DB_site->query("
SELECT username
FROM " . TABLE_PREFIX . "user
WHERE joindate > $dateCutoffTmp
AND usergroupid NOT IN ($homepage_ShowNewMembersExclGroups)
ORDER BY joindate DESC
LIMIT $homepage_ShowNewMembersMaxCount");

// If we did not get any, $newusernames will be empty and HTML template won't show it
// because '<if condition="$newusernames">' will be false.
$newusernames = '';
while ($newMember = $DB_site->fetch_array($membersNew)) {
$newusernames .= (empty($newusernames)? '': ', ') . $newMember['username'];
}
$DB_site->free_result($membersNew); This approach requires modifying the FORUMHOME template.

To adapt it to your simpler needs, try this code:

Find these lines in index.php:$newusername = $userstats['newusername'];
$newuserid = $userstats['newuserid'];
Comment-out these lines (begin line with //) and replace with: $newuser = $DB_site->query_first("SELECT userid, username
FROM " . TABLE_PREFIX . "user
WHERE usergroupid NOT IN (3,4)
ORDER BY userid DESC
LIMIT 1");
$newuserid = $newuser['userid']; // set template variables
$newusername = $newuser['username'];Just change the '(3,4)' to the list of usergroups to ignore.

voogru
08-02-2004, 04:29 PM
I had to rework that area myself just after we installed vB. Understand that we run a corporate site where we might add only one user per week (after the initial load). Anyway, the main thing we wanted was to issue the welcome to the last N users rather than simple the last user to be registered. Here is what that looks like in index.php: // get newest members
$homepage_ShowNewMembersMaxCount = 3; // show this many new members
$homepage_ShowNewMembersDaysCutoff = 7; // no longer new after this many days
$homepage_ShowNewMembersExclGroups = '3,4'; // never show users from these groups

$dateCutoffTmp = TIMENOW - ($homepage_ShowNewMembersDaysCutoff * 86400);
$membersNew = $DB_site->query("
SELECT username
FROM " . TABLE_PREFIX . "user
WHERE joindate > $dateCutoffTmp
AND usergroupid NOT IN ($homepage_ShowNewMembersExclGroups)
ORDER BY joindate DESC
LIMIT $homepage_ShowNewMembersMaxCount");

// If we did not get any, $newusernames will be empty and HTML template won't show it
// because '<if condition="$newusernames">' will be false.
$newusernames = '';
while ($newMember = $DB_site->fetch_array($membersNew)) {
$newusernames .= (empty($newusernames)? '': ', ') . $newMember['username'];
}
$DB_site->free_result($membersNew); This approach requires modifying the FORUMHOME template.

To adapt it to your simpler needs, try this code:

Find these lines in index.php:$newusername = $userstats['newusername'];
$newuserid = $userstats['newuserid'];
Comment-out these lines (begin line with //) and replace with: $newuser = $DB_site->query_first("SELECT userid, username
FROM " . TABLE_PREFIX . "user
WHERE usergroupid NOT IN (3,4)
ORDER BY userid DESC
LIMIT 1");
$newuserid = $newuser['userid']; // set template variables
$newusername = $newuser['username'];Just change the '(3,4)' to the list of usergroups to ignore.


Works like a charm, Thanks!