86 lines
1.9 KiB
Perl
86 lines
1.9 KiB
Perl
|
|
#!/usr/bin/perl
|
||
|
|
|
||
|
|
use v5.10;
|
||
|
|
use strict;
|
||
|
|
BEGIN { require "$ENV{LJHOME}/cgi-bin/ljlib.pl"; }
|
||
|
|
|
||
|
|
use Getopt::Long;
|
||
|
|
|
||
|
|
use DW::BlobStore;
|
||
|
|
use DW::Media;
|
||
|
|
|
||
|
|
sub usage {
|
||
|
|
die "Usage: $0 -u USER MEDIAID\n";
|
||
|
|
}
|
||
|
|
|
||
|
|
my ( $user, $versionid );
|
||
|
|
GetOptions( 'user=s' => \$user, );
|
||
|
|
if (@ARGV) {
|
||
|
|
if ( $ARGV[0] =~ /^\d+$/ ) {
|
||
|
|
$versionid = shift;
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
usage();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
usage();
|
||
|
|
}
|
||
|
|
|
||
|
|
my $u = LJ::load_user($user)
|
||
|
|
or usage();
|
||
|
|
|
||
|
|
# Select row from media_versions
|
||
|
|
my @mv =
|
||
|
|
$u->selectrow_array( "SELECT mediaid FROM media_versions" . " WHERE userid=? AND versionid=?",
|
||
|
|
undef, $u->id, $versionid );
|
||
|
|
unless (@mv) {
|
||
|
|
say 'User has no matching media, nothing to do.';
|
||
|
|
exit 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
my ($mediaid) = @mv;
|
||
|
|
|
||
|
|
if ( $mediaid == $versionid ) {
|
||
|
|
|
||
|
|
# this is the original, so the corresponding row in
|
||
|
|
# the media table needs to have its state updated
|
||
|
|
$u->do( "UPDATE media SET state='D' WHERE userid=? AND mediaid=?", undef, $u->id, $mediaid );
|
||
|
|
if ( $u->err ) {
|
||
|
|
say "Error updating media table: " . $u->errstr;
|
||
|
|
exit 1;
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
say "User's mediaid $mediaid has been marked as deleted.";
|
||
|
|
}
|
||
|
|
|
||
|
|
# next, find any resized versions and queue them for deletion as well
|
||
|
|
my @thumbs = $u->selectrow_array(
|
||
|
|
"SELECT versionid FROM media_versions WHERE userid=? AND mediaid=?"
|
||
|
|
. " AND mediaid != versionid",
|
||
|
|
undef, $u->id, $mediaid
|
||
|
|
);
|
||
|
|
push @mv, @thumbs;
|
||
|
|
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
@mv = ($versionid);
|
||
|
|
}
|
||
|
|
|
||
|
|
foreach my $id (@mv) {
|
||
|
|
|
||
|
|
# create a fake object to get the mogkey
|
||
|
|
my $fakeobj = bless { userid => $u->id, versionid => $id }, 'DW::Media::Photo';
|
||
|
|
my $mogkey = $fakeobj->mogkey;
|
||
|
|
|
||
|
|
# attempt to delete the file
|
||
|
|
if ( DW::BlobStore->delete( media => $mogkey ) ) {
|
||
|
|
say "File $mogkey has been deleted.";
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
say "File $mogkey was not deleted (not found).";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
exit 0;
|