############################################################################### #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'}:



~; $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'}: ~; if ($realname eq '' && $threadid ne '') {$settofield="name";} } $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($INFO{'adminim'} || $INFO{'action'} eq "imgroups") { $yymain .= qq~
~; } else { $yymain .= qq~~; } $yymain .= qq~
~; if ($pollthread == 2 ) {$extra = "";} else { $yymain .= qq~ ~; } $yymain .= qq~ $name_field $email_field $extra
  $txt{'70'}:
~; if ($maxpc > 0) { $yymain .= qq~ ~; } $yymain .= qq~
$polltxt{'6'}:
  ~; for(my $i = 1; $i <= $numpolloptions; $i++) { $yymain .= qq~ ~; } $yymain .= qq~
  $polltxt{'7'} $i:  
        commentaar:
  $polltxt{'54'}
  $polltxt{'55'}
  $polltxt{'56'}
   
   
~; } 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~
~; } else { $yymain .= qq~ ~; } $yymain .= qq~
 

Opmaak
  [YaBBC Tags Help]


~; } $yymain .= qq~ ~; # File Attachment's Browse Box Code if ($allowattach == 1 && ($action eq 'post' || $action eq 'post2') && (($allowguestattach == 0 && $username ne 'Guest') || $allowguestattach == 1)) { $yymain .= qq~ ~; if( ($is_preview == 1) && $FORM{'file'} ) { $yymain .= qq~ ~; } } # /File Attachment's Browse Box Code $yymain .= qq~

smilies

~; if (($showadded == 3 && $showsmdir ne 2) || ($showsmdir eq 3 && $showadded ne 2)){ $yymain .= qq~ $smiltxt{'1'} ~; } $yymain .= qq~
$txt{'72'}:

~; if ($showadded eq 2 || $showsmdir eq 2){ $yymain .= qq~ ~; } $yymain .= qq~

$fatxt{'6'}


$filetype_info
$filesize_info

$publishas $enable_html_checkbox $notification $lastmod
$txt{'276'}:

$txt{'277'}

$txt{'329'}
~; unless ($pollthread == 2) {$yymain .= qq~ ~;} unless ($is_preview){$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~~; } else { if ($FORM{'publishmode'} == 1) { $publishas .=qq~ ~; } else { $publishas .=qq~ ~; } } $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'}:



~; $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~
~; } $yymain .= "
$txt{'279'}: $tempname $txt{'280'}: $tempdate
$message
 

\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;