the metadata fetcher
[bse.git] / site / cgi-bin / modules / BSE / TB / MetaEntry.pm
1 package BSE::TB::MetaEntry;
2 use strict;
3 use base 'Squirrel::Row';
4
5 our $VERSION = "1.004";
6
7 sub table {
8   "bse_article_file_meta";
9 }
10
11 sub columns {
12   qw/id file_id name content_type value appdata owner_type/;
13 }
14
15 sub defaults {
16   content_type => "text/plain",
17   appdata => 1,
18 }
19
20 sub is_text {
21   $_[0]->content_type eq "text/plain"
22 }
23
24 sub is_text_type {
25   $_[0]->content_type =~ m(^text/);
26 }
27
28 sub value_text {
29   my ($self) = @_;
30
31   $self->is_text_type or return;
32
33   my $value = $self->value;
34   utf8::decode($value) or return;
35
36   return $value;
37 }
38
39 sub set_value_text {
40   my ($self, $value) = @_;
41
42   $self->is_text_type or return;
43
44   utf8::encode($value);
45
46   $self->set_value($value);
47
48   1;
49 }
50
51 sub retrieve_json {
52   my ($self) = @_;
53
54   return unless $self->content_type
55     =~ m!\A(?:application/json|text/x-json(?: encoding=(?:"utf-8"|utf-8))?)\z!;
56
57   require JSON;
58   my $json = JSON->new->utf8;
59   my $data;
60   return unless eval { $data = $json->decode($self->value); 1 };
61   return $data;
62 }
63
64 1;