3 #################################################################################
4 # Kiriwrite Installer Script (install.cgi) #
5 # Installation script for Kiriwrite #
9 # Copyright (C) 2005-2007 Steve Brokenshire <sbrokenshire@xestia.co.uk> #
11 # This program is free software; you can redistribute it and/or modify it under #
12 # the terms of the GNU General Public License as published by the Free #
13 # Software Foundation; as version 2 of the License. #
15 # This program is distributed in the hope that it will be useful, but WITHOUT #
16 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
17 # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.#
19 # You should have received a copy of the GNU General Public License along with #
20 # this program; if not, write to the Free Software Foundation, Inc., 51 #
21 # Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #
22 #################################################################################
24 use strict; # Throw errors if there's something wrong.
25 use warnings; # Write warnings to the HTTP Server Log file.
28 use CGI qw(:standard *table *Tr *td);
29 #use CGI::Carp('fatalsToBrowser'); # Output errors to the browser.
31 # Setup strings in specific languages. Style should be no spacing for
32 # language title and one tabbed spacing for each string.
34 # Define some default settings.
36 my $default_language = "en-GB";
37 my $default_dbdirectory = "db";
38 my $default_outputdirectory = "output";
39 my $default_imagesuri = "/images/kiriwrite";
41 my $default_textarearows = "10";
42 my $default_textareacols = "50";
44 my $default_server = "localhost";
45 my $default_port = "3306";
46 my $default_protocol = "tcp";
47 my $default_name = "database";
48 my $default_username = "username";
49 my $default_prefix = "kiriwrite";
51 my ($kiriwrite_lang, %kiriwrite_lang);
53 $kiriwrite_lang{"en-GB"}{"languagename"} = "English (British)";
54 $kiriwrite_lang{"en-GB"}{"testpass"} = "OK";
55 $kiriwrite_lang{"en-GB"}{"testfail"} = "Error";
57 $kiriwrite_lang{"en-GB"}{"generic"} = "An error occured which is not known to the Kiriwrite installer.";
58 $kiriwrite_lang{"en-GB"}{"invalidvariable"} = "The variable given was invalid.";
59 $kiriwrite_lang{"en-GB"}{"invalidvalue"} = "The value given was invalid.";
60 $kiriwrite_lang{"en-GB"}{"invalidoption"} = "The option given was invalid.";
61 $kiriwrite_lang{"en-GB"}{"variabletoolong"} = "The variable given is too long.";
62 $kiriwrite_lang{"en-GB"}{"blankdirectory"} = "The directory name given is blank.";
63 $kiriwrite_lang{"en-GB"}{"invaliddirectory"} = "The directory name given is invalid.";
64 $kiriwrite_lang{"en-GB"}{"moduleblank"} = "The module filename given is blank.";
65 $kiriwrite_lang{"en-GB"}{"moduleinvalid"} = "The module filename given is invalid.";
67 $kiriwrite_lang{"en-GB"}{"dbdirectorytoolong"} = "The database directory name given is too long.";
68 $kiriwrite_lang{"en-GB"}{"outputdirectorytoolong"} = "The output directory name given is too long.";
69 $kiriwrite_lang{"en-GB"}{"imagesuripathtoolong"} = "The images URI path name given is too long.";
70 $kiriwrite_lang{"en-GB"}{"dateformattoolong"} = "The date format given is too long.";
71 $kiriwrite_lang{"en-GB"}{"customdateformattoolong"} = "The custom date format given is too long.";
72 $kiriwrite_lang{"en-GB"}{"languagefilenametoolong"} = "The language filename given is too long.";
74 $kiriwrite_lang{"en-GB"}{"dateformatblank"} = "The date format given was blank.";
75 $kiriwrite_lang{"en-GB"}{"dateformatinvalid"} = "The date format given is invalid.";
76 $kiriwrite_lang{"en-GB"}{"languagefilenameinvalid"} = "The language filename given is invalid.";
78 $kiriwrite_lang{"en-GB"}{"dbdirectoryblank"} = "The database directory name given is blank.";
79 $kiriwrite_lang{"en-GB"}{"dbdirectoryinvalid"} = "The database directory name given is invalid.";
81 $kiriwrite_lang{"en-GB"}{"outputdirectoryblank"} = "The output directory name given is blank.";
82 $kiriwrite_lang{"en-GB"}{"outputdirectoryinvalid"} = "The output directory name given is invalid.";
84 $kiriwrite_lang{"en-GB"}{"textarearowblank"} = "The text area row value given is blank.";
85 $kiriwrite_lang{"en-GB"}{"textarearowtoolong"} = "The text area row value given is too long.";
86 $kiriwrite_lang{"en-GB"}{"textarearowinvalid"} = "The text area row value given is invalid.";
88 $kiriwrite_lang{"en-GB"}{"textareacolsblank"} = "The text area columns value given is blank.";
89 $kiriwrite_lang{"en-GB"}{"textareacolstoolong"} = "The text area columns value given is too long.";
90 $kiriwrite_lang{"en-GB"}{"textareacolsinvalid"} = "The text area columns value given is invalid.";
92 $kiriwrite_lang{"en-GB"}{"presmoduleblank"} = "The presentation module name given is blank.";
93 $kiriwrite_lang{"en-GB"}{"presmoduleinvalid"} = "The presentation module name given is invalid.";
95 $kiriwrite_lang{"en-GB"}{"dbmoduleblank"} = "The database module name given is blank.";
96 $kiriwrite_lang{"en-GB"}{"dbmoduleinvalid"} = "The database module name given is invalid.";
98 $kiriwrite_lang{"en-GB"}{"presmodulemissing"} = "The presentation module with the filename given is missing.";
99 $kiriwrite_lang{"en-GB"}{"dbmodulemissing"} = "The database module with the filename given is missing.";
100 $kiriwrite_lang{"en-GB"}{"languagefilenamemissing"} = "The language file with the filename given is missing.";
102 $kiriwrite_lang{"en-GB"}{"servernametoolong"} = "The database server name given is too long.";
103 $kiriwrite_lang{"en-GB"}{"servernameinvalid"} = "The database server name given is invalid.";
104 $kiriwrite_lang{"en-GB"}{"serverportnumbertoolong"} = "The database server port number given is too long.";
105 $kiriwrite_lang{"en-GB"}{"serverportnumberinvalidcharacters"} = "The database server port number given contains invalid characters.";
106 $kiriwrite_lang{"en-GB"}{"serverportnumberinvalid"} = "The database server port number given is invalid.";
107 $kiriwrite_lang{"en-GB"}{"serverprotocolnametoolong"} = "The database server protocol name given is too long.";
108 $kiriwrite_lang{"en-GB"}{"serverprotocolinvalid"} = "The database server protocol name is invalid.";
109 $kiriwrite_lang{"en-GB"}{"serverdatabasenametoolong"} = "The database name given is too long.";
110 $kiriwrite_lang{"en-GB"}{"serverdatabasenameinvalid"} = "The database name given is invalid.";
111 $kiriwrite_lang{"en-GB"}{"serverdatabaseusernametoolong"} = "The database server username given is too long.";
112 $kiriwrite_lang{"en-GB"}{"serverdatabaseusernameinvalid"} = "The database server username given is invalid.";
113 $kiriwrite_lang{"en-GB"}{"serverdatabasepasswordtoolong"} = "The database server password is too long.";
114 $kiriwrite_lang{"en-GB"}{"serverdatabasetableprefixtoolong"} = "The database server table prefix given is too long.";
115 $kiriwrite_lang{"en-GB"}{"serverdatabasetableprefixinvalid"} = "The database server table prefix given is invalid.";
117 $kiriwrite_lang{"en-GB"}{"removeinstallscripttoolong"} = "The remove install script value given is too long.";
118 $kiriwrite_lang{"en-GB"}{"cannotwriteconfigurationindirectory"} = "The configuration file cannot be written because the directory the install script is running from has invalid permissions.";
119 $kiriwrite_lang{"en-GB"}{"configurationfilereadpermissionsinvalid"} = "The configuration that currently exists has invalid read permissions set.";
120 $kiriwrite_lang{"en-GB"}{"configurationfilewritepermissionsinvalid"} = "The configuration that currently exists has invalid write permissions set.";
122 $kiriwrite_lang{"en-GB"}{"errormessagetext"} = "Please press the back button on your browser or preform the command needed to return to the previous page.";
124 $kiriwrite_lang{"en-GB"}{"switch"} = "Switch";
125 $kiriwrite_lang{"en-GB"}{"setting"} = "Setting";
126 $kiriwrite_lang{"en-GB"}{"value"} = "Value";
127 $kiriwrite_lang{"en-GB"}{"filename"} = "Filename";
128 $kiriwrite_lang{"en-GB"}{"module"} = "Module";
129 $kiriwrite_lang{"en-GB"}{"result"} = "Result";
130 $kiriwrite_lang{"en-GB"}{"error"} = "Error!";
131 $kiriwrite_lang{"en-GB"}{"criticalerror"} = "Critical Error!";
132 $kiriwrite_lang{"en-GB"}{"errormessage"} = "Error: ";
133 $kiriwrite_lang{"en-GB"}{"warningmessage"} = "Warning: ";
135 $kiriwrite_lang{"en-GB"}{"doesnotexist"} = "Does not exist.";
136 $kiriwrite_lang{"en-GB"}{"invalidpermissionsset"} = "Invalid permissions set.";
138 $kiriwrite_lang{"en-GB"}{"dependencyperlmodulesmissing"} = "One or more Perl modules that are needed by Kiriwrite are not installed or has problems. See the Kiriwrite documentation for more information on this.";
139 $kiriwrite_lang{"en-GB"}{"databaseperlmodulesmissing"} = "One or more Perl modules that are needed by the Kiriwrite database modules are not installed or has problems. See the Kiriwrite documentation for more information on this. There should however, be no problems with the database modules which use the Perl modules that have been found.";
140 $kiriwrite_lang{"en-GB"}{"filepermissionsinvalid"} = "One or more of the filenames checked does not exist or has invalid permissions set. See the Kiriwrite documentation for more information on this.";
141 $kiriwrite_lang{"en-GB"}{"dependencymodulesnotinstalled"} = "One of the required Perl modules is not installed or has errors. See the Kiriwrite documentation for more information on this.";
142 $kiriwrite_lang{"en-GB"}{"databasemodulesnotinstalled"} = "None of Perl modules that are used by the database modules are not installed. See the Kiriwrite documentation for more information on this.";
143 $kiriwrite_lang{"en-GB"}{"filepermissionerrors"} = "One or more filenames checked has errors. See the Kiriwrite documentation for more information on this.",
145 $kiriwrite_lang{"en-GB"}{"installertitle"} = "Kiriwrite Installer";
146 $kiriwrite_lang{"en-GB"}{"installertext"} = "This installer script will setup the configuration file used for Kiriwrite. The settings displayed here can be changed at a later date by selecting the Edit Settings link in the View Settings sub-menu.";
147 $kiriwrite_lang{"en-GB"}{"dependencytitle"} = "Dependency and file testing results";
148 $kiriwrite_lang{"en-GB"}{"requiredmodules"} = "Required Modules";
149 $kiriwrite_lang{"en-GB"}{"perlmodules"} = "These Perl modules are used internally by Kiriwrite.";
150 $kiriwrite_lang{"en-GB"}{"databasemodules"} = "Perl Database Modules";
151 $kiriwrite_lang{"en-GB"}{"databasemodulestext"} = "These Perl modules are used by the database modules.";
152 $kiriwrite_lang{"en-GB"}{"filepermissions"} = "File permissions";
153 $kiriwrite_lang{"en-GB"}{"filepermissionstext"} = "The file permissions are for file and directories that are critical to Kiriwrite such as module and language directories.";
155 $kiriwrite_lang{"en-GB"}{"settingstitle"} = "Kiriwrite Settings";
156 $kiriwrite_lang{"en-GB"}{"settingstext"} = "The settings given here will be used by Kiriwrite. Some default settings are given here. Certain database modules (like SQLite) do not need the database server settings and can be left alone.";
157 $kiriwrite_lang{"en-GB"}{"directories"} = "Directories";
158 $kiriwrite_lang{"en-GB"}{"databasedirectory"} = "Database Directory";
159 $kiriwrite_lang{"en-GB"}{"outputdirectory"} = "Output Directory";
160 $kiriwrite_lang{"en-GB"}{"imagesuripath"} = "Images (URI path)";
161 $kiriwrite_lang{"en-GB"}{"display"} = "Display";
162 $kiriwrite_lang{"en-GB"}{"textareacols"} = "Text Area Columns";
163 $kiriwrite_lang{"en-GB"}{"textarearows"} = "Text Area Rows";
164 $kiriwrite_lang{"en-GB"}{"date"} = "Date";
165 $kiriwrite_lang{"en-GB"}{"dateformat"} = "Date Format";
166 $kiriwrite_lang{"en-GB"}{"language"} = "Language";
167 $kiriwrite_lang{"en-GB"}{"systemlanguage"} = "System Language";
168 $kiriwrite_lang{"en-GB"}{"modules"} = "Modules";
169 $kiriwrite_lang{"en-GB"}{"presentationmodule"} = "Presentation Module";
170 $kiriwrite_lang{"en-GB"}{"databasemodule"} = "Database Module";
171 $kiriwrite_lang{"en-GB"}{"databaseserver"} = "Database Server";
172 $kiriwrite_lang{"en-GB"}{"databaseport"} = "Database Port";
173 $kiriwrite_lang{"en-GB"}{"databaseprotocol"} = "Database Protocol";
174 $kiriwrite_lang{"en-GB"}{"databasename"} = "Database Name";
175 $kiriwrite_lang{"en-GB"}{"databaseusername"} = "Database Username";
176 $kiriwrite_lang{"en-GB"}{"databasepassword"} = "Database Password";
177 $kiriwrite_lang{"en-GB"}{"databasetableprefix"} = "Database Table Prefix";
178 $kiriwrite_lang{"en-GB"}{"installationoptions"} = "Installation Options";
179 $kiriwrite_lang{"en-GB"}{"installoptions"} = "Install Options";
180 $kiriwrite_lang{"en-GB"}{"removeinstallscript"} = "Delete this installer script after configuration file has been written.";
181 $kiriwrite_lang{"en-GB"}{"savesettingsbutton"} = "Save Settings";
182 $kiriwrite_lang{"en-GB"}{"resetsettingsbutton"} = "Reset Settings";
184 $kiriwrite_lang{"en-GB"}{"installscriptremoved"} = "The installer script was removed.";
185 $kiriwrite_lang{"en-GB"}{"installedmessage"} = "The configuration file for Kiriwrite has been written. To change the settings in the configuration file at a later date use the Edit Settings link in the View Settings sub-menu at the top of the page when using Kiriwrite.";
186 $kiriwrite_lang{"en-GB"}{"cannotremovescript"} = "Unable to remove the installer script: %s. The installer script will have to be deleted manually.";
187 $kiriwrite_lang{"en-GB"}{"usekiriwritetext"} = "To use Kiriwrite click or select the link below (will not work if the Kiriwrite script is not called kiriwrite.cgi):";
188 $kiriwrite_lang{"en-GB"}{"usekiriwritelink"} = "Start using Kiriwrite.";
192 my $language_selected = "";
193 my $http_query_confirm = $query->param('confirm');
194 my $http_query_installlanguage = $query->param('installlanguage');
196 if (!$http_query_installlanguage){
198 $language_selected = $default_language;
202 $language_selected = $http_query_installlanguage;
206 # Process the list of available languages.
208 my $language_list_name;
209 my @language_list_short;
210 my @language_list_long;
212 foreach my $language (keys %kiriwrite_lang){
214 $language_list_name = $kiriwrite_lang{$language}{"languagename"} . " (" . $language . ")";
215 push(@language_list_short, $language);
216 push(@language_list_long, $language_list_name);
220 # The CSS Stylesheet to use.
229 background-color: #408080;
231 font-family: sans-serif;
237 background-color: #408080;
239 border-color: #102020;
249 background-color: #408080;
251 border-color: #102020;
263 background-color: #204040;
269 background-color: #204040;
273 background-color: #204040;
278 background-color: #357070;
283 background-color: #306060;
290 #################################################################################
291 # Begin list of subroutines. #
292 #################################################################################
294 sub kiriwrite_variablecheck{
295 #################################################################################
296 # kiriwrite_variablecheck: Check to see if the data passed is valid. #
300 # kiriwrite_variablecheck(variablename, type, option, noerror); #
302 # variablename Specifies the variable to be checked. #
303 # type Specifies what type the variable is. #
304 # option Specifies the maximum/minimum length of the variable #
305 # (if minlength/maxlength is used) or if the filename should be #
306 # checked to see if it is blank. #
307 # noerror Specifies if Kiriwrite should return an error or not on #
309 #################################################################################
311 # Get the values that were passed to the subroutine.
313 my ($variable_data, $variable_type, $variable_option, $variable_noerror) = @_;
315 if ($variable_type eq "numbers"){
317 # Check for numbers and return an error if there is anything else than numebrs.
319 my $variable_data_validated = $variable_data; # Copy the variable_data to variable_data_validated.
320 $variable_data_validated =~ tr/0-9//d; # Take away all of the numbers and from the variable.
321 # If it only contains numbers then it should be blank.
323 if ($variable_data_validated eq ""){
324 # The validated variable is blank. So continue to the end of this section where the return function should be.
326 # The variable is not blank, so check if the no error value is set
329 if ($variable_noerror eq 1){
331 # The validated variable is not blank and the noerror
332 # value is set to 1. So return an value of 1.
333 # (meaning that the data is invalid).
337 } elsif ($variable_noerror eq 0) {
339 # The validated variable is not blank and the noerror
342 kiriwrite_error("invalidvariable");
346 # The variable noerror value is something else
347 # pther than 1 or 0. So return an error.
349 kiriwrite_error("invalidvariable");
357 } elsif ($variable_type eq "lettersnumbers"){
359 # Check for letters and numbers and return an error if there is anything else other
360 # than letters and numbers.
362 my $variable_data_validated = $variable_data; # Copy the variable_data to variable_data_validated
363 $variable_data_validated =~ tr/a-zA-Z0-9.//d;
364 $variable_data_validated =~ s/\s//g;
366 if ($variable_data_validated eq ""){
367 # The validated variable is blank. So continue to the end of this section where the return function should be.
369 # The variable is not blank, so check if the no error value is set
372 if ($variable_noerror eq 1){
374 # The validated variable is not blank and the noerror
375 # value is set to 1. So return an value of 1.
376 # (meaning that the data is invalid).
380 } elsif ($variable_noerror eq 0) {
382 # The validated variable is not blank and the noerror
385 kiriwrite_error("invalidvariable");
389 # The variable noerror value is something else
390 # pther than 1 or 0. So return an error.
392 kiriwrite_error("invalidvariable");
400 } elsif ($variable_type eq "maxlength"){
401 # Check for the length of the variable, return an error if it is longer than the length specified.
403 # Check if the variable_data string is blank, if it is then set the variable_data_length
406 my $variable_data_length = 0;
408 if (!$variable_data){
410 # Set variable_data_length to '0'.
411 $variable_data_length = 0;
415 # Get the length of the variable recieved.
416 $variable_data_length = length($variable_data);
422 if ($variable_data_length > $variable_option){
424 # The variable length is longer than it should be so check if
425 # the no error value is set 1.
427 if ($variable_noerror eq 1){
429 # The no error value is set to 1, so return an
430 # value of 1 (meaning tha the variable is
431 # too long to be used).
435 } elsif ($variable_noerror eq 0){
437 # The no error value is set to 0, so return
440 kiriwrite_error("variabletoolong");
444 # The no error value is something else other
445 # than 0 or 1, so return an error.
447 kiriwrite_error("variabletoolong");
453 # The variable length is exactly or shorter than specified, so continue to end of this section where
454 # the return function should be.
460 } elsif ($variable_type eq "datetime"){
461 # Check if the date and time setting format is valid.
463 if ($variable_data eq ""){
465 if ($variable_noerror eq 1){
467 # The no error value is set to 1 so return
468 # a value of 1 (meaning that the date and
469 # time format was blank).
473 } elsif ($variable_noerror eq 0){
475 # The no error value is set to 1 so return
478 kiriwrite_error("dateformatblank");
482 # The no error value is something else other
483 # than 0 or 1, so return an error.
485 kiriwrite_error("invalidvariable");
491 my $variable_data_validated = $variable_data;
492 $variable_data_validated =~ tr|dDmMyYhms/():[ ]||d;
494 if ($variable_data_validated eq ""){
496 # The date and time format is valid. So
501 # The validated data variable is not blank, meaning
502 # that it contains something else, so return an error
505 if ($variable_noerror eq 1){
507 # The no error value is set to 1 so return
508 # an value of 2. (meaning that the date and
509 # time format was invalid).
513 } elsif ($variable_noerror eq 0){
515 # The no error value is set to 0 so return
518 kiriwrite_error("dateformatinvalid");
522 # The no error value is something else other
523 # than 0 or 1 so return an error.
525 kiriwrite_error("invalidvariable");
533 } elsif ($variable_type eq "directory"){
534 # Check if the directory only contains letters and numbers and
535 # return an error if anything else appears.
537 my $variable_data_validated = $variable_data;
538 $variable_data_validated =~ tr/a-zA-Z0-9//d;
540 if ($variable_data eq ""){
542 if ($variable_noerror eq 1){
544 # The no error value is set to 1 so return
545 # a value of 1 (meaning that the directory
550 } elsif ($variable_noerror eq 0){
552 # The no error value is set to 1 so return
555 kiriwrite_error("blankdirectory");
559 # The no error value is something else other
560 # than 0 or 1, so return an error.
562 kiriwrite_error("invalidvariable");
568 if ($variable_data_validated eq ""){
570 # The validated data variable is blank, meaning that
571 # it only contains letters and numbers.
575 # The validated data variable is not blank, meaning
576 # that it contains something else, so return an error
579 if ($variable_noerror eq 1){
581 # The no error value is set to 1 so return
582 # an value of 2. (meaning that the directory
587 } elsif ($variable_noerror eq 0){
589 # The no error value is set to 0 so return
592 kiriwrite_error("invaliddirectory");
596 # The no error value is something else other
597 # than 0 or 1 so return an error.
599 kiriwrite_error("invalidvariable");
607 } elsif ($variable_type eq "language_filename"){
609 # The variable type is a language filename type.
610 # Check if the language file name is blank and
611 # if it is then return an error (or value).
613 if ($variable_data eq ""){
615 # The language filename is blank so check the
616 # no error value and return an error (or value).
618 if ($variable_noerror eq 1){
620 # Language filename is blank and the no error value
621 # is set as 1, so return a value of 1 (saying that
622 # the language filename is blank).
626 } elsif ($variable_noerror eq 0) {
628 # Language filename is blank and the no error value
629 # is not set as 1, so return an error.
631 kiriwrite_error("languagefilenameblank");
635 # The noerror value is something else other
636 # than 0 or 1 so return an error.
638 kiriwrite_error("invalidvariable");
644 # Set the following variables for later on.
646 my $variable_data_length = 0;
647 my $variable_data_char = "";
648 my $variable_data_seek = 0;
650 # Get the length of the language file name.
652 $variable_data_length = length($variable_data);
656 # Get a character from the language filename passed to this
657 # subroutine and the character the seek counter value is set
660 $variable_data_char = substr($variable_data, $variable_data_seek, 1);
662 # Check if the language filename contains a forward slash or a dot,
663 # if the selected character is a forward slash then return an error
666 if ($variable_data_char eq "/" || $variable_data_char eq "."){
668 # The language filename contains a forward slash or
669 # a dot so depending on the no error value, return
670 # an error or a value.
672 if ($variable_noerror eq 1){
674 # Language filename contains a forward slash or a dot
675 # and the no error value has been set to 1, so return
676 # an value of 2 (saying that the language file name is
681 } elsif ($variable_noerror eq 0) {
683 # Language filename contains a forward slash and the no
684 # error value has not been set to 1, so return an error.
686 kiriwrite_error("languagefilenameinvalid");
690 # The noerror value is something else other than
691 # 1 or 0 so return an error.
693 kiriwrite_error("invalidvariable");
699 # Increment the seek counter.
701 $variable_data_seek++;
703 } until ($variable_data_seek eq $variable_data_length);
707 } elsif ($variable_type eq "module"){
709 # The variable type is a presentation module filename.
711 # Check if the variable_data is blank and if it is
714 if ($variable_data eq ""){
716 # The presentation module is blank so check if an error
717 # value should be returned or a number should be
720 if ($variable_noerror eq 1){
722 # Module name is blank and the no error value
723 # is set to 1 so return a value of 2 (meaning
724 # that the page filename is blank).
728 } elsif ($variable_noerror eq 0) {
730 # Module name contains is blank and the no error
731 # value is set to 0 so return an error.
733 kiriwrite_critical("moduleblank");
737 # The no error value is something else other
738 # than 0 or 1 so return an error.
740 kiriwrite_critical("invalidvalue");
748 my $variable_data_validated = $variable_data;
749 $variable_data_validated =~ tr/a-zA-Z0-9//d;
751 if ($variable_data_validated eq ""){
755 if ($variable_noerror eq 1){
757 # Module name contains invalid characters and
758 # the no error value is set to 1 so return a
759 # value of 2 (meaning that the page filename
764 } elsif ($variable_noerror eq 0) {
766 # Module name contains invalid characters and
767 # the no error value is set to 0 so return an
770 kiriwrite_critical("moduleinvalid");
774 # The no error value is something else other
775 # than 0 or 1 so return an error.
777 kiriwrite_error("invalidvalue");
785 } elsif ($variable_type eq "serverprotocol"){
787 # Check if the server protocol is TCP or UDP and return
788 # an error if it isn't.
790 if ($variable_data ne "tcp" && $variable_data ne "udp"){
792 # The protocol given is not valid, check if the no
793 # error value is set to 1 and return an error if it isn't.
795 if ($variable_noerror eq 1){
797 # The no error value has been set to 1, so return a
798 # value of 1 (meaning that the server protocol is
803 } elsif ($variable_noerror eq 0){
805 # The no error value has been set to 0, so return
808 kiriwrite_error("serverprotocolinvalid");
812 # The no error value is something else other than 0
813 # or 1, so return an error.
815 kiriwrite_error("invalidoption");
823 } elsif ($variable_type eq "port"){
825 # Check if the port number given is less than 0 or more than 65535
826 # and return an error if it is.
828 if ($variable_data < 0 || $variable_data > 65535){
830 # The port number is less than 0 and more than 65535 so
831 # check if the no error value is set to 1 and return an
834 if ($variable_noerror eq 1){
836 # The no error value has been set to 1, so return a
837 # value of 1 (meaning that the port number is invalid).
841 } elsif ($variable_noerror eq 0){
843 # The no error value has been set to 0, so return
846 kiriwrite_error("serverportnumberinvalid");
850 # The no error value is something else other than 0
851 # or 1, so return an error.
853 kiriwrite_error("invalidoption");
863 # Another type than the valid ones above has been specified so return an error specifying an invalid option.
864 kiriwrite_error("invalidoption");
869 #################################################################################
870 # kiriwrite_error: Subroutine for processing error messages. #
874 # kiriwrite_error(errortype); #
876 # errortype Specifies the error type to use. #
877 #################################################################################
879 my $error_type = shift;
881 # Load the list of error messages.
883 my (%kiriwrite_error, $kiriwrite_error);
887 # Generic Error Messages
889 "generic" => $kiriwrite_lang{$language_selected}{generic},
891 "invalidvariable" => $kiriwrite_lang{$language_selected}{invalidvariable},
892 "invalidvalue" => $kiriwrite_lang{$language_selected}{invalidvalue},
893 "invalidoption" => $kiriwrite_lang{$language_selected}{invalidoption},
894 "variabletoolong" => $kiriwrite_lang{$language_selected}{variabletoolong},
895 "blankdirectory" => $kiriwrite_lang{$language_selected}{blankdirectory},
896 "invaliddirectory" => $kiriwrite_lang{$language_selected}{invaliddirectory},
897 "moduleblank" => $kiriwrite_lang{$language_selected}{moduleblank},
898 "moduleinvalid" => $kiriwrite_lang{$language_selected}{moduleinvalid},
900 # Specific Error Messages
902 "dbdirectorytoolong" => $kiriwrite_lang{$language_selected}{dbdirectorytoolong},
903 "outputdirectorytoolong" => $kiriwrite_lang{$language_selected}{outputdirectorytoolong},
904 "imagesuripathtoolong" => $kiriwrite_lang{$language_selected}{imagesuripathtoolong},
905 "dateformattoolong" => $kiriwrite_lang{$language_selected}{dateformattoolong},
906 "customdateformattoolong" => $kiriwrite_lang{$language_selected}{customdateformattoolong},
907 "languagefilenametoolong" => $kiriwrite_lang{$language_selected}{languagefilenametoolong},
909 "dateformatblank" => $kiriwrite_lang{$language_selected}{dateformatblank},
910 "dateformatinvalid" => $kiriwrite_lang{$language_selected}{dateformatinvalid},
911 "languagefilenameinvalid" => $kiriwrite_lang{$language_selected}{languagefilenameinvalid},
913 "dbdirectoryblank" => $kiriwrite_lang{$language_selected}{dbdirectoryblank},
914 "dbdirectoryinvalid" => $kiriwrite_lang{$language_selected}{dbdirectoryinvalid},
916 "textarearowblank" => $kiriwrite_lang{$language_selected}{textarearowblank},
917 "textarearowtoolong" => $kiriwrite_lang{$language_selected}{textarearowtoolong},
918 "textarearowinvalid" => $kiriwrite_lang{$language_selected}{textarearowinvalid},
920 "textareacolsblank" => $kiriwrite_lang{$language_selected}{textareacolsblank},
921 "textareacolstoolong" => $kiriwrite_lang{$language_selected}{textareacolstoolong},
922 "textareacolsinvalid" => $kiriwrite_lang{$language_selected}{textareacolsinvalid},
924 "outputdirectoryblank" => $kiriwrite_lang{$language_selected}{outputdirectoryblank},
925 "outputdirectoryinvalid" => $kiriwrite_lang{$language_selected}{outputdirectoryinvalid},
927 "presmoduleblank" => $kiriwrite_lang{$language_selected}{presmoduleblank},
928 "presmoduleinvalid" => $kiriwrite_lang{$language_selected}{presmoduleinvalid},
930 "dbmoduleblank" => $kiriwrite_lang{$language_selected}{dbmoduleblank},
931 "dbmoduleinvalid" => $kiriwrite_lang{$language_selected}{dbmoduleinvalid},
933 "presmodulemissing" => $kiriwrite_lang{$language_selected}{presmodulemissing},
934 "dbmodulemissing" => $kiriwrite_lang{$language_selected}{dbmodulemissing},
935 "languagefilenamemissing" => $kiriwrite_lang{$language_selected}{languagefilenamemissing},
937 "servernametoolong" => $kiriwrite_lang{$language_selected}{servernametoolong},
938 "servernameinvalid" => $kiriwrite_lang{$language_selected}{servernameinvalid},
939 "serverportnumbertoolong" => $kiriwrite_lang{$language_selected}{serverportnumbertoolong},
940 "serverportnumberinvalidcharacters" => $kiriwrite_lang{$language_selected}{serverportnumberinvalidcharacters},
941 "serverportnumberinvalid" => $kiriwrite_lang{$language_selected}{serverportnumberinvalid},
942 "serverprotocolnametoolong" => $kiriwrite_lang{$language_selected}{serverprotocolnametoolong},
943 "serverprotocolinvalid" => $kiriwrite_lang{$language_selected}{serverprotocolinvalid},
944 "serverdatabasenametoolong" => $kiriwrite_lang{$language_selected}{serverdatabasenametoolong},
945 "serverdatabasenameinvalid" => $kiriwrite_lang{$language_selected}{serverdatabasenameinvalid},
946 "serverdatabaseusernametoolong" => $kiriwrite_lang{$language_selected}{serverdatabaseusernametoolong},
947 "serverdatabaseusernameinvalid" => $kiriwrite_lang{$language_selected}{serverdatabaseusernameinvalid},
948 "serverdatabasepasswordtoolong" => $kiriwrite_lang{$language_selected}{serverdatabasepasswordtoolong},
949 "serverdatabasetableprefixtoolong" => $kiriwrite_lang{$language_selected}{serverdatabasetableprefixtoolong},
950 "serverdatabasetableprefixinvalid" => $kiriwrite_lang{$language_selected}{serverdatabasetableprefixinvalid},
952 "removeinstallscripttoolong" => $kiriwrite_lang{$language_selected}{removeinstallscripttoolong},
953 "cannotwriteconfigurationindirectory" => $kiriwrite_lang{$language_selected}{cannotwriteconfigurationindirectory},
954 "configurationfilereadpermissionsinvalid" => $kiriwrite_lang{$language_selected}{configurationfilereadpermissionsinvalid},
955 "configurationfilewritepermissionsinvalid" => $kiriwrite_lang{$language_selected}{configurationfilewritepermissionsinvalid},
959 # Check if the specified error is blank and if it is
960 # use the generic error messsage.
962 if (!$kiriwrite_error{$error_type}){
963 $error_type = "generic";
968 print start_html({ -title => $kiriwrite_lang{$language_selected}{error}, -style => { -code => $cssstyle }});
970 print h2($kiriwrite_lang{$language_selected}{error});
972 print $kiriwrite_error{$error_type};
974 print $kiriwrite_lang{$language_selected}{errormessagetext};
982 sub kiriwrite_writeconfig{
983 #################################################################################
984 # kiriwrite_writeconfig: Writes a configuration file. #
988 # kiriwrite_writeconfig(); #
989 #################################################################################
991 my ($passedsettings) = @_;
993 # Open the configuration file for writing.
995 open (my $configfile, "> " . "kiriwrite.cfg");
997 print $configfile "[config]
998 directory_data_db = $passedsettings->{DatabaseDirectory}
999 directory_data_output = $passedsettings->{OutputDirectory}
1000 directory_noncgi_images = $passedsettings->{ImagesURIPath}
1002 system_language = $passedsettings->{Language}
1003 system_presmodule = $passedsettings->{PresentationModule}
1004 system_dbmodule = $passedsettings->{DatabaseModule}
1005 system_datetime = $passedsettings->{DateFormat}
1007 display_textareacols = $passedsettings->{TextAreaCols}
1008 display_textarearows = $passedsettings->{TextAreaRows}
1010 database_server = $passedsettings->{DatabaseServer}
1011 database_port = $passedsettings->{DatabasePort}
1012 database_protocol = $passedsettings->{DatabaseProtocol}
1013 database_sqldatabase = $passedsettings->{DatabaseName}
1014 database_username = $passedsettings->{DatabaseUsername}
1015 database_password = $passedsettings->{DatabasePassword}
1016 database_tableprefix = $passedsettings->{DatabaseTablePrefix}
1019 close ($configfile);
1023 #################################################################################
1024 # End list of subroutines. #
1025 #################################################################################
1027 if (!$http_query_confirm){
1029 $http_query_confirm = 0;
1033 if ($http_query_confirm eq 1){
1035 # The confirm value has been given so get the data from the query.
1037 my $http_query_dbdirectory = $query->param('dbdirectory');
1038 my $http_query_outputdirectory = $query->param('outputdirectory');
1039 my $http_query_imagesuripath = $query->param('imagesuripath');
1041 my $http_query_textarearows = $query->param('textarearows');
1042 my $http_query_textareacols = $query->param('textareacols');
1044 my $http_query_dateformat = $query->param('dateformat');
1045 my $http_query_customdateformat = $query->param('customdateformat');
1047 my $http_query_language = $query->param('language');
1049 my $http_query_presmodule = $query->param('presmodule');
1050 my $http_query_dbmodule = $query->param('dbmodule');
1052 my $http_query_databaseserver = $query->param('databaseserver');
1053 my $http_query_databaseport = $query->param('databaseport');
1054 my $http_query_databaseprotocol = $query->param('databaseprotocol');
1055 my $http_query_databasename = $query->param('databasename');
1056 my $http_query_databaseusername = $query->param('databaseusername');
1057 my $http_query_databasepassword = $query->param('databasepassword');
1058 my $http_query_databasetableprefix = $query->param('databasetableprefix');
1059 my $http_query_removeinstallscript = $query->param('removeinstallscript');
1061 # Check if the text area rows and column values are blank.
1063 if (!$http_query_textarearows){
1065 # The text area rows value is blank so return
1068 kiriwrite_error("textarearowblank");
1072 if (!$http_query_textareacols){
1074 # The text area columns value is blank so
1077 kiriwrite_error("textareacolsblank");
1081 # Check the length of the variables.
1083 my $kiriwrite_dbdirectory_length_check = kiriwrite_variablecheck($http_query_dbdirectory, "maxlength", 64, 1);
1084 my $kiriwrite_outputdirectory_length_check = kiriwrite_variablecheck($http_query_outputdirectory, "maxlength", 64, 1);
1085 my $kiriwrite_imagesuripath_length_check = kiriwrite_variablecheck($http_query_imagesuripath, "maxlength", 512, 1);
1086 my $kiriwrite_textarearow_length_check = kiriwrite_variablecheck($http_query_textarearows, "maxlength", 3, 1);
1087 my $kiriwrite_textareacols_length_check = kiriwrite_variablecheck($http_query_textareacols, "maxlength", 3, 1);
1088 my $kiriwrite_dateformat_length_check = kiriwrite_variablecheck($http_query_dateformat, "maxlength", 32, 1);
1089 my $kiriwrite_customdateformat_length_check = kiriwrite_variablecheck($http_query_customdateformat, "maxlength", 32, 1);
1090 my $kiriwrite_language_length_check = kiriwrite_variablecheck($http_query_language, "maxlength", 16, 1);
1092 # Check if any errors occured while checking the
1093 # length of the variables.
1095 if ($kiriwrite_dbdirectory_length_check eq 1){
1097 # The database directory given is too long
1098 # so return an error.
1100 kiriwrite_error("dbdirectorytoolong");
1104 if ($kiriwrite_outputdirectory_length_check eq 1){
1106 # The output directory given is too long
1107 # so return an error.
1109 kiriwrite_error("outputdirectorytoolong");
1113 if ($kiriwrite_imagesuripath_length_check eq 1){
1115 # The images URI path given is too long
1116 # so return an error.
1118 kiriwrite_error("imagesuripathtoolong");
1122 if ($kiriwrite_dateformat_length_check eq 1){
1124 # The date format given is too long
1125 # so return an error.
1127 kiriwrite_error("dateformattoolong");
1131 if ($kiriwrite_customdateformat_length_check eq 1){
1133 # The date format given is too long
1134 # so return an error.
1136 kiriwrite_error("customdateformattoolong");
1140 if ($kiriwrite_language_length_check eq 1){
1142 # The language filename given is too long
1143 # so return an error.
1145 kiriwrite_error("languagefilenametoolong");
1149 if ($kiriwrite_textarearow_length_check eq 1){
1151 # The text area rows length is too long
1152 # so return an error.
1154 kiriwrite_error("textarearowtoolong");
1158 if ($kiriwrite_textareacols_length_check eq 1){
1160 # The text area columns length is too long
1161 # so return an error.
1163 kiriwrite_error("textareacolstoolong");
1167 # Check if the custom date and time setting has anything
1168 # set and if it doesn't then use the predefined one set.
1170 my $finaldateformat = "";
1172 if ($http_query_customdateformat ne ""){
1174 $finaldateformat = $http_query_customdateformat;
1178 $finaldateformat = $http_query_dateformat;
1182 my $kiriwrite_datetime_check = kiriwrite_variablecheck($finaldateformat, "datetime", 0, 1);
1184 if ($kiriwrite_datetime_check eq 1){
1186 # The date and time format is blank so return
1189 kiriwrite_error("dateformatblank");
1191 } elsif ($kiriwrite_datetime_check eq 2){
1193 # The date and time format is invalid so
1196 kiriwrite_error("dateformatinvalid");
1200 # Check if the language filename given is valid.
1202 my $kiriwrite_language_languagefilename_check = kiriwrite_variablecheck($http_query_language, "language_filename", "", 1);
1204 if ($kiriwrite_language_languagefilename_check eq 1) {
1206 # The language filename given is blank so
1209 kiriwrite_error("languagefilenameblank");
1211 } elsif ($kiriwrite_language_languagefilename_check eq 2){
1213 # The language filename given is invalid so
1216 kiriwrite_error("languagefilenameinvalid");
1220 # Check if the directory names only contain letters and numbers and
1221 # return a specific error if they don't.
1223 my $kiriwrite_dbdirectory_check = kiriwrite_variablecheck($http_query_dbdirectory, "directory", 0, 1);
1224 my $kiriwrite_outputdirectory_check = kiriwrite_variablecheck($http_query_outputdirectory, "directory", 0, 1);
1226 if ($kiriwrite_dbdirectory_check eq 1){
1228 # The database directory name is blank, so return
1231 kiriwrite_error("dbdirectoryblank");
1233 } elsif ($kiriwrite_dbdirectory_check eq 2){
1235 # The database directory name is invalid, so return
1238 kiriwrite_error("dbdirectoryinvalid");
1242 if ($kiriwrite_outputdirectory_check eq 1){
1244 # The output directory name is blank, so return
1247 kiriwrite_error("outputdirectoryblank");
1249 } elsif ($kiriwrite_outputdirectory_check eq 2){
1251 # The output directory name is invalid, so return
1254 kiriwrite_error("outputdirectoryinvalid");
1258 if ($kiriwrite_dbdirectory_check eq 1){
1260 # The database directory name is blank, so return
1263 kiriwrite_error("dbdirectoryblank");
1265 } elsif ($kiriwrite_dbdirectory_check eq 2){
1267 # The database directory name is invalid, so return
1270 kiriwrite_error("dbdirectoryinvalid");
1274 if ($kiriwrite_outputdirectory_check eq 1){
1276 # The output directory name is blank, so return
1279 kiriwrite_error("outputdirectoryblank");
1281 } elsif ($kiriwrite_outputdirectory_check eq 2){
1283 # The output directory name is invalid, so return
1286 kiriwrite_error("outputdirectoryinvalid");
1290 # Check to see if the text area rows and column values
1293 my $kiriwrite_textarearow_number_check = kiriwrite_variablecheck($http_query_textarearows, "numbers", 0, 1);
1294 my $kiriwrite_textareacols_number_check = kiriwrite_variablecheck($http_query_textareacols, "numbers", 0, 1);
1296 if ($kiriwrite_textarearow_number_check eq 1){
1298 # The text area row value is invalid so return
1301 kiriwrite_error("textarearowinvalid");
1305 if ($kiriwrite_textareacols_number_check eq 1){
1307 # The text area columns value is invalid so return
1310 kiriwrite_error("textareacolsinvalid");
1314 # Check the module names to see if they're valid.
1316 my $kiriwrite_presmodule_modulename_check = kiriwrite_variablecheck($http_query_presmodule, "module", 0, 1);
1317 my $kiriwrite_dbmodule_modulename_check = kiriwrite_variablecheck($http_query_dbmodule, "module", 0, 1);
1319 if ($kiriwrite_presmodule_modulename_check eq 1){
1321 # The presentation module name is blank, so return
1324 kiriwrite_error("presmoduleblank");
1328 if ($kiriwrite_presmodule_modulename_check eq 2){
1330 # The presentation module name is invalid, so return
1333 kiriwrite_error("presmoduleinvalid");
1337 if ($kiriwrite_dbmodule_modulename_check eq 1){
1339 # The database module name is blank, so return
1342 kiriwrite_error("dbmoduleblank");
1346 if ($kiriwrite_dbmodule_modulename_check eq 2){
1348 # The database module name is invalid, so return
1351 kiriwrite_error("dbmoduleinvalid");
1355 # Check if the database module, presentation module and
1356 # language file exists.
1358 if (!-e "Modules/Presentation/" . $http_query_presmodule . ".pm"){
1360 # The presentation module is missing so return an
1363 kiriwrite_error("presmodulemissing");
1367 if (!-e "Modules/Database/" . $http_query_dbmodule . ".pm"){
1369 # The database module is missing so return an
1372 kiriwrite_error("dbmodulemissing");
1376 if (!-e "lang/" . $http_query_language . ".lang"){
1378 # The language file is missing so return an
1381 kiriwrite_error("languagefilenamemissing");
1385 # Check the database server settings.
1387 my $kiriwrite_databaseserver_length_check = kiriwrite_variablecheck($http_query_databaseserver, "maxlength", 128, 1);
1388 my $kiriwrite_databaseserver_lettersnumbers_check = kiriwrite_variablecheck($http_query_databaseserver, "lettersnumbers", 0, 1);
1389 my $kiriwrite_databaseport_length_check = kiriwrite_variablecheck($http_query_databaseport, "maxlength", 5, 1);
1390 my $kiriwrite_databaseport_numbers_check = kiriwrite_variablecheck($http_query_databaseport, "numbers", 0, 1);
1391 my $kiriwrite_databaseport_port_check = kiriwrite_variablecheck($http_query_databaseport, "port", 0, 1);
1392 my $kiriwrite_databaseprotocol_length_check = kiriwrite_variablecheck($http_query_databaseprotocol, "maxlength", 5, 1);
1393 my $kiriwrite_databaseprotocol_protocol_check = kiriwrite_variablecheck($http_query_databaseprotocol, "serverprotocol", 0, 1);
1394 my $kiriwrite_databasename_length_check = kiriwrite_variablecheck($http_query_databasename, "maxlength", 32, 1);
1395 my $kiriwrite_databasename_lettersnumbers_check = kiriwrite_variablecheck($http_query_databasename, "lettersnumbers", 0, 1);
1396 my $kiriwrite_databaseusername_length_check = kiriwrite_variablecheck($http_query_databaseusername, "maxlength", 16, 1);
1397 my $kiriwrite_databaseusername_lettersnumbers_check = kiriwrite_variablecheck($http_query_databaseusername, "lettersnumbers", 0, 1);
1398 my $kiriwrite_databasepassword_length_check = kiriwrite_variablecheck($http_query_databasepassword, "maxlength", 64, 1);
1399 my $kiriwrite_databasetableprefix_length_check = kiriwrite_variablecheck($http_query_databasetableprefix, "maxlength", 16, 1);
1400 my $kiriwrite_databasetableprefix_lettersnumbers_check = kiriwrite_variablecheck($http_query_databasetableprefix, "lettersnumbers", 0, 1);
1402 if ($kiriwrite_databaseserver_length_check eq 1){
1404 # The length of the database server name is too long so
1407 kiriwrite_error("servernametoolong");
1411 if ($kiriwrite_databaseserver_lettersnumbers_check eq 1){
1413 # The database server name contains characters other
1414 # than letters and numbers, so return an error.
1416 kiriwrite_error("servernameinvalid");
1420 if ($kiriwrite_databaseport_length_check eq 1){
1422 # The database port number length is too long so return
1425 kiriwrite_error("serverportnumbertoolong");
1429 if ($kiriwrite_databaseport_numbers_check eq 1){
1431 # The database port number contains characters other
1432 # than numbers so return an error.
1434 kiriwrite_error("serverportnumberinvalidcharacters");
1438 if ($kiriwrite_databaseport_port_check eq 1){
1440 # The database port number given is invalid so return
1443 kiriwrite_error("serverportnumberinvalid");
1447 if ($kiriwrite_databaseprotocol_length_check eq 1){
1449 # The database protocol name given is too long so
1452 kiriwrite_error("serverprotocolnametoolong");
1456 if ($kiriwrite_databaseprotocol_protocol_check eq 1){
1458 # The server protcol given is invalid so return
1461 kiriwrite_error("serverprotocolinvalid");
1465 if ($kiriwrite_databasename_length_check eq 1){
1467 # The SQL database name is too long so return
1470 kiriwrite_error("serverdatabasenametoolong");
1474 if ($kiriwrite_databasename_lettersnumbers_check eq 1){
1476 # The database name contains invalid characters
1477 # so return an error.
1479 kiriwrite_error("serverdatabasenameinvalid");
1483 if ($kiriwrite_databaseusername_length_check eq 1){
1485 # The database username given is too long so
1488 kiriwrite_error("serverdatabaseusernametoolong");
1492 if ($kiriwrite_databaseusername_lettersnumbers_check eq 1){
1494 # The database username contains invalid characters
1495 # so return an error.
1497 kiriwrite_error("serverdatabaseusernameinvalid");
1501 if ($kiriwrite_databasepassword_length_check eq 1){
1503 # The database password given is too long so return
1506 kiriwrite_error("serverdatabasepasswordtoolong");
1510 if ($kiriwrite_databasetableprefix_length_check eq 1){
1512 # The database table prefix given is too long so
1515 kiriwrite_error("serverdatabasetableprefixtoolong");
1519 if ($kiriwrite_databasetableprefix_lettersnumbers_check eq 1){
1521 # The database table prefix given contains invalid
1522 # characters so return an error.
1524 kiriwrite_error("serverdatabasetableprefixinvalid");
1528 # Check the length of value of the checkboxes.
1530 my $kiriwrite_removeinstallscript_length_check = kiriwrite_variablecheck($http_query_removeinstallscript, "maxlength", 2, 1);
1532 if ($kiriwrite_removeinstallscript_length_check eq 1){
1534 # The remove install script value is too long
1535 # so return an error.
1537 kiriwrite_error("removeinstallscripttoolong");
1541 # Check if there is write permissions for the directory.
1545 # No write permissions for the directory the
1546 # script is running from so return an error.
1548 kiriwrite_error("cannotwriteconfigurationindirectory");
1552 # Check if the configuration file already exists.
1554 if (-e 'kiriwrite.cfg'){
1556 # Check if the configuration file has read permissions.
1558 if (!-r 'kiriwrite.cfg'){
1560 # The configuration file has invalid read permissions
1561 # set so return an error.
1563 kiriwrite("configurationfilereadpermissionsinvalid");
1567 # Check if the configuration file has write permissions.
1569 if (!-w 'kiriwrite.cfg'){
1571 # The configuration file has invalid write permissions
1572 # set so return an error.
1574 kiriwrite("configurationfilewritepermissionsinvalid");
1580 # Write the new configuration file.
1582 kiriwrite_writeconfig({ DatabaseDirectory => $http_query_dbdirectory, OutputDirectory => $http_query_outputdirectory, ImagesURIPath => $http_query_imagesuripath, TextAreaCols => $http_query_textareacols, TextAreaRows => $http_query_textarearows, DateFormat => $finaldateformat, Language => $http_query_language, PresentationModule => $http_query_presmodule, DatabaseModule => $http_query_dbmodule, DatabaseServer => $http_query_databaseserver, DatabasePort => $http_query_databaseport, DatabaseProtocol => $http_query_databaseprotocol, DatabaseName => $http_query_databasename, DatabaseUsername => $http_query_databaseusername, DatabasePassword => $http_query_databasepassword, DatabaseTablePrefix => $http_query_databasetableprefix });
1584 my $installscriptmessage = "";
1586 # Check if the installation script should be deleted.
1588 if (!$http_query_removeinstallscript){
1590 $http_query_removeinstallscript = "off";
1594 if ($http_query_removeinstallscript eq "on"){
1596 if (unlink("install.cgi")){
1598 $installscriptmessage = $kiriwrite_lang{$language_selected}{installscriptremoved};
1602 $installscriptmessage = $kiriwrite_lang{$language_selected}{cannotremovescript};
1603 $installscriptmessage =~ s/%s/$!/g;
1611 print start_html({ -title => $kiriwrite_lang{$language_selected}{installertitle}, -style => { -code => $cssstyle }});
1612 print h2($kiriwrite_lang{$language_selected}{installertitle});
1613 print $kiriwrite_lang{$language_selected}{installedmessage};
1615 if ($installscriptmessage){
1619 print $installscriptmessage;
1625 print $kiriwrite_lang{$language_selected}{usekiriwritetext};
1628 print a({-href=>'kiriwrite.cgi'}, $kiriwrite_lang{$language_selected}{usekiriwritelink});
1634 # Create a list of common date and time formats.
1636 my @datetime_formats = [
1637 'DD/MM/YY (hh:mm:ss)', 'DD/MM/YY hh:mm:ss', 'D/M/Y (hh:mm:ss)',
1638 'D/M/Y hh:mm:ss', 'D/M/YY (hh:mm:ss)', 'D/M/YY hh:mm:ss',
1639 'DD/MM (hh:mm:ss)', 'D/M (hh:mm:ss)', 'DD/MM hh:mm:ss',
1640 'D/M hh:mm:ss', 'DD/MM hh:mm', 'D/M hh:mm',
1641 'DD/MM/YY', 'D/M/Y', 'DD/MM',
1643 'YY-MM-DD (hh:mm:ss)', 'YY-MM-DD hh:mm:ss', 'Y-M-D (hh:mm:ss)',
1644 'Y-M-D hh:mm:ss', 'M-D (hh:mm:ss)', 'M-D hh:mm:ss',
1648 # Create the list of tests to do.
1650 my ($test_list, %test_list);
1651 my %dependency_results;
1652 my %database_results;
1657 my $dependency_error = 0;
1658 my $database_onemodule = 0;
1659 my $database_error = 0;
1663 my $language_xml_data;
1664 my $language_file_friendly;
1666 my $presentation_file_friendly;
1668 # Check to see if the needed Perl modules are installed.
1670 $test_list{CheckConfigAuto}{Name} = "Config::Auto";
1671 $test_list{CheckConfigAuto}{Type} = "dependency";
1672 $test_list{CheckConfigAuto}{Code} = "Config::Auto";
1674 $test_list{CheckDBI}{Name} = "DBI";
1675 $test_list{CheckDBI}{Type} = "dependency";
1676 $test_list{CheckDBI}{Code} = "DBI";
1678 $test_list{CheckTieHash}{Name} = "Tie::IxHash";
1679 $test_list{CheckTieHash}{Type} = "dependency";
1680 $test_list{CheckTieHash}{Code} = "Tie::IxHash";
1682 $test_list{CheckCGILite}{Name} = "CGI::Lite";
1683 $test_list{CheckCGILite}{Type} = "dependency";
1684 $test_list{CheckCGILite}{Code} = "CGI::Lite";
1686 $test_list{Encode}{Name} = "Encode";
1687 $test_list{Encode}{Type} = "dependency";
1688 $test_list{Encode}{Code} = "Encode";
1690 $test_list{DBDmysql}{Name} = "DBD::mysql";
1691 $test_list{DBDmysql}{Type} = "database";
1692 $test_list{DBDmysql}{Code} = "DBD::mysql";
1694 $test_list{DBDSQLite}{Name} = "DBD::SQLite";
1695 $test_list{DBDSQLite}{Type} = "database";
1696 $test_list{DBDSQLite}{Code} = "DBD::SQLite";
1698 # Check the file and directory permissions to see if they are correct.
1700 $test_list{MainDirectory}{Name} = "Kiriwrite Directory (.)";
1701 $test_list{MainDirectory}{Type} = "file";
1702 $test_list{MainDirectory}{Code} = ".";
1703 $test_list{MainDirectory}{Writeable} = "1";
1705 $test_list{LanguageDirectory}{Name} = "Language Directory (lang)";
1706 $test_list{LanguageDirectory}{Type} = "file";
1707 $test_list{LanguageDirectory}{Code} = "lang";
1708 $test_list{LanguageDirectory}{Writeable} = "0";
1710 $test_list{LibraryDirectory}{Name} = "Library Directory (lib)";
1711 $test_list{LibraryDirectory}{Type} = "file";
1712 $test_list{LibraryDirectory}{Code} = "lib";
1713 $test_list{LibraryDirectory}{Writeable} = "0";
1715 $test_list{ModulesDirectory}{Name} = "Modules Directory (Modules)";
1716 $test_list{ModulesDirectory}{Type} = "file";
1717 $test_list{ModulesDirectory}{Code} = "Modules";
1718 $test_list{ModulesDirectory}{Writeable} = "0";
1720 $test_list{DBModulesDirectory}{Name} = "Database Modules Directory (Modules/Database)";
1721 $test_list{DBModulesDirectory}{Type} = "file";
1722 $test_list{DBModulesDirectory}{Code} = "Modules/Database";
1723 $test_list{DBModulesDirectory}{Writeable} = "0";
1725 $test_list{PresModulesDirectory}{Name} = "Presentation Modules Directory (Modules/Presentation)";
1726 $test_list{PresModulesDirectory}{Type} = "file";
1727 $test_list{PresModulesDirectory}{Code} = "Modules/Presentation";
1728 $test_list{PresModulesDirectory}{Writeable} = "0";
1730 # Preform those tests.
1732 foreach $test (keys %test_list){
1734 # Check the type of test.
1736 if ($test_list{$test}{Type} eq "dependency"){
1738 if (eval "require " . $test_list{$test}{Code}){
1740 # The module exists and is working correctly.
1742 $dependency_results{$test_list{$test}{Name}}{result} = $kiriwrite_lang{$language_selected}{testpass};
1746 # The module does not exist or has an error.
1748 $dependency_error = 1;
1749 $dependency_results{$test_list{$test}{Name}}{result} = $kiriwrite_lang{$language_selected}{testfail};
1753 } elsif ($test_list{$test}{Type} eq "database"){
1755 if (eval "require " . $test_list{$test}{Code}){
1757 # The module exists and it is working correctly.
1759 $database_results{$test_list{$test}{Name}}{result} = $kiriwrite_lang{$language_selected}{testpass};
1760 $database_onemodule = 1;
1764 # The module does not exist or has an error.
1766 $database_error = 1;
1767 $database_results{$test_list{$test}{Name}}{result} = $kiriwrite_lang{$language_selected}{testfail};
1771 } elsif ($test_list{$test}{Type} eq "file"){
1773 if (-e $test_list{$test}{Code}){
1775 # The filename given does exist.
1779 # the filename given does not exist.
1782 $file_results{$test_list{$test}{Name}}{result} = $kiriwrite_lang{$language_selected}{errormessage} . $kiriwrite_lang{$language_selected}{doesnotexist};
1786 # Test to see if the filename given has read
1789 if (-r $test_list{$test}{Code}){
1791 # The filename given has valid permissions set.
1793 $file_results{$test_list{$test}{Name}}{result} = $kiriwrite_lang{$language_selected}{testpass};
1797 # The filename given has invalid permissions set.
1800 $file_results{$test_list{$test}{Name}}{result} = $kiriwrite_lang{$language_selected}{errormessage} . $kiriwrite_lang{$language_selected}{invalidpermissionsset};
1804 if ($test_list{$test}{Writeable} eq 1){
1806 # Test to see if the filename given has write
1809 if (-w $test_list{$test}{Code}){
1811 # The filename given has valid permissions set.
1813 $file_results{$test_list{$test}{Name}}{result} = $kiriwrite_lang{$language_selected}{testpass};
1817 # The filename given has invalid permissions set.
1820 $file_results{$test_list{$test}{Name}}{result} = $kiriwrite_lang{$language_selected}{errormessage} . $kiriwrite_lang{$language_selected}{invalidpermissionsset};
1834 # Print the page for installing Kiriwrite.
1836 print start_html( -title=> $kiriwrite_lang{$language_selected}{installertitle}, -style => { -code => $cssstyle });
1838 print start_table( { -width=> "100%" } );
1840 print start_td({ -class => "languagebar" });
1841 print $kiriwrite_lang{$language_selected}{installertitle};
1843 print start_td({ -class => "languagebarselect" });
1844 print start_form("POST", "install.cgi");
1846 # This is a bodge for the language list.
1848 my $language_name_short;
1849 my $language_list_seek = 0;
1851 print "<select name=\"installlanguage\">";
1853 foreach $language_name_short (@language_list_short){
1855 print "<option value=\"" . $language_name_short . "\">" . $language_list_long[$language_list_seek] . "</option>";
1856 $language_list_seek++;
1861 print submit($kiriwrite_lang{$language_selected}{switch});
1868 print h2($kiriwrite_lang{$language_selected}{installertitle});
1870 print $kiriwrite_lang{$language_selected}{installertext};
1872 print h3($kiriwrite_lang{$language_selected}{dependencytitle});
1873 print h4($kiriwrite_lang{$language_selected}{requiredmodules});
1874 print $kiriwrite_lang{$language_selected}{perlmodules};
1878 if ($dependency_error eq 1){
1880 print $kiriwrite_lang{$language_selected}{errormessage};
1881 print $kiriwrite_lang{$language_selected}{dependencyperlmodulesmissing};
1887 print start_table();
1889 print start_td({ -class => "tablecellheader" });
1890 print $kiriwrite_lang{$language_selected}{module};
1892 print start_td({ -class => "tablecellheader" });
1893 print $kiriwrite_lang{$language_selected}{result};
1897 foreach $test (keys %dependency_results) {
1900 print start_td({ -class => "tablename" });
1903 print start_td({ -class => "tabledata" });
1904 print $dependency_results{$test}{result};
1912 print h4($kiriwrite_lang{$language_selected}{databasemodules});
1913 print $kiriwrite_lang{$language_selected}{databasemodulestext};
1917 if ($database_error eq 1){
1919 print $kiriwrite_lang{$language_selected}{warningmessage};
1920 print $kiriwrite_lang{$language_selected}{databaseperlmodulesmissing};
1926 print start_table();
1928 print start_td({ -class => "tablecellheader" });
1929 print $kiriwrite_lang{$language_selected}{module};
1931 print start_td({ -class => "tablecellheader" });
1932 print $kiriwrite_lang{$language_selected}{result};
1936 foreach $test (keys %database_results) {
1939 print start_td({ -class => "tablename" });
1942 print start_td({ -class => "tabledata" });
1943 print $database_results{$test}{result};
1951 print h4($kiriwrite_lang{$language_selected}{filepermissions});
1953 print $kiriwrite_lang{$language_selected}{filepermissionstext};
1957 if ($file_error eq 1){
1959 print $kiriwrite_lang{$language_selected}{errormessage};
1960 print $kiriwrite_lang{$language_selected}{filepermissionsinvalid};
1966 print start_table();
1968 print start_td({ -class => "tablecellheader" });
1971 print start_td({ -class => "tablecellheader" });
1976 foreach $test (keys %file_results) {
1979 print start_td({ -class => "tablename" });
1982 print start_td({ -class => "tabledata" });
1983 print $file_results{$test}{result};
1991 if ($dependency_error eq 1){
1994 print h4($kiriwrite_lang{$language_selected}{criticalerror});
1995 print $kiriwrite_lang{$language_selected}{dependencymodulesnotinstalled};
2001 if ($database_onemodule eq 0){
2004 print h4($kiriwrite_lang{$language_selected}{criticalerror});
2005 print $kiriwrite_lang{$language_selected}{databasemodulesnotinstalled};
2011 if ($file_error eq 1){
2014 print h4($kiriwrite_lang{$language_selected}{criticalerror});
2015 print $kiriwrite_lang{$language_selected}{filepermissionerrors};
2022 my (%available_languages, $available_languages);
2023 my @presentation_modules;
2024 my @database_modules;
2026 my $presentation_modules_ref = \@presentation_modules;
2027 my $database_modules_ref = \@database_modules;
2029 # Get the list of available languages.
2031 tie(%available_languages, 'Tie::IxHash');
2033 opendir(LANGUAGEDIR, "lang");
2034 my @language_directory = grep /m*\.lang$/, readdir(LANGUAGEDIR);
2035 closedir(LANGUAGEDIR);
2039 foreach my $language_file (@language_directory){
2041 # Load the language file.
2043 $language_data = Config::Auto::parse("lang/" . $language_file, format => "ini");
2045 # Load the XML data.
2046 #$language_xml_data = $xsl->XMLin("lang/" . $language_file);
2048 # Get the friendly name for the language file.
2050 $language_file_friendly = $language_file;
2051 $language_file_friendly =~ s/.lang$//g;
2053 $language_name = $language_data->{about}->{name};
2055 $available_languages{$language_file_friendly} = $language_name . " (" . $language_file_friendly . ")";
2059 # Get the list of presentation modules.
2061 opendir(OUTPUTSYSTEMDIR, "Modules/Presentation");
2062 my @presmodule_directory = grep /m*\.pm$/, readdir(OUTPUTSYSTEMDIR);
2063 closedir(OUTPUTSYSTEMDIR);
2065 foreach my $presmodule_file (@presmodule_directory){
2067 # Get the friendly name for the database module.
2069 $presmodule_file =~ s/.pm$//g;
2071 push(@presentation_modules, $presmodule_file);
2075 # Get the list of database modules.
2077 opendir(DATABASEDIR, "Modules/Database");
2078 my @dbmodule_directory = grep /m*\.pm$/, readdir(DATABASEDIR);
2079 closedir(DATABASEDIR);
2081 foreach my $dbmodule_file (@dbmodule_directory){
2083 # Get the friendly name for the database module.
2085 $dbmodule_file =~ s/.pm$//g;
2087 push(@database_modules, $dbmodule_file);
2091 print h3($kiriwrite_lang{$language_selected}{settingstitle});
2093 print $kiriwrite_lang{$language_selected}{settingstext};
2097 print start_form("POST", "install.cgi");
2098 print hidden( -name => 'confirm', -default => '1');
2099 print hidden( -name => 'installlanguage', -default => $language_selected);
2101 print start_table({ -width => "100%" });
2104 print start_td({ -class => "tablecellheader" });
2105 print $kiriwrite_lang{$language_selected}{setting};
2107 print start_td({ -class => "tablecellheader" });
2108 print $kiriwrite_lang{$language_selected}{value};
2113 print start_td({ -class => "tablecellheader" });
2114 print $kiriwrite_lang{$language_selected}{directories};
2116 print start_td({ -class => "tablecellheader" });
2121 print start_td({ -class => "tablename" });
2122 print $kiriwrite_lang{$language_selected}{databasedirectory};
2124 print start_td({ -class => "tabledata" });
2125 print textfield({ -name => "dbdirectory", -size => 32, -maxlength => 64, -value => $default_dbdirectory });
2130 print start_td({ -class => "tablename" });
2131 print $kiriwrite_lang{$language_selected}{outputdirectory};
2133 print start_td({ -class => "tabledata" });
2134 print textfield({ -name => "outputdirectory", -size => 32, -maxlength => 64, -value => $default_outputdirectory });
2139 print start_td({ -class => "tablename" });
2140 print $kiriwrite_lang{$language_selected}{imagesuripath};
2142 print start_td({ -class => "tabledata" });
2143 print textfield({ -name => "imagesuripath", -size => 32, -maxlength => 64, -value => $default_imagesuri });
2148 print start_td({ -class => "tablecellheader" });
2149 print $kiriwrite_lang{$language_selected}{display};
2151 print start_td({ -class => "tablecellheader" });
2156 print start_td({ -class => "tablename" });
2157 print $kiriwrite_lang{$language_selected}{textarearows};
2159 print start_td({ -class => "tabledata" });
2160 print textfield({ -name => "textarearows", -size => 3, -maxlength => 3, -value => $default_textarearows });
2165 print start_td({ -class => "tablename" });
2166 print $kiriwrite_lang{$language_selected}{textareacols};
2168 print start_td({ -class => "tabledata" });
2169 print textfield({ -name => "textareacols", -size => 3, -maxlength => 3, -value => $default_textareacols });
2174 print start_td({ -class => "tablecellheader" });
2175 print $kiriwrite_lang{$language_selected}{date};
2177 print start_td({ -class => "tablecellheader" });
2183 print start_td({ -class => "tablename" });
2184 print $kiriwrite_lang{$language_selected}{dateformat};
2186 print start_td({ -class => "tabledata" });
2188 print popup_menu( -name => "dateformat", -values => @datetime_formats );
2189 print textfield({ -name => "customdateformat", -size => 32, -maxlength => 64, });
2195 print start_td({ -class => "tablecellheader" });
2196 print $kiriwrite_lang{$language_selected}{language};
2198 print start_td({ -class => "tablecellheader" });
2203 print start_td({ -class => "tablename" });
2204 print $kiriwrite_lang{$language_selected}{systemlanguage};
2206 print start_td({ -class => "tabledata" });
2208 # Note: This the following code is bodge. If anyone can fix it so that it all works
2209 # with popup_menu properly it will be appriciated.
2211 print "<select name=\"language\">";
2213 foreach my $language (keys %available_languages){
2215 if ($language eq $language_selected){
2217 print "<option value=\"" . $language . "\" selected=selected>" . $available_languages{$language} . "</option>";
2221 print "<option value=\"" . $language . "\">" . $available_languages{$language} . "</option>";
2233 print start_td({ -class => "tablecellheader" });
2234 print $kiriwrite_lang{$language_selected}{modules};
2236 print start_td({ -class => "tablecellheader" });
2242 print start_td({ -class => "tablename" });
2243 print $kiriwrite_lang{$language_selected}{presentationmodule};
2245 print start_td({ -class => "tabledata" });
2246 print popup_menu({ -name => 'presmodule', -values => $presentation_modules_ref, -default => "HTML4S" });
2251 print start_td({ -class => "tablename" });
2252 print $kiriwrite_lang{$language_selected}{databasemodule};
2254 print start_td({ -class => "tabledata" });
2255 print popup_menu({ -name => 'dbmodule', -values => $database_modules_ref, -default => "SQLite" });
2260 print start_td({ -class => "tablename" });
2261 print $kiriwrite_lang{$language_selected}{databaseserver};
2263 print start_td({ -class => "tabledata" });
2264 print textfield({ -name => "databaseserver", -size => 32, -maxlength => 128, -value => $default_server });
2269 print start_td({ -class => "tablename" });
2270 print $kiriwrite_lang{$language_selected}{databaseport};
2272 print start_td({ -class => "tabledata" });
2273 print textfield({ -name => "databaseport", -maxlength => 5, -size => 5, -value => $default_port });
2278 print start_td({ -class => "tablename" });
2279 print $kiriwrite_lang{$language_selected}{databaseprotocol};
2281 print start_td({ -class => "tabledata" });
2282 print popup_menu( -name => "databaseprotocol", -values => [ 'tcp', 'udp' ], -default => $default_protocol);
2287 print start_td({ -class => "tablename" });
2288 print $kiriwrite_lang{$language_selected}{databasename};
2290 print start_td({ -class => "tabledata" });
2291 print textfield({ -name => "databasename", -size => 32, -maxlength => 32, -default => $default_name });
2296 print start_td({ -class => "tablename" });
2297 print $kiriwrite_lang{$language_selected}{databaseusername};
2299 print start_td({ -class => "tabledata" });
2300 print textfield({ -name => "databaseusername", -size => 16, -maxlength => 16, -default => $default_username });
2305 print start_td({ -class => "tablename" });
2306 print $kiriwrite_lang{$language_selected}{databasepassword};
2308 print start_td({ -class => "tabledata" });
2309 print password_field({ -name => "databasepassword", -size => 32, -maxlength => 64 });
2314 print start_td({ -class => "tablename" });
2315 print $kiriwrite_lang{$language_selected}{databasetableprefix};
2317 print start_td({ -class => "tabledata" });
2318 print textfield({ -name => "databasetableprefix", -size => 32, -maxlength => 32, -default => $default_prefix });
2323 print start_td({ -class => "tablecellheader" });
2324 print $kiriwrite_lang{$language_selected}{installationoptions};
2326 print start_td({ -class => "tablecellheader" });
2332 print start_td({ -class => "tablename" });
2333 print $kiriwrite_lang{$language_selected}{installoptions};
2335 print start_td({ -class => "tabledata" });
2336 print checkbox( -name => 'removeinstallscript', -checked => 1, -label => " " . $kiriwrite_lang{$language_selected}{removeinstallscript});
2343 print submit($kiriwrite_lang{$language_selected}{savesettingsbutton});
2345 print reset($kiriwrite_lang{$language_selected}{resetsettingsbutton});