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