summaryrefslogtreecommitdiff
path: root/lib/files.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/files.pm')
-rw-r--r--lib/files.pm241
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&nbsp;to&nbsp;post&nbsp;&gt;</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>&nbsp;<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>&nbsp;</td>];
+ print qq[</tr>\n];
+ }
+
+1;
+