Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 19727dec

Von Tamino Steinert vor 12 Monaten hinzugefügt

  • ID 19727dec10b8d73d83d5b9d305c4a161fa9973de
  • Vorgänger 8c92c352
  • Nachfolger 7c7f3f38

File: Löschen über die guid der Version

Unterschiede anzeigen:

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