Previous Thread
Next Thread
Print Thread
Rate Thread
Joined: Jun 2002
Posts: 111
Member
Member
Offline
Joined: Jun 2002
Posts: 111
Just been testing it with 6.5.0

And it works, all u need is to find the new rewritten thinks fromt he text file:

Code
******************************************************************************
******************************************************************************
* Mod Name: Advanced IP Logging *
******************************************************************************
* Description: Adds new IP logging feature to your board. *
* It also adds Recent Activities section with date/time/IP *
* to member profiles. *
* Adds "View User IP History" link to users profiles *
* (admins only, Control Panel). *
* Adds a new search option to the Extended Search Options in *
* the UBB Control Panel (User IP History). *
******************************************************************************
* Updates: v1.2 - *
* Minor code changes and a bug fix. *
* *
* v1.2.1 - *
* Code cleanup. *
* *
* v1.2.2 - *
* MultiHack support. Ported to v6.2 and v6.3 series. *
* "N/A" displayed instead of nothing if no IP has been *
* recorded for someone (profile only). *
* *
* v1.2.3 - *
* More code cleanup. IP recorded on initial login (right *
* after registration). *
* *
* v2.0 - *
* New features and changes include: *
* IPs are only logged if they are "unique". That is, if *
* haven't been logged for that user before. *
* It is possible to search user IP history from the control *
* panel (View/Edit Member Records - Extended Search Options)*
* *
* v2.0.1 - *
* Bug fix: Directory created if it doesn't exist. *
* Only administrators are allowed to view the *
* "Recent Activities" part of member profiles. *
* *
* v2.0.2 - *
* Bug fix: Directory created if it doesn't exist. *
* Only administrators are allowed to view the *
* "Recent Activities" part of member profiles. *
******************************************************************************
* By: Idle *
* Email: [email protected] *
* Date: Nov 10th, 2003 *
* Version: 2.0.2 *
******************************************************************************
* Requirements: 6.5.0 Beta Release 1 or newer. *
* Compatability: 6.5.x *
* Tested On: 6.5.0 Beta Release 1 and 6.3.0.3 *
******************************************************************************
* Files Modified: ultimatebb.cgi, ubb_profile.cgi, cp.cgi, *
* ubb_registration.cgi, ubb_new_reply.cgi, *
* ubb_new_topic.cgi, cp_users.cgi *
* *
* Templates: public_display_profile.pl, cp_edit_profile.pl, *
* cp_user_search_form.pl, cp_user_search_results.pl *
* cp_new_members.pl *
* *
* New Files: ubb_lib_idle.cgi, cp_user_ips.pl *
******************************************************************************
******************************************************************************
* Disclaimer: By using this mod, the user implicitly agrees that they *
* are willingly modifying any and all files at their own *
* risk. Should any errors occur either as a direct or *
* indirect result of said modifications the user agrees not *
* to hold Infopop Corporation or any of the individuals *
* listed above accountable. *
* *
* *
* In Other Words: Please make backup copies of every file you plan to *
* modify prior to modification! *
* *
* *
* For more tips and tricks for use with the Ultimate Bulletin Board *
* please visit us at: *
* *
* https://ubbdev.com *
* *
******************************************************************************
******************************************************************************

========================================
In ultimatebb.cgi Find:
========================================
chomp($mod_q);

#6.1.0 - now forbidding login without queue approval

========================================
BELOW that paste:
========================================
#append to IP log
&RequireCode("$vars_config{CGIPath}/ubb_lib_idle.cgi");
&AppendIPLog($profile_number);

========================================
In ubb_registration.cgi Find:
========================================
$username = $user_name;

print header(
-cookie => [$cookie],
-charset => "$masterCharset",
-type => "text/html",
);

========================================
BELOW that paste:
========================================
#append to IP log
&RequireCode("$vars_config{CGIPath}/ubb_lib_idle.cgi");
&AppendIPLog($next_number);

========================================
In ubb_profile.cgi Find:
========================================
sub get_profile {
local (@user_profile, $user_public_name, $user_status, $count, $chompee, $date_registered, $reg_month, $reg_day, $reg_year, @themonths, @viewer_profile, $is_admin_mod, $u, $rating_line, $overall_rating, $admin_view_rating, %user, $personal_line, $personal_rating, $user_ratings_off, %votes, %totals, %avg, %weighted_avg, $pm_line, %pm_ignore, %pm_buddy, $total_votes, $add_2_list);


========================================
BELOW that paste:
========================================
local (@mylast, $is_admin);

========================================
In ubb_profile.cgi Find:
========================================
# viewing your own record.. if so, can't rate yourself

========================================
ADD above:
========================================
if ($viewer_profile[8] eq 'Administrator') {
$is_admin = 'true';
} else {
$is_admin = 'false';
}

========================================
In ubb_profile.cgi Find:
========================================

} # end pm check


if ($rating_line eq '') { $rating_line = ' '; }

========================================
BELOW that paste:
========================================

# retrieve last login stuff
&RequireCode("$vars_config{CGIPath}/ubb_lib_idle.cgi");
&GetLastLoginInfo("$in{u}");

========================================
In cp.cgi Find:
========================================
if (($ubb eq 'user_posts') && ($status eq 'Administrator')) {
&RequireCode("$vars_config{CGIPath}/cp_users.cgi");
&recent_user_posts_for_admin;
exit(0);
} #end user_settings

========================================
BELOW that paste:
========================================
if (($ubb eq 'user_ips') && ($status eq 'Administrator')) {
&RequireCode("$vars_config{CGIPath}/ubb_lib_idle.cgi");
&recent_user_ips_for_admin;
exit(0);
} #end user_ips

========================================
In ubb_new_reply.cgi Find:
========================================
&WriteMemberProfile($user_number, @user_profile);
# Now update the user posts file
&AppendFileAsString("$vars_config{MembersPath}/user_posts/$user_number.cgi", "$GotTime{YMDRunonDate}|$in{f}|$in{t}|$post_number|$ipaddyn");
} # end update user profile

========================================
BELOW that paste:
========================================
#append to IP log
&RequireCode("$vars_config{CGIPath}/ubb_lib_idle.cgi");
&AppendIPLog($user_number);

========================================
In ubb_new_topic.cgi Find:
========================================
&WriteMemberProfile($user_number, @user_profile);

# Now update the user posts file
&AppendFileAsString("$vars_config{MembersPath}/user_posts/$user_number.cgi", "$GotTime{YMDRunonDate}|$in{f}|$new_topic_number|000000|$ipaddyn");
} # end update user profile

========================================
BELOW that paste:
========================================
#append to IP log
&RequireCode("$vars_config{CGIPath}/ubb_lib_idle.cgi");
&AppendIPLog($user_number);

========================================
In cp_users.cgi Find:
========================================
$searchparams{'regip'} = $in{'regip'};

========================================
BELOW that paste:
========================================
$searchparams{'loggedip'} = $in{'loggedip'};

========================================
In cp_users.cgi Find:
========================================
if (($params{'canwrite'} eq "") && #if none of the extended options
($params{'privforum'} eq "") && #are selected, just go straight to the results screen
($searchparams{'posts'} eq "") && ($searchparams{'status'} eq "") &&
($searchparams{'permiss'} eq "") && ($searchparams{'lastpost'} eq "") &&
($searchparams{'regdate'} eq "") &&
($params{'bdaymath'} eq "") && ($searchparams{'regip'} eq "") &&
($searchparams{'lpostip'} eq "") && ($searchparams{'pemail'} eq "") &&
($searchparams{'nobday'} eq "") && ($searchparams{'currentposts'} !~ m/^(yes|no)$/)
)
{

$searchparams{'skipprocess'} = 1; # if $searchparams{'number'} =~ m/^d{1,}$/;
}
========================================
REPLACE with:
========================================
#if none of the extended options (other than email) are selected, just go straight to the results screen
if (($params{'canwrite'} eq "") &&
($params{'privforum'} eq "") &&
($searchparams{'posts'} eq "") && ($searchparams{'status'} eq "") &&
($searchparams{'permiss'} eq "") && ($searchparams{'lastpost'} eq "") &&
($searchparams{'dname'} eq "") && ($searchparams{'regdate'} eq "") &&
($params{'bdaymath'} eq "") && ($searchparams{'regip'} eq "") &&
($searchparams{'lpostip'} eq "") && ($searchparams{'pemail'} eq "") &&
($searchparams{'loggedip'} eq "") && ($searchparams{'pemail'} eq "") &&
($searchparams{'nobday'} eq "") && ($searchparams{'currentposts'} !~ m/^(yes|no)$/)
)
{

$searchparams{'skipprocess'} = 1; # if $searchparams{'number'} =~ m/^d{1,}$/;
}

========================================
In cp_users.cgi Find:
========================================
if ($searchparams{'pemail'} ne "") { #print "10";
next CHECKER unless exists $memberslist{$user};
my $returned = &SearchForEmail($profile[9]);
&CheckReturn($returned, $user);
}

========================================
BELOW that paste:
========================================
if ($searchparams{'loggedip'} ne "") { #print "11";
next CHECKER unless exists $memberslist{$user};
my $userips = &OpenFileAsHash("$vars_config{MembersPath}/user_ips/$user.cgi", "|");
my $returned = &SearchIPHistory($userips, $searchparams{'loggedip'});
&CheckReturn($returned, $user);
}

========================================
In cp_users.cgi Find:
========================================
sub SearchForIP {
my $field = shift;
my $what = shift;
my $match = 2;

# Don't match invalid IPs
return $match unless $field =~ m/^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/;
return $match unless $what =~ m/^[d.\]+$/;

return 1 if $field =~ m/$what/;
return $match;
}

========================================
BELOW that paste:
========================================
sub SearchIPHistory {
my $iplist = shift;
my $what = shift;
my $match = 2;

my %iplist = %$iplist;

$crap = $what; # 128.110.34.27
$crap =~ s/\//g; # 128.110.34.27

# Don't match invalid IPs
return $match unless $crap =~ m/^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/;

return 1 if exists($iplist{"$crap"});

return $match;
}

========================================
In public_display_profile.pl Find:
========================================
extra_info

========================================
ADD above:
========================================
$TBB

========================================
In public_display_profile.pl Find (same as above):
========================================
extra_info

========================================
ADD below:
========================================
if ($is_admin eq 'true') {
print <<recent_stuff;
$TBT
<tr bgcolor="$vars_style{TableColorStrip}">
<td colspan="2">
<font size="$vars_style{TextSize}" color="$vars_style{TableStripTextColor}" face="$vars_style{FontFace}">
<b>Recent Activities (Administrators Only)</b>:
</font>
</td>
</tr>

<tr bgcolor="$vars_style{AltColumnColor1}">
<td colspan="2">
<font size="$vars_style{TextSize}" face="$vars_style{FontFace}">
<b>Date/Time</b>: $mylast[1]
</font>
</td>
</tr>

<tr bgcolor="$vars_style{AltColumnColor1}">
<td colspan="2">
<font size="$vars_style{TextSize}" face="$vars_style{FontFace}">
<b>IP</b>: $mylast[0]
</font>
</td>
</tr>
recent_stuff
}

========================================
In cp_edit_profile.pl Find:
========================================
| <a href="$vars_config{CGIURL}/cp.cgi?ubb=user_posts&u=$in{u}">$vars_wordlets_cp{edit_profile_user_posts}</a>

========================================
Replace with:
========================================
| <a href="$vars_config{CGIURL}/cp.cgi?ubb=user_posts&u=$in{u}">$vars_wordlets_cp{edit_profile_user_posts}</a> | <a href="$vars_config{CGIURL}/cp.cgi?ubb=user_ips&u=$in{u}">View User IP History</a></B>

========================================

========================================
In cp_new_members.pl Find:
========================================
<td valign="bottom"><span class="autorow-description" style="font-weight: bold;">
$vars_wordlets_cp{newmembers_header_status}
</span></td>

========================================
BELOW that paste:
========================================
<td valign="bottom"><span class="autorow-description" style="font-weight: bold;">
IP History
</span></td>

========================================
In cp_new_members.pl Find:
========================================
<td class="autorow" style="border-left: 1px solid $vars_style_cp{AltBorderColor};"><span class="autorow-description">
$title
</span></td>

========================================
BELOW that paste:
========================================
<td class="autorow" style="border-left: 1px solid $vars_style_cp{AltBorderColor};"><span class="autorow-description">
<a href="$vars_config{CGIURL}/cp.cgi?ubb=user_ips&u=$un">View IP History</a>
</span></td>

========================================
In cp_user_search_form.pl Find:
========================================

<tr bgcolor="$vars_style_cp{AltColumnColorCurrent}">
<td class="autorow"><span class="autorow-title">
<label for="lpostip">$vars_wordlets_cp{memsearch_last_ip}</label></span>


<span class="autorow-description">
$vars_wordlets_cp{memsearch_last_ip_explained}
</span></td>
<td class="autorow"><span class="autorow-options">
<input type="text" size="15" maxlength="15" id="lpostip" name="lpostip" />
</span></td></tr>

========================================
BELOW that paste:
========================================
~; &AlternateColors; print qq~

<tr bgcolor="$vars_style_cp{AltColumnColorCurrent}">
<td class="autorow"><span class="autorow-title">
<label for="lpostip"><b>User IP Histories</b></label></span>


<span class="autorow-description">
This will search all logged IP addresses. This is an <b>exact</b> IP match, so you will need to supply
a complete and valid IP address for accurate results (<b>127.0.0.1</b>, but not <b>127.0</b>).
</span></td>
<td class="autorow"><span class="autorow-options">
<input type="text" size="15" maxlength="15" id="lpostip" name="lpostip" />
</span></td></tr>

========================================
In cp_user_search_results.pl Find:
========================================
<td valign="bottom" class="secondheaderrow" style="border-left: 1px solid $vars_style_cp{AltBorderColor};"><span class="autorow-options">
$vars_wordlets_cp{memsearch_results_header_stauts}
</span></td>

========================================
BELOW that paste:
========================================
<td valign="bottom" class="secondheaderrow" style="border-left: 1px solid $vars_style_cp{AltBorderColor};"><span class="autorow-options">
IP History
</span></td>

========================================
In cp_user_search_results.pl Find:
========================================
<td class="autorow" style="border-left: 1px solid $vars_style_cp{AltBorderColor};"><span class="autorow-description">
$title

$user_profile[31]
</span></td>

========================================
BELOW that paste:
========================================
<td class="autorow" style="border-left: 1px solid $vars_style_cp{AltBorderColor};"><span class="autorow-description">
<a href="$vars_config{CGIURL}/cp.cgi?ubb=user_ips&u=$match">View IP History</a>


</span></td>

========================================

If you're using JCTemplates, complete the next step as well.

===============================================================
In noncgi/Templates/JCTemplates/public_display_profile.pl Find:
===============================================================
extra_info

========================================
ADD above:
========================================
$TBB

===============================================================
In noncgi/Templates/JCTemplates/public_display_profile.pl Find (same as above):
===============================================================
extra_info

========================================
BELOW that paste:
========================================
if ($is_admin eq 'true') {
print <<recent_stuff
$TBT
<tr bgcolor="$vars_style{TableColorStrip}">
<td colspan="2" class="normal-font" background="$vars_config{NonCGIURL}/$vars_style{jc_title_bar}">Recent Activities (Administrators Only):</td>
<td background="$vars_config{NonCGIURL}/$vars_style{jc_title_bar}"> </td>
</tr>

<tr bgcolor="$vars_style{AltColumnColor1}">
<td colspan="2" class="normal-font" width="35%"><b>Date/Time</b>:</td>
<td colspan="2" class="normal-font" width="65%" align="left">$mylast[1]</td>
</tr>

<tr bgcolor="$vars_style{AltColumnColor1}">
<td colspan="2" class="normal-font" width="35%"><b>IP</b>:</td>
<td colspan="2" class="normal-font" width="65%" align="left">$mylast[0]</td>
</tr>
recent_stuff
}
========================================


UPLOAD all hacked files.
UPLOAD ubb_lib_idle.cgi to your CGI Directory and CHMOD to 755.
UPLOAD cp_user_ips.pl to your NonCGI/Templates directory.

Now clear your cache. Enjoy the hack! Any problems post in the hack thread:
https://ubbdev.com/ubb/ultimatebb.php?ubb=get_topic;f=31;t=000033

Sponsored Links
Entire Thread
Subject Posted By Posted
[6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 05/23/2002 11:26 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Eaglecrew 05/23/2002 11:32 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Eaglecrew 05/24/2002 12:08 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 05/24/2002 12:15 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 AllenAyres 05/24/2002 8:24 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 05/24/2002 10:07 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 DragonSoul 05/24/2002 5:59 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 05/24/2002 6:21 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 DragonSoul 05/24/2002 10:59 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 05/24/2002 11:37 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Eaglecrew 05/27/2002 3:43 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 05/27/2002 6:55 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Eaglecrew 05/27/2002 11:54 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 05/28/2002 4:30 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 ak 05/28/2002 4:31 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 05/28/2002 7:18 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Eaglecrew 05/28/2002 6:29 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 05/28/2002 9:50 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Syntax 05/28/2002 10:00 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 05/29/2002 12:02 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 ak 05/29/2002 5:38 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 05/29/2002 1:20 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Paulus Magnus 05/30/2002 3:41 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Eaglecrew 05/30/2002 5:48 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 05/30/2002 6:35 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 guvner 06/02/2002 3:25 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 06/02/2002 7:51 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 guvner 06/04/2002 2:21 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 06/04/2002 4:12 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Eaglecrew 06/05/2002 4:37 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 06/05/2002 7:03 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Eaglecrew 06/05/2002 8:26 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 06/05/2002 10:25 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Eaglecrew 06/05/2002 10:52 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 06/06/2002 12:25 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Eaglecrew 06/06/2002 1:08 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 06/06/2002 1:38 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Mr. LaRue 06/09/2002 11:02 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 06/09/2002 11:59 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Zildjin 08/20/2002 6:11 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 08/21/2002 2:26 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Zildjin 08/22/2002 12:03 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Zildjin 08/22/2002 12:08 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 08/22/2002 3:29 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 August 09/20/2002 6:19 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 August 09/20/2002 7:20 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 09/23/2002 12:52 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 August 09/23/2002 7:25 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Fahd 09/23/2002 9:48 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 August 09/24/2002 8:30 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 09/26/2002 8:19 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Fahd 10/01/2002 11:54 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Idle 10/02/2002 12:10 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Fahd 10/05/2002 11:53 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 BassTeQ 10/15/2002 2:23 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 twslex 11/10/2003 2:03 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 JustaShmuck 12/11/2003 11:34 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 autostream 01/19/2004 10:41 PM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Felix 10 11/17/2004 6:47 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 AllenAyres 11/18/2004 7:10 AM
Re: [6.3.x] [beta] Advanced IP Logging v2.0.1 Felix 10 11/19/2004 7:17 AM

Link Copied to Clipboard
Donate Today!
Donate via PayPal

Donate to UBBDev today to help aid in Operational, Server and Script Maintenance, and Development costs.

Please also see our parent organization VNC Web Services if you're in the need of a new UBB.threads Install or Upgrade, Site/Server Migrations, or Security and Coding Services.
Recommended Hosts
We have personally worked with and recommend the following Web Hosts:
Stable Host
bluehost
InterServer
Visit us on Facebook
Member Spotlight
Nettomo
Nettomo
Germany, Bremen
Posts: 417
Joined: November 2001
Forum Statistics
Forums63
Topics37,575
Posts293,932
Members13,824
Most Online6,139
Sep 21st, 2024
Today's Statistics
Currently Online
Topics Created
Posts Made
Users Online
Birthdays
Top Posters
AllenAyres 21,079
JoshPet 10,369
LK 7,394
Lord Dexter 6,708
Gizmo 5,835
Greg Hard 4,625
Top Posters(30 Days)
Gizmo 2
Top Likes Received
isaac 82
Gizmo 20
Brett 7
WebGuy 2
Top Likes Received (30 Days)
None yet
The UBB.Developers Network (UBB.Dev/Threads.Dev) is ©2000-2025 VNC Web Services

 
Powered by UBB.threads™ PHP Forum Software 8.0.1
(Snapshot build 20240918)