1 package SL::File::Object;
4 use parent qw(Rose::Object);
7 use Rose::Object::MakeMethods::Generic (
9 'scalar --get_set_init' => [ qw(db_file loaded id file_version version newest) ],
12 #use SL::DB::Helper::Attr;
13 #__PACKAGE__->_as_timestamp('mtime');
14 # wie wird das mit dem Attr Helper gemacht damit er bei nicht DB Objekten auch geht?
16 sub mtime_as_timestamp_s {
17 $::locale->format_date_object($_[0]->mtime, precision => 'second');
23 $_[0]->loaded_db_file->itime;
27 $_[0]->loaded_db_file->file_name;
31 $_[0]->loaded_db_file->file_type;
35 $_[0]->loaded_db_file->object_type;
39 $_[0]->loaded_db_file->object_id;
43 $_[0]->loaded_db_file->mime_type;
47 $_[0]->loaded_db_file->title;
50 sub file_description {
51 $_[0]->loaded_db_file->description;
55 $_[0]->loaded_db_file->backend;
59 $_[0]->loaded_db_file->source;
62 # methods to go directly into the backends
65 $_[0]->backend_class->get_filepath(dbfile => $_[0]->loaded_db_file, version => $_[0]->version)
69 $_[0]->backend_class->get_content(dbfile => $_[0]->loaded_db_file, version => $_[0]->version)
73 $_[0]->backend_class->get_mtime(dbfile => $_[0]->loaded_db_file, version => $_[0]->version)
77 $_[0]->backend_class->get_version_count(dbfile => $_[0]->loaded_db_file)
81 SL::File->get_all_versions(dbfile => $_[0]->loaded_db_file)
85 SL::File->save(dbfile => $_[0]->loaded_db_file, file_contents => $_[1] )
89 SL::File->save(dbfile => $_[0]->loaded_db_file, file_path => $_[1] )
93 SL::File->delete(dbfile => $_[0]->loaded_db_file)
96 sub delete_last_version {
97 SL::File->delete(dbfile => $_[0]->loaded_db_file, last => 1 )
100 sub delete_file_version {
101 SL::File->delete(dbfile => $_[0]->loaded_db_file, file_version => $_[0]->file_version )
105 SL::File->delete(dbfile => $_[0]->loaded_db_file, all_but_notlast => 1 )
109 SL::File->rename(dbfile => $_[0]->loaded_db_file, to => $_[1])
115 SL::File->get_backend_class($_[0]->backend)
119 sub loaded_db_file { # so, dass wir die nur einmal laden.
120 if (!$_[0]->loaded) {
121 $_[0]->db_file->load;
128 bless +{ %{ $_[0] } }, __PACKAGE__;
132 sub init_db_file { die 'must always have a db file'; }
133 sub init_loaded { 0 }
135 sub init_version { 0 }
136 sub init_file_version { undef }
137 sub init_newest { 1 }
147 SL::File::Object - a filemangement object wrapper
153 my ($object) = SL::File->get_all(object_id => $object_id,
154 object_type => $object_type,
155 file_type => 'image', # may be optional
156 source => 'uploaded' # may be optional
160 my $object_id = $object->object_id,
161 my $object_type = $object->object_type,
162 my $file_type = $object->file_type;
163 my $file_name = $object->file_name;
164 my $mime_type = $object->mime_type;
166 my $mtime = $object->mtime;
167 my $itime = $object->itime;
168 my $id = $object->id;
169 my $newest = $object->newest;
171 my $versions = $object->version_count;
173 my @versionobjs = $object->versions;
174 foreach ( @versionobjs ) {
175 my $mtime = $_->mtime;
176 my $contents = $_->get_content;
181 $object->rename("image1.png");
182 $object->save_contents("new text");
183 $object->save_file("/tmp/empty.png");
185 $object->delete_last_version;
190 This is a wrapper around a single object in the filemangement.
194 Following methods are wrapper to read the attributes of L<SL::DB::File> :
210 =item C<file_description>
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
232 get the modification time of a (versioned) object
236 get the full qualified file path of the (versioned) object
240 get the content of the (versioned) object
242 =item C<version_count>
244 Get the available versions of the file
248 Returns an array of SL::File::Object objects with the available versions of the file, starting with the newest version.
252 If set this is the newest version of the file.
254 =item C<save_contents $contents>
256 Store a new contents to the file (as a new version).
258 =item C<save_file $filepath>
260 Store the content of an (absolute)file path to the file
264 Delete the file with all of his versions
266 =item C<delete_last_version>
268 Delete only the last version of the file with implicit decrement of the version_count.
272 Delete all old versions of the file. Only one version exist after purge. The version count is reset to 1.
274 =item C<rename $newfilename>
286 Martin Helmling E<lt>martin.helmling@opendynamic.deE<gt>