Revision 19727dec
Von Tamino Steinert vor 12 Monaten hinzugefügt
SL/Controller/File.pm | ||
---|---|---|
my ($self, $do_unimport, $infotext) = @_;
|
||
my $files = '';
|
||
my $ids = $::form->{ids};
|
||
foreach my $id_version (@{ $::form->{$ids} || [] }) {
|
||
my ($id, $version) = split /_/, $id_version;
|
||
my $dbfile = SL::File->get(id => $id);
|
||
if ( $dbfile ) {
|
||
if ( $version ) {
|
||
$dbfile->version($version);
|
||
$files .= ' ' . $dbfile->file_name if $dbfile->delete_version;
|
||
} else {
|
||
$files .= ' ' . $dbfile->file_name if $dbfile->delete;
|
||
}
|
||
foreach my $version_guid (@{ $::form->{$ids} || [] }) {
|
||
my $dbfile = SL::File->get(guid => $version_guid);
|
||
if ($dbfile) {
|
||
$files .= ' ' . $dbfile->file_name if $dbfile->delete_file_version;
|
||
}
|
||
}
|
||
$self->js->flash('info', $infotext . $files) if $files;
|
SL/File.pm | ||
---|---|---|
|
||
use parent qw(Rose::Object);
|
||
|
||
use Carp;
|
||
use SL::File::Backend;
|
||
use SL::File::Object;
|
||
use SL::DB;
|
||
use SL::DB::History;
|
||
use SL::DB::ShopImage;
|
||
use SL::DB::File;
|
||
use SL::DB::FileVersion;
|
||
use SL::Helper::UserPreferences;
|
||
use SL::Controller::Helper::ThumbnailCreator qw(file_probe_type);
|
||
use SL::JSON;
|
||
... | ... | |
|
||
sub get {
|
||
my ($self, %params) = @_;
|
||
die "no id or dbfile" unless $params{id} || $params{dbfile};
|
||
$params{dbfile} = SL::DB::Manager::File->get_first(query => [id => $params{id}]) if !$params{dbfile};
|
||
die 'not found' unless $params{dbfile};
|
||
$main::lxdebug->message(LXDebug->DEBUG2(), "object_id=".$params{dbfile}->object_id." object_type=".$params{dbfile}->object_type." dbfile=".$params{dbfile});
|
||
SL::File::Object->new(db_file => $params{dbfile}, id => $params{dbfile}->id, loaded => 1);
|
||
croak "no id or dbfile or guid" unless $params{id} || $params{dbfile} || $params{guid};
|
||
croak "dbfile has to be of type SL::DB::File"
|
||
if defined $params{dbfile} && ref $params{dbfile} ne 'SL::DB::File';
|
||
|
||
my $dbfile;
|
||
my $file_version;
|
||
if (defined $params{guid}) {
|
||
$file_version = SL::DB::Manager::FileVersion->get_first(where => [guid => $params{guid}]);
|
||
die 'file version with guid not found: ' . $params{guid} unless $file_version;
|
||
$dbfile = $file_version->file;
|
||
if (defined $params{dbfile}) {
|
||
croak "dbfile doesn't match guid" if $dbfile->id != $params{dbfile}->id;
|
||
}
|
||
if (defined $params{id}) {
|
||
croak "id doesn't match guid" if $dbfile->id != $params{id};
|
||
}
|
||
} elsif (defined $params{dbfile}) {
|
||
$dbfile = $params{dbfile};
|
||
if (defined $params{id}) {
|
||
croak "id doesn't match dbfile id" if $dbfile->_id != $params{id};
|
||
}
|
||
} elsif (defined $params{id}) {
|
||
$dbfile = SL::DB::Manager::File->get_first(query => [id => $params{id}]);
|
||
die 'file with id not found: ' . $params{id} unless $dbfile;
|
||
}
|
||
|
||
my %object_params = (
|
||
db_file => $dbfile,
|
||
id => $dbfile->id,
|
||
loaded => 1,
|
||
);
|
||
$object_params{file_version} = $file_version if $file_version;
|
||
SL::File::Object->new(%object_params);
|
||
}
|
||
|
||
sub get_version_count {
|
||
... | ... | |
my @file_versions = reverse @{$fileobj->loaded_db_file->file_versions_sorted};
|
||
my $latest_file_version = shift @file_versions;
|
||
$fileobj->version($latest_file_version->version);
|
||
$fileobj->file_version($latest_file_version);
|
||
push @versionobjs, $fileobj;
|
||
foreach my $file_version (@file_versions) {
|
||
my $clone = $fileobj->clone;
|
||
$clone->version($file_version->version);
|
||
$clone->file_version($file_version);
|
||
$clone->newest(0);
|
||
push @versionobjs, $clone;
|
||
}
|
||
... | ... | |
}
|
||
if ($backend->delete(%params)) {
|
||
my $do_delete = 0;
|
||
if ( $params{last} || $params{version} || $params{all_but_notlast} ) {
|
||
if ( $params{last} || $params{file_version} || $params{all_but_notlast} ) {
|
||
if ( $backend->get_version_count(%params) > 0 ) {
|
||
$params{dbfile}->mtime(DateTime->now_local);
|
||
$params{dbfile}->save;
|
SL/File/Backend.pm | ||
---|---|---|
If none of the two parameters C<all_versions> or C<all__but_notlast> is set
|
||
all version of the file are deleted.
|
||
|
||
=item C<file_version>
|
||
|
||
If this parameter is set only this file version will be deleted. The object has
|
||
to be of type C<SL::DB::FileVersion>.
|
||
|
||
=back
|
||
|
||
=item C<rename PARAMS>
|
SL/File/Backend/Filesystem.pm | ||
---|---|---|
sub delete {
|
||
my ($self, %params) = @_;
|
||
die "no dbfile in backend delete" unless $params{dbfile};
|
||
my @versions = @{$params{dbfile}->file_versions_sorted};
|
||
|
||
my @versions_to_delete;
|
||
if ($params{last}) {
|
||
my $last = pop @versions;
|
||
@versions_to_delete = ($last);
|
||
} elsif ($params{all_but_notlast}) {
|
||
pop @versions; # remove last
|
||
@versions_to_delete = @versions;
|
||
} elsif ($params{version}) {
|
||
my $version = first {$_->version == $params{version}} @versions
|
||
or confess "Version not found.";
|
||
@versions_to_delete = ($version);
|
||
if ($params{file_version}) {
|
||
croak "file_version has to be of type SL::DB::FileVersion"
|
||
unless ref $params{file_version} eq 'SL::DB::FileVersion';
|
||
@versions_to_delete = ($params{file_version});
|
||
} else {
|
||
@versions_to_delete = @versions;
|
||
my @versions = @{$params{dbfile}->file_versions_sorted};
|
||
if ($params{last}) {
|
||
my $last = pop @versions;
|
||
@versions_to_delete = ($last);
|
||
} elsif ($params{all_but_notlast}) {
|
||
pop @versions; # remove last
|
||
@versions_to_delete = @versions;
|
||
} else {
|
||
@versions_to_delete = @versions;
|
||
}
|
||
}
|
||
|
||
foreach my $version (@versions_to_delete) {
|
SL/File/Object.pm | ||
---|---|---|
|
||
use Rose::Object::MakeMethods::Generic (
|
||
scalar => [ qw() ],
|
||
'scalar --get_set_init' => [ qw(db_file loaded id version newest) ],
|
||
'scalar --get_set_init' => [ qw(db_file loaded id file_version version newest) ],
|
||
);
|
||
|
||
#use SL::DB::Helper::Attr;
|
||
... | ... | |
SL::File->delete(dbfile => $_[0]->loaded_db_file, last => 1 )
|
||
}
|
||
|
||
sub delete_version {
|
||
SL::File->delete(dbfile => $_[0]->loaded_db_file, version => $_[0]->version )
|
||
sub delete_file_version {
|
||
SL::File->delete(dbfile => $_[0]->loaded_db_file, file_version => $_[0]->file_version )
|
||
}
|
||
|
||
sub purge {
|
||
... | ... | |
}
|
||
|
||
|
||
sub init_db_file { die 'must always have a db file'; }
|
||
sub init_loaded { 0 }
|
||
sub init_id { 0 }
|
||
sub init_version { 0 }
|
||
sub init_newest { 1 }
|
||
sub init_db_file { die 'must always have a db file'; }
|
||
sub init_loaded { 0 }
|
||
sub init_id { 0 }
|
||
sub init_version { 0 }
|
||
sub init_file_version { undef }
|
||
sub init_newest { 1 }
|
||
|
||
1;
|
||
|
||
... | ... | |
|
||
=back
|
||
|
||
Additional are there special methods. If the Object is created by SL::File::get_all_versions()
|
||
or by "$object->versions"
|
||
it has a version number. So the different mtime, filepath or content can be retrieved:
|
||
Additional are there special methods. If the Object is created by
|
||
C<SL::File::get_all_versions()> or by C<$object->versions>. It has a version
|
||
number in C<version> and a version object in C<file_version> of type
|
||
C<SL::DB::FileVersion>. So the different mtime, filepath or content can be
|
||
retrieved:
|
||
|
||
=over 4
|
||
|
templates/design40_webpages/file/list.html | ||
---|---|---|
<tr class="[% 'version_row_' _ file.id %] hidden">
|
||
[%- END %]
|
||
[% IF edit_attachments %]
|
||
<td>[% L.checkbox_tag(checkname _ '[]', 'value'=file.id _ '_' _ file.version, 'class'=checkname) %]</td>
|
||
<td>[% L.checkbox_tag(checkname _ '[]', 'value'=file.file_version.guid, 'class'=checkname) %]</td>
|
||
<td></td>
|
||
[% END %]
|
||
<td class="right[%- IF file.version_count > 1 && !is_other_version %] cursor-pointer" onclick="kivi.File.toggle_versions('[% file.id %]')"[%- ELSE -%]"[%- END %]>[%#"%]
|
templates/mobile_webpages/file/list.html | ||
---|---|---|
[%- FOREACH file = source.files %]
|
||
<tr>
|
||
[%- IF edit_attachments %]
|
||
<td>[%- P.M.checkbox_tag(checkname _ '[]', value=file.id _ '_' _ file.version, class=checkname, label=' ') %]</td>
|
||
<td>[%- P.M.checkbox_tag(checkname _ '[]', value=file.file_version.guid, class=checkname, label=' ') %]</td>
|
||
[%- END %]
|
||
<td>[% file.mtime_as_timestamp_s %][% L.hidden_tag("version[]", file.version) %]</td>
|
||
<td><a href="controller.pl?action=File/download&id=[% file.id %][%- IF file.version %]&version=[%- file.version %][%- END %]">
|
templates/webpages/file/list.html | ||
---|---|---|
<tr class="[% 'version_row_' _ file.id %] listrow[% row_cnt % 2 %] hidden">
|
||
[%- END %]
|
||
[%- IF edit_attachments %]
|
||
<td>[%- L.checkbox_tag(checkname _ '[]', 'value'=file.id _ '_' _ file.version, 'class'=checkname) %]</td>
|
||
<td>[%- L.checkbox_tag(checkname _ '[]', 'value'=file.file_version.guid, 'class'=checkname) %]</td>
|
||
<td></td>
|
||
[%- END %]
|
||
<td align="right" [%- IF file.version_count > 1 && !is_other_version %] class="cursor-pointer" onclick="kivi.File.toggle_versions('[% file.id %]')"[%- END %]>
|
Auch abrufbar als: Unified diff
File: Löschen über die guid der Version