diff options
Diffstat (limited to 'lib/files.pm')
| -rw-r--r-- | lib/files.pm | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/lib/files.pm b/lib/files.pm new file mode 100644 index 0000000..71ccafa --- /dev/null +++ b/lib/files.pm @@ -0,0 +1,241 @@ + + +######################################################## +# FILES +######################################################## + +sub zip_this_button + { + my ($t) = @_; + + return if ($USER == -1); + return if (check_key($t->{display}, "no-zip-button")); + return if (check_key($t->{display}, "nfl")); + if ($t->{zipped} == -1) + { + print qq!<div class="message">!; + my $zip = retrieve_zip_mechanism($t); + if ($zip != -1) + { + print qq!<small><b>A ZIP OF THESE FILES IS AVAILABLE:<br><a href="$live_path/$t->{id}/$zip">$zip</a></b></small>!; + } + else + { + print qq!<small><b>FOLDER ARCHIVAL IN PROGRESS</small><br>!; + print qq!<big><a href="$BUCKY/details/$t->{id}">CLICK HERE</a></big><small> IN A MOMENT</b></small>!; + } + print qq!</div>\n!; + } + elsif ($t->{zipped} == 0 && ($t->{files} > 10 || ($t->{files} > 3 && $t->{size} < 160*1024*1024))) + { + onebutton($t->{id}, "zip", "ZIP THESE FILES"); + } + elsif ($t->{zipped} == 1) + { + my $zipfile = generate_zip_filename($t); + if (! -e qq!$data_path/$t->{id}/$zipfile!) + { + update_thread_zipped($t->{id}, 0); + onebutton($t->{id}, "zip", "ZIP THESE FILES"); + } + else + { + print qq!<div class="message">!; + print qq!<small><b>A ZIP OF THESE FILES IS AVAILABLE:<br><a href="$live_path/$t->{id}/$zipfile">$zipfile</a></b></small>!; + print qq!</div>\n!; + } + } + } + +sub retrieve_zip_mechanism + { + my ($t) = @_; + my $zipfile = generate_zip_filename($t); + if (-e qq!$data_path/$t->{id}/$zipfile!) + { + my @stats = stat(qq!$data_path/$t->{id}/$zipfile!); + my $size = $stats[7]; + my $date = $stats[9]; + add_file($t->{id}, $t->{username}, $zipfile, $size, $date); + update_thread_zipped($t->{id}, 1); + update_thread_size($t->{id}, $t->{size}); + system($CHMOD_PATH, "644", "$data_path/$t->{id}/$zipfile"); + $t->{zipped} = 1; + return $zipfile; + } + return -1; + } + +sub generate_zip_filename + { + my ($t) = @_; + my $cleantitle = $t->{title}; + $cleantitle =~ s/\W//g; + $cleantitle =~ s/^\s+//; + $cleantitle =~ s/\s+$//; + return qq($cleantitle.zip); + } + +sub situate_files + { + my ($pid, $uname) = @_; + my ($filename, $size, $date); + my $newfilename; + my $totalsize = 0; + + foreach my $k (keys %$input) + { + next if ($k !~ /^file/); + next if (! -e $temp_path."/".$$input{$k}); + $filename = $$input{$k}; + + if ($filename =~ /temp_$/) + { system("$RM_PATH", $temp_path."/".$filename); } + else + { + print $filename if ($DEBUG); + if (! -e $data_path."/".$pid) + { + print "creating $data_path/$pid<br>\n" if $DEBUG; + system("$MKDIR_PATH", $data_path."/".$pid); + system("$MKDIR_PATH", $data_path."/".$pid."/.thumb"); + system("$CHMOD_PATH", "755", $data_path."/".$pid); + system("$CHMOD_PATH", "755", $data_path."/".$pid."/.thumb"); + } + + @stats = stat($temp_path."/".$filename); + $size = $stats[7]; + $date = $stats[9]; + + $newfilename = $filename; + $newfilename =~ s/temp_//; + my $tfile = $newfilename; + my $i = 2; + while (-e $data_path."/".$pid."/".$tfile) + { + $tfile = $newfilename; + $tfile =~ s/(\....)$/-$i$1/; + $i++; + } + $newfilename = $tfile; + system("$MV_PATH", $temp_path."/".$filename, $data_path."/".$pid."/".$newfilename); + + add_file($pid, $uname, $newfilename, $size, $date); + $totalsize += $size; + } + } + update_thread_size($pid); + update_thread_zipped($pid, 0); + } + + +sub flush_files + { + foreach my $k (keys %$input) + { + next if ($k !~ /^file/); + next if (! -e $temp_path."/".$input->{$k}); + $filename = $input->{$k}; + system("$RM_PATH", $temp_path."/".$filename); + } + } + +sub file_list + { + my ($files, $cbox, $whitelist, $skip_images, $sorty) = @_; + my $r = 0; + my $size = 0; + + return if ($files == -1); + if (!defined($cbox)) { $cbox = 0; } + if (!defined($whitelist)) { $whitelist = 0; } + if (!defined($skip_images)) { $skip_images = 0; } + return if (@$files == $skip_images); + + if ($DEBUG) + { + print qq!Printing file list. File ids:!; + for (my $i = 0; $i < @$files; $i++) + { print $files->[$i]{id}." "; } + print qq!<p>\n\n!; + } + + print <<FILES; +<table border=0 cellpadding=0 cellspacing=0 class="main"> +FILES + +# if ($sorty eq "size") + if ($0 !~ /(details|maintain)/) + { $sorty = sub { sort {$b->{date} <=> $a->{date}} @_ }; } + else + { $sorty = sub { sort {lc($a->{filename}) cmp lc($b->{filename})} @_ }; } + foreach my $file ($sorty->(@$files)) + { + next if (($file->{username} ne $USER->{username}) && $file->{private} && !$whitelist && $USER->{ulevel} != 3); + next if ($skip_images && $file->{filename} =~ /\.(jpe?g|gif|png)/i); + display_file($file, $r, $cbox); + $size += $file->{size}; + $r = $r ? 0 : 1; + } + + print '<tr>'; + print '<td colspan=5 align="right" style="border-top: 1px dotted #ccc;">'; + print qq!total size: !.hushsize($size, 1, 1).qq!</td></tr></table>\n\n!; + } + +sub display_file + { + my ($f, $r, $cbox) = @_; + my $color = carbondate($f->{date}); + my $checked = 0; + my $bright = 0; + $checked = check_key($cbox, $f->{id}); + + if ($DEBUG) + { + print qq!Displaying file $f->{id}!; + print qq! (checked)! if ($checked); + print qq!<br>\n!; + } + + print qq[<tr class="row$r">]; + if ($cbox) + { + print qq!<td align="right"><input type="checkbox" name="file$f->{id}" value="$f->{id}"!; + print " checked" if ($checked); + print qq!></td>!; + } + + if ($0 !~ /(details|maintain)/) + { + print qq[<td align="left"><small><a href="$BUCKY/details/$f->{thread}" class="quietlink">go to post ></a></small></td>]; + } + + if ((time - $f->{date}) < 150000 || $checked) + { print qq[<td align="left" nowrap class="filename bright">]; } + else + { print qq[<td align="left" nowrap class="filename">]; } + if (length($f->{filename}) > 50) + { + my $filen = substr $f->{filename}, 0, 47; + my $filext = substr $f->{filename}, -4, 4; + print qq[<a href="$live_path/$f->{thread}/$f->{filename}">$filen..$filext</a>]; + } + else + { + print qq[<a href="$live_path/$f->{thread}/$f->{filename}">$f->{filename}</a>]; + } + print qq[</td>]; + + my ($date, $time) = verbosedatetime($f->{date}); + +# print qq[<td align="left" nowrap><small><span class="$color">]. (get_age($f->{date})), qq[</span></small></td>]; + print qq[<td align="right" nowrap><span class="$color">$date</span></td>]; + print qq[<td align="left" nowrap><small> <span class="$color">$time</span></small></td>]; + print qq[<td class="filesize" nowrap><small>], hushsize($f->{size},2), qq[</small></td>]; + print qq[<td align="left"><small><a href="$BUCKY/profile/$f->{username}" class="quietlink quiet">$f->{username}</a></small> </td>]; + print qq[</tr>\n]; + } + +1; + |
