root/trunk/admin.cgi

Revision 68, 7.0 kB (checked in by jdixon, 1 year ago)

add template support

  • Property svn:executable set to
Line 
1
2 # Blogsum
3 # Copyright (c) 2009 Jason Dixon <jason@dixongroup.net>
4 # All rights reserved.
5
6 ###########################
7 # pragmas and vars        #
8 ###########################
9 use strict;
10 use Blogsum::Config;
11 my $database = $Blogsum::Config::database;
12 my $tmplfile_admin = $Blogsum::Config::tmplfile_admin;
13 my $blog_theme = $Blogsum::Config::blog_theme;
14 my $blog_title = $Blogsum::Config::blog_title;
15
16
17 ###########################
18 # main execution          #
19 ###########################
20 my $cgi = CGI->new;
21 my $dbh = DBI->connect("DBI:SQLite:dbname=$database", '', '', { RaiseError => 1 }) || die $DBI::errstr;
22 my $template = HTML::Template->new(filename => $tmplfile_admin, die_on_bad_params => 0);
23 $template->param( theme => $blog_theme );
24 my $view;
25
26 if ($cgi->param('view')) {
27         if ($cgi->param('view') eq 'moderate') {
28                 $view = 'moderate';
29                 manage_comments();
30         } elsif ($cgi->param('view') eq 'edit') {
31                 $view = 'create';
32                 edit_article();
33         } else {
34                 $view = 'administrate';
35                 manage_articles();
36         }
37 } else {
38         $view = 'administrate';
39         manage_articles();
40 }
41
42 $dbh->disconnect;
43
44
45 ###########################
46 # subfunctions            #
47 ###########################
48
49 sub manage_articles {
50
51         my $article_id;
52         my $status=2;
53
54         if ($cgi->param('delete') =~ /\d+/) {
55                 $article_id = $cgi->param('delete');
56                 $status=-1;
57         }
58         if ($cgi->param('draft') =~ /\d+/) {
59                 $article_id = $cgi->param('draft');
60                 $status=0;
61         }
62         if ($cgi->param('publish') =~ /\d+/) {
63                 $article_id = $cgi->param('publish');
64                 $status=1;
65         }
66         if ($status < 2) {
67                 my $stmt = "UPDATE articles SET enabled=? WHERE id=?";
68                 my $sth = $dbh->prepare($stmt);
69                 $sth->execute($status, $article_id) || die $dbh->errstr;
70         }
71
72         if (@{get_comments()} > 0) {
73                 $template->param( comments_to_moderate => 1);
74         }
75         $template->param( view => $view, blog_title => $blog_title, articles => get_articles() );
76         print $cgi->header(), $template->output;
77 }
78
79 sub manage_comments {
80
81         my $comment_id;
82         my $status=2;
83
84         if ($cgi->param('delete') =~ /\d+/) {
85                 $comment_id = $cgi->param('delete');
86                 $status=-1;
87         }
88         if ($cgi->param('publish') =~ /\d+/) {
89                 $comment_id = $cgi->param('publish');
90                 $status=1;
91         }
92         if ($status < 2) {
93                 my $stmt = "UPDATE comments SET enabled=? WHERE id=?";
94                 my $sth = $dbh->prepare($stmt);
95                 $sth->execute($status, $comment_id) || die $dbh->errstr;
96         }
97
98         $template->param( view => $view, blog_title => $blog_title, comments => get_comments() );
99         print $cgi->header(), $template->output;
100 }
101
102 sub edit_article {
103
104         # preview, pass through all input
105         if ($cgi->param('preview')) {
106                 my $uri = $cgi->param('uri') || $cgi->param('title') || undef;
107                 $uri =~ s/\ /\-/g if ($uri);
108                 $template->param( view => $view, blog_title => $blog_title, preview => 1, edit => 1 );
109                 $template->param( id => $cgi->param('id') ) if ($cgi->param('id'));
110                 $template->param( title => $cgi->param('title') ) if ($cgi->param('title'));
111                 $template->param( uri => $uri ) if ($uri);
112                 $template->param( body => $cgi->param('body') ) if ($cgi->param('body'));
113                 $template->param( tags => $cgi->param('tags') ) if ($cgi->param('tags'));
114                 print $cgi->header(), $template->output;
115
116         # save edits, with id (update)
117         } elsif ($cgi->param('save') && $cgi->param('id')) {
118                 if ($cgi->param('title') && $cgi->param('uri') && $cgi->param('body')) {
119                         my $uri = $cgi->param('uri');
120                         $uri =~ s/\ /\-/g;
121                         my $stmt = "UPDATE articles SET title=?, uri=?, body=?, tags=? WHERE id=?";
122                         my $sth = $dbh->prepare($stmt);
123                         $sth->execute($cgi->param('title'), $uri, $cgi->param('body'), $cgi->param('tags'), $cgi->param('id')) || die $dbh->errstr;
124                         manage_articles();
125                 # if missing data, push back to preview
126                 } else {
127                         $template->param( error => 'required fields: title, uri, body' );
128                         $template->param( view => $view, blog_title => $blog_title, edit => 1 );
129                         $template->param( id => $cgi->param('id') ) if ($cgi->param('id'));
130                         $template->param( title => $cgi->param('title') ) if ($cgi->param('title'));
131                         $template->param( uri => $cgi->param('uri') ) if ($cgi->param('uri'));
132                         $template->param( body => $cgi->param('body') ) if ($cgi->param('body'));
133                         $template->param( tags => $cgi->param('tags') ) if ($cgi->param('tags'));
134                         print $cgi->header(), $template->output;
135                 }
136
137         # save new, no id (insert)
138         } elsif ($cgi->param('save')) {
139                 if ($cgi->param('title') && $cgi->param('body')) {
140                         my $uri = $cgi->param('uri') || $cgi->param('title');
141                         $uri =~ s/\ /\-/g;
142                         my $author = $ENV{'REMOTE_USER'} || 'author';
143                         my $stmt = "INSERT INTO articles VALUES (NULL, datetime('now'), ?, ?, ?, ?, 0, ?)";
144                         my $sth = $dbh->prepare($stmt);
145                         $sth->execute($cgi->param('title'), $uri, $cgi->param('body'), $cgi->param('tags'), $author) || die $dbh->errstr;
146                         manage_articles();
147                 # if missing data, push back to preview
148                 } else {
149                         $template->param( error => 'required fields: title, body' );
150                         $template->param( view => $view, blog_title => $blog_title, edit => 1 );
151                         $template->param( id => $cgi->param('id') ) if ($cgi->param('id'));
152                         $template->param( title => $cgi->param('title') ) if ($cgi->param('title'));
153                         $template->param( uri => $cgi->param('uri') ) if ($cgi->param('uri'));
154                         $template->param( body => $cgi->param('body') ) if ($cgi->param('body'));
155                         $template->param( tags => $cgi->param('tags') ) if ($cgi->param('tags'));
156                         print $cgi->header(), $template->output;
157                 }
158
159         # edit an existing
160         } elsif ($cgi->param('id')) {
161                 my $query = "SELECT * FROM articles WHERE id=?";
162                 my $sth = $dbh->prepare($query);
163                 $sth->execute($cgi->param('id')) || die $dbh->errstr;
164                 my $result = $sth->fetchrow_hashref;
165                 if ($result) {
166                         $template->param( view => $view, blog_title => $blog_title, edit => 1 );
167                         $template->param( $result );
168                         print $cgi->header(), $template->output;
169                 } else {
170                         $template->param( error => 'no results found' );
171                         manage_articles();
172                 }
173
174         # brand new, show form
175         } else {
176                 $template->param( view => $view, blog_title => $blog_title, edit => 1 );
177                 print $cgi->header(), $template->output;
178         }
179 }
180
181 sub get_articles {
182
183         my $query = 'SELECT * FROM articles WHERE enabled !=-1 ORDER BY date DESC';
184         my $sth = $dbh->prepare($query);
185         $sth->execute() || die $dbh->errstr;
186
187         my @articles;
188         while (my $result = $sth->fetchrow_hashref) {
189                 $result->{'date'} =~ /(\d{4})\-(\d{2})\-\d{2} \d{2}\:\d{2}\:\d{2}/;
190                 ($result->{'year'}, $result->{'month'}) = ($1, $2);
191                 $result->{'date'} =~ s/(\d{4}\-\d{2}\-\d{2}) \d{2}\:\d{2}\:\d{2}/$1/;
192                 delete $result->{'enabled'} if ($result->{'enabled'} == 0);
193                 $result->{'theme'} = $blog_theme;
194                 push(@articles, $result);
195         }
196
197         return \@articles;
198 }
199
200 sub get_comments {
201
202         my $query = 'SELECT a.title AS article_title, a.uri AS article_uri, a.date AS article_date, c.* FROM articles a, comments c WHERE a.id=c.article_id AND c.enabled=0 ORDER BY c.date DESC';
203         my $sth = $dbh->prepare($query);
204         $sth->execute() || die $dbh->errstr;
205
206         my @comments;
207         while (my $result = $sth->fetchrow_hashref) {
208                 $result->{'article_date'} =~ /(\d{4})\-(\d{2})\-\d{2} \d{2}\:\d{2}\:\d{2}/;
209                 ($result->{'article_year'}, $result->{'article_month'}) = ($1, $2);
210                 push(@comments, $result);
211         }
212
213         return \@comments;
214 }
215
216
Note: See TracBrowser for help on using the browser.