Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
More modifications
[kiriwrite/.git] / cgi-files / kiriwrite.cgi
1 #!/usr/bin/perl -Tw
3 #################################################################################
4 # Kiriwrite (kiriwrite.cgi)                                                     #
5 # Main program script                                                           #
6 #                                                                               #
7 # Version: 0.1.0                                                                #
8 #                                                                               #
9 # Copyright (C) 2005-2007 Steve Brokenshire <sbrokenshire@xestia.co.uk>         #
10 #                                                                               #
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.                             #
14 #                                                                               #
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.#
18 #                                                                               #
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.
27 use utf8;
28 use CGI qw(header);
29 use Tie::IxHash;
31 # This is commented out because it uses a fair bit of CPU usage.
33 #use CGI::Carp('fatalsToBrowser');      # Output errors to the browser.
35 # Declare global variables for Kiriwrite settings and languages.
37 my ($kiriwrite_config, %kiriwrite_config, $kiriwrite_lang, $kiriwrite_version, %kiriwrite_version, $kiriwrite_env, %kiriwrite_env, $kiriwrite_presmodule, $kiriwrite_dbmodule, $xsl);
39 # Setup the version information for Kiriwrite.
41 %kiriwrite_version = (
42         "major"         => 0,
43         "minor"         => 1,
44         "revision"      => 0
45 );
47 sub BEGIN{
48 #################################################################################
49 # BEGIN: Get the enviroment stuff                                               #
50 #################################################################################
52         # Get the script filename.
54         my $env_script_name = $ENV{'SCRIPT_NAME'};
56         # Process the script filename until there is only the
57         # filename itself.
59         my $env_script_name_length = length($env_script_name);
60         my $filename_seek = 0;
61         my $filename_char = "";
62         my $filename_last = 0;
64         do {
65                 $filename_char = substr($env_script_name, $filename_seek, 1);
66                 if ($filename_char eq "/"){
67                         $filename_last = $filename_seek + 1;
68                 }
69                 $filename_seek++;
70         } until ($filename_seek eq $env_script_name_length || $env_script_name_length eq 0);
72         my $env_script_name_finallength = $env_script_name_length - $filename_last;
73         my $script_filename = substr($env_script_name, $filename_last, $env_script_name_finallength);
75         # Setup the needed enviroment variables for Kiriwrite.
77         %kiriwrite_env = (
78                 "script_filename" => $script_filename,
79         );
81         $ENV{XML_SIMPLE_PREFERRED_PARSER} = "XML::Parser";
83 }
85 #################################################################################
86 # Begin listing the functions needed.                                           #
87 #################################################################################
89 sub kiriwrite_page_add{
90 #################################################################################
91 # kiriwrite_page_add: Adds a page to a database                                 #
92 #                                                                               #
93 # Usage:                                                                        #
94 #                                                                               #
95 # kiriwrite_page_add(database, pagefilename, title, description, section,       #
96 #                       template, settings, info, confirm);                     #
97 #                                                                               #
98 # database      Specifies the database name.                                    #
99 # pagefilename  Specifies the page filename.                                    #
100 # title         Specifies the page title to be used.                            #
101 # description   Specifies the short description of the page.                    #
102 # section       Specifies the section assigned to the page.                     #
103 # template      Specifies the template to use.                                  #
104 # settings      Specifies the settings to be used on the page.                  #
105 # data          Specifies the data which consists the page.                     #
106 # confirm       Confirms action to add an page.                                 #
107 #################################################################################
109         # Fetch the required variables that have been passed to the subroutine.
111         my ($pagedatabase, $pagefilename, $pagetitle, $pagedescription, $pagesection, $pagetemplate, $pagesettings, $pagefiledata, $confirm) = @_;
113         # Check if the action to add a new page has been confirmed (or not).
115         if (!$confirm){
117                 $confirm = 0;
119         }
121         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
123         # Check if the database filename is valid and return an error if
124         # it isn't.
126         my $pagedatabase_filename_check = kiriwrite_variablecheck($pagedatabase, "filename", 0, 1);
128         if ($pagedatabase_filename_check eq 1){
130                 # The database filename is blank, so return an error.
132                 kiriwrite_error("blankdatabasepageadd");
134         } elsif ($pagedatabase_filename_check eq 2){
136                 # The database filename is invalid, so return an error.
138                 kiriwrite_error("databasefilenameinvalid");
140         }
142         # Check the length the database name and return an error if it's
143         # too long.
145         my $pagedatabase_length_check   = kiriwrite_variablecheck($pagedatabase, "maxlength", 32, 1);
147         if ($pagedatabase_length_check eq 1){
149                 # The database name is too long, so return an error.
151                 kiriwrite_error("databasefilenametoolong");
153         }
155         if ($confirm eq "1"){
157                 # Check all the variables to see if they UTF8 valid.
159                 kiriwrite_variablecheck($pagefilename, "utf8", 0, 0);
160                 kiriwrite_variablecheck($pagetitle, "utf8", 0, 0);
161                 kiriwrite_variablecheck($pagedescription, "utf8", 0, 0);
162                 kiriwrite_variablecheck($pagesection, "utf8", 0, 0);
163                 kiriwrite_variablecheck($pagedatabase, "utf8", 0, 0);
164                 kiriwrite_variablecheck($pagesettings, "utf8", 0, 0);
165                 kiriwrite_variablecheck($pagetemplate, "utf8", 0, 0);
166                 kiriwrite_variablecheck($pagefiledata, "utf8", 0, 0);
168                 # Convert the values into proper UTF8 values.
170                 $pagefilename           = kiriwrite_utf8convert($pagefilename);
171                 $pagetitle              = kiriwrite_utf8convert($pagetitle);
172                 $pagedescription        = kiriwrite_utf8convert($pagedescription);
173                 $pagesection            = kiriwrite_utf8convert($pagesection);
174                 $pagedatabase           = kiriwrite_utf8convert($pagedatabase);
175                 $pagesettings           = kiriwrite_utf8convert($pagesettings);
176                 $pagetemplate           = kiriwrite_utf8convert($pagetemplate);
177                 $pagefiledata           = kiriwrite_utf8convert($pagefiledata);
179                 # Check all the variables (except for the page data, filename and settings 
180                 # will be checked more specifically later if needed) that were passed to 
181                 # the subroutine.
183                 my $pagefilename_maxlength_check                = kiriwrite_variablecheck($pagefilename, "maxlength", 256, 1);
184                 my $pagetitle_maxlength_check                   = kiriwrite_variablecheck($pagetitle, "maxlength", 512, 1);
185                 my $pagedescription_maxlength_check             = kiriwrite_variablecheck($pagedescription, "maxlength", 512, 1);
186                 my $pagesection_maxlength_check                 = kiriwrite_variablecheck($pagesection, "maxlength", 256, 1);
187                 my $pagedatabase_maxlength_check                = kiriwrite_variablecheck($pagedatabase, "maxlength", 32, 1);
188                 my $pagesettings_maxlength_check                = kiriwrite_variablecheck($pagesettings, "maxlength", 1, 1);
189                 my $pagetemplate_maxlength_check                = kiriwrite_variablecheck($pagetemplate, "maxlength", 64, 1);
191                 # Check if an value returned is something else other than 0.
193                 if ($pagefilename_maxlength_check eq 1){
195                         # The page filename given is too long, so return an error.
197                         kiriwrite_error("pagefilenametoolong");
199                 }
201                 if ($pagetitle_maxlength_check eq 1){
203                         # The page title given is too long, so return an error.
205                         kiriwrite_error("pagetitletoolong");
207                 }
209                 if ($pagedescription_maxlength_check eq 1){
211                         # The page description given is too long, so return an error.
213                         kiriwrite_error("pagedescriptiontoolong");
215                 }
217                 if ($pagesection_maxlength_check eq 1){
219                         # The page section given is too long, so return an error.
221                         kiriwrite_error("pagesectiontoolong");
223                 }
225                 if ($pagedatabase_maxlength_check eq 1){
227                         # The page database given is too long, so return an error.
229                         kiriwrite_error("pagedatabasefilenametoolong");
231                 }
233                 if ($pagesettings_maxlength_check eq 1){
235                         # The page settings given is too long, so return an error.
237                         kiriwrite_error("pagesettingstoolong");
239                 }
241                 if ($pagetemplate_maxlength_check eq 1){
243                         # The page template given is too long, so return an error.
245                         kiriwrite_error("pagetemplatefilenametoolong");
247                 }
249                 # The action to create a new page has been confirmed, so add the page to the
250                 # selected database.
252                 if (!$pagefilename){
253                         kiriwrite_error("pagefilenameblank");
254                 }
256                 # Check the page filename and page settings.
258                 my $pagefilename_filename_check = kiriwrite_variablecheck($pagefilename, "page_filename", 0, 1);
259                 my $pagesettings_setting_check  = kiriwrite_variablecheck($pagesettings, "pagesetting", 0, 1);
260                 my $pagetemplate_filename_check = 0;
262                 if ($pagetemplate ne "!none"){
264                         # A template is being used so check the filename of the
265                         # template.
267                         $pagetemplate_filename_check    = kiriwrite_variablecheck($pagetemplate, "page_filename", 0, 1);
269                 }
271                 if ($pagefilename_filename_check ne 0){
273                         # The page filename given is invalid, so return an error.
275                         kiriwrite_error("pagefilenameinvalid");
277                 }
279                 if ($pagesettings_setting_check eq 1){
281                         # The page settings given is invalid, so return an error.
283                         kiriwrite_error("pagesettingsinvalid");
285                 }
287                 if ($pagetemplate_filename_check eq 1){
289                         # The template filename given is invalid, so return an error
291                         kiriwrite_error("templatefilenameinvalid");
293                 }
295                 # Check if the database has write permissions.
297                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($pagedatabase, 1, 1);
299                 if ($database_permissions eq 1){
301                         # The database permissions are invalid so return an error.
303                         kiriwrite_error("databaseinvalidpermissions");
305                 }
307                 # Connect to the database server.
309                 $kiriwrite_dbmodule->connect();
311                 # Check if any errors occured while connecting to the database server.
313                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
315                         # A database connection error has occured so return
316                         # an error.
318                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
320                 }
322                 # Select the database to add the page to.
324                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $pagedatabase });
326                 # Check if any errors had occured while selecting the database.
328                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
330                         # The database does not exist, so return an error.
332                         kiriwrite_error("databasemissingfile");
334                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
336                         # The database has invalid permissions set, so return
337                         # an error.
339                         kiriwrite_error("databaseinvalidpermissions");
341                 }
343                 # Get information about the database.
345                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
347                 # Check if any error occured while getting the database information.
349                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
351                         # A database error has occured so return an error and
352                         # also the extended error information.
354                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
356                 };
358                 # Add the page to the selected database.
360                 $kiriwrite_dbmodule->addpage({ PageFilename => $pagefilename, PageName => $pagetitle, PageDescription => $pagedescription, PageSection => $pagesection, PageTemplate => $pagetemplate, PageContent => $pagefiledata, PageSettings => $pagesettings });
362                 # Check if any errors occured while adding the page.
364                 if ($kiriwrite_dbmodule->geterror eq "PageExists"){
366                         # A page with the filename given already exists so
367                         # return an error.
369                         kiriwrite_error("pagefilenameexists");
371                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
373                         # A database error has occured so return an error
374                         # with extended error information.
376                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
378                 }
380                 my $database_name = $database_info{"DatabaseName"};
382                 # Disconnect from the database server.
384                 $kiriwrite_dbmodule->disconnect();
386                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{addpage}, { Style => "pageheader" });
387                 $kiriwrite_presmodule->addlinebreak();
388                 $kiriwrite_presmodule->addlinebreak();
389                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pageaddedmessage}, $pagetitle, $database_name));
390                 $kiriwrite_presmodule->addlinebreak();
391                 $kiriwrite_presmodule->addlinebreak();
392                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $pagedatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
394                 return $kiriwrite_presmodule->grab();
396         } elsif ($confirm eq 0) {
398                 # The action to create a new page has not been confirmed, so print out a form
399                 # for adding a page to a database.
401                 my %template_list;
402                 my %template_info;
403                 my @templates_list;
404                 my %database_info;
405                 my $template_filename;
406                 my $template_name;
407                 my $template_data = "";
408                 my $template_warningmessage;
409                 my $template_warning = 0;
410                 my $template_count = 0;
411                 my $template;
413                 tie(%template_list, 'Tie::IxHash');
415                 # Connect to the database server.
417                 $kiriwrite_dbmodule->connect();
419                 # Check if any errors occured while connecting to the database server.
421                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
423                         # A database connection error has occured so return
424                         # an error.
426                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
428                 }
430                 # Select the database.
432                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $pagedatabase });
434                 # Check if any errors had occured while selecting the database.
436                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
438                         # The database does not exist, so return an error.
440                         kiriwrite_error("databasemissingfile");
442                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
444                         # The database has invalid permissions set, so return
445                         # an error.
447                         kiriwrite_error("databaseinvalidpermissions");
449                 }
451                 # Check if the database has write permissions.
453                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($pagedatabase, 1, 1);
455                 if ($database_permissions eq 1){
457                         # The database permissions are invalid so return an error.
459                         kiriwrite_error("databaseinvalidpermissions");
461                 }
463                 # Get information about the database.
465                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
467                 # Check if any error occured while getting the database information.
469                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
471                         # A database error has occured so return an error and
472                         # also the extended error information.
474                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
476                 };
478                 # Connect to the template database.
480                 $kiriwrite_dbmodule->connecttemplate();
482                 # Check if any errors occured while connecting to the template database.
484                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
486                         # The template database does not exist so set the template
487                         # warning message.
489                         $template_warningmessage = $kiriwrite_lang->{pages}->{notemplatedatabase};
490                         $template_warning = 1;
492                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
494                         # The template database has invalid permissions set so write
495                         # the template warning message.
497                         $template_warningmessage = $kiriwrite_lang->{pages}->{templatepermissionserror};
498                         $template_warning = 1;
500                 }
502                 if ($template_warning eq 0){
504                         # Get the list of templates available.
506                         @templates_list = $kiriwrite_dbmodule->gettemplatelist();
508                         # Check if any errors had occured.
510                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
512                                 # A database error occured while getting the list
513                                 # of templates so return a warning message with the 
514                                 # extended error information.
516                                 $template_warningmessage = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1));
517                                 $template_warning = 1;
519                         }
521                         if ($template_warning eq 0){
523                                 # Check to see if there are any templates in the templates
524                                 # list array.
526                                 my $template_filename = "";
527                                 my $template_name = "";
529                                 foreach $template (@templates_list){
531                                         # Get information about the template.
533                                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
535                                         # Check if any error occured while getting the template information.
537                                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
539                                                 # A database error has occured, so return an error.
541                                                 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
543                                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
545                                                 # The template does not exist, so process the next template.
547                                                 next;
549                                         }
551                                         # Get the template filename and name.
553                                         $template_filename = $template_info{"TemplateFilename"};
554                                         $template_name = $template_info{"TemplateName"};
556                                         $template_list{$template_count}{Filename} = $template_filename;
557                                         $template_list{$template_count}{Name} = $template_name;
559                                         $template_count++;
561                                 }
563                                 # Check if the final template list is blank.
565                                 if (!%template_list){
567                                         # The template list is blank so write the template
568                                         # warning message.
570                                         $template_warningmessage = $kiriwrite_lang->{pages}->{notemplatesavailable};
572                                 }
574                         }
576                 }
578                 my $database_name       = $database_info{"DatabaseName"};
580                 # Disconnect from the template database.
582                 $kiriwrite_dbmodule->disconnecttemplate();
584                 # Disconnect from the database server.
586                 $kiriwrite_dbmodule->disconnect();
588                 # write out the form for adding a page.
590                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{addpage}, { Style => "pageheader" });
591                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");#
592                 $kiriwrite_presmodule->startbox();
593                 $kiriwrite_presmodule->addhiddendata("mode", "page");
594                 $kiriwrite_presmodule->addhiddendata("action", "add");
595                 $kiriwrite_presmodule->addhiddendata("database", $pagedatabase);
596                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
597                 $kiriwrite_presmodule->addlinebreak();
598                 $kiriwrite_presmodule->endbox();
599                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
601                 $kiriwrite_presmodule->startheader();
602                 $kiriwrite_presmodule->addcell("tablecellheader");
603                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{setting});
604                 $kiriwrite_presmodule->endcell();
605                 $kiriwrite_presmodule->addcell("tablecellheader");
606                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{value});
607                 $kiriwrite_presmodule->endcell();
608                 $kiriwrite_presmodule->endheader();
610                 $kiriwrite_presmodule->startrow();
611                 $kiriwrite_presmodule->addcell("tablecell1");
612                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{database});
613                 $kiriwrite_presmodule->endcell();
614                 $kiriwrite_presmodule->addcell("tablecell2");
615                 $kiriwrite_presmodule->addtext($database_name);
616                 $kiriwrite_presmodule->endcell();
617                 $kiriwrite_presmodule->endrow();
619                 $kiriwrite_presmodule->startrow();
620                 $kiriwrite_presmodule->addcell("tablecell1");
621                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagename});
622                 $kiriwrite_presmodule->endcell();
623                 $kiriwrite_presmodule->addcell("tablecell2");
624                 $kiriwrite_presmodule->addinputbox("pagename", { Size => 64, MaxLength => 512 });
625                 $kiriwrite_presmodule->endcell();
626                 $kiriwrite_presmodule->endrow();
628                 $kiriwrite_presmodule->startrow();
629                 $kiriwrite_presmodule->addcell("tablecell1");
630                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedescription});
631                 $kiriwrite_presmodule->endcell();
632                 $kiriwrite_presmodule->addcell("tablecell2");
633                 $kiriwrite_presmodule->addinputbox("pagedescription", { Size => 64, MaxLength => 512 });
634                 $kiriwrite_presmodule->endcell();
635                 $kiriwrite_presmodule->endrow();
637                 $kiriwrite_presmodule->startrow();
638                 $kiriwrite_presmodule->addcell("tablecell1");
639                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
640                 $kiriwrite_presmodule->endcell();
641                 $kiriwrite_presmodule->addcell("tablecell2");
642                 $kiriwrite_presmodule->addinputbox("pagesection", { Size => 64, MaxLength => 256 });
643                 $kiriwrite_presmodule->endcell();
644                 $kiriwrite_presmodule->endrow();
646                 $kiriwrite_presmodule->startrow();
647                 $kiriwrite_presmodule->addcell("tablecell1");
648                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
649                 $kiriwrite_presmodule->endcell();
650                 $kiriwrite_presmodule->addcell("tablecell2");
652                 # Check if the template warning value has been set
653                 # and write the error message in place of the templates
654                 # list if it is.
656                 if ($template_warning eq 1){
658                         $kiriwrite_presmodule->addhiddendata("pagetemplate", "!none");
659                         $kiriwrite_presmodule->addtext($template_warningmessage);
661                 } else {
663                         my $template_file;
664                         my $page_filename;
665                         my $page_name;
667                         $kiriwrite_presmodule->addselectbox("pagetemplate");
669                         foreach $template_file (keys %template_list){
671                                 $page_filename  = $template_list{$template_file}{Filename};
672                                 $page_name      = $template_list{$template_file}{Name};
673                                 $kiriwrite_presmodule->addoption($page_name . " (" . $page_filename . ")", { Value => $page_filename });
674                                 $template_count++;
676                                 $template_count = 0;
677                         }
679                         $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
680                         $kiriwrite_presmodule->endselectbox();
682                 }
684                 $kiriwrite_presmodule->endcell();
685                 $kiriwrite_presmodule->endrow();
687                 $kiriwrite_presmodule->startrow();
688                 $kiriwrite_presmodule->addcell("tablecell1");
689                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagefilename});
690                 $kiriwrite_presmodule->endcell();
691                 $kiriwrite_presmodule->addcell("tablecell2");
692                 $kiriwrite_presmodule->addinputbox("pagefilename", { Size => 64, MaxLength => 256 });
693                 $kiriwrite_presmodule->endcell();
694                 $kiriwrite_presmodule->endrow();
696                 $kiriwrite_presmodule->startrow();
697                 $kiriwrite_presmodule->addcell("tablecell1");
698                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagecontent});
699                 $kiriwrite_presmodule->endcell();
700                 $kiriwrite_presmodule->addcell("tablecell2");
701                 $kiriwrite_presmodule->addtextbox("pagecontent", { Columns => 50, Rows => 10 });
702                 $kiriwrite_presmodule->addlinebreak();
703                 $kiriwrite_presmodule->addlinebreak();
704                 $kiriwrite_presmodule->startbox("datalist");
705                 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
706                 $kiriwrite_presmodule->addlinebreak();
707                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
708                 $kiriwrite_presmodule->addlinebreak();
709                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
710                 $kiriwrite_presmodule->addlinebreak();
711                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
712                 $kiriwrite_presmodule->addlinebreak();
713                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
714                 $kiriwrite_presmodule->addlinebreak();
715                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
716                 $kiriwrite_presmodule->addlinebreak();
717                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
718                 $kiriwrite_presmodule->addlinebreak();
719                 $kiriwrite_presmodule->endbox();
720                 $kiriwrite_presmodule->endcell();
721                 $kiriwrite_presmodule->endrow();
723                 $kiriwrite_presmodule->startrow();
724                 $kiriwrite_presmodule->addcell("tablecell1");
725                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
726                 $kiriwrite_presmodule->endcell();
727                 $kiriwrite_presmodule->addcell("tablecell2");
728                 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", Selected => 1, LineBreak => 1});
729                 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", Selected => 0, LineBreak => 1});
730                 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", Selected => 0, LineBreak => 1});
731                 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", Selected => 0, LineBreak => 1});
732                 $kiriwrite_presmodule->endcell();
733                 $kiriwrite_presmodule->endrow();
735                 $kiriwrite_presmodule->endtable();
737                 $kiriwrite_presmodule->startbox();
738                 $kiriwrite_presmodule->addlinebreak();
739                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{addpagebutton});
740                 $kiriwrite_presmodule->addtext(" | ");
741                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
742                 $kiriwrite_presmodule->addtext(" | ");
743                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $pagedatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
744                 $kiriwrite_presmodule->endbox();
745                 $kiriwrite_presmodule->endform();
748                 return $kiriwrite_presmodule->grab();
750         } else {
752                 # The confirm value is something else than '1' or '0' so
753                 # return an error.
755                 kiriwrite_error("invalidvalue");
757         }
763 sub kiriwrite_page_delete{
764 #################################################################################
765 # kiriwrite_page_delete: Deletes a (single) page from a database.               #
766 #                                                                               #
767 # Usage:                                                                        #
768 #                                                                               #
769 # kiriwrite_page_delete(database, page, [confirm]);                             #
770 #                                                                               #
771 # database      Specifies the database to delete from.                          #
772 # page          Specifies the page to delete.                                   #
773 # confirm       Confirms the action to delete the page.                         #
774 #################################################################################
776         my ($database, $page, $confirm) = @_;
778         # Check if the database filename is valid and return an error if
779         # it isn't.
781         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
783         if ($pagedatabase_filename_check eq 1){
785                 # The database filename is blank, so return an error.
787                 kiriwrite_error("blankdatabasepageadd");
789         } elsif ($pagedatabase_filename_check eq 2){
791                 # The database filename is invalid, so return an error.
793                 kiriwrite_error("databasefilenameinvalid");
795         }
797         # Check the length the database name and return an error if it's
798         # too long.
800         my $pagedatabase_length_check   = kiriwrite_variablecheck($database, "maxlength", 32, 1);
802         if ($pagedatabase_length_check eq 1){
804                 # The database name is too long, so return an error.
806                 kiriwrite_error("databasefilenametoolong");
808         }
810         # Check if the page name is specified is blank and return an error if
811         # it is.
813         if (!$page){
815                 # The page name is blank, so return an error.
817                 kiriwrite_error("blankfilename");
819         }
821         # If the confirm value is blank, then set the confirm value to 0.
823         if (!$confirm){
825                 $confirm = 0;
827         }
829         if ($confirm eq 1){
831                 # The action to delete the selected page from the database
832                 # has been confirmed.
834                 # Connect to the database server.
836                 $kiriwrite_dbmodule->connect();
838                 # Check if any errors occured while connecting to the database server.
840                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
842                         # A database connection error has occured so return
843                         # an error.
845                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
847                 }
849                 # Select the database to delete the page from.
851                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
853                 # Check if any errors had occured while selecting the database.
855                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
857                         # The database does not exist, so return an error.
859                         kiriwrite_error("databasemissingfile");
861                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
863                         # The database has invalid permissions set, so return
864                         # an error.
866                         kiriwrite_error("databaseinvalidpermissions");
868                 }
870                 # Check if the database has write permissions.
872                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
874                 if ($database_permissions eq 1){
876                         # The database permissions are invalid so return an error.
878                         kiriwrite_error("databaseinvalidpermissions");
880                 }
882                 # Get the information about the database.
884                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
886                 # Check if any error occured while getting the database information.
888                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
890                         # A database error has occured so return an error and
891                         # also the extended error information.
893                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
895                 }
897                 # Get the information about the page that is going to be deleted.
899                 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
901                 # Check if any errors occured while getting the page information.
903                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
905                         # A database error has occured so return an error and
906                         # also the extended error information.
908                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
910                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
912                         # The page does not exist, so return an error.
914                         kiriwrite_error("pagefilenamedoesnotexist");
916                 }
918                 # Delete the page from the database.
920                 $kiriwrite_dbmodule->deletepage({ PageFilename => $page });
922                 # Check if any errors occured while deleting the page from the database.
924                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
926                         # A database error has occured so return an error and
927                         # also the extended error information.
929                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
931                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
933                         # The page does not exist, so return an error.
935                         kiriwrite_error("pagefilenamedoesnotexist");
937                 }
939                 # Get the database name and page name.
941                 my $database_name       = $database_info{"DatabaseName"};
942                 my $page_name           = $page_info{"PageName"};
944                 # Disconnect from the database server.
946                 $kiriwrite_dbmodule->disconnect();
948                 # Write out a message saying that the selected page from
949                 # the database has been deleted.
951                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedeleted}, { Style => "pageheader" });
952                 $kiriwrite_presmodule->addlinebreak();
953                 $kiriwrite_presmodule->addlinebreak();
954                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagedeletedmessage}, $page_name, $database_name));
955                 $kiriwrite_presmodule->addlinebreak();
956                 $kiriwrite_presmodule->addlinebreak();
957                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
959                 return $kiriwrite_presmodule->grab();
961         } elsif ($confirm eq 0){
963                 # Connect to the database server.
965                 $kiriwrite_dbmodule->connect();
967                 # Check if any errors occured while connecting to the database server.
969                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
971                         # A database connection error has occured so return
972                         # an error.
974                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
976                 }
978                 # Select the database.
980                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
982                 # Check if any errors had occured while selecting the database.
984                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
986                         # The database does not exist, so return an error.
988                         kiriwrite_error("databasemissingfile");
990                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
992                         # The database has invalid permissions set, so return
993                         # an error.
995                         kiriwrite_error("databaseinvalidpermissions");
997                 }
999                 # Get information about the database.
1001                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1003                 # Check if any errors occured while getting the database information.
1005                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1007                         # A database error has occured so return an error and
1008                         # also the extended error information.
1010                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1012                 }
1014                 # Get information about the page that is going to be deleted.
1016                 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
1018                 # Check if any errors occured while getting the page information.
1020                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1022                         # A database error has occured so return an error and
1023                         # also the extended error information.
1025                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1027                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1029                         # The page does not exist, so return an error.
1031                         kiriwrite_error("pagefilenamedoesnotexist");
1033                 }
1035                 my $database_name       = $database_info{"DatabaseName"};
1036                 my $page_name           = $page_info{"PageName"};
1038                 # Disconnect from the database server.
1040                 $kiriwrite_dbmodule->disconnect();
1042                 # Write a message asking the user to confirm the deletion of the
1043                 # page.
1045                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletepage}, $page_name), { Style => "pageheader" });
1046                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1047                 $kiriwrite_presmodule->startbox();
1048                 $kiriwrite_presmodule->addhiddendata("mode", "page");
1049                 $kiriwrite_presmodule->addhiddendata("action", "delete");
1050                 $kiriwrite_presmodule->addhiddendata("database", $database);
1051                 $kiriwrite_presmodule->addhiddendata("page", $page);
1052                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
1053                 $kiriwrite_presmodule->addlinebreak();
1054                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletepagemessage}, $page_name, $database_name));
1055                 $kiriwrite_presmodule->addlinebreak();
1056                 $kiriwrite_presmodule->addlinebreak();
1057                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{deletepagebutton});
1058                 $kiriwrite_presmodule->addtext(" | ");
1059                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{deletepagesreturnlink}, $database_name)});
1060                 $kiriwrite_presmodule->endbox();
1061                 $kiriwrite_presmodule->endform();
1063                 return $kiriwrite_presmodule->grab();
1065         } else {
1067                 # Another page deletion type was specified, so return an error.
1069                 kiriwrite_error("invalidoption");
1071         }
1075 sub kiriwrite_page_edit{
1076 #################################################################################
1077 # kiriwrite_page_edit: Edits a page from a database.                            #
1078 #                                                                               #
1079 # Usage:                                                                        #
1080 #                                                                               #
1081 # kiriwrite_page_edit(database, filename, newfilename, newname, newdescription, #
1082 #                       newsection, newtemplate,  newsettings, newpagecontent   #
1083 #                       confirm);                                               #
1084 #                                                                               #
1085 # database       Specifies the database to edit from.                           #
1086 # filename       Specifies the filename to use.                                 #
1087 # newfilename    Specifies the new page filename to use.                        #
1088 # newname        Specifies the new page name to use.                            #
1089 # newdescription Specifies the new description for the page.                    #
1090 # newsection     Specifies the new section name to use.                         #
1091 # newtemplate    Specifies the new template filename to use.                    #
1092 # newsettings    Specifies the new page settings to use.                        #
1093 # newpagecontent Specifies the new page content to use.                         #
1094 # confirm        Confirms the action to edit the page.                          #
1095 #################################################################################
1097         # Get the values that have been passed to the subroutine.
1099         my ($database, $pagefilename, $pagenewfilename, $pagenewtitle, $pagenewdescription, $pagenewsection, $pagenewtemplate, $pagenewsettings, $pagenewcontent, $confirm) = @_;
1101         # Check if the confirm value is blank and if it is, then set it to '0'.
1103         if (!$confirm){
1105                 $confirm = 0;
1107         }
1109         # Check if the confirm value is more than one character long and if it
1110         # is then return an error.
1112         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
1114         # Check if the database filename is valid and return an error if
1115         # it isn't.
1117         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
1119         if ($pagedatabase_filename_check eq 1){
1121                 # The database filename is blank, so return an error.
1123                 kiriwrite_error("blankdatabasepageadd");
1125         } elsif ($pagedatabase_filename_check eq 2){
1127                 # The database filename is invalid, so return an error.
1129                 kiriwrite_error("databasefilenameinvalid");
1131         }
1133         # Check the length the database name and return an error if it's
1134         # too long.
1136         my $pagedatabase_length_check   = kiriwrite_variablecheck($database, "maxlength", 32, 1);
1138         if ($pagedatabase_length_check eq 1){
1140                 # The database name is too long, so return an error.
1142                 kiriwrite_error("databasefilenametoolong");
1144         }
1146         # Check if the page identification number is blank (which it shouldn't
1147         # be) and if it is, then return an error.
1149         if (!$pagefilename){
1151                 kiriwrite_error("blankfilename");
1153         }
1155         # Check if the confirm value is '1' and if it is, edit the specified
1156         # page in the database.
1158         if ($confirm eq 1){
1160                 # Check if the new page filename is blank.
1162                 if (!$pagenewfilename){
1164                         # The page filename is blank so return an error.
1166                         kiriwrite_error("pagefilenameblank");
1168                 }
1170                 # The action to edit a page has been confirmed so check the
1171                 # variables recieved are UTF8 compiliant before converting.
1173                 kiriwrite_variablecheck($database, "utf8", 0, 0);
1174                 kiriwrite_variablecheck($pagefilename, "utf8", 0, 0);
1175                 kiriwrite_variablecheck($pagenewfilename, "utf8", 0, 0);
1176                 kiriwrite_variablecheck($pagenewtitle, "utf8", 0, 0);
1177                 kiriwrite_variablecheck($pagenewdescription, "utf8", 0, 0);
1178                 kiriwrite_variablecheck($pagenewsection, "utf8", 0, 0);
1179                 kiriwrite_variablecheck($pagenewsettings, "utf8", 0, 0);
1180                 kiriwrite_variablecheck($pagenewtemplate, "utf8", 0, 0);
1181                 kiriwrite_variablecheck($pagenewcontent, "utf8", 0, 0);
1183                 # Convert the variables into proper UTF8 variables.
1185                 $database               = kiriwrite_utf8convert($database);
1186                 $pagefilename           = kiriwrite_utf8convert($pagefilename);
1187                 $pagenewfilename        = kiriwrite_utf8convert($pagenewfilename);
1188                 $pagenewtitle           = kiriwrite_utf8convert($pagenewtitle);
1189                 $pagenewdescription     = kiriwrite_utf8convert($pagenewdescription);
1190                 $pagenewsection         = kiriwrite_utf8convert($pagenewsection);
1191                 $pagenewsettings        = kiriwrite_utf8convert($pagenewsettings);
1192                 $pagenewtemplate        = kiriwrite_utf8convert($pagenewtemplate);
1193                 $pagenewcontent         = kiriwrite_utf8convert($pagenewcontent);
1195                 # Check the lengths of the variables.
1197                 my $pagenewfilename_maxlength_check     = kiriwrite_variablecheck($pagenewfilename, "maxlength", 256, 1);
1198                 my $pagenewtitle_maxlength_check        = kiriwrite_variablecheck($pagenewtitle, "maxlength", 512, 1);
1199                 my $pagenewdescription_maxlength_check  = kiriwrite_variablecheck($pagenewdescription, "maxlength", 512, 1);
1200                 my $pagenewsection_maxlength_check      = kiriwrite_variablecheck($pagenewsection, "maxlength", 256, 1);
1201                 my $pagenewsettings_maxlength_check     = kiriwrite_variablecheck($pagenewsettings, "maxlength", 1, 1);
1202                 my $pagenewtemplate_maxlength_check     = kiriwrite_variablecheck($pagenewtemplate, "maxlength", 64, 1);
1204                 # Check each result to see if the length of the variable
1205                 # is valid and return an error if it isn't.
1207                 if ($pagenewfilename_maxlength_check eq 1){
1209                         # The new page filename given is too long, so return an error.
1211                         kiriwrite_error("pagefilenametoolong");
1213                 }
1215                 if ($pagenewtitle_maxlength_check eq 1){
1217                         # The new page title given is too long, so return an error.
1219                         kiriwrite_error("pagetitletoolong");
1221                 }
1223                 if ($pagenewdescription_maxlength_check eq 1){
1225                         # The new page description given is too long, so return an error.
1227                         kiriwrite_error("pagedescriptiontoolong");
1229                 }
1231                 if ($pagenewsection_maxlength_check eq 1){
1233                         # The new page section given is too long, so return an error.
1235                         kiriwrite_error("pagesectiontoolong");
1237                 }
1239                 if ($pagenewsettings_maxlength_check eq 1){
1241                         # The new page settings given is too long, so return an error.
1243                         kiriwrite_error("pagesettingstoolong");
1245                 }
1247                 if ($pagenewtemplate_maxlength_check eq 1){
1249                         # The new page template given is too long, so return an error.
1251                         kiriwrite_error("pagetemplatefilenametoolong");
1253                 }
1255                 # Check if the new page filename and new page settings
1256                 # are valid.
1258                 my $pagenewfilename_filename_check      = kiriwrite_variablecheck($pagenewfilename, "page_filename", 0, 1);
1259                 my $pagenewsettings_settings_check      = kiriwrite_variablecheck($pagenewsettings, "pagesetting", 0, 1);
1260                 my $pagetemplate_filename_check = 0;
1262                 if ($pagenewtemplate ne "!none"){
1264                         # A template is being used so check the filename of the
1265                         # template.
1267                         $pagetemplate_filename_check    = kiriwrite_variablecheck($pagenewtemplate, "page_filename", 0, 1);
1269                 }
1271                 # Check each result to see if the variables have passed
1272                 # their tests and return an error if they haven't.
1274                 if ($pagenewfilename_filename_check ne 0){
1276                         # The new page filename is invalid, so return an error.
1278                         kiriwrite_error("pagefilenameinvalid");
1280                 }
1282                 if ($pagenewsettings_settings_check eq 1){
1284                         # The new page settings is invalid, so return an error.
1286                         kiriwrite_error("pagesettingsinvalid");
1288                 }
1290                 if ($pagetemplate_filename_check eq 1){
1292                         # The template filename given is invalid, so return an error
1294                         kiriwrite_error("templatefilenameinvalid");
1296                 }
1298                 # Connect to the database server.
1300                 $kiriwrite_dbmodule->connect();
1302                 # Check if any errors occured while connecting to the database server.
1304                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1306                         # A database connection error has occured so return
1307                         # an error.
1309                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1311                 }
1313                 # Select the database.
1315                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1317                 # Check if any errors had occured while selecting the database.
1319                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1321                         # The database does not exist, so return an error.
1323                         kiriwrite_error("databasemissingfile");
1325                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1327                         # The database has invalid permissions set, so return
1328                         # an error.
1330                         kiriwrite_error("databaseinvalidpermissions");
1332                 }
1334                 # Check if the database has write permissions.
1336                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
1338                 if ($database_permissions eq 1){
1340                         # The database permissions are invalid so return an error.
1342                         kiriwrite_error("databaseinvalidpermissions");
1344                 }
1346                 # Get the database information.
1348                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1350                 # Check if any errors had occured while getting the database information.
1352                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1354                         # A database error has occured so return an error and
1355                         # also the extended error information.
1357                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1359                 };
1361                 my $database_name = $database_info{"DatabaseName"};
1363                 # Edit the selected page.
1365                 $kiriwrite_dbmodule->editpage({ PageFilename => $pagefilename, PageNewFilename => $pagenewfilename, PageNewName => $pagenewtitle, PageNewDescription => $pagenewdescription, PageNewSection => $pagenewsection, PageNewTemplate => $pagenewtemplate, PageNewContent => $pagenewcontent, PageNewSettings => $pagenewsettings });
1367                 # Check if any errors occured while editing the page.
1369                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1371                         # A database error has occured so return an error and
1372                         # also the extended error information.
1374                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1376                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1378                         # The pages does not exist in the database.
1380                         kiriwrite_error("pagefilenamedoesnotexist");
1382                 } elsif ($kiriwrite_dbmodule->geterror eq "PageExists"){
1384                         # A page already exists with the new filename.
1386                         kiriwrite_error("pagefilenameexists");
1388                 }
1390                 # Disconnect from the database server.
1392                 $kiriwrite_dbmodule->disconnect();
1394                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{editedpage}, { Style => "pageheader" });
1395                 $kiriwrite_presmodule->addlinebreak();
1396                 $kiriwrite_presmodule->addlinebreak();
1397                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{editedpagemessage}, $pagenewtitle));
1398                 $kiriwrite_presmodule->addlinebreak();
1399                 $kiriwrite_presmodule->addlinebreak();
1400                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
1402                 return $kiriwrite_presmodule->grab();
1404         } elsif ($confirm eq 0) {
1406                 # Connect to the database server.
1408                 $kiriwrite_dbmodule->connect();
1410                 # Check if any errors occured while connecting to the database server.
1412                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1414                         # A database connection error has occured so return
1415                         # an error.
1417                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1419                 }
1421                 # Select the database.
1423                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1425                 # Check if any errors had occured while selecting the database.
1427                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1429                         # The database does not exist, so return an error.
1431                         kiriwrite_error("databasemissingfile");
1433                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1435                         # The database has invalid permissions set, so return
1436                         # an error.
1438                         kiriwrite_error("databaseinvalidpermissions");
1440                 }
1442                 # Get the information about the database.
1444                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1446                 # Check if any errors had occured while getting the database information.
1448                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1450                         # A database error has occured so return an error and
1451                         # also the extended error information.
1453                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1455                 };
1457                 my $database_name = $database_info{"DatabaseName"};
1459                 # Get the page info.
1461                 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $pagefilename });
1463                 # Check if any errors occured while getting the page information.
1465                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1467                         # A database error has occured so return an error and
1468                         # also the extended error information.
1470                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1472                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1474                         # The page does not exist, so return an error.
1476                         kiriwrite_error("pagefilenamedoesnotexist");
1478                 }
1480                 # Get the values from the hash.
1482                 my $data_filename               = $page_info{"PageFilename"};
1483                 my $data_name                   = $page_info{"PageName"};
1484                 my $data_description            = $page_info{"PageDescription"};
1485                 my $data_section                = $page_info{"PageSection"};
1486                 my $data_template               = $page_info{"PageTemplate"};
1487                 my $data_content                = $page_info{"PageContent"};
1488                 my $data_settings               = $page_info{"PageSettings"};
1489                 my $data_lastmodified           = $page_info{"PageLastModified"};
1491                 my $template_warning;
1492                 my $page_count = 0;
1493                 my %template_list;
1494                 my %template_info;
1495                 my @database_pages;
1496                 my @database_info;
1497                 my @database_templates;
1498                 my @template_filenames;
1499                 my $template_file;
1500                 my $template_filename;
1501                 my $template_name;
1502                 my $template_count = 0;
1503                 my $template_found = 0;
1505                 tie(%template_list, 'Tie::IxHash');
1507                 # Connect to the template database.
1509                 $kiriwrite_dbmodule->connecttemplate();
1511                 # Check if any errors occured while connecting to the template database.
1513                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
1515                         # The template database does not exist so set the template
1516                         # warning message.
1518                         $template_warning = $kiriwrite_lang->{pages}->{notemplatedatabasekeep};
1520                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
1522                         # The template database has invalid permissions set so write
1523                         # the template warning message.
1525                         $template_warning = $kiriwrite_lang->{pages}->{templatepermissionserrorkeep};
1527                 }
1529                 if (!$template_warning){
1531                         # Get the list of available templates.
1533                         @template_filenames = $kiriwrite_dbmodule->gettemplatelist();
1535                         # Check if any errors had occured.
1537                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1539                                 # A database error occured while getting the list
1540                                 # of templates so return an error with the 
1541                                 # extended error information.
1543                                 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrorkeep} , $kiriwrite_dbmodule->geterror(1));
1545                         }
1547                         if (!$template_warning){
1549                                 foreach $template_filename (@template_filenames){
1551                                         # Get the information about each template.
1553                                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
1555                                         # Check if any errors occured while getting the template information.
1557                                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1559                                                 # A template database error has occured so return a warning message
1560                                                 # with the extended error information.
1562                                                 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrorkeep} , $kiriwrite_dbmodule->geterror(1));
1563                                                 last;
1565                                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
1567                                                 # The template does not exist so process the next template.
1569                                                 next;
1571                                         }
1573                                         # Append the template name and filename to the list of available templates.
1575                                         $template_list{$template_count}{Filename} = $template_info{"TemplateFilename"};
1576                                         $template_list{$template_count}{Name}     = $template_info{"TemplateName"};
1578                                         # Append the template filename and name and make it the selected
1579                                         # template if that is the template the page is using.
1581                                         if ($data_template eq $template_filename && !$template_found){
1583                                                 $template_list{$template_count}{Selected}       = 1;
1584                                                 $template_found = 1;
1586                                         } else {
1588                                                 $template_list{$template_count}{Selected}       = 0;
1590                                         }
1592                                         $template_count++;
1594                                 }
1596                         }
1598                 }
1600                 # Check if certain values are undefined and if they
1601                 # are then set them blank (defined).
1603                 if (!$data_name){
1604                         $data_name = "";
1605                 }
1607                 if (!$data_description){
1608                         $data_description = "";
1609                 }
1611                 if (!$data_section){
1612                         $data_section = "";
1613                 }
1615                 if (!$data_template){
1616                         $data_template = "";
1618                 }
1620                 if (!$data_content){
1621                         $data_content = "";
1622                 }
1624                 if (!$data_settings){
1625                         $data_settings = "";
1626                 }
1628                 if (!$data_lastmodified){
1629                         $data_lastmodified = "";
1630                 }
1632                 # Begin writing out the form for editing the selected page.
1634                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{editpage}, $data_name), { Style => "pageheader" });
1635                 $kiriwrite_presmodule->addlinebreak();
1636                 $kiriwrite_presmodule->addlinebreak();
1638                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1639                 $kiriwrite_presmodule->startbox();
1640                 $kiriwrite_presmodule->addhiddendata("mode", "page");
1641                 $kiriwrite_presmodule->addhiddendata("action", "edit");
1642                 $kiriwrite_presmodule->addhiddendata("database", $database);
1643                 $kiriwrite_presmodule->addhiddendata("page", $pagefilename);
1644                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
1645                 $kiriwrite_presmodule->endbox();
1647                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
1649                 $kiriwrite_presmodule->startheader();
1650                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
1651                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
1652                 $kiriwrite_presmodule->endheader();
1654                 $kiriwrite_presmodule->startrow();
1655                 $kiriwrite_presmodule->addcell("tablecell1");
1656                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{database});
1657                 $kiriwrite_presmodule->endcell();
1658                 $kiriwrite_presmodule->addcell("tablecell2");
1659                 $kiriwrite_presmodule->addtext($database_name);
1660                 $kiriwrite_presmodule->endcell();
1661                 $kiriwrite_presmodule->endrow();
1663                 $kiriwrite_presmodule->startrow();
1664                 $kiriwrite_presmodule->addcell("tablecell1");
1665                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagename});
1666                 $kiriwrite_presmodule->endcell();
1667                 $kiriwrite_presmodule->addcell("tablecell2");
1668                 $kiriwrite_presmodule->addinputbox("pagename", { Size => 64, MaxLength => 256, Value => $data_name });
1669                 $kiriwrite_presmodule->endcell();
1670                 $kiriwrite_presmodule->endrow();
1672                 $kiriwrite_presmodule->startrow();
1673                 $kiriwrite_presmodule->addcell("tablecell1");
1674                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedescription});
1675                 $kiriwrite_presmodule->endcell();
1676                 $kiriwrite_presmodule->addcell("tablecell2");
1677                 $kiriwrite_presmodule->addinputbox("pagedescription", { Size => 64, MaxLength => 256, Value => $data_description });
1678                 $kiriwrite_presmodule->endcell();
1679                 $kiriwrite_presmodule->endrow();
1681                 $kiriwrite_presmodule->startrow();
1682                 $kiriwrite_presmodule->addcell("tablecell1");
1683                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
1684                 $kiriwrite_presmodule->endcell();
1685                 $kiriwrite_presmodule->addcell("tablecell2");
1686                 $kiriwrite_presmodule->addinputbox("pagesection", { Size => 64, MaxLength => 256, Value => $data_section });
1687                 $kiriwrite_presmodule->endcell();
1688                 $kiriwrite_presmodule->endrow();
1690                 $kiriwrite_presmodule->startrow();
1691                 $kiriwrite_presmodule->addcell("tablecell1");
1692                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
1693                 $kiriwrite_presmodule->endcell();
1694                 $kiriwrite_presmodule->addcell("tablecell2");
1696                 # Check if any template warnings have occured.
1698                 if ($template_warning){
1700                         $kiriwrite_presmodule->addtext($template_warning);
1701                         $kiriwrite_presmodule->addlinebreak();
1703                 }
1705                 $kiriwrite_presmodule->addselectbox("pagetemplate");
1707                 # Process the list of templates, select one if the
1708                 # template filename for the page matches, else give
1709                 # an option for the user to keep the current template
1710                 # filename.
1712                 $template_count = 0;
1714                 foreach $template_file (keys %template_list){
1716                         if ($template_list{$template_count}{Selected}){
1718                                 $kiriwrite_presmodule->addoption($template_list{$template_count}{Name} . " (" . $template_list{$template_count}{Filename} . ")", { Value => $template_list{$template_count}{Filename}, Selected => 1 });
1720                         } else {
1722                                 $kiriwrite_presmodule->addoption($template_list{$template_count}{Name} . " (" . $template_list{$template_count}{Filename} . ")", { Value => $template_list{$template_count}{Filename} });
1724                         }
1726                         $template_count++;
1728                 }
1730                 if ($data_template eq "!none"){
1732                         $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
1733                         $template_found = 1;
1735                 } else {
1737                         $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none" });
1739                 }
1741                 if ($template_found eq 0 && $data_template ne "!none"){
1743                         # The template with the filename given was not found.
1745                         $kiriwrite_presmodule->addoption(kiriwrite_language($kiriwrite_lang->{pages}->{keeptemplatefilename}, $data_template), { Value => $data_template, Selected => 1, Style => "warningoption" });
1747                 }
1749                 # Disconnect from the template database.
1751                 $kiriwrite_dbmodule->disconnecttemplate();
1753                 # Disconnect from the database server.
1755                 $kiriwrite_dbmodule->disconnect();
1757                 $kiriwrite_presmodule->endselectbox();
1759                 $kiriwrite_presmodule->endcell();
1760                 $kiriwrite_presmodule->endrow();
1762                 $kiriwrite_presmodule->startrow();
1763                 $kiriwrite_presmodule->addcell("tablecell1");
1764                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagefilename});
1765                 $kiriwrite_presmodule->endcell();
1766                 $kiriwrite_presmodule->addcell("tablecell2");
1767                 $kiriwrite_presmodule->addinputbox("pagefilename", { Size => 64, MaxLength => 256, Value => $data_filename });
1768                 $kiriwrite_presmodule->endcell();
1769                 $kiriwrite_presmodule->endrow();
1771                 $kiriwrite_presmodule->startrow();
1772                 $kiriwrite_presmodule->addcell("tablecell1");
1773                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagecontent});
1774                 $kiriwrite_presmodule->endcell();
1775                 $kiriwrite_presmodule->addcell("tablecell2");
1776                 $kiriwrite_presmodule->addtextbox("pagecontent", { Columns => 50, Rows => 10, Value => $data_content });
1777                 $kiriwrite_presmodule->addlinebreak();
1778                 $kiriwrite_presmodule->addlinebreak();
1779                 $kiriwrite_presmodule->startbox("datalist");
1780                 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
1781                 $kiriwrite_presmodule->addlinebreak();
1782                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
1783                 $kiriwrite_presmodule->addlinebreak();
1784                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
1785                 $kiriwrite_presmodule->addlinebreak();
1786                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
1787                 $kiriwrite_presmodule->addlinebreak();
1788                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
1789                 $kiriwrite_presmodule->addlinebreak();
1790                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
1791                 $kiriwrite_presmodule->addlinebreak();
1792                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
1793                 $kiriwrite_presmodule->addlinebreak();
1794                 $kiriwrite_presmodule->endbox();
1795                 $kiriwrite_presmodule->endcell();
1796                 $kiriwrite_presmodule->endrow();
1798                 $kiriwrite_presmodule->startrow();
1799                 $kiriwrite_presmodule->addcell("tablecell1");
1800                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
1801                 $kiriwrite_presmodule->endcell();
1802                 $kiriwrite_presmodule->addcell("tablecell2");
1804                 # Check if the page settings value is set to a 
1805                 # certain number and select that option based
1806                 # on the number else set the value to 0.
1808                 if ($data_settings eq 1){
1809                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", Selected => 1, LineBreak => 1});
1810                 } else {
1811                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", LineBreak => 1});
1812                 }
1814                 if ($data_settings eq 2){
1815                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", Selected => 1, LineBreak => 1});
1816                 } else {
1817                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", LineBreak => 1});
1818                 }
1820                 if ($data_settings eq 3){
1821                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", Selected => 1, LineBreak => 1});
1822                 } else {
1823                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", LineBreak => 1});
1824                 }
1826                 if ($data_settings eq 0 || ($data_settings ne 1 && $data_settings ne 2 && $data_settings ne 3)){
1827                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", Selected => 1, LineBreak => 1});
1828                 } else {
1829                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", LineBreak => 1});
1830                 }
1832                 $kiriwrite_presmodule->endcell();
1833                 $kiriwrite_presmodule->endrow();
1834                 $kiriwrite_presmodule->endtable();
1836                 $kiriwrite_presmodule->startbox();
1837                 $kiriwrite_presmodule->addlinebreak();
1838                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{editpagebutton});
1839                 $kiriwrite_presmodule->addtext(" | ");
1840                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
1841                 $kiriwrite_presmodule->addtext(" | ");
1842                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) } );
1843                 $kiriwrite_presmodule->endbox();
1845                 $kiriwrite_presmodule->endform();
1847                 return $kiriwrite_presmodule->grab();
1849         } else {
1851                 # The confirm value is a value other than '0' and '1' so
1852                 # return an error.
1854                 kiriwrite_error("invalidvalue");
1856         }
1860 sub kiriwrite_page_multidelete{
1861 #################################################################################
1862 # kiriwrite_page_multidelete: Delete mulitple pages from the database.          #
1863 #                                                                               #
1864 # Usage:                                                                        #
1865 #                                                                               #
1866 # kiriwrite_page_multidelete(database, confirm, filelist);                      #
1867 #                                                                               #
1868 # database      Specifies the database to delete multiple pages from.           #
1869 # confirm       Confirms the action to delete the selected pages from the       #
1870 #               database.                                                       #
1871 # filelist      The list of files to delete from the selected database.         #
1872 #################################################################################
1874         # Get the information passed to the subroutine.
1876         my ($database, $confirm, @filelist) = @_;
1878         # Check if the database name is blank and return an error if
1879         # it is.
1881         if (!$database){
1883                 # The database name is blank so return an error.
1885                 kiriwrite_error("databasenameblank");
1887         }
1889         # Check if the file list array has any values and return
1890         # an error if it doesn't.
1892         if (!@filelist){
1894                 # The page list really is blank so return
1895                 # an error.
1897                 kiriwrite_error("nopagesselected");
1898         }
1900         # Check if the database filename is valid and return an error if
1901         # it isn't.
1903         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
1905         if ($pagedatabase_filename_check eq 1){
1907                 # The database filename is blank, so return an error.
1909                 kiriwrite_error("blankdatabasepageadd");
1911         } elsif ($pagedatabase_filename_check eq 2){
1913                 # The database filename is invalid, so return an error.
1915                 kiriwrite_error("databasefilenameinvalid");
1917         }
1919         # Check the length the database name and return an error if it's
1920         # too long.
1922         my $pagedatabase_length_check   = kiriwrite_variablecheck($database, "maxlength", 32, 1);
1924         if ($pagedatabase_length_check eq 1){
1926                 # The database name is too long, so return an error.
1928                 kiriwrite_error("databasefilenametoolong");
1930         }
1932         # Check if the confirm value is blank and if it is, then
1933         # set it to 0.
1935         if (!$confirm){
1937                 # The confirm value is blank so set the confirm value
1938                 # to 0.
1940                 $confirm = 0;
1942         }
1944         if ($confirm eq 1){
1946                 # The action to delete multiple pages from the database has
1947                 # been confirmed.
1949                 # Connect to the database server.
1951                 $kiriwrite_dbmodule->connect();
1953                 # Check if any errors occured while connecting to the database server.
1955                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1957                         # A database connection error has occured so return
1958                         # an error.
1960                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1962                 }
1964                 # Select the database.
1966                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1968                 # Check if any errors occured while selecting the database.
1970                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1972                         # The database does not exist, so return an error.
1974                         kiriwrite_error("databasemissingfile");
1976                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1978                         # The database has invalid permissions set, so return
1979                         # an error.
1981                         kiriwrite_error("databaseinvalidpermissions");
1983                 }
1985                 # Check if the database has read and write permissions.
1987                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
1989                 if ($database_permissions eq 1){
1991                         # The database permissions are invalid so return an error.
1993                         kiriwrite_error("databaseinvalidpermissions");
1995                 }
1997                 # Get information about the database.
1999                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2001                 # Check if any errors had occured while getting the database
2002                 # information.
2004                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2006                         # A database error has occured so return an error and
2007                         # also the extended error information.
2009                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2011                 };
2013                 my $database_name       = $database_info{"DatabaseName"};
2015                 # Define some variables for later.
2017                 my @database_page;
2018                 my %page_info;
2019                 my $filelist_filename;
2020                 my %deleted_list;
2021                 my $page;
2022                 my $page_name;
2023                 my $page_found = 0;
2024                 my $page_count = 0;
2026                 tie (%deleted_list, 'Tie::IxHash');
2028                 my $deleted_list = "";
2030                 foreach $filelist_filename (@filelist){
2032                         # Get the page information.
2034                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2036                         # Check if any errors occured.
2038                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2040                                 # A database error has occured so return an error and
2041                                 # also the extended error information.
2043                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2045                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2047                                 # The page does not exist, so process the next page.
2049                                 next;
2051                         }
2053                         # Add the page to the list of deleted pages.
2055                         $deleted_list{$page_count}{Filename}    = $page_info{"PageFilename"};
2056                         $deleted_list{$page_count}{Name}        = $page_info{"PageName"};
2058                         # Delete the page.
2060                         $kiriwrite_dbmodule->deletepage({ PageFilename => $filelist_filename });
2062                         # Check if any errors occured while deleting the page from the database.
2064                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2066                                 # A database error has occured so return an error and
2067                                 # also the extended error information.
2069                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2071                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2073                                 # The page does not exist, so process the next page.
2075                                 next;
2077                         }
2079                         $page_found = 0;
2080                         $page_count++;
2082                 }
2084                 # Disconnect from the database server.
2086                 $kiriwrite_dbmodule->disconnect();
2088                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{selectedpagesdeleted}, { Style => "pageheader" });
2089                 $kiriwrite_presmodule->addlinebreak();
2090                 $kiriwrite_presmodule->addlinebreak();
2091                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{selectedpagesdeletedmessage}, $database_name));
2092                 $kiriwrite_presmodule->addlinebreak();
2093                 $kiriwrite_presmodule->addlinebreak();
2094                 $kiriwrite_presmodule->startbox("datalist");
2096                 foreach $page (keys %deleted_list){
2098                         if (!$deleted_list{$page}{Name}){
2099                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2100                                 $kiriwrite_presmodule->addtext(" (" . $deleted_list{$page}{Filename} . ")");
2102                         } else {
2103                                 $kiriwrite_presmodule->addtext($deleted_list{$page}{Name} . " (" . $deleted_list{$page}{Filename} . ")");
2104                         }
2106                         $kiriwrite_presmodule->addlinebreak();
2107                 }
2109                 $kiriwrite_presmodule->endbox();
2110                 $kiriwrite_presmodule->addlinebreak();
2111                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
2113                 return $kiriwrite_presmodule->grab();
2115         } elsif ($confirm eq 0){
2117                 # The action to delete multiple pages from the database has
2118                 # not been confirmed, so write a form asking the user to confirm
2119                 # the deletion of those pages.
2121                 # Connect to the database server.
2123                 $kiriwrite_dbmodule->connect();
2125                 # Check if any errors occured while connecting to the database server.
2127                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2129                         # A database connection error has occured so return
2130                         # an error.
2132                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2134                 }
2136                 # Select the database.
2138                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2140                 # Check if any errors occured while selecting the database.
2142                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2144                         # The database does not exist, so return an error.
2146                         kiriwrite_error("databasemissingfile");
2148                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2150                         # The database has invalid permissions set, so return
2151                         # an error.
2153                         kiriwrite_error("databaseinvalidpermissions");
2155                 }
2157                 # Check if the database has read and write permissions.
2159                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2161                 if ($database_permissions eq 1){
2163                         # The database permissions are invalid so return an error.
2165                         kiriwrite_error("databaseinvalidpermissions");
2167                 }
2169                 # Get information about the database.
2171                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2173                 # Check if any errors had occured while getting the database
2174                 # information.
2176                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2178                         # A database error has occured so return an error and
2179                         # also the extended error information.
2181                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2183                 };
2185                 my $database_name       = $database_info{"DatabaseName"};
2187                 # Define some variables for later.
2189                 my %page_info;
2190                 my %delete_list;
2191                 my $pagename;
2192                 my $page = "";
2193                 my $filelist_filename;
2194                 my $filelist_filename_sql;
2195                 my $pageseek = 0;
2197                 tie(%delete_list, 'Tie::IxHash');
2199                 # Process each filename given.
2201                 foreach $filelist_filename (@filelist){
2203                         # Get the page information.
2205                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2207                         # Check if any errors occured.
2209                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2211                                 # A database error has occured so return an error and
2212                                 # also the extended error information.
2214                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2216                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2218                                 # The page does not exist, so process the next page.
2220                                 next;
2222                         }
2224                         # Add the page file name and name to the list
2225                         # of pages to delete.
2227                         $delete_list{$pageseek}{Filename}       = $page_info{"PageFilename"};
2228                         $delete_list{$pageseek}{Name}           = $page_info{"PageName"};
2230                         # Increment the page seek counter and reset the
2231                         # page found value.
2233                         $pageseek++;
2235                 }
2237                 # Disconnect from the database server.
2239                 $kiriwrite_dbmodule->disconnect();
2241                 # Check if any files were selected and return
2242                 # an error if there wasn't.
2244                 if ($pageseek eq 0){
2246                         # No pages were selected so return an error.
2248                         kiriwrite_error("nopagesselected");
2250                 }
2252                 # Write the form for displaying pages.
2254                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{deletemultiplepages}, { Style => "pageheader" });
2255                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
2256                 $kiriwrite_presmodule->startbox();
2257                 $kiriwrite_presmodule->addhiddendata("mode", "page");
2258                 $kiriwrite_presmodule->addhiddendata("action", "multidelete");
2259                 $kiriwrite_presmodule->addhiddendata("database", $database);
2260                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
2261                 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
2263                 $pageseek = 1;
2265                 foreach $page (keys %delete_list){
2267                         $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
2268                         $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $delete_list{$page}{Filename});
2270                         $pageseek++;
2272                 }
2274                 $kiriwrite_presmodule->addlinebreak();
2275                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletemultiplemessage}, $database_name));
2276                 $kiriwrite_presmodule->addlinebreak();
2277                 $kiriwrite_presmodule->addlinebreak();
2278                 $kiriwrite_presmodule->startbox("datalist");
2280                 foreach $page (keys %delete_list){
2282                         if (!$delete_list{$page}{Name}){
2283                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2284                                 $kiriwrite_presmodule->addtext(" (" . $delete_list{$page}{Filename} . ")");
2285                         } else {
2286                                 $kiriwrite_presmodule->addtext($delete_list{$page}{Name} . " (" . $delete_list{$page}{Filename} . ")");
2287                         }
2288                         $kiriwrite_presmodule->addlinebreak();
2290                 }
2292                 $kiriwrite_presmodule->endbox();
2293                 $kiriwrite_presmodule->addlinebreak();
2294                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{deletepagesbutton});
2295                 $kiriwrite_presmodule->addtext(" | ");
2296                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{deletepagesreturnlink}, $database_name)});
2297                 $kiriwrite_presmodule->endbox();
2298                 $kiriwrite_presmodule->endform();
2300                 return $kiriwrite_presmodule->grab();
2302         } else {
2304                 # A confirm value other than 0 or 1 is given, so
2305                 # return an error.
2307                 kiriwrite_error("invaildvalue");
2309         }
2313 sub kiriwrite_page_multimove{
2314 #################################################################################
2315 # kiriwrite_page_multimove: Move several pages from one database to another     #
2316 # database.                                                                     #
2317 #                                                                               #
2318 # Usage:                                                                        #
2319 #                                                                               #
2320 # kiriwrite_page_multimove(database, newdatabase, confirm, filelist);           #
2321 #                                                                               #
2322 # database      Specifies the database to move the selected pages from.         #
2323 # newdatabase   Specifies the database to move the selected pages to.           #
2324 # confirm       Confirms the action to move the pages from one database to      #
2325 #               another.                                                        #
2326 # filelist      Specifies the list of pages to move.                            #
2327 #################################################################################
2329         # Get the values that were passed to the subroutine.
2331         my ($database, $newdatabase, $confirm, @filelist) = @_;
2333         # Check if the database filename is valid and return
2334         # an error if it isn't.
2336         my $newpagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
2338         if ($newpagedatabase_filename_check eq 1){
2340                 # The database filename is blank, so return an error.
2342                 kiriwrite_error("blankdatabasepageadd");
2344         } elsif ($newpagedatabase_filename_check eq 2){
2346                 # The database filename is invalid, so return an error.
2348                 kiriwrite_error("databasefilenameinvalid");
2350         }
2352         # Check if the file list is blank and return an error
2353         # if it is.
2355         if (!@filelist){
2357                 # The file list really is blank so return
2358                 # an error.
2360                 kiriwrite_error("nopagesselected");
2362         }
2364         # Check if the confirm value is blank and if it is then
2365         # set the confirm value to 0.
2367         if (!$confirm){
2369                 $confirm = 0;
2371         }
2373         if ($confirm eq 1){
2375                 # The action to move several pages from one database
2376                 # to another has been confirmed.
2378                 # Check if the database that the pages are moving from 
2379                 # is the same as the database the pages are moving to.
2380                 # Return an error if it is.
2382                 if ($database eq $newdatabase){
2384                         # The database that the pages are moving from
2385                         # and the database the pages are moving to
2386                         # is the same, so return an error.
2388                         kiriwrite_error("databasemovesame");
2390                 }
2392                 # Check if the new database filename is valid and return an error if
2393                 # it isn't.
2395                 my $newpagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
2397                 if ($newpagedatabase_filename_check eq 1){
2399                         # The database filename is blank, so return an error.
2401                         kiriwrite_error("blankdatabasepageadd");
2403                 } elsif ($newpagedatabase_filename_check eq 2){
2405                         # The database filename is invalid, so return an error.
2407                         kiriwrite_error("databasefilenameinvalid");
2409                 }
2411                 # Connect to the database server.
2413                 $kiriwrite_dbmodule->connect();
2415                 # Check if any errors occured while connecting to the database server.
2417                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2419                         # A database connection error has occured so return
2420                         # an error.
2422                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2424                 }
2426                 # Select the database the pages are going to be moved from.
2428                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2430                 # Check if any errors had occured while selecting the database.
2432                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2434                         # The database does not exist, so return an error.
2436                         kiriwrite_error("oldmovedatabasedoesnotexist");
2438                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2440                         # The database has invalid permissions set, so return
2441                         # an error.
2443                         kiriwrite_error("oldmovedatabasefileinvalidpermissions");
2445                 }
2447                 # Check if the database has read and write permissions.
2449                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2451                 if ($database_permissions eq 1){
2453                         # The database permissions are invalid so return an error.
2455                         kiriwrite_error("databaseinvalidpermissions");
2457                 }
2459                 # Select the database the pages are going to be moved to.
2461                 $kiriwrite_dbmodule->selectseconddb({ DatabaseName => $newdatabase });
2463                 # Check if any errors had occured while selecting the database.
2465                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2467                         # The database does not exist, so return an error.
2469                         kiriwrite_error("newmovedatabasedoesnotexist");
2471                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2473                         # The database has invalid permissions set, so return
2474                         # an error.
2476                         kiriwrite_error("newmovedatabasefileinvalidpermissions");
2478                 }
2480                 # Check if the database has read and write permissions.
2482                 $database_permissions = $kiriwrite_dbmodule->dbpermissions($newdatabase, 1, 1);
2484                 if ($database_permissions eq 1){
2486                         # The database permissions are invalid so return an error.
2488                         kiriwrite_error("databaseinvalidpermissions");
2490                 }
2492                 # Define some values for later.
2494                 my %moved_list;
2495                 my %warning_list;
2496                 my %page_info;
2498                 my $filename;
2500                 my $olddatabase_name;
2501                 my $newdatabase_name;
2503                 my $page;
2504                 my $warning;
2506                 my $page_found = 0;
2507                 my $move_count = 0;
2508                 my $warning_count = 0;
2510                 tie(%moved_list, 'Tie::IxHash');
2511                 tie(%warning_list, 'Tie::IxHash');
2513                 # Get information about the database that the selected pages are moving from.
2515                 my %olddatabase_info = $kiriwrite_dbmodule->getdatabaseinfo();
2517                 # Check if any errors had occured while getting the database
2518                 # information.
2520                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2522                         # A database error has occured so return an error and
2523                         # also the extended error information.
2525                         kiriwrite_error("oldmovedatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
2527                 };
2529                 $olddatabase_name = $olddatabase_info{"DatabaseName"};
2531                 # Get information about the database that the selected pages are moving to.
2533                 my %newdatabase_info = $kiriwrite_dbmodule->getseconddatabaseinfo();
2535                 # Check if any errors had occured while getting the database
2536                 # information.
2538                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2540                         # A database error has occured so return an error and
2541                         # also the extended error information.
2543                         kiriwrite_error("newmovedatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
2545                 };
2547                 $newdatabase_name = $newdatabase_info{"DatabaseName"};
2549                 # Get each file in the old database, get the page values,
2550                 # put them into the new database and delete the pages
2551                 # from the old database.
2553                 foreach $filename (@filelist){
2555                         # Get the page information.
2557                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
2559                         # Check if any errors occured.
2561                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2563                                 # A database error has occured so write a warning message and
2564                                 # also the extended error information.
2566                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2567                                 $warning_count++;
2568                                 next;
2570                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2572                                 # The page does not exist, so process the next page.
2574                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{pagedoesnotexist}, $filename);
2575                                 $warning_count++;
2576                                 next;
2578                         }
2580                         # Move the selected page.
2582                         $kiriwrite_dbmodule->movepage({ PageFilename => $filename });
2584                         # Check if any errors occured while moving the page.
2586                         if ($kiriwrite_dbmodule->geterror eq "OldDatabaseError"){
2588                                 # A database error has occured while moving the pages from
2589                                 # the old database, so write a warning message.
2591                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovefrompageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2592                                 $warning_count++;
2593                                 next;
2595                         } elsif ($kiriwrite_dbmodule->geterror eq "NewDatabaseError"){
2597                                 # A database error has occured while moving the pages to
2598                                 # the new database, so write a warning message.
2600                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovetopageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2601                                 $warning_count++;
2602                                 next;
2604                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2606                                 # The page with the filename given in the database that
2607                                 # the page is to be moved from doesn't exist so write
2608                                 # a warning message.
2610                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovefrompagenotexist}, $filename);
2611                                 $warning_count++;
2612                                 next;
2614                         } elsif ($kiriwrite_dbmodule->geterror eq "PageAlreadyExists"){
2616                                 # The page with the filename given in the database that
2617                                 # the page is to be moved to already exists so write a
2618                                 # warning message.
2620                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovetopageexists}, $filename);
2621                                 $warning_count++;
2622                                 next;
2624                         }
2626                         $moved_list{$move_count}{Filename}      = $page_info{"PageFilename"};
2627                         $moved_list{$move_count}{Name}          = $page_info{"PageName"};
2629                         $move_count++;
2631                 }
2633                 # Disconnect from the database server.
2635                 $kiriwrite_dbmodule->disconnect();
2637                 # Write out a message saying that the pages were moved (if any)
2638                 # to the new database (and any warnings given).
2640                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepages}, { Style => "pageheader" });
2641                 $kiriwrite_presmodule->addlinebreak();
2642                 $kiriwrite_presmodule->addlinebreak();
2644                 if (%moved_list){
2646                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{movedpagesmessage}, $olddatabase_name, $newdatabase_name));
2647                         $kiriwrite_presmodule->addlinebreak();
2648                         $kiriwrite_presmodule->addlinebreak();
2650                         $kiriwrite_presmodule->startbox("datalist");
2651                         foreach $page (keys %moved_list){
2652                                 if (!$moved_list{$page}{Name}){
2653                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2654                                         $kiriwrite_presmodule->addtext(" (" . $moved_list{$page}{Filename} . ")");
2655                                 } else {
2656                                         $kiriwrite_presmodule->addtext($moved_list{$page}{Name} . " (" . $moved_list{$page}{Filename} . ")");
2657                                 }
2659                                 $kiriwrite_presmodule->addlinebreak();
2660                         }
2661                         $kiriwrite_presmodule->endbox();
2663                 } else {
2665                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagesmoved}, $olddatabase_name, $newdatabase_name));
2666                         $kiriwrite_presmodule->addlinebreak();
2667                         $kiriwrite_presmodule->addlinebreak();
2669                 }
2671                 if (%warning_list){
2673                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{errormessages});
2674                         $kiriwrite_presmodule->addlinebreak();
2675                         $kiriwrite_presmodule->addlinebreak();
2676                         $kiriwrite_presmodule->startbox("datalist");
2677                         foreach $warning (keys %warning_list){
2678                                 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
2679                                 $kiriwrite_presmodule->addlinebreak();
2680                         }
2681                         $kiriwrite_presmodule->endbox();
2683                 }
2685                 $kiriwrite_presmodule->addlinebreak();
2686                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $olddatabase_name)}); 
2687                 $kiriwrite_presmodule->addtext(" | ");
2688                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $newdatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{viewpagelist}, $newdatabase_name)});
2690                 return $kiriwrite_presmodule->grab();
2692         } elsif ($confirm eq 0) {
2694                 # The action to move several pages from one database
2695                 # to another has not been confirmed so write a form.
2697                 # Connect to the database server.
2699                 $kiriwrite_dbmodule->connect();
2701                 # Check if any errors occured while connecting to the database server.
2703                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2705                         # A database connection error has occured so return
2706                         # an error.
2708                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2710                 }
2712                 # Select the database.
2714                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2716                 # Check if any errors occured while selecting the database.
2718                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2720                         # The database does not exist, so return an error.
2722                         kiriwrite_error("databasemissingfile");
2724                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2726                         # The database has invalid permissions set, so return
2727                         # an error.
2729                         kiriwrite_error("databaseinvalidpermissions");
2731                 }
2733                 # Check if the database has read and write permissions.
2735                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2737                 if ($database_permissions eq 1){
2739                         # The database permissions are invalid so return an error.
2741                         kiriwrite_error("databaseinvalidpermissions");
2743                 }
2745                 # Get information about the database.
2747                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2749                 # Check if any errors had occured while getting the database
2750                 # information.
2752                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2754                         # A database error has occured so return an error and
2755                         # also the extended error information.
2757                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2759                 };
2761                 my $database_name       = $database_info{"DatabaseName"};
2763                 # Define some values for later.
2765                 my %db_list;
2766                 my %move_list;
2767                 my %page_info;
2768                 my $page;
2769                 my $data_file;
2770                 my $db_name;
2771                 my $filename;
2772                 my $filelist_filename;
2773                 my $pagename;
2774                 my $pageseek    = 0;
2775                 my $dbseek      = 0;
2777                 # Process each filename given.
2779                 tie (%move_list, 'Tie::IxHash');
2780                 tie (%db_list, 'Tie::IxHash');
2782                 foreach $filelist_filename (@filelist){
2784                         # Get the page information.
2786                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2788                         # Check if any errors occured.
2790                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2792                                 # A database error has occured so return an error and
2793                                 # also the extended error information.
2795                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2797                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2799                                 # The page does not exist, so process the next page.
2801                                 next;
2803                         }
2805                         # Add the page name and file name to the list of
2806                         # pages to move.
2808                         $move_list{$pageseek}{Filename} = $page_info{"PageFilename"};
2809                         $move_list{$pageseek}{Name}     = $page_info{"PageName"};
2811                         # Increment the page seek counter and reset the
2812                         # page found value.
2814                         $pageseek++;
2816                 }
2818                 # Check if any pages exust and return an error if
2819                 # there wasn't.
2821                 if ($pageseek eq 0){
2823                         # None of the selected pages exist, so return
2824                         # an error.
2826                         kiriwrite_error("nopagesselected");
2828                 }
2830                 # Get the list of databases.
2832                 my @database_list       = $kiriwrite_dbmodule->getdblist();
2834                 # Check if any errors occured while trying to get the list of databases.
2836                 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
2838                         # The database directory is missing so return an error.
2840                         kiriwrite_error("datadirectorymissing");
2842                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
2844                         # The database directory has invalid permissions set so return
2845                         # an error.
2847                         kiriwrite_error("datadirectoryinvalidpermissions");
2849                 }
2851                 # Get the information about each database (the short name and friendly name).
2853                 foreach $data_file (@database_list){
2855                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
2857                         # Check if any errors occured while selecting the database.
2859                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2861                                 # The database does not exist, so process the next
2862                                 # database.
2864                                 next;
2866                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2868                                 # The database has invalid permissions set, so process
2869                                 # the next database.
2871                                 next;
2873                         }
2875                         # Get the database information.
2877                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2879                         # Check if any errors had occured while getting the database
2880                         # information.
2882                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2884                                 # A database error has occured so process the next
2885                                 # database.
2887                                 next;
2889                         };
2891                         # Check if the database name is undefined and if it is
2892                         # then set it blank.
2894                         if (!$database_name){
2895                                 $database_name = "";
2896                         }
2898                         # Append the database to the list of databases available.
2900                         $db_list{$dbseek}{Filename}     = $data_file;
2901                         $db_list{$dbseek}{Name}         = $database_info{"DatabaseName"};
2903                         $dbseek++;
2905                 }
2907                 # Disconnect from the database server.
2909                 $kiriwrite_dbmodule->disconnect();
2911                 # Write out the form.
2913                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepages}, { Style => "pageheader" });
2914                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
2915                 $kiriwrite_presmodule->startbox();
2916                 $kiriwrite_presmodule->addhiddendata("mode", "page");
2917                 $kiriwrite_presmodule->addhiddendata("action", "multimove");
2918                 $kiriwrite_presmodule->addhiddendata("database", $database);
2919                 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
2920                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
2922                 # Write the page form data.
2924                 $pageseek = 1;
2926                 foreach $page (keys %move_list){
2927                         $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
2928                         $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $move_list{$page}{Filename});
2929                         $pageseek++;
2930                 }
2932                 $kiriwrite_presmodule->addlinebreak();
2933                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{movepagesmessage}, $database_name));
2934                 $kiriwrite_presmodule->addlinebreak();
2935                 $kiriwrite_presmodule->addlinebreak();
2936                 $kiriwrite_presmodule->startbox("datalist");
2938                 foreach $page (keys %move_list){
2939                         if (!$move_list{$page}{Name}){
2940                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2941                                 $kiriwrite_presmodule->addtext(" (" . $move_list{$page}{Filename} . ")");
2942                         } else {
2943                                 $kiriwrite_presmodule->addtext($move_list{$page}{Name} . " (" . $move_list{$page}{Filename} . ")");
2944                         }
2945                         $kiriwrite_presmodule->addlinebreak();
2946                 }
2948                 $kiriwrite_presmodule->endbox();
2949                 $kiriwrite_presmodule->addlinebreak();
2950                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepagesto});
2952                 $kiriwrite_presmodule->addselectbox("newdatabase");
2954                 foreach $db_name (keys %db_list){
2955                         $kiriwrite_presmodule->addoption($db_list{$db_name}{Name} . " (" . $db_list{$db_name}{Filename} . ")", { Value => $db_list{$db_name}{Filename}});
2956                 }
2958                 $kiriwrite_presmodule->endselectbox();
2959                 $kiriwrite_presmodule->addlinebreak();
2960                 $kiriwrite_presmodule->addlinebreak();
2961                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{movepagesbutton});
2962                 $kiriwrite_presmodule->addtext(" | ");
2963                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
2964                 $kiriwrite_presmodule->endbox();
2965                 $kiriwrite_presmodule->endform();
2967                 return $kiriwrite_presmodule->grab();
2969         } else {
2971                 # The confirm value is other than 0 or 1, so return
2972                 # an error.
2974                 kiriwrite_error("invalidvariable");
2976         }
2982 sub kiriwrite_page_multicopy{
2983 #################################################################################
2984 # kiriwrite_page_multicopy: Copy several pages from one database to another     #
2985 # database.                                                                     #
2986 #                                                                               #
2987 # Usage:                                                                        #
2988 #                                                                               #
2989 # kiriwrite_page_multicopy(database, newdatabase, confirm, filelist);           #
2990 #                                                                               #
2991 # database      Specifies the database to copy the selected pages from.         #
2992 # newdatabase   Specifies the database to copy the selected page to.            #
2993 # confirm       Confirms the action to copy the pages.                          #
2994 # filelist      A list of filenames to copy in an array.                        #
2995 #################################################################################
2997         # Get the values that were passed to the subroutine.
2999         my ($database, $newdatabase, $confirm, @filelist) = @_;
3001         # Check if the file list is blank and return an error
3002         # if it is.
3004         if (!@filelist){
3006                 # The file list really is blank so return
3007                 # an error.
3009                 kiriwrite_error("nopagesselected");
3011         }
3013         # Check if the confirm value is blank and if it is then
3014         # set the confirm value to 0.
3016         if (!$confirm){
3018                 $confirm = 0;
3020         }
3022         # Check if the database filename is valid and return an error if
3023         # it isn't.
3025         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
3027         if ($pagedatabase_filename_check eq 1){
3029                 # The database filename is blank, so return an error.
3031                 kiriwrite_error("blankdatabasepageadd");
3033         } elsif ($pagedatabase_filename_check eq 2){
3035                 # The database filename is invalid, so return an error.
3037                 kiriwrite_error("databasefilenameinvalid");
3039         }
3041         if ($confirm eq 1){
3043                 # The action to copy several pages from one database
3044                 # to another has been confirmed.
3046                 # Check if the database that the pages are copied from 
3047                 # is the same as the database the pages are copied to.
3048                 # Return an error if it is.
3050                 if ($database eq $newdatabase){
3052                         # The database that the pages are being copied from
3053                         # and the database that the pages are copied to
3054                         # is the same, so return an error.
3056                         kiriwrite_error("databasecopysame");
3058                 }
3060                 # Check if the new database filename is valid and return an error if
3061                 # it isn't.
3063                 my $pagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
3065                 if ($pagedatabase_filename_check eq 1){
3067                         # The database filename is blank, so return an error.
3069                         kiriwrite_error("blankdatabasepageadd");
3071                 } elsif ($pagedatabase_filename_check eq 2){
3073                         # The database filename is invalid, so return an error.
3075                         kiriwrite_error("databasefilenameinvalid");
3077                 }
3079                 # Connect to the database server.
3081                 $kiriwrite_dbmodule->connect();
3083                 # Check if any errors occured while connecting to the database server.
3085                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3087                         # A database connection error has occured so return
3088                         # an error.
3090                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3092                 }
3094                 # Select the database the pages are going to be copied from.
3096                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3098                 # Check if any errors had occured while selecting the database.
3100                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3102                         # The database does not exist, so return an error.
3104                         kiriwrite_error("oldcopydatabasedoesnotexist");
3106                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3108                         # The database has invalid permissions set, so return
3109                         # an error.
3111                         kiriwrite_error("oldcopydatabasefileinvalidpermissions");
3113                 }
3115                 # Select the database the pages are going to be copied to.
3117                 $kiriwrite_dbmodule->selectseconddb({ DatabaseName => $newdatabase });
3119                 # Check if any errors had occured while selecting the database.
3121                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3123                         # The database does not exist, so return an error.
3125                         kiriwrite_error("newcopydatabasedoesnotexist");
3127                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3129                         # The database has invalid permissions set, so return
3130                         # an error.
3132                         kiriwrite_error("newcopydatabasefileinvalidpermissions");
3134                 }
3136                 # Check if the database has read and write permissions.
3138                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($newdatabase, 1, 1);
3140                 if ($database_permissions eq 1){
3142                         # The database permissions are invalid so return an error.
3144                         kiriwrite_error("databaseinvalidpermissions");
3146                 }
3148                 # Define some values for later.
3150                 my %copied_list;
3151                 my %warning_list;
3152                 my %page_info;
3154                 my @olddatabase_info;
3155                 my @olddatabase_page;
3156                 my @newdatabase_info;
3157                 my @newdatabase_page;
3159                 my $filename;
3161                 my $olddatabase_name;
3162                 my $newdatabase_name;
3164                 my $page;
3165                 my $warning;
3166                 my $page_filename;
3167                 my $page_name;
3168                 my $page_description;
3169                 my $page_section;
3170                 my $page_template;
3171                 my $page_data;
3172                 my $page_settings;
3173                 my $page_lastmodified;
3175                 my $page_seek = 0;
3176                 my $warning_count = 0;
3178                 my $page_found = 0;
3180                 tie(%copied_list, 'Tie::IxHash');
3181                 tie(%warning_list, 'Tie::IxHash');
3183                 # Get information about the database that the selected pages are moving from.
3185                 my %olddatabase_info = $kiriwrite_dbmodule->getdatabaseinfo();
3187                 # Check if any errors had occured while getting the database
3188                 # information.
3190                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3192                         # A database error has occured so return an error and
3193                         # also the extended error information.
3195                         kiriwrite_error("oldcopydatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
3197                 };
3199                 $olddatabase_name = $olddatabase_info{"DatabaseName"};
3201                 # Get information about the database that the selected pages are moving to.
3203                 my %newdatabase_info = $kiriwrite_dbmodule->getseconddatabaseinfo();
3205                 # Check if any errors had occured while getting the database
3206                 # information.
3208                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3210                         # A database error has occured so return an error and
3211                         # also the extended error information.
3213                         kiriwrite_error("newcopydatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
3215                 };
3217                 $newdatabase_name = $newdatabase_info{"DatabaseName"};
3219                 # Check if the database filename is valid and return an error if
3220                 # it isn't.
3222                 my $newpagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
3224                 if ($newpagedatabase_filename_check eq 1){
3226                         # The database filename is blank, so return an error.
3228                         kiriwrite_error("blankdatabasepageadd");
3230                 } elsif ($newpagedatabase_filename_check eq 2){
3232                         # The database filename is invalid, so return an error.
3234                         kiriwrite_error("databasefilenameinvalid");
3236                 }
3238                 foreach $filename (@filelist){
3240                         # Get the page information.
3242                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3244                         # Check if any errors occured.
3246                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3248                                 # A database error has occured so return an error and
3249                                 # also the extended error information.
3251                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3252                                 $warning_count++;
3253                                 next;
3255                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3257                                 # The page does not exist, so process the next page.
3259                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfrompageerror}, $filename);
3260                                 $warning_count++;
3261                                 next;
3263                         }
3265                         $kiriwrite_dbmodule->copypage({ PageFilename => $filename });
3267                         # Check if any errors occured while copying the page.
3269                         if ($kiriwrite_dbmodule->geterror eq "OldDatabaseError"){
3271                                 # A database error has occured while copying the pages from
3272                                 # the old database, so write a warning message.
3274                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfromdatabaseerror}, $filename,  $kiriwrite_dbmodule->geterror(1));
3275                                 $warning_count++;
3276                                 next;
3278                         } elsif ($kiriwrite_dbmodule->geterror eq "NewDatabaseError"){
3280                                 # A database error has occured while copying the pages to
3281                                 # the new database, so write a warning message.
3283                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopytodatabaseerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3284                                 $warning_count++;
3285                                 next;
3287                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3289                                 # The page with the filename given in the database that
3290                                 # the page is to be copied from doesn't exist so write
3291                                 # a warning message.
3293                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfrompagenotexist}, $filename);
3294                                 $warning_count++;
3295                                 next;
3297                         } elsif ($kiriwrite_dbmodule->geterror eq "PageAlreadyExists"){
3299                                 # The page with the filename given in the database that
3300                                 # the page is to be copied to already exists so write a
3301                                 # warning message.
3303                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopytopageexists}, $filename);
3304                                 $warning_count++;
3305                                 next;
3307                         }
3309                         # Append the copied page (filename and name) to the list of
3310                         # copied pages.
3312                         $copied_list{$page_seek}{Filename}      = $filename;
3313                         $copied_list{$page_seek}{Name}          = $page_info{"PageName"};
3314                         $page_seek++;
3316                 }
3318                 # Disconnect from the database server.
3320                 $kiriwrite_dbmodule->disconnect();
3322                 # Write out a message saying that the pages were moved (if any)
3323                 # to the new database (and any warnings given).
3325                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypages}, { Style => "pageheader" });
3326                 $kiriwrite_presmodule->addlinebreak();
3327                 $kiriwrite_presmodule->addlinebreak();
3329                 if (%copied_list){
3331                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{copypagesresultmessage}, $olddatabase_name, $newdatabase_name));
3332                         $kiriwrite_presmodule->addlinebreak();
3333                         $kiriwrite_presmodule->addlinebreak();
3334                         $kiriwrite_presmodule->startbox("datalist");
3335                         foreach $page (keys %copied_list){
3336                                 if (!$copied_list{$page}{Name}){
3337                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
3338                                         $kiriwrite_presmodule->addtext(" (" . $copied_list{$page}{Filename} . ")");
3339                                 } else {
3340                                         $kiriwrite_presmodule->addtext($copied_list{$page}{Name} . " (" . $copied_list{$page}{Filename} . ")");
3341                                 }
3342                                 $kiriwrite_presmodule->addlinebreak();
3343                         }
3344                         $kiriwrite_presmodule->endbox();
3346                 } else {
3348                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagescopied}, $olddatabase_name, $newdatabase_name));
3350                 }
3352                 if (%warning_list){
3354                         $kiriwrite_presmodule->addlinebreak();
3355                         $kiriwrite_presmodule->addlinebreak();
3356                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypageswarnings});
3357                         $kiriwrite_presmodule->addlinebreak();
3358                         $kiriwrite_presmodule->addlinebreak();
3359                         $kiriwrite_presmodule->startbox("datalist");
3360                         foreach $warning (keys %warning_list){
3361                                 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
3362                                                         $kiriwrite_presmodule->addlinebreak();
3363                         }
3364                         $kiriwrite_presmodule->endbox();
3366                 }
3368                 $kiriwrite_presmodule->addlinebreak();
3369                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $olddatabase_name)});
3370                 $kiriwrite_presmodule->addtext(" | ");
3371                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $newdatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{viewpagelist}, $newdatabase_name)});
3373                 return $kiriwrite_presmodule->grab();
3375         } elsif ($confirm eq 0) {
3377                 # The action to copy several pages from one database
3378                 # to another has not been confirmed so write a form.
3380                 # Connect to the database server.
3382                 $kiriwrite_dbmodule->connect();
3384                 # Check if any errors occured while connecting to the database server.
3386                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3388                         # A database connection error has occured so return
3389                         # an error.
3391                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3393                 }
3395                 # Select the database to copy the pages from.
3397                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3399                 # Check if any errors occured while selecting the database.
3401                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3403                         # The database does not exist, so return an error.
3405                         kiriwrite_error("databasemissingfile");
3407                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3409                         # The database has invalid permissions set, so return
3410                         # an error.
3412                         kiriwrite_error("databaseinvalidpermissions");
3414                 }
3416                 # Get information about the database.
3418                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3420                 # Check if any errors had occured while getting the database
3421                 # information.
3423                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3425                         # A database error has occured so return an error and
3426                         # also the extended error information.
3428                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3430                 };
3432                 my $database_name       = $database_info{"DatabaseName"};
3434                 # Define some values for later.
3436                 my %page_info;
3437                 my %copy_list;
3438                 my %db_list;
3439                 my @page_info;
3440                 my $page;
3441                 my $data_file;
3442                 my $dbname;
3443                 my $filename;
3444                 my $pageseek    = 0;
3445                 my $dbseek      = 0;
3446                 my $pagefound   = 0;
3448                 tie(%copy_list, 'Tie::IxHash');
3449                 tie(%db_list, 'Tie::IxHash');
3451                 # Process each filename given.
3453                 foreach $filename (@filelist){
3455                         # Get the page information.
3457                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3459                         # Check if any errors occured.
3461                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3463                                 # A database error has occured so return an error and
3464                                 # also the extended error information.
3466                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3468                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3470                                 # The page does not exist, so process the next page.
3472                                 next;
3474                         }
3476                         # Add the page name and file name to the list of
3477                         # pages to move.
3479                         $copy_list{$pageseek}{Filename} = $page_info{"PageFilename"};
3480                         $copy_list{$pageseek}{Name}     = $page_info{"PageName"};
3482                         # Increment the page seek counter.
3484                         $pageseek++;
3486                 }
3488                 # Check if any pages exust and return an error if
3489                 # there wasn't.
3491                 if ($pageseek eq 0){
3493                         # None of the selected pages exist, so return
3494                         # an error.
3496                         kiriwrite_error("nopagesselected");
3498                 }
3500                 # Get the database filenames and names.
3502                 my @database_list       = $kiriwrite_dbmodule->getdblist();
3504                 # Check if any errors occured while trying to get the list of databases.
3506                 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
3508                         # The database directory is missing so return an error.
3510                         kiriwrite_error("datadirectorymissing");
3512                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
3514                         # The database directory has invalid permissions set so return
3515                         # an error.
3517                         kiriwrite_error("datadirectoryinvalidpermissions");
3519                 }
3521                 # Process each database to get the database name.
3523                 foreach $data_file (@database_list){
3525                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
3527                         # Check if any errors occured while selecting the database.
3529                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3531                                 # The database does not exist, so process the next
3532                                 # database.
3534                                 next;
3536                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3538                                 # The database has invalid permissions set, so process
3539                                 # the next database.
3541                                 next;
3543                         }
3545                         # Get the database information.
3547                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3549                         # Check if any errors had occured while getting the database
3550                         # information.
3552                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3554                                 # A database error has occured so process the next
3555                                 # database.
3557                                 next;
3559                         };
3561                         # Check if the database name is undefined and if it is
3562                         # then set it blank.
3564                         if (!$database_name){
3565                                 $database_name = "";
3566                         }
3568                         # Append the database filename and name to the list of databases
3569                         # to move the pages to.
3571                         $db_list{$dbseek}{Filename}     = $data_file;
3572                         $db_list{$dbseek}{Name}         = $database_info{"DatabaseName"};
3574                         $dbseek++;
3576                 }
3578                 # Disconnect from the database server.
3580                 $kiriwrite_dbmodule->disconnect();
3582                 # Write out the form.
3584                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypages}, { Style => "pageheader" });
3585                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
3586                 $kiriwrite_presmodule->startbox();
3587                 $kiriwrite_presmodule->addhiddendata("mode", "page");
3588                 $kiriwrite_presmodule->addhiddendata("action", "multicopy");
3589                 $kiriwrite_presmodule->addhiddendata("database", $database);
3590                 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
3591                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
3593                 $pageseek = 1;
3595                 foreach $page (keys %copy_list){
3596                         $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
3597                         $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $copy_list{$page}{Filename});
3598                         $pageseek++;
3599                 }
3601                 $kiriwrite_presmodule->addlinebreak();
3602                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{copypagesmessage}, $database_name));
3604                 $kiriwrite_presmodule->addlinebreak();
3605                 $kiriwrite_presmodule->addlinebreak();
3607                 $kiriwrite_presmodule->startbox("datalist");
3609                 foreach $page (keys %copy_list){
3610                         if (!$copy_list{$page}{Name}){
3611                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
3612                                 $kiriwrite_presmodule->addtext(" (" . $copy_list{$page}{Filename} . ")");
3613                         } else {
3614                                 $kiriwrite_presmodule->addtext($copy_list{$page}{Name} . " (" . $copy_list{$page}{Filename} . ")");
3615                         }
3616                         $kiriwrite_presmodule->addlinebreak();
3617                 }
3619                 $kiriwrite_presmodule->endbox();
3621                 $kiriwrite_presmodule->addlinebreak();
3623                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypagesto});
3624                 $kiriwrite_presmodule->addselectbox("newdatabase");
3626                 foreach $dbname (keys %db_list){
3627                         $kiriwrite_presmodule->addoption($db_list{$dbname}{Name} . " (" . $db_list{$dbname}{Filename} . ")", { Value => $db_list{$dbname}{Filename}});
3628                 }
3630                 $kiriwrite_presmodule->endselectbox();
3632                 $kiriwrite_presmodule->addlinebreak();
3633                 $kiriwrite_presmodule->addlinebreak();
3634                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{copypagesbutton});
3635                 $kiriwrite_presmodule->addtext(" | ");
3636                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
3638                 $kiriwrite_presmodule->endbox();                
3639                 $kiriwrite_presmodule->endform();
3641                 return $kiriwrite_presmodule->grab();
3643         } else {
3645                 # The confirm value is other than 0 or 1, so return
3646                 # an error.
3648                 kiriwrite_error("invalidvariable");
3650         }
3654 sub kiriwrite_page_multiedit{
3655 #################################################################################
3656 # kiriwrite_page_multiedit: Edit several pages from a database.                 #
3657 #                                                                               #
3658 # Usage:                                                                        #
3659 #                                                                               #
3660 # kiriwrite_page_multiedit(database, newsection, altersection, newtemplate,     #
3661 #                               altertemplate, newsettings, altersettings       #
3662 #                               confirm, filelist);                             #
3663 #                                                                               #
3664 # database      Specifies the database to edit the pages from.                  #
3665 # newsection    Specifies the new section name to use on the selected pages.    #
3666 # altersection  Specifies if the section name should be altered.                #
3667 # newtemplate   Specifies the new template filename to use on the selected      #
3668 #               pages.                                                          #
3669 # altertemplate Specifies if the template filename should be altered.           #
3670 # newsettings   Specifies the new settings to use on the selected pages.        #
3671 # altersettings Specifies if the settings should be altered.                    #
3672 # confirm       Confirms the action to edit the selected pages.                 #
3673 # filelist      The list of file names to edit.                                 #
3674 #################################################################################
3676         # Get the values that were passed to the subroutine.
3678         my ($database, $newsection, $altersection, $newtemplate, $altertemplate, $newsettings, $altersettings, $confirm, @filelist) = @_;
3680         # Check if the file list is blank and return an error
3681         # if it is.
3683         if (!@filelist){
3685                 # The file list really is blank so return
3686                 # an error.
3688                 kiriwrite_error("nopagesselected");
3690         }
3692         # Check if certain values are undefined and define them if
3693         # they are.
3695         if (!$altersection){
3697                 # The alter section value is blank, so set it to
3698                 # off.
3700                 $altersection   = "off";
3702         }
3704         if (!$altertemplate){
3706                 # The alter template value is blank, so set it to
3707                 # off.
3709                 $altertemplate  = "off";
3711         }
3713         if (!$altersettings){
3715                 # The alter settings value is blank, so set it to
3716                 # off.
3718                 $altersettings  = "off";
3720         }
3722         # Check if the database filename is valid and return an error if
3723         # it isn't.
3725         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
3727         if ($pagedatabase_filename_check eq 1){
3729                 # The database filename is blank, so return an error.
3731                 kiriwrite_error("blankdatabasepageadd");
3733         } elsif ($pagedatabase_filename_check eq 2){
3735                 # The database filename is invalid, so return an error.
3737                 kiriwrite_error("databasefilenameinvalid");
3739         }
3741         # Check if the confirm value is blank and if it is then
3742         # set the confirm value to 0.
3744         if (!$confirm){
3746                 $confirm = 0;
3748         }
3750         if ($confirm eq 1){
3752                 # The action to edit the template has been confirmed so
3753                 # edit the selected pages.
3755                 # Check the values recieved at UTF8 compliant before
3756                 # converting.
3758                 kiriwrite_variablecheck($newsection, "utf8", 0, 0);
3759                 kiriwrite_variablecheck($newtemplate, "utf8", 0, 0);
3760                 kiriwrite_variablecheck($newsettings, "utf8", 0, 0);
3762                 # Convert the values into proper UTF8 values.
3764                 $newsection     = kiriwrite_utf8convert($newsection);
3765                 $newtemplate    = kiriwrite_utf8convert($newtemplate);
3766                 $newsettings    = kiriwrite_utf8convert($newsettings);
3768                 # Check the length of the variables.
3770                 kiriwrite_variablecheck($altersection, "maxlength", 3, 0);
3771                 kiriwrite_variablecheck($altertemplate, "maxlength", 3, 0);
3772                 kiriwrite_variablecheck($altersettings, "maxlength", 3, 0);
3773                 my $newsection_maxlength_check  = kiriwrite_variablecheck($newsection, "maxlength", 256, 1);
3774                 my $newtemplate_maxlength_check = kiriwrite_variablecheck($newtemplate, "maxlength", 256, 1);
3775                 my $newtemplate_filename_check  = kiriwrite_variablecheck($newtemplate, "filename", 0, 1);
3776                 my $newsettings_maxlength_check = kiriwrite_variablecheck($newsettings, "maxlength", 1, 1);
3777                 my $newsettings_settings_check  = kiriwrite_variablecheck($newsettings, "pagesetting", 0, 1);
3779                 # Check the values and return an error if needed.
3781                 if ($newsection_maxlength_check eq 1 && $altersection eq "on"){
3783                         # The new section name is too long, so return an
3784                         # error.
3786                         kiriwrite_error("pagesectiontoolong");
3788                 }
3790                 if ($newtemplate_maxlength_check eq 1 && $altertemplate eq "on"){
3792                         # The new template name is too long, so return an
3793                         # error.
3795                         kiriwrite_error("templatefilenametoolong");
3797                 }
3799                 # Check if the template filename is set to !skip or !none
3800                 # and skip this check if it is.
3802                 if ($newtemplate eq "!skip" || $newtemplate eq "!none"){
3804                         # Skip this check as the template filename is 
3805                         # !skip or !none.
3807                 } else {
3808                         if ($newtemplate_filename_check eq 1 && $altertemplate eq "on" || $newtemplate_filename_check eq 2 && $altertemplate eq "on"){
3810                                 # The new template filename is invalid, so return
3811                                 # an error.
3813                                 kiriwrite_error("templatefilenameinvalid");
3815                         }
3816                 }
3818                 if ($newsettings_maxlength_check eq 1 && $altertemplate eq "on"){
3820                         # The new settings value is too long, so return
3821                         # an error.
3823                         kiriwrite_error("pagesettingstoolong");
3825                 }
3827                 if ($newsettings_settings_check eq 1 && $altersettings eq "on"){
3829                         # The new settings value is invalid, so return
3830                         # an error.
3832                         kiriwrite_error("pagesettingsinvalid");
3834                 }
3836                 # Define some values for later.
3838                 my %database_info;
3839                 my %edited_list;
3840                 my %warning_list;
3841                 my %page_info;
3842                 my $page;
3843                 my $warning;
3844                 my $filename;
3845                 my $page_name;
3846                 my $pagefound = 0;
3847                 my $pageedited = 0;
3848                 my $warning_count = 0;
3850                 tie(%edited_list, 'Tie::IxHash');
3851                 tie(%warning_list, 'Tie::IxHash');
3853                 # Check if the template filename is !skip and
3854                 # set the alter template value to off if it
3855                 # is.
3857                 if ($newtemplate eq "!skip"){
3859                         $altertemplate = "off";
3861                 }
3863                 # Check if all values are not selected and return
3864                 # an error if they are.
3866                 if ($altersection ne "on" && $altertemplate ne "on" && $altersettings ne "on"){
3868                         # All values are not selected so return 
3869                         # an error.
3871                         kiriwrite_error("noeditvaluesselected");
3873                 }
3875                 # Connect to the database server.
3877                 $kiriwrite_dbmodule->connect();
3879                 # Check if any errors occured while connecting to the database server.
3881                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3883                         # A database connection error has occured so return
3884                         # an error.
3886                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3888                 }
3890                 # Select the database.
3892                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3894                 # Check if any errors occured while selecting the database.
3896                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3898                         # The database does not exist, so return an error.
3900                         kiriwrite_error("databasemissingfile");
3902                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3904                         # The database has invalid permissions set, so return
3905                         # an error.
3907                         kiriwrite_error("databaseinvalidpermissions");
3909                 }
3911                 # Check if the database has read and write permissions.
3913                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
3915                 if ($database_permissions eq 1){
3917                         # The database permissions are invalid so return an error.
3919                         kiriwrite_error("databaseinvalidpermissions");
3921                 }
3923                 # Get information about the database.
3925                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3927                 # Check if any errors had occured while getting the database
3928                 # information.
3930                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3932                         # A database error has occured so return an error and
3933                         # also the extended error information.
3935                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3937                 };
3939                 my $database_name = $database_info{"DatabaseName"};
3941                 # Edit the selected pages.
3943                 foreach $filename (@filelist){
3945                         # Get the page information.
3947                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3949                         # Check if any errors occured.
3951                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3953                                 # A database error has occured so write a warning message.
3955                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3957                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3959                                 # The page does not exist, so write a warning message.
3961                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepagedoesnotexist}, $filename);
3962                                 $warning_count++;
3963                                 next;
3965                         }
3967                         # Check if the page section should be altered.
3969                         if ($altersection eq "on"){
3971                                 # Change the section name.
3973                                 $page_info{"PageSection"} = $newsection;
3975                         }
3977                         # Check if the page template should be altered.
3979                         if ($altertemplate eq "on"){
3981                                 # Change the page template filename.
3983                                 $page_info{"PageTemplate"} = $newtemplate;
3985                         }
3987                         # Check if the page settings should be altered.
3989                         if ($altersettings eq "on"){
3991                                 # Change the page settings value.
3993                                 $page_info{"PageSettings"} = $newsettings;
3995                         }
3997                         # Edit the selected page.
3999                         $kiriwrite_dbmodule->editpage({ PageFilename => $page_info{"PageFilename"}, PageNewFilename => $page_info{"PageFilename"}, PageNewName => $page_info{"PageName"}, PageNewDescription => $page_info{"PageDescription"}, PageNewSection => $page_info{"PageSection"}, PageNewTemplate => $page_info{"PageTemplate"}, PageNewContent => $page_info{"PageContent"}, PageNewSettings => $page_info{"PageSettings"} });
4001                         # Check if any errors occured while editing the page.
4003                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4005                                 # A database error has occured so write a warning message
4006                                 # with the extended error information.
4008                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
4009                                 $warning_count++;
4010                                 next;
4012                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4014                                 # The pages does not exist in the database.
4016                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepagedoesnotexist}, $filename);
4017                                 $warning_count++;
4018                                 next;
4020                         } elsif ($kiriwrite_dbmodule->geterror eq "PageExists"){
4022                                 # A page already exists with the new filename.
4024                                 kiriwrite_error("pagefilenameexists");
4026                         }
4028                         # The page has been edited so write a message saying that the page
4029                         # has been edited.
4031                         $edited_list{$pageedited}{Filename}     = $page_info{"PageFilename"};
4032                         $edited_list{$pageedited}{Name}         = $page_info{"PageName"};
4033  
4034                         # Increment the counter of edited pages.
4035  
4036                         $pageedited++;
4038                 }
4040                 # Disconnect from the database server.
4042                 $kiriwrite_dbmodule->disconnect();
4044                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multiedit}, { Style => "pageheader" });
4045                 $kiriwrite_presmodule->addlinebreak();
4046                 $kiriwrite_presmodule->addlinebreak();
4048                 # Check if the counter of edited pages is 0 and if it is
4049                 # then write a message saying that no pages were edited
4050                 # else write a message listing all of the pages edited.
4052                 if ($pageedited eq 0){
4054                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagesedited}, $database_name));
4056                 } else {
4058                         # Write out the message saying that the selected pages
4059                         # were edited.
4061                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagesedited}, $database_name));
4062                         $kiriwrite_presmodule->addlinebreak();
4063                         $kiriwrite_presmodule->addlinebreak();
4064                         $kiriwrite_presmodule->startbox("datalist");
4066                         foreach $page (keys %edited_list){
4068                                 # Check if the page name is not blank.
4070                                 if (!$edited_list{$page}{Name}){
4072                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
4073                                         $kiriwrite_presmodule->addtext(" (" . $edited_list{$page}{Filename} . ")");
4075                                 } else {
4077                                         $kiriwrite_presmodule->addtext($edited_list{$page}{Name});
4078                                         $kiriwrite_presmodule->addtext(" (" . $edited_list{$page}{Filename} . ")");
4080                                 }
4082                                 $kiriwrite_presmodule->addlinebreak();
4083                         }
4085                         $kiriwrite_presmodule->endbox();
4087                 }
4089                 # Check if any warnings have occured and write a message
4090                 # if any warnings did occur.
4092                 if (%warning_list){
4094                         # One or several warnings have occured so 
4095                         # write a message.
4097                         $kiriwrite_presmodule->addlinebreak();
4098                         $kiriwrite_presmodule->addlinebreak();
4099                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{editedpageswarnings});
4100                         $kiriwrite_presmodule->addlinebreak();
4101                         $kiriwrite_presmodule->addlinebreak();
4102                         $kiriwrite_presmodule->startbox("datalist");
4103                         foreach $warning (keys %warning_list) {
4104                                 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
4105                                 $kiriwrite_presmodule->addlinebreak();
4106                         }
4107                         $kiriwrite_presmodule->endbox();
4109                 }
4111                 # Write a link going back to the page list for
4112                 # the selected database.
4114                 $kiriwrite_presmodule->addlinebreak();
4115                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
4117                 return $kiriwrite_presmodule->grab();
4119         } elsif ($confirm eq 0){
4121                 # The action to edit the template has not been confirmed
4122                 # so write a form out instead.
4124                 # Connect to the database server.
4126                 $kiriwrite_dbmodule->connect();
4128                 # Check if any errors occured while connecting to the database server.
4130                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4132                         # A database connection error has occured so return
4133                         # an error.
4135                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4137                 }
4139                 # Select the database.
4141                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
4143                 # Check if any errors occured while selecting the database.
4145                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4147                         # The database does not exist, so return an error.
4149                         kiriwrite_error("databasemissingfile");
4151                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4153                         # The database has invalid permissions set, so return
4154                         # an error.
4156                         kiriwrite_error("databaseinvalidpermissions");
4158                 }
4160                 # Check if the database has read and write permissions.
4162                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
4164                 if ($database_permissions eq 1){
4166                         # The database permissions are invalid so return an error.
4168                         kiriwrite_error("databaseinvalidpermissions");
4170                 }
4172                 # Get information about the database.
4174                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4176                 # Check if any errors had occured while getting the database
4177                 # information.
4179                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4181                         # A database error has occured so return an error and
4182                         # also the extended error information.
4184                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4186                 };
4188                 my $database_name       = $database_info{"DatabaseName"};
4190                 # Define some variables for later.
4192                 my %edit_list;
4193                 my %template_list;
4194                 my %template_info;
4195                 my %page_info;
4196                 my @templates_list;
4197                 my @filenames;
4198                 my $filelist_filename;
4199                 my $filename;
4200                 my $page;
4201                 my $pageseek = 0;
4202                 my $page_name;
4203                 my $page_filename;
4204                 my $template;
4205                 my $template_filename;
4206                 my $template_warning;
4207                 my $templateseek = 0;
4209                 tie(%edit_list, 'Tie::IxHash');
4210                 tie(%template_list, 'Tie::IxHash');
4212                 # Get the information about each page that is going
4213                 # to be edited.
4215                 foreach $filelist_filename (@filelist){
4217                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
4219                         # Check if any errors occured.
4221                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4223                                 # A database error has occured so return an error and
4224                                 # also the extended error information.
4226                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4228                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4230                                 # The page does not exist, so process the next page.
4232                                 next;
4234                         }
4236                         # Add the page name and file name to the list of
4237                         # pages to edit.
4239                         $edit_list{$pageseek}{Filename} = $page_info{"PageFilename"};
4240                         $edit_list{$pageseek}{Name}     = $page_info{"PageName"};
4242                         # Increment the page seek counter and reset the
4243                         # page found value.
4245                         $pageseek++;
4247                 }
4249                 # Check if any pages were found in the database and return
4250                 # an error if not.
4252                 if ($pageseek eq 0){
4254                         # No pages were found so return an error.
4256                         kiriwrite_error("nopagesselected");
4258                 }
4260                 # Connect to the template database.
4262                 $kiriwrite_dbmodule->connecttemplate();
4264                 # Check if any errors had occured.
4266                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
4268                         # The template database does not exist so write a warning
4269                         # message.
4271                         $template_warning = $kiriwrite_lang->{pages}->{templatedatabasenotexistmultieditkeep};
4273                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
4275                         # The template database has invalid permissions set so
4276                         # return an error.
4278                         $template_warning = $kiriwrite_lang->{pages}->{templatedatabasepermissionsinvalidmultieditkeep};
4280                 }
4282                 if (!$template_warning){
4284                         # Get the list of templates available.
4286                         @templates_list = $kiriwrite_dbmodule->gettemplatelist();
4288                         # Check if any errors had occured.
4290                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
4292                                 # A database error occured while getting the list
4293                                 # of templates so write a warning message with the 
4294                                 # extended error information.
4296                                 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrormultieditkeep}, $kiriwrite_dbmodule->geterror(1));
4298                         }
4300                         if (!$template_warning){
4302                                 foreach $template_filename (@templates_list){
4304                                         # Get the template data.
4306                                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
4308                                         # Check if any error occured while getting the template information.
4310                                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
4312                                                 # A database error has occured, so write a warning message with
4313                                                 # the extended error information.
4315                                                 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrormultieditkeep}, $kiriwrite_dbmodule->geterror(1));
4317                                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
4319                                                 # The template does not exist, so process the next page.
4321                                                 next;
4323                                         }
4325                                         # Add the template to the list of templates.
4327                                         $template_list{$templateseek}{Filename} = $template_info{"TemplateFilename"};
4328                                         $template_list{$templateseek}{Name}     = $template_info{"TemplateName"};
4330                                         $templateseek++;
4332                                 }
4334                         }
4336                 }
4338                 # Disconnect from the template database.
4340                 $kiriwrite_dbmodule->disconnecttemplate();
4342                 # Disconnect from the database server.
4344                 $kiriwrite_dbmodule->disconnect();
4346                 # Write a form for editing the selected pages.
4348                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multiedit}, { Style => "pageheader" });
4349                 $kiriwrite_presmodule->addlinebreak();
4350                 $kiriwrite_presmodule->addlinebreak();
4351                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
4352                 $kiriwrite_presmodule->startbox();
4353                 $kiriwrite_presmodule->addhiddendata("mode", "page");
4354                 $kiriwrite_presmodule->addhiddendata("action", "multiedit");
4355                 $kiriwrite_presmodule->addhiddendata("database", $database);
4356                 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
4357                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
4359                 $pageseek = 1;
4361                 foreach $page (keys %edit_list){
4362                         $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
4363                         $kiriwrite_presmodule->addhiddendata("id[" . $pageseek  . "]", $edit_list{$page}{Filename});
4364                         $pageseek++;
4365                 }
4367                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{multieditmessage}, $database_name));
4368                 $kiriwrite_presmodule->addlinebreak();
4369                 $kiriwrite_presmodule->addlinebreak();
4370                 $kiriwrite_presmodule->startbox("datalist");
4372                 foreach $page (keys %edit_list){
4373                         if (!$edit_list{$page}{Name}){
4374                                 $kiriwrite_presmodule->additalictext("No Name");
4375                                 $kiriwrite_presmodule->addtext(" (" . $edit_list{$page}{Filename} . ")");
4376                         } else {
4377                                 $kiriwrite_presmodule->addtext($edit_list{$page}{Name} . " (" . $edit_list{$page}{Filename} . ")");
4378                         }
4380                         $kiriwrite_presmodule->addlinebreak();
4381                 }
4383                 $kiriwrite_presmodule->endbox();
4384                 $kiriwrite_presmodule->addlinebreak();
4385                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multieditmessagevalues});
4386                 $kiriwrite_presmodule->addlinebreak();
4387                 $kiriwrite_presmodule->addlinebreak();
4388                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
4390                 $kiriwrite_presmodule->startheader();
4391                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{alter}, { Style => "tablecellheader" });
4392                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
4393                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
4394                 $kiriwrite_presmodule->endheader();
4396                 $kiriwrite_presmodule->startrow();
4397                 $kiriwrite_presmodule->addcell("tablecell1");
4398                 $kiriwrite_presmodule->addcheckbox("altersection");
4399                 $kiriwrite_presmodule->endcell();
4400                 $kiriwrite_presmodule->addcell("tablecell1");
4401                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
4402                 $kiriwrite_presmodule->endcell();
4403                 $kiriwrite_presmodule->addcell("tablecell1");
4404                 $kiriwrite_presmodule->addinputbox("newsection", { Size => 64, MaxLength => 256 });
4405                 $kiriwrite_presmodule->endcell();
4406                 $kiriwrite_presmodule->endrow();
4408                 $kiriwrite_presmodule->startrow();
4409                 $kiriwrite_presmodule->addcell("tablecell2");
4410                 $kiriwrite_presmodule->addcheckbox("altertemplate");
4411                 $kiriwrite_presmodule->endcell();
4412                 $kiriwrite_presmodule->addcell("tablecell2");
4413                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
4414                 $kiriwrite_presmodule->endcell();
4416                 $kiriwrite_presmodule->addcell("tablecell2");
4418                 if ($template_warning){
4420                         $kiriwrite_presmodule->addhiddendata("newtemplate", "!skip");
4421                         $kiriwrite_presmodule->addtext($template_warning);
4423                 } else {
4425                         $kiriwrite_presmodule->addselectbox("newtemplate");
4427                         foreach $template (keys %template_list){
4429                                 $kiriwrite_presmodule->addoption($template_list{$template}{Name} . " (" . $template_list{$template}{Filename} . ")", { Value => $template_list{$template}{Filename}});
4431                         }
4433                         $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
4434                         $kiriwrite_presmodule->endselectbox();
4435                 }
4437                 $kiriwrite_presmodule->endcell();
4438                 $kiriwrite_presmodule->endrow();
4440                 $kiriwrite_presmodule->startrow();
4441                 $kiriwrite_presmodule->addcell("tablecell1");
4442                 $kiriwrite_presmodule->addcheckbox("altersettings");
4443                 $kiriwrite_presmodule->endcell();
4444                 $kiriwrite_presmodule->addcell("tablecell1");
4445                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
4446                 $kiriwrite_presmodule->endcell();
4447                 $kiriwrite_presmodule->addcell("tablecell1");
4448                 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => 1 , Selected => 1});
4449                 $kiriwrite_presmodule->addlinebreak();
4450                 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => 2 });
4451                 $kiriwrite_presmodule->addlinebreak();
4452                 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => 3 });
4453                 $kiriwrite_presmodule->addlinebreak();
4454                 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => 0 });
4455                 $kiriwrite_presmodule->endcell();
4456                 $kiriwrite_presmodule->endrow();
4458                 $kiriwrite_presmodule->endtable();
4459                 $kiriwrite_presmodule->addlinebreak();
4460                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{editpagesbutton});
4461                 $kiriwrite_presmodule->addtext(" | ");
4462                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
4463                 $kiriwrite_presmodule->addtext(" | ");
4464                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
4465                 $kiriwrite_presmodule->endbox();
4466                 $kiriwrite_presmodule->endform();
4468                 return $kiriwrite_presmodule->grab();
4470         } else {
4472                 # The confirm value is something else other than
4473                 # 1 or 0, so return an error.
4475                 kiriwrite_error("invalidvariable");
4477         }
4481 sub kiriwrite_page_list{
4482 #################################################################################
4483 # kiriwrite_page_list: Lists pages from an database.                            #
4484 #                                                                               #
4485 # Usage:                                                                        #
4486 #                                                                               #
4487 # kiriwrite_page_list([database]);                                              #
4488 #                                                                               #
4489 # database      Specifies the database to retrieve the pages from.              #
4490 #################################################################################
4492         # Get the database file name from what was passed to the subroutine.
4494         my ($database_file) = @_;
4496         # Check if the database_file variable is empty, if it is then print out a
4497         # select box asking the user to select a database from the list.
4499         if (!$database_file) {
4501                 # Define the variables required for this section.
4503                 my %database_info;
4504                 my @database_list;
4505                 my @databasefilenames;
4506                 my @databasenames;
4507                 my $dbseek              = 0;
4508                 my $dbfilename          = "";
4509                 my $dbname              = "";
4510                 my $data_file           = "";
4511                 my $data_file_length    = 0;
4512                 my $data_file_friendly  = "";
4513                 my $database_name       = "";
4514                 my $file_permissions    = "";
4516                 # Connect to the database server.
4518                 $kiriwrite_dbmodule->connect();
4520                 # Check if any errors occured while connecting to the database server.
4522                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4524                         # A database connection error has occured so return
4525                         # an error.
4527                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4529                 }
4531                 # Open the data directory and get all of the databases.
4533                 @database_list  = $kiriwrite_dbmodule->getdblist();
4535                 # Check if any errors occured while trying to get the list of databases.
4537                 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
4539                         # The database directory is missing so return an error.
4541                         kiriwrite_error("datadirectorymissing");
4543                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
4545                         # The database directory has invalid permissions set so return
4546                         # an error.
4548                         kiriwrite_error("datadirectoryinvalidpermissions");
4550                 }
4552                 # Get the information about each database (the short name and friendly name).
4554                 foreach $data_file (@database_list){
4556                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
4558                         # Check if any errors occured while selecting the database.
4560                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4562                                 # The database does not exist, so process the next
4563                                 # database.
4565                                 next;
4567                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4569                                 # The database has invalid permissions set, so process
4570                                 # the next database.
4572                                 next;
4574                         }
4576                         # Get the database information.
4578                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4580                         # Check if any errors had occured while getting the database
4581                         # information.
4583                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4585                                 # A database error has occured, so process the next 
4586                                 # database.
4588                                 next;
4590                         };
4592                         # Set the database name.
4594                         $database_name          = $database_info{"DatabaseName"};
4596                         # Check if the database name is undefined and if it is
4597                         # then set it blank.
4599                         if (!$database_name){
4600                                 $database_name = "";
4601                         }
4603                         # Append the database to the list of databases available.
4605                         push(@databasefilenames, $data_file);
4606                         push(@databasenames, $database_name);
4608                 }
4610                 # Disconnect from the database server.
4612                 $kiriwrite_dbmodule->disconnect();
4614                 # Write the page data.
4616                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{viewpages}, { Style => "pageheader" });
4617                 $kiriwrite_presmodule->addlinebreak();
4618                 $kiriwrite_presmodule->addlinebreak();
4619                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{nodatabaseselected});
4620                 $kiriwrite_presmodule->addlinebreak();
4621                 $kiriwrite_presmodule->addlinebreak();
4622                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"});
4623                 $kiriwrite_presmodule->startbox();
4624                 $kiriwrite_presmodule->addhiddendata("mode", "page");
4625                 $kiriwrite_presmodule->addhiddendata("action", "view");
4626                 $kiriwrite_presmodule->addselectbox("database");
4627                 foreach $dbfilename (@databasefilenames){
4628                         $dbname = $databasenames[$dbseek];
4629                         $dbseek++;
4630                         $kiriwrite_presmodule->addoption($dbname . " (" . $dbfilename . ")", { Value => $dbfilename });
4631                 }
4632                 $kiriwrite_presmodule->endselectbox();
4633                 $kiriwrite_presmodule->addtext(" | ");
4634                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{viewbutton});
4635                 $kiriwrite_presmodule->endbox();
4636                 $kiriwrite_presmodule->endform();
4638                 return $kiriwrite_presmodule->grab();
4640         } else {
4642                 my %database_info;
4643                 my %page_info;
4644                 my @database_pages;
4645                 my $pagemultioptions    = "";
4646                 my $db_name             = "";
4647                 my $tablestyle          = "";
4649                 my $page_filename       = "";
4650                 my $page_name           = "";
4651                 my $page_description    = "";
4652                 my $page_modified       = "";
4654                 my $tablestyletype      = 0;
4655                 my $page_count          = 0;
4656                 my $db_file_notblank    = 0;
4658                 tie(%database_info, 'Tie::IxHash');
4659                 tie(%page_info, 'Tie::IxHash');
4661                 # The database_file variable is not blank, so print out a list of pages from
4662                 # the selected database.
4664                 # Preform a variable check on the database filename to make sure that it is
4665                 # valid before using it.
4667                 kiriwrite_variablecheck($database_file, "filename", "", 0);
4668                 kiriwrite_variablecheck($database_file, "maxlength", 32, 0);
4670                 # Connect to the database server.
4672                 $kiriwrite_dbmodule->connect();
4674                 # Check if any errors occured while connecting to the database server.
4676                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4678                         # A database connection error has occured so return
4679                         # an error.
4681                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4683                 }
4685                 # Select the database.
4687                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_file });
4689                 # Check if any errors had occured while selecting the database.
4691                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4693                         # The database does not exist, so return an error.
4695                         kiriwrite_error("databasemissingfile");
4697                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4699                         # The database has invalid permissions set, so return
4700                         # an error.
4702                         kiriwrite_error("databaseinvalidpermissions");
4704                 }
4706                 # Get information about the database.
4708                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4710                 $db_name = $database_info{"DatabaseName"};
4712                 # Check if any errors had occured while getting the database
4713                 # information.
4715                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4717                         # A database error has occured so return an error and
4718                         # also the extended error information.
4720                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4722                 }
4724                 # Get the list of pages.
4726                 @database_pages = $kiriwrite_dbmodule->getpagelist();
4728                 # Check if any errors had occured while getting the list of pages.
4730                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4732                         # A database error has occured so return an error and
4733                         # also the extended error information.
4735                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4737                 }
4739                 # Check if there are any page names in the database array.
4741                 if (@database_pages){
4743                         # Write the start of the page.
4745                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagelist}, $db_name), { Style => "pageheader" });
4746                         $kiriwrite_presmodule->addlinebreak();
4747                         $kiriwrite_presmodule->addlinebreak();
4748                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
4749                         $kiriwrite_presmodule->startbox();
4750                         $kiriwrite_presmodule->addhiddendata("mode", "page");
4751                         $kiriwrite_presmodule->addhiddendata("database", $database_file);
4752                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
4754                         # Write the list of multiple selection options.
4756                         $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
4757                         $kiriwrite_presmodule->addtext(" | ");
4758                         $kiriwrite_presmodule->addbutton("action", { Value => "multidelete", Description => $kiriwrite_lang->{pages}->{deleteselectedbutton} });
4759                         $kiriwrite_presmodule->addtext(" | ");
4760                         $kiriwrite_presmodule->addbutton("action", { Value => "multimove", Description => $kiriwrite_lang->{pages}->{moveselectedbutton} });
4761                         $kiriwrite_presmodule->addtext(" | ");
4762                         $kiriwrite_presmodule->addbutton("action", { Value => "multicopy", Description => $kiriwrite_lang->{pages}->{copyselectedbutton} });
4763                         $kiriwrite_presmodule->addtext(" | ");
4764                         $kiriwrite_presmodule->addbutton("action", { Value => "multiedit", Description => $kiriwrite_lang->{pages}->{editselectedbutton} });
4766                         $kiriwrite_presmodule->addlinebreak();
4767                         $kiriwrite_presmodule->addlinebreak();
4768                         $kiriwrite_presmodule->endbox();
4770                         # Write the table header.
4772                         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
4773                         $kiriwrite_presmodule->startheader();
4774                         $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
4775                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagefilename}, { Style => "tablecellheader" });
4776                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagename}, { Style => "tablecellheader" });
4777                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagedescription}, { Style => "tablecellheader" });
4778                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{lastmodified}, { Style => "tablecellheader" });
4779                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
4780                         $kiriwrite_presmodule->endheader();
4782                         # Process each page filename and get the page information.
4784                         foreach $page_filename (@database_pages){
4786                                 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page_filename, Reduced => 1 });
4788                                 # Check if any errors have occured.
4790                                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4792                                         # A database error has occured so return an error and
4793                                         # also the extended error information.
4795                                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4797                                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4799                                         # The page does not exist, so process the next page.
4801                                         next;
4803                                 }
4805                                 $page_count++;
4807                                 $page_filename          = $page_info{"PageFilename"};
4808                                 $page_name              = $page_info{"PageName"};
4809                                 $page_description       = $page_info{"PageDescription"};
4810                                 $page_modified          = $page_info{"PageLastModified"};
4812                                 # Set the table cell style.
4814                                 if ($tablestyletype eq 0){
4816                                         $tablestyle = "tablecell1";
4817                                         $tablestyletype = 1;
4819                                 } else {
4821                                         $tablestyle = "tablecell2";
4822                                         $tablestyletype = 0;
4824                                 }
4826                                 # Write out the row of data.
4828                                 $kiriwrite_presmodule->startrow();
4829                                 $kiriwrite_presmodule->addcell($tablestyle);
4830                                 $kiriwrite_presmodule->addhiddendata("id[" . $page_count . "]", $page_filename);
4831                                 $kiriwrite_presmodule->addcheckbox("name[" . $page_count . "]");
4832                                 $kiriwrite_presmodule->endcell();
4833                                 $kiriwrite_presmodule->addcell($tablestyle);
4834                                 $kiriwrite_presmodule->addtext($page_filename);
4835                                 $kiriwrite_presmodule->endcell();
4836                                 $kiriwrite_presmodule->addcell($tablestyle);
4838                                 if (!$page_name){
4840                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
4842                                 } else {
4844                                         $kiriwrite_presmodule->addtext($page_name);
4846                                 }
4848                                 $kiriwrite_presmodule->endcell();
4849                                 $kiriwrite_presmodule->addcell($tablestyle);
4851                                 if (!$page_description){
4853                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
4855                                 } else {
4857                                         $kiriwrite_presmodule->addtext($page_description);
4859                                 }
4861                                 $kiriwrite_presmodule->endcell();
4862                                 $kiriwrite_presmodule->addcell($tablestyle);
4864                                 if (!$page_modified){
4866                                         $kiriwrite_presmodule->additalictext("No Date");
4868                                 } else {
4870                                         $kiriwrite_presmodule->addtext($page_modified);
4872                                 }
4874                                 $kiriwrite_presmodule->endcell();
4875                                 $kiriwrite_presmodule->addcell($tablestyle);
4876                                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"}  . "?mode=page&action=edit&database=" . $database_file . "&page=" . $page_filename, { Text => $kiriwrite_lang->{options}->{edit} });
4877                                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"}  . "?mode=page&action=delete&database=" . $database_file . "&page=" . $page_filename, { Text => $kiriwrite_lang->{options}->{delete} });
4878                                 $kiriwrite_presmodule->endcell();
4879                                 $kiriwrite_presmodule->endrow();
4881                                 # Increment the counter.
4883                         }
4885                 }
4887                 # Disconnect from the database server.
4889                 $kiriwrite_dbmodule->disconnect();
4891                 $kiriwrite_presmodule->endtable();
4892                 $kiriwrite_presmodule->startbox();
4893                 $kiriwrite_presmodule->addhiddendata("count", $page_count);
4894                 $kiriwrite_presmodule->endbox();
4895                 $kiriwrite_presmodule->endform();
4897                 if (!@database_pages || !$page_count){
4899                         # There were no values in the database pages array and 
4900                         # the page count had not been incremented so write a
4901                         # message saying that there were no pages in the
4902                         # database.
4904                         $kiriwrite_presmodule->clear();
4905                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagelist}, $db_name), { Style => "pageheader" });
4906                         $kiriwrite_presmodule->addlinebreak();
4907                         $kiriwrite_presmodule->addlinebreak();
4908                         $kiriwrite_presmodule->startbox("errorbox");
4909                         $kiriwrite_presmodule->enterdata($kiriwrite_lang->{pages}->{nopagesindatabase});
4910                         $kiriwrite_presmodule->endbox();
4912                 }
4914                 return $kiriwrite_presmodule->grab();
4916         }
4920 sub kiriwrite_template_add{
4921 #################################################################################
4922 # kiriwrite_template_add: Add a template to the template folder                 #
4923 #                                                                               #
4924 # Usage:                                                                        #
4925 #                                                                               #
4926 # kiriwrite_template_add(filename, name, description, layout, confirm);         #
4927 #                                                                               #
4928 # filename      The filename of the new template.                               #
4929 # name          The name of the template.                                       #
4930 # description   The description of the template.                                #
4931 # layout        The layout of the new template.                                 #
4932 # confirm       Confirm the action of creating a new template.                  #
4933 #################################################################################
4935         # Get the variables that were passed to the subroutine.
4937         my ($templatefilename, $templatename, $templatedescription, $templatelayout, $confirm) = @_;
4939         # Check if the confirm value is blank and if it is then set confirm to 0.
4941         if (!$confirm){
4943                 # The confirm value is blank, so set the value of confirm to 0.
4945                 $confirm = 0;
4947         }
4949         if ($confirm eq 1){
4951                 # Check (validate) each of the values.
4953                 kiriwrite_variablecheck($templatename, "utf8", 0, 0);
4954                 kiriwrite_variablecheck($templatedescription, "utf8", 0, 0);
4955                 kiriwrite_variablecheck($templatelayout, "utf8", 0, 0);
4957                 # Convert the values into proper UTF8 strings that can be used.
4959                 $templatename           = kiriwrite_utf8convert($templatename);
4960                 $templatedescription    = kiriwrite_utf8convert($templatedescription);
4961                 $templatelayout         = kiriwrite_utf8convert($templatelayout);
4963                 # Check the length of the converted UTF8 strings.
4965                 my $templatefilename_length_check       = kiriwrite_variablecheck($templatefilename, "maxlength", 64, 1);
4966                 my $templatename_length_check           = kiriwrite_variablecheck($templatename, "maxlength", 512, 1);
4967                 my $templatedescription_length_check    = kiriwrite_variablecheck($templatedescription, "maxlength", 512, 1);
4968                 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
4970                 if ($templatefilename_length_check eq 1){
4972                         # The template filename length is too long, so return an error.
4974                         kiriwrite_error("templatefilenametoolong");
4976                 }
4978                 if ($templatename_length_check eq 1){
4980                         # The template name length is too long, so return an error.
4982                         kiriwrite_error("templatenametoolong");
4984                 }
4987                 if ($templatedescription_length_check eq 1){
4989                         # The template description length is too long, so return an error.
4991                         kiriwrite_error("templatedescriptiontoolong");
4993                 }
4995                 # Check if the filename specified is a valid filename.
4997                 kiriwrite_variablecheck($templatefilename, "filename", "", 0);
4999                 # Connect to the template server.
5001                 $kiriwrite_dbmodule->connect();
5003                 # Connect to the template database.
5005                 $kiriwrite_dbmodule->connecttemplate(1);
5007                 # Check if any errors had occured.
5009                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5011                         # The template database has invalid permissions set so
5012                         # return an error.
5014                         kiriwrite_error("templatedatabaseinvalidpermissions");
5016                 }
5018                 $kiriwrite_dbmodule->addtemplate({ TemplateFilename => $templatefilename, TemplateName => $templatename, TemplateDescription => $templatedescription, TemplateLayout => $templatelayout });
5020                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5022                         # A database error has occured so return an error along
5023                         # with the extended error information.
5025                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5027                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5029                         # The template database has invalid permissions set so return
5030                         # an error.
5032                         kiriwrite_error("templatedatabaseinvalidpermissions");
5034                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplatePageExists"){
5036                         # The template page already exists so return an error.
5038                         kiriwrite_error("templatefilenameexists");
5040                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseUncreateable"){
5042                         # The template databases is uncreatable so return an error.
5044                         kiriwrite_error("templatedatabasenotcreated");
5046                 }
5048                 $kiriwrite_dbmodule->disconnecttemplate();
5050                 # Disconnect from the template server.
5052                 $kiriwrite_dbmodule->disconnect();
5054                 # Print out the confirmation message.
5056                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{addedtemplate}, { Style => "pageheader" });
5057                 $kiriwrite_presmodule->addlinebreak();
5058                 $kiriwrite_presmodule->addlinebreak();
5059                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{addedtemplatemessage}, $templatename));
5060                 $kiriwrite_presmodule->addlinebreak();
5061                 $kiriwrite_presmodule->addlinebreak();
5062                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5063                 return $kiriwrite_presmodule->grab();
5065         } else {
5066                 # No confirmation was made, so print out a form for adding a template.
5068                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{addtemplate}, { Style => "pageheader" });
5069                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5070                 $kiriwrite_presmodule->startbox();
5071                 $kiriwrite_presmodule->addhiddendata("mode", "template");
5072                 $kiriwrite_presmodule->addhiddendata("action", "add");
5073                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5074                 $kiriwrite_presmodule->addlinebreak();
5075                 $kiriwrite_presmodule->starttable("", { CellSpacing => 0, CellPadding => 5 });
5077                 $kiriwrite_presmodule->startheader();
5078                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
5079                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
5080                 $kiriwrite_presmodule->endheader();
5082                 $kiriwrite_presmodule->startrow();
5083                 $kiriwrite_presmodule->addcell("tablecell1");
5084                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatename});
5085                 $kiriwrite_presmodule->endcell();
5086                 $kiriwrite_presmodule->addcell("tablecell2");
5087                 $kiriwrite_presmodule->addinputbox("templatename", { Size => 64, MaxLength => 512 });
5088                 $kiriwrite_presmodule->endcell();
5089                 $kiriwrite_presmodule->endrow();
5091                 $kiriwrite_presmodule->startrow();
5092                 $kiriwrite_presmodule->addcell("tablecell1");
5093                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatedescription});
5094                 $kiriwrite_presmodule->endcell();
5095                 $kiriwrite_presmodule->addcell("tablecell2");
5096                 $kiriwrite_presmodule->addinputbox("templatedescription", { Size => 64, MaxLength => 512 });
5097                 $kiriwrite_presmodule->endcell();
5098                 $kiriwrite_presmodule->endrow();
5100                 $kiriwrite_presmodule->startrow();
5101                 $kiriwrite_presmodule->addcell("tablecell1");
5102                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatefilename});
5103                 $kiriwrite_presmodule->endcell();
5104                 $kiriwrite_presmodule->addcell("tablecell2");
5105                 $kiriwrite_presmodule->addinputbox("templatefilename", { Size => 32, MaxLength => 64 });
5106                 $kiriwrite_presmodule->endcell();
5107                 $kiriwrite_presmodule->endrow();
5109                 $kiriwrite_presmodule->startrow();
5110                 $kiriwrite_presmodule->addcell("tablecell1");
5111                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatelayout});
5112                 $kiriwrite_presmodule->endcell();
5113                 $kiriwrite_presmodule->addcell("tablecell2");
5114                 $kiriwrite_presmodule->addtextbox("templatelayout", { Columns => 50, Rows => 10 });
5115                 $kiriwrite_presmodule->addlinebreak();
5116                 $kiriwrite_presmodule->addlinebreak();
5117                 $kiriwrite_presmodule->startbox("datalist");
5118                 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
5119                 $kiriwrite_presmodule->addlinebreak();
5120                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagecontent});
5121                 $kiriwrite_presmodule->addlinebreak();
5122                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
5123                 $kiriwrite_presmodule->addlinebreak();
5124                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
5125                 $kiriwrite_presmodule->addlinebreak();
5126                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
5127                 $kiriwrite_presmodule->addlinebreak();
5128                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
5129                 $kiriwrite_presmodule->addlinebreak();
5130                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
5131                 $kiriwrite_presmodule->addlinebreak();
5132                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
5133                 $kiriwrite_presmodule->addlinebreak();
5134                 $kiriwrite_presmodule->endbox();
5135                 $kiriwrite_presmodule->endcell();
5136                 $kiriwrite_presmodule->endrow();
5137                 $kiriwrite_presmodule->endtable();
5139                 $kiriwrite_presmodule->addlinebreak();
5140                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{addtemplatebutton});
5141                 $kiriwrite_presmodule->addtext(" | ");
5142                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
5143                 $kiriwrite_presmodule->addtext(" | ");
5144                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template" , { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5146                 $kiriwrite_presmodule->endbox();
5147                 $kiriwrite_presmodule->endform();
5149                 return $kiriwrite_presmodule->grab();
5151         }
5156 sub kiriwrite_template_edit{
5157 #################################################################################
5158 # kiriwrite_template_edit: Edit a template from the template folder.            #
5159 #                                                                               #
5160 # Usage:                                                                        #
5161 #                                                                               #
5162 # kiriwrite_template_edit(filename, [newfilename], [newname], [newdescription], #
5163 #                               [templatelayout], [confirm]);                   #
5164 #                                                                               #
5165 # filename              The current filename of the template to edit.           #
5166 # newfilename           The new filename of the template to edit.               #
5167 # newname               The new name of the template being edited.              #
5168 # newdescription        The new description of the template being edited.       #
5169 # templatelayout        The modified/altered template layout.                   #
5170 # confirm               Confirms the action to edit a template and its          #
5171 #                       settings.                                               #
5172 #################################################################################
5174         # Get all the variables that have been passed to the subroutine.
5176         my ($templatefilename, $templatenewfilename, $templatenewname, $templatenewdescription, $templatelayout, $confirm) = @_;
5178         # Check if the confirm variable is blank, if it is then
5179         # set confirm to '0'
5181         if (!$confirm){
5183                 # confirm is uninitalised/blank, so set the value of confirm
5184                 # to '0'
5186                 $confirm = 0;
5188         }
5190         # Check if the template filename is blank and if it is, then return
5191         # an error.
5193         if (!$templatefilename){
5195                 kiriwrite_error("templatefilenameblank");
5197         }
5199         # Connect to the database server.
5201         $kiriwrite_dbmodule->connect();
5203         # Check if any errors occured while connecting to the database server.
5205         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5207                 # A database connection error has occured so return
5208                 # an error.
5210                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5212         }
5214         if ($confirm eq 1){
5216                 # Check certain strings to see if they UTF8 compiliant.
5218                 kiriwrite_variablecheck($templatenewname, "utf8", 0, 0);
5219                 kiriwrite_variablecheck($templatenewdescription, "utf8", 0, 0);
5220                 kiriwrite_variablecheck($templatelayout, "utf8", 0, 0);
5222                 # Convert the values into proper UTF8 strings.
5224                 $templatenewname        = kiriwrite_utf8convert($templatenewname);
5225                 $templatenewdescription = kiriwrite_utf8convert($templatenewdescription);
5226                 $templatelayout         = kiriwrite_utf8convert($templatelayout);
5228                 # Check if the filenames recieved are valid filenames.
5230                 kiriwrite_variablecheck($templatenewfilename, "maxlength", 64, 0);
5231                 kiriwrite_variablecheck($templatenewdescription, "maxlength", 512, 0);
5232                 kiriwrite_variablecheck($templatenewname, "maxlength", 512, 0);
5233                 kiriwrite_variablecheck($templatefilename, "maxlength", 64, 0);
5234                 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
5236                 kiriwrite_variablecheck($templatefilename, "filename", "", 0);
5237                 kiriwrite_variablecheck($templatenewfilename, "filename", "", 0);
5239                 # Connect to the template database.
5241                 $kiriwrite_dbmodule->connecttemplate();
5243                 # Check if any errors had occured.
5245                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5247                         # The template database has invalid permissions set so
5248                         # return an error.
5250                         kiriwrite_error("templatedatabaseinvalidpermissions");
5252                 }
5254                 # Edit the template.
5256                 $kiriwrite_dbmodule->edittemplate({ TemplateFilename => $templatefilename, NewTemplateFilename => $templatenewfilename, NewTemplateName => $templatenewname, NewTemplateDescription => $templatenewdescription, NewTemplateLayout => $templatelayout });
5258                 # Check if any error occured while editing the template.
5260                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5262                         # A database error has occured, so return an error.
5264                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5266                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5268                         # The template database has invalid permissions set so return
5269                         # an error.
5271                         kiriwrite_error("templatedatabaseinvalidpermissions");
5273                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5275                         # The template does not exist, so process the next template.
5277                         kiriwrite_error("templatedoesnotexist");
5279                 }
5281                 # Disconnect from the database server.
5283                 $kiriwrite_dbmodule->disconnect();
5285                 # Disconnect from the template database.
5287                 $kiriwrite_dbmodule->disconnecttemplate();
5289                 # Append a link so that the user can return to the templates list.
5291                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{editedtemplate}, { Style => "pageheader" });
5292                 $kiriwrite_presmodule->addlinebreak();
5293                 $kiriwrite_presmodule->addlinebreak();
5294                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{editedtemplatemessage}, $templatenewname));
5295                 $kiriwrite_presmodule->addlinebreak();
5296                 $kiriwrite_presmodule->addlinebreak();
5297                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5299         } else {
5301                 # Connect to the template database.
5303                 $kiriwrite_dbmodule->connecttemplate();
5305                 # Check if any errors had occured.
5307                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5309                         # The template database has invalid permissions set so
5310                         # return an error.
5312                         kiriwrite_error("templatedatabaseinvalidpermissions");
5314                 }
5316                 # Get the template information.
5318                 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $templatefilename });
5320                 # Check if any error occured while getting the template information.
5322                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5324                         # A database error has occured, so return an error.
5326                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5328                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5330                         # The template does not exist, so return an error.
5332                         kiriwrite_error("templatedoesnotexist");
5334                 }
5336                 # Disconnect from the template database.
5338                 $kiriwrite_dbmodule->disconnecttemplate();
5340                 # Get the values from the query results.
5342                 my $template_filename           = $template_info{"TemplateFilename"};
5343                 my $template_name               = $template_info{"TemplateName"};
5344                 my $template_description        = $template_info{"TemplateDescription"};
5345                 my $template_layout             = $template_info{"TemplateLayout"};
5346                 my $template_modified           = $template_info{"TemplateLastModified"};
5348                 # Check if the values are undefined and set them blank
5349                 # if they are.
5351                 if (!$template_name){
5352                         $template_name = "";
5353                 }
5355                 if (!$template_description){
5356                         $template_description = "";
5357                 }
5359                 if (!$template_layout){
5360                         $template_layout = "";
5361                 }
5363                 # Write out the form for editing an template with the current template 
5364                 # settings put into the correct place.
5366                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{edittemplate}, { Style => "pageheader" });
5367                 $kiriwrite_presmodule->addlinebreak();
5368                 $kiriwrite_presmodule->addlinebreak();
5369                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5370                 $kiriwrite_presmodule->startbox();
5371                 $kiriwrite_presmodule->addhiddendata("mode", "template");
5372                 $kiriwrite_presmodule->addhiddendata("action", "edit");
5373                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5374                 $kiriwrite_presmodule->addhiddendata("template", $template_filename);
5375                 $kiriwrite_presmodule->starttable("", { CellSpacing => 0, CellPadding => 5});
5377                 $kiriwrite_presmodule->startheader();
5378                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
5379                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
5380                 $kiriwrite_presmodule->endheader();
5382                 $kiriwrite_presmodule->startrow();
5383                 $kiriwrite_presmodule->addcell("tablecell1");
5384                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatename});
5385                 $kiriwrite_presmodule->endcell();
5386                 $kiriwrite_presmodule->addcell("tablecell2");
5387                 $kiriwrite_presmodule->addinputbox("newname", { Size => 64, MaxLength => 512, Value => $template_name });
5388                 $kiriwrite_presmodule->endcell();
5389                 $kiriwrite_presmodule->endrow();
5391                 $kiriwrite_presmodule->startrow();
5392                 $kiriwrite_presmodule->addcell("tablecell1");
5393                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatedescription});
5394                 $kiriwrite_presmodule->endcell();
5395                 $kiriwrite_presmodule->addcell("tablecell2");
5396                 $kiriwrite_presmodule->addinputbox("newdescription", { Size => 64, MaxLength => 512, Value => $template_description });
5397                 $kiriwrite_presmodule->endcell();
5398                 $kiriwrite_presmodule->endrow();
5400                 $kiriwrite_presmodule->startrow();
5401                 $kiriwrite_presmodule->addcell("tablecell1");
5402                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatefilename});
5403                 $kiriwrite_presmodule->endcell();
5404                 $kiriwrite_presmodule->addcell("tablecell2");
5405                 $kiriwrite_presmodule->addinputbox("newfilename", { Size => 32, MaxLength => 64, Value => $template_filename });
5406                 $kiriwrite_presmodule->endcell();
5407                 $kiriwrite_presmodule->endrow();
5409                 $kiriwrite_presmodule->startrow();
5410                 $kiriwrite_presmodule->addcell("tablecell1");
5411                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatelayout});
5412                 $kiriwrite_presmodule->endcell();
5413                 $kiriwrite_presmodule->addcell("tablecell2");
5414                 $kiriwrite_presmodule->addtextbox("newlayout", { Rows => 10, Columns => 50, Value => $template_layout});
5415                 $kiriwrite_presmodule->addlinebreak();
5416                 $kiriwrite_presmodule->addlinebreak();
5417                 $kiriwrite_presmodule->startbox("datalist");
5418                 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
5419                 $kiriwrite_presmodule->addlinebreak();
5420                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagecontent});
5421                 $kiriwrite_presmodule->addlinebreak();
5422                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
5423                 $kiriwrite_presmodule->addlinebreak();
5424                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
5425                 $kiriwrite_presmodule->addlinebreak();
5426                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
5427                 $kiriwrite_presmodule->addlinebreak();
5428                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
5429                 $kiriwrite_presmodule->addlinebreak();
5430                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
5431                 $kiriwrite_presmodule->addlinebreak();
5432                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
5433                 $kiriwrite_presmodule->addlinebreak();
5434                 $kiriwrite_presmodule->endbox();
5435                 $kiriwrite_presmodule->endcell();
5436                 $kiriwrite_presmodule->endrow();
5438                 $kiriwrite_presmodule->endtable();
5440                 $kiriwrite_presmodule->addlinebreak();
5442                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{edittemplatebutton});
5443                 $kiriwrite_presmodule->addtext(" | ");
5444                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
5445                 $kiriwrite_presmodule->addtext(" | ");
5446                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5448                 $kiriwrite_presmodule->endbox();
5449                 $kiriwrite_presmodule->endform();
5451         }
5453         # Disconnect from the database server.
5455         $kiriwrite_dbmodule->disconnect();
5457         return $kiriwrite_presmodule->grab();
5461 sub kiriwrite_template_delete{
5462 #################################################################################
5463 # kiriwrite_template_delete: Delete a template from the template folder.        #
5464 #                                                                               #
5465 # Usage:                                                                        #
5466 #                                                                               #
5467 # kiriwrite_template_delete(filename, confirm);                                 #
5468 #                                                                               #
5469 # filename      Specifies the filename of the database to delete.               #
5470 # confirm       Confirms the action to delete a template.                       #
5471 #################################################################################
5473         # Get the parameters that were passed to the subroutine.
5475         my ($template_filename, $template_confirm) = @_;
5477         if (!$template_confirm){
5478                 $template_confirm = 0;
5479         }
5481         # Check the length of the variables.
5482         kiriwrite_variablecheck($template_filename, "maxlength", 64, 0);
5483         kiriwrite_variablecheck($template_confirm, "maxlength", 1, 0);
5485         # Check if the template_name string is blank and if it is then
5486         # return an error (as the template_name string should not be
5487         # blank.
5489         if (!$template_filename){
5491                 # The template_filename string really is blank, 
5492                 # so return an error saying that an empty
5493                 # filename was passed (to the subroutine).
5495                 kiriwrite_error("templatefilenameblank");
5497         }
5499         # Check if the template_confirm string is blank and if it is, write
5500         # out a form asking the user to confirm the deletion.
5502         if ($template_confirm eq 1){
5504                 # The action to delete the template from the template database has
5505                 # been confirmed so delete the template.
5507                 # Connect to the database server.
5509                 $kiriwrite_dbmodule->connect();
5511                 # Check if any errors occured while connecting to the database server.
5513                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5515                         # A database connection error has occured so return
5516                         # an error.
5518                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5520                 }
5522                 # Check if the template database exists and the file permissions
5523                 # are valid and return an error if they aren't.
5525                 $kiriwrite_dbmodule->connecttemplate();
5527                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5529                         # The template database does not exist so write a warning
5530                         # message.
5532                         kiriwrite_error("templatedatabasemissing");
5534                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5536                         # The template database has invalid permissions set so
5537                         # return an error.
5539                         kiriwrite_error("templatedatabaseinvalidpermissions");
5541                 }
5543                 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
5545                 # Check if any error occured while getting the template information.
5547                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5549                         # A database error has occured, so return an error.
5551                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5553                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5555                         # The template does not exist, so return an error.
5557                         kiriwrite_error("templatedoesnotexist");
5559                 }
5561                 # Delete the selected template.
5563                 $kiriwrite_dbmodule->deletetemplate({ TemplateFilename => $template_filename });
5565                 # Check if any error occured while deleting the template.
5567                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5569                         # A database error has occured, so return an error.
5571                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5573                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5575                         # The template does not exist, so process the next template.
5577                         kiriwrite_error("templatedoesnotexist");
5579                 }
5581                 $kiriwrite_dbmodule->disconnecttemplate();
5583                 # Get the deleted database name.
5585                 my $database_template_name = $template_info{"TemplateName"};
5587                 # Disconnect from the database server.
5589                 $kiriwrite_dbmodule->disconnect();
5591                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{deletedtemplate}, { Style => "pageheader" });
5592                 $kiriwrite_presmodule->addlinebreak();
5593                 $kiriwrite_presmodule->addlinebreak();
5594                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{deletedtemplatemessage}, $database_template_name) );
5595                 $kiriwrite_presmodule->addlinebreak();
5596                 $kiriwrite_presmodule->addlinebreak();
5597                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5599                 return $kiriwrite_presmodule->grab();
5601         } elsif ($template_confirm eq 0) {
5603                 # The template confirm value is 0 (previously blank and then set to 0), so
5604                 # write out a form asking the user to confirm the deletion of the template.
5606                 # Connect to the database server.
5608                 $kiriwrite_dbmodule->connect();
5610                 # Check if any errors occured while connecting to the database server.
5612                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5614                         # A database connection error has occured so return
5615                         # an error.
5617                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5619                 }
5621                 # Connect to the template database.
5623                 $kiriwrite_dbmodule->connecttemplate();
5625                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5627                         # The template database does not exist so write a warning
5628                         # message.
5630                         kiriwrite_error("templatedatabasemissing");
5632                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5634                         # The template database has invalid permissions set so
5635                         # return an error.
5637                         kiriwrite_error("templatedatabaseinvalidpermissions");
5639                 }
5641                 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
5643                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5645                         # A database error has occured, so return an error.
5647                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5649                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5651                         # The template does not exist, so return an error.
5653                         kiriwrite_error("templatedoesnotexist");
5655                 }
5657                 my $template_data_filename      = $template_info{"TemplateFilename"};
5658                 my $template_data_name          = $template_info{"TemplateName"};
5660                 $kiriwrite_dbmodule->disconnecttemplate();
5662                 # Disconnect from the database server.
5664                 $kiriwrite_dbmodule->disconnect();
5666                 # Write out the confirmation form.
5668                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{deletetemplate}, { Style => "pageheader" });
5669                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5670                 $kiriwrite_presmodule->startbox();
5671                 $kiriwrite_presmodule->addhiddendata("mode", "template");
5672                 $kiriwrite_presmodule->addhiddendata("template", $template_filename);
5673                 $kiriwrite_presmodule->addhiddendata("action", "delete");
5674                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5675                 $kiriwrite_presmodule->addlinebreak();
5676                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{deletetemplatemessage}, $template_data_name, $template_data_filename));
5677                 $kiriwrite_presmodule->addlinebreak();
5678                 $kiriwrite_presmodule->addlinebreak();
5679                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{deletetemplatebutton});
5680                 $kiriwrite_presmodule->addtext(" | ");
5681                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{deletetemplatereturntolist} });
5682                 $kiriwrite_presmodule->endbox();
5683                 $kiriwrite_presmodule->endform();
5685                 return $kiriwrite_presmodule->grab();
5687         } else {
5689                         kiriwrite_error("invalidvariable");
5691         }
5695 sub kiriwrite_template_list{
5696 #################################################################################
5697 # kiriwrite_template_list: List the templates in the template folder.           #
5698 #                                                                               #
5699 # Usage:                                                                        #
5700 #                                                                               #
5701 # kiriwrite_template_list();                                                    #
5702 #################################################################################
5704         # Define certain values for later.
5706         my %template_info;
5708         my @templates_list;
5710         my $template;
5711         my $template_filename           = "";
5712         my $template_filename_list      = "";
5713         my $template_name               = "";
5714         my $template_description        = "";
5715         my $template_data               = "";
5717         my $template_count = 0;
5719         my $template_style = 0;
5720         my $template_stylename = "";
5722         my $templatewarning = "";
5724         # Connect to the database server.
5726         $kiriwrite_dbmodule->connect();
5728         # Check if any errors occured while connecting to the database server.
5730         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5732                 # A database connection error has occured so return
5733                 # an error.
5735                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5737         }
5739         # Connect to the template database.
5741         $kiriwrite_dbmodule->connecttemplate();
5743         # Check if any errors had occured.
5745         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5747                 # The template database does not exist so write a warning
5748                 # message.
5750                 $templatewarning = $kiriwrite_lang->{template}->{templatedatabasedoesnotexist};
5752         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5754                 # The template database has invalid permissions set so
5755                 # return an error.
5757                 kiriwrite_error("templatedatabaseinvalidpermissions");
5759         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5761                 # A database error occured while getting the list of
5762                 # templates so return an error with the extended
5763                 # error information.
5765                 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5767         }
5769         # Get the list of template databases.
5771         if (!$templatewarning){
5773                 @templates_list = $kiriwrite_dbmodule->gettemplatelist();
5775         }
5777         # Check if any errors had occured.
5779         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5781                 # A database error occured while getting the list
5782                 # of templates so return an error with the 
5783                 # extended error information.
5785                 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5787         }
5789         # Check if any templates are in the database and if there isn't
5790         # then write a message saying that there are no templates in the
5791         # database.
5793         if (!@templates_list && !$templatewarning){
5794                 $templatewarning = $kiriwrite_lang->{template}->{notemplatesavailable};
5795         }
5797         # Process the templates into a template list.
5799         $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{viewtemplates}, { Style => "pageheader" });
5800         $kiriwrite_presmodule->addlinebreak();
5801         $kiriwrite_presmodule->addlinebreak();
5803         if ($templatewarning){
5805                 $kiriwrite_presmodule->startbox("errorbox");
5806                 $kiriwrite_presmodule->addtext($templatewarning);
5807                 $kiriwrite_presmodule->endbox();
5809         } else {
5811                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
5812                 $kiriwrite_presmodule->startheader();
5813                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatefilename}, { Style => "tablecellheader" });
5814                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatename}, { Style => "tablecellheader" });
5815                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatedescription}, { Style => "tablecellheader" });
5816                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
5817                 $kiriwrite_presmodule->endheader();
5819                 foreach $template (@templates_list){
5821                         # Get the template data.
5823                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
5825                         # Check if any errors occured while trying to get the template
5826                         # data.
5828                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5830                                 # A database error has occured, so return an error.
5832                                 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5834                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5836                                 # The template does not exist, so process the next template.
5838                                 next;
5840                         }
5842                         $template_filename      = $template_info{"TemplateFileName"};
5843                         $template_name          = $template_info{"TemplateName"};
5844                         $template_description   = $template_info{"TemplateDescription"};
5846                         # Check what style the row of table cells should be.
5847  
5848                         if ($template_style eq 0){
5849  
5850                                 $template_stylename = "tablecell1";
5851                                 $template_style = 1;
5852  
5853                         } else {
5854  
5855                                 $template_stylename = "tablecell2";
5856                                 $template_style = 0;
5857  
5858                         }
5860                         $kiriwrite_presmodule->startrow();
5861                         $kiriwrite_presmodule->addcell($template_stylename);
5862                         $kiriwrite_presmodule->addtext($template_info{"TemplateFilename"});
5864                         # Check if the blank template value was set.
5866                         if (!$template_info{"TemplateLayout"}){
5867                                 $kiriwrite_presmodule->additalictext(" " . "[Blank Template]");
5868                         }
5870                         $kiriwrite_presmodule->endcell();
5871                         $kiriwrite_presmodule->addcell($template_stylename);
5873                         # Check if the template name is blank and if it is
5874                         # write a message to say there's no name for the
5875                         # template.
5877                         if (!$template_info{"TemplateName"}){
5878                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
5879                         } else {
5880                                 $kiriwrite_presmodule->addtext($template_info{"TemplateName"});
5881                         }
5883                         $kiriwrite_presmodule->endcell();
5884                         $kiriwrite_presmodule->addcell($template_stylename);
5886                         # Check if the template description is blank and if
5887                         # it is then write a message to say there's no
5888                         # description for the template.
5890                         if (!$template_info{"TemplateDescription"}){
5891                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
5892                         } else {
5893                                 $kiriwrite_presmodule->addtext($template_info{"TemplateDescription"});
5894                         }
5896                         $kiriwrite_presmodule->endcell();
5897                         $kiriwrite_presmodule->addcell($template_stylename);
5898                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template&action=edit&template=" . $template_info{"TemplateFilename"}, { Text => $kiriwrite_lang->{options}->{edit} });
5899                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template&action=delete&template=" . $template_info{"TemplateFilename"}, { Text => $kiriwrite_lang->{options}->{delete} });
5900                         $kiriwrite_presmodule->endcell();
5901                         $kiriwrite_presmodule->endrow();
5903                 }
5905                 $kiriwrite_presmodule->endtable();
5907         }
5909         # Disconnect from the database server.
5911         $kiriwrite_dbmodule->disconnect();
5913         $kiriwrite_dbmodule->disconnecttemplate();
5914         return $kiriwrite_presmodule->grab();
5919 sub kiriwrite_database_add{
5920 #################################################################################
5921 # kiriwrite_database_add: Creates a new database.                               #
5922 #                                                                               #
5923 # Usage:                                                                        #
5924 #                                                                               #
5925 # kiriwrite_database_add(filename, name, description, notes, categories,        #
5926 #                               [confirm]);                                     #
5927 #                                                                               #
5928 # filename      Specifies the filename for the database.                        #
5929 # name          Specifies a (friendly) name for the database.                   #
5930 # description   Specifies a description for the database.                       #
5931 # notes         Specifies the notes for the database.                           #
5932 # categories    Specifies the categories for the database.                      #
5933 # confirm       Confirms the action to create a database.                       #
5934 #################################################################################
5936         # Get the variables passed from the subroutine.
5938         my ($database_filename, $database_name, $database_description, $database_notes, $database_categories, $database_confirm) = @_;
5940         # Check if the confirm value is blank and if it is then
5941         # set the confirm value to 0.
5943         if (!$database_confirm){
5945                 # The confirm value was blank so set the value to 0.
5947                 $database_confirm = 0;
5949         }
5951         if ($database_confirm eq 1){
5953                 # The action to create a new database is confirmed.
5955                 # Validate the database name and database descriptions.
5957                 my $database_name_check_utf8            = kiriwrite_variablecheck($database_name, "utf8", 0, 0);
5958                 my $database_description_check_utf8     = kiriwrite_variablecheck($database_description, "utf8", 0, 0);
5959                 my $database_notes_check_utf8           = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
5960                 my $database_categories_check_utf8      = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
5962                 # Convert the UTF8 strings before checking the length of the strings.
5964                 $database_name                  = kiriwrite_utf8convert($database_name);
5965                 $database_description           = kiriwrite_utf8convert($database_description);
5966                 $database_notes                 = kiriwrite_utf8convert($database_notes);
5967                 $database_categories            = kiriwrite_utf8convert($database_categories);
5969                 my $database_name_check_blank           = kiriwrite_variablecheck($database_name, "blank", 0, 1);
5970                 my $database_name_check_length          = kiriwrite_variablecheck($database_name, "maxlength", 256, 1);
5971                 my $database_description_check_length   = kiriwrite_variablecheck($database_description, "maxlength", 512, 1);
5972                 my $database_filename_check_length      = kiriwrite_variablecheck($database_filename, "maxlength", 32, 1);
5973                 my $database_categories_check_length    = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
5975                 # Check if values returned contains any values that would
5976                 # result in a specific error message being returned.
5978                 if ($database_name_check_length eq 1){
5980                         # The length of the database name is too long, so return an error.
5981                         kiriwrite_error("databasenametoolong");
5983                 }
5985                 if ($database_description_check_length eq 1){
5987                         # The database description length is too long, so return an error.
5988                         kiriwrite_error("databasedescriptiontoolong");
5990                 }
5992                 if ($database_name_check_blank eq 1){
5994                         # The database name is blank, so return an error.
5995                         kiriwrite_error("databasenameblank");
5997                 }
5999                 if ($database_filename_check_length eq 1){
6001                         # The database filename is to long, so return an error.
6002                         kiriwrite_error("databasefilenametoolong");
6004                 }
6006                 if ($database_categories_check_length eq 1){
6008                         # The database categories is too long, so return an error.
6009                         kiriwrite_error("databasecategoriestoolong");
6011                 }
6013                 # Check if the database filename is blank and if it is then
6014                 # generate a filename.
6016                 if ($database_filename eq ""){
6018                         # Filename is blank so generate a file name from
6019                         # the database name.
6021                         $database_filename = kiriwrite_processfilename($database_name);
6023                 } else {
6025                         # Filename is not blank so don't generate a filename.
6027                 }
6029                 kiriwrite_variablecheck($database_filename, "filename", "", 0);
6030                 kiriwrite_variablecheck($database_filename, "maxlength", 32, 0);
6032                 # Connect to the database server.
6034                 $kiriwrite_dbmodule->connect();
6036                 # Check if any errors occured while connecting to the database server.
6038                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6040                         # A database connection error has occured so return
6041                         # an error.
6043                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6045                 }
6047                 my $database_name_final = $database_name;
6049                 # Create the database.
6051                 $kiriwrite_dbmodule->adddatabase({ DatabaseFilename => $database_filename, DatabaseName => $database_name, DatabaseDescription => $database_description, DatabaseNotes => $database_notes, DatabaseCategories => $database_categories, VersionMajor => $kiriwrite_version{"major"}, VersionMinor => $kiriwrite_version{"minor"}, VersionRevision => $kiriwrite_version{"revision"} });
6053                 # Check if any errors have occured.
6055                 if ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
6057                         # A database with the filename given already exists, so
6058                         # return an error.
6060                         kiriwrite_error("fileexists");
6062                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6064                         # A database error has occured so return an error with
6065                         # the extended error information.
6067                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6069                 }
6071                 # Disconnect from the database server.
6073                 $kiriwrite_dbmodule->disconnect();
6075                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
6076                 $kiriwrite_presmodule->addlinebreak();
6077                 $kiriwrite_presmodule->addlinebreak();
6078                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseadded} , $database_name_final));
6079                 $kiriwrite_presmodule->addlinebreak();
6080                 $kiriwrite_presmodule->addlinebreak();
6081                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6083                 return $kiriwrite_presmodule->grab();
6085         }
6087         # There is confirm value is not 1, so write a form for creating a database to
6088         # store pages in.
6090         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
6091         $kiriwrite_presmodule->addlinebreak();
6092         $kiriwrite_presmodule->addlinebreak();
6093         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6094         $kiriwrite_presmodule->startbox();      
6095         $kiriwrite_presmodule->addhiddendata("mode", "db");
6096         $kiriwrite_presmodule->addhiddendata("action", "new");
6097         $kiriwrite_presmodule->addhiddendata("confirm", "1");
6098         $kiriwrite_presmodule->endbox();
6099         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
6101         $kiriwrite_presmodule->startheader();
6102         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader"});
6103         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader"});
6104         $kiriwrite_presmodule->endheader();
6106         $kiriwrite_presmodule->startrow();
6107         $kiriwrite_presmodule->addcell("tablecell1");
6108         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
6109         $kiriwrite_presmodule->endcell();
6110         $kiriwrite_presmodule->addcell("tablecell2");
6111         $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256 });
6112         $kiriwrite_presmodule->endcell();
6113         $kiriwrite_presmodule->endrow();
6115         $kiriwrite_presmodule->startrow();
6116         $kiriwrite_presmodule->addcell("tablecell1");
6117         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
6118         $kiriwrite_presmodule->endcell();
6119         $kiriwrite_presmodule->addcell("tablecell2");
6120         $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512 });
6121         $kiriwrite_presmodule->endcell();
6122         $kiriwrite_presmodule->endrow();
6124         $kiriwrite_presmodule->startrow();
6125         $kiriwrite_presmodule->addcell("tablecell1");
6126         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
6127         $kiriwrite_presmodule->endcell();
6128         $kiriwrite_presmodule->addcell("tablecell2");
6129         $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512 });
6130         $kiriwrite_presmodule->endcell();
6131         $kiriwrite_presmodule->endrow();
6133         $kiriwrite_presmodule->startrow();
6134         $kiriwrite_presmodule->addcell("tablecell1");
6135         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
6136         $kiriwrite_presmodule->endcell();
6137         $kiriwrite_presmodule->addcell("tablecell2");
6138         $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => 50, Rows => 10, WordWrap => 0 });
6139         $kiriwrite_presmodule->endcell();
6140         $kiriwrite_presmodule->endrow();
6142         $kiriwrite_presmodule->startrow();
6143         $kiriwrite_presmodule->addcell("tablecell1");
6144         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
6145         $kiriwrite_presmodule->endcell();
6146         $kiriwrite_presmodule->addcell("tablecell2");
6147         $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32 });
6148         $kiriwrite_presmodule->startlist();
6149         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabaseautogenerate});
6150         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasenoextensions});
6151         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacterlength});
6152         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacters});
6153         $kiriwrite_presmodule->endlist();
6154         $kiriwrite_presmodule->endcell();
6155         $kiriwrite_presmodule->endrow();
6157         $kiriwrite_presmodule->endtable();
6158         $kiriwrite_presmodule->startbox();
6159         $kiriwrite_presmodule->addlinebreak();
6160         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{adddatabasebutton});
6161         $kiriwrite_presmodule->addtext("|");
6162         $kiriwrite_presmodule->addreset($kiriwrite_lang->{database}->{clearvaluesbutton});
6163         $kiriwrite_presmodule->addtext("| ");
6164         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6165         $kiriwrite_presmodule->endbox();
6166         $kiriwrite_presmodule->endform();
6168         # Exit the subroutine taking the data in the pagadata variable with it.
6170         return $kiriwrite_presmodule->grab();
6174 sub kiriwrite_database_edit{
6175 #################################################################################
6176 # kiriwrite_database_edit: Edits an database.                                   #
6177 #                                                                               #
6178 # Usage:                                                                        #
6179 #                                                                               #
6180 # kiriwrite_database_edit(filename, newfilename, newname, newdescription,       #
6181 #                               notes, categories, [confirm]);                  #
6182 #                                                                               #
6183 # filename              Specifies the filename of the database.                 #
6184 # newfilename           Specifies the new filename of the database.             #
6185 # newname               Specifies the new name of the database.                 #
6186 # newdescription        Specifies the new description of the database.          #
6187 # notes                 Specifies the new notes of the database.                #
6188 # categories            Specifies the new categories of the database.           #
6189 # confirm               Confirms the action to edit a database.                 #
6190 #################################################################################
6192         # First, get all the variables passed to the subroutine.
6194         my ($database_shortname, $database_newfilename, $database_newname, $database_newdescription, $database_notes, $database_categories, $database_confirm) = @_;
6196         # Check if the database confirm value is blank and if it is
6197         # set the confirm value to 0.
6199         if (!$database_confirm){
6201                 $database_confirm = 0;
6203         }
6205         # Check if the database filename given is valid and return an error
6206         # if it isn't.
6208         kiriwrite_variablecheck($database_shortname, "filename", "", 0);
6210         # Check if the confirm variable has a value in it, if it has, check again to make sure it really is the correct value (Perl moans
6211         # if $database_confirm was used directly).
6213         if ($database_confirm eq 1){
6215                 # Check if the new data passes the validation tests below. First, check the length of the variables.
6217                 my $database_name_check_utf8            = kiriwrite_variablecheck($database_newname, "utf8", 0, 0);
6218                 my $database_description_check_utf8     = kiriwrite_variablecheck($database_newdescription, "utf8", 0, 0);
6219                 my $database_notes_check_utf8           = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
6220                 my $database_categories_check_utf8      = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
6222                 # Convert the UTF8 strings to make sure their length is accurate.
6224                 $database_newname               = kiriwrite_utf8convert($database_newname);
6225                 $database_newdescription        = kiriwrite_utf8convert($database_newdescription);
6226                 $database_notes                 = kiriwrite_utf8convert($database_notes);
6227                 $database_categories            = kiriwrite_utf8convert($database_categories);
6229                 # Preform the following tests.
6231                 my $database_filename_check_length      = kiriwrite_variablecheck($database_newfilename, "maxlength", 32, 1);
6232                 my $database_filename_letnum            = kiriwrite_variablecheck($database_newfilename, "filename", 0, 0);
6233                 my $database_name_check_length          = kiriwrite_variablecheck($database_newname, "maxlength", 256, 1);
6234                 my $database_description_check_length   = kiriwrite_variablecheck($database_newdescription, "maxlength", 512, 1);
6235                 my $database_categories_check_length    = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
6236                 my $database_name_check_blank           = kiriwrite_variablecheck($database_newname, "blank", 0, 1);
6238                 # Check if the data is valid and return a specific error if it doesn't.
6240                 if ($database_name_check_length eq 1){
6242                         # The length of the database name is too long, so return an error.
6243                         kiriwrite_error("databasenametoolong");
6245                 }
6247                 if ($database_description_check_length eq 1){
6249                         # The database description length is too long, so return an error.
6250                         kiriwrite_error("databasedescriptiontoolong");
6252                 }
6254                 if ($database_name_check_blank eq 1){
6256                         # The database name is blank, so return an error.
6257                         kiriwrite_error("databasenameblank");
6259                 }
6261                 if ($database_filename_check_length eq 1){
6263                         # The database filename is too long, so return an error.
6264                         kiriwrite_error("databasefilenametoolong");
6266                 }
6268                 if ($database_categories_check_length eq 1){
6270                         # The database categories is too long, so return an error.
6271                         kiriwrite_error("databasecategoriestoolong");
6273                 }
6275                 # Connect to the database server.
6277                 $kiriwrite_dbmodule->connect();
6279                 # Check if any errors occured while connecting to the database server.
6281                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6283                         # A database connection error has occured so return
6284                         # an error.
6286                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6288                 }
6290                 # Get the database.
6292                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
6294                 # Check if any errors had occured while selecting the database.
6296                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6298                         # The database does not exist, so return an error.
6300                         kiriwrite_error("databasemissingfile");
6302                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6304                         # The database has invalid permissions set, so return
6305                         # an error.
6307                         kiriwrite_error("databaseinvalidpermissions");
6309                 }
6311                 # FIX THIS!! >O
6313                 $kiriwrite_dbmodule->editdatabase({ DatabaseNewFilename => $database_newfilename, DatabaseName => $database_newname , DatabaseDescription => $database_newdescription , DatabaseNotes => $database_notes, DatabaseCategories => $database_categories });
6315                 # Check if any errors had occured while using the database.
6317                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6319                         # The database does not exist, so return an error.
6321                         kiriwrite_error("databasemissingfile");
6323                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6325                         # The database has invalid permissions set, so return
6326                         # an error.
6328                         kiriwrite_error("databaseinvalidpermissions");
6330                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
6332                         # The database directory has invalid permissions set, so
6333                         # return an error.
6335                         kiriwrite_error("datadirectoryinvalidpermissions");
6337                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
6339                         # A database already exists with the new filename, so
6340                         # return an error.
6342                         kiriwrite_error("databasealreadyexists");
6344                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6346                         # A database error has occured so return an error with
6347                         # the extended error information.
6349                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6351                 }
6353                 # Disconnect from the server.
6355                 $kiriwrite_dbmodule->disconnect();
6357                 # Write out a message saying that the database has been updated.
6359                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{editeddatabase}, { Style => "pageheader" } );
6360                 $kiriwrite_presmodule->addlinebreak();
6361                 $kiriwrite_presmodule->addlinebreak();
6362                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseupdated}, $database_newname));
6363                 $kiriwrite_presmodule->addlinebreak();
6364                 $kiriwrite_presmodule->addlinebreak();
6365                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6367                 return $kiriwrite_presmodule->grab();
6369         } else {
6371                 my (%database_info);
6373                 # Check if the database filename given is valid and return an error
6374                 # if it isn't.
6376                 # Connect to the database server.
6378                 $kiriwrite_dbmodule->connect();
6380                 # Check if any errors occured while connecting to the database server.
6382                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6384                         # A database connection error has occured so return
6385                         # an error.
6387                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6389                 }
6391                 # Select the database.
6393                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
6395                 # Check if any errors had occured while setting the database.
6397                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6399                         # The database does not exist, so return an error.
6401                         kiriwrite_error("databasemissingfile");
6403                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6405                         # The database has invalid permissions set, so return
6406                         # an error.
6408                         kiriwrite_error("databaseinvalidpermissions");
6410                 }
6412                 # Get the database information.
6414                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6416                 # Check if any errors had occured while getting the database
6417                 # information.
6419                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6421                         # A database error has occured so return an error and
6422                         # also the extended error information.
6424                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6426                 }
6428                 # Get the values needed from the kiriwrite_database_info table.
6430                 my $database_oldname            = $database_info{"DatabaseName"};
6431                 my $database_olddescription     = $database_info{"Description"};
6432                 my $database_notes              = $database_info{"Notes"};
6433                 my $database_categories         = $database_info{"Categories"};
6435                 # Disconnect from the database server.
6437                 $kiriwrite_dbmodule->disconnect();
6439                 # Print out the form for editing a database's settings.
6441                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{editdatabase}, $database_oldname), { Style => "pageheader" });
6442                 $kiriwrite_presmodule->addlinebreak();
6443                 $kiriwrite_presmodule->addlinebreak();
6444                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6445                 $kiriwrite_presmodule->startbox();
6446                 $kiriwrite_presmodule->addhiddendata("mode", "db");
6447                 $kiriwrite_presmodule->addhiddendata("action", "edit");
6448                 $kiriwrite_presmodule->addhiddendata("database", $database_shortname);
6449                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
6450                 $kiriwrite_presmodule->endbox();
6452                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
6453                 $kiriwrite_presmodule->startheader();
6454                 $kiriwrite_presmodule->addheader("Setting", { Style => "tablecellheader" });
6455                 $kiriwrite_presmodule->addheader("Value", { Style => "tablecellheader" });
6456                 $kiriwrite_presmodule->endheader();
6458                 $kiriwrite_presmodule->startrow();
6459                 $kiriwrite_presmodule->addcell("tablecell1");
6460                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
6461                 $kiriwrite_presmodule->endcell();
6462                 $kiriwrite_presmodule->addcell("tablecell2");
6463                 $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256, Value => $database_oldname } );
6464                 $kiriwrite_presmodule->endcell();
6465                 $kiriwrite_presmodule->endrow();
6467                 $kiriwrite_presmodule->startrow();
6468                 $kiriwrite_presmodule->addcell("tablecell1");
6469                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
6470                 $kiriwrite_presmodule->endcell();
6471                 $kiriwrite_presmodule->addcell("tablecell2");
6472                 $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512, Value => $database_olddescription } );
6473                 $kiriwrite_presmodule->endcell();
6474                 $kiriwrite_presmodule->endrow();
6476                 $kiriwrite_presmodule->startrow();
6477                 $kiriwrite_presmodule->addcell("tablecell1");
6478                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
6479                 $kiriwrite_presmodule->endcell();
6480                 $kiriwrite_presmodule->addcell("tablecell2");
6481                 $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512, Value => $database_categories } );
6482                 $kiriwrite_presmodule->endcell();
6483                 $kiriwrite_presmodule->endrow();
6485                 $kiriwrite_presmodule->startrow();
6486                 $kiriwrite_presmodule->addcell("tablecell1");
6487                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
6488                 $kiriwrite_presmodule->endcell();
6489                 $kiriwrite_presmodule->addcell("tablecell2");
6490                 $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => 50, Rows => 10, Value => $database_notes } );
6491                 $kiriwrite_presmodule->endcell();
6492                 $kiriwrite_presmodule->endrow();
6494                 $kiriwrite_presmodule->startrow();
6495                 $kiriwrite_presmodule->addcell("tablecell1");
6496                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
6497                 $kiriwrite_presmodule->endcell();
6498                 $kiriwrite_presmodule->addcell("tablecell2");
6499                 $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32, Value => $database_shortname } );
6500                 $kiriwrite_presmodule->endcell();
6501                 $kiriwrite_presmodule->endrow();
6503                 $kiriwrite_presmodule->endtable();
6505                 $kiriwrite_presmodule->startbox();
6506                 $kiriwrite_presmodule->addlinebreak();
6507                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{editdatabasebutton});
6508                 $kiriwrite_presmodule->addtext(" | ");
6509                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
6510                 $kiriwrite_presmodule->addtext(" | ");
6511                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6512                 $kiriwrite_presmodule->endbox();
6513                 $kiriwrite_presmodule->endform();
6515                 return $kiriwrite_presmodule->grab();
6517         }
6519         # The interpreter should not be here. So return an error saying invalid variable.
6521         kiriwrite_error("invalidvariable");
6525 sub kiriwrite_database_delete{
6526 #################################################################################
6527 # kiriwrite_database_delete: Deletes an database.                               #
6528 #                                                                               #
6529 # Usage:                                                                        #
6530 #                                                                               #
6531 # kiriwrite_database_delete(filename, [confirm]);                               #
6532 #                                                                               #
6533 # filename      Specifies the filename for the database to be deleted.          #
6534 # confirm       Confirms the action to delete a database.                       #
6535 #################################################################################
6537         my ($database_filename, $database_confirm) = @_;
6539         # Check if the confirm value is blank and if it is then set the
6540         # confirm value to 0.
6542         if (!$database_confirm){
6544                 $database_confirm = 0;
6546         }
6548         # Connect to the database server.
6550         $kiriwrite_dbmodule->connect();
6552         # Check if any errors occured while connecting to the database server.
6554         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6556                 # A database connection error has occured so return
6557                 # an error.
6559                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6561         }
6563         # Check if the database filename given is valid and return an error
6564         # if it isn't.
6566         kiriwrite_variablecheck($database_filename, "filename", "", 0);
6568         # Check if the request to delete a database has been confirmed. If it has, 
6569         # then delete the database itself.
6571         if ($database_confirm eq 1){
6572                 # There is a value in the confirm variable of the HTTP query.
6574                 # Select the database to delete and get the database name.
6576                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
6578                 # Check if any error occured while selecting the database.
6580                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6582                         # The database does not exist so return an error.
6584                         kiriwrite_error("databasemissingfile");
6586                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6588                         # The database has invalid permissions set so return
6589                         # an error.
6591                         kiriwrite_error("databaseinvalidpermissions");
6593                 }
6595                 my %database_info       = $kiriwrite_dbmodule->getdatabaseinfo();
6597                 # Check if any errors have occured while getting the database
6598                 # name.
6600                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6602                         # A database error has occured so return an error with
6603                         # the extended error information.
6605                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6607                 }
6609                 my $database_name = $database_info{"DatabaseName"};
6611                 # Delete the selected database.
6613                 $kiriwrite_dbmodule->deletedatabase({ DatabaseName => $database_filename });
6615                 # Check if any error occured while deleting the database.
6617                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6619                         # The database does not exist so return an error.
6621                         kiriwrite_error("databasemissingfile");
6623                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6625                         # The database has invalid permissions set so return
6626                         # an error.
6628                         kiriwrite_error("databaseinvalidpermissions");
6630                 }
6632                 # Disconnect from the database server.
6634                 $kiriwrite_dbmodule->disconnect();
6636                 # Write a message saying that the database has been deleted.
6638                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deleteddatabase}, { Style => "pageheader" });
6639                 $kiriwrite_presmodule->addlinebreak();
6640                 $kiriwrite_presmodule->addlinebreak();
6641                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deleteddatabasemessage}, $database_name));
6642                 $kiriwrite_presmodule->addlinebreak();
6643                 $kiriwrite_presmodule->addlinebreak();
6644                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} }); 
6646                 return $kiriwrite_presmodule->grab();
6648         }
6650         # The action has not been confirmed, so write out a form asking the 
6651         # user to confirm.
6653         # Get the database name.
6655         $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
6657         # Check if any error occured while selecting the database.
6659         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6661                 # The database does not exist so return an error.
6663                 kiriwrite_error("databasemissingfile");
6665         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6667                 # The database has invalid permissions set so return
6668                 # an error.
6670                 kiriwrite_error("databaseinvalidpermissions");
6673         }
6675         # Check if any errors have occured.
6677         my %database_info       = $kiriwrite_dbmodule->getdatabaseinfo();
6679         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6681                 # A database error has occured so return an error with
6682                 # the extended error information.
6684                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6686         }
6688         my $database_name = $database_info{"DatabaseName"};
6690         # Disconnect from the database server.
6692         $kiriwrite_dbmodule->disconnect();
6694         # Write out the form to ask the user to confirm the deletion of the 
6695         # selected database.
6697         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deletedatabase}, { Style => "pageheader" });
6698         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6699         $kiriwrite_presmodule->startbox();
6700         $kiriwrite_presmodule->addhiddendata("mode", "db");
6701         $kiriwrite_presmodule->addhiddendata("action", "delete");
6702         $kiriwrite_presmodule->addhiddendata("database", $database_filename);
6703         $kiriwrite_presmodule->addhiddendata("confirm", "1");
6704         $kiriwrite_presmodule->addlinebreak();
6705         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deletedatabasemessage}, $database_name));
6706         $kiriwrite_presmodule->addlinebreak();
6707         $kiriwrite_presmodule->addlinebreak();
6708         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{deletedatabasebutton});
6709         $kiriwrite_presmodule->addtext(" | ");
6710         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{deletedatabasereturn} });
6711         $kiriwrite_presmodule->endbox();
6712         $kiriwrite_presmodule->endform();
6714         return $kiriwrite_presmodule->grab();
6718 sub kiriwrite_database_list{
6719 #################################################################################
6720 # kiriwrite_database_list: Lists the databases available.                       #
6721 #                                                                               #
6722 # Usage:                                                                        #
6723 #                                                                               #
6724 # kiriwrite_database_list();                                                    #
6725 #################################################################################
6727         # Connect to the database server.
6729         $kiriwrite_dbmodule->connect();
6731         # Check if any errors occured while connecting to the database server.
6733         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6735                 # A database connection error has occured so return
6736                 # an error.
6738                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6740         }
6742         # Get the list of available databases and process any errors that
6743         # might have occured.
6745         my @database_list = $kiriwrite_dbmodule->getdblist();
6747         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
6749                 # The database directory is missing so return an error.
6751                 kiriwrite_error("datadirectorymissing");
6753         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
6755                 # The database directory has invalid permissions set so return
6756                 # an error.
6758                 kiriwrite_error("datadirectoryinvalidpermissions");
6760         }
6762         # Declare the following variables that are going to be used before using 
6763         # the foreach function.
6765         my ($database_info, %database_info);
6766         my @error_list;
6767         my @permissions_list;
6768         my $database_count = 0;
6769         my $database_filename = "";
6770         my $database_filename_friendly = "";
6771         my $database_filename_length = 0;
6772         my $database_name = "";
6773         my $database_description = "";
6774         my $database_permissions = "";
6775         my $nodescription = 0;
6776         my $noname = 0;
6777         my $data_file = "";
6778         my $table_style = 0;
6779         my $table_style_name = "";
6781         # Begin creating the table for the list of databases.
6783         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
6784         $kiriwrite_presmodule->addlinebreak();
6785         $kiriwrite_presmodule->addlinebreak();
6786         $kiriwrite_presmodule->starttable("", { CellPadding => "5", CellSpacing => "0" });
6787         $kiriwrite_presmodule->startheader();
6788         $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
6789         $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
6790         $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databaseoptions}, { Style => "tablecellheader" });
6791         $kiriwrite_presmodule->endheader();
6793         foreach $data_file (@database_list){
6795                 # Select the database.
6797                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
6799                 # Check if any error occured while selecting the database.
6801                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6803                         # The database does not exist, so process the next
6804                         # database.
6806                         next;
6808                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6810                         # The database has invalid permissions settings, so
6811                         # add the database to the list of databases with
6812                         # invalid permissions set and process the next
6813                         # database.
6815                         push(@permissions_list, $data_file);
6816                         next;
6818                 }
6820                 # Get information about the database.
6822                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6824                 # Check if any error occured while getting information from the
6825                 # database.
6827                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6829                         # A database error has occured, add the database and specific
6830                         # error message to the list of databases with errors and
6831                         # process the next database.
6833                         push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
6834                         next;
6836                 }
6838                 $database_name          = $database_info{"DatabaseName"};
6839                 $database_description   = $database_info{"Description"};
6841                 # Check the style to be used with.
6843                 if ($table_style eq 0){
6845                         # Use the first style and set the style value
6846                         # to use the next style, the next time the
6847                         # if statement is checked.
6849                         $table_style_name = "tablecell1";
6850                         $table_style = 1;
6851                 } else {
6853                         # Use the second style and set the style
6854                         # value to use the first style, the next
6855                         # time if statement is checked.
6857                         $table_style_name = "tablecell2";
6858                         $table_style = 0;
6859                 }
6861                 # Create a friendly name for the database.
6863                 $database_filename_friendly = $data_file;
6865                 # Append the database information to the table.
6867                 $kiriwrite_presmodule->startrow();
6868                 $kiriwrite_presmodule->addcell($table_style_name);
6870                 if (!$database_name){
6871                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
6872                 } else {
6873                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_filename_friendly, { Text => $database_name });
6874                 }
6876                 $kiriwrite_presmodule->endcell();
6877                 $kiriwrite_presmodule->addcell($table_style_name);
6879                 if (!$database_description){
6880                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
6881                 } else {
6882                         $kiriwrite_presmodule->addtext($database_description);
6883                 }
6885                 $kiriwrite_presmodule->endcell();
6886                 $kiriwrite_presmodule->addcell($table_style_name);
6887                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=edit&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{edit} });
6888                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=compile&type=single&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{compile} });
6889                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=delete&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{delete} });
6890                 $kiriwrite_presmodule->endrow();
6892                 $database_count++;
6893                 $nodescription = 0;
6894                 $noname = 0;
6896         }
6898         $kiriwrite_presmodule->endtable();
6900         # Disconnect from the database server.
6902         $kiriwrite_dbmodule->disconnect();
6904         # Check if there are no valid databases are if there is no
6905         # valid databases then write a message saying that no
6906         # valid databases are available.
6908         if ($database_count eq 0){
6910                 $kiriwrite_presmodule->clear();
6911                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
6912                 $kiriwrite_presmodule->addlinebreak();
6913                 $kiriwrite_presmodule->addlinebreak();
6914                 $kiriwrite_presmodule->startbox("errorbox");
6915                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{nodatabasesavailable});
6916                 $kiriwrite_presmodule->endbox();
6918         }
6920         # Check if any databases with problems have appeared and if they
6921         # have, print out a message saying which databases have problems.
6923         if (@permissions_list){
6925                 $kiriwrite_presmodule->addlinebreak();
6926                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
6927                 $kiriwrite_presmodule->addlinebreak();
6928                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
6929                 $kiriwrite_presmodule->addlinebreak();
6931                 foreach $data_file (@permissions_list){
6932                         $kiriwrite_presmodule->addlinebreak();
6933                         $kiriwrite_presmodule->addtext($data_file);
6934                 }
6936                 $kiriwrite_presmodule->addlinebreak();
6938         }
6940         if (@error_list){
6942                 $kiriwrite_presmodule->addlinebreak();
6943                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
6944                 $kiriwrite_presmodule->addlinebreak();
6945                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
6946                 $kiriwrite_presmodule->addlinebreak();
6948                 foreach $data_file (@error_list){
6949                         $kiriwrite_presmodule->addlinebreak();
6950                         $kiriwrite_presmodule->addtext($data_file);
6951                 }
6953                 $kiriwrite_presmodule->addlinebreak();
6955         }
6957         return $kiriwrite_presmodule->grab();   # Return to the main part of the script with the processed information.
6962 sub kiriwrite_filter_list{
6963 #################################################################################
6964 # kiriwrite_filter_list: Lists the filters that will be used when compiling a   #
6965 # webpage.                                                                      #
6966 #                                                                               #
6967 # Usage:                                                                        #
6968 #                                                                               #
6969 # kiriwrite_filter_list();                                                      #
6970 #################################################################################
6972         my $filtersdb_notexist = 0;
6974         # Connect to the database server.
6976         $kiriwrite_dbmodule->connect();
6978         # Check if any errors occured while connecting to the database server.
6980         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6982                 # A database connection error has occured so return
6983                 # an error.
6985                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6987         }
6989         # Connect to the filter database.
6991         $kiriwrite_dbmodule->connectfilter();
6993         # Check if any error has occured while connecting to the filter
6994         # database.
6996         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
6998                 # The filter database does not exist.
7000                 $filtersdb_notexist = 1;
7002         } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7004                 # The filter database has invalid permissions set so return
7005                 # an error.
7007                 kiriwrite_error("filtersdbpermissions");
7009         } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7011                 # A database error has occured with the filter database.
7013                 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7015         }
7017         # Define some variables required for processing the filters list.
7019         my %filter_list;
7020         my %filter_info;
7021         my @database_filters;
7022         my $blankfindfilter = 0;
7023         my $filterswarning = "";
7024         my $filter;
7025         my $filter_count = 0;
7026         my $filter_style = 0;
7027         my $filter_style_name = "";
7029         tie(%filter_list, 'Tie::IxHash');
7031         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{viewfilters}, { Style => "pageheader" });
7032         $kiriwrite_presmodule->addlinebreak();
7033         $kiriwrite_presmodule->addlinebreak();
7035         # If the filter database exists then get the list of filters,
7036         # otherwise write a message saying that the filter database
7037         # does not exist and will be created when a filter is added.
7039         if ($filtersdb_notexist eq 0){
7041                 # Get the list of available filters.
7043                 @database_filters       = $kiriwrite_dbmodule->getfilterlist();
7045                 # Check if any errors occured while getting the list of filters.
7047                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7049                         # A database error has occured with the filter database.
7051                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7053                 }
7055                 # Process each filter getting the priority, find setting and
7056                 # replace setting.
7058                 foreach $filter (@database_filters){
7060                         # Get the information about the filter.
7062                         %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
7064                         # Check if any errors occured while getting the filter information.
7066                         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7068                                 # A database error occured while using the filter database.
7070                                 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7072                         } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7074                                 # The filter does not exist so process the next filter.
7076                                 next;
7078                         }
7080                         # Check if the find filter is blank.
7082                         if (!$filter_info{"FilterFind"}){
7084                                 # The find filter is blank, so set the value to write a warning
7085                                 # message saying that a find filter given is blank.
7087                                 $blankfindfilter = 1;
7089                         }
7091                         $filter_list{$filter_count}{ID}         = $filter_info{"FilterID"};
7092                         $filter_list{$filter_count}{Priority}   = $filter_info{"FilterPriority"};
7093                         $filter_list{$filter_count}{Find}       = $filter_info{"FilterFind"};
7094                         $filter_list{$filter_count}{Replace}    = $filter_info{"FilterReplace"};
7095                         $filter_list{$filter_count}{Notes}      = $filter_info{"FilterNotes"};
7097                         $filter_count++;
7099                 }
7101                 # Check if there are filters in the filter database and
7102                 # write a message if there isn't.
7104                 if ($filter_count eq 0){
7106                         # There are no filters in the filter database.
7108                         $filterswarning = $kiriwrite_lang->{filter}->{nofiltersavailable};
7110                 }
7112         }
7114         # Check if the database wasn't found and if it
7115         # wasn't then write a message saying that the
7116         # database will be created when a filter is
7117         # added.
7119         if ($filtersdb_notexist eq 1){
7121                 # The filter database doesn't exist so write
7122                 # a message.
7124                 $filterswarning = $kiriwrite_lang->{filter}->{filterdatabasedoesnotexist};
7127         }
7129         # Check if there is a warning message and if
7130         # there is then write that warning message
7131         # else write the list of filters.
7133         if ($filterswarning){
7135                 $kiriwrite_presmodule->startbox("errorbox");
7136                 $kiriwrite_presmodule->addtext($filterswarning);
7137                 $kiriwrite_presmodule->endbox();
7139         } else {
7141                 # The filter database exists so write out the
7142                 # list of filters.
7144                 if ($blankfindfilter eq 1){
7146                         $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{filter}->{warningtitle});
7147                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{blankfindfilters});
7148                         $kiriwrite_presmodule->addtext();
7149                         $kiriwrite_presmodule->addlinebreak();
7150                         $kiriwrite_presmodule->addlinebreak();
7152                 }
7154                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7156                 $kiriwrite_presmodule->startheader();
7157                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{priority}, { Style => "tablecellheader" });
7158                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{findsetting}, { Style => "tablecellheader" });
7159                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{replacesetting}, { Style => "tablecellheader" });
7160                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
7161                 $kiriwrite_presmodule->endheader();
7163                 foreach $filter (keys %filter_list){
7165                         # Check which style should be used.
7167                         if ($filter_style eq 0){
7169                                 $filter_style_name = "tablecell1";
7170                                 $filter_style = 1;
7172                         } else {
7174                                 $filter_style_name = "tablecell2";
7175                                 $filter_style = 0;
7177                         }
7179                         $kiriwrite_presmodule->startrow();
7180                         $kiriwrite_presmodule->addcell($filter_style_name);
7181                         $kiriwrite_presmodule->addtext($filter_list{$filter}{Priority});
7182                         $kiriwrite_presmodule->endcell();
7183                         $kiriwrite_presmodule->addcell($filter_style_name);
7185                         # Check if the find filter is blank.
7187                         if (!$filter_list{$filter}{Find}){
7189                                 # The find filter is blank.
7191                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{filter}->{blankfindsetting});
7193                         } else {
7195                                 # The find filter is not blank.
7197                                 $kiriwrite_presmodule->addtext($filter_list{$filter}{Find});
7199                         }
7201                         $kiriwrite_presmodule->endcell();
7202                         $kiriwrite_presmodule->addcell($filter_style_name);
7204                         # Check if the replace filter is blank.
7206                         if (!$filter_list{$filter}{Replace}){
7208                                 # The replace filter is blank.
7210                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{filter}->{blankreplacesetting});
7212                         } else {
7214                                 # The replace filter is not blank.
7216                                 $kiriwrite_presmodule->addtext($filter_list{$filter}{Replace});
7218                         }
7220                         $kiriwrite_presmodule->endcell();
7221                         $kiriwrite_presmodule->addcell($filter_style_name);
7222                         $kiriwrite_presmodule->addlink("?mode=filter&action=edit&filter=" . $filter_list{$filter}{ID}, { Text => $kiriwrite_lang->{options}->{edit} });
7223                         $kiriwrite_presmodule->addlink("?mode=filter&action=delete&filter=" . $filter_list{$filter}{ID}, { Text => $kiriwrite_lang->{options}->{delete} });
7224                         $kiriwrite_presmodule->endcell();
7225                         $kiriwrite_presmodule->endrow();
7227                 }
7229                 $kiriwrite_presmodule->endtable();
7231         }
7233         # Disconnect from the filter database.
7235         $kiriwrite_dbmodule->disconnectfilter();
7237         # Disconnect from the database server.
7239         $kiriwrite_dbmodule->disconnect();
7241         return $kiriwrite_presmodule->grab();
7245 sub kiriwrite_filter_add{
7246 #################################################################################
7247 # kiriwrite_filter_add: Adds a filter to the filter list.                       #
7248 #                                                                               #
7249 # Usage:                                                                        #
7250 #                                                                               #
7251 # kiriwrite_filter_add(filterfind, filterreplace, filterpriority,               #
7252 #                       filternotes, [confirm]);                                #
7253 #                                                                               #
7254 # filterfind            Specifies the new word(s) to find.                      #
7255 # filterreplace         Specifies the new word(s) to replace.                   #
7256 # filterpriority        Specifies the new priority to use.                      #
7257 # filternotes           Specifies the new notes to use.                         #
7258 # confirm               Confirms the action to add a filter.                    #
7259 #################################################################################
7261         # Get the values that have been passed to the subroutine.
7263         my ($filter_new_find, $filter_new_replace, $filter_new_priority, $filter_new_notes, $confirm) = @_;
7265         # Check the confirm value to make sure it is no more than
7266         # one character long.
7268         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
7270         if (!$confirm){
7272                 # The confirm value is undefined, so set the
7273                 # value of the confirm integer to '0'.
7275                 $confirm = 0;
7277         }
7279         if ($confirm eq 1){
7281                 # The confirm integer is '1', so add the word
7282                 # to the filter list.
7284                 # First, check the variables recieved are UTF8
7285                 # copliant.
7287                 kiriwrite_variablecheck($filter_new_find, "utf8", 0, 0);
7288                 kiriwrite_variablecheck($filter_new_replace, "utf8", 0, 0);
7289                 kiriwrite_variablecheck($filter_new_priority, "utf8", 0, 0);
7290                 kiriwrite_variablecheck($filter_new_notes, "utf8", 0, 0);
7292                 # Convert the UTF8 values so that the length can
7293                 # checked properly.
7295                 $filter_new_find        = kiriwrite_utf8convert($filter_new_find);
7296                 $filter_new_replace     = kiriwrite_utf8convert($filter_new_replace);
7297                 $filter_new_priority    = kiriwrite_utf8convert($filter_new_priority);
7298                 $filter_new_notes       = kiriwrite_utf8convert($filter_new_notes);
7300                 # Check if the find filter is blank and return an error
7301                 # if it is.
7303                 if (!$filter_new_find){
7305                         # The find filter given is blank so return an
7306                         # error.
7308                         kiriwrite_error("blankfindfilter");
7310                 }
7312                 if (!$filter_new_priority){
7314                         # The filter priority is blank so set it
7315                         # to 1.
7317                         $filter_new_priority = 1;
7319                 }
7321                 # Check the length and contents of the values given
7322                 # to make sure they are valid.
7324                 my $filterfind_maxlength_check          = kiriwrite_variablecheck($filter_new_find, "maxlength", 1024, 1);
7325                 my $filterreplace_maxlength_check       = kiriwrite_variablecheck($filter_new_replace, "maxlength", 1024, 1);
7326                 my $filterpriority_maxlength_check      = kiriwrite_variablecheck($filter_new_priority, "maxlength", 5, 1);
7327                 my $filterpriority_numbers_check        = kiriwrite_variablecheck($filter_new_priority, "numbers", 0, 1);
7329                 # Check if the result of the tests to see if they
7330                 # are valid.
7332                 if ($filterfind_maxlength_check eq 1){
7334                         # The find filter is too long, so return
7335                         # an error.
7337                         kiriwrite_error("findfiltertoolong");
7339                 }
7341                 if ($filterreplace_maxlength_check eq 1){
7343                         # The replace filter is too long, so
7344                         # return an error.
7346                         kiriwrite_error("replacefiltertoolong");
7348                 }
7350                 if ($filterpriority_maxlength_check eq 1){
7352                         # The length of the filter priority
7353                         # given is too long, so return an
7354                         # error.
7356                         kiriwrite_error("filterprioritytoolong");
7358                 }
7360                 if ($filterpriority_numbers_check eq 1){
7362                         # The priority of the filter given
7363                         # contains characters other than
7364                         # numbers.
7366                         kiriwrite_error("filterpriorityinvalidchars");
7368                 }
7370                 # Check if the filter priority is less than 1
7371                 # and more than 10000 and return an error
7372                 # if it is.
7374                 if ($filter_new_priority < 1 || $filter_new_priority > 50000){
7376                         # The filter priority is less than 1 and
7377                         # more than 10000, so return an error.
7379                         kiriwrite_error("filterpriorityinvalid");
7381                 }
7383                 # Connect to the database server.
7385                 $kiriwrite_dbmodule->connect();
7387                 # Check if any errors occured while connecting to the database server.
7389                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7391                         # A database connection error has occured so return
7392                         # an error.
7394                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7396                 }
7398                 # Connect to the filter database.
7400                 $kiriwrite_dbmodule->connectfilter(1);
7402                 # Check if any error has occured while connecting to the filter
7403                 # database.
7405                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7407                         # The filter database does not exist.
7409                         kiriwrite_error("filtersdbmissing");
7411                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7413                         # The filter database has invalid permissions set so return
7414                         # an error.
7416                         kiriwrite_error("filtersdbpermissions");
7418                 }
7420                 # Add the filter to the filter database.
7422                 $kiriwrite_dbmodule->addfilter({ FindFilter => $filter_new_find, ReplaceFilter => $filter_new_replace, Priority => $filter_new_priority, Notes => $filter_new_notes});
7424                 # Check if any errors have occured while adding the filter.
7426                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7428                         # The filter database has invalid permissions set so return
7429                         # an error.
7431                         kiriwrite_error("filtersdbpermissions");
7433                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseUncreatable"){
7435                         # The filter database is uncreatable so return an error.
7437                         kiriwrite_error("filterdatabase");
7439                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7441                         # A database error with the filter database has occured so return
7442                         # an error with the extended error information.
7444                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7446                 }
7448                 # Disconnect from the filter database.
7450                 $kiriwrite_dbmodule->disconnectfilter();
7452                 # Disconnect from the database server.
7454                 $kiriwrite_dbmodule->disconnect();
7456                 # Write out a message saying that the filter was added to the
7457                 # filter database.
7459                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{filteradded}, { Style => "pageheader" });
7460                 $kiriwrite_presmodule->addlinebreak();
7461                 $kiriwrite_presmodule->addlinebreak();
7462                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{filteraddedmessage});
7463                 $kiriwrite_presmodule->addlinebreak();
7464                 $kiriwrite_presmodule->addlinebreak();
7465                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7467                 return $kiriwrite_presmodule->grab();
7469         } elsif ($confirm ne 0) {
7471                 # The confirm integer is another value (which
7472                 # it shouldn't be) so return an error.
7474                 kiriwrite_error("invalidvalue");
7476         }
7478         # The confirm integer was blank so print out a form
7479         # for adding a new filter.
7481         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{addfilter}, { Style => "pageheader" });
7482         $kiriwrite_presmodule->addlinebreak();
7483         $kiriwrite_presmodule->addlinebreak();
7484         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
7485         $kiriwrite_presmodule->startbox();
7486         $kiriwrite_presmodule->addhiddendata("mode", "filter");
7487         $kiriwrite_presmodule->addhiddendata("action", "add");
7488         $kiriwrite_presmodule->addhiddendata("confirm", 1);
7489         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7491         $kiriwrite_presmodule->startheader();
7492         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
7493         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
7494         $kiriwrite_presmodule->endheader();
7496         $kiriwrite_presmodule->startrow();
7497         $kiriwrite_presmodule->addcell("tablecell1");
7498         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
7499         $kiriwrite_presmodule->endcell();
7500         $kiriwrite_presmodule->addcell("tablecell2");
7501         $kiriwrite_presmodule->addinputbox("findword", { Size => 64, MaxLength => 1024 });
7502         $kiriwrite_presmodule->endcell();
7503         $kiriwrite_presmodule->endrow();
7505         $kiriwrite_presmodule->startrow();
7506         $kiriwrite_presmodule->addcell("tablecell1");
7507         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{replacefilter});
7508         $kiriwrite_presmodule->endcell();
7509         $kiriwrite_presmodule->addcell("tablecell2");
7510         $kiriwrite_presmodule->addinputbox("replaceword", { Size => 64, MaxLength => 1024 });
7511         $kiriwrite_presmodule->endcell();
7512         $kiriwrite_presmodule->endrow();
7514         $kiriwrite_presmodule->startrow();
7515         $kiriwrite_presmodule->addcell("tablecell1");
7516         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
7517         $kiriwrite_presmodule->endcell();
7518         $kiriwrite_presmodule->addcell("tablecell2");
7519         $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5 });
7520         $kiriwrite_presmodule->startlist();
7521         $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
7522         $kiriwrite_presmodule->endlist();
7523         $kiriwrite_presmodule->endcell();
7524         $kiriwrite_presmodule->endrow();
7526         $kiriwrite_presmodule->startrow();
7527         $kiriwrite_presmodule->addcell("tablecell1");
7528         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
7529         $kiriwrite_presmodule->endcell();
7530         $kiriwrite_presmodule->addcell("tablecell2");
7531         $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10 });
7532         $kiriwrite_presmodule->endcell();
7533         $kiriwrite_presmodule->endrow();
7535         $kiriwrite_presmodule->endtable();
7537         $kiriwrite_presmodule->addlinebreak();
7538         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{addfilterbutton});
7539         $kiriwrite_presmodule->addtext(" | ");
7540         $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
7541         $kiriwrite_presmodule->addtext(" | ");
7542         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7544         $kiriwrite_presmodule->endbox();
7545         $kiriwrite_presmodule->endform();
7547         return $kiriwrite_presmodule->grab();
7551 sub kiriwrite_filter_edit{
7552 #################################################################################
7553 # kiriwrite_filter_edit: Edits a filter from the filter list.                   #
7554 #                                                                               #
7555 # Usage:                                                                        #
7556 #                                                                               #
7557 # kiriwrite_filter_edit(filternumber, newfilterfind, newfilterreplace,          #
7558 #                       newfilterpriority, newfilternotes, confirm);            #
7559 #                                                                               #
7560 # filterid              Specifies the filter number (line number) in the        #
7561 #                       filter database.                                        #
7562 # newfilterfind         Specifies the new word to find.                         #
7563 # newfilterreplace      Specifies the new word to replace.                      #
7564 # newfilterpriority     Specifies the new filter priority.                      #
7565 # newfilternotes        Specifies the new filter notes.                         #
7566 # confirm               Confirms the action to edit a filter.                   #
7567 #################################################################################
7569         # Get the values that have been passed to the subroutine.
7571         my ($filter_id, $filter_new_find, $filter_new_replace, $filter_new_priority, $filter_new_notes, $confirm) = @_;
7573         # Check the confirm value to make sure it is no more than
7574         # one character long.
7576         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
7578         # Check if the confirm value is blank and if it is
7579         # srt the confirm value to 0.
7581         if (!$confirm){
7583                 # The confirm value does not have any value
7584                 # set so set it to 0.
7586                 $confirm = 0;
7588         }
7590         # Check if the filter identification number is blank,
7591         # contains characters other than numbers and is more
7592         # than seven characters long.
7594         if (!$filter_id){
7596                 # The filter identification number is blank,
7597                 # so return an error.
7599                 kiriwrite_error("filteridblank");
7601         }
7603         my $filter_id_numbers_check     = kiriwrite_variablecheck($filter_id, "numbers", 0, 1);
7605         if ($filter_id_numbers_check eq 1){
7607                 # The filter identification number contains
7608                 # characters other than numbers, so return
7609                 # an error.
7611                 kiriwrite_error("filteridinvalid");
7613         }
7615         my $filter_id_maxlength_check   = kiriwrite_variablecheck($filter_id, "maxlength", 7, 1);
7617         if ($filter_id_maxlength_check eq 1){
7619                 # The filter identification number given
7620                 # is more than seven characters long, so
7621                 # return an error.
7623                 kiriwrite_error("filteridtoolong");
7625         }
7627         my $filter_priority;
7628         my $filter_find;
7629         my $filter_replace;
7630         my $filter_notes;
7631  
7632         # Check if the action to edit a filter has been
7633         # confirmed.
7635         if ($confirm eq 1){
7637                 # The action to edit a filter has been confirmed so
7638                 # edit the selected filter.
7640                 # First, check the variables recieved are UTF8
7641                 # copliant.
7643                 kiriwrite_variablecheck($filter_new_find, "utf8", 0, 0);
7644                 kiriwrite_variablecheck($filter_new_replace, "utf8", 0, 0);
7645                 kiriwrite_variablecheck($filter_new_priority, "utf8", 0, 0);
7646                 kiriwrite_variablecheck($filter_new_notes, "utf8", 0, 0);
7648                 # Convert the UTF8 values so that the length can
7649                 # checked properly.
7651                 $filter_find            = kiriwrite_utf8convert($filter_new_find);
7652                 $filter_replace         = kiriwrite_utf8convert($filter_new_replace);
7653                 $filter_priority        = kiriwrite_utf8convert($filter_new_priority);
7654                 $filter_notes           = kiriwrite_utf8convert($filter_new_notes);
7656                 # Check if the find filter is blank and return an error
7657                 # if it is.
7659                 if (!$filter_new_find){
7661                         # The find filter given is blank so return an
7662                         # error.
7664                         kiriwrite_error("blankfindfilter");
7666                 }
7668                 if (!$filter_new_priority){
7670                         # The filter priority is blank so set it
7671                         # to 1.
7673                         $filter_new_priority = 1;
7675                 }
7677                 # Check the length and contents of the values given
7678                 # to make sure they are valid.
7680                 my $filterfind_maxlength_check          = kiriwrite_variablecheck($filter_new_find, "maxlength", 1024, 1);
7681                 my $filterreplace_maxlength_check       = kiriwrite_variablecheck($filter_new_replace, "maxlength", 1024, 1);
7682                 my $filterpriority_maxlength_check      = kiriwrite_variablecheck($filter_new_priority, "maxlength", 5, 1);
7683                 my $filterpriority_numbers_check        = kiriwrite_variablecheck($filter_new_priority, "numbers", 0, 1);
7685                 # Check if the result of the tests to see if they
7686                 # are valid.
7688                 if ($filterfind_maxlength_check eq 1){
7690                         # The find filter is too long, so return
7691                         # an error.
7693                         kiriwrite_error("findfiltertoolong");
7695                 }
7697                 if ($filterreplace_maxlength_check eq 1){
7699                         # The replace filter is too long, so
7700                         # return an error.
7702                         kiriwrite_error("replacefiltertoolong");
7704                 }
7706                 if ($filterpriority_maxlength_check eq 1){
7708                         # The length of the filter priority
7709                         # given is too long, so return an
7710                         # error.
7712                         kiriwrite_error("filterprioritytoolong");
7714                 }
7716                 if ($filterpriority_numbers_check eq 1){
7718                         # The priority of the filter given
7719                         # contains characters other than
7720                         # numbers.
7722                         kiriwrite_error("filterpriorityinvalidchars");
7724                 }
7726                 # Check if the filter priority is less than 1
7727                 # and more than 10000 and return an error
7728                 # if it is.
7730                 if ($filter_new_priority < 1 || $filter_new_priority > 50000){
7732                         # The filter priority is less than 1 and
7733                         # more than 10000, so return an error.
7735                         kiriwrite_error("filterpriorityinvalid");
7737                 }
7739                 # Connect to the database server.
7741                 $kiriwrite_dbmodule->connect();
7743                 # Check if any errors occured while connecting to the database server.
7745                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7747                         # A database connection error has occured so return
7748                         # an error.
7750                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7752                 }
7754                 # Connect to the filter database.
7756                 $kiriwrite_dbmodule->connectfilter();
7758                 # Check if any error has occured while connecting to the filter
7759                 # database.
7761                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7763                         # The filter database does not exist.
7765                         kiriwrite_error("filtersdbmissing");
7767                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7769                         # The filter database has invalid permissions set so return
7770                         # an error.
7772                         kiriwrite_error("filtersdbpermissions");
7774                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7776                         # A database error has occured with the filter database.
7778                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7780                 }
7782                 # Edit the selected filter in the filter database.
7784                 $kiriwrite_dbmodule->editfilter({ FilterID => $filter_id, NewFindFilter => $filter_new_find, NewReplaceFilter => $filter_new_replace, NewFilterPriority => $filter_new_priority, NewFilterNotes => $filter_new_notes });
7786                 # Check if any errors occured while editing the filter.
7788                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7790                         # The filter database has invalid permissions set so return
7791                         # an error.
7793                         kiriwrite_error("filtersdbpermissions");
7795                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7797                         # A database error has occured while using the filter database
7798                         # so return an error.
7800                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7802                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7804                         # The specified filter does not exist so return an error.
7806                         kiriwrite_error("filterdoesnotexist");
7808                 }
7810                 # Disconnect from the filter database.
7812                 $kiriwrite_dbmodule->disconnectfilter();
7814                 # Disconnect from the database server.
7816                 $kiriwrite_dbmodule->disconnect();
7818                 # Write a message saying that the filter was edited.
7820                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfilter}, { Style => "pageheader" });
7821                 $kiriwrite_presmodule->addlinebreak();
7822                 $kiriwrite_presmodule->addlinebreak();
7823                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfiltermessage});
7824                 $kiriwrite_presmodule->addlinebreak();
7825                 $kiriwrite_presmodule->addlinebreak();
7826                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist}});
7828                 return $kiriwrite_presmodule->grab();
7830         } elsif ($confirm eq 0){
7832                 # The action to edit a filter has not been confirmed
7833                 # so write a form for editing the filter with.
7835                 # Connect to the database server.
7837                 $kiriwrite_dbmodule->connect();
7839                 # Check if any errors occured while connecting to the database server.
7841                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7843                         # A database connection error has occured so return
7844                         # an error.
7846                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7848                 }
7850                 # Connect to the database server.
7852                 $kiriwrite_dbmodule->connect();
7854                 # Check if any errors occured while connecting to the database server.
7856                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7858                         # A database connection error has occured so return
7859                         # an error.
7861                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7863                 }
7865                 # Connect to the filter database.
7867                 $kiriwrite_dbmodule->connectfilter();
7869                 # Check if any error has occured while connecting to the filter
7870                 # database.
7872                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7874                         # The filter database does not exist.
7876                         kiriwrite_error("filtersdbmissing");
7878                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7880                         # The filter database has invalid permissions set so return
7881                         # an error.
7883                         kiriwrite_error("filtersdbpermissions");
7885                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7887                         # A database error has occured with the filter database.
7889                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7891                 }
7893                 # Get information about the filter.
7895                 my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
7897                 # Check if any errors occured while getting information about the filter.
7899                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7901                         # A database error occured while using the filter database so
7902                         # return an error.
7904                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7906                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7908                         # The filter does not exist so return an error.
7910                         kiriwrite_error("filterdoesnotexist");
7912                 }
7914                 # Get the required information.
7916                 $filter_priority        = $filter_info{"FilterPriority"};
7917                 $filter_find            = $filter_info{"FilterFind"};
7918                 $filter_replace         = $filter_info{"FilterReplace"};
7919                 $filter_notes           = $filter_info{"FilterNotes"};
7921                 # Disconnect from the filter database.
7923                 $kiriwrite_dbmodule->disconnectfilter();
7925                 # Disconnect from the database server.
7927                 $kiriwrite_dbmodule->disconnect();
7929                 # Write out the form.
7931                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editfilter}, { Style => "pageheader" });
7932                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
7933                 $kiriwrite_presmodule->startbox();
7934                 $kiriwrite_presmodule->addhiddendata("mode", "filter");
7935                 $kiriwrite_presmodule->addhiddendata("action", "edit");
7936                 $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
7937                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
7939                 $kiriwrite_presmodule->addlinebreak();
7940                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7942                 $kiriwrite_presmodule->startheader();
7943                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
7944                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
7945                 $kiriwrite_presmodule->endheader();
7947                 $kiriwrite_presmodule->startrow();
7948                 $kiriwrite_presmodule->addcell("tablecell1");
7949                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
7950                 $kiriwrite_presmodule->endcell();
7951                 $kiriwrite_presmodule->addcell("tablecell2");
7952                 $kiriwrite_presmodule->addinputbox("filterfind", { Size => 64, MaxLength => 1024, Value => $filter_find });
7953                 $kiriwrite_presmodule->endcell();
7954                 $kiriwrite_presmodule->endrow();
7956                 $kiriwrite_presmodule->startrow();
7957                 $kiriwrite_presmodule->addcell("tablecell1");
7958                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{replacefilter});
7959                 $kiriwrite_presmodule->endcell();
7960                 $kiriwrite_presmodule->addcell("tablecell2");
7961                 $kiriwrite_presmodule->addinputbox("filterreplace", { Size => 64, MaxLength => 1024, Value => $filter_replace });
7962                 $kiriwrite_presmodule->endcell();
7963                 $kiriwrite_presmodule->endrow();
7965                 $kiriwrite_presmodule->startrow();
7966                 $kiriwrite_presmodule->addcell("tablecell1");
7967                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
7968                 $kiriwrite_presmodule->endcell();
7969                 $kiriwrite_presmodule->addcell("tablecell2");
7970                 $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5, Value => $filter_priority });
7971                 $kiriwrite_presmodule->startlist();
7972                 $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
7973                 $kiriwrite_presmodule->endlist();
7974                 $kiriwrite_presmodule->endcell();
7975                 $kiriwrite_presmodule->endrow();
7977                 $kiriwrite_presmodule->startrow();
7978                 $kiriwrite_presmodule->addcell("tablecell1");
7979                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
7980                 $kiriwrite_presmodule->endcell();
7981                 $kiriwrite_presmodule->addcell("tablecell2");
7982                 $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10});
7983                 $kiriwrite_presmodule->endcell();
7984                 $kiriwrite_presmodule->endrow();
7986                 $kiriwrite_presmodule->endtable();
7988                 $kiriwrite_presmodule->addlinebreak();
7989                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{editfilterbutton});
7990                 $kiriwrite_presmodule->addtext(" | ");
7991                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
7992                 $kiriwrite_presmodule->addtext(" | ");
7993                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7994                 $kiriwrite_presmodule->endbox();
7995                 $kiriwrite_presmodule->endform();
7997                 return $kiriwrite_presmodule->grab(); 
7999         } else {
8001                 # A confirm value other than 0 or 1 has been
8002                 # specified, so return an error.
8004                 kiriwrite_error("invalidvalue");
8006         }
8010 sub kiriwrite_filter_delete{
8011 #################################################################################
8012 # kiriwrite_filter_delete: Deletes a filter from the filter list.               #
8013 #                                                                               #
8014 # Usage:                                                                        #
8015 #                                                                               #
8016 # kiriwrite_filter_delete(filterid, confirm);                                   #
8017 #                                                                               #
8018 # filterid      Specifies the filter line number to delete.                     #
8019 # confirm       Confirms the deletion of the selected filter.                   #
8020 #################################################################################
8022         # Get the values that were passed to this subroutine.
8024         my ($filter_id, $confirm) = @_;
8026         # Check the confirm value to make sure it is no more than
8027         # one character long.
8029         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
8031         # Check if the confirm value is blank and if it is
8032         # srt the confirm value to 0.
8034         if (!$confirm){
8036                 # The confirm value does not have any value
8037                 # set so set it to 0.
8039                 $confirm = 0;
8041         }
8043         # Check if the filter identification number is blank,
8044         # contains characters other than numbers and is more
8045         # than seven characters long.
8047         if (!$filter_id){
8049                 # The filter identification number is blank,
8050                 # so return an error.
8052                 kiriwrite_error("filteridblank");
8054         }
8056         my $filter_id_numbers_check     = kiriwrite_variablecheck($filter_id, "numbers", 0, 1);
8058         if ($filter_id_numbers_check eq 1){
8060                 # The filter identification number contains
8061                 # characters other than numbers, so return
8062                 # an error.
8064                 kiriwrite_error("filteridinvalid");
8066         }
8068         my $filter_id_maxlength_check   = kiriwrite_variablecheck($filter_id, "maxlength", 7, 1);
8070         if ($filter_id_maxlength_check eq 1){
8072                 # The filter identification number given
8073                 # is more than seven characters long, so
8074                 # return an error.
8076                 kiriwrite_error("filteridtoolong");
8078         }
8080         # Define some values for later.
8082         my @database_filter;
8083         my $filter_exists = 0;
8085         # Check if the confirm integer has a value of '1'.
8087         if ($confirm eq 1){
8089                 # The action to delete a filter has been confirmed.
8091                 # Connect to the database server.
8093                 $kiriwrite_dbmodule->connect();
8095                 # Check if any errors occured while connecting to the database server.
8097                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8099                         # A database connection error has occured so return
8100                         # an error.
8102                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8104                 }
8106                 # Connect to the filter database.
8108                 $kiriwrite_dbmodule->connectfilter();
8110                 # Check if any error has occured while connecting to the filter
8111                 # database.
8113                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8115                         # The filter database does not exist.
8117                         kiriwrite_error("filtersdbmissing");
8119                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8121                         # The filter database has invalid permissions set so return
8122                         # an error.
8124                         kiriwrite_error("filtersdbpermissions");
8126                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8128                         # A database error has occured with the filter database.
8130                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8132                 }
8134                 # Delete the filter from the filter database.
8136                 $kiriwrite_dbmodule->deletefilter({ FilterID => $filter_id });
8138                 # Check if any errors occured while deleting the filter.
8140                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8142                         # A database error has occured while trying to delete a filter so
8143                         # return an error.
8145                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8147                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8149                         # The filter does not exist so return an error.
8150  
8151                         kiriwrite_error("filterdoesnotexist");
8153                 }
8155                 # Disconnect from the filter database.
8157                 $kiriwrite_dbmodule->disconnectfilter();
8159                 # Disconnect from the database server.
8161                 $kiriwrite_dbmodule->disconnect();
8163                 # Write a message saying that the filter was deleted
8164                 # from the filter database.
8166                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfilter}, { Style => "pageheader" });
8167                 $kiriwrite_presmodule->addlinebreak();
8168                 $kiriwrite_presmodule->addlinebreak();
8169                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfiltermessage});
8170                 $kiriwrite_presmodule->addlinebreak();
8171                 $kiriwrite_presmodule->addlinebreak();
8172                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
8174         } elsif ($confirm eq 0) {
8176                 # Connect to the database server.
8178                 $kiriwrite_dbmodule->connect();
8180                 # Check if any errors occured while connecting to the database server.
8182                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8184                         # A database connection error has occured so return
8185                         # an error.
8187                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8189                 }
8191                 # Connect to the filter database.
8193                 $kiriwrite_dbmodule->connectfilter();
8195                 # Check if any error has occured while connecting to the filter
8196                 # database.
8198                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8200                         # The filter database does not exist.
8202                         kiriwrite_error("filtersdbmissing");
8204                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8206                         # The filter database has invalid permissions set so return
8207                         # an error.
8209                         kiriwrite_error("filtersdbpermissions");
8211                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8213                         # A database error has occured with the filter database.
8215                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8217                 }
8219                 # Get information about the filter (to check if it exists).
8221                 my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
8223                 # Check if any errors occured while getting information about the filter.
8225                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8227                         # A database error occured while using the filter database so
8228                         # return an error.
8230                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8232                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8234                         # The filter does not exist so return an error.
8236                         kiriwrite_error("filterdoesnotexist");
8238                 }
8240                 # Disconnect from the filter database.
8242                 $kiriwrite_dbmodule->disconnectfilter();
8244                 # Disconnect from the database
8246                 # The confirm integer is '0', so continue write out
8247                 # a form asking the user to confirm the deletion
8248                 # pf the filter.
8250                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefilter}, { Style => "pageheader" });
8251                 $kiriwrite_presmodule->addlinebreak();
8252                 $kiriwrite_presmodule->addlinebreak();
8253                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefiltermessage});
8254                 $kiriwrite_presmodule->addlinebreak();
8255                 $kiriwrite_presmodule->addlinebreak();
8256                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
8257                 $kiriwrite_presmodule->startbox();
8258                 $kiriwrite_presmodule->addhiddendata("mode", "filter");
8259                 $kiriwrite_presmodule->addhiddendata("action", "delete");
8260                 $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
8261                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
8262                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{deletefilterbutton});
8263                 $kiriwrite_presmodule->addtext(" | ");
8264                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{deletefilterreturn} });
8265                 $kiriwrite_presmodule->endbox();
8266                 $kiriwrite_presmodule->endform();
8268         } else {
8270                 kiriwrite_error("invalidvalue");
8272         }
8274         return $kiriwrite_presmodule->grab();
8278 sub kiriwrite_compile_makepages{
8279 #################################################################################
8280 # kiriwrite_compile_makepages: Compile the selected pages and place them in the #
8281 # specified output directory.                                                   #
8282 #                                                                               #
8283 # Usage:                                                                        #
8284 #                                                                               #
8285 # kiriwrite_compile_makepages(type, selectedlist, confirm);                     #
8286 #                                                                               #
8287 # type          Specifies if single or multiple databases are to be compiled.   #
8288 # confirm       Specifies if the action to compile the databases should really  #
8289 #               be done.                                                        #
8290 # selectedlist  Specifies the databases to compile from as an array.            #
8291 #################################################################################
8293         # Get the values that have been passed to the subroutine.
8295         my ($type, $confirm, @selectedlist) = @_;
8297         # Check if the confirm value is more than one
8298         # character long.
8300         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
8302         # Check if the confirm value is blank and if it
8303         # is then set the confirm value to 0.
8305         if (!$confirm){
8307                 # The confirm value is blank, so set the
8308                 # confirm value to 0.
8310                 $confirm = 0;
8312         }
8314         # Check if there are any databases selected
8315         # and return an error if there isn't.
8317         if (!@selectedlist){
8319                 # There are no databases in the array
8320                 # so return an error.
8322                 kiriwrite_error("nodatabaseselected");
8324         }
8326         # Check if the type given is no more than
8327         # 7 characters long.
8329         my $type_maxlength_check = kiriwrite_variablecheck($type, "maxlength", 8, 1);
8331         if ($type_maxlength_check eq 1){
8333                 # The type length given is too long so
8334                 # return an error.
8336                 kiriwrite_error("variabletoolong");
8338         }
8340         # Check if the action to compile the databases
8341         # has been confirmed.
8343         if ($confirm eq 1){
8345                 # The action to compile the datavases has
8346                 # been confirmed.
8348                 # Define some variables for later.
8350                 my %database_info;
8351                 my %filter_info;
8352                 my %template_info;
8353                 my %page_info;
8354                 my %templatefiles;
8355                 my @page_filenames;
8356                 my @databaseinfo;
8357                 my @databasepages;
8358                 my @filterslist;
8359                 my @findfilter;
8360                 my @replacefilter;
8361                 my @templateslist;
8362                 my @pagedirectories;
8363                 my @database_filters;
8364                 my $warning_count               = 0;
8365                 my $error_count                 = 0;
8366                 my $pages_count                 = 0;
8367                 my $filter;
8368                 my $filters_count               = 0;
8369                 my $filters_find_blank_warning  = 0;
8370                 my $filter_find;
8371                 my $filter_replace;
8372                 my $database;
8373                 my $database_name;
8374                 my $page_filename;
8375                 my $page_filename_check;
8376                 my $page_filename_char          = "";
8377                 my $page_filename_directory;
8378                 my $page_filename_length        = 0;
8379                 my $page_filename_seek          = 0;
8380                 my $page_filename_dircount      = 0;
8381                 my $page_filename_exists        = 0;
8382                 my $page_filename_permissions   = 0;
8383                 my $page_directory_name;
8384                 my $page_directory_path;
8385                 my $page_name;
8386                 my $page_description;
8387                 my $page_section;
8388                 my $page_template;
8389                 my $page_content;
8390                 my $page_settings;
8391                 my $page_lastmodified;
8392                 my $page_title;
8393                 my $page_final;
8394                 my $page_autosection;
8395                 my $page_autotitle;
8396                 my $page;
8397                 my $database_filename_check     = 0;
8398                 my $database_maxlength_check    = 0;
8399                 my $output_exists               = 0;
8400                 my $output_permissions          = 0;
8401                 my $filters_exists              = 0;
8402                 my $filters_permissions         = 0;
8403                 my $filters_skip                = 0;
8404                 my $template;
8405                 my $templates_skip              = 0;
8406                 my $information_prefix          = $kiriwrite_lang->{compile}->{informationprefix};
8407                 my $error_prefix                = $kiriwrite_lang->{compile}->{errorprefix};
8408                 my $warning_prefix              = $kiriwrite_lang->{compile}->{warningprefix};
8409                 my $filehandle_page;
8411                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabases}, { Style => "pageheader" });
8412                 $kiriwrite_presmodule->addlinebreak();
8413                 $kiriwrite_presmodule->addlinebreak();
8414                 $kiriwrite_presmodule->startbox("datalist");
8416                 # Check if the output directory exists and has
8417                 # valid permissions set.
8419                 $output_exists          = kiriwrite_fileexists($kiriwrite_config{'directory_data_output'});
8421                 if ($output_exists ne 0){
8423                         # The output directory does not exist so
8424                         # return an error.
8426                         kiriwrite_error("outputdirectorymissing");
8428                 }
8430                 $output_permissions     = kiriwrite_filepermissions($kiriwrite_config{'directory_data_output'}, 1, 1);
8432                 if ($output_permissions ne 0){
8434                         # The output directory has invalid
8435                         # permissions set so return an error.
8437                         kiriwrite_error("outputdirectoryinvalidpermissions");
8439                 }
8441                 # Connect to the database server.
8443                 $kiriwrite_dbmodule->connect();
8445                 # Check if any errors occured while connecting to the database server.
8447                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8449                         # A database connection error has occured so return
8450                         # an error.
8452                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8454                 }
8456                 # Connect to the filter database.
8458                 $kiriwrite_dbmodule->connectfilter();
8460                 # Check if any error has occured while connecting to the filter
8461                 # database.
8463                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8465                         # The filter database does not exist so write a warning message.
8467                         $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{filterdatabasemissing});
8468                         $kiriwrite_presmodule->addlinebreak();
8469                         $filters_skip = 1;
8470                         $warning_count++;
8472                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8474                         # The filter database has invalid permissions set so write a
8475                         # an error message.
8477                         $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{filterdatabasepermissions});
8478                         $kiriwrite_presmodule->addlinebreak();
8479                         $filters_skip = 1;
8480                         $error_count++;
8482                 }
8484                 # Load the filter database (if the filters skip
8485                 # value isn't set to 1).
8487                 if ($filters_skip eq 0){
8489                         # Get the list of available filters.
8491                         @database_filters       = $kiriwrite_dbmodule->getfilterlist();
8493                         # Check if any errors occured while getting the list of filters.
8495                         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8497                                 # A database error has occured with the filter database.
8499                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8500                                 $kiriwrite_presmodule->addlinebreak();
8501                                 $error_count++;
8503                         }
8505                         # Check if the filters skip value is set to 0
8506                         # before executing the query.
8508                         if ($filters_skip eq 0){
8510                                 foreach $filter (@database_filters){
8512                                         # Get the filter information.
8514                                         %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
8516                                         # Check if any errors occured while getting the filter information.
8518                                         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8520                                                 # A database error occured while using the filter database.
8522                                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8523                                                 $kiriwrite_presmodule->addlinebreak();
8524                                                 $error_count++;
8525                                                 next;
8527                                         } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8529                                                 # The filter does not exist so process the next filter.
8531                                                 next;
8533                                         }
8535                                         # Check if the find filter is blank and
8536                                         # if it is then write a warning message.
8538                                         if (!$filter_info{"FilterFind"}){
8540                                                 if ($filters_find_blank_warning ne 1){
8542                                                         $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{findfilterblank});
8543                                                         $kiriwrite_presmodule->addlinebreak();
8544                                                         $filters_find_blank_warning = 1;
8545                                                 }
8546                                                 next;
8548                                         } else {
8550                                                 # Add each find and replace filter.
8552                                                 $findfilter[$filters_count]     = $filter_info{"FilterFind"};
8553                                                 $replacefilter[$filters_count]  = $filter_info{"FilterReplace"};
8555                                         }
8557                                         $filters_count++;
8559                                 }
8561                                 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishfilterdatabase});
8562                                 $kiriwrite_presmodule->addlinebreak();
8564                         }
8566                 }
8568                 # Disconnect from the filter database.
8570                 $kiriwrite_dbmodule->disconnectfilter();
8572                 # Connect to the template database.
8574                 $kiriwrite_dbmodule->connecttemplate();
8576                 # Check if any errors occured while connecting to the template database.
8578                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
8580                         # The template database does not exist so set the template
8581                         # warning message.
8583                         $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{templatedatabasemissing});
8584                         $kiriwrite_presmodule->addlinebreak();
8585                         $templates_skip = 1;
8586                         $warning_count++;
8588                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
8590                         # The template database has invalid permissions set so write
8591                         # the template warning message.
8592  
8593                         $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{templatedatabasepermissions});
8594                         $kiriwrite_presmodule->addlinebreak();
8595                         $templates_skip = 1;
8596                         $error_count++;
8598                 }
8600                 # Check if the template skip value isn't set and if it isn't
8601                 # then get the list of templates.
8603                 if (!$templates_skip){
8605                         @templateslist = $kiriwrite_dbmodule->gettemplatelist();
8607                         # Check if any errors had occured.
8609                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
8611                                 # A database error occured while getting the list
8612                                 # of templates so return a warning message with the 
8613                                 # extended error information.
8615                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8616                                 $templates_skip = 1;
8617                                 $error_count++;
8619                         }
8621                         # Check if the template skip value isn't set and if it isn't
8622                         # then process each template.
8624                         if (!$templates_skip){
8626                                 # Process each template.
8628                                 foreach $template (@templateslist){
8630                                         # Get information about the template.
8632                                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
8634                                         # Check if any error occured while getting the template information.
8636                                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
8638                                                 # A database error has occured, so return an error.
8640                                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8641                                                 $error_count++;
8643                                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
8645                                                 # The template does not exist, so process the next template.
8647                                                 next;
8649                                         }
8651                                         # Place each template file into the hash.
8653                                         $templatefiles{$template_info{"TemplateFilename"}}{template}    = $template_info{"TemplateLayout"};
8654                                         $templatefiles{$template_info{"TemplateFilename"}}{valid}       = 1;
8656                                 }
8658                                 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishtemplatedatabase});
8659                                 $kiriwrite_presmodule->addlinebreak();
8661                         }
8663                 }
8665                 # Disconnect from the template database.
8667                 $kiriwrite_dbmodule->disconnecttemplate();
8669                 # Process each database.
8671                 foreach $database (@selectedlist){
8673                         # Check if the database filename and length
8674                         # are valid.
8676                         $kiriwrite_presmodule->addhorizontalline();
8678                         $database_filename_check        = kiriwrite_variablecheck($database, "page_filename", "", 1);
8679                         $database_maxlength_check       = kiriwrite_variablecheck($database, "maxlength", 32, 1);
8681                         if ($database_filename_check ne 0){
8683                                 # The database filename is invalid, so process
8684                                 # the next database.
8686                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenameinvalidcharacters}, $database));
8687                                 $kiriwrite_presmodule->addlinebreak();
8688                                 $error_count++;
8689                                 next;
8691                         }
8693                         if ($database_maxlength_check ne 0){
8695                                 # The database file is too long, so process the
8696                                 # next database.
8698                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenametoolong}, $database));
8699                                 $kiriwrite_presmodule->addlinebreak();
8700                                 $error_count++;
8701                                 next;
8703                         }
8705                         # Select the database.
8707                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
8709                         # Check if any errors had occured while selecting the database.
8711                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
8713                                 # The database does not exist, so write a warning message.
8715                                 $kiriwrite_presmodule->addtext($warning_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasemissing}, $database));
8716                                 $kiriwrite_presmodule->addlinebreak();
8717                                 $warning_count++;
8718                                 next;
8720                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
8722                                 # The database has invalid permissions set, so write
8723                                 # an error message.
8725                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseinvalidpermissions}, $database));
8726                                 $kiriwrite_presmodule->addlinebreak();
8727                                 $error_count++;
8728                                 next;
8730                         }
8732                         # Get information about the database.
8734                         my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
8736                         # Check if any error occured while getting the database information.
8738                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
8740                                 # A database error has occured so write an error.
8742                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseerror}, $database, $kiriwrite_dbmodule->geterror(1)));
8743                                 $kiriwrite_presmodule->addlinebreak();
8744                                 $error_count++;
8745                                 next;
8747                         };
8749                         # Get the database name.
8751                         $database_name = $database_info{"DatabaseName"};
8753                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compilingpages}, $database_name));
8754                         $kiriwrite_presmodule->addlinebreak();
8756                         # Get the list of pages in the database.
8758                         @databasepages = $kiriwrite_dbmodule->getpagelist();
8760                         # Check if any errors occured while getting the list of pages.
8762                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
8764                                 # A database error has occured so return an error and
8765                                 # also the extended error information.
8767                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasepageerror}, $database, $kiriwrite_dbmodule->geterror(1)));
8768                                 $kiriwrite_presmodule->addlinebreak();
8769                                 $error_count++;
8770                                 next;
8772                         }
8774                         foreach $page (@databasepages) {
8776                                 # Get information about the page.
8778                                 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
8780                                 $page_filename          = $page_info{"PageFilename"};
8781                                 $page_name              = $page_info{"PageName"};
8782                                 $page_description       = $page_info{"PageDescription"};
8783                                 $page_section           = $page_info{"PageSection"};
8784                                 $page_template          = $page_info{"PageTemplate"};
8785                                 $page_content           = $page_info{"PageContent"};
8786                                 $page_settings          = $page_info{"PageSettings"};
8787                                 $page_lastmodified      = $page_info{"PageLastModified"};
8789                                 # Check if the filename is valid.
8791                                 $page_filename_check = kiriwrite_variablecheck($page_filename, "page_filename", 0, 1);
8793                                 if ($page_filename_check ne 0){
8795                                         # The file name is not valid so write a
8796                                         # error and process the next page.
8798                                         $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{invalidpagefilename}, $page_name));
8799                                         $kiriwrite_presmodule->addlinebreak();
8800                                         $error_count++;
8801                                         next;
8803                                 }
8805                                 # Check if the template with the filename does not exist
8806                                 # in the template files hash and write a message and
8807                                 # process the next page.
8809                                 if (!$templatefiles{$page_template}{valid} && $page_template ne "!none" && $templates_skip eq 0){
8811                                         $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatefilemissing}, $page_template, $page_name, $page_filename));
8812                                         $kiriwrite_presmodule->addlinebreak();
8813                                         $error_count++;
8814                                         next;
8816                                         $page_final = $page_content;
8818                                 } elsif ($page_template eq "!none"){
8820                                         $page_final = $page_content;
8822                                 } else {
8824                                         $page_final = $templatefiles{$page_template}{template};
8826                                         if (!$page_final){
8827                                                 $page_final = "";
8828                                         }
8830                                         $page_final =~ s/<kiriwrite:pagecontent>/$page_content/g;
8832                                 }
8834                                 # Create the combined page title (if needed).
8836                                 if ($page_settings eq 0 || $page_settings > 3){
8838                                         # Don't use page name or section name.
8840                                         $page_final =~ s/<kiriwrite:pagetitle>//g;
8842                                 } elsif ($page_settings eq 1){
8844                                         # Use the page name and section name.
8846                                         $page_autotitle = "(" . $page_section . " - " . $page_name . ")";
8847                                         $page_title = $page_section . " - " . $page_name;
8848                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_title/g;
8850                                 } elsif ($page_settings eq 2){
8852                                         # Use the page name only.
8854                                         $page_autotitle = "(" . $page_name . ")";
8855                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_name/g;
8857                                 } elsif ($page_settings eq 3){
8859                                         # Use the section name only.
8861                                         if ($page_section){
8862                                                 $page_autotitle = "(" . $page_section . ")";
8863                                         }
8864                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_section/g;
8866                                 }
8868                                 # Check if the section name is not blank and
8869                                 # place brackets inbetween if it is.
8871                                 if ($page_section){
8873                                         $page_autosection = "(" . $page_section . ")";
8875                                 }
8877                                 # Replace each <kiriwrite> value with the apporiate page
8878                                 # values.
8880                                 $page_final =~ s/<kiriwrite:pagename>/$page_name/g;
8881                                 $page_final =~ s/<kiriwrite:pagedescription>/$page_description/g;
8882                                 $page_final =~ s/<kiriwrite:pagesection>/$page_section/g;
8883                                 $page_final =~ s/<kiriwrite:autosection>/$page_autosection/g;
8884                                 $page_final =~ s/<kiriwrite:autotitle>/$page_autotitle/g;
8886                                 # Process the filters on the page data.
8888                                 if ($filters_skip eq 0){
8890                                         $filters_count = 0;
8892                                         foreach $filter_find (@findfilter){
8894                                                 # Get the replace filter and process each
8895                                                 # filter on the page.
8897                                                 $filter_replace = $replacefilter[$filters_count];
8898                                                 $page_final =~ s/$filter_find/$filter_replace/g;
8899                                                 $filters_count++;
8901                                         }
8903                                 }
8905                                 # Process the page filename and check what directories
8906                                 # need to be created.
8908                                 $page_filename_length = int(length($page_filename));
8910                                 do {
8912                                         $page_filename_char = substr($page_filename, $page_filename_seek, 1);
8914                                         # Check if a forward slash appears and add it to
8915                                         # the list of directories array.
8917                                         if ($page_filename_char eq '/'){
8919                                                 # Append the directory name to the list of
8920                                                 # directories array.
8922                                                 $pagedirectories[$page_filename_dircount] = $page_filename_directory;
8923                                                 $page_filename_directory        = "";
8924                                                 $page_filename_char             = "";
8925                                                 $page_filename_dircount++;
8927                                         } else {
8929                                                 # Append the character to the directory/filename.
8931                                                 $page_filename_directory = $page_filename_directory . $page_filename_char;
8933                                         }
8935                                         $page_filename_seek++;
8937                                 } until ($page_filename_length eq $page_filename_seek);
8939                                 foreach $page_directory_name (@pagedirectories){
8941                                         # Check if the directory name is undefined and if it
8942                                         # is then set it blank.
8944                                         if (!$page_directory_name){
8945                                                 $page_directory_name = "";
8946                                         }
8948                                         if (!$page_directory_path){
8949                                                 $page_directory_path = "";
8950                                         }
8952                                         # Check if the directory exists and create 
8953                                         # the directory if it doesn't exist.
8955                                         $page_directory_path = $page_directory_path . '/' . $page_directory_name;
8957                                         mkdir($kiriwrite_config{"directory_data_output"} . '/' . $page_directory_path);
8959                                 }
8961                                 # Check if the file already exists and if it does then check
8962                                 # the permissions of the file and return an error if the
8963                                 # permissions set are invalid.
8965                                 $page_filename_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"} . '/' . $page_filename);        
8967                                 if ($page_filename_exists eq 0){
8969                                         # The page filename exists, so check if the permissions given are
8970                                         # valid.
8972                                         $page_filename_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"} . '/' . $page_filename, 1, 1);
8974                                         if ($page_filename_permissions eq 1){
8976                                                 # The file has invalid permissions set.
8978                                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pageinvalidpermissions}, $page_filename));
8979                                                 $kiriwrite_presmodule->addlinebreak();
8980                                                 $error_count++;
8982                                                 # Reset certain values.
8984                                                 $page_autotitle = "";
8985                                                 $page_autosection = "";
8986                                                 $page_filename_seek = 0;
8987                                                 $page_filename_dircount = 0;
8989                                                 $page_filename_directory = "";
8990                                                 $page_directory_path = "";
8991                                                 $page_directory_name = "";
8992                                                 @pagedirectories = ();
8993                                                 
8994                                                 next;
8996                                         }
8998                                 }
9000                                 # Reset certain values.
9002                                 $page_autotitle = "";
9003                                 $page_autosection = "";
9004                                 $page_filename_seek = 0;
9005                                 $page_filename_dircount = 0;
9007                                 $page_filename_directory = "";
9008                                 $page_directory_path = "";
9009                                 $page_directory_name = "";
9010                                 @pagedirectories = ();
9012                                 # Write the file to the output directory.
9014                                 ($page_filename) = $page_filename =~ m/^(.*)$/g;
9015                                 ($kiriwrite_config{"directory_data_output"}) = $kiriwrite_config{"directory_data_output"} =~ m/^(.*)$/g;
9017                                 open($filehandle_page, "> ",  $kiriwrite_config{"directory_data_output"} . '/' . $page_filename) or ($kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pagenotwritten}, $page_filename, $!)), $kiriwrite_presmodule->addlinebreak(), $error_count++, next);
9019                                 if (!$page_final){
9021                                         $page_final = "";
9023                                 }
9025                                 binmode $filehandle_page, ':utf8';
9026                                 print $filehandle_page $page_final;
9027                                 close($filehandle_page);
9029                                 # Write a message saying the page has been compiled. Check
9030                                 # to see if the page name is blank and write a message
9031                                 # saying there's no page name.
9033                                 if (!$page_name){
9034                                         $kiriwrite_presmodule->addtext($information_prefix . ' ');
9035                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
9036                                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledpageblankname}, $page_filename));
9037                                 } else {
9038                                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compiledpage}, $page_name, $page_filename));
9039                                 }
9042                                 $kiriwrite_presmodule->addlinebreak();
9043                                 $pages_count++;
9045                         }
9047                         # Write a message saying that the database has
9048                         # been processed.
9050                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefinish}, $database_name));
9051                         $kiriwrite_presmodule->addlinebreak();
9053                 }
9055                 # Disconnect from the database server.
9057                 $kiriwrite_dbmodule->disconnect();
9059                 $kiriwrite_presmodule->addhorizontalline();
9060                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compileresults}, $pages_count, $error_count, $warning_count));
9061                 $kiriwrite_presmodule->endbox();
9062                 $kiriwrite_presmodule->addlinebreak();
9063                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9065                 return $kiriwrite_presmodule->grab();
9067         } elsif ($confirm eq 0){
9069                 # The action to compile the databases has
9070                 # not been confirmed so check what type
9071                 # is being used.
9073                 if ($type eq "single"){
9075                         # The type is a single database selected so
9076                         # process that database.
9078                         # Define some variables for later.
9080                         my %database_info; 
9081                         my $database_filename_check;
9082                         my $database_maxlength_check;
9083                         my $databasefilename;
9084                         my $database_name;
9086                         # Check that the database name and length are
9087                         # valid and return an error if they aren't.
9089                         $databasefilename = $selectedlist[0];
9091                         # Connect to the database server.
9093                         $kiriwrite_dbmodule->connect();
9095                         # Check if any errors occured while connecting to the database server.
9097                         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9099                                 # A database connection error has occured so return
9100                                 # an error.
9102                                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9104                         }
9106                         # Select the database.
9108                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasefilename });
9110                         # Check if any errors had occured while selecting the database.
9112                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9114                                 # The database does not exist, so return an error.
9116                                 kiriwrite_error("databasemissingfile");
9118                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9120                                 # The database has invalid permissions set, so return
9121                                 # an error.
9123                                 kiriwrite_error("databaseinvalidpermissions");
9125                         }
9127                         # Get information about the database.
9129                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9131                         # Check if any error occured while getting the database information.
9133                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9135                                 # A database error has occured so return an error and
9136                                 # also the extended error information.
9138                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
9140                         };
9142                         $database_name = $database_info{"DatabaseName"};
9144                         # Disconnect from the database server.
9146                         $kiriwrite_dbmodule->disconnect();
9148                         # Write out a form asking the user to confirm if the
9149                         # user wants to compile the selected database.
9151                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabase}, { Style => "pageheader" });
9152                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9153                         $kiriwrite_presmodule->startbox();
9154                         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9155                         $kiriwrite_presmodule->addhiddendata("action", "compile");
9156                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9157                         $kiriwrite_presmodule->addhiddendata("id[1]", $databasefilename);
9158                         $kiriwrite_presmodule->addhiddendata("name[1]", "on");
9159                         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9160                         $kiriwrite_presmodule->addlinebreak();
9161                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledatabasemessage}, $database_name));
9162                         $kiriwrite_presmodule->addlinebreak();
9163                         $kiriwrite_presmodule->addlinebreak();
9164                         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compiledatabasebutton});
9165                         $kiriwrite_presmodule->addtext(" | ");
9166                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9167                         $kiriwrite_presmodule->endbox();
9168                         $kiriwrite_presmodule->endform();
9170                         return $kiriwrite_presmodule->grab();
9172                 } elsif ($type eq "multiple"){
9174                         # The type is multiple databases selected
9175                         # so process each database.
9177                         # Define some variables for later.
9179                         my %database_list;
9180                         my $databasename;
9181                         my $database;
9182                         my $database_filename_check;
9183                         my $database_maxlength_check;
9184                         my $database_count = 0;
9185                         my $database_info_name;
9187                         # Connect to the database server.
9189                         $kiriwrite_dbmodule->connect();
9191                         # Check if any errors occured while connecting to the database server.
9193                         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9195                                 # A database connection error has occured so return
9196                                 # an error.
9198                                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9200                         }
9202                         foreach $databasename (@selectedlist){
9204                                 # Check if the database is in the database
9205                                 # directory and skip it if it isn't.
9206  
9207                                 $database_filename_check        = kiriwrite_variablecheck($databasename, "filename", "", 1);
9208                                 $database_maxlength_check       = kiriwrite_variablecheck($databasename, "maxlength", 32, 1);
9209  
9210                                 if ($database_filename_check ne 0 || $database_maxlength_check ne 0){
9211  
9212                                         # The database filename given is invalid or
9213                                         # the database filename given is too long
9214                                         # so process the next database.
9215  
9216                                         next;
9217  
9218                                 }
9220                                 # Select the database to add the page to.
9222                                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasename });
9224                                 # Check if any errors had occured while selecting the database.
9226                                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9228                                         # The database does not exist, so process the next database.
9230                                         next;
9232                                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9234                                         # The database has invalid permissions set, so process
9235                                         # the next database.
9237                                         next;
9239                                 }
9241                                 # Get information about the database.
9243                                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9245                                 # Check if any error occured while getting the database information.
9247                                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9249                                         # A database error has occured so process the next
9250                                         # database.
9252                                         next;
9254                                 };
9256                                 $database_list{$database_count}{Name}           = $database_info{"DatabaseName"};
9257                                 $database_list{$database_count}{Filename}       = $databasename;
9259                                 $database_count++;
9261                         }
9263                         # Check if any databases are available to be compiled.
9265                         if ($database_count eq 0){
9267                                 # No databases are available to be compiled.
9269                                 kiriwrite_error("nodatabaseselected");
9271                         }
9273                         # Write out the form for compiling the database.
9275                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabases}, { Style => "pageheader" });
9276                         $kiriwrite_presmodule->addlinebreak();
9277                         $kiriwrite_presmodule->addlinebreak();
9278                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9279                         $kiriwrite_presmodule->startbox();
9280                         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9281                         $kiriwrite_presmodule->addhiddendata("action", "compile");
9282                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9283                         $kiriwrite_presmodule->addhiddendata("count", $database_count);
9284                         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9285                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabasesmessage});
9286                         $kiriwrite_presmodule->addlinebreak();
9287                         $kiriwrite_presmodule->addlinebreak();
9288                         $kiriwrite_presmodule->startbox("datalist");
9290                         $database_count = 0;
9292                         # write out the list of databases to compile.
9294                         foreach $database (keys %database_list){
9296                                 $database_count++;
9298                                 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9299                                 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9301                                 # Check if the database name is undefined and if it is
9302                                 # then write a message saying the database name is blank.
9304                                 if (!$database_list{$database}{Name}){
9305                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{compile}->{blankdatabasename});
9306                                 } else {
9307                                         $kiriwrite_presmodule->addtext($database_list{$database}{Name});
9308                                 }
9310                                 $kiriwrite_presmodule->addlinebreak();
9312                         }
9314                         $kiriwrite_presmodule->endbox();
9316                         # Disconnect from the database server.
9318                         $kiriwrite_dbmodule->disconnect();
9320                         $kiriwrite_presmodule->addlinebreak();
9321                         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselecteddatabasesbutton});
9322                         $kiriwrite_presmodule->addtext(" | ");
9323                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9324                         $kiriwrite_presmodule->endbox();
9325                         $kiriwrite_presmodule->endform();
9327                         return $kiriwrite_presmodule->grab();
9329                 } else {
9331                         # The type is something else other than
9332                         # single or multiple, so return an error.
9334                         kiriwrite_error("invalidvariable");
9336                 }
9338         } else {
9340                 # The confirm value is neither 0 or 1, so
9341                 # return an error.
9343                 kiriwrite_error("invalidvariable");
9345         }
9349 sub kiriwrite_compile_all{
9350 #################################################################################
9351 # kiriwrite_compile_all: Compile all of the databases in the database           #
9352 # directory.                                                                    #
9353 #                                                                               #
9354 # Usage:                                                                        #
9355 #                                                                               #
9356 # kiriwrite_compile_all();                                                      #
9357 #################################################################################
9359         # Connect to the database server.
9361         $kiriwrite_dbmodule->connect();
9363         # Check if any errors occured while connecting to the database server.
9365         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9367                 # A database connection error has occured so return
9368                 # an error.
9370                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9372         }
9374         # Get the list of available databases.
9376         my @database_list = $kiriwrite_dbmodule->getdblist();
9378         # Check if any errors occured while getting the databases.
9380         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9382                 # The database directory is missing so return an error.
9384                 kiriwrite_error("datadirectorymissing");
9386         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9388                 # The database directory has invalid permissions set so return
9389                 # an error.
9391                 kiriwrite_error("datadirectoryinvalidpermissions");
9393         }
9395         # Define some variables for later.
9397         my $database;
9398         my $database_name_filename_check;
9399         my $database_count              = 0;
9401         # Check the list of databases to compile to see if it is blank,
9402         # if it is then return an error.
9404         if (!@database_list){
9406                 # The list of database is blank so return an error.
9408                 kiriwrite_error("nodatabasesavailable");
9410         }
9412         # Write out a form for confirming the action to compile all of the databases.
9414         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabases}, { Style => "pageheader" });
9415         $kiriwrite_presmodule->addlinebreak();
9416         $kiriwrite_presmodule->addlinebreak();
9418         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9419         $kiriwrite_presmodule->startbox();
9420         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9421         $kiriwrite_presmodule->addhiddendata("action", "compile");
9422         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9424         foreach $database (@database_list){
9426                 # Check if the database filename is blank.
9428                 if ($database eq ""){
9430                         # The database filename is blank so process
9431                         # the next database.
9433                         next;
9435                 }
9437                 # Check if the database filename is valid before
9438                 # using the database.
9440                 $database_name_filename_check   = kiriwrite_variablecheck($database, "filename", 0, 1);
9442                 if ($database_name_filename_check ne 0){
9444                         # The database filename is invalid so process
9445                         # the next database.
9447                         next;
9449                 }
9451                 $database_count++;
9452                 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database);
9453                 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9455         }
9457         $kiriwrite_presmodule->addhiddendata("count", $database_count);
9459         # Disconnect from the database server.
9461         $kiriwrite_dbmodule->disconnect();
9463         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabasesmessage});
9464         $kiriwrite_presmodule->addlinebreak();
9465         $kiriwrite_presmodule->addlinebreak();
9467         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9468         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compilealldatabasesbutton});
9469         $kiriwrite_presmodule->addtext(" | ");
9470         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9471         $kiriwrite_presmodule->endbox();
9472         $kiriwrite_presmodule->endform();
9474         return $kiriwrite_presmodule->grab();
9478 sub kiriwrite_selectedlist{
9479 #################################################################################
9480 # kiriwrite_page_selectedlist: Get the list of selected pages to use.           #
9481 #                                                                               #
9482 # Usage:                                                                        #
9483 #                                                                               #
9484 # kiriwrite_page_selectedlist();                                                #
9485 #################################################################################
9487         # Load the required Perl modules.
9489         my $query = new CGI;
9491         my $count       = $query->param('count');
9493         # Check if the list of files has a value and if not set it 0.
9495         if (!$count){
9497                 $count = 0;
9499         }
9501         # Define some values for later.
9503         my @filename_list; 
9504         my @selected_list;
9505         my @final_list;
9507         my $filename;
9508         my $selected;
9510         my $final_count = 0;
9511         my $seek = 0;
9513         # Get the list of filenames.
9515         do {
9517                 # Get the values from id[]
9519                 $seek++;
9521                 $filename               = $query->param('id[' . $seek . ']');
9522                 $filename_list[$seek]   = $filename;
9524         } until ($seek eq $count || $count eq 0);
9526         # Get the list of selected filenames.
9528         $seek = 0;
9530         do {
9532                 # Get the values from name[]
9534                 $seek++;
9536                 $selected       = $query->param('name[' . $seek . ']');
9538                 if (!$selected){
9540                         $selected = 'off';
9542                 }
9544                 $selected_list[$seek]   = $selected;
9546         } until ($seek eq $count || $count eq 0);
9548         # Create a final list of filenames to be used for
9549         # processing.
9551         $seek = 0;
9553         do {
9555                 # Check if the selected value is on and include
9556                 # the filename in the final list.
9558                 $seek++;
9560                 $selected       = $selected_list[$seek];
9562                 if ($selected eq "on"){
9564                         $filename       = $filename_list[$seek];
9565                         $final_list[$final_count] = $filename;
9566                         $final_count++;
9568                 }
9570         } until ($seek eq $count || $count eq 0);
9572         return @final_list;
9576 sub kiriwrite_compile_list{
9577 #################################################################################
9578 # kiriwrite_compile_list: Shows a list of databases that can be compiled.       #
9579 #                                                                               #
9580 # Usage:                                                                        #
9581 #                                                                               #
9582 # kiriwrite_compile_list();                                                     #
9583 #################################################################################
9585         # Define the following variables that are going to be used before using 
9586         # the foreach function.
9588         my %database_info;
9589         my %database_list;
9590         my $database_count = 0;
9591         my $database_filename = "";
9592         my $database_filename_friendly = "";
9593         my $database_permissions = "";
9594         my $database_name = "";
9595         my $database_description = "";
9596         my $data_file = "";
9597         my @permissions_list;
9598         my @error_list;
9599         my $table_style = 0;
9600         my $table_style_name = "";
9601         my $database;
9603         tie(%database_list, 'Tie::IxHash');
9605         # Connect to the database server.
9607         $kiriwrite_dbmodule->connect();
9609         # Check if any errors occured while connecting to the database server.
9611         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9613                 # A database connection error has occured so return
9614                 # an error.
9616                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9618         }
9620         # Get the list of available databases and process any errors that
9621         # might have occured.
9623         my @database_list = $kiriwrite_dbmodule->getdblist();
9625         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9627                 # The database directory is missing so return an error.
9629                 kiriwrite_error("datadirectorymissing");
9631         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9633                 # The database directory has invalid permissions set so return
9634                 # an error.
9636                 kiriwrite_error("datadirectoryinvalidpermissions");
9638         }
9640         # Begin creating the table for the list of databases.
9642         foreach $data_file (@database_list){
9644                 # Select the database.
9646                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
9648                 # Check if any error occured while selecting the database.
9650                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9652                         # The database does not exist, so process the next
9653                         # database.
9655                         next;
9657                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
9659                         # The database has invalid permissions settings, so
9660                         # add the database to the list of databases with
9661                         # invalid permissions set and process the next
9662                         # database.
9664                         push(@permissions_list, $data_file);
9665                         next;
9667                 }
9669                 # Get information about the database.
9671                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9673                 # Check if any error occured while getting information from the
9674                 # database.
9676                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9678                         # A database error has occured, add the database and specific
9679                         # error message to the list of databases with errors and
9680                         # process the next database.
9682                         push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
9683                         next;
9685                 }
9687                 $database_name          = $database_info{"DatabaseName"};
9688                 $database_description   = $database_info{"Description"};
9690                 # Create a friendly name for the database.
9692                 $database_filename_friendly = $data_file;
9694                 # Append the database information to the table.
9696                 $database_list{$database_count}{Filename}       = $database_filename_friendly;
9697                 $database_list{$database_count}{Name}           = $database_name;
9698                 $database_list{$database_count}{Description}    = $database_description;
9700                 $database_count++;
9702         }
9704         # Check if there are no valid databases are if there is no
9705         # valid databases then write a message saying that no
9706         # valid databases are available.
9708         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilepages}, { Style => "pageheader" });
9709         $kiriwrite_presmodule->addlinebreak();
9710         $kiriwrite_presmodule->addlinebreak();
9712         if ($database_count eq 0){
9714                 # There are no databases available for compiling so
9715                 # write a message instead.
9717                 $kiriwrite_presmodule->startbox("errorbox");
9718                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{nodatabasesavailable});
9719                 $kiriwrite_presmodule->endbox();
9721         } else {
9723                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9724                 $kiriwrite_presmodule->startbox();
9725                 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9726                 $kiriwrite_presmodule->addhiddendata("action", "compile");
9727                 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9729                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
9730                 $kiriwrite_presmodule->addtext(" | ");
9731                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselectedbutton});
9732                 $kiriwrite_presmodule->addlinebreak();
9733                 $kiriwrite_presmodule->addlinebreak();
9734                 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9735                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
9737                 $kiriwrite_presmodule->startheader();
9738                 $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
9739                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
9740                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
9741                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
9742                 $kiriwrite_presmodule->endheader();
9744                 $database_count = 1;
9746                 foreach $database (keys %database_list){
9748                         # Check the style to be used with.
9750                         if ($table_style eq 0){
9752                                 # Use the first style and set the style value
9753                                 # to use the next style, the next time the
9754                                 # if statement is checked.
9756                                 $table_style_name = "tablecell1";
9757                                 $table_style = 1;
9759                         } else {
9761                                 # Use the second style and set the style
9762                                 # value to use the first style, the next
9763                                 # time if statement is checked.
9765                                 $table_style_name = "tablecell2";
9766                                 $table_style = 0;
9767                         }
9769                         # Add the template to the list of available
9770                         # templates to compile.
9772                         $kiriwrite_presmodule->startrow();
9773                         $kiriwrite_presmodule->addcell($table_style_name);
9774                         $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9775                         $kiriwrite_presmodule->addcheckbox("name[" . $database_count . "]");
9776                         $kiriwrite_presmodule->endcell();
9777                         $kiriwrite_presmodule->addcell($table_style_name);
9779                         if (!$database_list{$database}{Name}){
9780                                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile&action=compile&type=single&database=" . $database_list{$database}{Filename}, { Text => $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname}) });
9781                         } else {
9782                                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_list{$database}{Filename}, { Text => $database_list{$database}{Name} });
9783                         }
9785                         $kiriwrite_presmodule->endcell();
9786                         $kiriwrite_presmodule->addcell($table_style_name);
9788                         if (!$database_list{$database}{Description}){
9789                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
9790                         } else {
9791                                 $kiriwrite_presmodule->addtext($database_list{$database}{Description});
9792                         }
9794                         $kiriwrite_presmodule->endcell();
9795                         $kiriwrite_presmodule->addcell($table_style_name);
9796                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile&action=compile&type=single&database=" . $database_list{$database}{Filename}, { Text => $kiriwrite_lang->{options}->{compile} });
9797                         $kiriwrite_presmodule->endcell();
9798                         $kiriwrite_presmodule->endrow();
9800                         $database_count++;
9802                 }
9804                 $kiriwrite_presmodule->endtable();
9805                 $kiriwrite_presmodule->endbox();
9806                 $kiriwrite_presmodule->endform();
9808         }
9810         # Disconnect from the database server.
9812         $kiriwrite_dbmodule->disconnect();
9814         # Check if any databases with problems have appeared and if they
9815         # have, print out a message saying which databases have problems.
9817         if (@permissions_list){
9819                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
9820                 $kiriwrite_presmodule->addlinebreak();
9821                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
9822                 $kiriwrite_presmodule->addlinebreak();
9823  
9824                 foreach $database (@permissions_list){
9825  
9826                         $kiriwrite_presmodule->addlinebreak();
9827                         $kiriwrite_presmodule->addtext($database);
9828  
9829                 }
9830  
9831                 $kiriwrite_presmodule->addlinebreak();
9832                 $kiriwrite_presmodule->addlinebreak();
9834         }
9836         if (@error_list){
9838                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
9839                 $kiriwrite_presmodule->addlinebreak();
9840                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
9841                 $kiriwrite_presmodule->addlinebreak();
9843                 foreach $database (@error_list){
9845                         $kiriwrite_presmodule->addlinebreak();
9846                         $kiriwrite_presmodule->addtext($database);
9848                 }
9850         }
9852         return $kiriwrite_presmodule->grab();
9856 sub kiriwrite_compile_clean{
9857 #################################################################################
9858 # kiriwrite_compile_clean: Deletes the contents of the output directory.        #
9859 #                                                                               #
9860 # Usage:                                                                        #
9861 #                                                                               #
9862 # kiriwrite_compile_clean(confirm);                                             #
9863 #                                                                               #
9864 # confirm       Confirms the deletion of files from the output directory.       #
9865 #################################################################################
9867         # Get the values passed to the subroutine.
9869         my ($confirm) = @_;
9871         # Define some variables for later.
9873         my $file_permissions;
9874         my $output_directory_exists;
9875         my $output_directory_permissions;
9876         my $warning_message;
9878         # Check if the output directory exists.
9880         $output_directory_exists         = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"});
9882         if ($output_directory_exists eq 1){
9884                 # The output directory does not exist so return
9885                 # an error.
9887                 kiriwrite_error("outputdirectorymissing");
9889         }
9891         # Check if the output directory has invalid
9892         # permissions set.
9894         $output_directory_permissions   = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"});
9896         if ($output_directory_permissions eq 1){
9898                 # The output directory has invalid permissions
9899                 # set, so return an error.
9901                 kiriwrite_error("outputdirectoryinvalidpermissions");
9903         }
9905         if ($confirm) {
9907                 if ($confirm eq 1){
9909                         # The action to clean the output directory has been
9910                         # confirmed.
9912                         # Remove the list of files and directories from the
9913                         # output directory.
9915                         $file_permissions = kiriwrite_compile_clean_helper($kiriwrite_config{"directory_data_output"}, 1);
9917                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9919                         if ($file_permissions eq 1){
9921                                 $kiriwrite_presmodule->addlinebreak();
9922                                 $kiriwrite_presmodule->addlinebreak();
9923                                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{somecontentnotremoved});
9924                                 $kiriwrite_presmodule->addlinebreak();
9925                                 $kiriwrite_presmodule->addlinebreak();
9927                         } else {
9929                                 $kiriwrite_presmodule->addlinebreak();
9930                                 $kiriwrite_presmodule->addlinebreak();
9931                                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{contentremoved});
9932                                 $kiriwrite_presmodule->addlinebreak();
9933                                 $kiriwrite_presmodule->addlinebreak();
9935                         }
9937                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9939                         return $kiriwrite_presmodule->grab();
9941                 } else {
9943                         # A value other than 1 is set for the confirm value
9944                         # (which it shouldn't be) so return an error.
9946                         kiriwrite_error("invalidvariable");
9948                 }
9950         }
9952         # Print out a form for cleaning the output directory.
9954         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9955         $kiriwrite_presmodule->addlinebreak();
9956         $kiriwrite_presmodule->addlinebreak();
9957         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9958         $kiriwrite_presmodule->startbox();
9959         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9960         $kiriwrite_presmodule->addhiddendata("action", "clean");
9961         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9962         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectorymessage});
9963         $kiriwrite_presmodule->addlinebreak();
9964         $kiriwrite_presmodule->addlinebreak();
9965         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{cleanoutputdirectorybutton});
9966         $kiriwrite_presmodule->addtext(" | ");
9967         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist}});
9968         $kiriwrite_presmodule->endbox();
9969         $kiriwrite_presmodule->endform();
9971         return $kiriwrite_presmodule->grab();
9975 sub kiriwrite_compile_clean_helper{
9976 #################################################################################
9977 # kiriwrite_compile_clean_helper: Helper for cleaning out the output directory. #
9978 # This command sometimes is called recursively (when a directory is found).     #
9979 #                                                                               #
9980 # Usage:                                                                        #
9981 #                                                                               #
9982 # kiriwrite_compile_clean_helper(directory, removedirectory, [permissions]);    #
9983 #                                                                               #
9984 # directory             Specifies the directory to remove files (and            #
9985 #                       sub-directories) from.                                  #
9986 # keepdirectory         Keeps the directory itself after all files have been    #
9987 #                       removed.                                                #
9988 # permissions           Used recursively for error checking.                    #
9989 #################################################################################
9991         # Get the values passed to the subroutine.
9993         my ($directory, $directory_keep, $permissions) = @_;
9995         # Check if the directory_keep is only one charater long.
9997         my $directory_file = "";
9998         my @directory_list;
9999         my $file_permissions = 0;
10000         my $debug = 0;
10002         # Check if the file permissions value is blank.
10004         if (!$permissions){
10006                 # The file permissions value is blank.
10008                 $permissions = 0;
10010         }
10012         # Open the directory specified, read the contents of
10013         # the directory and then close the directory.
10015         opendir(DIRECTORY, $directory);
10016         @directory_list = readdir(DIRECTORY);
10017         closedir(DIRECTORY);
10019         # Remove each file and directory.
10021         foreach $directory_file (@directory_list){
10023                 # Check if the filename is '.' or '..' and if it
10024                 # is skip those files.
10026                 if ($directory_file eq "." || $directory_file eq ".."){
10028                         # The filename is '.' or '..' so skip processing
10029                         # these files.
10031                 } else {
10033                         # Check if the permissions on the file or directory has
10034                         # valid permissions set.
10036                         $file_permissions = kiriwrite_filepermissions($directory . '/' . $directory_file, 1, 1);
10038                         if ($file_permissions eq 1){
10040                                 # The file or directory has invalid permissions set.
10042                                 $permissions = 1;
10043                                 next;
10045                         }
10047                         # Check if the filename is a directory.
10049                         if (-d $directory . '/' . $directory_file){
10051                                 # The filename is a directory so send the directory name
10052                                 # and this subroutine again (recursively).
10054                                 kiriwrite_compile_clean_helper($directory . '/' . $directory_file, 0, $permissions);
10056                         } else {
10058                                 # The file is not a directory but an actual file so
10059                                 # remove as normal (in terms of the Perl language).
10061                                 ($directory) = $directory =~ m/^(.*)$/g;
10062                                 ($directory_file) = $directory_file =~ m/^(.*)$/g;
10064                                 # Check if the directory is undefined and if it is then
10065                                 # set it to blank.
10067                                 if (!$directory){
10068                                         $directory = "";
10069                                 }
10071                                 if (!$directory_file){
10072                                         $directory_file = "";
10073                                 }
10075                                 unlink($directory . '/' . $directory_file);
10077                         }
10079                 }
10081         }
10083         # Check if the directory should be kept.
10085         if ($directory_keep eq 1){
10087                 # The directory_keep value is set as 1 so the directory
10088                 # specified should be kept.
10090         } elsif ($directory_keep eq 0) {
10092                 # The directory_keep value is set as 0 so remove the
10093                 # directory specified.
10095                 ($directory) = $directory =~ m/^(.*)$/g;
10096                 rmdir($directory);
10098         } else {
10100                 # A value other than 0 or 1 was specified so return
10101                 # an error,
10103                 kiriwrite_error('invalidvalue');
10105         }
10107         return $permissions;
10111 sub kiriwrite_settings_view{
10112 #################################################################################
10113 # kiriwrite_options_view: Writes out the list of options and variables.         #
10114 #                                                                               #
10115 # Usage:                                                                        #
10116 #                                                                               #
10117 # kiriwrite_settings_view();                                                    #
10118 #################################################################################
10120         # Get the settings.
10122         my $settings_directory_db               = $kiriwrite_config{"directory_data_db"};
10123         my $settings_directory_output           = $kiriwrite_config{"directory_data_output"};
10124         my $settings_noncgi_images              = $kiriwrite_config{"directory_noncgi_images"};
10125         my $settings_system_datetime            = $kiriwrite_config{"system_datetime"};
10126         my $settings_system_language            = $kiriwrite_config{"system_language"};
10127         my $settings_system_presentation        = $kiriwrite_config{"system_presmodule"};
10128         my $settings_system_database            = $kiriwrite_config{"system_dbmodule"};
10130         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{viewsettings}, { Style => "pageheader" });
10131         $kiriwrite_presmodule->addlinebreak();
10132         $kiriwrite_presmodule->addlinebreak();
10133         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{currentsettings});
10134         $kiriwrite_presmodule->addlinebreak();
10135         $kiriwrite_presmodule->addlinebreak();
10136         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10138         $kiriwrite_presmodule->startheader();
10139         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10140         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10141         $kiriwrite_presmodule->endheader();
10143         $kiriwrite_presmodule->startrow();
10144         $kiriwrite_presmodule->addcell("tablecellheader");
10145         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10146         $kiriwrite_presmodule->endcell();
10147         $kiriwrite_presmodule->addcell("tablecellheader");
10148         $kiriwrite_presmodule->endcell();
10149         $kiriwrite_presmodule->endrow();
10151         $kiriwrite_presmodule->startrow();
10152         $kiriwrite_presmodule->addcell("tablecell1");
10153         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10154         $kiriwrite_presmodule->endcell();
10155         $kiriwrite_presmodule->addcell("tablecell2");
10156         $kiriwrite_presmodule->addtext($settings_directory_db);
10157         $kiriwrite_presmodule->endcell();
10158         $kiriwrite_presmodule->endrow();
10160         $kiriwrite_presmodule->startrow();
10161         $kiriwrite_presmodule->addcell("tablecell1");
10162         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
10163         $kiriwrite_presmodule->endcell();
10164         $kiriwrite_presmodule->addcell("tablecell2");
10165         $kiriwrite_presmodule->addtext($settings_directory_output);
10166         $kiriwrite_presmodule->endcell();
10167         $kiriwrite_presmodule->endrow();
10169         $kiriwrite_presmodule->startrow();
10170         $kiriwrite_presmodule->addcell("tablecell1");
10171         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
10172         $kiriwrite_presmodule->endcell();
10173         $kiriwrite_presmodule->addcell("tablecell2");
10174         $kiriwrite_presmodule->addtext($settings_noncgi_images);
10175         $kiriwrite_presmodule->endcell();
10176         $kiriwrite_presmodule->endrow();
10178         $kiriwrite_presmodule->startrow();
10179         $kiriwrite_presmodule->addcell("tablecellheader");
10180         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
10181         $kiriwrite_presmodule->endcell();
10182         $kiriwrite_presmodule->addcell("tablecellheader");
10183         $kiriwrite_presmodule->endcell();
10184         $kiriwrite_presmodule->endrow();
10186         $kiriwrite_presmodule->startrow();
10187         $kiriwrite_presmodule->addcell("tablecell1");
10188         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
10189         $kiriwrite_presmodule->endcell();
10190         $kiriwrite_presmodule->addcell("tablecell2");
10191         $kiriwrite_presmodule->addtext($settings_system_datetime);
10192         $kiriwrite_presmodule->endcell();
10193         $kiriwrite_presmodule->endrow();
10195         $kiriwrite_presmodule->startrow();
10196         $kiriwrite_presmodule->addcell("tablecellheader");
10197         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
10198         $kiriwrite_presmodule->endcell();
10199         $kiriwrite_presmodule->addcell("tablecellheader");
10200         $kiriwrite_presmodule->endcell();
10201         $kiriwrite_presmodule->endrow();
10203         $kiriwrite_presmodule->startrow();
10204         $kiriwrite_presmodule->addcell("tablecell1");
10205         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
10206         $kiriwrite_presmodule->endcell();
10207         $kiriwrite_presmodule->addcell("tablecell2");
10208         $kiriwrite_presmodule->addtext($settings_system_language);
10209         $kiriwrite_presmodule->endcell();
10210         $kiriwrite_presmodule->endrow();
10212         $kiriwrite_presmodule->startrow();
10213         $kiriwrite_presmodule->addcell("tablecellheader");
10214         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
10215         $kiriwrite_presmodule->endcell();
10216         $kiriwrite_presmodule->addcell("tablecellheader");
10217         $kiriwrite_presmodule->endcell();
10218         $kiriwrite_presmodule->endrow();
10220         $kiriwrite_presmodule->startrow();
10221         $kiriwrite_presmodule->addcell("tablecell1");
10222         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
10223         $kiriwrite_presmodule->endcell();
10224         $kiriwrite_presmodule->addcell("tablecell2");
10225         $kiriwrite_presmodule->addtext($settings_system_presentation);
10226         $kiriwrite_presmodule->endcell();
10227         $kiriwrite_presmodule->endrow();
10229         $kiriwrite_presmodule->startrow();
10230         $kiriwrite_presmodule->addcell("tablecell1");
10231         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
10232         $kiriwrite_presmodule->endcell();
10233         $kiriwrite_presmodule->addcell("tablecell2");
10234         $kiriwrite_presmodule->addtext($settings_system_database);
10235         $kiriwrite_presmodule->endcell();
10236         $kiriwrite_presmodule->endrow();
10238         $kiriwrite_presmodule->endtable();
10240         $kiriwrite_presmodule->addlinebreak();
10241         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{altersettings});
10243         return $kiriwrite_presmodule->grab();
10247 sub kiriwrite_settings_edit{
10248 #################################################################################
10249 # kiriwrite_settings_edit: Edits the options.                                   #
10250 #                                                                               #
10251 # Usage:                                                                        #
10252 #                                                                               #
10253 # kiriwrite_settings_edit(options);                                             #
10254 #                                                                               #
10255 # options               Specifies the following options in any order.           #
10256 #                                                                               #
10257 # DatabaseDirectory     Specifies the new database directory to use.            #
10258 # OutputDirectory       Specifies the new output directory to use.              #
10259 # ImagesURIPath         Specifies the new URI path for images.                  #
10260 # DateTimeFormat        Specifies the new date and time format.                 #
10261 # SystemLanguage        Specifies the new language to use for Kiriwrite.        #
10262 # PrsentationModule     Specifies the new presentation module to use for        #
10263 #                       Kiriwrite.                                              #
10264 # DatabaseModule        Specifies the new database module to use for Kiriwrite. #
10265 #                                                                               #
10266 # Options for server-based database modules.                                    #
10267 #                                                                               #
10268 # DatabaseServer        Specifies the database server to use.                   #
10269 # DaravasePort          Specifies the port the database server is running on.   #
10270 # DatabaseProtocol      Specifies the protocol the database server is using.    #
10271 # DatabaseSQLDatabase   Specifies the SQL database name to use.                 #
10272 # DatabaseUsername      Specifies the database server username.                 #
10273 # DatabasePasswordKeep  Keeps the current password in the configuration file.   #
10274 # DatabasePassword      Specifies the password for the database server username.#
10275 # DatabaseTablePrefix   Specifies the prefix used for tables.                   #
10276 #################################################################################
10278         # Get the values that have been passed to the subroutine.
10280         my ($passedoptions) = @_;
10282         # Get the values from the hash.
10284         my $settings_dbdirectory                = $passedoptions->{"DatabaseDirectory"};
10285         my $settings_outputdirectory            = $passedoptions->{"OutputDirectory"};
10286         my $settings_imagesuri                  = $passedoptions->{"ImagesURIPath"};
10287         my $settings_datetimeformat             = $passedoptions->{"DateTimeFormat"};
10288         my $settings_languagesystem             = $passedoptions->{"SystemLanguage"};
10289         my $settings_presmodule                 = $passedoptions->{"PresentationModule"};
10290         my $settings_dbmodule                   = $passedoptions->{"DatabaseModule"};
10292         my $settings_database_server            = $passedoptions->{"DatabaseServer"};
10293         my $settings_database_port              = $passedoptions->{"DatabasePort"};
10294         my $settings_database_protocol          = $passedoptions->{"DatabaseProtocol"};
10295         my $settings_database_sqldatabase       = $passedoptions->{"DatabaseSQLDatabase"};
10296         my $settings_database_username          = $passedoptions->{"DatabaseUsername"};
10297         my $settings_database_passwordkeep      = $passedoptions->{"DatabasePasswordKeep"};
10298         my $settings_database_password          = $passedoptions->{"DatabasePassword"};
10299         my $settings_database_tableprefix       = $passedoptions->{"DatabaseTablePrefix"};
10301         my $confirm                             = $passedoptions->{"Confirm"};
10303         if (!$confirm){
10305                 # If the confirm value is blank, then set the confirm
10306                 # value to 0.
10308                 $confirm = 0;
10310         }
10312         if ($confirm eq "1"){
10314                 # The action to edit the settings has been confirmed.
10315                 # Start by checking each variable about to be placed
10316                 # in the settings file is valid.
10318                 # Deinfe some variables for later.
10320                 my @kiriwrite_new_settings;
10322                 # Check the length of the directory names.
10324                 kiriwrite_variablecheck($settings_dbdirectory, "maxlength", 64, 0);
10325                 kiriwrite_variablecheck($settings_outputdirectory, "maxlength", 64, 0);
10326                 kiriwrite_variablecheck($settings_imagesuri, "maxlength", 512, 0);
10327                 kiriwrite_variablecheck($settings_datetimeformat, "maxlength", 32, 0);
10329                 kiriwrite_variablecheck($settings_languagesystem, "language_filename", "", 0);
10331                 # Check the module names to see if they're valid.
10333                 my $kiriwrite_presmodule_modulename_check       = kiriwrite_variablecheck($settings_presmodule, "module", 0, 1);
10334                 my $kiriwrite_dbmodule_modulename_check         = kiriwrite_variablecheck($settings_dbmodule, "module", 0, 1);
10336                 if ($kiriwrite_presmodule_modulename_check eq 1){
10338                         # The presentation module name is blank, so return
10339                         # an error.
10341                         kiriwrite_error("presmoduleblank");
10343                 }
10345                 if ($kiriwrite_presmodule_modulename_check eq 2){
10347                         # The presentation module name is invalid, so return
10348                         # an error.
10350                         kiriwrite_error("presmoduleinvalid");
10352                 }
10354                 if ($kiriwrite_dbmodule_modulename_check eq 1){
10356                         # The database module name is blank, so return
10357                         # an error.
10359                         kiriwrite_error("dbmoduleblank");
10361                 }
10363                 if ($kiriwrite_dbmodule_modulename_check eq 2){
10365                         # The database module name is invalid, so return
10366                         # an error.
10368                         kiriwrite_error("dbmoduleinvalid");
10370                 }
10372                 # Check if the directory names only contain letters and numbers and
10373                 # return a specific error if they don't.
10375                 my $kiriwrite_dbdirectory_check         = kiriwrite_variablecheck($settings_dbdirectory, "directory", 0, 1);
10376                 my $kiriwrite_outputdirectory_check     = kiriwrite_variablecheck($settings_outputdirectory, "directory", 0, 1);
10377                 kiriwrite_variablecheck($settings_datetimeformat, "datetime", 0, 0);
10379                 if ($kiriwrite_dbdirectory_check eq 1){
10381                         # The database directory name is blank, so return
10382                         # an error.
10384                         kiriwrite_error("dbdirectoryblank");
10386                 } elsif ($kiriwrite_dbdirectory_check eq 2){
10388                         # The database directory name is invalid, so return
10389                         # an error.
10391                         kiriwrite_error("dbdirectoryinvalid");
10393                 }
10395                 if ($kiriwrite_outputdirectory_check eq 1){
10397                         # The output directory name is blank, so return
10398                         # an error.
10400                         kiriwrite_error("outputdirectoryblank");
10402                 } elsif ($kiriwrite_outputdirectory_check eq 2){
10404                         # The output directory name is invalid, so return
10405                         # an error.
10407                         kiriwrite_error("outputdirectoryinvalid");
10409                 }
10411                 # Check if the presentation module with the filename given exists.
10413                 my $presmodule_exists = kiriwrite_fileexists("Modules/Presentation/" . $settings_presmodule . ".pm");
10415                 if ($presmodule_exists eq 1){
10417                         # The presentation module does not exist so return an error.
10419                         kiriwrite_error("presmodulemissing");
10421                 }
10423                 # Check if the database module with the filename given exists.
10425                 my $dbmodule_exists = kiriwrite_fileexists("Modules/Database/" . $settings_dbmodule . ".pm");
10427                 if ($dbmodule_exists eq 1){
10429                         # The database module does not exist so return an error.
10431                         kiriwrite_error("dbmodulemissing");
10433                 }
10435                 # Check if the language filename given exists.
10437                 my $languagefile_exists = kiriwrite_fileexists("lang/" . $settings_languagesystem . ".xml");
10439                 if ($languagefile_exists eq 1){
10441                         # The language filename given does not exist so return an error.
10443                         kiriwrite_error("languagefilenamemissing");             
10445                 }
10447                 # Check the database server options to see if they are valid.
10449                 my $kiriwrite_databaseserver_length_check               = kiriwrite_variablecheck($settings_database_server, "maxlength", 128, 1);
10450                 my $kiriwrite_databaseserver_lettersnumbers_check       = kiriwrite_variablecheck($settings_database_server, "lettersnumbers", 0, 1);
10451                 my $kiriwrite_databaseport_length_check                 = kiriwrite_variablecheck($settings_database_port, "maxlength", 5, 1);
10452                 my $kiriwrite_databaseport_numbers_check                = kiriwrite_variablecheck($settings_database_port, "numbers", 0, 1);
10453                 my $kiriwrite_databaseport_port_check                   = kiriwrite_variablecheck($settings_database_port, "port", 0, 1);
10454                 my $kiriwrite_databaseprotocol_length_check             = kiriwrite_variablecheck($settings_database_protocol, "maxlength", 5, 1);
10455                 my $kiriwrite_databaseprotocol_protocol_check           = kiriwrite_variablecheck($settings_database_protocol, "serverprotocol", 0, 1);
10456                 my $kiriwrite_databasename_length_check                 = kiriwrite_variablecheck($settings_database_sqldatabase, "maxlength", 32, 1);
10457                 my $kiriwrite_databasename_lettersnumbers_check         = kiriwrite_variablecheck($settings_database_sqldatabase, "lettersnumbers", 0, 1);
10458                 my $kiriwrite_databaseusername_length_check             = kiriwrite_variablecheck($settings_database_username, "maxlength", 16, 1);
10459                 my $kiriwrite_databaseusername_lettersnumbers_check     = kiriwrite_variablecheck($settings_database_username, "lettersnumbers", 0, 1);
10460                 my $kiriwrite_databasepassword_length_check             = kiriwrite_variablecheck($settings_database_password, "maxlength", 64, 1);
10461                 my $kiriwrite_databasetableprefix_length_check          = kiriwrite_variablecheck($settings_database_tableprefix, "maxlength", 16, 1);
10462                 my $kiriwrite_databasetableprefix_lettersnumbers_check  = kiriwrite_variablecheck($settings_database_tableprefix, "lettersnumbers", 0, 1);
10464                 if ($kiriwrite_databaseserver_length_check eq 1){
10466                         # The length of the database server name is too long so
10467                         # return an error.
10469                         kiriwrite_error("servernametoolong");
10471                 }
10473                 if ($kiriwrite_databaseserver_lettersnumbers_check eq 1){
10475                         # The database server name contains characters other
10476                         # than letters and numbers, so return an error.
10478                         kiriwrite_error("servernameinvalid");
10480                 }
10482                 if ($kiriwrite_databaseport_length_check eq 1){
10484                         # The database port number length is too long so return
10485                         # an error.
10487                         kiriwrite_error("serverportnumbertoolong");
10489                 }
10491                 if ($kiriwrite_databaseport_numbers_check eq 1){
10493                         # The database port number contains characters other
10494                         # than numbers so return an error.
10496                         kiriwrite_error("serverportnumberinvalidcharacters");
10498                 }
10500                 if ($kiriwrite_databaseport_port_check eq 1){
10502                         # The database port number given is invalid so return
10503                         # an error.
10505                         kiriwrite_error("serverportnumberinvalid");
10507                 }
10509                 if ($kiriwrite_databaseprotocol_length_check eq 1){
10511                         # The database protocol name given is too long so
10512                         # return an error.
10514                         kiriwrite_error("serverprotocolnametoolong");
10516                 }
10518                 if ($kiriwrite_databaseprotocol_protocol_check eq 1){
10520                         # The server protcol given is invalid so return
10521                         # an error.
10523                         kiriwrite_error("serverprotocolinvalid");
10525                 }
10527                 if ($kiriwrite_databasename_length_check eq 1){
10529                         # The SQL database name is too long so return
10530                         # an error.
10532                         kiriwrite_error("serverdatabasenametoolong");
10534                 }
10536                 if ($kiriwrite_databasename_lettersnumbers_check eq 1){
10538                         # The database name contains invalid characters
10539                         # so return an error.
10541                         kiriwrite_error("serverdatabasenameinvalid");
10543                 }
10545                 if ($kiriwrite_databaseusername_length_check eq 1){
10547                         # The database username given is too long so
10548                         # return an error.
10550                         kiriwrite_error("serverdatabaseusernametoolong");
10552                 }
10554                 if ($kiriwrite_databaseusername_lettersnumbers_check eq 1){
10556                         # The database username contains invalid characters
10557                         # so return an error.
10559                         kiriwrite_error("serverdatabaseusernameinvalid");
10561                 }
10563                 if ($kiriwrite_databasepassword_length_check eq 1){
10565                         # The database password given is too long so return
10566                         # an error.
10568                         kiriwrite_error("serverdatabasepasswordtoolong");
10570                 }
10572                 if ($kiriwrite_databasetableprefix_length_check eq 1){
10574                         # The database table prefix given is too long so
10575                         # return an error.
10577                         kiriwrite_error("serverdatabasetableprefixtoolong");
10579                 }
10581                 if ($kiriwrite_databasetableprefix_lettersnumbers_check eq 1){
10583                         # The database table prefix given contains invalid
10584                         # characters so return an error.
10586                         kiriwrite_error("serverdatabasetableprefixinvalid");
10588                 }
10590                 # Check if the current password should be kept.
10592                 if ($settings_database_passwordkeep eq "on"){
10594                         # The current password in the configuration file should be used.
10596                         $settings_database_password     = $kiriwrite_config{"database_password"};
10598                 }
10600                 # Write the new settings to the XML file.
10602                 kiriwrite_output_xml("kiriwrite.xml", "config", { DatabaseDirectory => $settings_dbdirectory, OutputDirectory => $settings_outputdirectory, ImagesURIPath => $settings_imagesuri, DateTimeFormat => $settings_datetimeformat, SystemLanguage => $settings_languagesystem, PresentationModule => $settings_presmodule, DatabaseModule => $settings_dbmodule, DatabaseServer => $settings_database_server, DatabasePort => $settings_database_port, DatabaseProtocol => $settings_database_protocol, DatabaseSQLDatabase => $settings_database_sqldatabase, DatabaseUsername => $settings_database_username, DatabasePassword => $settings_database_password, DatabaseTablePrefix => $settings_database_tableprefix });
10604                 # Write a confirmation message.
10606                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingsedited}, { Style => "pageheader" });
10607                 $kiriwrite_presmodule->addlinebreak();
10608                 $kiriwrite_presmodule->addlinebreak();
10609                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingseditedmessage});
10610                 $kiriwrite_presmodule->addlinebreak();
10611                 $kiriwrite_presmodule->addlinebreak();
10612                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
10614                 return $kiriwrite_presmodule->grab();
10616         }
10618         # Get the list of languages available.
10620         my %language_list;
10621         my @language_directory          = "";
10622         my $language;
10623         my $language_filename           = "";
10624         my $language_file_xml           = "";
10625         my $language_file_systemname    = "";
10626         my $language_file_localname     = "";
10627         my $language_file_seek          = 0;
10628         my $language_flie_dot           = 0;
10629         my $language_file_length        = 0;
10630         my $language_file_count         = 0;
10631         my $language_file_char          = "";
10632         my $language_file_friendly      = "";
10633         my $language_config             = $kiriwrite_config{"system_language"};
10635         tie(%language_list, 'Tie::IxHash');
10637         opendir(LANGUAGEDIR, "lang");
10638         @language_directory = grep /m*\.xml$/, readdir(LANGUAGEDIR);
10639         closedir(LANGUAGEDIR);
10641         # Process each language by loading the XML configuration file
10642         # used for each language and then get the System name and 
10643         # the local name of the language.
10645         foreach $language_filename (@language_directory){
10647                 # Load the language file currently selected.
10649                 $language_file_xml = $xsl->XMLin("lang" . '/' . $language_filename, SuppressEmpty => 1);
10651                 # Get the system name and the local name of the language.
10653                 $language_file_localname = $language_file_xml -> {about} -> {name};
10655                 # Check if either the system name or the local name of the language
10656                 # is blank and if it is, then don't add the language to the list.
10658                 if ($language_file_localname eq ""){
10660                         # The system name or the local name is blank so don't add
10661                         # the language to the list.
10662                 
10663                 } else {
10665                         # Get the 'friendly' name of the language file name (basically
10666                         # remove the .xml part from the filename.
10668                         $language_file_length = length($language_filename);
10670                         do {
10672                                 # Get a character from the language filename and currently
10673                                 # set by the seek counter.
10675                                 $language_file_char = substr($language_filename, $language_file_seek, 1);
10677                                 # Check if the character is a dot and if it is then set the
10678                                 # last dot value to the seek counter value.
10680                                 if ($language_file_char eq "."){
10682                                         # Current chatacter is a dot so set the last dot value 
10683                                         # to what is currently the seek counter.
10685                                         $language_flie_dot = $language_file_seek;
10687                                 } else {
10689                                         # Current character is not a dot, so do nothing.
10691                                 }
10693                                 # Increment the seek counter.
10695                                 $language_file_seek++;
10697                         } until ($language_file_seek eq $language_file_length);
10699                         # Reset the seek counter.
10701                         $language_file_seek = 0;
10703                         # Process the file name again and this time process the file
10704                         # name until it reaches the last dot found.
10706                         do {
10708                                 # Get the character the seek counter is currently set at.
10710                                 $language_file_char = substr($language_filename, $language_file_seek, 1);
10712                                 # Append the character to the friendly file name.
10714                                 $language_file_friendly = $language_file_friendly . $language_file_char;
10716                                 # Increment the seek counter.
10717         
10718                                 $language_file_seek++;
10720                         } until ($language_file_seek eq $language_flie_dot);
10722                         # Append the language to the available languages list.
10724                         $language_list{$language_file_count}{Filename} = $language_file_friendly;
10725                         $language_list{$language_file_count}{Name} = $language_file_localname;
10726                         $language_file_count++;
10728                         # Reset certain counters and values before continuing.
10730                         $language_file_seek     = 0;
10731                         $language_flie_dot      = 0;
10732                         $language_file_length   = 0;
10733                         $language_file_char     = "";
10734                         $language_file_friendly = "";
10736                 }
10738         }
10740         # Get the list of presentation modules available.
10742         my %presmodule_list;
10743         my @presmodule_directory;
10744         my $presmodule;
10745         my $presmodule_file             = "";
10746         my $presmodule_char             = "";
10747         my $presmodule_dot              = 0;
10748         my $presmodule_firstdot         = 0;
10749         my $presmodule_firstdotfound    = "";
10750         my $presmodule_seek             = 0;
10751         my $presmodule_length           = 0;
10752         my $presmodule_count            = 0;
10753         my $presmodule_friendly         = "";
10754         my $presmodule_selectlist       = "";
10755         my $presmodule_config           = $kiriwrite_config{"system_presmodule"};
10757         # Open and get the list of presentation modules (perl modules) by filtering
10758         # out the 
10760         opendir(OUTPUTSYSTEMDIR, "Modules/Presentation");
10761         @presmodule_directory = grep /m*\.pm$/, readdir(OUTPUTSYSTEMDIR);
10762         closedir(OUTPUTSYSTEMDIR);
10764         # Process each presentation module and add them to the list of available
10765         # presentation modules.
10767         foreach $presmodule_file (@presmodule_directory){
10769                 # Get the length of the presentation module (perl module) filename.
10771                 $presmodule_length = length($presmodule_file);
10773                 # Get the friendly name of the Perl module (by getting rid of the
10774                 # .pm part of the filename).
10776                 do {
10778                         $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10780                         # Check if the current character is a dot and if it is then
10781                         # set the last dot found number to the current seek number.
10783                         if ($presmodule_char eq "."){
10785                                 # Put the seek value as the last dot found number.
10787                                 $presmodule_dot = $presmodule_seek;
10789                         }
10791                         # Increment the seek counter.
10793                         $presmodule_seek++;
10795                 } until ($presmodule_seek eq $presmodule_length);
10797                 # Reset the seek counter as it is going to be used again.
10799                 $presmodule_seek = 0;
10801                 # Get the friendly name of the Perl module by the processing the file
10802                 # name to the last dot the previous 'do' tried to find.
10804                 do {
10806                         # Get the character the seek counter is currently set at.
10808                         $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10810                         # Append the character to the friendly name of the presentation module.
10812                         $presmodule_friendly = $presmodule_friendly . $presmodule_char;
10814                         # Increment the seek counter.
10816                         $presmodule_seek++;
10818                 } until ($presmodule_seek eq $presmodule_dot);
10820                 # Append the option to tbe list of available presentation modules.
10822                 $presmodule_list{$presmodule_count}{Filename} = $presmodule_friendly;
10824                 # Reset the following values.
10826                 $presmodule_seek        = 0;
10827                 $presmodule_length      = 0;
10828                 $presmodule_char        = "";
10829                 $presmodule_friendly    = "";
10830                 $presmodule_count++;
10832         }
10834         # Get the list of database modules available.
10836         my %dbmodule_list;
10837         my @dbmodule_directory;
10838         my $dbmodule;
10839         my $dbmodule_file               = "";
10840         my $dbmodule_char               = "";
10841         my $dbmodule_dot                = 0;
10842         my $dbmodule_firstdot           = 0;
10843         my $dbmodule_firstdotfound      = "";
10844         my $dbmodule_seek               = 0;
10845         my $dbmodule_length             = 0;
10846         my $dbmodule_count              = 0;
10847         my $dbmodule_friendly           = "";
10848         my $dbmodule_selectlist         = "";
10849         my $dbmodule_config             = $kiriwrite_config{"system_dbmodule"};
10851         # Open and get the list of presentation modules (perl modules) by filtering
10852         # out the 
10854         opendir(DATABASEDIR, "Modules/Database");
10855         @dbmodule_directory = grep /m*\.pm$/, readdir(DATABASEDIR);
10856         closedir(DATABASEDIR);
10858         # Process each presentation module and add them to the list of available
10859         # presentation modules.
10861         foreach $dbmodule_file (@dbmodule_directory){
10863                 # Get the length of the database module (perl module) filename.
10865                 $dbmodule_length = length($dbmodule_file);
10867                 # Get the friendly name of the Perl module (by getting rid of the
10868                 # .pm part of the filename).
10870                 do {
10872                         $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10874                         # Check if the current character is a dot and if it is then
10875                         # set the last dot found number to the current seek number.
10877                         if ($dbmodule_char eq "."){
10879                                 # Put the seek value as the last dot found number.
10881                                 $dbmodule_dot = $dbmodule_seek;
10883                         }
10885                         # Increment the seek counter.
10887                         $dbmodule_seek++;
10889                 } until ($dbmodule_seek eq $dbmodule_length);
10891                 # Reset the seek counter as it is going to be used again.
10893                 $dbmodule_seek = 0;
10895                 # Get the friendly name of the Perl module by the processing the file
10896                 # name to the last dot the previous 'do' tried to find.
10898                 do {
10900                         # Get the character the seek counter is currently set at.
10902                         $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10904                         # Append the character to the friendly name of the presentation module.
10906                         $dbmodule_friendly = $dbmodule_friendly . $dbmodule_char;
10908                         # Increment the seek counter.
10910                         $dbmodule_seek++;
10912                 } until ($dbmodule_seek eq $dbmodule_dot);
10914                 # Append the option to tbe list of available database modules.
10916                 $dbmodule_list{$dbmodule_count}{Filename} = $dbmodule_friendly;
10918                 # Reset the following values.
10920                 $dbmodule_seek  = 0;
10921                 $dbmodule_length        = 0;
10922                 $dbmodule_char          = "";
10923                 $dbmodule_friendly      = "";
10924                 $dbmodule_count++;
10926         }
10928         # Get the directory settings.
10930         my $directory_settings_database         = $kiriwrite_config{"directory_data_db"};
10931         my $directory_settings_output           = $kiriwrite_config{"directory_data_output"};
10932         my $directory_settings_imagesuri        = $kiriwrite_config{"directory_noncgi_images"};
10933         my $datetime_setting                    = $kiriwrite_config{"system_datetime"};
10935         my $database_server                     = $kiriwrite_config{"database_server"};
10936         my $database_port                       = $kiriwrite_config{"database_port"};
10937         my $database_protocol                   = $kiriwrite_config{"database_protocol"};
10938         my $database_sqldatabase                = $kiriwrite_config{"database_sqldatabase"};
10939         my $database_username                   = $kiriwrite_config{"database_username"};
10940         my $database_passwordhash               = $kiriwrite_config{"database_passwordhash"};
10941         my $database_password                   = $kiriwrite_config{"database_password"};
10942         my $database_prefix                     = $kiriwrite_config{"database_tableprefix"};
10944         # Print out a form for editing the settings.
10946         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{editsettings}, { Style => "pageheader" });
10947         $kiriwrite_presmodule->addlinebreak();
10948         $kiriwrite_presmodule->addlinebreak();
10949         $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{setting}->{warning});
10950         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{warningmessage});
10951         $kiriwrite_presmodule->addlinebreak();
10952         $kiriwrite_presmodule->addlinebreak();
10954         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
10955         $kiriwrite_presmodule->startbox();
10956         $kiriwrite_presmodule->addhiddendata("mode", "settings");
10957         $kiriwrite_presmodule->addhiddendata("action", "edit");
10958         $kiriwrite_presmodule->addhiddendata("confirm", 1);
10960         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10962         $kiriwrite_presmodule->startheader();
10963         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10964         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10965         $kiriwrite_presmodule->endheader();
10967         $kiriwrite_presmodule->startrow();
10968         $kiriwrite_presmodule->addcell("tablecellheader");
10969         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10970         $kiriwrite_presmodule->endcell();
10971         $kiriwrite_presmodule->addcell("tablecellheader");
10972         $kiriwrite_presmodule->endcell();
10973         $kiriwrite_presmodule->endrow();
10975         $kiriwrite_presmodule->startrow();
10976         $kiriwrite_presmodule->addcell("tablecell1");
10977         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10978         $kiriwrite_presmodule->endcell();
10979         $kiriwrite_presmodule->addcell("tablecell2");
10980         $kiriwrite_presmodule->addinputbox("databasedir", { Size => 32, MaxLength => 64, Value => $directory_settings_database });
10981         $kiriwrite_presmodule->endcell();
10982         $kiriwrite_presmodule->endrow();
10984         $kiriwrite_presmodule->startrow();
10985         $kiriwrite_presmodule->addcell("tablecell1");
10986         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
10987         $kiriwrite_presmodule->endcell();
10988         $kiriwrite_presmodule->addcell("tablecell2");
10989         $kiriwrite_presmodule->addinputbox("outputdir", { Size => 32, MaxLength => 64, Value => $directory_settings_output });
10990         $kiriwrite_presmodule->endcell();
10991         $kiriwrite_presmodule->endrow();
10993         $kiriwrite_presmodule->startrow();
10994         $kiriwrite_presmodule->addcell("tablecell1");
10995         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
10996         $kiriwrite_presmodule->endcell();
10997         $kiriwrite_presmodule->addcell("tablecell2");
10998         $kiriwrite_presmodule->addinputbox("imagesuripath", { Size => 32, MaxLength => 64, Value => $directory_settings_imagesuri });
10999         $kiriwrite_presmodule->endcell();
11000         $kiriwrite_presmodule->endrow();
11002         $kiriwrite_presmodule->startrow();
11003         $kiriwrite_presmodule->addcell("tablecellheader");
11004         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
11005         $kiriwrite_presmodule->endcell();
11006         $kiriwrite_presmodule->addcell("tablecellheader");
11007         $kiriwrite_presmodule->endcell();
11008         $kiriwrite_presmodule->endrow();
11010         $kiriwrite_presmodule->startrow();
11011         $kiriwrite_presmodule->addcell("tablecell1");
11012         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
11013         $kiriwrite_presmodule->endcell();
11014         $kiriwrite_presmodule->addcell("tablecell2");
11015         $kiriwrite_presmodule->addinputbox("datetime", { Size => 32, MaxLength => 64, Value => $datetime_setting });
11016         $kiriwrite_presmodule->addlinebreak();
11017         $kiriwrite_presmodule->addlinebreak();
11018         $kiriwrite_presmodule->startbox("datalist");
11020         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleday});
11021         $kiriwrite_presmodule->addlinebreak();
11022         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleday});
11023         $kiriwrite_presmodule->addlinebreak();
11024         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlemonth});
11025         $kiriwrite_presmodule->addlinebreak();
11026         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublemonth});
11027         $kiriwrite_presmodule->addlinebreak();
11028         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleyear});
11029         $kiriwrite_presmodule->addlinebreak();
11030         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleyear});
11031         $kiriwrite_presmodule->addlinebreak();
11032         $kiriwrite_presmodule->addlinebreak();
11033         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlehour});
11034         $kiriwrite_presmodule->addlinebreak();
11035         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublehour});
11036         $kiriwrite_presmodule->addlinebreak();
11037         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleminute});
11038         $kiriwrite_presmodule->addlinebreak();
11039         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleminute});
11040         $kiriwrite_presmodule->addlinebreak();
11041         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlesecond});
11042         $kiriwrite_presmodule->addlinebreak();
11043         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublesecond});
11044         $kiriwrite_presmodule->addlinebreak();
11045         $kiriwrite_presmodule->addlinebreak();
11046         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{othercharacters});
11047         $kiriwrite_presmodule->endbox();
11048         $kiriwrite_presmodule->endcell();
11049         $kiriwrite_presmodule->endrow();
11051         $kiriwrite_presmodule->startrow();
11052         $kiriwrite_presmodule->addcell("tablecellheader");
11053         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
11054         $kiriwrite_presmodule->endcell();
11055         $kiriwrite_presmodule->addcell("tablecellheader");
11056         $kiriwrite_presmodule->endcell();
11057         $kiriwrite_presmodule->endrow();
11059         $kiriwrite_presmodule->startrow();
11060         $kiriwrite_presmodule->addcell("tablecell1");
11061         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
11062         $kiriwrite_presmodule->endcell();
11063         $kiriwrite_presmodule->addcell("tablecell2");
11065         $kiriwrite_presmodule->addselectbox("language");
11067         # Process the list of available languages.
11069         foreach $language (keys %language_list){
11071                 # Check if the language filename matches the filename in the configuration
11072                 # file.
11074                 if ($language_list{$language}{Filename} eq $language_config){
11076                         $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} , Selected => 1 });
11078                 } else {
11080                         $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} });
11082                 }
11084         }
11086         $kiriwrite_presmodule->endselectbox();
11088         $kiriwrite_presmodule->startrow();
11089         $kiriwrite_presmodule->addcell("tablecellheader");
11090         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
11091         $kiriwrite_presmodule->endcell();
11092         $kiriwrite_presmodule->addcell("tablecellheader");
11093         $kiriwrite_presmodule->endcell();
11094         $kiriwrite_presmodule->endrow();
11096         $kiriwrite_presmodule->startrow();
11097         $kiriwrite_presmodule->addcell("tablecell1");
11098         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
11099         $kiriwrite_presmodule->endcell();
11100         $kiriwrite_presmodule->addcell("tablecell2");
11102         $kiriwrite_presmodule->addselectbox("presmodule");
11104         # Process the list of available presentation modules.
11106         foreach $presmodule (keys %presmodule_list){
11108                 # Check if the presentation module fileanme matches the filename in the 
11109                 # configuration file.
11111                 if ($presmodule_list{$presmodule}{Filename} eq $presmodule_config){
11113                         $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} , Selected => 1 });
11115                 } else {
11117                         $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} });
11119                 }
11121         }
11123         $kiriwrite_presmodule->endselectbox();
11125         $kiriwrite_presmodule->endcell();
11126         $kiriwrite_presmodule->endrow();
11128         $kiriwrite_presmodule->startrow();
11129         $kiriwrite_presmodule->addcell("tablecell1");
11130         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
11131         $kiriwrite_presmodule->endcell();
11132         $kiriwrite_presmodule->addcell("tablecell2");
11134         # Process the list of available database modules.
11136         $kiriwrite_presmodule->addselectbox("dbmodule");
11138         foreach $dbmodule (keys %dbmodule_list){
11140                 # Check if the database module fileanme matches the filename in the 
11141                 # configuration file.
11143                 if ($dbmodule_list{$dbmodule}{Filename} eq $dbmodule_config){
11145                         $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} , Selected => 1 });
11147                 } else {
11149                         $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} });
11151                 }
11154         }
11156         $kiriwrite_presmodule->endselectbox();
11158         $kiriwrite_presmodule->endcell();
11159         $kiriwrite_presmodule->endrow();
11161         $kiriwrite_presmodule->startrow();
11162         $kiriwrite_presmodule->addcell("tablecell1");
11163         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseserver});
11164         $kiriwrite_presmodule->endcell();
11165         $kiriwrite_presmodule->addcell("tablecell2");
11166         $kiriwrite_presmodule->addinputbox("database_server", { Size => 32, MaxLength => 128, Value => $database_server });
11167         $kiriwrite_presmodule->endcell();
11168         $kiriwrite_presmodule->endrow();
11170         $kiriwrite_presmodule->startrow();
11171         $kiriwrite_presmodule->addcell("tablecell1");
11172         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseport});
11173         $kiriwrite_presmodule->endcell();
11174         $kiriwrite_presmodule->addcell("tablecell2");
11175         $kiriwrite_presmodule->addinputbox("database_port", { Size => 5, MaxLength => 5, Value => $database_port });
11176         $kiriwrite_presmodule->endcell();
11177         $kiriwrite_presmodule->endrow();
11179         $kiriwrite_presmodule->startrow();
11180         $kiriwrite_presmodule->addcell("tablecell1");
11181         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseprotocol});
11182         $kiriwrite_presmodule->endcell();
11183         $kiriwrite_presmodule->addcell("tablecell2");
11185         # Check if TCP is being used.
11187         $kiriwrite_presmodule->addselectbox("database_protocol");
11189         if ($database_protocol eq "tcp"){
11191                 # The TCP protocol is selected so have the TCP option selected.
11193                 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp", Selected => 1});
11195         } else {
11197                 # The TCP protocol is not selected.
11199                 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp"});
11201         } 
11203         # Check if UDP is being used.
11205         if ($database_protocol eq "udp"){
11207                 # The UDP protocol is selected so have the UDP option selected.
11209                 $kiriwrite_presmodule->addoption("UDP", { Value => "udp", Selected => 1});
11211         } else {
11213                 # The UDP protocol is not selected.
11215                 $kiriwrite_presmodule->addoption("UDP", { Value => "udp"});
11217         }
11219         $kiriwrite_presmodule->endselectbox();
11221         $kiriwrite_presmodule->endcell();
11222         $kiriwrite_presmodule->endrow();
11224         $kiriwrite_presmodule->startrow();
11225         $kiriwrite_presmodule->addcell("tablecell1");
11226         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasename});
11227         $kiriwrite_presmodule->endcell();
11228         $kiriwrite_presmodule->addcell("tablecell2");
11229         $kiriwrite_presmodule->addinputbox("database_sqldatabase", { Size => 32, MaxLength => 32, Value => $database_sqldatabase });
11230         $kiriwrite_presmodule->endcell();
11231         $kiriwrite_presmodule->endrow();
11233         $kiriwrite_presmodule->startrow();
11234         $kiriwrite_presmodule->addcell("tablecell1");
11235         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseusername});
11236         $kiriwrite_presmodule->endcell();
11237         $kiriwrite_presmodule->addcell("tablecell2");
11238         $kiriwrite_presmodule->addinputbox("database_username", { Size => 16, MaxLength => 16, Value => $database_username });
11239         $kiriwrite_presmodule->endcell();
11240         $kiriwrite_presmodule->endrow();
11242         $kiriwrite_presmodule->startrow();
11243         $kiriwrite_presmodule->addcell("tablecell1");
11244         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasepassword});
11245         $kiriwrite_presmodule->endcell();
11246         $kiriwrite_presmodule->addcell("tablecell2");
11247         $kiriwrite_presmodule->addinputbox("database_password", { Size => 16, MaxLength => 64, Password => 1 });
11248         $kiriwrite_presmodule->addtext(" ");
11249         $kiriwrite_presmodule->addcheckbox("database_password_keep", { OptionDescription => "Keep the current password", Checked => 1 });
11250         $kiriwrite_presmodule->endcell();
11251         $kiriwrite_presmodule->endrow();
11253         $kiriwrite_presmodule->startrow();
11254         $kiriwrite_presmodule->addcell("tablecell1");
11255         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{tableprefix});
11256         $kiriwrite_presmodule->endcell();
11257         $kiriwrite_presmodule->addcell("tablecell2");
11258         $kiriwrite_presmodule->addinputbox("database_tableprefix", { Size => 16, MaxLength => 16, Value => $database_prefix });
11259         $kiriwrite_presmodule->endcell();
11260         $kiriwrite_presmodule->endrow();
11262         $kiriwrite_presmodule->endtable();
11264         $kiriwrite_presmodule->addlinebreak();
11265         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{setting}->{changesettingsbutton});
11266         $kiriwrite_presmodule->addtext(" | ");
11267         $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
11268         $kiriwrite_presmodule->addtext(" | ");
11269         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
11270         $kiriwrite_presmodule->endbox();
11271         $kiriwrite_presmodule->endform();
11273         return $kiriwrite_presmodule->grab();
11277 sub kiriwrite_settings_load{
11278 #################################################################################
11279 # kiriwrite_settings_load: Load the configuration settings into the global      #
11280 # variables.                                                                    #
11281 #                                                                               #
11282 # Usage:                                                                        #
11283 #                                                                               #
11284 # kiriwrite_settings_load();                                                    #
11285 #################################################################################
11287         # Load the required Perl modules.
11289         use XML::Simple qw(XMLin);
11290         $xsl = XML::Simple->new();
11292         # Check if the Kiriwrite configuration file exists before using it and
11293         # return an critical error if it doesn't exist.
11295         my $kiriwrite_conf_exist = kiriwrite_fileexists("kiriwrite.xml");
11297         if ($kiriwrite_conf_exist eq 1){
11299                 # The configuration really does not exist so return an critical error.
11301                 kiriwrite_critical("configfilemissing");
11303         }
11305         # Check if the Kiriwrite configuration file has valid permission settings
11306         # before using it and return an critical error if it doesn't have the
11307         # valid permission settings.
11309         my $kiriwrite_conf_permissions = kiriwrite_filepermissions("kiriwrite.xml", 1, 0);
11311         if ($kiriwrite_conf_permissions eq 1){
11313                 # The permission settings for the Kiriwrite configuration file are
11314                 # invalid, so return an critical error.
11316                 kiriwrite_critical("configfileinvalidpermissions");
11318         }
11320         # Converts the XML file into meaningful data for later on in this subroutine.
11322         my $kiriwrite_conf_file = 'kiriwrite.xml';
11323         my $kiriwrite_conf_data = $xsl->XMLin($kiriwrite_conf_file, SuppressEmpty => 1);
11325         # Go and fetch the settings and place them into a hash (that is global).
11327         %kiriwrite_config = (
11329                 "directory_data_db"             => $kiriwrite_conf_data->{settings}->{directories}->{database},
11330                 "directory_data_output"         => $kiriwrite_conf_data->{settings}->{directories}->{output},
11331                 "directory_noncgi_images"       => $kiriwrite_conf_data->{settings}->{directories}->{images},
11333                 "system_language"               => $kiriwrite_conf_data->{settings}->{language}->{lang},
11334                 "system_presmodule"             => $kiriwrite_conf_data->{settings}->{system}->{presentation},
11335                 "system_dbmodule"               => $kiriwrite_conf_data->{settings}->{system}->{database},
11336                 "system_datetime"               => $kiriwrite_conf_data->{settings}->{system}->{datetime},
11338                 "database_server"               => $kiriwrite_conf_data->{settings}->{database}->{server},
11339                 "database_port"                 => $kiriwrite_conf_data->{settings}->{database}->{port},
11340                 "database_protocol"             => $kiriwrite_conf_data->{settings}->{database}->{protocol},
11341                 "database_sqldatabase"          => $kiriwrite_conf_data->{settings}->{database}->{database},
11342                 "database_username"             => $kiriwrite_conf_data->{settings}->{database}->{username},
11343                 "database_password"             => $kiriwrite_conf_data->{settings}->{database}->{password},
11344                 "database_tableprefix"          => $kiriwrite_conf_data->{settings}->{database}->{prefix}
11346         );
11348         # Do a validation check on all of the variables that were loaded into the global configuration hash.
11350         kiriwrite_variablecheck($kiriwrite_config{"directory_data_db"}, "maxlength", 64, 0);
11351         kiriwrite_variablecheck($kiriwrite_config{"directory_data_output"}, "maxlength", 64, 0);
11352         kiriwrite_variablecheck($kiriwrite_config{"directory_noncgi_images"}, "maxlength", 512, 0);
11353         kiriwrite_variablecheck($kiriwrite_config{"directory_data_template"}, "maxlength", 64, 0);
11355         my $kiriwrite_config_language_filename = kiriwrite_variablecheck($kiriwrite_config{"system_language"}, "language_filename", "", 1);
11356         my $kiriwrite_config_presmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_presmodule"}, "module", 0, 1);
11357         my $kiriwrite_config_dbmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_dbmodule"}, "module", 0, 1);
11359         # Check if the language filename is valid and return an critical error if
11360         # they aren't.
11362         if ($kiriwrite_config_language_filename eq 1){
11364                 # The language filename is blank so return an critical error.
11366                 kiriwrite_critical("languagefilenameblank");
11368         } elsif ($kiriwrite_config_language_filename eq 2){
11370                 # The language filename is invalid so return an critical error.
11372                 kiriwrite_critical("languagefilenameinvalid");
11374         }
11376         # Check if the presentation and database module names are valid and return a critical
11377         # error if they aren't.
11379         if ($kiriwrite_config_presmodule_filename eq 1){
11381                 # The presentation module filename given is blank so return an 
11382                 # critical error.
11384                 kiriwrite_critical("presmoduleblank");
11386         }
11388         if ($kiriwrite_config_presmodule_filename eq 2){
11390                 # The presentation module filename is invalid so return an
11391                 # critical error.
11393                 kiriwrite_critical("presmoduleinvalid");
11395         }
11397         if ($kiriwrite_config_dbmodule_filename eq 1){
11399                 # The database module filename given is blank so return an
11400                 # critical error.
11402                 kiriwrite_critical("dbmoduleblank");
11404         }
11406         if ($kiriwrite_config_dbmodule_filename eq 2){
11408                 # The database module filename given is invalid so return
11409                 # an critical error.
11411                 kiriwrite_critical("dbmoduleinvalid");
11413         }
11415         # Check if the language file does exist before loading it and return an critical error
11416         # if it does not exist.
11418         my $kiriwrite_config_language_fileexists = kiriwrite_fileexists("lang/" . $kiriwrite_config{"system_language"} . ".xml");
11420         if ($kiriwrite_config_language_fileexists eq 1){
11422                 # Language file does not exist so return an critical error.
11424                 kiriwrite_critical("languagefilemissing");
11426         }
11428         # Check if the language file has valid permission settings and return an critical error if
11429         # the language file has invalid permissions settings.
11431         my $kiriwrite_config_language_filepermissions = kiriwrite_filepermissions("lang/" . $kiriwrite_config{"system_language"} . ".xml", 1, 0);
11433         if ($kiriwrite_config_language_filepermissions eq 1){
11435                 # Language file contains invalid permissions so return an critical error.
11437                 kiriwrite_critical("languagefilepermissions");
11439         }
11441         # Load the language file.
11443         $kiriwrite_lang = $xsl->XMLin("lang/" . $kiriwrite_config{"system_language"} . ".xml", SuppressEmpty => 1);
11445         # Check if the presentation module does exist before loading it and return an critical error
11446         # if the presentation module does not exist.
11448         my $kiriwrite_config_presmodule_fileexists = kiriwrite_fileexists("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm");
11450         if ($kiriwrite_config_presmodule_fileexists eq 1){
11452                 # Presentation module does not exist so return an critical error.
11454                 kiriwrite_critical("presmodulemissing");
11456         }
11458         # Check if the presentation module does have the valid permission settings and return a
11459         # critical error if the presentation module contains invalid permission settings.
11461         my $kiriwrite_config_presmodule_permissions = kiriwrite_filepermissions("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm", 1, 0);
11463         if ($kiriwrite_config_presmodule_permissions eq 1){
11465                 # Presentation module contains invalid permissions so return an critical error.
11467                 kiriwrite_critical("presmoduleinvalidpermissions");
11469         }
11471         # Check if the database module does exist before loading it and return an critical error
11472         # if the database module does not exist.
11474         my $kiriwrite_config_dbmodule_fileexists = kiriwrite_fileexists("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm");
11476         if ($kiriwrite_config_dbmodule_fileexists eq 1){
11478                 # Database module does not exist so return an critical error.
11480                 kiriwrite_critical("dbmodulemissing");
11482         }
11484         # Check if the database module does have the valid permission settings and return an
11485         # critical error if the database module contains invalid permission settings.
11487         my $kiriwrite_config_dbmodule_permissions = kiriwrite_filepermissions("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm", 1, 0);
11489         if ($kiriwrite_config_dbmodule_permissions eq 1){
11491                 # Presentation module contains invalid permissions so return an critical error.
11493                 kiriwrite_critical("dbmoduleinvalidpermissions");
11495         }
11497         # Include the Modules directory.
11499         use lib "Modules/";
11501         # Load the presentation module.
11503         my $presmodulename = "Presentation::" . $kiriwrite_config{"system_presmodule"};
11504         ($presmodulename) = $presmodulename =~ m/^(.*)$/g;
11505         eval "use " . $presmodulename;
11506         $presmodulename = "Kiriwrite::Presentation::" . $kiriwrite_config{"system_presmodule"};
11507         $kiriwrite_presmodule = $presmodulename->new();
11509         # Load the database module.
11511         my $dbmodulename = "Database::" . $kiriwrite_config{"system_dbmodule"};
11512         ($dbmodulename) = $dbmodulename =~ m/^(.*)$/g;
11513         eval "use " . $dbmodulename;
11514         $dbmodulename = "Kiriwrite::Database::" . $kiriwrite_config{"system_dbmodule"};
11515         $kiriwrite_dbmodule = $dbmodulename->new();
11517         # Load the following settings to the database module.
11519         $kiriwrite_dbmodule->loadsettings({ Directory => $kiriwrite_config{"directory_data_db"}, DateTime => $kiriwrite_config{"system_datetime"}, Server => $kiriwrite_config{"database_server"}, Port => $kiriwrite_config{"database_port"}, Protocol => $kiriwrite_config{"database_protocol"}, Database => $kiriwrite_config{"database_sqldatabase"}, Username => $kiriwrite_config{"database_username"}, Password => $kiriwrite_config{"database_password"}, TablePrefix => $kiriwrite_config{"database_tableprefix"} });
11521         return;
11525 sub kiriwrite_variablecheck{
11526 #################################################################################
11527 # kiriwrite_variablecheck: Checks the variables for any invalid characters.     #
11528 #                                                                               #
11529 # Usage:                                                                        #
11530 #                                                                               #
11531 # kiriwrite_variablecheck(variable, type, length, noerror);                     #
11532 #                                                                               #
11533 # variable      Specifies the variable to be checked.                           #
11534 # type          Specifies what type the variable is.                            #
11535 # option        Specifies the maximum/minimum length of the variable            #
11536 #               (if minlength/maxlength is used) or if the filename should be   #
11537 #               checked to see if it is blank.                                  #
11538 # noerror       Specifies if Kiriwrite should return an error or not on         #
11539 #               certain values.                                                 #
11540 #################################################################################
11542         # Get the values that were passed to the subroutine.
11544         my ($variable_data, $variable_type, $variable_option, $variable_noerror) = @_;
11546         if ($variable_type eq "numbers"){
11548                 # Check for numbers and return an error if there is anything else than numebrs.
11550                 my $variable_data_validated = $variable_data;   # Copy the variable_data to variable_data_validated.
11551                 $variable_data_validated =~ tr/0-9//d;          # Take away all of the numbers and from the variable. 
11552                                                                 # If it only contains numbers then it should be blank.
11554                 if ($variable_data_validated eq ""){
11555                         # The validated variable is blank. So continue to the end of this section where the return function should be.
11556                 } else {
11557                         # The variable is not blank, so check if the no error value is set
11558                         # to 1 or not.
11560                         if ($variable_noerror eq 1){
11562                                 # The validated variable is not blank and the noerror
11563                                 # value is set to 1. So return an value of 1.
11564                                 # (meaning that the data is invalid).
11566                                 return 1;
11568                         } elsif ($variable_noerror eq 0) {
11570                                 # The validated variable is not blank and the noerror
11571                                 # value is set to 0.
11573                                 kiriwrite_error("invalidvariable");
11575                         } else {
11577                                 # The variable noerror value is something else
11578                                 # pther than 1 or 0. So return an error.
11580                                 kiriwrite_error("invalidvariable");
11582                         }
11584                 }
11586                 return 0;
11588         } elsif ($variable_type eq "lettersnumbers"){
11590                 # Check for letters and numbers and return an error if there is anything else other
11591                 # than letters and numbers.
11593                 my $variable_data_validated = $variable_data;   # Copy the variable_data to variable_data_validated
11594                 $variable_data_validated =~ tr/a-zA-Z0-9.//d;
11595                 $variable_data_validated =~ s/\s//g;
11597                 if ($variable_data_validated eq ""){
11598                         # The validated variable is blank. So continue to the end of this section where the return function should be.
11599                 } else {
11600                         # The variable is not blank, so check if the no error value is set
11601                         # to 1 or not.
11603                         if ($variable_noerror eq 1){
11605                                 # The validated variable is not blank and the noerror
11606                                 # value is set to 1. So return an value of 1.
11607                                 # (meaning that the data is invalid).
11609                                 return 1;
11611                         } elsif ($variable_noerror eq 0) {
11613                                 # The validated variable is not blank and the noerror
11614                                 # value is set to 0.
11616                                 kiriwrite_error("invalidvariable");
11618                         } else {
11620                                 # The variable noerror value is something else
11621                                 # pther than 1 or 0. So return an error.
11623                                 kiriwrite_error("invalidvariable");
11625                         }
11627                 }
11629                 return 0;
11631         } elsif ($variable_type eq "maxlength"){
11632                 # Check for the length of the variable, return an error if it is longer than the length specified.
11634                 # Check if the variable_data string is blank, if it is then set the variable_data_length
11635                 # to '0'.
11637                 my $variable_data_length = 0;
11639                 if (!$variable_data){
11641                         # Set variable_data_length to '0'.
11642                         $variable_data_length = 0;
11644                 } else {
11646                         # Get the length of the variable recieved.
11647                         $variable_data_length = length($variable_data);
11649                 }
11653                 if ($variable_data_length > $variable_option){
11655                         # The variable length is longer than it should be so check if
11656                         # the no error value is set 1.
11658                         if ($variable_noerror eq 1){
11660                                 # The no error value is set to 1, so return an
11661                                 # value of 1 (meaning tha the variable is
11662                                 # too long to be used).
11664                                 return 1;
11666                         } elsif ($variable_noerror eq 0){
11668                                 # The no error value is set to 0, so return
11669                                 # an error.
11671                                 kiriwrite_error("variabletoolong");
11673                         } else {
11675                                 # The no error value is something else other
11676                                 # than 0 or 1, so return an error.
11678                                 kiriwrite_error("variabletoolong");
11680                         }
11682                 } else {
11684                         # The variable length is exactly or shorter than specified, so continue to end of this section where
11685                         # the return function should be.
11687                 }
11689                 return 0;
11691         } elsif ($variable_type eq "blank"){
11692                 # Check if the variable is blank and if it is blank, then return an error.
11694                 if (!$variable_data){
11696                         # The variable data really is blank, so check what
11697                         # the no error value is set.
11699                         if ($variable_noerror eq 1){
11701                                 # The no error value is set to 1, so return
11702                                 # a value of 1 (saying that the variable was
11703                                 # blank).
11705                                 return 1;
11707                         } elsif ($variable_noerror eq 0){
11709                                 # The no error value is set to 0, so return
11710                                 # an error.
11712                                 kiriwrite_error("blankvariable");
11714                         } else {
11716                                 # The no error value is something else other
11717                                 # than 0 or 1, so return an error.
11719                                 kiriwrite_error("invalidvariable");
11721                         }
11723                 }
11725                 return 0;
11727         } elsif ($variable_type eq "filename"){
11728                 # Check for letters and numbers, if anything else than letters and numbers is there (including spaces) return
11729                 # an error.
11731                 # Check if the filename passed is blank, if it is then return with an error.
11733                 if ($variable_data eq ""){
11735                         # The filename specified is blank, so check what the
11736                         # noerror value is set.
11738                         if ($variable_noerror eq 1){
11740                                 # The no error value is set to 1 so return
11741                                 # a value of 1 (meaning that the filename
11742                                 # was blank).
11744                                 return 1;
11746                         } elsif ($variable_noerror eq 0){
11748                                 # The no error value is set to 1 so return
11749                                 # an error.
11751                                 kiriwrite_error("blankfilename");
11753                         } else {
11755                                 # The no error value is something else other
11756                                 # than 0 or 1, so return an error.
11758                                 kiriwrite_error("invalidvariable");
11760                         }
11762                 } else {
11765                 }
11767                 my $variable_data_validated = $variable_data;
11768                 $variable_data_validated =~ tr/a-zA-Z0-9\.//d;
11770                 # Check if the validated data variable is blank, if it is 
11771                 # then continue to the end of this section where the return 
11772                 # function should be, otherwise return an error.
11774                 if ($variable_data_validated eq ""){
11776                         # The validated data variable is blank, meaning that 
11777                         # it only contained letters and numbers.
11779                 } else {
11781                         # The validated data variable is not blank, meaning 
11782                         # that it contains something else, so return an error
11783                         # (or a value).
11785                         if ($variable_noerror eq 1){
11787                                 # The no error value is set to 1 so return
11788                                 # an value of 2. (meaning that the filename
11789                                 # is invalid).
11792                                 return 2;
11794                         } elsif ($variable_noerror eq 0){
11796                                 # The no error value is set to 0 so return
11797                                 # an error.
11799                                 kiriwrite_error("invalidfilename");
11801                         } else {
11803                                 # The no error value is something else other
11804                                 # than 0 or 1 so return an error.
11806                                 kiriwrite_error("invalidvariable");
11808                         }
11810                 }
11812                 return 0;
11814         } elsif ($variable_type eq "filenameindir"){
11815                 # Check if the filename is in the directory and return an
11816                 # error if it isn't.
11818                 if ($variable_data eq ""){
11820                         # The filename specified is blank, so check what the
11821                         # noerror value is set.
11823                         if ($variable_noerror eq 1){
11825                                 # The no error value is set to 1 so return
11826                                 # a value of 1 (meaning that the filename
11827                                 # was blank).
11829                                 return 1;
11831                         } elsif ($variable_noerror eq 0){
11833                                 # The no error value is set to 1 so return
11834                                 # an error.
11836                                 kiriwrite_error("blankfilename");
11838                         } else {
11840                                 # The no error value is something else other
11841                                 # than 0 or 1, so return an error.
11843                                 kiriwrite_error("invalidvariable");
11845                         }
11847                 } else {
11850                 }
11852                 # Set the following variables for later on.
11854                 my $variable_data_length = 0;
11855                 my $variable_data_char = "";
11856                 my $variable_data_validated = "";
11857                 my $variable_data_seek = 0;
11858                 my $variable_database_list = "";
11859                 my $variable_database_listcurrent = "";
11860                 my $variable_data_firstlevel = 1;
11862                 # Get the length of the variable recieved.
11864                 $variable_data_length = length($variable_data);
11866                 # Check if the database filename contains the directory command
11867                 # for up a directory level and if it is, return an error
11868                 # or return with a number.
11870                 do {
11872                         # Get a character from the filename passed to this subroutine.
11874                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
11876                         # Check if the current character is the forward slash character.
11878                         if ($variable_data_char eq "/"){
11880                                 # Check if the current directory is blank (and on the first level), or if the
11881                                 # current directory contains two dots or one dot, if it does return an error.
11883                                 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
11885                                         # Check if the noerror value is set to 1, if it is return an
11886                                         # number, else return an proper error.
11888                                         if ($variable_noerror eq 1){
11890                                                 # Page filename contains invalid characters and
11891                                                 # the no error value is set to 1 so return a 
11892                                                 # value of 2 (meaning that the page filename
11893                                                 # is invalid).
11895                                                 return 2;
11897                                         } elsif ($variable_noerror eq 0) {
11899                                                 # Page filename contains invalid characters and
11900                                                 # the no error value is set to 0 so return an
11901                                                 # error.
11903                                                 kiriwrite_error("invalidfilename");
11905                                         } else {
11907                                                 # The no error value is something else other
11908                                                 # than 0 or 1 so return an error.
11910                                                 kiriwrite_error("invalidvariable");
11912                                         }
11914                                 }
11916                                 # Append the forward slash, clear the current directory name and set
11917                                 # the first directory level value to 0.
11919                                 $variable_database_list = $variable_database_list . $variable_data_char;
11920                                 $variable_database_listcurrent = "";
11921                                 $variable_data_firstlevel = 0;
11923                         } else {
11925                                 # Append the current character to the directory name and to the current
11926                                 # directory name.
11928                                 $variable_database_list = $variable_database_list . $variable_data_char;
11929                                 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
11931                         }
11933                         # Increment the seek counter.
11935                         $variable_data_seek++;
11937                 } until ($variable_data_seek eq $variable_data_length);
11939                 return 0;
11941         } elsif ($variable_type eq "datetime"){
11942                 # Check if the date and time setting format is valid.
11944                 if ($variable_data eq ""){
11946                         if ($variable_noerror eq 1){
11948                                 # The no error value is set to 1 so return
11949                                 # a value of 1 (meaning that the date and
11950                                 # time format was blank).
11952                                 return 1;
11954                         } elsif ($variable_noerror eq 0){
11956                                 # The no error value is set to 1 so return
11957                                 # an error.
11959                                 kiriwrite_error("blankdatetimeformat");
11961                         } else {
11963                                 # The no error value is something else other
11964                                 # than 0 or 1, so return an error.
11966                                 kiriwrite_error("invalidvariable");
11968                         }
11970                 }
11972                 my $variable_data_validated = $variable_data;
11973                 $variable_data_validated =~ tr|dDmMyYhms/():[ ]||d;
11975                 if ($variable_data_validated eq ""){
11977                         # The date and time format is valid. So
11978                         # skip this bit.
11980                 } else {
11982                         # The validated data variable is not blank, meaning 
11983                         # that it contains something else, so return an error
11984                         # (or a value).
11986                         if ($variable_noerror eq 1){
11988                                 # The no error value is set to 1 so return
11989                                 # an value of 2. (meaning that the date and
11990                                 # time format was invalid).
11992                                 return 2;
11994                         } elsif ($variable_noerror eq 0){
11996                                 # The no error value is set to 0 so return
11997                                 # an error.
11999                                 kiriwrite_error("invaliddatetimeformat");
12001                         } else {
12003                                 # The no error value is something else other
12004                                 # than 0 or 1 so return an error.
12006                                 kiriwrite_error("invalidvariable");
12008                         }
12010                 }
12012                 return 0;
12014         } elsif ($variable_type eq "directory"){
12015                 # Check if the directory only contains letters and numbers and
12016                 # return an error if anything else appears.
12018                 my $variable_data_validated = $variable_data;
12019                 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12021                 if ($variable_data eq ""){
12023                         if ($variable_noerror eq 1){
12025                                 # The no error value is set to 1 so return
12026                                 # a value of 1 (meaning that the directory
12027                                 # name was blank).
12029                                 return 1;
12031                         } elsif ($variable_noerror eq 0){
12033                                 # The no error value is set to 1 so return
12034                                 # an error.
12036                                 kiriwrite_error("blankdirectory");
12038                         } else {
12040                                 # The no error value is something else other
12041                                 # than 0 or 1, so return an error.
12043                                 kiriwrite_error("invalidvariable");
12045                         }
12047                 }
12049                 if ($variable_data_validated eq ""){
12051                         # The validated data variable is blank, meaning that
12052                         # it only contains letters and numbers.
12054                 } else {
12056                         # The validated data variable is not blank, meaning 
12057                         # that it contains something else, so return an error
12058                         # (or a value).
12060                         if ($variable_noerror eq 1){
12062                                 # The no error value is set to 1 so return
12063                                 # an value of 2. (meaning that the directory
12064                                 # name is invalid).
12066                                 return 2;
12068                         } elsif ($variable_noerror eq 0){
12070                                 # The no error value is set to 0 so return
12071                                 # an error.
12073                                 kiriwrite_error("invaliddirectory");
12075                         } else {
12077                                 # The no error value is something else other
12078                                 # than 0 or 1 so return an error.
12080                                 kiriwrite_error("invalidvariable");
12082                         }
12084                 }
12086                 return 0;
12088         } elsif ($variable_type eq "language_filename"){
12090                 # The variable type is a language filename type.
12091                 # Check if the language file name is blank and 
12092                 # if it is then return an error (or value).
12094                 if ($variable_data eq ""){
12096                         # The language filename is blank so check the
12097                         # no error value and return an error (or value).
12099                         if ($variable_noerror eq 1){
12101                                 # Language filename is blank and the no error value
12102                                 # is set as 1, so return a value of 1 (saying that
12103                                 # the language filename is blank).
12105                                 return 1;
12107                         } elsif ($variable_noerror eq 0) {
12109                                 # Language filename is blank and the no error value
12110                                 # is not set as 1, so return an error.
12112                                 kiriwrite_critical("languagefilenameblank");
12114                         } else {
12116                                 # The noerror value is something else other
12117                                 # than 0 or 1 so return an error.
12119                                 kiriwrite_error("invalidvariable");
12121                         }
12123                 }
12125                 # Set the following variables for later on.
12127                 my $variable_data_length = 0;
12128                 my $variable_data_char = "";
12129                 my $variable_data_seek = 0;
12131                 # Get the length of the language file name.
12133                 $variable_data_length = length($variable_data);
12135                 do {
12137                         # Get a character from the language filename passed to this 
12138                         # subroutine and the character the seek counter value is set
12139                         # to.
12141                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12143                         # Check if the language filename contains a forward slash or a dot, 
12144                         # if the selected character is a forward slash then return an error
12145                         # (or value).
12147                         if ($variable_data_char eq "/" || $variable_data_char eq "."){
12149                                 # The language filename contains a forward slash or
12150                                 # a dot so depending on the no error value, return
12151                                 # an error or a value.
12153                                 if ($variable_noerror eq 1){
12155                                         # Language filename contains a forward slash or a dot
12156                                         # and the no error value has been set to 1, so return 
12157                                         # an value of 2 (saying that the language file name is 
12158                                         # invalid).
12160                                         return 2;
12162                                 } elsif ($variable_noerror eq 0) {
12164                                         # Language filename contains a forward slash and the no
12165                                         # error value has not been set to 1, so return an error.
12167                                         kiriwrite_critical("languagefilenameinvalid");
12169                                 } else {
12171                                         # The noerror value is something else other than
12172                                         # 1 or 0 so return an error.
12174                                         kiriwrite_error("invalidvariable");
12176                                 }
12178                         }
12180                         # Increment the seek counter.
12182                         $variable_data_seek++;
12184                 } until ($variable_data_seek eq $variable_data_length);
12186                 return 0;
12188         } elsif ($variable_type eq "pagesetting"){
12190                 # The variable type is a page setting, so check if the page
12191                 # setting has one of the valid options.
12193                 if ($variable_data eq 0 || $variable_data eq 1 || $variable_data eq 2 || $variable_data eq 3){
12195                         # The variable is one of the options above, so continue
12196                         # to the end of this section.
12198                 } else {
12200                         # The variable is not one of the options above, so check
12201                         # and see if a error or a value should be returned.
12203                         if ($variable_noerror eq 1){
12205                                 # The page setting is invalid and the no error
12206                                 # value is set 1, so return a value of 1
12207                                 # (saying that the page setting value is
12208                                 # invalid).
12210                                 return 1;
12212                         } elsif ($variable_noerror eq 0) {
12214                                 # Page setting is invalid and the no error value
12215                                 # is not 1, so return an error.
12217                                 kiriwrite_error("invalidvariable");
12219                         } else {
12221                                 # The no error value is something else other
12222                                 # than 0 or 1 so return an error.
12224                                 kiriwrite_error("invalidvariable");
12226                         }
12228                 }
12230                 return 0;
12232         } elsif ($variable_type eq "page_filename"){
12233          
12234                 # The variable type is a page filename type. Check
12235                 # if the data is empty and if it is then return an
12236                 # error (or value).
12238                 if ($variable_data eq ""){
12240                         # The filename is blank so check the no error
12241                         # value and depending on it return an value
12242                         # or an error.
12244                         if ($variable_noerror eq 1){
12246                                 # Page filename is blank and the no error value
12247                                 # is set as 1, so return a value of 1 (saying
12248                                 # the filename is blank).
12250                                 return 1;
12252                         } elsif ($variable_noerror eq 0) {
12254                                 # Page filename is blank and the no error value
12255                                 # is not 1, so return an error.
12257                                 kiriwrite_error("emptypagefilename");
12259                         } else {
12261                                 # The no error value is something else other
12262                                 # than 0 or 1 so return an error.
12264                                 kiriwrite_error("invalidvariable");
12266                         }
12267                 }
12269                 # Set the following variables for later on.
12272                 my $variable_data_length = 0;
12273                 my $variable_data_slash = 0;
12274                 my $variable_data_char = "";
12275                 my $variable_data_validated = "";
12276                 my $variable_data_seek = 0;
12277                 my $variable_database_list = "";
12278                 my $variable_database_listcurrent = "";
12279                 my $variable_data_firstlevel = 1;
12281                 # Get the length of the filename.
12283                 $variable_data_length = length($variable_data);
12285                 # Check that only valid characters should be appearing in
12286                 # the filename.
12288                 $variable_data_validated = $variable_data;
12289                 $variable_data_validated =~ tr|a-zA-Z0-9\.\/\-_||d;
12291                 if ($variable_data_validated ne ""){
12293                         # The validated variable is not blank, meaning the
12294                         # variable contains invalid characters, so return
12295                         # an error.
12297                         if ($variable_noerror eq 1){
12299                                 # Page filename contains invalid characters and
12300                                 # the no error value is set to 1 so return a 
12301                                 # value of 2 (meaning that the page filename
12302                                 # is invalid).
12304                                 return 2;
12306                         } elsif ($variable_noerror eq 0) {
12308                                 # Page filename contains invalid characters and
12309                                 # the no error value is set to 0 so return an
12310                                 # error.
12312                                 kiriwrite_error("invalidfilename");
12314                         } else {
12316                                 # The no error value is something else other
12317                                 # than 0 or 1 so return an error.
12319                                 kiriwrite_error("invalidvariable");
12321                         }
12323                 }
12325                 # Check if the page filename contains the directory command
12326                 # for up a directory level and if it is, return an error
12327                 # or return with a number.
12329                 do {
12331                         # Get a character from the filename passed to this subroutine.
12333                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12335                         # Check if the current character is the forward slash character.
12337                         if ($variable_data_char eq "/"){
12339                                 # Check if the current directory is blank (and on the first level), or if the
12340                                 # current directory contains two dots or one dot, if it does return an error.
12342                                 $variable_data_slash = 1;
12344                                 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
12346                                         # Check if the noerror value is set to 1, if it is return an
12347                                         # number, else return an proper error.
12349                                         if ($variable_noerror eq 1){
12351                                                 # Page filename contains invalid characters and
12352                                                 # the no error value is set to 1 so return a 
12353                                                 # value of 2 (meaning that the page filename
12354                                                 # is invalid).
12356                                                 return 2;
12358                                         } elsif ($variable_noerror eq 0) {
12360                                                 # Page filename contains invalid characters and
12361                                                 # the no error value is set to 0 so return an
12362                                                 # error.
12364                                                 kiriwrite_error("invalidfilename");
12366                                         } else {
12368                                                 # The no error value is something else other
12369                                                 # than 0 or 1 so return an error.
12371                                                 kiriwrite_error("invalidvariable");
12373                                         }
12375                                 }
12377                                 # Append the forward slash, clear the current directory name and set
12378                                 # the first directory level value to 0.
12380                                 $variable_database_list = $variable_database_list . $variable_data_char;
12381                                 $variable_database_listcurrent = "";
12382                                 $variable_data_firstlevel = 0;
12384                         } else {
12386                                 # Append the current character to the directory name and to the current
12387                                 # directory name.
12389                                 $variable_data_slash = 0;
12391                                 $variable_database_list = $variable_database_list . $variable_data_char;
12392                                 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
12394                         }
12396                         # Increment the seek counter.
12398                         $variable_data_seek++;
12400                 } until ($variable_data_seek eq $variable_data_length);
12402                 # Check if the last character is a slash and return an
12403                 # error if it is.
12405                 if ($variable_data_slash eq 1){
12407                         if ($variable_noerror eq 1){
12409                                 # Last character is a slash and the no error 
12410                                 # value is set to 1 so return a value of 2 
12411                                 # (meaning that the page filename is invalid).
12413                                 return 2;
12415                         } elsif ($variable_noerror eq 0) {
12417                                 # Page filename contains a slash for the last
12418                                 # character and the no error value is set to 0 
12419                                 # so return an error.
12421                                 kiriwrite_error("invalidfilename");
12423                         } else {
12425                                 # The no error value is something else other
12426                                 # than 0 or 1 so return an error.
12428                                 kiriwrite_error("invalidvariable");
12430                         }
12432                 }
12434                 return 0;
12436         } elsif ($variable_type eq "module"){
12438                 # The variable type is a presentation module filename.
12440                 # Check if the variable_data is blank and if it is
12441                 # return an error.
12443                 if ($variable_data eq ""){
12445                         # The presentation module is blank so check if an error
12446                         # value should be returned or a number should be
12447                         # returned.
12449                         if ($variable_noerror eq 1){
12451                                 # Module name is blank and the no error value 
12452                                 # is set to 1 so return a value of 2 (meaning 
12453                                 # that the page filename is blank).
12455                                 return 1;
12457                         } elsif ($variable_noerror eq 0) {
12459                                 # Module name contains is blank and the no error 
12460                                 # value is set to 0 so return an error.
12462                                 kiriwrite_critical("moduleblank");
12464                         } else {
12466                                 # The no error value is something else other
12467                                 # than 0 or 1 so return an error.
12469                                 kiriwrite_critical("invalidvalue");
12471                         }
12473                 } else {
12475                 }
12477                 my $variable_data_validated = $variable_data;
12478                 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12480                 if ($variable_data_validated eq ""){
12482                 } else {
12484                         if ($variable_noerror eq 1){
12486                                 # Module name contains invalid characters and
12487                                 # the no error value is set to 1 so return a 
12488                                 # value of 2 (meaning that the page filename
12489                                 # is invalid).
12491                                 return 2;
12493                         } elsif ($variable_noerror eq 0) {
12495                                 # Module name contains invalid characters and
12496                                 # the no error value is set to 0 so return an
12497                                 # error.
12499                                 kiriwrite_critical("moduleinvalid");
12501                         } else {
12503                                 # The no error value is something else other
12504                                 # than 0 or 1 so return an error.
12506                                 kiriwrite_error("invalidvalue");
12508                         }
12510                 }
12512                 return 0;
12514         } elsif ($variable_type eq "utf8"){
12516                 # The variable type is a UTF8 string.
12518                 if (!$variable_data){
12520                         $variable_data = "";
12522                 }
12524                 # Check if the string is a valid UTF8 string.
12526                 if ($variable_data =~ m/^(
12527                         [\x09\x0A\x0D\x20-\x7E]              # ASCII
12528                         | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
12529                         |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
12530                         | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
12531                         |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
12532                         |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
12533                         | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
12534                         |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
12535                 )*$/x){
12537                         # The UTF-8 string is valid.
12539                 } else {
12541                         # The UTF-8 string is not valid, check if the no error
12542                         # value is set to 1 and return an error if it isn't.
12544                         if ($variable_noerror eq 1){
12546                                 # The no error value has been set to 1, so return
12547                                 # a value of 1 (meaning that the UTF-8 string is
12548                                 # invalid).
12550                                 return 1; 
12552                         } elsif ($variable_noerror eq 0) {
12554                                 # The no error value has been set to 0, so return
12555                                 # an error.
12557                                 kiriwrite_error("invalidutf8");
12559                         } else {
12561                                 # The no error value is something else other than 0
12562                                 # or 1, so return an error.
12564                                 kiriwrite_error("invalidoption");
12566                         }
12568                 }
12570                 return 0;
12572         } elsif ($variable_type eq "serverprotocol"){
12574                 # Check if the server protocol is TCP or UDP and return
12575                 # an error if it isn't.
12577                 if ($variable_data ne "tcp" && $variable_data ne "udp"){
12579                         # The protocol given is not valid, check if the no
12580                         # error value is set to 1 and return an error if it isn't.
12582                         if ($variable_noerror eq 1){
12584                                 # The no error value has been set to 1, so return a
12585                                 # value of 1 (meaning that the server protocol is
12586                                 # invalid).
12588                                 return 1;
12590                         } elsif ($variable_noerror eq 0){
12592                                 # The no error value has been set to 0, so return
12593                                 # an error.
12595                                 kiriwrite_error("serverprotocolinvalid");
12597                         } else {
12599                                 # The no error value is something else other than 0
12600                                 # or 1, so return an error.
12602                                 kiriwrite_error("invalidoption");
12604                         }
12606                 }
12608                 return 0;
12610         } elsif ($variable_type eq "port"){
12612                 # Check if the port number given is less than 0 or more than 65535
12613                 # and return an error if it is.
12615                 if ($variable_data < 0 || $variable_data > 65535){
12617                         # The port number is less than 0 and more than 65535 so
12618                         # check if the no error value is set to 1 and return an
12619                         # error if it isn't.
12621                         if ($variable_noerror eq 1){
12623                                 # The no error value has been set to 1, so return a
12624                                 # value of 1 (meaning that the port number is invalid).
12626                                 return 1;
12628                         } elsif ($variable_noerror eq 0){
12630                                 # The no error value has been set to 0, so return
12631                                 # an error.
12633                                 kiriwrite_error("serverportnumberinvalid");
12635                         } else {
12637                                 # The no error value is something else other than 0
12638                                 # or 1, so return an error.
12640                                 kiriwrite_error("invalidoption");
12642                         }
12644                 }
12646                 return 0;
12648         }
12650         # Another type than the valid ones above has been specified so return an error specifying an invalid option.
12651         kiriwrite_error("invalidoption");
12655 sub kiriwrite_output_header{
12656 #################################################################################
12657 # kiriwrite_output_header: Outputs the header to the browser/stdout/console.    #
12658 #                                                                               #
12659 # Usage:                                                                        #
12660 #                                                                               #
12661 # kiriwrite_output_header();                                                    #
12662 #################################################################################
12664         # Print a header saying that the page expires immediately since the
12665         # date is set in the past.
12667         print header(-Expires=>'Sunday, 01-Jan-06 00:00:00 GMT', -charset=>'utf-8');
12668         return;
12671 sub kiriwrite_processfilename{
12672 #################################################################################
12673 # kiriwrite_processfilename: Processes a name and turns it into a filename that #
12674 # can be used by Kiriwrite.                                                     #
12675 #                                                                               #
12676 # Usage:                                                                        #
12677 #                                                                               #
12678 # kiriwrite_processfilename(text);                                              #
12679 #                                                                               #
12680 # text          Specifies the text to be used in the process for creating a new #
12681 #               filename.                                                       #
12682 #################################################################################
12684         # Get the values that have been passed to the subroutine.
12686         my ($process_text) = @_;
12688         # Define some variables that will be used later on.
12690         my $processed_stageone  = "";
12691         my $processed_stagetwo  = "";
12692         my $processed_length    = "";
12693         my $processed_char      = "";
12694         my $processed_seek      = 0;
12695         my $processed_filename  = "";
12697         # Set the first stage value of the processed filename to the
12698         # process filename and then filter it out to only contain
12699         # numbers and letters (no spaces) and then convert the
12700         # capitals to small letters.
12702         $processed_stageone = $process_text;
12703         $processed_stageone =~ tr#a-zA-Z0-9##cd;
12704         $processed_stageone =~ tr/A-Z/a-z/;
12706         # Now set the second stage value of the processed filename
12707         # to the first stage value of the processed filename and
12708         # then limit the filename down to 32 characters.
12710         $processed_stagetwo = $processed_stageone;
12711         $processed_length = length($processed_stagetwo);
12713         # Process the second stage filename into the final 
12714         # filename and do so until the seek counter is 32
12715         # or reaches the length of the second stage filename.
12717         do {
12719                 # Get the character that is the seek counter
12720                 # is set at.
12722                 $processed_char = substr($processed_stagetwo, $processed_seek, 1);
12724                 # Append to the final processed filename.
12726                 $processed_filename = $processed_filename . $processed_char;
12728                 # Increment the seek counter.
12730                 $processed_seek++;
12732         } until ($processed_seek eq 32 || $processed_seek eq $processed_length);
12734         return $processed_filename;
12738 sub kiriwrite_language{
12739 #################################################################################
12740 # kiriwrite_language: Process language strings that needs certain text inserted.#
12741 #                                                                               #
12742 # Usage:                                                                        #
12743 #                                                                               #
12744 # kiriwrite_language(string, [text, text, ...]);                                #
12745 #                                                                               #
12746 # string        Specifies the string to process.                                #
12747 # text          Specifies the text to pass to the string (can be repeated many  #
12748 #               times).                                                         #
12749 #################################################################################
12751         my $string = shift;
12752         my $item;
12754         foreach $item (@_){
12756                 $string =~ s/%s/$item/;
12758         }
12760         return $string;
12764 sub kiriwrite_error{
12765 #################################################################################
12766 # kiriwrite_error: Prints out an error message.                                 #
12767 #                                                                               #
12768 # Usage:                                                                        #
12769 #                                                                               #
12770 # kiriwrite_error(errortype, errorext);                                         #
12771 #                                                                               #
12772 # errortype     Specifies the type of error that occured.                       #
12773 # errorext      Specifies the extended error information.                       #
12774 #################################################################################
12776         # Get the error type from the subroutine.
12778         my ($error_type, $error_extended) = @_;
12780         # Disconnect from the database server.
12782         if ($kiriwrite_dbmodule){
12783                 $kiriwrite_dbmodule->disconnect();
12784         }
12786         # Load the list of error messages.
12788         my ($kiriwrite_error, %kiriwrite_error);
12790         %kiriwrite_error = (
12792                 # Catch all error message.
12793                 "generic"                       => $kiriwrite_lang->{error}->{generic},
12795                 # Standard error messages.
12796                 "blankfilename"                 => $kiriwrite_lang->{error}->{blankfilename},
12797                 "blankvariable"                 => $kiriwrite_lang->{error}->{blankvariable},
12798                 "fileexists"                    => $kiriwrite_lang->{error}->{fileexists},
12799                 "internalerror"                 => $kiriwrite_lang->{error}->{internalerror},
12800                 "invalidoption"                 => $kiriwrite_lang->{error}->{invalidoption},
12801                 "invalidaction"                 => $kiriwrite_lang->{error}->{invalidaction},
12802                 "invalidfilename"               => $kiriwrite_lang->{error}->{invalidfilename},
12803                 "invalidmode"                   => $kiriwrite_lang->{error}->{invalidmode},
12804                 "invalidutf8"                   => $kiriwrite_lang->{error}->{invalidutf8},
12805                 "invalidvariable"               => $kiriwrite_lang->{error}->{invalidvariable},
12806                 "variabletoolong"               => $kiriwrite_lang->{error}->{variabletoolong},
12808                 # Specific error messages.
12809                 "blankcompiletype"              => $kiriwrite_lang->{error}->{blankcompiletype},
12810                 "blankdatabasepageadd"          => $kiriwrite_lang->{error}->{blankdatabasepageadd},
12811                 "blankdirectory"                => $kiriwrite_lang->{error}->{blankdirectory},
12812                 "blankfindfilter"               => $kiriwrite_lang->{error}->{blankfindfilter},
12813                 "blankdatetimeformat"           => $kiriwrite_lang->{error}->{blankdatetimeformat},
12814                 "databaseconnectionerror"       => $kiriwrite_lang->{error}->{databaseconnectionerror},
12815                 "databasecategoriestoolong"     => $kiriwrite_lang->{error}->{databasecategoriestoolong},
12816                 "databasecopysame"              => $kiriwrite_lang->{error}->{databasecopysame},
12817                 "databasealreadyexists"         => $kiriwrite_lang->{error}->{databasealreadyexists},
12818                 "datadirectorymissing"          => $kiriwrite_lang->{error}->{datadirectorymissing},
12819                 "datadirectoryinvalidpermissions"       => $kiriwrite_lang->{error}->{datadirectoryinvalidpermissions},
12820                 "databasedescriptiontoolong"    => $kiriwrite_lang->{error}->{databasedescriptiontoolong},
12821                 "databasefilenameinvalid"       => $kiriwrite_lang->{error}->{databasefilenameinvalid},
12822                 "databasefilenametoolong"       => $kiriwrite_lang->{error}->{databasefilenametoolong},
12823                 "databaseerror" => $kiriwrite_lang->{error}->{databaseerror},
12824                 "databaseinvalidpermissions"    => $kiriwrite_lang->{error}->{databaseinvalidpermissions},
12825                 "databasenameinvalid"           => $kiriwrite_lang->{error}->{databasenameinvalid},
12826                 "databasenametoolong"           => $kiriwrite_lang->{error}->{databasenametoolong},
12827                 "databasenameblank"             => $kiriwrite_lang->{error}->{databasenameblank},
12828                 "databasemissingfile"           => $kiriwrite_lang->{error}->{databasemissingfile},
12829                 "databasemovemissingfile"       => $kiriwrite_lang->{error}->{databasemovemissingfile},
12830                 "databasenorename"              => $kiriwrite_lang->{error}->{databasenorename},
12831                 "databasemovesame"              => $kiriwrite_lang->{error}->{databasemovesame},
12832                 "dbmoduleblank"                 => $kiriwrite_lang->{error}->{dbmoduleblank},
12833                 "dbmoduleinvalid"               => $kiriwrite_lang->{error}->{dbmoduleinvalid},
12834                 "dbdirectoryblank"              => $kiriwrite_lang->{error}->{dbdirectoryblank},
12835                 "dbdirectoryinvalid"            => $kiriwrite_lang->{error}->{dbdirectoryinvalid},
12836                 "dbmodulemissing"               => $kiriwrite_lang->{error}->{dbmodulemissing},
12837                 "filtersdatabasenotcreated"     => $kiriwrite_lang->{error}->{filtersdatabasenotcreated},
12838                 "filtersdbdatabaseerror"        => $kiriwrite_lang->{error}->{filtersdbdatabaseerror},
12839                 "filtersdbpermissions"          => $kiriwrite_lang->{error}->{filtersdbpermissions},
12840                 "filtersdbmissing"              => $kiriwrite_lang->{error}->{filtersdbmissing},
12841                 "filteridblank"                 => $kiriwrite_lang->{error}->{filteridblank},
12842                 "filterdoesnotexist"            => $kiriwrite_lang->{error}->{filterdoesnotexist},
12843                 "filteridinvalid"               => $kiriwrite_lang->{error}->{filteridinvalid},
12844                 "filteridtoolong"               => $kiriwrite_lang->{error}->{filteridtoolong},
12845                 "findfiltertoolong"             => $kiriwrite_lang->{error}->{findfiltertoolong},
12846                 "filterpriorityinvalid"         => $kiriwrite_lang->{error}->{filterpriorityinvalid},
12847                 "filterpriorityinvalidchars"    => $kiriwrite_lang->{error}->{filterpriorityinvalidchars},
12848                 "filterprioritytoolong"         => $kiriwrite_lang->{error}->{filterprioritytoolong},
12849                 "invalidcompiletype"            => $kiriwrite_lang->{error}->{invalidcompiletype},
12850                 "invalidpagenumber"             => $kiriwrite_lang->{error}->{invalidpagenumber},
12851                 "nopagesselected"               => $kiriwrite_lang->{error}->{nopagesselected},
12852                 "invaliddirectory"              => $kiriwrite_lang->{error}->{invaliddirectory},
12853                 "invaliddatetimeformat"         => $kiriwrite_lang->{error}->{invaliddatetimeformat},
12854                 "invalidlanguagefilename"       => $kiriwrite_lang->{error}->{invalidlanguagefilename},
12855                 "languagefilenamemissing"       => $kiriwrite_lang->{error}->{languagefilenamemissing},
12856                 "moduleblank"                   => $kiriwrite_lang->{error}->{moduleblank},
12857                 "moduleinvalid"                 => $kiriwrite_lang->{error}->{moduleinvalid},
12858                 "newcopydatabasedatabaseerror"  => $kiriwrite_lang->{error}->{newcopydatabasedatabaseerror},
12859                 "newcopydatabasedoesnotexist"   => $kiriwrite_lang->{error}->{newcopydatabasedoesnotexist},
12860                 "newcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newcopydatabasefileinvalidpermissions},
12861                 "newmovedatabasedatabaseerror"  => $kiriwrite_lang->{error}->{newmovedatabasedatabaseerror},
12862                 "newmovedatabasedoesnotexist"   => $kiriwrite_lang->{error}->{newmovedatabasedoesnotexist},
12863                 "newmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newmovedatabasefileinvalidpermissions},
12864                 "nodatabasesavailable"          => $kiriwrite_lang->{error}->{nodatabasesavailable},
12865                 "nodatabaseselected"            => $kiriwrite_lang->{error}->{nodatabaseselected},
12866                 "noeditvaluesselected"          => $kiriwrite_lang->{error}->{noeditvaluesselected},
12867                 "oldcopydatabasedatabaseerror"  => $kiriwrite_lang->{error}->{oldcopydatabasedatabaseerror},
12868                 "oldcopydatabasedoesnotexist"   => $kiriwrite_lang->{error}->{oldcopydatabasedoesnotexist},
12869                 "oldcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldcopydatabasefileinvalidpermissions},
12870                 "oldmovedatabasedatabaseerror"  => $kiriwrite_lang->{error}->{oldmovedatabasedatabaseerror},
12871                 "oldmovedatabasedoesnotexist"   => $kiriwrite_lang->{error}->{oldmovedatabasedoesnotexist},
12872                 "oldmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldmovedatabasefileinvalidpermissions},
12873                 "outputdirectoryblank"          => $kiriwrite_lang->{error}->{outputdirectoryblank},
12874                 "outputdirectoryinvalid"        => $kiriwrite_lang->{error}->{outputdirectoryinvalid},
12875                 "outputdirectorymissing"        => $kiriwrite_lang->{error}->{outputdirectorymissing},
12876                 "outputdirectoryinvalidpermissions"     => $kiriwrite_lang->{error}->{outputdirectoryinvalidpermissions},
12877                 "presmoduleblank"               => $kiriwrite_lang->{error}->{presmoduleblank},
12878                 "presmoduleinvalid"             => $kiriwrite_lang->{error}->{presmoduleinvalid},
12879                 "presmodulemissing"             => $kiriwrite_lang->{error}->{presmodulemissing},
12880                 "pagefilenamedoesnotexist"      => $kiriwrite_lang->{error}->{pagefilenamedoesnotexist},
12881                 "pagefilenameexists"            => $kiriwrite_lang->{error}->{pagefilenameexists},
12882                 "pagefilenameinvalid"           => $kiriwrite_lang->{error}->{pagefilenameinvalid},
12883                 "pagefilenametoolong"           => $kiriwrite_lang->{error}->{pagefilenametoolong},
12884                 "pagefilenameblank"             => $kiriwrite_lang->{error}->{pagefilenameblank},
12885                 "pagetitletoolong"              => $kiriwrite_lang->{error}->{pagetitletoolong},
12886                 "pagedescriptiontoolong"        => $kiriwrite_lang->{error}->{pagedescriptiontoolong},
12887                 "pagesectiontoolong"            => $kiriwrite_lang->{error}->{pagesectiontoolong},
12888                 "pagedatabasefilenametoolong"   => $kiriwrite_lang->{error}->{pagedatabasefilenametoolong},
12889                 "pagesettingstoolong"           => $kiriwrite_lang->{error}->{pagesettingstoolong},
12890                 "pagesettingsinvalid"           => $kiriwrite_lang->{error}->{pagesettingsinvalid},
12891                 "pagetemplatefilenametoolong"   => $kiriwrite_lang->{error}->{pagetemplatefilenametoolong},
12892                 "replacefiltertoolong"          => $kiriwrite_lang->{error}->{replacefiltertoolong},
12893                 "servernameinvalid"             => $kiriwrite_lang->{error}->{servernameinvalid},
12894                 "servernametoolong"             => $kiriwrite_lang->{error}->{servernametoolong},
12895                 "serverdatabasenameinvalid"     => $kiriwrite_lang->{error}->{serverdatabasenameinvalid},
12896                 "serverdatabasenametoolong"     => $kiriwrite_lang->{error}->{serverdatabasenametoolong},
12897                 "serverdatabaseusernameinvalid" => $kiriwrite_lang->{error}->{serverdatabaseusernameinvalid},
12898                 "serverdatabaseusernametoolong" => $kiriwrite_lang->{error}->{serverdatabaseusernametoolong},
12899                 "serverdatabasepasswordtoolong" => $kiriwrite_lang->{error}->{serverdatabasepasswordtoolong},
12900                 "serverdatabasetableprefixinvalid"      => $kiriwrite_lang->{error}->{serverdatabasetableprefixinvalid},
12901                 "serverdatabasetableprefixtoolong"      => $kiriwrite_lang->{error}->{serverdatabasetableprefixtoolong},
12902                 "serverportnumberinvalid"       => $kiriwrite_lang->{error}->{serverportnumberinvalid},
12903                 "serverportnumberinvalidcharacters"     => $kiriwrite_lang->{error}->{serverportnumberinvalidcharacters},
12904                 "serverportnumbertoolong"       => $kiriwrite_lang->{error}->{serverportnumbertoolong},
12905                 "serverprotocolnametoolong"     => $kiriwrite_lang->{error}->{serverprotocolnametoolong},
12906                 "serverprotocolinvalid"         => $kiriwrite_lang->{error}->{serverprotocolinvalid},
12907                 "templatenameblank"             => $kiriwrite_lang->{error}->{templatenameblank},
12908                 "templatefilenameexists"        => $kiriwrite_lang->{error}->{templatefilenameexists},
12909                 "templatefilenameinvalid"       => $kiriwrite_lang->{error}->{templatefilenameinvalid},
12910                 "templatedatabaseerror"         => $kiriwrite_lang->{error}->{templatedatabaseerror},
12911                 "templatedatabaseinvalidpermissions"    => $kiriwrite_lang->{error}->{templatedatabaseinvalidpermissions},
12912                 "templatedatabaseinvalidformat" => $kiriwrite_lang->{error}->{templatedatabaseinvalidformat},
12913                 "templatedirectoryblank"        => $kiriwrite_lang->{error}->{templatedirectoryblank},
12914                 "templatedirectoryinvalid"      => $kiriwrite_lang->{error}->{templatedirectoryinvalid},
12915                 "templatedatabasenotcreated"    => $kiriwrite_lang->{error}->{templatedatabasenotcreated},
12916                 "templatefilenametoolong"       => $kiriwrite_lang->{error}->{templatefilenametoolong},
12917                 "templatenametoolong"           => $kiriwrite_lang->{error}->{templatenametoolong},
12918                 "templatedescriptiontoolong"    => $kiriwrite_lang->{error}->{templatedescriptiontoolong},
12919                 "templatedatabasemissing"       => $kiriwrite_lang->{error}->{templatedatabasemissing},
12920                 "templatedoesnotexist"          => $kiriwrite_lang->{error}->{templatedoesnotexist},
12921                 "templatefilenameblank"         => $kiriwrite_lang->{error}->{templatefilenameblank},
12923         );
12925         # Check if the specified error is blank and if it is
12926         # use the generic error messsage.
12928         if (!$kiriwrite_error{$error_type}){
12929                 $error_type = "generic";
12930         }
12932         $kiriwrite_presmodule->clear();
12934         $kiriwrite_presmodule->startbox("errorbox");
12935         $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{error}, { Style => "errorheader" });
12936         $kiriwrite_presmodule->addlinebreak();
12937         $kiriwrite_presmodule->addtext($kiriwrite_error{$error_type}, { Style => "errortext" });
12939         # Check to see if extended error information was passed.
12941         if ($error_extended){
12943                 # Write the extended error information.
12945                 $kiriwrite_presmodule->addlinebreak();
12946                 $kiriwrite_presmodule->addlinebreak();
12947                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{extendederror});
12948                 $kiriwrite_presmodule->addlinebreak();
12949                 $kiriwrite_presmodule->addlinebreak();
12950                 $kiriwrite_presmodule->startbox("datalist");
12951                 $kiriwrite_presmodule->addtext($error_extended);
12952                 $kiriwrite_presmodule->endbox();
12954         }
12956         $kiriwrite_presmodule->endbox();
12958         kiriwrite_output_header;
12959         kiriwrite_output_page($kiriwrite_lang->{error}->{error}, $kiriwrite_presmodule->grab(), "none");
12961         exit;
12965 sub kiriwrite_fileexists{
12966 #################################################################################
12967 # kiriwrite_fileexists: Check if a file exists and returns a value depending on #
12968 # if the file exists or not.                                                    #
12969 #                                                                               # 
12970 # Usage:                                                                        #
12971 #                                                                               #
12972 # kiriwrite_fileexists(filename);                                               #
12973 #                                                                               #
12974 # filename      Specifies the file name to check if it exists or not.           #
12975 #################################################################################
12977         # Get the value that was passed to the subroutine.
12979         my ($filename) = @_;
12981         # Check if the filename exists, if it does, return a value of 0, else
12982         # return a value of 1, meaning that the file was not found.
12984         if (-e $filename){
12986                 # Specified file does exist so return a value of 0.
12988                 return 0;
12990         } else {
12992                 # Specified file does not exist so return a value of 1.
12994                 return 1;
12996         }
13000 sub kiriwrite_filepermissions{
13001 #################################################################################
13002 # kiriwrite_filepermissions: Check if the file permissions of a file and return #
13003 # either a 1 saying that the permissions are valid or return a 0 saying that    #
13004 # the permissions are invalid.                                                  #
13005 #                                                                               #
13006 # Usage:                                                                        #
13007 #                                                                               #
13008 # kiriwrite_filepermissions(filename, [read], [write], [filemissingskip]);      #
13009 #                                                                               #
13010 # filename              Specifies the filename to check for permissions.        #
13011 # read                  Preform check that the file is readable.                #
13012 # write                 Preform check that the file is writeable.               #
13013 # filemissingskip       Skip the check of seeing if it can read or write if the #
13014 #                       file is missing.                                        #
13015 #################################################################################
13017         # Get the values that was passed to the subroutine.
13019         my ($filename, $readpermission, $writepermission, $ignorechecks) = @_;
13021         # Check to make sure that the read permission and write permission values
13022         # are only 1 character long.
13024         kiriwrite_variablecheck($readpermission, "maxlength", 1, 0);
13025         kiriwrite_variablecheck($writepermission, "maxlength", 1, 0);
13026         kiriwrite_variablecheck($ignorechecks, "maxlength", 1, 0);
13028         my $ignorechecks_result = 0;
13030         # Check if the file should be ignored for read and write checking if 
13031         # it doesn't exist.
13033         if ($ignorechecks){
13035                 if (-e $filename){
13037                         # The file exists so the checks are to be done.
13039                         $ignorechecks_result = 0;
13041                 } else {
13043                         # The file does not exist so the checks don't need to
13044                         # be done to prevent false positives.
13046                         $ignorechecks_result = 1;
13048                 }
13050         } else {
13052                 $ignorechecks_result = 0;
13054         }
13056         # Check if the file should be checked to see if it can be read.
13058         if ($readpermission && $ignorechecks_result eq 0){
13060                 # The file should be checked to see if it does contain read permissions
13061                 # and return a 0 if it is invalid.
13063                 if (-r $filename){
13065                         # The file is readable, so do nothing.
13067                 } else {
13069                         # The file is not readable, so return 1.
13071                         return 1;
13073                 }
13075         }
13077         # Check if the file should be checked to see if it can be written.
13079         if ($writepermission && $ignorechecks_result eq 0){
13081                 # The file should be checked to see if it does contain write permissions
13082                 # and return a 0 if it is invalid.
13084                 if (-w $filename){
13086                         # The file is writeable, so do nothing.
13088                 } else {
13090                         # The file is not writeable, so return 1.
13092                         return 1;
13094                 }
13096         }
13098         # No problems have occured, so return 0.
13100         return 0;
13104 sub kiriwrite_utf8convert{
13105 #################################################################################
13106 # kiriwrite_utf8convert: Properly converts values into UTF-8 values.            #
13107 #                                                                               #
13108 # Usage:                                                                        #
13109 #                                                                               #
13110 # utfstring     # The UTF-8 string to convert.                                  #
13111 #################################################################################
13113         # Get the values passed to the subroutine.
13115         my ($utfstring) = @_;
13117         # Load the Encode perl module.
13119         use Encode qw(decode_utf8);
13121         # Convert the string.
13123         my $finalutf8 = Encode::decode_utf8( $utfstring );
13125         return $finalutf8;
13129 sub kiriwrite_critical{
13130 #################################################################################
13131 # kiriwrite_critical: Displays an critical error message that cannot be         #
13132 # normally by the kiriwrite_error subroutine.                                   #
13133 #                                                                               #
13134 # Usage:                                                                        #
13135 #                                                                               #
13136 # errortype     Specifies the type of critical error that has occured.          #
13137 #################################################################################
13139         # Get the value that was passed to the subroutine.
13141         my ($error_type) = @_;
13143         my %error_list;
13145         # Get the error type from the errortype string.
13147         %error_list = (
13149                 # Generic critical error message.
13151                 "generic"                       => "A critical error has occured but the error is not known to Kiriwrite.",
13153                 # Specific critical error messages.
13155                 "configfilemissing"             => "The Kiriwrite configuration file is missing! Running the installer script for Kiriwrite is recommended.",
13156                 "configfileinvalidpermissions"  => "The Kiriwrite configuration file has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13157                 "dbmodulemissing"               => "The database module is missing! Running the installer script for Kiriwrite is recommended.",
13158                 "dbmoduleinvalidpermissions"    => "The database module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13159                 "dbmoduleinvalid"               => "The database module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13160                 "invalidvalue"                  => "An invalid value was passed.",
13161                 "languagefilenameblank"         => "The language filename given is blank! Running the installer script for Kiriwrite is recommended.",
13162                 "languagefilenameinvalid"       => "The language filename given is invalid! Running the installer script for Kiriwrite is recommended.",
13163                 "languagefilemissing"   => "The language filename given does not exist. Running the installer script for Kiriwrite is recommended.",
13164                 "languagefilenameinvalidpermissions"    => "The language file with the filename given has invalid permissions set. Please set the valid permission settings for the language file.",
13165                 "presmodulemissing"             => "The presentation module is missing! Running the installer script for Kiriwrite is recommended.",
13166                 "presmoduleinvalidpermissions"  => "The presentation module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the presentation module.",
13167                 "presmoduleinvalid"             => "The presentation module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13168         );
13170         if (!$error_list{$error_type}){
13172                 $error_type = "generic";
13174         }
13176         print header();
13177         print "Critical Error: " . $error_list{$error_type};
13178         exit;
13182 sub kiriwrite_output_page{
13183 #################################################################################
13184 # kiriwrite_output_page: Outputs the page to the browser/stdout/console.        #
13185 #                                                                               #
13186 # Usage:                                                                        #
13187 #                                                                               #
13188 # kiriwrite_output_page(pagetitle, pagedata, menutype);                         #
13189 #                                                                               #
13190 # pagetitle     Specifies the page title.                                       #
13191 # pagedata      Specifies the page data.                                        #
13192 # menutype      Prints out which menu to use.                                   #
13193 #################################################################################
13195         my ($pagetitle, $pagedata, $menutype) = @_;
13197         # Open the script page template and load it into the scriptpage variable,
13198         # while declaring the variable.
13200         open (my $filehandle_scriptpage, "<:utf8", 'page.html');
13201         my @scriptpage = <$filehandle_scriptpage>;
13202         binmode $filehandle_scriptpage, ':utf8';
13203         close ($filehandle_scriptpage);
13205         # Define the variables required.
13207         my $scriptpageline = "";
13208         my $pageoutput = "";
13209         my $menuoutput = "";
13211         $kiriwrite_presmodule->clear();
13213         # Print out the main menu for Kiriwrite.
13215         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{menu}->{viewdatabases} });
13216         $kiriwrite_presmodule->addtext(" | ");
13217         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page", { Text => $kiriwrite_lang->{menu}->{viewpages} });
13218         $kiriwrite_presmodule->addtext(" | ");
13219         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{menu}->{viewfilters} });
13220         $kiriwrite_presmodule->addtext(" | ");
13221         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{menu}->{viewtemplates} });
13222         $kiriwrite_presmodule->addtext(" | ");
13223         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{menu}->{compilepages} });
13224         $kiriwrite_presmodule->addtext(" | ");
13225         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{menu}->{viewsettings} });
13226         $kiriwrite_presmodule->addlinebreak();
13228         # Check what menu is going to be printed along with the default 'top' menu.
13230         if ($menutype eq "database"){
13232                 # If the menu type is database then print out the database sub-menu.
13234                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{database}->{submenu}->{viewdatabases} });
13235                 $kiriwrite_presmodule->addtext(" | ");
13236                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=new", { Text => $kiriwrite_lang->{database}->{submenu}->{adddatabase} });
13238         } elsif ($menutype eq "pages"){
13239                 # If the menu type is pages then print out the pages sub-menu.
13241                 # First, fetch the database name from the HTTP query string.
13243                 my $query = new CGI;
13244                 my $db_filename = $query->param('database');
13246                 # Check if a value has been placed in the db_filename string.
13248                 if (!$db_filename){
13250                         # As the database filename is blank, don't add an option to add a page.
13252                 } else {
13254                         # A database file has been specified so add an option to add a page to
13255                         # the selected database.
13257                         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page&action=add&database="  . $db_filename, { Text => $kiriwrite_lang->{pages}->{submenu}->{addpage} });
13259                 }
13261         } elsif ($menutype eq "filter"){
13263                 # If the menu type is filters then print out the filter sub-menu.
13265                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{submenu}->{showfilters} });
13266                 $kiriwrite_presmodule->addtext(" | ");
13267                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter&action=add", { Text => $kiriwrite_lang->{filter}->{submenu}->{addfilter} });
13269         } elsif ($menutype eq "settings"){
13271                 # If the menu type is options then print out the options sub-menu.
13273                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{submenu}->{viewsettings} });
13274                 $kiriwrite_presmodule->addtext(" | ");
13275                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings&action=edit", { Text => $kiriwrite_lang->{setting}->{submenu}->{editsettings} });
13277         } elsif ($menutype eq "template"){
13279                 # If the menu type is template then print out the template sub-menu.
13281                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{template}->{submenu}->{showtemplates} });
13282                 $kiriwrite_presmodule->addtext(" | ");
13283                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template&action=add", { Text => $kiriwrite_lang->{template}->{submenu}->{addtemplate} });
13285         } elsif ($menutype eq "compile"){
13287                 # If the menu type is compile then print out the compile sub-menu.
13289                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{submenu}->{listdatabases} });
13290                 $kiriwrite_presmodule->addtext(" | ");
13291                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=all", { Text => $kiriwrite_lang->{compile}->{submenu}->{compileall} });
13292                 $kiriwrite_presmodule->addtext(" | ");
13293                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=clean", { Text => $kiriwrite_lang->{compile}->{submenu}->{cleanoutputdirectory} });
13295         }
13297         $menuoutput = $kiriwrite_presmodule->grab();
13299         # Find <kiriwrite> tages and replace with the apporiate variables.
13301         foreach $scriptpageline (@scriptpage){
13303                 $scriptpageline =~ s/<kiriwrite:menu>/$menuoutput/g;
13304                 $scriptpageline =~ s/<kiriwrite:imagespath>/$kiriwrite_config{"directory_noncgi_images"}/g;
13305                 $scriptpageline =~ s/<kiriwrite:pagedata>/$pagedata/g;
13307                 # Check if page title specified is blank, otherwise add a page title
13308                 # to the title.
13310                 if ($pagetitle eq ""){
13311                         $scriptpageline =~ s/<kiriwrite:title>//g;
13312                 } else {
13313                         $scriptpageline =~ s/<kiriwrite:title>/ ($pagetitle)/g;
13314                 }
13316                 
13318                 # Append processed line to the pageoutput variable.
13320                 $pageoutput = $pageoutput . $scriptpageline;
13322         }
13324         binmode STDOUT, ':utf8';
13326         print $pageoutput;
13328         return;
13332 sub kiriwrite_output_xml{
13333 #################################################################################
13334 # kiriwrite_output_xml: Outputs several types of data to an XML file            #
13335 #                                                                               #
13336 # Usage:                                                                        #
13337 #                                                                               #
13338 # kiriwrite_output_xml(filename, type, settings);                               #
13339 #                                                                               #
13340 # filename      Specifies the filename of the XML file.                         #
13341 # type          Specifies the type of the XML file to be written.               #
13342 # settings              Specifies the following settings in any order.          #
13343 #                                                                               #
13344 # Settings for Kiriwrite configuration files:                                   #
13345 #                                                                               #
13346 # DatabaseDirectory     Specifies the new database directory to use.            #
13347 # OutputDirectory       Specifies the new output directory to use.              #
13348 # ImagesURIPath         Specifies the new URI path for images.                  #
13349 # DateTimeFormat        Specifies the new date and time format.                 #
13350 # SystemLanguage        Specifies the new language to use for Kiriwrite.        #
13351 # PrsentationModule     Specifies the new presentation module to use for        #
13352 #                       Kiriwrite.                                              #
13353 # DatabaseModule        Specifies the new database module to use for Kiriwrite. #
13354 # DatabaseServer        Specifies the database server to use.                   #
13355 # DaravasePort          Specifies the port the database server is running on.   #
13356 # DatabaseProtocol      Specifies the protocol the database server is using.    #
13357 # DatabaseSQLDatabase   Specifies the SQL database name to use.                 #
13358 # DatabaseUsername      Specifies the database server username.                 #
13359 # DatabasePassword      Specifies the password for the database server username.#
13360 # DatabaseTablePrefix   Specifies the table prefix to use.                      #
13361 #################################################################################
13363         # Get the variables passed from the subroutine.
13365         my $xml_filename        = shift;
13366         my $xml_type            = shift;
13367         my ($passedsettings)    = @_;
13369         # Check if filename is blank, if it is then return an error.
13371         if ($xml_filename eq ""){
13372                 # Filename is blank, return an error.
13373                 kiriwrite_error("blankfilename");
13374         }
13376         # Validate the XML filename to make sure nothing supicious is being passed.
13378         kiriwrite_variablecheck($xml_filename, "maxlength", 64, 0);
13379         kiriwrite_variablecheck($xml_filename, "filename", "", 0);
13381         # Check what type of XML data to output.
13383         if ($xml_type eq "config") {
13385                 # The type of XML data to output is a Kiriwrite configuration file.
13387                 # Get the data from the hash.
13389                 my $settings_databasedir                = $passedsettings->{"DatabaseDirectory"};
13390                 my $settings_outputdir                  = $passedsettings->{"OutputDirectory"};
13391                 my $settings_imagesuri                  = $passedsettings->{"ImagesURIPath"};
13392                 my $settings_datetime                   = $passedsettings->{"DateTimeFormat"};
13393                 my $settings_systemlanguage             = $passedsettings->{"SystemLanguage"};
13394                 my $settings_presmodule                 = $passedsettings->{"PresentationModule"};
13395                 my $settings_dbmodule                   = $passedsettings->{"DatabaseModule"};
13397                 my $settings_database_server            = $passedsettings->{"DatabaseServer"};
13398                 my $settings_database_port              = $passedsettings->{"DatabasePort"};
13399                 my $settings_database_protocol          = $passedsettings->{"DatabaseProtocol"};
13400                 my $settings_database_sqldatabase       = $passedsettings->{"DatabaseSQLDatabase"};
13401                 my $settings_database_username          = $passedsettings->{"DatabaseUsername"};
13402                 my $settings_database_password          = $passedsettings->{"DatabasePassword"};
13403                 my $settings_database_tableprefix       = $passedsettings->{"DatabaseTablePrefix"};
13405                 # Convert the password to make sure it can be read properly.
13407                 if ($settings_database_password){
13409                         $settings_database_password =~ s/\0//g;
13410                         $settings_database_password =~ s/</&lt;/g;
13411                         $settings_database_password =~ s/>/&gt;/g;
13413                 }
13415                 # Convert the less than and greater than characters are there and
13416                 # convert them.
13418                 if ($settings_imagesuri){
13420                         $settings_imagesuri =~ s/</&lt;/g;
13421                         $settings_imagesuri =~ s/>/&gt;/g;
13423                 }
13425                 # Check if the database password value is undefined and if it is then
13426                 # set it blank.
13428                 if (!$settings_database_password){
13430                         $settings_database_password = "";
13432                 }
13434                 # Create the XML data layout.
13436                 my $xmldata = "<?xml version=\"1.0\"?>\r\n\r\n<kiriwrite-config>\r\n";
13438                 $xmldata = $xmldata . "<!-- This file was automatically generated by Kiriwrite, please feel free to edit to your own needs. -->\r\n";
13439                 $xmldata = $xmldata . "\t<settings>\r\n\t\t<directories>\r\n";
13441                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_databasedir . "</database>\r\n";
13442                 $xmldata = $xmldata . "\t\t\t<output>" . $settings_outputdir  . "</output>\r\n";
13443                 $xmldata = $xmldata . "\t\t\t<images>" . $settings_imagesuri . "</images>\r\n";
13444                 $xmldata = $xmldata . "\t\t</directories>\r\n";
13446                 $xmldata = $xmldata . "\t\t<language>\r\n";
13447                 $xmldata = $xmldata . "\t\t\t<lang>" . $settings_systemlanguage . "</lang>\r\n";
13448                 $xmldata = $xmldata . "\t\t</language>\r\n";
13450                 $xmldata = $xmldata . "\t\t<system>\r\n";
13451                 $xmldata = $xmldata . "\t\t\t<presentation>" . $settings_presmodule . "</presentation>\r\n";
13452                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_dbmodule . "</database>\r\n";
13453                 $xmldata = $xmldata . "\t\t\t<datetime>" . $settings_datetime . "</datetime>\r\n";
13454                 $xmldata = $xmldata . "\t\t</system>\r\n";
13456                 $xmldata = $xmldata . "\t\t<database>\r\n";
13457                 $xmldata = $xmldata . "\t\t\t<server>" . $settings_database_server . "</server>\r\n";
13458                 $xmldata = $xmldata . "\t\t\t<port>" . $settings_database_port . "</port>\r\n";
13459                 $xmldata = $xmldata . "\t\t\t<protocol>" . $settings_database_protocol . "</protocol>\r\n";
13460                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_database_sqldatabase . "</database>\r\n";
13461                 $xmldata = $xmldata . "\t\t\t<username>" . $settings_database_username . "</username>\r\n";
13462                 $xmldata = $xmldata . "\t\t\t<password>" . $settings_database_password . "</password>\r\n";
13463                 $xmldata = $xmldata . "\t\t\t<prefix>" . $settings_database_tableprefix . "</prefix>\r\n";
13464                 $xmldata = $xmldata . "\t\t</database>\r\n";
13466                 $xmldata = $xmldata . "\t</settings>\r\n";
13468                 $xmldata = $xmldata . "</kiriwrite-config>";
13470                 # Open the Kiriwrite XML configuration file and write the new settings to the
13471                 # configuration file.
13473                 open(my $filehandle_xmlconfig, "> ", "kiriwrite.xml");
13474                 print $filehandle_xmlconfig $xmldata;
13475                 close($filehandle_xmlconfig);
13477         } else {
13479                 # The type of XML data is something else that is not supported by
13480                 # Kiriwrite, so return an error.
13482                 kiriwrite_error("invalidoption");
13484         }
13486         return;
13490 #################################################################################
13491 # End listing the functions needed.                                             #
13492 #################################################################################
13494 #################################################################################
13495 # Begin proper script execution.                                                #
13496 #################################################################################
13498 kiriwrite_settings_load;        # Load the configuration options.
13500 my $query = new CGI;            # Easily fetch variables from the HTTP string.
13504 # Check if a mode has been specified and if a mode has been specified, continue
13505 # and work out what mode has been specified.
13507 if ($query->param('mode')){
13508         my $http_query_mode = $query->param('mode');
13510         if ($http_query_mode eq "db"){
13512                 # If mode is 'db' (database), then check what action is required.
13514                 if ($query->param('action')){
13515                         # An action has been specified, so find out what action has been specified.
13517                         my $http_query_action = $query->param('action');
13519                         if ($http_query_action eq "edit"){
13520                                 # The edit action (which mean edit the settings for the selected database) has been specified,
13521                                 # get the database name and check if the action to edit an database has been confirmed.
13523                                 if ($query->param('database')){
13524                                         # If there is a value in the database variable check if it is a valid database. Otherwise,
13525                                         # return an error.
13527                                         my $http_query_database = $query->param('database');
13528                                 
13529                                         # Check if a value for confirm has been specified, if there is, check if it is the correct
13530                                         # value, otherwise return an error.
13532                                         if ($query->param('confirm')){
13533                                                 # A value for confirm has been specified, find out what value it is. If the value is correct
13534                                                 # then edit the database settings, otherwise return an error.
13536                                                 my $http_query_confirm = $query->param('confirm');
13538                                                 if ($http_query_confirm eq 1){
13539                                                         # Value is correct, collect the variables to pass onto the database variable.
13540         
13541                                                         # Get the variables from the HTTP query.
13542         
13543                                                         my $newdatabasename             = $query->param('databasename');
13544                                                         my $newdatabasedescription      = $query->param('databasedescription');
13545                                                         my $newdatabasefilename         = $query->param('databasefilename');
13546                                                         my $databaseshortname           = $query->param('database');
13547                                                         my $databasenotes               = $query->param('databasenotes');
13548                                                         my $databasecategories          = $query->param('databasecategories');
13550                                                         # Check the permissions of the database configuration file and return
13551                                                         # an error if the database permissions are invalid.
13552         
13553                                                         # Pass the variables to the database editing subroutine.
13555                                                         my $pagedata = kiriwrite_database_edit($databaseshortname, $newdatabasefilename, $newdatabasename, $newdatabasedescription, $databasenotes, $databasecategories, 1);
13556         
13557                                                         kiriwrite_output_header;
13558                                                         kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13559                                                         exit;
13560         
13561                                                 } else {
13562                                                         # Value is incorrect, return and error.
13563                                                         kiriwrite_error("invalidvariable");
13564                                                 } 
13566                                         }
13568                                         # Display the form for editing an database.
13569                                         my $pagedata = kiriwrite_database_edit($http_query_database);
13571                                         kiriwrite_output_header;
13572                                         kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13573                                         exit;
13575                                 } else {
13577                                         # If there is no value in the database variable, then return an error.
13578                                         kiriwrite_error("invalidvariable");
13580                                 }
13582                         } elsif ($http_query_action eq "delete"){
13584                                 # Action equested is to delete a database, find out if the user has already confirmed deletion of the database
13585                                 # and if the deletion of the database has been confirmed, delete the database.
13587                                 if ($query->param('confirm')){
13589                                         # User has confirmed to delete a database, pass the parameters to the kiriwrite_database_delete
13590                                         # subroutine.
13592                                         my $database_filename = $query->param('database');
13593                                         my $database_confirm = $query->param('confirm');
13594                                         my $pagedata = kiriwrite_database_delete($database_filename, $database_confirm);
13596                                         kiriwrite_output_header;
13597                                         kiriwrite_output_page($kiriwrite_lang->{database}->{deleteddatabase}, $pagedata, "database");
13599                                         exit;
13601                                 }
13603                                 # User has clicked on the delete link (thus hasn't confirmed the action to delete a database).
13605                                 my $database_filename = $query->param('database');
13606                                 my $pagedata = kiriwrite_database_delete($database_filename);
13608                                 kiriwrite_output_header;
13609                                 kiriwrite_output_page($kiriwrite_lang->{database}->{deletedatabase}, $pagedata, "database");
13611                                 exit;
13613                         } elsif ($http_query_action eq "new"){
13615                                 # Action requested is to create a new database, find out if the user has already entered the information needed
13616                                 # to create a database and see if the user has confirmed the action, otherwise printout a form for adding a
13617                                 # database.
13619                                 my $http_query_confirm = $query->param('confirm');
13621                                 # Check if the confirm value is correct.
13623                                 if ($http_query_confirm){
13624                                         if ($http_query_confirm eq 1){
13626                                                 # User has confirmed to create a database, pass the parameters to the 
13627                                                 # kiriwrite_database_add subroutine.
13629                                                 my $http_query_confirm = $query->param('confirm');
13631                                                 my $database_name               = $query->param('databasename');
13632                                                 my $database_description        = $query->param('databasedescription');
13633                                                 my $database_filename           = $query->param('databasefilename');
13634                                                 my $database_notes              = $query->param('databasenotes');
13635                                                 my $database_categories         = $query->param('databasecategories');
13637                                                 my $pagedata = kiriwrite_database_add($database_filename, $database_name, $database_description, $database_notes, $database_categories, $http_query_confirm);
13639                                                 kiriwrite_output_header;
13640                                                 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13641                                                 exit;
13643                                         } else {
13645                                                 # The confirm value is something else other than 1 (which it shouldn't be), so
13646                                                 # return an error.
13648                                         }
13649                                 }
13651                                 # User has clicked on the 'Add Database' link.
13653                                 my $pagedata = kiriwrite_database_add;
13655                                 kiriwrite_output_header;
13656                                 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13657                                 exit;
13659                         } else {
13660                                 # Another option has been specified, so return an error.
13662                                 kiriwrite_error("invalidaction");
13663                         }
13664                 }
13666                 # No action has been specified, do the default action of displaying a list
13667                 # of databases.
13669                 my $pagedata = kiriwrite_database_list;
13671                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
13672                 kiriwrite_output_page("", $pagedata, "database");       # Output the page to browser/console/stdout.
13673                 exit;                                   # End the script.
13675         } elsif ($http_query_mode eq "page"){
13677                 # If mode is 'page', then check what action is required.
13679                 if ($query->param('action')){
13680                         my $http_query_action = $query->param('action');
13682                         # Check if the action requested matches with one of the options below. If it does,
13683                         # go to that section, otherwise return an error.
13685                         if ($http_query_action eq "view"){
13687                                 # The action selected was to view pages from a database, 
13689                                 my $database_name       = $query->param('database');
13690                                 my $pagedata            = kiriwrite_page_list($database_name);
13692                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13693                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{viewingdatabase}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13694                                 exit;                   # End the script.
13696                         } elsif ($http_query_action eq "add"){
13698                                 # The action selected was to add a page to the selected database.
13700                                 my $http_query_confirm  = $query->param('confirm');
13702                                 if (!$http_query_confirm){
13704                                         $http_query_confirm = 0;
13706                                 }
13708                                 if ($http_query_confirm eq 1){
13709                 
13710                                         my $http_query_database         = $query->param('database');
13711                                         my $http_query_filename         = $query->param('pagefilename');
13712                                         my $http_query_name             = $query->param('pagename');
13713                                         my $http_query_description      = $query->param('pagedescription');
13714                                         my $http_query_section          = $query->param('pagesection');
13715                                         my $http_query_template         = $query->param('pagetemplate');
13716                                         my $http_query_settings         = $query->param('pagesettings');
13717                                         my $http_query_content          = $query->param('pagecontent');
13718                         
13719                                         my $pagedata                    = kiriwrite_page_add($http_query_database, $http_query_filename, $http_query_name, $http_query_description, $http_query_section, $http_query_template, $http_query_settings, $http_query_content, $http_query_confirm);
13721                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13722                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13723                                         exit;                           # End the script.
13725                                 }
13726                 
13727                                 my $http_query_database = $query->param('database');
13728                                 my $pagedata            = kiriwrite_page_add($http_query_database);
13730                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13731                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13732                                 exit;                           # End the script.
13734                         } elsif ($http_query_action eq "edit"){
13735                          
13736                                 # The action selected was to edit a page from a database.
13738                                 my $http_query_confirm = $query->param('confirm');
13740                                 if (!$http_query_confirm){
13742                                         $http_query_confirm = 0;
13744                                 }
13746                                 if ($http_query_confirm eq 1){
13748                                         # Get the needed values from the HTTP query.
13750                                         my $http_query_database         = $query->param('database');
13751                                         my $http_query_filename         = $query->param('page');
13752                                         my $http_query_newfilename      = $query->param('pagefilename');
13753                                         my $http_query_name             = $query->param('pagename');
13754                                         my $http_query_description      = $query->param('pagedescription');
13755                                         my $http_query_section          = $query->param('pagesection');
13756                                         my $http_query_template         = $query->param('pagetemplate');
13757                                         my $http_query_settings         = $query->param('pagesettings');
13758                                         my $http_query_content          = $query->param('pagecontent');
13760                                         # Pass the values to the editing pages subroutine.
13762                                         my $pagedata = kiriwrite_page_edit($http_query_database, $http_query_filename, $http_query_newfilename, $http_query_name, $http_query_description, $http_query_section, $http_query_template, $http_query_settings, $http_query_content, $http_query_confirm);
13764                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13765                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages");   # Output the page to browser/console/stdout.
13766                                         exit;                           # End the script.
13768                                 }
13770                                 # Get the needed values from the HTTP query.
13772                                 my $http_query_database = $query->param('database');
13773                                 my $http_query_filename = $query->param('page');
13775                                 # Pass the values to the editing pages subroutine.
13777                                 my $pagedata = kiriwrite_page_edit($http_query_database, $http_query_filename);
13779                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13780                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages");   # Output the page to browser/console/stdout.
13781                                 exit;                           # End the script.
13784                         } elsif ($http_query_action eq "delete"){
13786                                 # The action selected was to delete a page from a database.
13788                                 my $http_query_database = $query->param('database');
13789                                 my $http_query_page     = $query->param('page');
13790                                 my $http_query_confirm  = $query->param('confirm');
13792                                 my $pagedata = "";
13793                                 my $selectionlist = "";
13795                                 if ($http_query_confirm){
13797                                         # The action has been confirmed, so try to delete the selected page
13798                                         # from the database.
13800                                         $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page, $http_query_confirm);
13802                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13803                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13804                                         exit;                           # End the script.
13806                                 }
13808                                 $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page);
13810                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13811                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13812                                 exit;                           # End the script.
13815                         } elsif ($http_query_action eq "multidelete"){
13817                                 # The action selected was to delete multiple pages from a
13818                                 # database.
13820                                 my $http_query_database = $query->param('database');
13821                                 my $http_query_confirm  = $query->param('confirm');
13823                                 my @filelist;
13824                                 my $pagedata;
13826                                 if ($http_query_confirm){
13828                                         # The action to delete multiple pages from the selected
13829                                         # database has been confirmed.
13831                                         @filelist       = kiriwrite_selectedlist();
13832                                         $pagedata       = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13834                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13835                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13836                                         exit;                           # End the script.
13838                                 }
13840                                 # Get the list of selected pages and pass them to the
13841                                 # multiple page delete subroutine.
13843                                 @filelist       = kiriwrite_selectedlist();
13844                                 $pagedata       = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13846                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13847                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13848                                 exit;                           # End the script.
13850                         } elsif ($http_query_action eq "multimove"){
13852                                 # The action selected was to move multiple pages from a
13853                                 # database.
13855                                 my $http_query_database         = $query->param('database');
13856                                 my $http_query_newdatabase      = $query->param('newdatabase');
13857                                 my $http_query_confirm          = $query->param('confirm');
13859                                 my @filelist;
13860                                 my $pagedata;
13862                                 if ($http_query_confirm){
13864                                         # The action to move multiple pages from the selected
13865                                         # database has been confirmed.
13867                                         @filelist       = kiriwrite_selectedlist();
13868                                         $pagedata       = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13870                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13871                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13872                                         exit;                           # End the script.
13874                                 }
13876                                 # Get the list of selected pages and pass them to the
13877                                 # multiple page move subroutine.
13879                                 @filelist       = kiriwrite_selectedlist();
13880                                 $pagedata       = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13882                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13883                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13884                                 exit;                           # End the script.
13886                         } elsif ($http_query_action eq "multicopy"){
13888                                 # The action selected was to copy multiple pages from a
13889                                 # database.
13891                                 my $http_query_database         = $query->param('database');
13892                                 my $http_query_newdatabase      = $query->param('newdatabase');
13893                                 my $http_query_confirm          = $query->param('confirm');
13895                                 my @filelist;
13896                                 my $pagedata;
13898                                 if ($http_query_confirm){
13900                                         # The action to copy multiple pages from the selected
13901                                         # database has been confirmed.
13903                                         @filelist       = kiriwrite_selectedlist();
13904                                         $pagedata       = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13906                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13907                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13908                                         exit;                           # End the script.
13910                                 }
13912                                 # Get the list of selected pages and pass them to the
13913                                 # multiple page copy subroutine.
13915                                 @filelist       = kiriwrite_selectedlist();
13916                                 $pagedata       = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13918                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13919                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13920                                 exit;                           # End the script.
13922                         } elsif ($http_query_action eq "multiedit"){
13924                                 # The action selected was to edit multiple pages from a
13925                                 # database.
13927                                 my $http_query_database         = $query->param('database');
13928                                 my $http_query_newsection       = $query->param('newsection');
13929                                 my $http_query_altersection     = $query->param('altersection');
13930                                 my $http_query_newtemplate      = $query->param('newtemplate');
13931                                 my $http_query_altertemplate    = $query->param('altertemplate');
13932                                 my $http_query_newsettings      = $query->param('newsettings');
13933                                 my $http_query_altersettings    = $query->param('altersettings');
13934                                 my $http_query_confirm          = $query->param('confirm');
13936                                 my @filelist;
13937                                 my $pagedata;
13939                                 if (!$http_query_confirm){
13941                                         @filelist       = kiriwrite_selectedlist();
13942                                         $pagedata       = kiriwrite_page_multiedit($http_query_database, $http_query_newsection, $http_query_altersection, $http_query_newtemplate, $http_query_altertemplate, $http_query_newsettings, $http_query_altersettings, $http_query_confirm, @filelist);
13944                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13945                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13946                                         exit;
13948                                 }
13950                                 # Get the list of selected pages and pass them to the
13951                                 # multiple page edit subroutine.
13953                                 @filelist       = kiriwrite_selectedlist();
13954                                 $pagedata       = kiriwrite_page_multiedit($http_query_database, $http_query_newsection, $http_query_altersection, $http_query_newtemplate, $http_query_altertemplate, $http_query_newsettings, $http_query_altersettings, $http_query_confirm, @filelist);
13956                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13957                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13958                                 exit;                           # End the script.
13960                         } else {
13961                                 kiriwrite_error("invalidaction");
13962                         }
13964                 } else {
13966                         # If there the action option is left blank, then print out a form where the database
13967                         # can be selected to view pages from.
13969                         my $pagedata = kiriwrite_page_list;
13971                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13972                         kiriwrite_output_page($kiriwrite_lang->{pages}->{databaseselecttitle}, $pagedata, "pages");     # Output the page to browser/console/stdout.
13973                         exit;                           # End the script.
13975                 }
13977                 # No action has been specified, do the default action of listing pages from
13978                 # the first database found in the directory.
13980         } elsif ($http_query_mode eq "filter"){
13982                 # If there's a value for action in the HTTP query, then
13983                 # get that value that is in the HTTP query.
13985                 if ($query->param('action')){
13987                         # There is a value for action in the HTTP query,
13988                         # so get the value from it.
13990                         my $http_query_action = $query->param('action');
13992                         if ($http_query_action eq "add"){
13994                                 # The action the user requested is to add a filter to the
13995                                 # filter database.
13997                                 # Check if there is a value in confirm and if there is
13998                                 # then pass it on to the new find and replace words
13999                                 # to add to the filter database.
14001                                 my $http_query_confirm = $query->param('confirm');
14003                                 if ($http_query_confirm){
14005                                         # There is a value in http_query_confirm, so pass on the
14006                                         # new find and replace words so that they can be added
14007                                         # to the filter database.
14009                                         my $http_query_findwords        = $query->param('findword');
14010                                         my $http_query_replacewords     = $query->param('replaceword');
14011                                         my $http_query_priority         = $query->param('priority');
14012                                         my $http_query_notes            = $query->param('notes');
14013                                 
14014                                         my $pagedata = kiriwrite_filter_add($http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
14016                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14017                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14018                                         exit;                           # End the script.
14020                                 }
14022                                 my $pagedata = kiriwrite_filter_add();
14024                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14025                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14026                                 exit;                           # End the script.
14028                         } elsif ($http_query_action eq "edit"){
14030                                 # The action the user requested is to edit an filter from
14031                                 # the filter database.
14033                                 my $http_query_number = $query->param('filter');
14034                                 my $http_query_confirm = $query->param('confirm');
14036                                 if ($http_query_confirm){
14038                                         # There is a value in http_query_confirm, so pass on the
14039                                         # new find and replace words so that the filter database
14040                                         # can be edited.
14042                                         my $http_query_findwords        = $query->param('filterfind');
14043                                         my $http_query_replacewords     = $query->param('filterreplace');
14044                                         my $http_query_priority         = $query->param('priority');
14045                                         my $http_query_notes            = $query->param('notes');
14047                                         my $pagedata = kiriwrite_filter_edit($http_query_number, $http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
14049                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14050                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter");    # Output the page to browser/console/stdout.
14051                                         exit;                           # End the script.
14053                                 }
14055                                 my $pagedata = kiriwrite_filter_edit($http_query_number);
14057                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14058                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter");    # Output the page to browser/console/stdout.
14059                                 exit;                                   # End the script.
14061                         } elsif ($http_query_action eq "delete"){
14063                                 # The action the user requested is to delete an filter
14064                                 # from the filter database.
14066                                 my $http_query_number = $query->param('filter');
14067                                 my $http_query_confirm = $query->param('confirm');
14069                                 if ($http_query_confirm){
14071                                         my $pagedata = kiriwrite_filter_delete($http_query_number, $http_query_confirm);
14073                                         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14074                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14075                                         exit;                                   # End the script
14077                                 }
14079                                 my $pagedata = kiriwrite_filter_delete($http_query_number);
14081                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14082                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter");  # Output the page to browser/console/stdout.
14083                                 exit;                                   # End the script.
14085                         } else {
14087                                 # Another action was requested that was not one of 
14088                                 # the ones prcedding this catch all, so return
14089                                 # an error saying that an invalid option was
14090                                 # specified.
14092                                 kiriwrite_error("invalidaction");
14094                         }
14096                 } else {
14098                         my $pagedata = kiriwrite_filter_list();
14100                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14101                         kiriwrite_output_page($kiriwrite_lang->{filter}->{viewfilters}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14102                         exit;                           # End the script.
14104                 }
14108         } elsif ($http_query_mode eq "template"){
14110                 # Check if an action has been specified in the HTTP query.
14112                 if ($query->param('action')){
14114                         # An action has been specified in the HTTP query.
14116                         my $http_query_action = $query->param('action');
14118                         if ($http_query_action eq "delete"){
14119                                 # Get the required parameters from the HTTP query.
14121                                 my $http_query_template = $query->param('template');
14122                                 my $http_query_confirm  = $query->param('confirm');
14124                                 # Check if a value for confirm has been specified (it shouldn't)
14125                                 # be blank.
14127                                 if (!$http_query_confirm){
14128                                         # The confirm parameter of the HTTP query is blank, so
14129                                         # write out a form asking the user to confirm the deletion
14130                                         # of the selected template.
14132                                         my $pagedata = kiriwrite_template_delete($http_query_template);
14134                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14135                                         kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template");    # Output the page to browser/console/stdout.
14136                                         exit;                           # End the script.
14138                                 } else {
14140                                         my $pagedata = kiriwrite_template_delete($http_query_template, $http_query_confirm);
14142                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14143                                         kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template");    # Output the page to browser/console/stdout.
14144                                         exit;                           # End the script.
14146                                 }
14148                         } elsif ($http_query_action eq "add") {
14150                                 # Get the variables from the HTTP query in preperation for processing.
14152                                 my $http_query_confirm  = $query->param('confirm');
14153                                 my $http_query_templatelayout   = $query->param('templatelayout');
14154                                 my $http_query_templatename     = $query->param('templatename');
14155                                 my $http_query_templatedescription = $query->param('templatedescription');
14156                                 my $http_query_templatefilename = $query->param('templatefilename');
14158                                 # Check if there is a confirmed value in the http_query_confirm variable.
14160                                 if (!$http_query_confirm){
14162                                         # Since there is no confirm value, print out a form for creating a new
14163                                         # template.
14165                                         my $pagedata = kiriwrite_template_add();
14167                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14168                                         kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template");       # Output the page to browser/console/stdout.
14169                                         exit;                           # End the script.
14171                                 } else {
14173                                         # A value in the http_query_confirm value is specified, so pass the
14174                                         # variables onto the kiriwrite_template_add subroutine.
14176                                         my $pagedata = kiriwrite_template_add($http_query_templatefilename, $http_query_templatename, $http_query_templatedescription, $http_query_templatelayout, $http_query_confirm);
14178                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14179                                         kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template");       # Output the page to browser/console/stdout.
14180                                         exit;                           # End the script.
14182                                 }
14184                         } elsif ($http_query_action eq "edit") {
14186                                 # Get the required parameters from the HTTP query.
14188                                 my $http_query_templatefile     = $query->param('template');
14189                                 my $http_query_confirm          = $query->param('confirm');
14191                                 # Check to see if http_query_confirm has a value of '1' in it and
14192                                 # if it does, edit the template using the settings providied.
14194                                 if (!$http_query_confirm){
14196                                         # Since there is no confirm value, open the template configuration
14197                                         # file and the template file itself then print out the data on to
14198                                         # the form.
14200                                         my $pagedata = kiriwrite_template_edit($http_query_templatefile);
14201                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14202                                         kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template");      # Output the page to browser/console/stdout.
14203                                         exit;                           # End the script.
14205                                 } elsif ($http_query_confirm eq 1) {
14207                                         # Since there is a confirm value of 1, the user has confirm the
14208                                         # action of editing of a template so get the other variables 
14209                                         # that were also sent and pass the variables to the subroutine.
14211                                         my $http_query_newfilename      = $query->param('newfilename');
14212                                         my $http_query_newname          = $query->param('newname');
14213                                         my $http_query_newdescription   = $query->param('newdescription');
14214                                         my $http_query_newlayout        = $query->param('newlayout');
14216                                         my $pagedata = kiriwrite_template_edit($http_query_templatefile, $http_query_newfilename, $http_query_newname, $http_query_newdescription, $http_query_newlayout, $http_query_confirm);
14217                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14218                                         kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template");      # Output the page to browser/console/stdout.
14219                                         exit;                           # End the script.
14221                                 } else {
14223                                         # Another confirm value is there instead of '0' or '1'. Return
14224                                         # an error saying it is invalid.
14226                                         kiriwrite_error("invalidvariable");
14228                                 }
14230                         } else {
14232                                 # Another action was specified and was not one of the ones above, so
14233                                 # return an error.
14235                                 kiriwrite_error("invalidaction");
14237                         }
14239                 } else {
14241                         # If the action option is left blank, then print out a form where the list
14242                         # of templates are available.
14244                         my $pagedata = kiriwrite_template_list;
14246                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14247                         kiriwrite_output_page($kiriwrite_lang->{template}->{viewtemplates}, $pagedata, "template");     # Output the page to browser/console/stdout.
14248                         exit;                           # End the script.
14250                 }
14252         } elsif ($http_query_mode eq "compile"){
14254                 # The mode selected is to compile pages from databases.
14256                 # If the action option is left blank, then print out a form where the list
14257                 # of databases to compile are available.
14259                 if ($query->param('action')){
14261                         my $http_query_action = $query->param('action');
14263                         if ($http_query_action eq "compile"){
14265                                 # The specified action is to compile the pages, check if the
14266                                 # action to compile the page has been confirmed.
14268                                 my $http_query_confirm  = $query->param('confirm');
14269                                 my $http_query_type     = $query->param('type');
14271                                 # If it is blank, set the confirm value to 0.
14273                                 if (!$http_query_confirm){
14275                                         # The http_query_confirm variable is uninitalised, so place a
14276                                         # '0' (meaning an unconfirmed action).
14278                                         $http_query_confirm = 0;
14280                                 }
14282                                 # If the compile type is blank then return an error.
14284                                 if (!$http_query_type){
14286                                         # Compile type is blank so return an error.
14288                                         kiriwrite_error("blankcompiletype");
14290                                 }
14292                                 if ($http_query_type eq "multiple"){
14294                                         if ($http_query_confirm eq 1){
14296                                                 # The action to compile the pages has been confirmed so
14297                                                 # compile the pages.
14299                                                 my @selectedlist = kiriwrite_selectedlist();
14300                                                 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14302                                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14303                                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14304                                                 exit;                           # End the script.
14306                                         } else {
14308                                                 # The action to compile the pages has not been confirmed
14309                                                 # so write a form asking the user to confirm the action
14310                                                 # of compiling the pages.
14312                                                 my @selectedlist = kiriwrite_selectedlist();
14313                                                 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14315                                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14316                                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compileselecteddatabases}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14317                                                 exit;                           # End the script.
14319                                         }
14321                                 } elsif ($http_query_type eq "single"){
14323                                         my $http_query_database = $query->param('database');
14324                                         my @selectedlist;
14325                                         $selectedlist[0] = $http_query_database;
14326                                         my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14328                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14329                                         kiriwrite_output_page($kiriwrite_lang->{compile}->{compiledatabase}, $pagedata, "compile");
14330                                         exit;                           # End the script.
14332                                 } else {
14334                                         kiriwrite_error("invalidcompiletype");
14336                                 }
14338                         } elsif ($http_query_action eq "all"){
14340                                 # The selected action is to compile all of the databases
14341                                 # in the database directory. Check if the action to
14342                                 # compile all of the databases has been confirmed.
14344                                 my $http_query_confirm = $query->param('confirm');
14346                                 if (!$http_query_confirm){
14348                                         # The http_query_confirm variable is uninitalised, so place a
14349                                         # '0' (meaning an unconfirmed action).
14351                                         $http_query_confirm = 0;
14353                                 }
14355                                 if ($http_query_confirm eq 1){
14357                                         # The action to compile all the databases has been confirmed.
14359                                 }
14361                                 my $pagedata = kiriwrite_compile_all();
14363                                 kiriwrite_output_header;                        # Output the header to browser/console/stdout.
14364                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilealldatabases}, $pagedata, "compile");
14365                                 exit;
14367                         } elsif ($http_query_action eq "clean") {
14369                                 # The selected action is to clean the output directory.
14370                                 # Check if the action to clean the output directory
14371                                 # has been confirmed.
14373                                 my $http_query_confirm = $query->param('confirm');
14375                                 if (!$http_query_confirm){
14377                                         # The http_query_confirm variable is uninitalised, so place a
14378                                         # '0' (meaning an unconfirmed action).
14380                                         $http_query_confirm = 0;
14382                                 }
14384                                 if ($http_query_confirm eq 1){
14386                                         # The action to clean the output directory has been confirmed.
14388                                         my $pagedata = kiriwrite_compile_clean($http_query_confirm);
14390                                         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14391                                         kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14392                                         exit;                                   # End the script.
14393                         
14394                                 }
14396                                 # The action to clean the output directory is not
14397                                 # confirmed, so write a page asking the user
14398                                 # to confirm cleaning the output directory.
14400                                 my $pagedata = kiriwrite_compile_clean();
14402                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14403                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14404                                 exit;                                   # End the script.
14406                         } else {
14408                                 # The action specified was something else other than those
14409                                 # above, so return an error.
14411                                 kiriwrite_error("invalidaction");
14413                         }
14414                 }
14416                 my $pagedata = kiriwrite_compile_list;
14418                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14419                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14420                 exit;                                   # End the script.
14422         } elsif ($http_query_mode eq "settings"){
14424                 # The mode selected is view (and change settings).
14426                 # If the action value has been left blank, then view the list of
14427                 # current settings.
14429                 if ($query->param('action')){
14430                         my $http_query_action = $query->param('action');
14432                         if ($http_query_action eq "edit"){
14434                                 # The action specified is to edit the settings. Check if the action
14435                                 # to edit the settings has been confirmed.
14437                                 my $http_query_confirm = $query->param('confirm');
14439                                 if (!$http_query_confirm){
14441                                         # The confirm value is blank, so set it to 0.
14443                                         $http_query_confirm = 0;
14445                                 }
14447                                 if ($http_query_confirm eq 1){
14449                                         # The action to edit the settings has been confirmed. Get the
14450                                         # required settings from the HTTP query.
14452                                         my $http_query_database         = $query->param('databasedir');
14453                                         my $http_query_output           = $query->param('outputdir');
14454                                         my $http_query_imagesuri        = $query->param('imagesuripath');
14455                                         my $http_query_datetimeformat   = $query->param('datetime');
14456                                         my $http_query_systemlanguage   = $query->param('language');
14457                                         my $http_query_presmodule       = $query->param('presmodule');
14458                                         my $http_query_dbmodule         = $query->param('dbmodule');
14460                                         my $http_query_database_server          = $query->param('database_server');
14461                                         my $http_query_database_port            = $query->param('database_port');
14462                                         my $http_query_database_protocol        = $query->param('database_protocol');
14463                                         my $http_query_database_sqldatabase     = $query->param('database_sqldatabase');
14464                                         my $http_query_database_username        = $query->param('database_username');
14465                                         my $http_query_database_passwordkeep    = $query->param('database_password_keep');
14466                                         my $http_query_database_password        = $query->param('database_password');
14467                                         my $http_query_database_tableprefix     = $query->param('database_tableprefix');
14469                                         my $pagedata = kiriwrite_settings_edit({ DatabaseDirectory => $http_query_database, OutputDirectory => $http_query_output, ImagesURIPath => $http_query_imagesuri, DateTimeFormat => $http_query_datetimeformat, SystemLanguage => $http_query_systemlanguage, PresentationModule => $http_query_presmodule, DatabaseModule => $http_query_dbmodule, DatabaseServer => $http_query_database_server, DatabasePort => $http_query_database_port, DatabaseProtocol => $http_query_database_protocol, DatabaseSQLDatabase => $http_query_database_sqldatabase, DatabaseUsername => $http_query_database_username, DatabasePasswordKeep => $http_query_database_passwordkeep, DatabasePassword => $http_query_database_password, DatabaseTablePrefix => $http_query_database_tableprefix, Confirm => 1 });
14471                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14472                                         kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14473                                         exit;                           # End the script.
14475                                 }
14477                                 # The action to edit the settings has not been confirmed.
14479                                 my $pagedata = kiriwrite_settings_edit;
14481                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14482                                 kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14483                                 exit;                           # End the script.
14485                         } else {
14487                                 # The action specified was something else other than those
14488                                 # above, so return an error.
14490                                 kiriwrite_error("invalidaction");
14492                         }
14494                 }
14496                 # No action has been specified, so print out the list of settings currently being used.
14498                 my $pagedata = kiriwrite_settings_view;
14500                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14501                 kiriwrite_output_page($kiriwrite_lang->{setting}->{viewsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14502                 exit;                                   # End the script.
14504         } else {
14505                 # Another mode has been specified than the ones above, so return an error saying that
14506                 # an invalid option was specified.
14508                 kiriwrite_error("invalidmode");
14509         }
14511 } else {
14513         # No mode has been specified, so print the default "first-run" view of the
14514         # database list.
14516         my $pagedata = kiriwrite_database_list;
14518         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14519         kiriwrite_output_page("", $pagedata, "database");       # Output the page to browser/console/stdout.
14520         exit;                                   # End the script.
14524 __END__
14526 =head1 NAME
14528 Kiriwrite
14530 =head1 DESCRIPTION
14532 Web-based webpage compiler.
14534 =head1 AUTHOR
14536 Steve Brokenshire <sbrokenshire@xestia.co.uk>
14538 =head1 USAGE
14540 This perl script is intended to be used on a web server which has CGI with Perl support or with mod_perl support.
14542 =head1 DOCUMENTATION
14544 For more information on how to use Kiriwrite, please see the documentation that was included with Kiriwrite.
14546 - From the Xestia Documentation website: http://documentation.xestia.co.uk and click on the Kiriwrite link on the page.
14548 - From the Documentation directory from the Kiriwrite source packages (.tar/.tar.gz/.tar.bz2).
14550 - In the /usr/share/doc/kiriwrite directory if you installed the distribution-specific packages (and also have access to the server itself).
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy