Revision 19727dec
Von Tamino Steinert vor etwa 1 Jahr 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