| ############################################################################### |
| ############################################################################### |
| # Attachments.pl # |
| # Attachments.pm # |
| |
| # $Date: 01.05.16 $ # |
| ############################################################################### |
| ############################################################################### |
| # YaBB: Yet another Bulletin Board # |
| # YaBB: Yet another Bulletin Board # |
| # Open-Source Community Software for Webmasters # |
| # Open-Source Community Software for Webmasters # |
| # Version: YaBB 2.5.2 # |
| # Version: YaBB 2.6.12 # |
| # Packaged: October 21, 2012 # |
| # Packaged: January 5, 2016 # |
| # Distributed by: http://www.yabbforum.com # |
| # Distributed by: http://www.yabbforum.com # |
| # =========================================================================== # |
| # =========================================================================== # |
| # Copyright (c) 2000-2012 YaBB (www.yabbforum.com) - All Rights Reserved. # |
| # Copyright (c) 2000-2016 YaBB (www.yabbforum.com) - All Rights Reserved. # |
| # Software by: The YaBB Development Team # |
| # Software by: The YaBB Development Team # |
| # with assistance from the YaBB community. # |
| # with assistance from the YaBB community. # |
| ############################################################################### |
| ############################################################################### |
| |
| use CGI::Carp qw(fatalsToBrowser); |
| |
| our $VERSION = '2.6.12'; |
| |
| |
| $attachmentsplver = 'YaBB 2.5.2 $Revision: 1.0 $'; |
| $attachmentspmver = 'YaBB 2.6.12 $Revision: 1710 $'; |
| if ($action eq 'detailedversion') { return 1; } |
| if ( $action eq 'detailedversion' ) { return 1; } |
| |
| |
| sub Attachments { |
| sub Attachments { |
| &is_admin_or_gmod; |
| is_admin_or_gmod(); |
| |
| |
| fopen(AMS, "$vardir/attachments.txt"); |
| fopen( AMS, "$vardir/attachments.txt" ); |
| my @attachments = <AMS>; |
| my @attachments = <AMS>; |
| fclose(AMS); |
| fclose(AMS); |
| |
| |
| my $attachment_space = 0; |
| my $attachment_space = 0; |
| foreach (@attachments) { |
| foreach (@attachments) { |
| $attachment_space += (split /\|/, $_, 7)[5]; |
| $attachment_space += NumberFormat( ( split /\|/xsm, $_, 7 )[5] ); |
| } |
| } |
| |
| |
| my $remaining_space; |
| my $remaining_space; |
| if (!$dirlimit) { |
| if ( !$dirlimit ) { |
| $remaining_space = "$fatxt{'23'}"; |
| $remaining_space = "$fatxt{'23'}"; |
| } else { |
| } |
| $remaining_space = ($dirlimit - $attachment_space) . " KB"; |
| else { |
| } |
| $remaining_space = NumberFormat( ( $dirlimit - $attachment_space ) ) . ' KB'; |
| |
| } |
| fopen(FILE, "$vardir/oldestattach.txt"); |
| |
| $maxdaysattach = <FILE>; |
| fopen( FILE, "$vardir/oldestattach.txt" ); |
| fclose(FILE); |
| $maxdaysattach = <FILE>; |
| |
| fclose(FILE); |
| fopen(FILE, "$vardir/maxattachsize.txt"); |
| |
| $maxsizeattach = <FILE>; |
| fopen( FILE, "$vardir/oldestpmattach.txt" ); |
| fclose(FILE); |
| $pmMaxDaysAttach = <FILE>; |
| |
| fclose(FILE); |
| my $totalattachnum = @attachments; |
| |
| $yymain .= qq~ |
| fopen( FILE, "$vardir/maxattachsize.txt" ); |
| <table border="0" width="70%" cellspacing="1" cellpadding="3" class="bordercolor" align="center"> |
| $maxsizeattach = <FILE>; |
| <tr> |
| fclose(FILE); |
| <td class="titlebg"> |
| |
| <img src="$imagesdir/xx.gif" alt="" /> |
| fopen( FILE, "$vardir/maxpmattachsize.txt" ); |
| <b>$fatxt{'24'}</b></td> |
| $pmMaxSizeAttach = <FILE>; |
| </tr><tr> |
| fclose(FILE); |
| <td class="windowbg"><br /><span class="small">$fatxt{'25'}</span><br /><br /></td> |
| |
| </tr><tr> |
| fopen( PMATTACHLOG, "$vardir/pm.attachments" ); |
| <td width="460" class="catbg"><b>$fatxt{'26'}</b></td> |
| my @pmAttachments = <PMATTACHLOG>; |
| </tr><tr> |
| fclose(PMATTACHLOG); |
| <td class="windowbg" height="21"> |
| |
| <b>$fatxt{'27'}</b><br /></td> |
| my $pmAttachmentSpace = 0; |
| </tr><tr> |
| foreach (@pmAttachments) { |
| <td class="windowbg2"> |
| $pmAttachmentSpace += NumberFormat( ( split /\|/xsm, $_, 4 )[2] ); |
| <table border="0" cellpadding="3" cellspacing="0"><tr> |
| } |
| <td><span class="small"><b>$fatxt{'28'}</b></span></td> |
| |
| <td><span class="small">$totalattachnum</span></td> |
| my $pmRemainingSpace; |
| </tr><tr> |
| if ( !$pmDirLimit ) { |
| <td><span class="small"><b>$fatxt{'29'}</b></span></td> |
| $pmRemainingSpace = "$fatxt{'23a'}"; |
| <td><span class="small">$attachment_space KB</span><br /></td> |
| } |
| </tr><tr> |
| else { |
| <td><span class="small"><b>$fatxt{'30'}</b></span></td> |
| $pmRemainingSpace = NumberFormat( ( $pmDirLimit - $pmAttachmentSpace ) ) . ' KB'; |
| <td><span class="small">$remaining_space</span></td> |
| } |
| </tr> |
| |
| </table><br /> |
| my $totalattachnum = @attachments; |
| </td> |
| my $pmTotalAttachNum = @pmAttachments; |
| </tr><tr> |
| $yymain .= qq~ |
| <td class="windowbg" height="21"> |
| <div class="bordercolor rightboxdiv"> |
| <b>$fatxt{'31'}</b><br /></td> |
| <table class="border-space pad-cell"> |
| </tr><tr> |
| <tr> |
| <td class="windowbg2"> |
| <td class="titlebg">$admin_img{'xx'} <b>$fatxt{'24'}</b></td> |
| <table border="0" cellpadding="3" cellspacing="0"> |
| </tr><tr> |
| <tr> |
| <td class="windowbg"> |
| <form action="$adminurl?action=removeoldattachments" method="post"> |
| <div class="pad-more small">$fatxt{'25'}</div> |
| <td><span class="small">$fatxt{'32'}</span></td> |
| </td> |
| <td><span class="small"><input type="text" name="maxdaysattach" size="2" value="$maxdaysattach" /> $fatxt{'58'} </span></td> |
| </tr><tr> |
| <td><input type="submit" value="$admin_txt{'32'}" class="button" /></td> |
| <td class="catbg"><b>$fatxt{'26'}</b></td> |
| </form> |
| </tr><tr> |
| </tr><tr> |
| <td class="windowbg att_h_a"> |
| <form action="$adminurl?action=removebigattachments" method="post"> |
| <b>$fatxt{'27'}</b> |
| <td><span class="small">$fatxt{'33'}</span></td> |
| </td> |
| <td><span class="small"><input type="text" name="maxsizeattach" size="2" value="$maxsizeattach" /> KB </span></td> |
| </tr><tr> |
| <td><input type="submit" value="$admin_txt{'32'}" class="button" /></td> |
| <td class="windowbg2"> |
| </form> |
| <table class="left pad-cell" style="margin-bottom:.5em"> |
| </tr><tr> |
| <tr> |
| <td colspan="3"><span class="small" style="font-weight: bold;"><a href="$adminurl?action=manageattachments2">$fatxt{'31a'}</a></span> | <span class="small" style="font-weight: bold;"><a href="$adminurl?action=rebuildattach">$fatxt{'63'}</a></span></td> |
| <td class="small"><b>$fatxt{'28'}</b></td> |
| </tr> |
| <td class="small">$totalattachnum</td> |
| |
| </tr><tr> |
| |
| <td class="small"><b>$fatxt{'29'}</b></td> |
| |
| <td class="small">$attachment_space KB<br /></td> |
| |
| </tr><tr> |
| |
| <td class="small"><b>$fatxt{'30'}</b></td> |
| |
| <td class="small">$remaining_space</td> |
| |
| </tr><tr> |
| |
| <td colspan="2"><hr /></td> |
| |
| </tr><tr> |
| |
| <td class="small"><b>$fatxt{'28a'}</b></td> |
| |
| <td class="small">$pmTotalAttachNum</td> |
| |
| </tr><tr> |
| |
| <td class="small"><b>$fatxt{'29a'}</b></td> |
| |
| <td class="small">$pmAttachmentSpace KB<br /></td> |
| |
| </tr><tr> |
| |
| <td class="small"><b>$fatxt{'30a'}</b></td> |
| |
| <td class="small">$pmRemainingSpace</td> |
| |
| </tr> |
| |
| </table> |
| |
| </td> |
| |
| </tr><tr> |
| |
| <td class="windowbg att_h_a"> |
| |
| <b>$fatxt{'31'}</b> |
| |
| </td> |
| |
| </tr><tr> |
| |
| <td class="windowbg2"> |
| |
| <form action="$adminurl?action=removeoldattachments" method="post"> |
| |
| <table class="pad-cell left" style="min-width:30%"> |
| |
| <colgroup> |
| |
| <col style="width:60%" /> |
| |
| <col style="width:20%" span="2" /> |
| |
| </colgroup> |
| |
| <tr> |
| |
| <td class="small">$fatxt{'32'}</td> |
| |
| <td class="small"><input type="text" name="maxdaysattach" size="2" value="$maxdaysattach" /> $fatxt{'58'} </td> |
| |
| <td><input type="submit" value="$admin_txt{'32'}" class="button" /></td> |
| |
| </tr> |
| |
| </table> |
| |
| </form> |
| |
| <form action="$adminurl?action=removebigattachments" method="post"> |
| |
| <table class="pad-cell left" style="min-width:30%"> |
| |
| <colgroup> |
| |
| <col style="width:60%" /> |
| |
| <col style="width:20%" span="2" /> |
| |
| </colgroup> |
| |
| <tr> |
| |
| <td><span class="small">$fatxt{'33'}</span></td> |
| |
| <td><span class="small"><input type="text" name="maxsizeattach" size="2" value="$maxsizeattach" /> KB </span></td> |
| |
| <td><input type="submit" value="$admin_txt{'32'}" class="button" /></td> |
| |
| </tr><tr> |
| |
| <td colspan="3"> |
| |
| <span class="small bold"><a href="$adminurl?action=manageattachments2">$fatxt{'31a'}</a></span> | <span class="small bold"><a href="$adminurl?action=rebuildattach">$fatxt{'63'}</a></span> |
| |
| </td> |
| |
| </tr> |
| |
| </table> |
| |
| </form> |
| |
| </td> |
| |
| </tr><tr> |
| |
| <td class="windowbg att_h_a"> |
| |
| <b>$fatxt{'31b'}</b> |
| |
| </td> |
| |
| </tr><tr> |
| |
| <td class="windowbg2"> |
| |
| <form action="$adminurl?action=removeoldpmattachments" method="post"> |
| |
| <table class="pad-cell left" style="min-width:30%"> |
| |
| <colgroup> |
| |
| <col style="width:60%" /> |
| |
| <col style="width:20%" span="2" /> |
| |
| </colgroup> |
| |
| <tr> |
| |
| <td><span class="small">$fatxt{'32a'}</span></td> |
| |
| <td><span class="small"><input type="text" name="pmmaxdaysattach" size="2" value="$pmMaxDaysAttach" /> $fatxt{'58'} </span></td> |
| |
| <td><input type="submit" value="$admin_txt{'32'}" class="button" /></td> |
| |
| </tr> |
| |
| </table> |
| |
| </form> |
| |
| <form action="$adminurl?action=removebigpmattachments" method="post"> |
| |
| <table class="pad-cell left" style="min-width:30%"> |
| |
| <colgroup> |
| |
| <col style="width:60%" /> |
| |
| <col style="width:20%" span="2" /> |
| |
| </colgroup> |
| |
| <tr> |
| |
| <td><span class="small">$fatxt{'33a'}</span></td> |
| |
| <td><span class="small"><input type="text" name="pmmaxsizeattach" size="2" value="$pmMaxSizeAttach" /> KB </span></td> |
| |
| <td><input type="submit" value="$admin_txt{'32'}" class="button" /></td> |
| |
| </tr><tr> |
| |
| <td colspan="3"> |
| |
| <span class="small bold"><a href="$adminurl?action=managepmattachments2">$fatxt{'31c'}</a></span> | <span class="small bold"><a href="$adminurl?action=rebuildpmattach">$fatxt{'63a'}</a></span> |
| |
| </td> |
| |
| </tr> |
| |
| </table> |
| |
| </form> |
| |
| </td> |
| |
| </tr> |
| </table> |
| </table> |
| </td> |
| </div>~; |
| </tr> |
| |
| </table>~; |
| $yytitle = "$fatxt{'36'}"; |
| |
| $action_area = 'manageattachments'; |
| $yytitle = "$fatxt{'36'}"; |
| AdminTemplate(); |
| $action_area = "manageattachments"; |
| return; |
| &AdminTemplate; |
| |
| } |
| } |
| |
| |
| sub RemoveOldAttachments { |
| sub RemoveOldAttachments { |
| &is_admin_or_gmod; |
| is_admin_or_gmod(); |
| |
| |
| my $maxdaysattach = $FORM{'maxdaysattach'} || $INFO{'maxdaysattach'}; |
| my $maxdaysattach = $FORM{'maxdaysattach'} || $INFO{'maxdaysattach'}; |
| if ($maxdaysattach !~ /^[0-9]+$/) { &admin_fatal_error("only_numbers_allowed"); } |
| if ( $maxdaysattach !~ /^[0-9]+$/xsm ) { |
| |
| fatal_error('only_numbers_allowed'); |
| |
| } |
| |
| |
| |
| # Set up the multi-step action |
| |
| $time_to_jump = time() + $max_process_time; |
| |
| |
| |
| automaintenance('on'); |
| |
| |
| |
| opendir ATT, $uploaddir |
| |
| || fatal_error( 'cannot_open', "$uploaddir", 1 ); |
| |
| my @attachments = sort grep { /\w+$/xsm } readdir ATT; |
| |
| closedir ATT; |
| |
| my $info; |
| |
| if ( !@attachments ) { |
| |
| fopen( ATT, ">$vardir/attachments.txt" ) |
| |
| || fatal_error( 'cannot_open', "$vardir/attachments.txt", 1 ); |
| |
| print {ATT} q{} or croak "$croak{'print'} ATT"; |
| |
| fclose(ATT); |
| |
| |
| |
| $info = qq~<br /><i>$fatxt{'48'}.</i>~; |
| |
| } |
| |
| else { |
| |
| fopen( AML, "$vardir/attachments.txt" ); |
| |
| foreach (@attachmentstxt) { |
| |
| my @line = split /\|/xsm, $_; |
| |
| $att{ $line[7] } = $line[0]; |
| |
| } |
| |
| |
| |
| if ( !exists $INFO{'next'} ) { unlink "$vardir/rem_old_attach.tmp"; } |
| |
| |
| |
| my %rem_attachments; |
| |
| for my $aa ( ( $INFO{'next'} || 0 ) .. ( @attachments - 1 ) ) { |
| |
| |
| |
| # -M => Script start time minus file modification time, in days. |
| |
| my $age = sprintf '%.2f', -M "$uploaddir/$attachments[$aa]"; |
| |
| if ( $age <= $maxdaysattach ) { |
| |
| |
| |
| # If the attachment is not too old |
| |
| $info .= qq~<br />$attachments[$aa] = $age $admin_txt{'122'}.~; |
| |
| |
| |
| } |
| |
| elsif ( exists $att{ $attachments[$aa] } ) { |
| |
| $rem_attachments{ $att{ $attachments[$aa] } } .= |
| |
| $rem_attachments{ $att{ $attachments[$aa] } } |
| |
| ? "|$attachments[$aa]" |
| |
| : $attachments[$aa]; |
| |
| $info .= |
| |
| qq~<br /><i>$attachments[$aa]</i> $fatxt{'1'} = $age $admin_txt{'122'}.~; |
| |
| } |
| |
| |
| |
| if ( $time_to_jump < time() && ( $aa + 1 ) < @attachments ) { |
| |
| |
| |
| # save the $info of this run until the end of 'RemoveOldAttachments' |
| |
| fopen( FILE, ">>$vardir/rem_old_attach.tmp" ) |
| |
| || fatal_error( 'cannot_open', |
| |
| "$vardir/rem_old_attach.tmp", 1 ); |
| |
| print $info or croak "$croak{'print'} rem_old_attach"; |
| |
| fclose(FILE); |
| |
| |
| |
| $yySetLocation = |
| |
| qq~$adminurl?action=removeoldattachments;maxdaysattach=$maxdaysattach;next=~ |
| |
| . ( $aa + 1 - RemoveAttachments( \%rem_attachments ) ); |
| |
| redirectexit(); |
| |
| } |
| |
| } |
| |
| RemoveAttachments( \%rem_attachments ); |
| |
| } |
| |
| |
| |
| automaintenance('off'); |
| |
| |
| |
| $yymain .= qq~<b>$fatxt{'32'} $maxdaysattach $fatxt{'58'}.</b><br />~; |
| |
| |
| |
| fopen( FILE, "$vardir/rem_old_attach.tmp" ); |
| |
| |
| |
| # $yymain .= join( q{}, <FILE> ) . $info; |
| |
| $yymain .= do { local $INPUT_RECORD_SEPARATOR = undef; <FILE> } |
| |
| . $info; |
| |
| fclose(FILE); |
| |
| unlink "$vardir/rem_old_attach.tmp"; |
| |
| |
| |
| fopen( FILE, ">$vardir/oldestattach.txt" ); |
| |
| print {FILE} $maxdaysattach or croak "$croak{'print'} oldestattach"; |
| |
| fclose(FILE); |
| |
| |
| |
| $yytitle = "$fatxt{'34'} $maxdaysattach"; |
| |
| $action_area = 'removeoldattachments'; |
| |
| AdminTemplate(); |
| |
| return; |
| |
| } |
| |
| |
| # Set up the multi-step action |
| sub RemoveBigAttachments { |
| $time_to_jump = time() + $max_process_time; |
| is_admin_or_gmod(); |
| |
| |
| &automaintenance('on'); |
| my $maxsizeattach = $FORM{'maxsizeattach'} || $INFO{'maxsizeattach'}; |
| |
| if ( $maxsizeattach !~ /^[0-9]+$/xsm ) { |
| opendir(ATT, $uploaddir) || &admin_fatal_error('cannot_open', "$uploaddir", 1); |
| fatal_error('only_numbers_allowed'); |
| my @attachments = sort( grep(/\w+$/, readdir(ATT)) ); |
| } |
| closedir(ATT); |
| |
| |
| # Set up the multi-step action |
| fopen(AML, "$vardir/attachments.txt"); |
| $time_to_jump = time() + $max_process_time; |
| my @attachmentstxt = <AML>; |
| |
| fclose(AML); |
| automaintenance('on'); |
| |
| |
| my (%att,@line); |
| opendir ATT, $uploaddir |
| foreach (@attachmentstxt) { |
| || fatal_error( 'cannot_open', "$uploaddir", 1 ); |
| @line = split(/\|/, $_); |
| my @attachments = sort grep { /\w+$/xsm } readdir ATT; |
| $att{$line[7]} = $line[0]; |
| closedir ATT; |
| } |
| my %filelist = (); |
| |
| foreach my $i (@attachments) { |
| my $info; |
| $filelist{$i} = 1; |
| if (!@attachments) { |
| } |
| fopen(ATT, ">$vardir/attachments.txt") || &admin_fatal_error("cannot_open","$vardir/attachments.txt", 1); |
| |
| print ATT ''; |
| fopen( FILE, "$vardir/attachments.txt" ); |
| fclose(ATT); |
| @attachmentstxt = <FILE>; |
| |
| fclose(FILE); |
| $info = qq~<br /><i>$fatxt{'48'}.</i>~; |
| |
| |
| my ( %att, @line ); |
| } else { |
| foreach (@attachmentstxt) { |
| unlink("$vardir/rem_old_attach.tmp") unless exists $INFO{'next'}; |
| @line = split /\|/xsm, $_; |
| |
| if ( $filelist{$line[7]} ) { |
| my %rem_attachments; |
| $att{ $line[7] } = $line[0]; |
| for (my $a = ($INFO{'next'} || 0); $a < @attachments; $a++) { |
| } |
| # -M => Script start time minus file modification time, in days. |
| } |
| my $age = sprintf("%.2f", -M "$uploaddir/$attachments[$a]"); |
| |
| if ($age <= $maxdaysattach) { |
| my $info; |
| # If the attachment is not too old |
| if ( !@attachments ) { |
| $info .= qq~<br />$attachments[$a] = $age $admin_txt{'122'}.~; |
| fopen( ATT, ">$vardir/attachments.txt" ) |
| |
| || fatal_error( 'cannot_open', "$vardir/attachments.txt", 1 ); |
| } elsif (exists $att{$attachments[$a]}) { |
| print {ATT} q{} or croak "$croak{'print'} ATT"; |
| $rem_attachments{$att{$attachments[$a]}} .= $rem_attachments{$att{$attachments[$a]}} ? "|$attachments[$a]" : $attachments[$a]; |
| fclose(ATT); |
| $info .= qq~<br /><i>$attachments[$a]</i> $fatxt{'1'} = $age $admin_txt{'122'}.~; |
| |
| } |
| $info = qq~<br /><i>$fatxt{'48'}.</i>~; |
| |
| } |
| if ($time_to_jump < time() && ($a + 1) < @attachments) { |
| else { |
| # save the $info of this run until the end of 'RemoveOldAttachments' |
| if ( !exists $INFO{'next'} ) { unlink "$vardir/rem_big_attach.tmp"; } |
| fopen(FILE, ">>$vardir/rem_old_attach.tmp") || &admin_fatal_error('cannot_open', "$vardir/rem_old_attach.tmp", 1); |
| |
| print $info; |
| my (%rem_attachments); |
| fclose(FILE); |
| for my $aa ( ( $INFO{'next'} || 0 ) .. ( @attachments - 1 ) ) { |
| |
| my $size = sprintf '%.2f', |
| $yySetLocation = qq~$adminurl?action=removeoldattachments;maxdaysattach=$maxdaysattach;next=~ . ($a + 1 - &RemoveAttachments(\%rem_attachments)); |
| ( ( -s "$uploaddir/$attachments[$aa]" ) / 1024 ); |
| &redirectexit; |
| if ( $size <= $maxsizeattach ) { |
| } |
| |
| } |
| # If the attachment is not too big |
| |
| $info .= qq~<br />$attachments[$aa] = $size KB~; |
| &RemoveAttachments(\%rem_attachments); |
| |
| } |
| } |
| |
| elsif ( exists $att{ $attachments[$aa] } ) { |
| &automaintenance('off'); |
| $rem_attachments{ $att{ $attachments[$aa] } } .= |
| |
| $rem_attachments{ $att{ $attachments[$aa] } } |
| $yymain .= qq~<b>$fatxt{'32'} $maxdaysattach $fatxt{'58'}.</b><br />~; |
| ? "|$attachments[$aa]" |
| |
| : $attachments[$aa]; |
| fopen(FILE, "$vardir/rem_old_attach.tmp"); |
| $info .= |
| $yymain .= join('', <FILE>) . $info; |
| qq~<br /><i>$attachments[$aa]</i> $fatxt{'1'} = $size KB~; |
| fclose(FILE); |
| } |
| unlink("$vardir/rem_old_attach.tmp"); |
| if ( $time_to_jump < time() && ( $aa + 1 ) < @attachments ) { |
| |
| |
| fopen(FILE, ">$vardir/oldestattach.txt"); |
| # save the $info of this run until the end of 'RemoveBigAttachments' |
| print FILE $maxdaysattach; |
| fopen( FILE, ">>$vardir/rem_big_attach.tmp" ) |
| fclose(FILE); |
| || fatal_error( 'cannot_open', |
| |
| "$vardir/rem_big_attach.tmp", 1 ); |
| $yytitle = "$fatxt{'34'} $maxdaysattach"; |
| print $info or croak "$croak{'print'} rem_big_attach"; |
| $action_area = "removeoldattachments"; |
| fclose(FILE); |
| &AdminTemplate; |
| |
| |
| $yySetLocation = |
| |
| qq~$adminurl?action=removebigattachments;maxsizeattach=$maxsizeattach;next=~ |
| |
| . ( $aa + 1 - RemoveAttachments( \%rem_attachments ) ); |
| |
| redirectexit(); |
| |
| } |
| |
| } |
| |
| |
| |
| RemoveAttachments( \%rem_attachments ); |
| |
| } |
| |
| |
| |
| $yymain .= qq~<b>$fatxt{'33'} $maxsizeattach KB.</b><br />~; |
| |
| |
| |
| fopen( FILE, "$vardir/rem_big_attach.tmp" ); |
| |
| |
| |
| # $yymain .= join( q{}, <FILE> ) . $info; |
| |
| $yymain .= do { local $INPUT_RECORD_SEPARATOR = undef; <FILE> } |
| |
| . $info; |
| |
| fclose(FILE); |
| |
| unlink "$vardir/rem_big_attach.tmp"; |
| |
| |
| |
| fopen( FILE, ">$vardir/maxattachsize.txt" ); |
| |
| print {FILE} $maxsizeattach or croak "$croak{'print'} FILE"; |
| |
| fclose(FILE); |
| |
| |
| |
| automaintenance('off'); |
| |
| |
| |
| $yytitle = "$fatxt{'35'} $maxsizeattach KB"; |
| |
| $action_area = 'removebigattachments'; |
| |
| AdminTemplate(); |
| |
| return; |
| } |
| } |
| |
| |
| sub RemoveBigAttachments { |
| sub Attachments2 { |
| &is_admin_or_gmod; |
| is_admin_or_gmod(); |
| |
| |
| my $maxsizeattach = $FORM{'maxsizeattach'} || $INFO{'maxsizeattach'}; |
| fopen( AML, "$vardir/attachments.txt" ); |
| if ($maxsizeattach !~ /^[0-9]+$/) { &admin_fatal_error("only_numbers_allowed"); } |
| my @attachinput = <AML>; |
| |
| fclose(AML); |
| |
| my $max = @attachinput; |
| |
| |
| |
| my $action = $INFO{'action'}; |
| |
| my $sort = $INFO{'sort'} || 6; |
| |
| my $newstart = $INFO{'newstart'} || 0; |
| |
| |
| |
| if ( !$max ) { |
| |
| $viewattachments .= |
| |
| qq~<tr><td class="windowbg2 padd-cell center" colspan="8"><b><i>$fatxt{'48'}</i></b></td></tr>~; |
| |
| } |
| |
| else { |
| |
| $yymain .= qq~ |
| |
| <script type="text/javascript"> |
| |
| function checkAll() { |
| |
| for (var i = 0; i < document.del_attachments.elements.length; i++) { |
| |
| document.del_attachments.elements[i].checked = true; |
| |
| } |
| |
| } |
| |
| function uncheckAll() { |
| |
| for (var i = 0; i < document.del_attachments.elements.length; i++) { |
| |
| document.del_attachments.elements[i].checked = false; |
| |
| } |
| |
| } |
| |
| </script> |
| |
| <form name="del_attachments" action="$adminurl?action=deleteattachment" method="post" style="display: inline;">~; |
| |
| |
| |
| my @attachments; |
| |
| if ( $sort > 0 ) { # sort ascending |
| |
| if ( $sort == 5 || $sort == 6 || $sort == 8 ) { |
| |
| @attachments = sort { |
| |
| ( split /\|/xsm, $a )[$sort] |
| |
| <=> ( split /\|/xsm, $b )[$sort]; |
| |
| } @attachinput; # sort size, date, count numerically |
| |
| } |
| |
| elsif ( $sort == 100 ) { |
| |
| @attachments = sort { |
| |
| lc( ( split /\./xsm, ( split /\|/xsm, $a )[7] )[1] ) cmp |
| |
| lc( ( split /\./xsm, ( split /\|/xsm, $b )[7] )[1] ); |
| |
| } @attachinput; # sort extension lexically |
| |
| } |
| |
| else { |
| |
| @attachments = sort { |
| |
| lc( ( split /\|/xsm, $a )[$sort] ) cmp |
| |
| lc( ( split /\|/xsm, $b )[$sort] ); |
| |
| } @attachinput; # sort lexically |
| |
| } |
| |
| } |
| |
| else { # sort descending |
| |
| if ( $sort == -5 || $sort == -6 || $sort == -8 ) { |
| |
| @attachments = reverse sort { |
| |
| ( split /\|/xsm, $a )[ -$sort ] |
| |
| <=> ( split /\|/xsm, $b )[ -$sort ]; |
| |
| } @attachinput; # sort size, date, count numerically |
| |
| } |
| |
| elsif ( $sort == -100 ) { |
| |
| @attachments = reverse sort { |
| |
| lc( ( split /\./xsm, ( split /\|/xsm, $a )[7] )[1] ) cmp |
| |
| lc( ( split /\./xsm, ( split /\|/xsm, $b )[7] )[1] ); |
| |
| } @attachinput; # sort extension lexically |
| |
| } |
| |
| else { |
| |
| @attachments = reverse sort { |
| |
| lc( ( split /\|/xsm, $a )[ -$sort ] ) cmp |
| |
| lc( ( split /\|/xsm, $b )[ -$sort ] ); |
| |
| } @attachinput; # sort lexically |
| |
| } |
| |
| } |
| |
| |
| |
| $postdisplaynum = 8; |
| |
| $newstart = ( int( $newstart / 25 ) ) * 25; |
| |
| $tmpa = 1; |
| |
| if ( $newstart >= ( ( $postdisplaynum - 1 ) * 25 ) ) { |
| |
| $startpage = $newstart - ( ( $postdisplaynum - 1 ) * 25 ); |
| |
| $tmpa = int( $startpage / 25 ) + 1; |
| |
| } |
| |
| if ( $max >= $newstart + ( $postdisplaynum * 25 ) ) { |
| |
| $endpage = $newstart + ( $postdisplaynum * 25 ); |
| |
| } |
| |
| else { $endpage = $max; } |
| |
| if ( $startpage > 0 ) { |
| |
| $pageindex = |
| |
| qq~<a href="$adminurl?action=$action;newstart=0;sort=$sort" class="norm">1</a> ... ~; |
| |
| } |
| |
| if ( $startpage == 25 ) { |
| |
| $pageindex = |
| |
| qq~<a href="$adminurl?action=$action;newstart=0;sort=$sort" class="norm">1</a> ~; |
| |
| } |
| |
| foreach my $counter ( $startpage .. ( $endpage - 1 ) ) { |
| |
| if ( $counter % 25 == 0 ) { |
| |
| $pageindex .= |
| |
| $newstart == $counter |
| |
| ? qq~<b>$tmpa</b> ~ |
| |
| : qq~<a href="$adminurl?action=$action;newstart=$counter;sort=$sort" class="norm">$tmpa</a> ~; |
| |
| $tmpa++; |
| |
| } |
| |
| } |
| |
| $lastpn = int( $max / 25 ) + 1; |
| |
| $lastptn = ( $lastpn - 1 ) * 25; |
| |
| if ( $endpage < $max - (25) ) { $pageindexadd = q~... ~; } |
| |
| if ( $endpage != $max ) { |
| |
| $pageindexadd .= |
| |
| qq~<a href="$adminurl?action=$action;newstart=$lastptn;sort=$sort">$lastpn</a>~; |
| |
| } |
| |
| $pageindex .= $pageindexadd; |
| |
| |
| |
| $pageindex = |
| |
| qq~<div class="small" style="line-height: 2.5em; float: right; text-align: right; vertical-align: middle;">$fatxt{'64'}: $pageindex</div>~; |
| |
| |
| |
| $numbegin = ( $newstart + 1 ); |
| |
| $numend = ( $newstart + 25 ); |
| |
| if ( $numend > $max ) { $numend = $max; } |
| |
| if ( $max == 0 ) { $numshow = q{}; } |
| |
| else { $numshow = qq~($numbegin - $numend)~; } |
| |
| |
| |
| my ( %attach_gif, $ext ); |
| |
| foreach my $row ( splice @attachments, $newstart, 25 ) { |
| |
| chomp $row; |
| |
| my ( |
| |
| $amthreadid, $amreplies, $amthreadsub, |
| |
| $amposter, $amcurrentboard, $amkb, |
| |
| $amdate, $amfn, $amcount |
| |
| ) = split /\|/xsm, $row; |
| |
| |
| |
| if ( $amfn =~ /\.(.+?)$/xsm ) { |
| |
| $ext = $1; |
| |
| } |
| |
| if ( !exists $attach_gif{$ext} ) { |
| |
| $attach_gif{$ext} = |
| |
| ( $ext && -e "$htmldir/Templates/Forum/$useimages/$ext.gif" ) |
| |
| ? "$ext.gif" |
| |
| : 'paperclip.gif'; |
| |
| } |
| |
| |
| |
| $amdate = timeformat($amdate); |
| |
| $amkb = NumberFormat($amkb); |
| |
| if ( length($amthreadsub) > 30 ) { |
| |
| $amthreadsub = substr( $amthreadsub, 0, 30 ) . q{...}; |
| |
| } |
| |
| my $amfna = $amfn; |
| |
| if ( length($amfn) > 30 ) { |
| |
| $amfna = substr( $amfna, 0, 30 ) . q{...}; |
| |
| } |
| |
| $viewattachments .= qq~<tr> |
| |
| <td class="windowbg2 center"><input type="checkbox" name="del_$amthreadid" value="$amfn" /></td> |
| |
| <td class="windowbg2"><a href="$uploadurl/$amfn" target="_blank">$amfna</a></td> |
| |
| <td class="windowbg2 center"><img src="$imagesdir/$attach_gif{$ext}" class="bottom" alt="" /></td> |
| |
| <td class="windowbg2 right">$amkb KB</td> |
| |
| <td class="windowbg2 center">$amdate</td> |
| |
| <td class="windowbg2 right">$amcount</td> |
| |
| <td class="windowbg2"><a href="$scripturl?num=$amthreadid/$amreplies#$amreplies" target="_blank">$amthreadsub</a></td> |
| |
| <td class="windowbg2 center">$amposter</td> |
| |
| </tr>~; |
| |
| } |
| |
| |
| |
| $viewattachments .= qq~<tr> |
| |
| <td class="catbg center"> |
| |
| <input type="checkbox" name="checkall" id="checkall" value="" onclick="if(this.checked){checkAll();}else{uncheckAll();}" /> |
| |
| </td> |
| |
| <td class="catbg" colspan="7"> |
| |
| <div class="small" style="float: left; text-align: left;"> |
| |
| <= <label for="checkall">$amv_txt{'38'}</label> <input type="submit" value="$admin_txt{'32'}" class="button" /> |
| |
| </div> |
| |
| $pageindex |
| |
| </td> |
| |
| </tr>~; |
| |
| |
| |
| $yymain .= qq~ |
| |
| <input type="hidden" name="newstart" value="$newstart" />~; |
| |
| } |
| |
| |
| |
| my $class_sortattach = $sort =~ /7/sm ? 'catbg' : 'windowbg'; |
| |
| my $class_sorttype = $sort =~ /100/sm ? 'catbg' : 'windowbg'; |
| |
| my $class_sortsize = $sort =~ /5/sm ? 'catbg' : 'windowbg'; |
| |
| my $class_sortdate = $sort =~ /6/sm ? 'catbg' : 'windowbg'; |
| |
| my $class_sorcount = $sort =~ /8/sm ? 'catbg' : 'windowbg'; |
| |
| my $class_sortsubj = $sort =~ /2/sm ? 'catbg' : 'windowbg'; |
| |
| my $class_sortuser = $sort =~ /3/sm ? 'catbg' : 'windowbg'; |
| |
| |
| |
| my $rsort; |
| |
| |
| |
| $yymain .= qq~ |
| |
| <div class="bordercolor rightboxdiv"> |
| |
| <table class="border-space pad-cell"> |
| |
| <colgroup> |
| |
| <col style="width:7%" /> |
| |
| <col style="width:18%" /> |
| |
| <col style="width:5%" /> |
| |
| <col style="width:7%" /> |
| |
| <col style="width:23%" /> |
| |
| <col style="width:5%" /> |
| |
| <col style="width:22%" /> |
| |
| <col style="width:13%" /> |
| |
| </colgroup> |
| |
| <tr> |
| |
| <td class="titlebg" colspan="8"> |
| |
| $admin_img{'xx'} <b>$fatxt{'39'}</b> |
| |
| </td> |
| |
| </tr><tr> |
| |
| <td class="windowbg" colspan="8"> |
| |
| <div class="pad-more small">$fatxt{'38'}</div> |
| |
| </td> |
| |
| </tr><tr> |
| |
| <td class="titlebg center" colspan="8"><b>$fatxt{'55'}</b></td> |
| |
| </tr><tr> |
| |
| <td class="catbg att_h_b" colspan="8"> |
| |
| <div class="small" style="float: left; text-align: left;">$fatxt{'28'} $max $numshow</div> |
| |
| $pageindex |
| |
| </td> |
| |
| </tr><tr class="att_h_b">~; |
| |
| $rsort = ( $sort == 7 ? -7 : 7 ); |
| |
| $yymain .= qq~ |
| |
| <td class="$class_sortattach center att"><b>$fatxt{'6c'}</b></td> |
| |
| <td onclick="location.href='$adminurl?action=manageattachments2;sort=$rsort';" class="$class_sortattach center att"> |
| |
| <a href="$adminurl?action=manageattachments2;sort=$rsort"><b>$fatxt{'40'}</b></a> |
| |
| </td>~; |
| |
| $rsort = ( $sort == 100 ? -100 : 100 ); |
| |
| $yymain .= qq~ |
| |
| <td onclick="location.href='$adminurl?action=manageattachments2;sort=$rsort';" class="$class_sorttype center att"> |
| |
| <a href="$adminurl?action=manageattachments2;sort=$rsort"><b>$fatxt{'40a'}</b></a> |
| |
| </td>~; |
| |
| $rsort = ( $sort == 5 ? -5 : 5 ); |
| |
| $yymain .= qq~ |
| |
| <td onclick="location.href='$adminurl?action=manageattachments2;sort=$rsort';" class="$class_sortsize center att"> |
| |
| <a href="$adminurl?action=manageattachments2;sort=$rsort"><b>$fatxt{'41'}</b></a> |
| |
| </td>~; |
| |
| $rsort = ( $sort == 6 ? -6 : 6 ); |
| |
| $yymain .= qq~ |
| |
| <td onclick="location.href='$adminurl?action=manageattachments2;sort=$rsort';" class="$class_sortdate center att"> |
| |
| <a href="$adminurl?action=manageattachments2;sort=$rsort"><b>$fatxt{'43'}</b></a> |
| |
| </td>~; |
| |
| $rsort = ( $sort == 8 ? -8 : 8 ); |
| |
| $yymain .= qq~ |
| |
| <td onclick="location.href='$adminurl?action=manageattachments2;sort=$rsort';" class="$class_sorcount center att"> |
| |
| <a href="$adminurl?action=manageattachments2;sort=$rsort"><b>$fatxt{'41a'}</b></a> |
| |
| </td>~; |
| |
| $rsort = ( $sort == 2 ? -2 : 2 ); |
| |
| $yymain .= qq~ |
| |
| <td onclick="location.href='$adminurl?action=manageattachments2;sort=$rsort';" class="$class_sortsubj center att"> |
| |
| <a href="$adminurl?action=manageattachments2;sort=$rsort"><b>$fatxt{'44'}</b></a> |
| |
| </td>~; |
| |
| $rsort = ( $sort == 3 ? -3 : 3 ); |
| |
| $yymain .= qq~ |
| |
| <td onclick="location.href='$adminurl?action=manageattachments2;sort=$rsort';" class="$class_sortuser center att"> |
| |
| <a href="$adminurl?action=manageattachments2;sort=$rsort"><b>$fatxt{'42'}</b></a> |
| |
| </td> |
| |
| </tr> |
| |
| $viewattachments |
| |
| </table> |
| |
| </div>~; |
| |
| |
| # Set up the multi-step action |
| if ($max) { $yymain .= '</form>'; } |
| $time_to_jump = time() + $max_process_time; |
| |
| |
| |
| &automaintenance('on'); |
| $yytitle = "$fatxt{'37'}"; |
| |
| $action_area = 'manageattachments'; |
| opendir(ATT, $uploaddir) || &admin_fatal_error('cannot_open', "$uploaddir", 1); |
| AdminTemplate(); |
| my @attachments = sort( grep(/\w+$/, readdir(ATT)) ); |
| return; |
| closedir(ATT); |
| |
| |
| |
| fopen(FILE, "$vardir/attachments.txt"); |
| |
| @attachmentstxt = <FILE>; |
| |
| fclose(FILE); |
| |
| |
| |
| my (%att,@line); |
| |
| foreach (@attachmentstxt) { |
| |
| @line = split(/\|/, $_); |
| |
| $att{$line[7]} = $line[0]; |
| |
| } |
| |
| |
| |
| my $info; |
| |
| if (!@attachments) { |
| |
| fopen(ATT, ">$vardir/attachments.txt") || &admin_fatal_error("cannot_open","$vardir/attachments.txt", 1); |
| |
| print ATT ''; |
| |
| fclose(ATT) |