]> git.imager.perl.org - bse.git/blame - site/cgi-bin/modules/BSE/TB/ArticleFiles.pm
allow the user to edit metadata (if the items are specified in config)
[bse.git] / site / cgi-bin / modules / BSE / TB / ArticleFiles.pm
CommitLineData
6430ee52
TC
1package BSE::TB::ArticleFiles;
2use strict;
3use Squirrel::Table;
4use vars qw(@ISA $VERSION);
5@ISA = qw(Squirrel::Table);
6use BSE::TB::ArticleFile;
7use Carp qw(confess);
8
9sub rowClass {
10 return 'BSE::TB::ArticleFile';
11}
12
13sub file_storages {
14 my $self = shift;
15 return map [ $_->{filename}, $_->{storage}, $_ ], $self->all;
16}
17
18sub categories {
19 my ($class, $cfg) = @_;
20
21 my @cat_ids = split /,/, $cfg->entry("article file categories", "ids", "");
22 grep $_ eq "", @cat_ids
23 or unshift @cat_ids, "";
24
25 my @cats;
26 for my $id (@cat_ids) {
27 my $section = length $id ? "file category $id" : "file category empty";
28 my $def_name = length $id ? ucfirst $id : "(None)";
29 my $name = $cfg->entry($section, "name", $def_name);
30 push @cats, +{ id => $id, name => $name };
31 }
32
33 return @cats;
34}
35
36sub file_handlers {
37 my ($self, $cfg) = @_;
38
39 $cfg or confess "Missing cfg option";
40
41 my @handlers = split /[;,]/, $cfg->entry('basic', 'file_handlers');
42 push @handlers, "";
43
44 return map [ $_, $self->handler($_, $cfg) ], @handlers;
45}
46
47sub handler {
48 my ($self, $id, $cfg) = @_;
49
50 my $key = $id || "default";
51 my $class = $id ? $cfg->entry("file handlers", $id) : "BSE::FileHandler::Default";
52
53 (my $file = $class . ".pm") =~ s(::)(/)g;
54 require $file;
55 return $class->new($cfg);
56}
57
58sub download_path {
59 my ($class, $cfg) = @_;
60
61 return $cfg->entryVar('paths', 'downloads');
62}
63
7646d96e
TC
64sub file_manager {
65 my ($self, $cfg) = @_;
66
67 require BSE::StorageMgr::Files;
68
69 return BSE::StorageMgr::Files->new(cfg => $cfg);
70}
71
36e373a9
TC
72sub all_metametadata {
73 my ($self, $cfg) = @_;
74
75 $cfg
76 or confess "Missing cfg parameter";
77
78 require BSE::FileMetaMeta;
79 my @metafields;
80 my @keys = $cfg->orderCS("global file metadata");
81 for my $name (@keys) {
82 my %opts = ( name => $name );
83 my $section = "file metadata $name";
84 for my $key (BSE::FileMetaMeta->keys) {
85 my $value = $cfg->entry($section, $key);
86 if (defined $value) {
87 $opts{$key} = $value;
88 }
89 }
90 push @metafields, BSE::FileMetaMeta->new(%opts, cfg => $cfg);
91 }
92
93 return @metafields;
94}
95
6430ee52 961;