Revision 19727dec
Von Tamino Steinert vor 10 Monaten hinzugefügt
SL/Controller/File.pm | ||
---|---|---|
393 | 393 |
my ($self, $do_unimport, $infotext) = @_; |
394 | 394 |
my $files = ''; |
395 | 395 |
my $ids = $::form->{ids}; |
396 |
foreach my $id_version (@{ $::form->{$ids} || [] }) { |
|
397 |
my ($id, $version) = split /_/, $id_version; |
|
398 |
my $dbfile = SL::File->get(id => $id); |
|
399 |
if ( $dbfile ) { |
|
400 |
if ( $version ) { |
|
401 |
$dbfile->version($version); |
|
402 |
$files .= ' ' . $dbfile->file_name if $dbfile->delete_version; |
|
403 |
} else { |
|
404 |
$files .= ' ' . $dbfile->file_name if $dbfile->delete; |
|
405 |
} |
|
396 |
foreach my $version_guid (@{ $::form->{$ids} || [] }) { |
|
397 |
my $dbfile = SL::File->get(guid => $version_guid); |
|
398 |
if ($dbfile) { |
|
399 |
$files .= ' ' . $dbfile->file_name if $dbfile->delete_file_version; |
|
406 | 400 |
} |
407 | 401 |
} |
408 | 402 |
$self->js->flash('info', $infotext . $files) if $files; |
SL/File.pm | ||
---|---|---|
4 | 4 |
|
5 | 5 |
use parent qw(Rose::Object); |
6 | 6 |
|
7 |
use Carp; |
|
7 | 8 |
use SL::File::Backend; |
8 | 9 |
use SL::File::Object; |
9 | 10 |
use SL::DB; |
10 | 11 |
use SL::DB::History; |
11 | 12 |
use SL::DB::ShopImage; |
12 | 13 |
use SL::DB::File; |
14 |
use SL::DB::FileVersion; |
|
13 | 15 |
use SL::Helper::UserPreferences; |
14 | 16 |
use SL::Controller::Helper::ThumbnailCreator qw(file_probe_type); |
15 | 17 |
use SL::JSON; |
... | ... | |
22 | 24 |
|
23 | 25 |
sub get { |
24 | 26 |
my ($self, %params) = @_; |
25 |
die "no id or dbfile" unless $params{id} || $params{dbfile}; |
|
26 |
$params{dbfile} = SL::DB::Manager::File->get_first(query => [id => $params{id}]) if !$params{dbfile}; |
|
27 |
die 'not found' unless $params{dbfile}; |
|
28 |
$main::lxdebug->message(LXDebug->DEBUG2(), "object_id=".$params{dbfile}->object_id." object_type=".$params{dbfile}->object_type." dbfile=".$params{dbfile}); |
|
29 |
SL::File::Object->new(db_file => $params{dbfile}, id => $params{dbfile}->id, loaded => 1); |
|
27 |
croak "no id or dbfile or guid" unless $params{id} || $params{dbfile} || $params{guid}; |
|
28 |
croak "dbfile has to be of type SL::DB::File" |
|
29 |
if defined $params{dbfile} && ref $params{dbfile} ne 'SL::DB::File'; |
|
30 |
|
|
31 |
my $dbfile; |
|
32 |
my $file_version; |
|
33 |
if (defined $params{guid}) { |
|
34 |
$file_version = SL::DB::Manager::FileVersion->get_first(where => [guid => $params{guid}]); |
|
35 |
die 'file version with guid not found: ' . $params{guid} unless $file_version; |
|
36 |
$dbfile = $file_version->file; |
|
37 |
if (defined $params{dbfile}) { |
|
38 |
croak "dbfile doesn't match guid" if $dbfile->id != $params{dbfile}->id; |
|
39 |
} |
|
40 |
if (defined $params{id}) { |
|
41 |
croak "id doesn't match guid" if $dbfile->id != $params{id}; |
|
42 |
} |
|
43 |
} elsif (defined $params{dbfile}) { |
|
44 |
$dbfile = $params{dbfile}; |
|
45 |
if (defined $params{id}) { |
|
46 |
croak "id doesn't match dbfile id" if $dbfile->_id != $params{id}; |
|
47 |
} |
|
48 |
} elsif (defined $params{id}) { |
|
49 |
$dbfile = SL::DB::Manager::File->get_first(query => [id => $params{id}]); |
|
50 |
die 'file with id not found: ' . $params{id} unless $dbfile; |
|
51 |
} |
|
52 |
|
|
53 |
my %object_params = ( |
|
54 |
db_file => $dbfile, |
|
55 |
id => $dbfile->id, |
|
56 |
loaded => 1, |
|
57 |
); |
|
58 |
$object_params{file_version} = $file_version if $file_version; |
|
59 |
SL::File::Object->new(%object_params); |
|
30 | 60 |
} |
31 | 61 |
|
32 | 62 |
sub get_version_count { |
... | ... | |
75 | 105 |
my @file_versions = reverse @{$fileobj->loaded_db_file->file_versions_sorted}; |
76 | 106 |
my $latest_file_version = shift @file_versions; |
77 | 107 |
$fileobj->version($latest_file_version->version); |
108 |
$fileobj->file_version($latest_file_version); |
|
78 | 109 |
push @versionobjs, $fileobj; |
79 | 110 |
foreach my $file_version (@file_versions) { |
80 | 111 |
my $clone = $fileobj->clone; |
81 | 112 |
$clone->version($file_version->version); |
113 |
$clone->file_version($file_version); |
|
82 | 114 |
$clone->newest(0); |
83 | 115 |
push @versionobjs, $clone; |
84 | 116 |
} |
... | ... | |
160 | 192 |
} |
161 | 193 |
if ($backend->delete(%params)) { |
162 | 194 |
my $do_delete = 0; |
163 |
if ( $params{last} || $params{version} || $params{all_but_notlast} ) { |
|
195 |
if ( $params{last} || $params{file_version} || $params{all_but_notlast} ) {
|
|
164 | 196 |
if ( $backend->get_version_count(%params) > 0 ) { |
165 | 197 |
$params{dbfile}->mtime(DateTime->now_local); |
166 | 198 |
$params{dbfile}->save; |
SL/File/Backend.pm | ||
---|---|---|
100 | 100 |
If none of the two parameters C<all_versions> or C<all__but_notlast> is set |
101 | 101 |
all version of the file are deleted. |
102 | 102 |
|
103 |
=item C<file_version> |
|
104 |
|
|
105 |
If this parameter is set only this file version will be deleted. The object has |
|
106 |
to be of type C<SL::DB::FileVersion>. |
|
107 |
|
|
103 | 108 |
=back |
104 | 109 |
|
105 | 110 |
=item C<rename PARAMS> |
SL/File/Backend/Filesystem.pm | ||
---|---|---|
22 | 22 |
sub delete { |
23 | 23 |
my ($self, %params) = @_; |
24 | 24 |
die "no dbfile in backend delete" unless $params{dbfile}; |
25 |
my @versions = @{$params{dbfile}->file_versions_sorted}; |
|
26 | 25 |
|
27 | 26 |
my @versions_to_delete; |
28 |
if ($params{last}) { |
|
29 |
my $last = pop @versions; |
|
30 |
@versions_to_delete = ($last); |
|
31 |
} elsif ($params{all_but_notlast}) { |
|
32 |
pop @versions; # remove last |
|
33 |
@versions_to_delete = @versions; |
|
34 |
} elsif ($params{version}) { |
|
35 |
my $version = first {$_->version == $params{version}} @versions |
|
36 |
or confess "Version not found."; |
|
37 |
@versions_to_delete = ($version); |
|
27 |
if ($params{file_version}) { |
|
28 |
croak "file_version has to be of type SL::DB::FileVersion" |
|
29 |
unless ref $params{file_version} eq 'SL::DB::FileVersion'; |
|
30 |
@versions_to_delete = ($params{file_version}); |
|
38 | 31 |
} else { |
39 |
@versions_to_delete = @versions; |
|
32 |
my @versions = @{$params{dbfile}->file_versions_sorted}; |
|
33 |
if ($params{last}) { |
|
34 |
my $last = pop @versions; |
|
35 |
@versions_to_delete = ($last); |
|
36 |
} elsif ($params{all_but_notlast}) { |
|
37 |
pop @versions; # remove last |
|
38 |
@versions_to_delete = @versions; |
|
39 |
} else { |
|
40 |
@versions_to_delete = @versions; |
|
41 |
} |
|
40 | 42 |
} |
41 | 43 |
|
42 | 44 |
foreach my $version (@versions_to_delete) { |
SL/File/Object.pm | ||
---|---|---|
6 | 6 |
|
7 | 7 |
use Rose::Object::MakeMethods::Generic ( |
8 | 8 |
scalar => [ qw() ], |
9 |
'scalar --get_set_init' => [ qw(db_file loaded id version newest) ], |
|
9 |
'scalar --get_set_init' => [ qw(db_file loaded id file_version version newest) ],
|
|
10 | 10 |
); |
11 | 11 |
|
12 | 12 |
#use SL::DB::Helper::Attr; |
... | ... | |
97 | 97 |
SL::File->delete(dbfile => $_[0]->loaded_db_file, last => 1 ) |
98 | 98 |
} |
99 | 99 |
|
100 |
sub delete_version { |
|
101 |
SL::File->delete(dbfile => $_[0]->loaded_db_file, version => $_[0]->version )
|
|
100 |
sub delete_file_version {
|
|
101 |
SL::File->delete(dbfile => $_[0]->loaded_db_file, file_version => $_[0]->file_version )
|
|
102 | 102 |
} |
103 | 103 |
|
104 | 104 |
sub purge { |
... | ... | |
129 | 129 |
} |
130 | 130 |
|
131 | 131 |
|
132 |
sub init_db_file { die 'must always have a db file'; } |
|
133 |
sub init_loaded { 0 } |
|
134 |
sub init_id { 0 } |
|
135 |
sub init_version { 0 } |
|
136 |
sub init_newest { 1 } |
|
132 |
sub init_db_file { die 'must always have a db file'; } |
|
133 |
sub init_loaded { 0 } |
|
134 |
sub init_id { 0 } |
|
135 |
sub init_version { 0 } |
|
136 |
sub init_file_version { undef } |
|
137 |
sub init_newest { 1 } |
|
137 | 138 |
|
138 | 139 |
1; |
139 | 140 |
|
... | ... | |
218 | 219 |
|
219 | 220 |
=back |
220 | 221 |
|
221 |
Additional are there special methods. If the Object is created by SL::File::get_all_versions() |
|
222 |
or by "$object->versions" |
|
223 |
it has a version number. So the different mtime, filepath or content can be retrieved: |
|
222 |
Additional are there special methods. If the Object is created by |
|
223 |
C<SL::File::get_all_versions()> or by C<$object->versions>. It has a version |
|
224 |
number in C<version> and a version object in C<file_version> of type |
|
225 |
C<SL::DB::FileVersion>. So the different mtime, filepath or content can be |
|
226 |
retrieved: |
|
224 | 227 |
|
225 | 228 |
=over 4 |
226 | 229 |
|
templates/design40_webpages/file/list.html | ||
---|---|---|
54 | 54 |
<tr class="[% 'version_row_' _ file.id %] hidden"> |
55 | 55 |
[%- END %] |
56 | 56 |
[% IF edit_attachments %] |
57 |
<td>[% L.checkbox_tag(checkname _ '[]', 'value'=file.id _ '_' _ file.version, 'class'=checkname) %]</td>
|
|
57 |
<td>[% L.checkbox_tag(checkname _ '[]', 'value'=file.file_version.guid, 'class'=checkname) %]</td>
|
|
58 | 58 |
<td></td> |
59 | 59 |
[% END %] |
60 | 60 |
<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 | ||
---|---|---|
30 | 30 |
[%- FOREACH file = source.files %] |
31 | 31 |
<tr> |
32 | 32 |
[%- IF edit_attachments %] |
33 |
<td>[%- P.M.checkbox_tag(checkname _ '[]', value=file.id _ '_' _ file.version, class=checkname, label=' ') %]</td>
|
|
33 |
<td>[%- P.M.checkbox_tag(checkname _ '[]', value=file.file_version.guid, class=checkname, label=' ') %]</td>
|
|
34 | 34 |
[%- END %] |
35 | 35 |
<td>[% file.mtime_as_timestamp_s %][% L.hidden_tag("version[]", file.version) %]</td> |
36 | 36 |
<td><a href="controller.pl?action=File/download&id=[% file.id %][%- IF file.version %]&version=[%- file.version %][%- END %]"> |
templates/webpages/file/list.html | ||
---|---|---|
55 | 55 |
<tr class="[% 'version_row_' _ file.id %] listrow[% row_cnt % 2 %] hidden"> |
56 | 56 |
[%- END %] |
57 | 57 |
[%- IF edit_attachments %] |
58 |
<td>[%- L.checkbox_tag(checkname _ '[]', 'value'=file.id _ '_' _ file.version, 'class'=checkname) %]</td>
|
|
58 |
<td>[%- L.checkbox_tag(checkname _ '[]', 'value'=file.file_version.guid, 'class'=checkname) %]</td>
|
|
59 | 59 |
<td></td> |
60 | 60 |
[%- END %] |
61 | 61 |
<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