###############################################################################
#Post.pl #
###############################################################################
# YaBB: Yet another Bulletin Board #
# Open-Source Community Software for Webmasters #
# Version: YaBB 1 Gold - SP 1.3 #
# Released: December 2001; Updated April 6, 2003 #
# Distributed by: http://www.yabbforum.com #
# =========================================================================== #
# Copyright (c) 2000-2003 YaBB (www.yabbforum.com) - All Rights Reserved. #
# Software by: The YaBB Development Team #
# with assistance from the YaBB community. #
# Sponsored by: Xnull Internet Media, Inc. - http://www.ximinc.com #
###############################################################################
$postplver = "1 Gold - SP 1.3";
sub Post {
### mute mod ###
my ($mutereason,@mutesettings);
fopen(FILE, "$memberdir/$username.mute");
@mutesettings=;
fclose(FILE);
chomp($mutesettings[0]);
fopen(FILE, "$vardir/mutereason.txt");
@promutes = ;
fclose(FILE);
fopen(FILE, "$vardir/profilemutes.txt");
@themutes = ;
fclose(FILE);
if ($mutesettings[0] eq 'muted') {
$mutereason = $promutes[0] ? $promutes[0] : "$mute{'3'}@themutes";
&fatal_error($mutereason);
}
#### mute mod ###
if($username eq 'Guest' && $enable_guestposting == 0) { &fatal_error($txt{'165'}); }
if( $currentboard eq '' ) { &fatal_error($txt{'1'}); }
my($filetype_info, $filesize_info);
my( $subtitle, $x, $mnum, $msub, $mname, $memail, $mdate, $mreplies, $musername, $micon, $mstate, $msubject, $mattach, $mip, $mmessage, $mns, $quotestart);
my $quotemsg = $INFO{'quote'};
$threadid = $INFO{'num'};
($mnum, $msub, $mname, $memail, $mdate, $mreplies, $musername, $micon, $mstate) = split(/\|/,$yyThreadLine);
if( $mstate == 1 ) { &fatal_error($txt{'90'}); }
# Determine what category we are in.
fopen(FILE, "$boardsdir/$currentboard.ctb") || &fatal_error("300 $txt{'106'}: $txt{'23'} $currentboard.ctb");
$cat = ;
fclose(FILE);
$curcat = $cat;
fopen(FILE, "$boardsdir/$cat.cat") || &fatal_error("300 $txt{'106'}: $txt{'23'} $cat.cat");
$cat = ;
fclose(FILE);
$pollthread = 0;
$polltxt{'1a'} =~ tr/+/ /;
$polltxt{'2a'} =~ tr/+/ /;
if ($INFO{'title'} eq $polltxt{'1a'}) { $pollthread = 1; }
elsif ($INFO{'title'} eq $polltxt{'2a'}) { $pollthread = 2; }
if ($pollthread == 2 && $useraddpoll == 0) { &fatal_error($txt{'1'}); }
$notification = ! $enable_notification || $username eq 'Guest' ? '' : <<"~;";
$txt{'131a'}:
$txt{'750'}
~;
$name_field = $realname eq '' ? qq~
$txt{'44'}:
~ : qq~~;
$email_field = $realemail eq '' ? qq~
$txt{'69c'}:
~ : qq~~;
$sub = "";
$settofield="subject";
if( $threadid ne '' ) {
### DRAFT + PUBLISH MOD START ###
if (!-e("$datadir/$threadid.show")) {
fopen(FILE,">$datadir/$threadid.show");
for (my $i=0; $i <= $mreplies; $i++) {
print FILE "1\n";
}
fclose(FILE);
}
fopen(FILE,"$datadir/$threadid.show");
@viewthis=;
fclose(FILE);
if ($viewthis[0] == 0 && !(exists $moderators{$username} || $settings[7] eq 'Administrator' || $settings[7] eq 'Global Moderator')) { &fatal_error($publishtxt{'20'}); }
### DRAFT + PUBLISH MOD END ###
fopen(FILE, "$datadir/$threadid.txt") || &fatal_error("201 $txt{'106'}: $txt{'23'} $threadid.txt");
@messages = ;
fclose(FILE);
if($quotemsg ne '') {
($msubject, $mname, $memail, $mdate, $musername, $micon, $mattach, $mip, $mmessage, $mns) = split(/\|/,$messages[$quotemsg]);
$message=$mmessage;
$message =~ s~ ~\n~g;
$message =~ s~\n{0,1}\[quote([^\]]*)\](.*?)\[/quote\]\n{0,1}~\n~isg;
$message =~ s~\n*\[/*quote([^\]]*)\]\n*~~ig;
$mname ||= $musername || $txt{'470'};
$quotestart = int( $quotemsg / $maxmessagedisplay ) * $maxmessagedisplay;
$message = qq~[quote author=$mname link=board=$currentboard;num=$threadid;start=$quotestart#$quotemsg date=$mdate\]$message\[/quote\]\n~;
$msubject =~ s/\bre:\s+//ig;
if ($mns eq "NS") {$nscheck="checked";}
$message =~ s~\[whisper(.+?)\](.+?)\[\/whisper\]~~eisg;
}
else {
($msubject, $mname, $memail, $mdate, $musername, $micon, $mattache, $mip, $mmessage, $mns) = split(/\|/,$messages[0]);
$msubject =~ s/\bre:\s+//ig;
}
$sub = "Re: $msubject";
$settofield="message";
}
if ($pollthread && $username eq "Guest") {$guest_vote = 1;}
if ($pollthread == 2) {
$settofield="question";
$sub = "$msubject";
} else {
if (!$enable_notification || $username eq 'Guest') {$notification = ""} else { $notification = qq~
$txt{'131a'}:
$txt{'750'}
~;}
}
if(!$sub) { $subtitle = "$txt{'33'} "; }
else { $subtitle = "$sub "; }
$yymain .= qq~
~;
$publishas=qq~
$publishtxt{'30'}:
~;
if (-e("$boardsdir/$currentboard.pub") && !(exists $moderators{$username} || $settings[7] eq 'Administrator' || $settings[7] eq 'Global Moderator') && ($threadid eq '' || $draftreply == 1)) {
$publishas .=qq~$publishtxt{'31'}
~;
} else {
$publishas .=qq~$publishtxt{'31'}
$publishtxt{'32'}
~;
}
$publishas .=qq~
~;
$submittxt = "$txt{'105'}";
$destination = "post2";
$icon = "xx";
$is_preview = 0;
$post = "post";
$preview = "preview";
$yytitle = "$INFO{'title'}";
&Postpage;
if ($pollthread != 2) { &doshowthread; }
&template;
exit;
}
sub Postpage {
my $extra;
my($filetype_info, $filesize_info, $extensions);
$extensions = join(" ", @ext);
$filetype_info = $checkext == 1 ? qq~$fatxt{'2'} $extensions~ : qq~$fatxt{'2'} $fatxt{'4'}~;
$filesize_info = $limit != 0 ? qq~$fatxt{'3'} $limit KB~ : qq~$fatxt{'3'} $fatxt{'5'}~;
if ($is_preview) {$txt{'507'}=$txt{'771'};}
$message =~ s~<\/~\<\;/~isg;
if($post eq "imsend") {
if(!$INFO{'to'}) { $INFO{'to'} = $FORM{'to'};}
if($INFO{'to'}) {$settofield="message";} else {$settofield="to";}
$idinfo = "$INFO{'id'}";
if(!$INFO{'adminim'}) {
$extra = qq~
$txt{'150'}:
$txt{'748'}
~;
} else { $extra = qq~$adminim~; }
}
else {
$extra = qq~
$txt{'71'}:
$txt{'281'}
$txt{'282'}
$txt{'283'}
$txt{'284'}
$txt{'285'}
$txt{'286'}
$txt{'287'}
$txt{'288'}
$txt{'289'}
$txt{'290'}
$txt{'291'}
$txt{'292'}
~;
if ($realname eq '' && $threadid ne '') {$settofield="name";}
}
$yymain .= qq~
~;
if($INFO{'adminim'} || $INFO{'action'} eq "imgroups") {
$yymain .= qq~
~;
if ($pollthread != 2 || ($pollthread == 2 && $username eq 'Guest')) { $yymain .= qq~
~;
}
## [Poll Mod Options] ##
if ($pollthread) {
$maxpq ||= 60;
$maxpo ||= 50;
$maxpc ||= 0;
$numpolloptions ||= 8;
if ($guest_vote) {$gvchecked = " checked";}
if ($hide_results) {$hrchecked = " checked";}
if ($multi_choice) {$mcchecked = " checked";}
$yymain .= qq~
~;
}
if ($pollthread != 2) { # if not adding a poll to an existing thread, display standard post page inputs
## [/Poll Mod Options] ##
### Begin Enable HTML Mod
if ($post eq "post" || $post eq "postmodify" || $post eq "imsend") {
$message_backup = $message; # since $message is no local variable, it often gets overwritten accidently somehwere (couldn't find out where)
$enable_html = HTML_allow($username);
$message = $message_backup;
if ($enable_html == 1) {
if ($message =~ /\#enable_html/isg || $FORM{enable_html} eq "1") {
$enable_html_check = ' checked';
$message =~ s/\#enable_html//isg;
} else { $enable_html_check = '' }
$enable_html_checkbox = qq~
$txt_allow_html_mod{'1'}:
$txt_allow_html_mod{'5'}
~;
} else { $enable_html_checkbox = ''; }
}
### End Enable HTML Mod
if($enable_ubbc && $showyabbcbutt) {
$yymain .= qq~
Opmaak [YaBBC Tags Help]
$txt{'215'}
$txt{'262'}
$txt{'263'}
$txt{'264'}
$txt{'265'}
$txt{'266'}
$txt{'267'}
$txt{'268'}
$txt{'269'}
$txt{'270'}
$txt{'271'}
$txt{'272'}
d. blauw
kastanje
$txt{'275'}
$txt{'215'}
~;
}
else {
$yymain .= qq~
~;
}
$yymain .= qq~
~;
}
sub Preview {
$poll_question = $FORM{'question'};
$numpolloptions ||= 8;
for(my $i = 1; $i <= $numpolloptions; $i++) {$options[$i] = $FORM{"option$i"};}
$guest_vote = $FORM{'guest_vote'};
$hide_results = $FORM{'hide_results'};
$multi_choice = $FORM{'multi_choice'};
$poll_comment = $FORM{'poll_comment'};
$pollthread = $FORM{'pollthread'} || 0;
&clear_temp;
$name = $FORM{'name'};
$email = $FORM{'email'};
$sub = $FORM{'subject'};
$FORM{'message'} =~ s~\r~~g;
$mess = $FORM{'message'};
$message = $FORM{'message'};
$icon = $FORM{'icon'};
$ns = $FORM{'ns'};
$threadid = $FORM{'threadid'};
$notify = $FORM{'notify'};
$postid = $FORM{'postid'};
if (length($sub) > 50) { $sub = substr($sub,0,50); }
$message =~ s/\cM//g;
$message =~ s~\[([^\]]{0,30})\n([^\]]{0,30})\]~\[$1$2\]~g;
$message =~ s~\[/([^\]]{0,30})\n([^\]]{0,30})\]~\[/$1$2\]~g;
$message =~ s~(\w+://[^<>\s\n\"\]\[]+)\n([^<>\s\n\"\]\[]+)~$1$2~g;
&ToHTML($message);
$message =~ s/\t/ \ \ \ /g;
$message =~ s/\n/ /g;
&CheckIcon;
if($icon eq "xx") { $ic1 = " selected"; }
elsif($icon eq "thumbup") { $ic2 = " selected"; }
elsif($icon eq "thumbdown") { $ic3 = " selected"; }
elsif($icon eq "exclamation") { $ic4 = " selected"; }
elsif($icon eq "question") { $ic5 = " selected"; }
elsif($icon eq "lamp") { $ic6 = " selected"; }
elsif($icon eq "smiley") { $ic7 = " selected"; }
elsif($icon eq "angry") { $ic8 = " selected"; }
elsif($icon eq "cheesy") { $ic9 = " selected"; }
elsif($icon eq "laugh") { $ic10 = " selected"; }
elsif($icon eq "sad") { $ic11 = " selected"; }
elsif($icon eq "wink") { $ic12 = " selected"; }
$name_field = $realname eq '' ? qq~
$txt{'44'}:
~ : qq~~;
$email_field = $realemail eq '' ? qq~
$txt{'69'}:
~ : qq~~;
if ($FORM{'notify'} eq "x") {$notify = " checked";}
if ($FORM{'ns'} eq 'NS') {$nscheck = " checked";}
if ($username eq 'Guest') {
fopen(FILE, "$memberdir/memberlist.txt") || &fatal_error("202 $txt{'106'}: $txt{'23'} memberlist.txt");
@memberlist = ;
fclose(FILE);
$testname = lc $name;
for ($a = 0; $a < @memberlist; $a++) {
chomp $memberlist[$a];
$membername = lc $memberlist[$a];
if( fopen(FILE2, "$memberdir/$memberlist[$a].dat") ) {
$tmpa = ;
$realname = ;
fclose(FILE2);
chomp $realname;
$realname = lc $realname;
if ($realname eq $testname || $membername eq $testname) { &fatal_error($txt{'100'}); }
}
elsif( $testname eq $membername ) { &fatal_error($txt{'100'}); }
}
fopen(FILE, "$vardir/reserve.txt") || &fatal_error("203 $txt{'106'}: $txt{'23'} reserve.txt");
@reserve = ;
fclose(FILE);
fopen(FILE, "$vardir/reservecfg.txt") || &fatal_error("204 $txt{'106'}: $txt{'23'} reservecfg.txt");
@reservecfg = ;
fclose(FILE);
for( $a = 0; $a < @reservecfg; $a++ ) {
chomp $reservecfg[$a];
}
$matchword = $reservecfg[0] eq 'checked';
$matchcase = $reservecfg[1] eq 'checked';
$matchuser = $reservecfg[2] eq 'checked';
$matchname = $reservecfg[3] eq 'checked';
$namecheck = $matchcase eq 'checked' ? $name : lc $name;
foreach $reserved (@reserve) {
chomp $reserved;
$reservecheck = $matchcase ? $reserved : lc $reserved;
if ($matchname) {
if ($matchword) {
if ($namecheck eq $reservecheck) { &fatal_error("$txt{'244'} $reserved"); }
}
else {
if ($namecheck =~ $reservecheck) { &fatal_error("$txt{'244'} $reserved"); }
}
}
}
}
### Begin Enable HTML Mod
$html_username = $username;
if($FORM{enable_html} eq "1") { $message .= qq~#enable_html~; }
if ($message =~ /\#enable_html/isg) {
$message_backup = $message; # since $message is no local variable, it often gets overwritten accidently somehwere (couldn't find out where)
$enable_html = HTML_allow($html_username);
$message = $message_backup;
if ($enable_html == 1) {
$message =~ s/\#enable_html//isg;
$message =~ s/ /\n/ig;
&FromHTML($message);
}
} else { $enable_html = 0; }
if ($enable_html != 1) {
&LoadHotlinkList;
if($hot_post && $action eq "post2" || $hot_post && $action eq "modify2" || $hot_im && $action eq "imsend2") {
foreach (@hotlinks) {
($htmpa,$htmpb) = @{$_};
my($htmp, $htmpc, $htmpc2, $tmptarget);
($htmp,$tmptarget) = split(/\,/,$htmpa,2);
if($htmpb !~ m~\Ahttp://~) { $htmpb = qq~http:\/\/$htmpb~; }
if($tmptarget) { $htmpc = qq(\[url=$htmpb\]$hfont1$hfont2); $htmpc2 = qq($hfont4$hfont3\[\/url\]); }
else { $htmpc = qq(\[link=$htmpb\]$hfont1$hfont2); $htmpc2 = qq($hfont4$hfont3\[\/link\]); }
$message =~ s~ ~\t~g;
$message =~ s~ ~\n~g;
$message =~ s~(^|\s)($htmp)(?=$|\s|\.|\,|\;|\:|\?)~$1$htmpc$2$htmpc2~sgi;
$message =~ s~(^|\s)(\[(?:b|i|u|s)\]$htmp\[\/(?:b|i|u|s)\])(?=$|\s|\.|\,|\;|\:|\?)~$1$htmpc$2$htmpc2~sgi;
}
}
&wrap;
$displayname = $settings[1];
if($enable_ubbc) { if(!$yyYaBBCloaded) { require "$sourcedir/YaBBC.pl"; } &DoUBBC; }
&wrap2;
}
### End Enable HTML Mod
if( $FORM{'previewmodify'} ) {
$publishas=qq~
$publishtxt{'30'}:
~;
if (-e("$boardsdir/$currentboard.pub") && !(exists $moderators{$username} || $settings[7] eq 'Administrator' || $settings[7] eq 'Global Moderator') && $oldpub == 0 && ($postid == 0 || $draftreply == 1)) {
$publishas .=qq~$publishtxt{'31'} ~;
} else {
if ($FORM{'publishmode'} == 1) {
$publishas .=qq~$publishtxt{'31'}
$publishtxt{'32'} ~;
} else {
$publishas .=qq~$publishtxt{'31'}
$publishtxt{'32'} ~;
}
}
$publishas .=qq~
~;
$submittxt = "$txt{'10'}";
$is_preview = 1;
$post = "postmodify";
$preview = "previewmodify";
$destination = 'modify2';
$submittxt = $txt{'10'};
}
elsif( $FORM{'previewim'} ) {
$submittxt = "$txt{'148'}";
$destination = "imsend2";
$is_preview = 1;
$post = "imsend";
$preview = "previewim";
$submittxt = $txt{'148'};
}
else {
$notification = ! $enable_notification || $username eq 'Guest' ? '' : <<"~;";
$txt{'131a'}:
$txt{'750'}
~;
$publishas=qq~
$publishtxt{'30'}:
~;
if (-e("$boardsdir/$currentboard.pub") && !(exists $moderators{$username} || $settings[7] eq 'Administrator' || $settings[7] eq 'Global Moderator') && ($threadid eq '' || $draftreply == 1)) {
$publishas .=qq~$publishtxt{'31'}
~;
} else {
$publishas .=qq~$publishtxt{'31'}
$publishtxt{'32'}
~;
}
$publishas .=qq~
~;
$destination = 'post2';
$submittxt = $txt{'105'};
$is_preview = 1;
$post = "post";
$preview = "preview";
}
if($INFO{'action'} eq "imgroups") { $destination = "imgroups"; }
$csubject = $sub;
&LoadCensorList; # Load Censor List
$csubject =~ s/\Q$tmpa\E/$tmpb/gi;
$message =~ s/\Q$tmpa\E/$tmpb/gi;
$yymain .= qq~
Dit wil je plaatsen
$message
~;
$message = $mess;
$yytitle = "$txt{'507'} - $csubject";
$settofield="message";
&Postpage;
&template;
exit;
}
sub Post2 {
if($username eq 'Guest' && $enable_guestposting == 0) { &fatal_error($txt{'165'}); }
my( $email, $subject, $ns, $threadid, $notify, @memberlist, $a, $realname, $membername, $testname, @reserve, @reservecfg, $matchword, $matchcase, $matchuser, $matchname, $namecheck, $reserved, $reservecheck, $newthreadid, @messages, $mnum, $msub, $mname, $memail, $mdate, $mreplies, $musername, $micon, $mstate, $start, $pageindex, $tempname );
# If poster is a Guest then evaluate the legality of name and email
if(!$settings[2]) {
$FORM{'name'} =~ s/\A\s+//;
$FORM{'name'} =~ s/\s+\Z//;
&fatal_error($txt{'75'}) unless ($FORM{'name'} ne '' && $FORM{'name'} ne '_' && $FORM{'name'} ne ' ');
&fatal_error($txt{'568'}) if(length($FORM{'name'}) > 25);
&fatal_error("$txt{'76'}") if($FORM{'email'} eq '');
&fatal_error("$txt{'240'} $txt{'69'} $txt{'241'}") if($FORM{'email'} !~ /[\w\-\.\+]+\@[\w\-\.\+]+\.(\w{2,4}$)/);
&fatal_error("$txt{'500'}") if(($FORM{'email'} =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\.$)/) || ($FORM{'email'} !~ /^.+@\[?(\w|[-.])+\.[a-zA-Z]{2,4}|[0-9]{1,4}\]?$/));
}
# Get the form values
$publishit=$FORM{'publishmode'};
$name = $FORM{'name'};
$email = $FORM{'email'};
$subject = $FORM{'subject'};
$message = $FORM{'message'};
$icon = $FORM{'icon'};
$ns = $FORM{'ns'};
$threadid = $FORM{'threadid'};
if( $threadid =~ /\D/ ) { &fatal_error($txt{'337'}); }
$notify = $FORM{'notify'};
if($name && $email) {
&ToHTML($name);
$email =~ s/\|//g;
&ToHTML($email);
$tempname = $name; # hold it temporarily so we can put the _'s back later
$name =~ s/\_/ /g;
}
&fatal_error($txt{'75'}) unless($username || $name);
&fatal_error($txt{'76'}) unless($settings[2] || $email);
$pollthread = $FORM{'pollthread'} || 0;
if ($pollthread != 2) { # If user is NOT adding a Poll to an existing thread
&fatal_error($txt{'77'}) unless($subject && $subject !~ m~\A[\s_.,]+\Z~);
&fatal_error($txt{'78'}) unless($message);
if (length($message)>$MaxMessLen) { &fatal_error($txt{'499'}); }
if (-e "$boardsdir/$currentboard.mbo" ) { require "$boardsdir/$currentboard.mbo"; }
if ($minwordcount{$currentboard} == 1) {
$countspaces = 0;
$testmessage = $message;
$testmessage =~ s/[\n\r]/ /g;
if (index($testmessage," ")){
while ($testmessage =~ m/ /){
$testmessage =~ s/ / /g; # removing exessive spaces.
}
if (rindex ($testmessage, " " == 0)){ chop $testmessage; } # remove trailing space if it exists
for($n=0; $n < length $testmessage; $n++) {
if ( substr ($testmessage, $n, 1) eq " " & substr ($testmessage, $n+1, 1) ne " "){ $countspaces++; }
}
}
$numwords = $countspaces +1;
if ($numwords < $MinMessLen || $countspaces > length($testmessage)/2){&fatal_error("$numwords $txt{'498b'}");}
}
if( $FORM{'preview'} ) { &Preview; }
&spam_protection;
if (length($subject) > 50) { $subject = substr($subject,0,50); }
$message =~ s/\cM//g;
$message =~ s~\[([^\]]{0,30})\n([^\]]{0,30})\]~\[$1$2\]~g;
$message =~ s~\[/([^\]]{0,30})\n([^\]]{0,30})\]~\[/$1$2\]~g;
$message =~ s~(\w+://[^<>\s\n\"\]\[]+)\n([^<>\s\n\"\]\[]+)~$1\n$2~g;
&ToHTML($message);
$message =~ s~\t~ \ \ \ ~g;
$message =~ s~\n~ ~g;
&CheckIcon;
### Begin Enable HTML Mod
$message =~ s/\#enable_html//isg;
if($FORM{enable_html} eq "1") {
$message_backup = $message; # since $message is no local variable, it often gets overwritten accidently somehwere (couldn't find out where)
$enable_html = HTML_allow($username);
$message = $message_backup;
if ($enable_html == 1) { $message .= qq~#enable_html~; }
}
### End Enable HTML Mod
if(-e("$datadir/.txt")) { unlink("$datadir/.txt"); }
my( @app_messages, $app_sub, $app_name, $app_email, $app_date, $app_username, $app_icon, $app_Attach, $app_ip, $app_postmessage, $app_ns, $app_lm, $app_lmb, $app_tlimit, $app_tpost, $app_tpost1, $app_tdiff );
if ($threadid ne '') {
fopen(FILE, "$datadir/$threadid.txt") || &fatal_error("212 $txt{'106'}: $txt{'23'} $threadid.txt");
@app_messages = ;
fclose (FILE);
if (-e("$vardir/app_settings.txt")) {
fopen(FILE, "$vardir/app_settings.txt");
@app_settings = ;
fclose(FILE);
$app_tlimit = 3600*$app_settings[0];
} else { $app_tlimit = 43200 }
$app_postid = 0;
$app_postid = @app_messages - 1;
chomp $app_messages[$app_postid];
($app_sub, $app_name, $app_email, $app_date, $app_username, $app_icon, $app_attach, $app_ip, $app_postmessage, $app_ns, $app_lm, $app_lmb) = split(/[\|]/, $app_messages[$app_postid]);
if ($app_lm) { $app_tpost = $app_lm } else { $app_tpost = $app_date }
$app_tpost1 = stringtotime($app_tpost);
$app_tdiff = time - $app_tpost1;
$app_message = $app_postmessage.' [hr] '.$message;
$app_app = 0;
if ($username eq $app_username && $username ne 'Guest' && length($app_message)<$MaxMessLen && $app_tdiff <= $app_tlimit) {
$app_app = 1;
require "$sourcedir/ModifyMessage.pl";
&ModifyMessage2;
}
}
} # end if
if ($username ne 'Guest') {
# If not guest, get name and email.
$name = $settings[1];
$email = $settings[2];
} else {
# If user is Guest, then make sure the chosen name
# is not reserved or used by a member.
fopen(FILE, "$memberdir/memberlist.txt") || &fatal_error("206 $txt{'106'}: $txt{'23'} $memberlist.txt");
@memberlist = ;
fclose(FILE);
$testname = lc $name;
for ($a = 0; $a < @memberlist; $a++) {
chomp $memberlist[$a];
$membername = lc $memberlist[$a];
if( fopen(FILE2, "$memberdir/$memberlist[$a].dat") ) {
$tmpa = ;
$realname = ;
fclose(FILE2);
chomp $realname;
$realname = lc $realname;
if ($realname eq $testname || $membername eq $testname) { &fatal_error($txt{'473'}); }
}
elsif( $testname eq $membername ) { &fatal_error($txt{'473'}); }
}
fopen(FILE, "$vardir/reserve.txt") || &fatal_error("207 $txt{'106'}: $txt{'23'} reserve.txt");
@reserve = ;
fclose(FILE);
fopen(FILE, "$vardir/reservecfg.txt") || &fatal_error("208 $txt{'106'}: $txt{'23'} reservecfg.txt");
@reservecfg = ;
fclose(FILE);
for( $a = 0; $a < @reservecfg; $a++ ) { chomp $reservecfg[$a]; }
$matchword = $reservecfg[0] eq 'checked';
$matchcase = $reservecfg[1] eq 'checked';
$matchuser = $reservecfg[2] eq 'checked';
$matchname = $reservecfg[3] eq 'checked';
$namecheck = $matchcase eq 'checked' ? $name : lc $name;
foreach $reserved (@reserve) {
chomp $reserved;
$reservecheck = $matchcase ? $reserved : lc $reserved;
if ($matchname) {
if ($matchword) {
if ($namecheck eq $reservecheck) { &fatal_error("$txt{'244'} $reserved"); }
}
else {
if ($namecheck =~ $reservecheck) { &fatal_error("$txt{'244'} $reserved"); }
}
}
}
$name = $tempname; # put the name back (with any _'s) now that we've checked it
}
######################################
## DaveB's File Attachment Mod v2.5 ##
######################################
if ($FORM{'file'}) {
if (!$FORM{'post'} && !$FORM{'postmodify'}) { &write_error("$fatxt{'49'}"); }
$mylimit = 1024 * $limit;
$mydirlimit = 1024 * $dirlimit;
$file = $filename;
$file =~ s/.+\\([^\\]+)$|.+\/([^\/]+)$/$1/;
$file =~ s/[#%+,\/:?"<>'|@^!]//g; #edit in between [ ] to include characters you dont want to allow in filenames (dont put a . there or you wont be able to get any file extensions).
$file =~ s/ /_/g; #replaces spaces in filenames with a "_" character.
opendir(AMD, $upload_dir) || &write_error("$fatxt{'19'} $upload_dir.");
@dirlist = readdir(AMD);
closedir(AMD);
foreach $dirlist(@dirlist)
{
if (lc $dirlist eq lc $file) { &write_error("$fatxt{'8'}"); last;}
}
if ($checkext == 0) { $match = 1; } else {
foreach $ext (@ext){
chomp ($ext);
if (grep /$ext$/i,$file){$match=1; last;}
}
}
if ($match) {
if ($allowattach == 1 && (($allowguestattach == 0 && $username ne 'Guest') || $allowguestattach == 1)) {
$upload_okay = 1;
}
} else {
&write_error("$fatxt{'20'} @ext");
}
if ($mydirlimit > 0) {
&dirstats;
}
$filesize = $ENV{'CONTENT_LENGTH'} - $postsize;
$filesizekb = int ($filesize/1024);
if ($filesize > $mylimit && $mylimit != 0) {
$filesizediff = $filesizekb - $limit;
if ($filesizediff == 1) { $sizevar = "kilobyte"; } else { $sizevar = "kilobytes"; }
&write_error("$fatxt{'21'} $filesizediff $sizevar $fatxt{'21b'}");
} elsif ($filesize > $spaceleft && $mydirlimit != 0) {
$filesizediff = $filesizekb - $kbspaceleft;
if ($filesizediff == 1) { $sizevar = "kilobyte"; } else { $sizevar = "kilobytes"; }
&write_error("$fatxt{'22'} $filesizediff $sizevar $fatxt{'22b'}");
}
$write_file = "$upload_dir/$file";
$save_file = "$http_dir/$file";
}
#######################################
## /DaveB's File Attachment Mod v2.5 ##
#######################################
## [Poll Mod] ##
my @poll_data;
if ($pollthread) {
$maxpq ||= 60;
$maxpo ||= 50;
$maxpc ||= 0;
$numpolloptions ||= 8;
$numcount = 0;
if ( length($FORM{"question"} ) > $maxpq) { &fatal_error("$polltxt{'40'} $polltxt{'34a'} $maxpq $polltxt{'34b'} $polltxt{'36'}"); }
&ToHTML($FORM{"question"});
$guest_vote = $FORM{'guest_vote'} || 0;
$hide_results = $FORM{'hide_results'} || 0;
$multi_choice = $FORM{'multi_choice'} || 0;
$poll_comment = $FORM{'poll_comment'} || "";
if ( length($poll_comment ) > $maxpc) { &fatal_error("$polltxt{'57'} $polltxt{'34a'} $maxpc $polltxt{'34b'} $polltxt{'36'}"); }
&ToHTML($poll_comment);
$poll_comment =~ s~\n~ ~g;
$poll_comment =~ s~\r~~g;
push @poll_data, qq~$FORM{"question"}|0|$username|$name|$email|$date|$guest_vote|$hide_results|$multi_choice|||$poll_comment\n~;
for ($i = 1; $i <= $numpolloptions; $i++){
if ($FORM{"option$i"}) {
if (length($FORM{"option$i"}) > $maxpo) { &fatal_error("$polltxt{'7'} $i $polltxt{'34a'} $maxpo $polltxt{'34b'} $polltxt{'36'}"); }
&ToHTML($FORM{"option$i"});
$numcount++;
push @poll_data, qq~0|$FORM{"option$i"}\n~;
}
}
unless ($FORM{"question"}) { &fatal_error("$polltxt{'37'}"); }
if ($numcount < 2) { &fatal_error("$polltxt{'38'}"); }
}
## [/Poll Mod] ##
# If no thread specified, this is a new thread.
# Find a valid random ID for it.
if($threadid eq '') {
$newthreadid = time;
$i=0;
if (-e "$datadir/$newthreadid.txt") {
while (-e "$datadir/$newthreadid$i.txt") { ++$i; }
$newthreadid="$newthreadid$i";
}
}
else { $newthreadid = ''; }
if($newthreadid) {
# This is a new thread. Save it.
fopen(FILE,">$datadir/$newthreadid.show");
print FILE "$publishit\n";
fclose(FILE);
fopen(FILE, "+<$boardsdir/$currentboard.txt", 1) || &write_error("210 $txt{'106'}: $txt{'23'} $currentboard.txt");
seek FILE, 0, 0;
my @buffer = ;
truncate FILE, 0;
seek FILE, 0, 0;
print FILE qq~$newthreadid|$subject|$name|$email|$date|0|$username|$icon|0\n~;
print FILE @buffer;
fclose(FILE);
fopen(FILE, ">$datadir/$newthreadid.txt") || &write_error("$txt{'23'} $newthreadid.txt");
print FILE qq~$subject|$name|$email|$date|$username|$icon|0|$user_ip|$message|$ns|||$save_file|$file\n~;
fclose(FILE);
$mreplies = 0;
if ($file) {
fopen(AMP, ">>$vardir/attachments.txt") || &write_error("209 $txt{'106'}: $txt{'23'} $vardir/attachments.txt");
print AMP qq~$newthreadid|$mreplies|$subject|$name|$currentboard|$filesizekb|$date|$file\n~;
fclose(AMP);
}
if ($pollthread) { # Save Poll data for new thread
fopen (POLL, ">$datadir/$newthreadid.poll");
print POLL @poll_data;
fclose (POLL);
}
} else {
# This is an old thread. Save it.
if ($pollthread) { # Save new Poll data
fopen (POLL, ">$datadir/$threadid.poll");
print POLL @poll_data;
fclose (POLL);
$yySetLocation = qq~$cgi;action=display;num=$threadid~;
&redirectexit;
} else { # or save new reply data
($mnum, $msub, $mname, $memail, $mdate, $mreplies, $musername, $micon, $mstate) = split(/\|/,$yyThreadLine);
if( $mstate == 1 ) { &fatal_error($txt{'90'}); }
++$mreplies;
if (-e("$datadir/$threadid.show")) {
fopen(FILE,">>$datadir/$threadid.show");
print FILE "$publishit\n";
fclose(FILE);
} else {
fopen(FILE,">$datadir/$threadid.show");
for (my $i=0; $i <= $mreplies; $i++) {
print FILE "1\n";
}
print FILE "$publishit\n";
fclose(FILE);
}
fopen(FILE, "+<$boardsdir/$currentboard.txt", 1) || &write_error("211 $txt{'106'}: $txt{'23'} $currentboard.txt");
seek FILE, 0, 0;
my @buffer = ;
truncate FILE, 0;
for ($a = 0; $a < @buffer; $a++) {
if ( $buffer[$a] =~ m~\A$mnum\|~o ) { $buffer[$a] = ""; last; }
}
seek FILE, 0, 0;
print FILE qq~$mnum|$msub|$mname|$memail|$date|$mreplies|$musername|$micon|$mstate\n~;
print FILE @buffer;
fclose(FILE);
fopen(FILE, ">>$datadir/$threadid.txt") || &write_error("212 $txt{'106'}: $txt{'23'} $threadid.txt");
print FILE qq~$subject|$name|$email|$date|$username|$icon|0|$user_ip|$message|$ns|||$save_file|$file\n~;
fclose(FILE);
if ($file) {
fopen(AMP, ">>$vardir/attachments.txt") || &write_error("209 $txt{'106'}: $txt{'23'} $vardir/attachments.txt");
print AMP qq~$mnum|$mreplies|$subject|$name|$currentboard|$filesizekb|$date|$file\n~;
fclose(AMP);
}
} # end else
}
if($username ne 'Guest') {
# Increment post count for the member.
$settings[6] =~ s/[\n\r]//g;
++$settings[6];
fopen(FILE, ">$memberdir/$username.dat") || &fatal_error("213 $txt{'106'}: $txt{'23'} $username.dat");
foreach (@settings) {
print FILE qq~$_\n~;
}
fclose(FILE);
}
# The thread ID, regardless of whether it's a new thread or not.
$thread = $newthreadid || $threadid;
# Update totals for this board.
&doaddition;
# Mark thread as read for the member.
&dumplog($currentboard,$date);
######################################
## DaveB's File Attachment Mod v2.5 ##
######################################
if ($upload_okay == 1) {
if($servertype == 0) {
eval { use File::Copy; };
unless($@) {
close($filename);
move("$tmpfile", "$write_file") || &write_error("Error renaming '$tmpfile' to '$write_file'!");
} else { &fatal_error("File::Copy module either not present or producing errors. Please override by having the administrator select the web server type in the forum settings section."); }
} elsif ($servertype == 1) {
fopen(AMT, ">$write_file")||&write_error("$fatxt{'19'} $write_file. $!");
binmode AMT;
# binmode is for windows only. Ignored by unix
while ($bytesread=read($filename,$buffer,1024)) { print AMT $buffer; }
fclose(AMT);
chmod (0666, "$write_file");
close($filename);
1;
} elsif ($servertype == 2) {
close($filename);
rename $tmpfile, $write_file || &write_error("Error renaming '$tmpfile' to '$write_file'!");
1;
}
&clear_temp;
}
#######################################
## /DaveB's File Attachment Mod v2.5 ##
#######################################
# Let's figure out what page number to show
$start = 0;
$pageindex = int($mreplies / $maxmessagedisplay);
$start = $pageindex * $maxmessagedisplay;
# Notify any members who have notification turned on for this thread.
if(-e("$datadir/$thread.mail")) { &NotifyUsers; }
if($notify) {
$INFO{'thread'} = $thread;
$INFO{'start'} = $start;
require "$sourcedir/Notify.pl";
&Notify2;
}
$yySetLocation = qq~$cgi;action=display;num=$thread;start=$start#$mreplies#$mreplies~;
&redirectexit;
}
sub NotifyUsers {
$subject = $FORM{'subject'};
fopen(FILE, "$datadir/$thread.mail") || return 0;
@mails = ;
fclose(FILE);
foreach $curmail (@mails) {
chomp $curmail;
if ($curmail ne $settings[2]) {
&sendmail($curmail,"$txt{'127'}\: $subject","$txt{'128'}, $subject, $txt{'129'} $cgi;action=display;num=$thread\n\n$txt{'130'}");
}
}
return 1;
}
sub doshowthread {
my( $line, $trash, $tempname, $tempdate, $temppost );
my( $html_username, $lastmoduser, $enable_html );
&LoadCensorList; # Load Censor List
if (@messages) {
$yymain .= qq~
~;
### DRAFT + PUBLISH MOD START ###
if (!-e("$datadir/$threadid.show")) {
fopen(FILE,">$datadir/$threadid.show");
for (my $i=0; $i <= $mreplies; $i++) {
print FILE "1\n";
}
fclose(FILE);
}
fopen(FILE,"$datadir/$threadid.show");
@viewthis=;
fclose(FILE);
### DRAFT + PUBLISH MOD END ###
foreach $line (@messages) { #start for each
($trash, $tempname, $trash, $tempdate, $tempusername, $html_username, $trash, $trash, $trash, $message, $ns, $trash, $lastmoduser) = split(/\|/,$line);
### DRAFT + PUBLISH MOD START ###
if ($viewthis[$counter] == 0 && !($username eq $tempusername || exists $moderators{$username} || $settings[7] eq 'Administrator' || $settings[7] eq 'Global Moderator')) { next; }
### DRAFT + PUBLISH MOD END ###
$tempdate = &timeformat($tempdate);
foreach (@censored) {
($tmpa,$tmpb) = @{$_};
$message =~ s~\Q$tmpa\E~$tmpb~gi;
}
my @words = split(/\s/,$message);
### Begin Enable HTML Mod
if ($message =~ /\#enable_html/isg) {
$lastmoduser =~ s~\n~~g;
if ($lastmoduser ne $html_username && $lastmoduser ne '') {
$html_username = $lastmoduser;
}
$message_backup = $message; # since $message is no local variable, it often gets overwritten accidently somehwere (couldn't find out where)
$enable_html = HTML_allow($html_username);
$message = $message_backup;
if ($enable_html == 1) {
$message =~ s/\#enable_html//isg;
$message =~ s/ /\n/ig;
&FromHTML($message);
}
} else { $enable_html = 0; }
if ($enable_html != 1) {
&wrap;
$displayname = $tempname;
if($enable_ubbc) { if(!$yyYaBBCloaded) { require "$sourcedir/YaBBC.pl"; } &DoUBBC; }
&wrap2;
$counter++;
}
### End Enable HTML Mod
$yymain .= qq~
$txt{'279'}: $tempname
$txt{'280'}: $tempdate
$message
~;
}
$yymain .= "
\n";
}
else { $yymain .= ""; }
}
sub doaddition {
fopen(FILE2, "$datadir/$thread.data");
$tempinfo = ;
fclose(FILE2);
($views, $lastposter) = split(/\|/,$tempinfo);
my( $threadcount, $messagecount, $lastposttime, $lastposter, $lastthreadid ) = &BoardCountGet($currentboard);
++$messagecount;
unless( $FORM{'threadid'} ) {
++$threadcount;
}
$myname = $username eq 'Guest' ? qq~Guest-$name~ : $username;
&BoardCountSet( $currentboard, $threadcount, $messagecount, $date, $myname, $thread );
fopen(FILE2, "+>$datadir/$thread.data");
print FILE2 "$views|$myname";
fclose(FILE2);
}
1;