moved qdb here because matt is lazy
[public/www-new.git] / pub / qdb / util / setup.pl
1 #!/usr/bin/perl
2
3 ###############################################################################
4 # Chirpy! 0.3, a quote management system                                      #
5 # Copyright (C) 2005-2007 Tim De Pauw <ceetee@users.sourceforge.net>          #
6 ###############################################################################
7 # This program is free software; you can redistribute it and/or modify it     #
8 # under the terms of the GNU General Public License as published by the Free  #
9 # Software Foundation; either version 2 of the License, or (at your option)   #
10 # any later version.                                                          #
11 #                                                                             #
12 # This program is distributed in the hope that it will be useful, but WITHOUT #
13 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       #
14 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for   #
15 # more details.                                                               #
16 #                                                                             #
17 # You should have received a copy of the GNU General Public License along     #
18 # with this program; if not, write to the Free Software Foundation, Inc., 51  #
19 # Franklin St, Fifth Floor, Boston, MA  02110-1301  USA                       #
20 ###############################################################################
21
22 ###############################################################################
23 # setup.pl                                                                    #
24 # Generic installation/upgrade script                                         #
25 ###############################################################################
26 # $Id:: setup.pl 291 2007-02-05 21:24:46Z ceetee                            $ #
27 ###############################################################################
28
29 use strict;
30 use warnings;
31 use CGI;
32 use CGI::Carp qw(fatalsToBrowser);
33
34 BEGIN {
35         unshift @INC, 'src/modules';
36 }
37
38 use Chirpy 0.3;
39 use Chirpy::Util 0.3;
40 use Chirpy::Account 0.3;
41 use Chirpy::NewsItem 0.3;
42
43 use constant DEFAULT_USERNAME => 'superuser';
44 use constant DEFAULT_PASSWORD => 'password';
45 use constant DEFAULT_NEWS_ITEM => 'Welcome to this brand new '
46         . Chirpy::FULL_PRODUCT_NAME . ' installation! For more about '
47         . Chirpy::PRODUCT_NAME . ', be sure to visit the project homepage, '
48         . 'located at <' . Chirpy::URL . '>!';
49
50 my $ch = new Chirpy('./chirpy.ini');
51 my $cgi = new CGI();
52
53 print $cgi->header(-type => 'text/html; charset=US-ASCII');
54
55 &_header();
56
57 if ($cgi->request_method() eq 'POST') {
58         print '<pre>';
59         
60         my $fresh = $cgi->param('fresh');
61
62         if ($fresh) {
63                 &_log('Removing old installation (if any) ...');
64                 $ch->remove();
65                 &_log('Setting up ' . Chirpy::FULL_PRODUCT_NAME . ' ...');
66                 my $account = new Chirpy::Account(
67                         undef,
68                         DEFAULT_USERNAME,
69                         Chirpy::Util::encrypt(DEFAULT_PASSWORD),
70                         Chirpy::Account::USER_LEVEL_9
71                 );
72                 my $news = new Chirpy::NewsItem(
73                         undef,
74                         DEFAULT_NEWS_ITEM,
75                         $account,
76                         time
77                 );
78                 $ch->set_up([ $account ], [ $news ]);
79                 &_log('Account "' . DEFAULT_USERNAME . '" and news item added.');
80                 &_log('Setup completed!');
81         }
82         else {
83                 &_log('Upgrading to ' . Chirpy::FULL_PRODUCT_NAME . ' ...');
84                 $ch->set_up();
85                 &_log('Upgrade successful!');
86         }
87
88         print '</pre>', $/,
89                 '<p><strong>Finally, you <em>must remove this file</em> (<code>',
90                 $0, '</code>) on the ',
91                 'server immediately. Failing to do so will introduce a substantial ',
92                 '<em>security hazard</em>.</strong></p>', $/,
93                 '<p>Once you have completed the final step, you may click on the ',
94                 'button below to surf to your new ', Chirpy::PRODUCT_NAME, ' ',
95                 'installation.</p>', $/,
96                 '<form method="get" action="./"><div>', $/,
97                 '<input type="submit" value="Click here to launch ',
98                 Chirpy::PRODUCT_NAME, '">', $/, '</div></form>';
99 }
100 else {
101         print '<p>Welcome to the ', Chirpy::FULL_PRODUCT_NAME, ' setup ',
102                 'script.</p>', $/,
103                 '<p><strong>Please make sure that all the necessary files are ',
104                 'present and that you have edited <code>chirpy.ini</code> ',
105                 'to match your configuration. Otherwise, the setup process ',
106                 '<em>will</em> fail.</strong></p>', $/,
107                 '<p>Now, please tell us if this is a fresh installation, or you ',
108                 'are upgrading an existing installation.</p>', $/,
109                 '<form method="POST" action="', $cgi->script_name(), '"><div>', $/,
110                 '<input type="submit" name="fresh" ',
111                 'value="FRESH INSTALLATION" ',
112                 'onclick="return confirm(&quot;This will DELETE all existing data. ',
113                 'Are you sure?&quot;);">', $/,
114                 '<input type="submit" name="upgrade" ',
115                 'value="UPGRADE (a.k.a. Keep My Stuff!)">', $/,
116                 '</div></form>', $/,
117                 '<p><strong>Please click the button only once!</strong> ',
118                 'The operation might take a while to complete.</p>';
119 }
120
121 &_footer();
122
123 sub _header {
124         print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"', $/,
125                 '"http://www.w3.org/TR/html4/strict.dtd">', $/,
126                 '<html>', $/,
127                 '<head>', $/,
128                 '<meta http-equiv="Content-Type"', $/,
129                 'content="text/html; charset=UTF-8">', $/,
130                 '<title>', Chirpy::FULL_PRODUCT_NAME, ' Setup</title>', $/,
131                 '</head>', $/,
132                 '<body>', $/,
133                 '<h1>', Chirpy::FULL_PRODUCT_NAME, ' Setup</h1>', $/;
134 }
135
136 sub _footer {
137         print '</body>', $/, '</html>';
138 }
139
140 sub _log {
141         my $message = shift;
142         print $message, $/;
143 }
144
145 ###############################################################################