]> git.imager.perl.org - bse.git/blob - site/cgi-bin/modules/BSE/UI/AdminPregen.pm
add version numbers to all modules
[bse.git] / site / cgi-bin / modules / BSE / UI / AdminPregen.pm
1 package BSE::UI::AdminPregen;
2 use strict;
3 use base qw(BSE::UI::AdminDispatch);
4 use BSE::Util::Iterate;
5 use BSE::Util::Tags qw(tag_hash);
6
7 our $VERSION = "1.000";
8
9 my %actions =
10   (
11    list => "",
12    show => "",
13    display => "",
14   );
15
16 sub actions { \%actions }
17
18 sub rights { \%actions }
19
20 sub default_action { "list" }
21
22 sub req_list {
23   my ($self, $req) = @_;
24
25   my %entries = $req->cfg->entries('pregenerate');
26
27   my @names = sort keys %entries;
28
29   my @templates = map
30     {;
31      my ($type, $src) = split /,/, $entries{$_}, 2;
32      +{
33        id => $_,
34        type => $type,
35        source => $src,
36       };
37      } @names;
38   my $it = BSE::Util::Iterate->new;
39   my %acts =
40     (
41      $req->admin_tags,
42      $it->make
43      (
44       single => "template",
45       plural => "templates",
46       data => \@templates,
47      ),
48     );
49
50   return $req->response("admin/pregen/index", \%acts);
51 }
52
53 sub req_show {
54   my ($self, $req) = @_;
55
56   my $id = $req->cgi->param("template");
57   $id
58     or return $self->req_list($req, { template => "No pregen template" });
59   my $entry = $req->cfg->entry("pregenerate", $id)
60     or return $self->req_list($req, { template => "Unknown pregen template $id" });
61
62   my %template = ( id => $id );
63   @template{qw/type source/} = split /,/, $entry, 2;
64
65   my %acts =
66     (
67      $req->admin_tags,
68      template => [ \&tag_hash, \%template ],
69     );
70
71   return $req->response("admin/pregen/show", \%acts);
72 }
73
74 sub req_display {
75   my ($self, $req) = @_;
76
77   my $cfg = $req->cfg;
78   my $id = $req->cgi->param("template");
79   $id
80     or return $self->req_list($req, { template => "No pregen template" });
81   my $entry = $cfg->entry("pregenerate", $id)
82     or return $self->req_list($req, { template => "Unknown pregen template $id" });
83
84   require Generate::Article;
85   my ($presets, $input) = split ',', $entry, 2;
86   my $section = "$presets settings";
87   my %article = map { $_, '' } Article->columns;
88   $article{displayOrder} = 1;
89   $article{id} = -5;
90   $article{parentid} = -1;
91   $article{link} = $cfg->entryErr('site', 'url');
92   for my $field (Article->columns) {
93     if ($cfg->entry($section, $field)) {
94       $article{$field} = $cfg->entryVar($section, $field);
95     }
96   }
97   # by default all of these are handled as dynamic, but it can be 
98   # overidden, eg. the error template
99   my $is_extras = $presets eq 'extras';
100   my $dynamic = $cfg->entry($section, 'dynamic', !$is_extras);
101   my %acts;
102   my $gen = Generate::Article->new
103     (
104      cfg=>$cfg,
105      top=>\%article, 
106      force_dynamic => $dynamic,
107      admin => 1,
108      request => $req,
109      articles => "Articles",
110     );
111   %acts = $gen->baseActs("Articles", \%acts, \%article);
112   my $oldurl = $acts{url};
113   $acts{url} =
114     sub {
115       my $value = $oldurl->(@_);
116       $value =~ /^<:/ and return $value;
117       unless ($value =~ /^\w+:/) {
118         # put in the base site url
119         $value = $cfg->entryErr('site', 'url').$value;
120       }
121       return $value;
122     };
123   my $content = BSE::Template->get_page($input, $cfg, \%acts);
124
125   unless ($dynamic) {
126     return
127       {
128        content => $content,
129        type => BSE::Template->html_type($req->cfg),
130       };
131   }
132   require BSE::Dynamic::Article;
133   my $dyngen = BSE::Dynamic::Article->new($req);
134   return $dyngen->generate(\%article, $content);
135 }
136
137 1;