Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Some updates.
[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 CGI::Carp('fatalsToBrowser');       # Output errors to the browser.
30 use Tie::IxHash;
32 # Declare global variables for Kiriwrite settings and languages.
34 my ($kiriwrite_config, %kiriwrite_config, $kiriwrite_lang, $kiriwrite_version, %kiriwrite_version, $kiriwrite_env, %kiriwrite_env, $kiriwrite_presmodule, $kiriwrite_dbmodule);
36 # Setup the version information for Kiriwrite.
38 %kiriwrite_version = (
39         "major"         => 0,
40         "minor"         => 1,
41         "revision"      => 0
42 );
44 sub BEGIN{
45 #################################################################################
46 # BEGIN: Get the enviroment stuff                                               #
47 #################################################################################
49         # Get the script filename.
51         my $env_script_name = $ENV{'SCRIPT_NAME'};
53         # Process the script filename until there is only the
54         # filename itself.
56         my $env_script_name_length = length($env_script_name);
57         my $filename_seek = 0;
58         my $filename_char = "";
59         my $filename_last = 0;
61         do {
62                 $filename_char = substr($env_script_name, $filename_seek, 1);
63                 if ($filename_char eq "/"){
64                         $filename_last = $filename_seek + 1;
65                 }
66                 $filename_seek++;
67         } until ($filename_seek eq $env_script_name_length || $env_script_name_length eq 0);
69         my $env_script_name_finallength = $env_script_name_length - $filename_last;
70         my $script_filename = substr($env_script_name, $filename_last, $env_script_name_finallength);
72         # Setup the needed enviroment variables for Kiriwrite.
74         %kiriwrite_env = (
75                 "script_filename" => $script_filename,
76         );
78 }
80 #################################################################################
81 # Begin listing the functions needed.                                           #
82 #################################################################################
84 sub kiriwrite_page_add{
85 #################################################################################
86 # kiriwrite_page_add: Adds a page to a database                                 #
87 #                                                                               #
88 # Usage:                                                                        #
89 #                                                                               #
90 # kiriwrite_page_add(database, pagefilename, title, description, section,       #
91 #                       template, settings, info, confirm);                     #
92 #                                                                               #
93 # database      Specifies the database name.                                    #
94 # pagefilename  Specifies the page filename.                                    #
95 # title         Specifies the page title to be used.                            #
96 # description   Specifies the short description of the page.                    #
97 # section       Specifies the section assigned to the page.                     #
98 # template      Specifies the template to use.                                  #
99 # settings      Specifies the settings to be used on the page.                  #
100 # data          Specifies the data which consists the page.                     #
101 # confirm       Confirms action to add an page.                                 #
102 #################################################################################
104         # Fetch the required variables that have been passed to the subroutine.
106         my ($pagedatabase, $pagefilename, $pagetitle, $pagedescription, $pagesection, $pagetemplate, $pagesettings, $pagefiledata, $confirm) = @_;
108         # Check if the action to add a new page has been confirmed (or not).
110         if (!$confirm){
112                 $confirm = 0;
114         }
116         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
118         # Check if the database filename is valid and return an error if
119         # it isn't.
121         my $pagedatabase_filename_check = kiriwrite_variablecheck($pagedatabase, "filename", 0, 1);
123         if ($pagedatabase_filename_check eq 1){
125                 # The database filename is blank, so return an error.
127                 kiriwrite_error("blankdatabasepageadd");
129         } elsif ($pagedatabase_filename_check eq 2){
131                 # The database filename is invalid, so return an error.
133                 kiriwrite_error("databasefilenameinvalid");
135         }
137         # Check the length the database name and return an error if it's
138         # too long.
140         my $pagedatabase_length_check   = kiriwrite_variablecheck($pagedatabase, "maxlength", 32, 1);
142         if ($pagedatabase_length_check eq 1){
144                 # The database name is too long, so return an error.
146                 kiriwrite_error("databasefilenametoolong");
148         }
150         if ($confirm eq "1"){
152                 # Check all the variables to see if they UTF8 valid.
154                 kiriwrite_variablecheck($pagefilename, "utf8", 0, 0);
155                 kiriwrite_variablecheck($pagetitle, "utf8", 0, 0);
156                 kiriwrite_variablecheck($pagedescription, "utf8", 0, 0);
157                 kiriwrite_variablecheck($pagesection, "utf8", 0, 0);
158                 kiriwrite_variablecheck($pagedatabase, "utf8", 0, 0);
159                 kiriwrite_variablecheck($pagesettings, "utf8", 0, 0);
160                 kiriwrite_variablecheck($pagetemplate, "utf8", 0, 0);
161                 kiriwrite_variablecheck($pagefiledata, "utf8", 0, 0);
163                 # Convert the values into proper UTF8 values.
165                 $pagefilename           = kiriwrite_utf8convert($pagefilename);
166                 $pagetitle              = kiriwrite_utf8convert($pagetitle);
167                 $pagedescription        = kiriwrite_utf8convert($pagedescription);
168                 $pagesection            = kiriwrite_utf8convert($pagesection);
169                 $pagedatabase           = kiriwrite_utf8convert($pagedatabase);
170                 $pagesettings           = kiriwrite_utf8convert($pagesettings);
171                 $pagetemplate           = kiriwrite_utf8convert($pagetemplate);
172                 $pagefiledata           = kiriwrite_utf8convert($pagefiledata);
174                 # Check all the variables (except for the page data, filename and settings 
175                 # will be checked more specifically later if needed) that were passed to 
176                 # the subroutine.
178                 my $pagefilename_maxlength_check                = kiriwrite_variablecheck($pagefilename, "maxlength", 256, 1);
179                 my $pagetitle_maxlength_check                   = kiriwrite_variablecheck($pagetitle, "maxlength", 512, 1);
180                 my $pagedescription_maxlength_check             = kiriwrite_variablecheck($pagedescription, "maxlength", 512, 1);
181                 my $pagesection_maxlength_check                 = kiriwrite_variablecheck($pagesection, "maxlength", 256, 1);
182                 my $pagedatabase_maxlength_check                = kiriwrite_variablecheck($pagedatabase, "maxlength", 32, 1);
183                 my $pagesettings_maxlength_check                = kiriwrite_variablecheck($pagesettings, "maxlength", 1, 1);
184                 my $pagetemplate_maxlength_check                = kiriwrite_variablecheck($pagetemplate, "maxlength", 64, 1);
186                 # Check if an value returned is something else other than 0.
188                 if ($pagefilename_maxlength_check eq 1){
190                         # The page filename given is too long, so return an error.
192                         kiriwrite_error("pagefilenametoolong");
194                 }
196                 if ($pagetitle_maxlength_check eq 1){
198                         # The page title given is too long, so return an error.
200                         kiriwrite_error("pagetitletoolong");
202                 }
204                 if ($pagedescription_maxlength_check eq 1){
206                         # The page description given is too long, so return an error.
208                         kiriwrite_error("pagedescriptiontoolong");
210                 }
212                 if ($pagesection_maxlength_check eq 1){
214                         # The page section given is too long, so return an error.
216                         kiriwrite_error("pagesectiontoolong");
218                 }
220                 if ($pagedatabase_maxlength_check eq 1){
222                         # The page database given is too long, so return an error.
224                         kiriwrite_error("pagedatabasefilenametoolong");
226                 }
228                 if ($pagesettings_maxlength_check eq 1){
230                         # The page settings given is too long, so return an error.
232                         kiriwrite_error("pagesettingstoolong");
234                 }
236                 if ($pagetemplate_maxlength_check eq 1){
238                         # The page template given is too long, so return an error.
240                         kiriwrite_error("pagetemplatefilenametoolong");
242                 }
244                 # The action to create a new page has been confirmed, so add the page to the
245                 # selected database.
247                 if (!$pagefilename){
248                         kiriwrite_error("pagefilenameblank");
249                 }
251                 # Check the page filename and page settings.
253                 my $pagefilename_filename_check = kiriwrite_variablecheck($pagefilename, "page_filename", 0, 1);
254                 my $pagesettings_setting_check  = kiriwrite_variablecheck($pagesettings, "pagesetting", 0, 1);
255                 my $pagetemplate_filename_check = 0;
257                 if ($pagetemplate ne "!none"){
259                         # A template is being used so check the filename of the
260                         # template.
262                         $pagetemplate_filename_check    = kiriwrite_variablecheck($pagetemplate, "page_filename", 0, 1);
264                 }
266                 if ($pagefilename_filename_check ne 0){
268                         # The page filename given is invalid, so return an error.
270                         kiriwrite_error("pagefilenameinvalid");
272                 }
274                 if ($pagesettings_setting_check eq 1){
276                         # The page settings given is invalid, so return an error.
278                         kiriwrite_error("pagesettingsinvalid");
280                 }
282                 if ($pagetemplate_filename_check eq 1){
284                         # The template filename given is invalid, so return an error
286                         kiriwrite_error("templatefilenameinvalid");
288                 }
290                 # Check if the database has write permissions.
292                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($pagedatabase, 1, 1);
294                 if ($database_permissions eq 1){
296                         # The database permissions are invalid so return an error.
298                         kiriwrite_error("databaseinvalidpermissions");
300                 }
302                 # Connect to the database server.
304                 $kiriwrite_dbmodule->connect();
306                 # Check if any errors occured while connecting to the database server.
308                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
310                         # A database connection error has occured so return
311                         # an error.
313                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
315                 }
317                 # Select the database to add the page to.
319                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $pagedatabase });
321                 # Check if any errors had occured while selecting the database.
323                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
325                         # The database does not exist, so return an error.
327                         kiriwrite_error("databasemissingfile");
329                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
331                         # The database has invalid permissions set, so return
332                         # an error.
334                         kiriwrite_error("databaseinvalidpermissions");
336                 }
338                 # Get information about the database.
340                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
342                 # Check if any error occured while getting the database information.
344                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
346                         # A database error has occured so return an error and
347                         # also the extended error information.
349                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
351                 };
353                 # Add the page to the selected database.
355                 $kiriwrite_dbmodule->addpage({ PageFilename => $pagefilename, PageName => $pagetitle, PageDescription => $pagedescription, PageSection => $pagesection, PageTemplate => $pagetemplate, PageContent => $pagefiledata, PageSettings => $pagesettings });
357                 # Check if any errors occured while adding the page.
359                 if ($kiriwrite_dbmodule->geterror eq "PageExists"){
361                         # A page with the filename given already exists so
362                         # return an error.
364                         kiriwrite_error("pagefilenameexists");
366                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
368                         # A database error has occured so return an error
369                         # with extended error information.
371                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
373                 }
375                 my $database_name = $database_info{"DatabaseName"};
377                 # Disconnect from the database server.
379                 $kiriwrite_dbmodule->disconnect();
381                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{addpage}, { Style => "pageheader" });
382                 $kiriwrite_presmodule->addlinebreak();
383                 $kiriwrite_presmodule->addlinebreak();
384                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pageaddedmessage}, $pagetitle, $database_name));
385                 $kiriwrite_presmodule->addlinebreak();
386                 $kiriwrite_presmodule->addlinebreak();
387                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $pagedatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
389                 return $kiriwrite_presmodule->grab();
391         } elsif ($confirm eq 0) {
393                 # The action to create a new page has not been confirmed, so print out a form
394                 # for adding a page to a database.
396                 my %template_list;
397                 my %template_info;
398                 my @templates_list;
399                 my %database_info;
400                 my $template_filename;
401                 my $template_name;
402                 my $template_data = "";
403                 my $template_warningmessage;
404                 my $template_warning = 0;
405                 my $template_count = 0;
406                 my $template;
408                 tie(%template_list, 'Tie::IxHash');
410                 # Connect to the database server.
412                 $kiriwrite_dbmodule->connect();
414                 # Check if any errors occured while connecting to the database server.
416                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
418                         # A database connection error has occured so return
419                         # an error.
421                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
423                 }
425                 # Select the database.
427                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $pagedatabase });
429                 # Check if any errors had occured while selecting the database.
431                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
433                         # The database does not exist, so return an error.
435                         kiriwrite_error("databasemissingfile");
437                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
439                         # The database has invalid permissions set, so return
440                         # an error.
442                         kiriwrite_error("databaseinvalidpermissions");
444                 }
446                 # Check if the database has write permissions.
448                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($pagedatabase, 1, 1);
450                 if ($database_permissions eq 1){
452                         # The database permissions are invalid so return an error.
454                         kiriwrite_error("databaseinvalidpermissions");
456                 }
458                 # Get information about the database.
460                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
462                 # Check if any error occured while getting the database information.
464                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
466                         # A database error has occured so return an error and
467                         # also the extended error information.
469                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
471                 };
473                 # Connect to the template database.
475                 $kiriwrite_dbmodule->connecttemplate();
477                 # Check if any errors occured while connecting to the template database.
479                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
481                         # The template database does not exist so set the template
482                         # warning message.
484                         $template_warningmessage = $kiriwrite_lang->{pages}->{notemplatedatabase};
485                         $template_warning = 1;
487                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
489                         # The template database has invalid permissions set so write
490                         # the template warning message.
492                         $template_warningmessage = $kiriwrite_lang->{pages}->{templatepermissionserror};
493                         $template_warning = 1;
495                 }
497                 if ($template_warning eq 0){
499                         # Get the list of templates available.
501                         @templates_list = $kiriwrite_dbmodule->gettemplatelist();
503                         # Check if any errors had occured.
505                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
507                                 # A database error occured while getting the list
508                                 # of templates so return a warning message with the 
509                                 # extended error information.
511                                 $template_warningmessage = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1));
512                                 $template_warning = 1;
514                         }
516                         if ($template_warning eq 0){
518                                 # Check to see if there are any templates in the templates
519                                 # list array.
521                                 my $template_filename = "";
522                                 my $template_name = "";
524                                 foreach $template (@templates_list){
526                                         # Get information about the template.
528                                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
530                                         # Check if any error occured while getting the template information.
532                                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
534                                                 # A database error has occured, so return an error.
536                                                 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
538                                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
540                                                 # The template does not exist, so process the next template.
542                                                 next;
544                                         }
546                                         # Get the template filename and name.
548                                         $template_filename = $template_info{"TemplateFilename"};
549                                         $template_name = $template_info{"TemplateName"};
551                                         $template_list{$template_count}{Filename} = $template_filename;
552                                         $template_list{$template_count}{Name} = $template_name;
554                                         $template_count++;
556                                 }
558                                 # Check if the final template list is blank.
560                                 if (!%template_list){
562                                         # The template list is blank so write the template
563                                         # warning message.
565                                         $template_warningmessage = $kiriwrite_lang->{pages}->{notemplatesavailable};
567                                 }
569                         }
571                 }
573                 my $database_name       = $database_info{"DatabaseName"};
575                 # Disconnect from the template database.
577                 $kiriwrite_dbmodule->disconnecttemplate();
579                 # Disconnect from the database server.
581                 $kiriwrite_dbmodule->disconnect();
583                 # write out the form for adding a page.
585                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{addpage}, { Style => "pageheader" });
586                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");#
587                 $kiriwrite_presmodule->startbox();
588                 $kiriwrite_presmodule->addhiddendata("mode", "page");
589                 $kiriwrite_presmodule->addhiddendata("action", "add");
590                 $kiriwrite_presmodule->addhiddendata("database", $pagedatabase);
591                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
592                 $kiriwrite_presmodule->addlinebreak();
593                 $kiriwrite_presmodule->endbox();
594                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
596                 $kiriwrite_presmodule->startheader();
597                 $kiriwrite_presmodule->addcell("tablecellheader");
598                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{setting});
599                 $kiriwrite_presmodule->endcell();
600                 $kiriwrite_presmodule->addcell("tablecellheader");
601                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{value});
602                 $kiriwrite_presmodule->endcell();
603                 $kiriwrite_presmodule->endheader();
605                 $kiriwrite_presmodule->startrow();
606                 $kiriwrite_presmodule->addcell("tablecell1");
607                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{database});
608                 $kiriwrite_presmodule->endcell();
609                 $kiriwrite_presmodule->addcell("tablecell2");
610                 $kiriwrite_presmodule->addtext($database_name);
611                 $kiriwrite_presmodule->endcell();
612                 $kiriwrite_presmodule->endrow();
614                 $kiriwrite_presmodule->startrow();
615                 $kiriwrite_presmodule->addcell("tablecell1");
616                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagename});
617                 $kiriwrite_presmodule->endcell();
618                 $kiriwrite_presmodule->addcell("tablecell2");
619                 $kiriwrite_presmodule->addinputbox("pagename", { Size => 64, MaxLength => 512 });
620                 $kiriwrite_presmodule->endcell();
621                 $kiriwrite_presmodule->endrow();
623                 $kiriwrite_presmodule->startrow();
624                 $kiriwrite_presmodule->addcell("tablecell1");
625                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedescription});
626                 $kiriwrite_presmodule->endcell();
627                 $kiriwrite_presmodule->addcell("tablecell2");
628                 $kiriwrite_presmodule->addinputbox("pagedescription", { Size => 64, MaxLength => 512 });
629                 $kiriwrite_presmodule->endcell();
630                 $kiriwrite_presmodule->endrow();
632                 $kiriwrite_presmodule->startrow();
633                 $kiriwrite_presmodule->addcell("tablecell1");
634                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
635                 $kiriwrite_presmodule->endcell();
636                 $kiriwrite_presmodule->addcell("tablecell2");
637                 $kiriwrite_presmodule->addinputbox("pagesection", { Size => 64, MaxLength => 256 });
638                 $kiriwrite_presmodule->endcell();
639                 $kiriwrite_presmodule->endrow();
641                 $kiriwrite_presmodule->startrow();
642                 $kiriwrite_presmodule->addcell("tablecell1");
643                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
644                 $kiriwrite_presmodule->endcell();
645                 $kiriwrite_presmodule->addcell("tablecell2");
647                 # Check if the template warning value has been set
648                 # and write the error message in place of the templates
649                 # list if it is.
651                 if ($template_warning eq 1){
653                         $kiriwrite_presmodule->addhiddendata("pagetemplate", "!none");
654                         $kiriwrite_presmodule->addtext($template_warningmessage);
656                 } else {
658                         my $template_file;
659                         my $page_filename;
660                         my $page_name;
662                         $kiriwrite_presmodule->addselectbox("pagetemplate");
664                         foreach $template_file (keys %template_list){
666                                 $page_filename  = $template_list{$template_file}{Filename};
667                                 $page_name      = $template_list{$template_file}{Name};
668                                 $kiriwrite_presmodule->addoption($page_name . " (" . $page_filename . ")", { Value => $page_filename });
669                                 $template_count++;
671                                 $template_count = 0;
672                         }
674                         $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
675                         $kiriwrite_presmodule->endselectbox();
677                 }
679                 $kiriwrite_presmodule->endcell();
680                 $kiriwrite_presmodule->endrow();
682                 $kiriwrite_presmodule->startrow();
683                 $kiriwrite_presmodule->addcell("tablecell1");
684                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagefilename});
685                 $kiriwrite_presmodule->endcell();
686                 $kiriwrite_presmodule->addcell("tablecell2");
687                 $kiriwrite_presmodule->addinputbox("pagefilename", { Size => 64, MaxLength => 256 });
688                 $kiriwrite_presmodule->endcell();
689                 $kiriwrite_presmodule->endrow();
691                 $kiriwrite_presmodule->startrow();
692                 $kiriwrite_presmodule->addcell("tablecell1");
693                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagecontent});
694                 $kiriwrite_presmodule->endcell();
695                 $kiriwrite_presmodule->addcell("tablecell2");
696                 $kiriwrite_presmodule->addtextbox("pagecontent", { Columns => 50, Rows => 10 });
697                 $kiriwrite_presmodule->addlinebreak();
698                 $kiriwrite_presmodule->addlinebreak();
699                 $kiriwrite_presmodule->startbox("datalist");
700                 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
701                 $kiriwrite_presmodule->addlinebreak();
702                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
703                 $kiriwrite_presmodule->addlinebreak();
704                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
705                 $kiriwrite_presmodule->addlinebreak();
706                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
707                 $kiriwrite_presmodule->addlinebreak();
708                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
709                 $kiriwrite_presmodule->addlinebreak();
710                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
711                 $kiriwrite_presmodule->addlinebreak();
712                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
713                 $kiriwrite_presmodule->addlinebreak();
714                 $kiriwrite_presmodule->endbox();
715                 $kiriwrite_presmodule->endcell();
716                 $kiriwrite_presmodule->endrow();
718                 $kiriwrite_presmodule->startrow();
719                 $kiriwrite_presmodule->addcell("tablecell1");
720                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
721                 $kiriwrite_presmodule->endcell();
722                 $kiriwrite_presmodule->addcell("tablecell2");
723                 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", Selected => 1, LineBreak => 1});
724                 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", Selected => 0, LineBreak => 1});
725                 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", Selected => 0, LineBreak => 1});
726                 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", Selected => 0, LineBreak => 1});
727                 $kiriwrite_presmodule->endcell();
728                 $kiriwrite_presmodule->endrow();
730                 $kiriwrite_presmodule->endtable();
732                 $kiriwrite_presmodule->startbox();
733                 $kiriwrite_presmodule->addlinebreak();
734                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{addpagebutton});
735                 $kiriwrite_presmodule->addtext(" | ");
736                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
737                 $kiriwrite_presmodule->addtext(" | ");
738                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $pagedatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
739                 $kiriwrite_presmodule->endbox();
740                 $kiriwrite_presmodule->endform();
743                 return $kiriwrite_presmodule->grab();
745         } else {
747                 # The confirm value is something else than '1' or '0' so
748                 # return an error.
750                 kiriwrite_error("invalidvalue");
752         }
758 sub kiriwrite_page_delete{
759 #################################################################################
760 # kiriwrite_page_delete: Deletes a (single) page from a database.               #
761 #                                                                               #
762 # Usage:                                                                        #
763 #                                                                               #
764 # kiriwrite_page_delete(database, page, [confirm]);                             #
765 #                                                                               #
766 # database      Specifies the database to delete from.                          #
767 # page          Specifies the page to delete.                                   #
768 # confirm       Confirms the action to delete the page.                         #
769 #################################################################################
771         my ($database, $page, $confirm) = @_;
773         # Check if the database filename is valid and return an error if
774         # it isn't.
776         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
778         if ($pagedatabase_filename_check eq 1){
780                 # The database filename is blank, so return an error.
782                 kiriwrite_error("blankdatabasepageadd");
784         } elsif ($pagedatabase_filename_check eq 2){
786                 # The database filename is invalid, so return an error.
788                 kiriwrite_error("databasefilenameinvalid");
790         }
792         # Check the length the database name and return an error if it's
793         # too long.
795         my $pagedatabase_length_check   = kiriwrite_variablecheck($database, "maxlength", 32, 1);
797         if ($pagedatabase_length_check eq 1){
799                 # The database name is too long, so return an error.
801                 kiriwrite_error("databasefilenametoolong");
803         }
805         # Check if the page name is specified is blank and return an error if
806         # it is.
808         if (!$page){
810                 # The page name is blank, so return an error.
812                 kiriwrite_error("blankfilename");
814         }
816         # If the confirm value is blank, then set the confirm value to 0.
818         if (!$confirm){
820                 $confirm = 0;
822         }
824         if ($confirm eq 1){
826                 # The action to delete the selected page from the database
827                 # has been confirmed.
829                 # Connect to the database server.
831                 $kiriwrite_dbmodule->connect();
833                 # Check if any errors occured while connecting to the database server.
835                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
837                         # A database connection error has occured so return
838                         # an error.
840                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
842                 }
844                 # Select the database to delete the page from.
846                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
848                 # Check if any errors had occured while selecting the database.
850                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
852                         # The database does not exist, so return an error.
854                         kiriwrite_error("databasemissingfile");
856                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
858                         # The database has invalid permissions set, so return
859                         # an error.
861                         kiriwrite_error("databaseinvalidpermissions");
863                 }
865                 # Check if the database has write permissions.
867                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
869                 if ($database_permissions eq 1){
871                         # The database permissions are invalid so return an error.
873                         kiriwrite_error("databaseinvalidpermissions");
875                 }
877                 # Get the information about the database.
879                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
881                 # Check if any error occured while getting the database information.
883                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
885                         # A database error has occured so return an error and
886                         # also the extended error information.
888                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
890                 }
892                 # Get the information about the page that is going to be deleted.
894                 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
896                 # Check if any errors occured while getting the page information.
898                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
900                         # A database error has occured so return an error and
901                         # also the extended error information.
903                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
905                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
907                         # The page does not exist, so return an error.
909                         kiriwrite_error("pagefilenamedoesnotexist");
911                 }
913                 # Delete the page from the database.
915                 $kiriwrite_dbmodule->deletepage({ PageFilename => $page });
917                 # Check if any errors occured while deleting the page from the database.
919                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
921                         # A database error has occured so return an error and
922                         # also the extended error information.
924                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
926                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
928                         # The page does not exist, so return an error.
930                         kiriwrite_error("pagefilenamedoesnotexist");
932                 }
934                 # Get the database name and page name.
936                 my $database_name       = $database_info{"DatabaseName"};
937                 my $page_name           = $page_info{"PageName"};
939                 # Disconnect from the database server.
941                 $kiriwrite_dbmodule->disconnect();
943                 # Write out a message saying that the selected page from
944                 # the database has been deleted.
946                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedeleted}, { Style => "pageheader" });
947                 $kiriwrite_presmodule->addlinebreak();
948                 $kiriwrite_presmodule->addlinebreak();
949                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagedeletedmessage}, $page_name, $database_name));
950                 $kiriwrite_presmodule->addlinebreak();
951                 $kiriwrite_presmodule->addlinebreak();
952                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
954                 return $kiriwrite_presmodule->grab();
956         } elsif ($confirm eq 0){
958                 # Connect to the database server.
960                 $kiriwrite_dbmodule->connect();
962                 # Check if any errors occured while connecting to the database server.
964                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
966                         # A database connection error has occured so return
967                         # an error.
969                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
971                 }
973                 # Select the database.
975                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
977                 # Check if any errors had occured while selecting the database.
979                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
981                         # The database does not exist, so return an error.
983                         kiriwrite_error("databasemissingfile");
985                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
987                         # The database has invalid permissions set, so return
988                         # an error.
990                         kiriwrite_error("databaseinvalidpermissions");
992                 }
994                 # Get information about the database.
996                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
998                 # Check if any errors occured while getting the database information.
1000                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1002                         # A database error has occured so return an error and
1003                         # also the extended error information.
1005                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1007                 }
1009                 # Get information about the page that is going to be deleted.
1011                 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
1013                 # Check if any errors occured while getting the page information.
1015                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1017                         # A database error has occured so return an error and
1018                         # also the extended error information.
1020                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1022                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1024                         # The page does not exist, so return an error.
1026                         kiriwrite_error("pagefilenamedoesnotexist");
1028                 }
1030                 my $database_name       = $database_info{"DatabaseName"};
1031                 my $page_name           = $page_info{"PageName"};
1033                 # Disconnect from the database server.
1035                 $kiriwrite_dbmodule->disconnect();
1037                 # Write a message asking the user to confirm the deletion of the
1038                 # page.
1040                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletepage}, $page_name), { Style => "pageheader" });
1041                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1042                 $kiriwrite_presmodule->startbox();
1043                 $kiriwrite_presmodule->addhiddendata("mode", "page");
1044                 $kiriwrite_presmodule->addhiddendata("action", "delete");
1045                 $kiriwrite_presmodule->addhiddendata("database", $database);
1046                 $kiriwrite_presmodule->addhiddendata("page", $page);
1047                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
1048                 $kiriwrite_presmodule->addlinebreak();
1049                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletepagemessage}, $page_name, $database_name));
1050                 $kiriwrite_presmodule->addlinebreak();
1051                 $kiriwrite_presmodule->addlinebreak();
1052                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{deletepagebutton});
1053                 $kiriwrite_presmodule->addtext(" | ");
1054                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{deletepagesreturnlink}, $database_name)});
1055                 $kiriwrite_presmodule->endbox();
1056                 $kiriwrite_presmodule->endform();
1058                 return $kiriwrite_presmodule->grab();
1060         } else {
1062                 # Another page deletion type was specified, so return an error.
1064                 kiriwrite_error("invalidoption");
1066         }
1070 sub kiriwrite_page_edit{
1071 #################################################################################
1072 # kiriwrite_page_edit: Edits a page from a database.                            #
1073 #                                                                               #
1074 # Usage:                                                                        #
1075 #                                                                               #
1076 # kiriwrite_page_edit(database, filename, newfilename, newname, newdescription, #
1077 #                       newsection, newtemplate,  newsettings, newpagecontent   #
1078 #                       confirm);                                               #
1079 #                                                                               #
1080 # database       Specifies the database to edit from.                           #
1081 # filename       Specifies the filename to use.                                 #
1082 # newfilename    Specifies the new page filename to use.                        #
1083 # newname        Specifies the new page name to use.                            #
1084 # newdescription Specifies the new description for the page.                    #
1085 # newsection     Specifies the new section name to use.                         #
1086 # newtemplate    Specifies the new template filename to use.                    #
1087 # newsettings    Specifies the new page settings to use.                        #
1088 # newpagecontent Specifies the new page content to use.                         #
1089 # confirm        Confirms the action to edit the page.                          #
1090 #################################################################################
1092         # Get the values that have been passed to the subroutine.
1094         my ($database, $pagefilename, $pagenewfilename, $pagenewtitle, $pagenewdescription, $pagenewsection, $pagenewtemplate, $pagenewsettings, $pagenewcontent, $confirm) = @_;
1096         # Check if the confirm value is blank and if it is, then set it to '0'.
1098         if (!$confirm){
1100                 $confirm = 0;
1102         }
1104         # Check if the confirm value is more than one character long and if it
1105         # is then return an error.
1107         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
1109         # Check if the database filename is valid and return an error if
1110         # it isn't.
1112         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
1114         if ($pagedatabase_filename_check eq 1){
1116                 # The database filename is blank, so return an error.
1118                 kiriwrite_error("blankdatabasepageadd");
1120         } elsif ($pagedatabase_filename_check eq 2){
1122                 # The database filename is invalid, so return an error.
1124                 kiriwrite_error("databasefilenameinvalid");
1126         }
1128         # Check the length the database name and return an error if it's
1129         # too long.
1131         my $pagedatabase_length_check   = kiriwrite_variablecheck($database, "maxlength", 32, 1);
1133         if ($pagedatabase_length_check eq 1){
1135                 # The database name is too long, so return an error.
1137                 kiriwrite_error("databasefilenametoolong");
1139         }
1141         # Check if the page identification number is blank (which it shouldn't
1142         # be) and if it is, then return an error.
1144         if (!$pagefilename){
1146                 kiriwrite_error("blankfilename");
1148         }
1150         # Check if the confirm value is '1' and if it is, edit the specified
1151         # page in the database.
1153         if ($confirm eq 1){
1155                 # Check if the new page filename is blank.
1157                 if (!$pagenewfilename){
1159                         # The page filename is blank so return an error.
1161                         kiriwrite_error("pagefilenameblank");
1163                 }
1165                 # The action to edit a page has been confirmed so check the
1166                 # variables recieved are UTF8 compiliant before converting.
1168                 kiriwrite_variablecheck($database, "utf8", 0, 0);
1169                 kiriwrite_variablecheck($pagefilename, "utf8", 0, 0);
1170                 kiriwrite_variablecheck($pagenewfilename, "utf8", 0, 0);
1171                 kiriwrite_variablecheck($pagenewtitle, "utf8", 0, 0);
1172                 kiriwrite_variablecheck($pagenewdescription, "utf8", 0, 0);
1173                 kiriwrite_variablecheck($pagenewsection, "utf8", 0, 0);
1174                 kiriwrite_variablecheck($pagenewsettings, "utf8", 0, 0);
1175                 kiriwrite_variablecheck($pagenewtemplate, "utf8", 0, 0);
1176                 kiriwrite_variablecheck($pagenewcontent, "utf8", 0, 0);
1178                 # Convert the variables into proper UTF8 variables.
1180                 $database               = kiriwrite_utf8convert($database);
1181                 $pagefilename           = kiriwrite_utf8convert($pagefilename);
1182                 $pagenewfilename        = kiriwrite_utf8convert($pagenewfilename);
1183                 $pagenewtitle           = kiriwrite_utf8convert($pagenewtitle);
1184                 $pagenewdescription     = kiriwrite_utf8convert($pagenewdescription);
1185                 $pagenewsection         = kiriwrite_utf8convert($pagenewsection);
1186                 $pagenewsettings        = kiriwrite_utf8convert($pagenewsettings);
1187                 $pagenewtemplate        = kiriwrite_utf8convert($pagenewtemplate);
1188                 $pagenewcontent         = kiriwrite_utf8convert($pagenewcontent);
1190                 # Check the lengths of the variables.
1192                 my $pagenewfilename_maxlength_check     = kiriwrite_variablecheck($pagenewfilename, "maxlength", 256, 1);
1193                 my $pagenewtitle_maxlength_check        = kiriwrite_variablecheck($pagenewtitle, "maxlength", 512, 1);
1194                 my $pagenewdescription_maxlength_check  = kiriwrite_variablecheck($pagenewdescription, "maxlength", 512, 1);
1195                 my $pagenewsection_maxlength_check      = kiriwrite_variablecheck($pagenewsection, "maxlength", 256, 1);
1196                 my $pagenewsettings_maxlength_check     = kiriwrite_variablecheck($pagenewsettings, "maxlength", 1, 1);
1197                 my $pagenewtemplate_maxlength_check     = kiriwrite_variablecheck($pagenewtemplate, "maxlength", 64, 1);
1199                 # Check each result to see if the length of the variable
1200                 # is valid and return an error if it isn't.
1202                 if ($pagenewfilename_maxlength_check eq 1){
1204                         # The new page filename given is too long, so return an error.
1206                         kiriwrite_error("pagefilenametoolong");
1208                 }
1210                 if ($pagenewtitle_maxlength_check eq 1){
1212                         # The new page title given is too long, so return an error.
1214                         kiriwrite_error("pagetitletoolong");
1216                 }
1218                 if ($pagenewdescription_maxlength_check eq 1){
1220                         # The new page description given is too long, so return an error.
1222                         kiriwrite_error("pagedescriptiontoolong");
1224                 }
1226                 if ($pagenewsection_maxlength_check eq 1){
1228                         # The new page section given is too long, so return an error.
1230                         kiriwrite_error("pagesectiontoolong");
1232                 }
1234                 if ($pagenewsettings_maxlength_check eq 1){
1236                         # The new page settings given is too long, so return an error.
1238                         kiriwrite_error("pagesettingstoolong");
1240                 }
1242                 if ($pagenewtemplate_maxlength_check eq 1){
1244                         # The new page template given is too long, so return an error.
1246                         kiriwrite_error("pagetemplatefilenametoolong");
1248                 }
1250                 # Check if the new page filename and new page settings
1251                 # are valid.
1253                 my $pagenewfilename_filename_check      = kiriwrite_variablecheck($pagenewfilename, "page_filename", 0, 1);
1254                 my $pagenewsettings_settings_check      = kiriwrite_variablecheck($pagenewsettings, "pagesetting", 0, 1);
1255                 my $pagetemplate_filename_check = 0;
1257                 if ($pagenewtemplate ne "!none"){
1259                         # A template is being used so check the filename of the
1260                         # template.
1262                         $pagetemplate_filename_check    = kiriwrite_variablecheck($pagenewtemplate, "page_filename", 0, 1);
1264                 }
1266                 # Check each result to see if the variables have passed
1267                 # their tests and return an error if they haven't.
1269                 if ($pagenewfilename_filename_check ne 0){
1271                         # The new page filename is invalid, so return an error.
1273                         kiriwrite_error("pagefilenameinvalid");
1275                 }
1277                 if ($pagenewsettings_settings_check eq 1){
1279                         # The new page settings is invalid, so return an error.
1281                         kiriwrite_error("pagesettingsinvalid");
1283                 }
1285                 if ($pagetemplate_filename_check eq 1){
1287                         # The template filename given is invalid, so return an error
1289                         kiriwrite_error("templatefilenameinvalid");
1291                 }
1293                 # Connect to the database server.
1295                 $kiriwrite_dbmodule->connect();
1297                 # Check if any errors occured while connecting to the database server.
1299                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1301                         # A database connection error has occured so return
1302                         # an error.
1304                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1306                 }
1308                 # Select the database.
1310                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1312                 # Check if any errors had occured while selecting the database.
1314                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1316                         # The database does not exist, so return an error.
1318                         kiriwrite_error("databasemissingfile");
1320                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1322                         # The database has invalid permissions set, so return
1323                         # an error.
1325                         kiriwrite_error("databaseinvalidpermissions");
1327                 }
1329                 # Check if the database has write permissions.
1331                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
1333                 if ($database_permissions eq 1){
1335                         # The database permissions are invalid so return an error.
1337                         kiriwrite_error("databaseinvalidpermissions");
1339                 }
1341                 # Get the database information.
1343                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1345                 # Check if any errors had occured while getting the database information.
1347                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1349                         # A database error has occured so return an error and
1350                         # also the extended error information.
1352                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1354                 };
1356                 my $database_name = $database_info{"DatabaseName"};
1358                 # Edit the selected page.
1360                 $kiriwrite_dbmodule->editpage({ PageFilename => $pagefilename, PageNewFilename => $pagenewfilename, PageNewName => $pagenewtitle, PageNewDescription => $pagenewdescription, PageNewSection => $pagenewsection, PageNewTemplate => $pagenewtemplate, PageNewContent => $pagenewcontent, PageNewSettings => $pagenewsettings });
1362                 # Check if any errors occured while editing the page.
1364                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1366                         # A database error has occured so return an error and
1367                         # also the extended error information.
1369                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1371                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1373                         # The pages does not exist in the database.
1375                         kiriwrite_error("pagefilenamedoesnotexist");
1377                 } elsif ($kiriwrite_dbmodule->geterror eq "PageExists"){
1379                         # A page already exists with the new filename.
1381                         kiriwrite_error("pagefilenameexists");
1383                 }
1385                 # Disconnect from the database server.
1387                 $kiriwrite_dbmodule->disconnect();
1389                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{editedpage}, { Style => "pageheader" });
1390                 $kiriwrite_presmodule->addlinebreak();
1391                 $kiriwrite_presmodule->addlinebreak();
1392                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{editedpagemessage}, $pagenewtitle));
1393                 $kiriwrite_presmodule->addlinebreak();
1394                 $kiriwrite_presmodule->addlinebreak();
1395                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
1397                 return $kiriwrite_presmodule->grab();
1399         } elsif ($confirm eq 0) {
1401                 # Connect to the database server.
1403                 $kiriwrite_dbmodule->connect();
1405                 # Check if any errors occured while connecting to the database server.
1407                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1409                         # A database connection error has occured so return
1410                         # an error.
1412                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1414                 }
1416                 # Select the database.
1418                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1420                 # Check if any errors had occured while selecting the database.
1422                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1424                         # The database does not exist, so return an error.
1426                         kiriwrite_error("databasemissingfile");
1428                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1430                         # The database has invalid permissions set, so return
1431                         # an error.
1433                         kiriwrite_error("databaseinvalidpermissions");
1435                 }
1437                 # Get the information about the database.
1439                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1441                 # Check if any errors had occured while getting the database information.
1443                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1445                         # A database error has occured so return an error and
1446                         # also the extended error information.
1448                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1450                 };
1452                 my $database_name = $database_info{"DatabaseName"};
1454                 # Get the page info.
1456                 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $pagefilename });
1458                 # Check if any errors occured while getting the page information.
1460                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1462                         # A database error has occured so return an error and
1463                         # also the extended error information.
1465                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1467                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1469                         # The page does not exist, so return an error.
1471                         kiriwrite_error("pagefilenamedoesnotexist");
1473                 }
1475                 # Get the values from the hash.
1477                 my $data_filename               = $page_info{"PageFilename"};
1478                 my $data_name                   = $page_info{"PageName"};
1479                 my $data_description            = $page_info{"PageDescription"};
1480                 my $data_section                = $page_info{"PageSection"};
1481                 my $data_template               = $page_info{"PageTemplate"};
1482                 my $data_content                = $page_info{"PageContent"};
1483                 my $data_settings               = $page_info{"PageSettings"};
1484                 my $data_lastmodified           = $page_info{"PageLastModified"};
1486                 my $template_warning;
1487                 my $page_count = 0;
1488                 my %template_list;
1489                 my %template_info;
1490                 my @database_pages;
1491                 my @database_info;
1492                 my @database_templates;
1493                 my @template_filenames;
1494                 my $template_file;
1495                 my $template_filename;
1496                 my $template_name;
1497                 my $template_count = 0;
1498                 my $template_found = 0;
1500                 tie(%template_list, 'Tie::IxHash');
1502                 # Connect to the template database.
1504                 $kiriwrite_dbmodule->connecttemplate();
1506                 # Check if any errors occured while connecting to the template database.
1508                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
1510                         # The template database does not exist so set the template
1511                         # warning message.
1513                         $template_warning = $kiriwrite_lang->{pages}->{notemplatedatabasekeep};
1515                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
1517                         # The template database has invalid permissions set so write
1518                         # the template warning message.
1520                         $template_warning = $kiriwrite_lang->{pages}->{templatepermissionserrorkeep};
1522                 }
1524                 if (!$template_warning){
1526                         # Get the list of available templates.
1528                         @template_filenames = $kiriwrite_dbmodule->gettemplatelist();
1530                         # Check if any errors had occured.
1532                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1534                                 # A database error occured while getting the list
1535                                 # of templates so return an error with the 
1536                                 # extended error information.
1538                                 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrorkeep} , $kiriwrite_dbmodule->geterror(1));
1540                         }
1542                         if (!$template_warning){
1544                                 foreach $template_filename (@template_filenames){
1546                                         # Get the information about each template.
1548                                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
1550                                         # Check if any errors occured while getting the template information.
1552                                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1554                                                 # A template database error has occured so return a warning message
1555                                                 # with the extended error information.
1557                                                 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrorkeep} , $kiriwrite_dbmodule->geterror(1));
1558                                                 last;
1560                                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
1562                                                 # The template does not exist so process the next template.
1564                                                 next;
1566                                         }
1568                                         # Append the template name and filename to the list of available templates.
1570                                         $template_list{$template_count}{Filename} = $template_info{"TemplateFilename"};
1571                                         $template_list{$template_count}{Name}     = $template_info{"TemplateName"};
1573                                         # Append the template filename and name and make it the selected
1574                                         # template if that is the template the page is using.
1576                                         if ($data_template eq $template_filename && !$template_found){
1578                                                 $template_list{$template_count}{Selected}       = 1;
1579                                                 $template_found = 1;
1581                                         } else {
1583                                                 $template_list{$template_count}{Selected}       = 0;
1585                                         }
1587                                         $template_count++;
1589                                 }
1591                         }
1593                 }
1595                 # Check if certain values are undefined and if they
1596                 # are then set them blank (defined).
1598                 if (!$data_name){
1599                         $data_name = "";
1600                 }
1602                 if (!$data_description){
1603                         $data_description = "";
1604                 }
1606                 if (!$data_section){
1607                         $data_section = "";
1608                 }
1610                 if (!$data_template){
1611                         $data_template = "";
1613                 }
1615                 if (!$data_content){
1616                         $data_content = "";
1617                 }
1619                 if (!$data_settings){
1620                         $data_settings = "";
1621                 }
1623                 if (!$data_lastmodified){
1624                         $data_lastmodified = "";
1625                 }
1627                 # Begin writing out the form for editing the selected page.
1629                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{editpage}, $data_name), { Style => "pageheader" });
1630                 $kiriwrite_presmodule->addlinebreak();
1631                 $kiriwrite_presmodule->addlinebreak();
1633                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1634                 $kiriwrite_presmodule->startbox();
1635                 $kiriwrite_presmodule->addhiddendata("mode", "page");
1636                 $kiriwrite_presmodule->addhiddendata("action", "edit");
1637                 $kiriwrite_presmodule->addhiddendata("database", $database);
1638                 $kiriwrite_presmodule->addhiddendata("page", $pagefilename);
1639                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
1640                 $kiriwrite_presmodule->endbox();
1642                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
1644                 $kiriwrite_presmodule->startheader();
1645                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
1646                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
1647                 $kiriwrite_presmodule->endheader();
1649                 $kiriwrite_presmodule->startrow();
1650                 $kiriwrite_presmodule->addcell("tablecell1");
1651                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{database});
1652                 $kiriwrite_presmodule->endcell();
1653                 $kiriwrite_presmodule->addcell("tablecell2");
1654                 $kiriwrite_presmodule->addtext($database_name);
1655                 $kiriwrite_presmodule->endcell();
1656                 $kiriwrite_presmodule->endrow();
1658                 $kiriwrite_presmodule->startrow();
1659                 $kiriwrite_presmodule->addcell("tablecell1");
1660                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagename});
1661                 $kiriwrite_presmodule->endcell();
1662                 $kiriwrite_presmodule->addcell("tablecell2");
1663                 $kiriwrite_presmodule->addinputbox("pagename", { Size => 64, MaxLength => 256, Value => $data_name });
1664                 $kiriwrite_presmodule->endcell();
1665                 $kiriwrite_presmodule->endrow();
1667                 $kiriwrite_presmodule->startrow();
1668                 $kiriwrite_presmodule->addcell("tablecell1");
1669                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedescription});
1670                 $kiriwrite_presmodule->endcell();
1671                 $kiriwrite_presmodule->addcell("tablecell2");
1672                 $kiriwrite_presmodule->addinputbox("pagedescription", { Size => 64, MaxLength => 256, Value => $data_description });
1673                 $kiriwrite_presmodule->endcell();
1674                 $kiriwrite_presmodule->endrow();
1676                 $kiriwrite_presmodule->startrow();
1677                 $kiriwrite_presmodule->addcell("tablecell1");
1678                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
1679                 $kiriwrite_presmodule->endcell();
1680                 $kiriwrite_presmodule->addcell("tablecell2");
1681                 $kiriwrite_presmodule->addinputbox("pagesection", { Size => 64, MaxLength => 256, Value => $data_section });
1682                 $kiriwrite_presmodule->endcell();
1683                 $kiriwrite_presmodule->endrow();
1685                 $kiriwrite_presmodule->startrow();
1686                 $kiriwrite_presmodule->addcell("tablecell1");
1687                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
1688                 $kiriwrite_presmodule->endcell();
1689                 $kiriwrite_presmodule->addcell("tablecell2");
1691                 # Check if any template warnings have occured.
1693                 if ($template_warning){
1695                         $kiriwrite_presmodule->addtext($template_warning);
1696                         $kiriwrite_presmodule->addlinebreak();
1698                 }
1700                 $kiriwrite_presmodule->addselectbox("pagetemplate");
1702                 # Process the list of templates, select one if the
1703                 # template filename for the page matches, else give
1704                 # an option for the user to keep the current template
1705                 # filename.
1707                 $template_count = 0;
1709                 foreach $template_file (keys %template_list){
1711                         if ($template_list{$template_count}{Selected}){
1713                                 $kiriwrite_presmodule->addoption($template_list{$template_count}{Name} . " (" . $template_list{$template_count}{Filename} . ")", { Value => $template_list{$template_count}{Filename}, Selected => 1 });
1715                         } else {
1717                                 $kiriwrite_presmodule->addoption($template_list{$template_count}{Name} . " (" . $template_list{$template_count}{Filename} . ")", { Value => $template_list{$template_count}{Filename} });
1719                         }
1721                         $template_count++;
1723                 }
1725                 if ($data_template eq "!none"){
1727                         $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
1728                         $template_found = 1;
1730                 } else {
1732                         $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none" });
1734                 }
1736                 if ($template_found eq 0 && $data_template ne "!none"){
1738                         # The template with the filename given was not found.
1740                         $kiriwrite_presmodule->addoption(kiriwrite_language($kiriwrite_lang->{pages}->{keeptemplatefilename}, $data_template), { Value => $data_template, Selected => 1, Style => "warningoption" });
1742                 }
1744                 # Disconnect from the template database.
1746                 $kiriwrite_dbmodule->disconnecttemplate();
1748                 # Disconnect from the database server.
1750                 $kiriwrite_dbmodule->disconnect();
1752                 $kiriwrite_presmodule->endselectbox();
1754                 $kiriwrite_presmodule->endcell();
1755                 $kiriwrite_presmodule->endrow();
1757                 $kiriwrite_presmodule->startrow();
1758                 $kiriwrite_presmodule->addcell("tablecell1");
1759                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagefilename});
1760                 $kiriwrite_presmodule->endcell();
1761                 $kiriwrite_presmodule->addcell("tablecell2");
1762                 $kiriwrite_presmodule->addinputbox("pagefilename", { Size => 64, MaxLength => 256, Value => $data_filename });
1763                 $kiriwrite_presmodule->endcell();
1764                 $kiriwrite_presmodule->endrow();
1766                 $kiriwrite_presmodule->startrow();
1767                 $kiriwrite_presmodule->addcell("tablecell1");
1768                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagecontent});
1769                 $kiriwrite_presmodule->endcell();
1770                 $kiriwrite_presmodule->addcell("tablecell2");
1771                 $kiriwrite_presmodule->addtextbox("pagecontent", { Columns => 50, Rows => 10, Value => $data_content });
1772                 $kiriwrite_presmodule->addlinebreak();
1773                 $kiriwrite_presmodule->addlinebreak();
1774                 $kiriwrite_presmodule->startbox("datalist");
1775                 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
1776                 $kiriwrite_presmodule->addlinebreak();
1777                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
1778                 $kiriwrite_presmodule->addlinebreak();
1779                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
1780                 $kiriwrite_presmodule->addlinebreak();
1781                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
1782                 $kiriwrite_presmodule->addlinebreak();
1783                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
1784                 $kiriwrite_presmodule->addlinebreak();
1785                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
1786                 $kiriwrite_presmodule->addlinebreak();
1787                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
1788                 $kiriwrite_presmodule->addlinebreak();
1789                 $kiriwrite_presmodule->endbox();
1790                 $kiriwrite_presmodule->endcell();
1791                 $kiriwrite_presmodule->endrow();
1793                 $kiriwrite_presmodule->startrow();
1794                 $kiriwrite_presmodule->addcell("tablecell1");
1795                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
1796                 $kiriwrite_presmodule->endcell();
1797                 $kiriwrite_presmodule->addcell("tablecell2");
1799                 # Check if the page settings value is set to a 
1800                 # certain number and select that option based
1801                 # on the number else set the value to 0.
1803                 if ($data_settings eq 1){
1804                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", Selected => 1, LineBreak => 1});
1805                 } else {
1806                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", LineBreak => 1});
1807                 }
1809                 if ($data_settings eq 2){
1810                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", Selected => 1, LineBreak => 1});
1811                 } else {
1812                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", LineBreak => 1});
1813                 }
1815                 if ($data_settings eq 3){
1816                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", Selected => 1, LineBreak => 1});
1817                 } else {
1818                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", LineBreak => 1});
1819                 }
1821                 if ($data_settings eq 0 || ($data_settings ne 1 && $data_settings ne 2 && $data_settings ne 3)){
1822                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", Selected => 1, LineBreak => 1});
1823                 } else {
1824                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", LineBreak => 1});
1825                 }
1827                 $kiriwrite_presmodule->endcell();
1828                 $kiriwrite_presmodule->endrow();
1829                 $kiriwrite_presmodule->endtable();
1831                 $kiriwrite_presmodule->startbox();
1832                 $kiriwrite_presmodule->addlinebreak();
1833                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{editpagebutton});
1834                 $kiriwrite_presmodule->addtext(" | ");
1835                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
1836                 $kiriwrite_presmodule->addtext(" | ");
1837                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) } );
1838                 $kiriwrite_presmodule->endbox();
1840                 $kiriwrite_presmodule->endform();
1842                 return $kiriwrite_presmodule->grab();
1844         } else {
1846                 # The confirm value is a value other than '0' and '1' so
1847                 # return an error.
1849                 kiriwrite_error("invalidvalue");
1851         }
1855 sub kiriwrite_page_multidelete{
1856 #################################################################################
1857 # kiriwrite_page_multidelete: Delete mulitple pages from the database.          #
1858 #                                                                               #
1859 # Usage:                                                                        #
1860 #                                                                               #
1861 # kiriwrite_page_multidelete(database, confirm, filelist);                      #
1862 #                                                                               #
1863 # database      Specifies the database to delete multiple pages from.           #
1864 # confirm       Confirms the action to delete the selected pages from the       #
1865 #               database.                                                       #
1866 # filelist      The list of files to delete from the selected database.         #
1867 #################################################################################
1869         # Get the information passed to the subroutine.
1871         my ($database, $confirm, @filelist) = @_;
1873         # Check if the database name is blank and return an error if
1874         # it is.
1876         if (!$database){
1878                 # The database name is blank so return an error.
1880                 kiriwrite_error("databasenameblank");
1882         }
1884         # Check if the file list array has any values and return
1885         # an error if it doesn't.
1887         if (!@filelist){
1889                 # The page list really is blank so return
1890                 # an error.
1892                 kiriwrite_error("nopagesselected");
1893         }
1895         # Check if the database filename is valid and return an error if
1896         # it isn't.
1898         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
1900         if ($pagedatabase_filename_check eq 1){
1902                 # The database filename is blank, so return an error.
1904                 kiriwrite_error("blankdatabasepageadd");
1906         } elsif ($pagedatabase_filename_check eq 2){
1908                 # The database filename is invalid, so return an error.
1910                 kiriwrite_error("databasefilenameinvalid");
1912         }
1914         # Check the length the database name and return an error if it's
1915         # too long.
1917         my $pagedatabase_length_check   = kiriwrite_variablecheck($database, "maxlength", 32, 1);
1919         if ($pagedatabase_length_check eq 1){
1921                 # The database name is too long, so return an error.
1923                 kiriwrite_error("databasefilenametoolong");
1925         }
1927         # Check if the confirm value is blank and if it is, then
1928         # set it to 0.
1930         if (!$confirm){
1932                 # The confirm value is blank so set the confirm value
1933                 # to 0.
1935                 $confirm = 0;
1937         }
1939         if ($confirm eq 1){
1941                 # The action to delete multiple pages from the database has
1942                 # been confirmed.
1944                 # Connect to the database server.
1946                 $kiriwrite_dbmodule->connect();
1948                 # Check if any errors occured while connecting to the database server.
1950                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1952                         # A database connection error has occured so return
1953                         # an error.
1955                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1957                 }
1959                 # Select the database.
1961                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1963                 # Check if any errors occured while selecting the database.
1965                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1967                         # The database does not exist, so return an error.
1969                         kiriwrite_error("databasemissingfile");
1971                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1973                         # The database has invalid permissions set, so return
1974                         # an error.
1976                         kiriwrite_error("databaseinvalidpermissions");
1978                 }
1980                 # Check if the database has read and write permissions.
1982                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
1984                 if ($database_permissions eq 1){
1986                         # The database permissions are invalid so return an error.
1988                         kiriwrite_error("databaseinvalidpermissions");
1990                 }
1992                 # Get information about the database.
1994                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1996                 # Check if any errors had occured while getting the database
1997                 # information.
1999                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2001                         # A database error has occured so return an error and
2002                         # also the extended error information.
2004                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2006                 };
2008                 my $database_name       = $database_info{"DatabaseName"};
2010                 # Define some variables for later.
2012                 my @database_page;
2013                 my %page_info;
2014                 my $filelist_filename;
2015                 my %deleted_list;
2016                 my $page;
2017                 my $page_name;
2018                 my $page_found = 0;
2019                 my $page_count = 0;
2021                 tie (%deleted_list, 'Tie::IxHash');
2023                 my $deleted_list = "";
2025                 foreach $filelist_filename (@filelist){
2027                         # Get the page information.
2029                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2031                         # Check if any errors occured.
2033                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2035                                 # A database error has occured so return an error and
2036                                 # also the extended error information.
2038                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2040                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2042                                 # The page does not exist, so process the next page.
2044                                 next;
2046                         }
2048                         # Add the page to the list of deleted pages.
2050                         $deleted_list{$page_count}{Filename}    = $page_info{"PageFilename"};
2051                         $deleted_list{$page_count}{Name}        = $page_info{"PageName"};
2053                         # Delete the page.
2055                         $kiriwrite_dbmodule->deletepage({ PageFilename => $filelist_filename });
2057                         # Check if any errors occured while deleting the page from the database.
2059                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2061                                 # A database error has occured so return an error and
2062                                 # also the extended error information.
2064                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2066                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2068                                 # The page does not exist, so process the next page.
2070                                 next;
2072                         }
2074                         $page_found = 0;
2075                         $page_count++;
2077                 }
2079                 # Disconnect from the database server.
2081                 $kiriwrite_dbmodule->disconnect();
2083                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{selectedpagesdeleted}, { Style => "pageheader" });
2084                 $kiriwrite_presmodule->addlinebreak();
2085                 $kiriwrite_presmodule->addlinebreak();
2086                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{selectedpagesdeletedmessage}, $database_name));
2087                 $kiriwrite_presmodule->addlinebreak();
2088                 $kiriwrite_presmodule->addlinebreak();
2089                 $kiriwrite_presmodule->startbox("datalist");
2091                 foreach $page (keys %deleted_list){
2093                         if (!$deleted_list{$page}{Name}){
2094                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2095                                 $kiriwrite_presmodule->addtext(" (" . $deleted_list{$page}{Filename} . ")");
2097                         } else {
2098                                 $kiriwrite_presmodule->addtext($deleted_list{$page}{Name} . " (" . $deleted_list{$page}{Filename} . ")");
2099                         }
2101                         $kiriwrite_presmodule->addlinebreak();
2102                 }
2104                 $kiriwrite_presmodule->endbox();
2105                 $kiriwrite_presmodule->addlinebreak();
2106                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
2108                 return $kiriwrite_presmodule->grab();
2110         } elsif ($confirm eq 0){
2112                 # The action to delete multiple pages from the database has
2113                 # not been confirmed, so write a form asking the user to confirm
2114                 # the deletion of those pages.
2116                 # Connect to the database server.
2118                 $kiriwrite_dbmodule->connect();
2120                 # Check if any errors occured while connecting to the database server.
2122                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2124                         # A database connection error has occured so return
2125                         # an error.
2127                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2129                 }
2131                 # Select the database.
2133                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2135                 # Check if any errors occured while selecting the database.
2137                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2139                         # The database does not exist, so return an error.
2141                         kiriwrite_error("databasemissingfile");
2143                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2145                         # The database has invalid permissions set, so return
2146                         # an error.
2148                         kiriwrite_error("databaseinvalidpermissions");
2150                 }
2152                 # Check if the database has read and write permissions.
2154                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2156                 if ($database_permissions eq 1){
2158                         # The database permissions are invalid so return an error.
2160                         kiriwrite_error("databaseinvalidpermissions");
2162                 }
2164                 # Get information about the database.
2166                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2168                 # Check if any errors had occured while getting the database
2169                 # information.
2171                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2173                         # A database error has occured so return an error and
2174                         # also the extended error information.
2176                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2178                 };
2180                 my $database_name       = $database_info{"DatabaseName"};
2182                 # Define some variables for later.
2184                 my %page_info;
2185                 my %delete_list;
2186                 my $pagename;
2187                 my $page = "";
2188                 my $filelist_filename;
2189                 my $filelist_filename_sql;
2190                 my $pageseek = 0;
2192                 tie(%delete_list, 'Tie::IxHash');
2194                 # Process each filename given.
2196                 foreach $filelist_filename (@filelist){
2198                         # Get the page information.
2200                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2202                         # Check if any errors occured.
2204                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2206                                 # A database error has occured so return an error and
2207                                 # also the extended error information.
2209                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2211                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2213                                 # The page does not exist, so process the next page.
2215                                 next;
2217                         }
2219                         # Add the page file name and name to the list
2220                         # of pages to delete.
2222                         $delete_list{$pageseek}{Filename}       = $page_info{"PageFilename"};
2223                         $delete_list{$pageseek}{Name}           = $page_info{"PageName"};
2225                         # Increment the page seek counter and reset the
2226                         # page found value.
2228                         $pageseek++;
2230                 }
2232                 # Disconnect from the database server.
2234                 $kiriwrite_dbmodule->disconnect();
2236                 # Check if any files were selected and return
2237                 # an error if there wasn't.
2239                 if ($pageseek eq 0){
2241                         # No pages were selected so return an error.
2243                         kiriwrite_error("nopagesselected");
2245                 }
2247                 # Write the form for displaying pages.
2249                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{deletemultiplepages}, { Style => "pageheader" });
2250                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
2251                 $kiriwrite_presmodule->startbox();
2252                 $kiriwrite_presmodule->addhiddendata("mode", "page");
2253                 $kiriwrite_presmodule->addhiddendata("action", "multidelete");
2254                 $kiriwrite_presmodule->addhiddendata("database", $database);
2255                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
2256                 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
2258                 $pageseek = 1;
2260                 foreach $page (keys %delete_list){
2262                         $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
2263                         $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $delete_list{$page}{Filename});
2265                         $pageseek++;
2267                 }
2269                 $kiriwrite_presmodule->addlinebreak();
2270                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletemultiplemessage}, $database_name));
2271                 $kiriwrite_presmodule->addlinebreak();
2272                 $kiriwrite_presmodule->addlinebreak();
2273                 $kiriwrite_presmodule->startbox("datalist");
2275                 foreach $page (keys %delete_list){
2277                         if (!$delete_list{$page}{Name}){
2278                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2279                                 $kiriwrite_presmodule->addtext(" (" . $delete_list{$page}{Filename} . ")");
2280                         } else {
2281                                 $kiriwrite_presmodule->addtext($delete_list{$page}{Name} . " (" . $delete_list{$page}{Filename} . ")");
2282                         }
2283                         $kiriwrite_presmodule->addlinebreak();
2285                 }
2287                 $kiriwrite_presmodule->endbox();
2288                 $kiriwrite_presmodule->addlinebreak();
2289                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{deletepagesbutton});
2290                 $kiriwrite_presmodule->addtext(" | ");
2291                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{deletepagesreturnlink}, $database_name)});
2292                 $kiriwrite_presmodule->endbox();
2293                 $kiriwrite_presmodule->endform();
2295                 return $kiriwrite_presmodule->grab();
2297         } else {
2299                 # A confirm value other than 0 or 1 is given, so
2300                 # return an error.
2302                 kiriwrite_error("invaildvalue");
2304         }
2308 sub kiriwrite_page_multimove{
2309 #################################################################################
2310 # kiriwrite_page_multimove: Move several pages from one database to another     #
2311 # database.                                                                     #
2312 #                                                                               #
2313 # Usage:                                                                        #
2314 #                                                                               #
2315 # kiriwrite_page_multimove(database, newdatabase, confirm, filelist);           #
2316 #                                                                               #
2317 # database      Specifies the database to move the selected pages from.         #
2318 # newdatabase   Specifies the database to move the selected pages to.           #
2319 # confirm       Confirms the action to move the pages from one database to      #
2320 #               another.                                                        #
2321 # filelist      Specifies the list of pages to move.                            #
2322 #################################################################################
2324         # Get the values that were passed to the subroutine.
2326         my ($database, $newdatabase, $confirm, @filelist) = @_;
2328         # Check if the database filename is valid and return
2329         # an error if it isn't.
2331         my $newpagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
2333         if ($newpagedatabase_filename_check eq 1){
2335                 # The database filename is blank, so return an error.
2337                 kiriwrite_error("blankdatabasepageadd");
2339         } elsif ($newpagedatabase_filename_check eq 2){
2341                 # The database filename is invalid, so return an error.
2343                 kiriwrite_error("databasefilenameinvalid");
2345         }
2347         # Check if the file list is blank and return an error
2348         # if it is.
2350         if (!@filelist){
2352                 # The file list really is blank so return
2353                 # an error.
2355                 kiriwrite_error("nopagesselected");
2357         }
2359         # Check if the confirm value is blank and if it is then
2360         # set the confirm value to 0.
2362         if (!$confirm){
2364                 $confirm = 0;
2366         }
2368         if ($confirm eq 1){
2370                 # The action to move several pages from one database
2371                 # to another has been confirmed.
2373                 # Check if the database that the pages are moving from 
2374                 # is the same as the database the pages are moving to.
2375                 # Return an error if it is.
2377                 if ($database eq $newdatabase){
2379                         # The database that the pages are moving from
2380                         # and the database the pages are moving to
2381                         # is the same, so return an error.
2383                         kiriwrite_error("databasemovesame");
2385                 }
2387                 # Check if the new database filename is valid and return an error if
2388                 # it isn't.
2390                 my $newpagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
2392                 if ($newpagedatabase_filename_check eq 1){
2394                         # The database filename is blank, so return an error.
2396                         kiriwrite_error("blankdatabasepageadd");
2398                 } elsif ($newpagedatabase_filename_check eq 2){
2400                         # The database filename is invalid, so return an error.
2402                         kiriwrite_error("databasefilenameinvalid");
2404                 }
2406                 # Connect to the database server.
2408                 $kiriwrite_dbmodule->connect();
2410                 # Check if any errors occured while connecting to the database server.
2412                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2414                         # A database connection error has occured so return
2415                         # an error.
2417                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2419                 }
2421                 # Select the database the pages are going to be moved from.
2423                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2425                 # Check if any errors had occured while selecting the database.
2427                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2429                         # The database does not exist, so return an error.
2431                         kiriwrite_error("oldmovedatabasedoesnotexist");
2433                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2435                         # The database has invalid permissions set, so return
2436                         # an error.
2438                         kiriwrite_error("oldmovedatabasefileinvalidpermissions");
2440                 }
2442                 # Check if the database has read and write permissions.
2444                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2446                 if ($database_permissions eq 1){
2448                         # The database permissions are invalid so return an error.
2450                         kiriwrite_error("databaseinvalidpermissions");
2452                 }
2454                 # Select the database the pages are going to be moved to.
2456                 $kiriwrite_dbmodule->selectseconddb({ DatabaseName => $newdatabase });
2458                 # Check if any errors had occured while selecting the database.
2460                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2462                         # The database does not exist, so return an error.
2464                         kiriwrite_error("newmovedatabasedoesnotexist");
2466                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2468                         # The database has invalid permissions set, so return
2469                         # an error.
2471                         kiriwrite_error("newmovedatabasefileinvalidpermissions");
2473                 }
2475                 # Check if the database has read and write permissions.
2477                 $database_permissions = $kiriwrite_dbmodule->dbpermissions($newdatabase, 1, 1);
2479                 if ($database_permissions eq 1){
2481                         # The database permissions are invalid so return an error.
2483                         kiriwrite_error("databaseinvalidpermissions");
2485                 }
2487                 # Define some values for later.
2489                 my %moved_list;
2490                 my %warning_list;
2491                 my %page_info;
2493                 my $filename;
2495                 my $olddatabase_name;
2496                 my $newdatabase_name;
2498                 my $page;
2499                 my $warning;
2501                 my $page_found = 0;
2502                 my $move_count = 0;
2503                 my $warning_count = 0;
2505                 tie(%moved_list, 'Tie::IxHash');
2506                 tie(%warning_list, 'Tie::IxHash');
2508                 # Get information about the database that the selected pages are moving from.
2510                 my %olddatabase_info = $kiriwrite_dbmodule->getdatabaseinfo();
2512                 # Check if any errors had occured while getting the database
2513                 # information.
2515                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2517                         # A database error has occured so return an error and
2518                         # also the extended error information.
2520                         kiriwrite_error("oldmovedatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
2522                 };
2524                 $olddatabase_name = $olddatabase_info{"DatabaseName"};
2526                 # Get information about the database that the selected pages are moving to.
2528                 my %newdatabase_info = $kiriwrite_dbmodule->getseconddatabaseinfo();
2530                 # Check if any errors had occured while getting the database
2531                 # information.
2533                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2535                         # A database error has occured so return an error and
2536                         # also the extended error information.
2538                         kiriwrite_error("newmovedatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
2540                 };
2542                 $newdatabase_name = $newdatabase_info{"DatabaseName"};
2544                 # Get each file in the old database, get the page values,
2545                 # put them into the new database and delete the pages
2546                 # from the old database.
2548                 foreach $filename (@filelist){
2550                         # Get the page information.
2552                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
2554                         # Check if any errors occured.
2556                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2558                                 # A database error has occured so write a warning message and
2559                                 # also the extended error information.
2561                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2562                                 $warning_count++;
2563                                 next;
2565                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2567                                 # The page does not exist, so process the next page.
2569                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{pagedoesnotexist}, $filename);
2570                                 $warning_count++;
2571                                 next;
2573                         }
2575                         # Move the selected page.
2577                         $kiriwrite_dbmodule->movepage({ PageFilename => $filename });
2579                         # Check if any errors occured while moving the page.
2581                         if ($kiriwrite_dbmodule->geterror eq "OldDatabaseError"){
2583                                 # A database error has occured while moving the pages from
2584                                 # the old database, so write a warning message.
2586                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovefrompageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2587                                 $warning_count++;
2588                                 next;
2590                         } elsif ($kiriwrite_dbmodule->geterror eq "NewDatabaseError"){
2592                                 # A database error has occured while moving the pages to
2593                                 # the new database, so write a warning message.
2595                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovetopageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2596                                 $warning_count++;
2597                                 next;
2599                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2601                                 # The page with the filename given in the database that
2602                                 # the page is to be moved from doesn't exist so write
2603                                 # a warning message.
2605                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovefrompagenotexist}, $filename);
2606                                 $warning_count++;
2607                                 next;
2609                         } elsif ($kiriwrite_dbmodule->geterror eq "PageAlreadyExists"){
2611                                 # The page with the filename given in the database that
2612                                 # the page is to be moved to already exists so write a
2613                                 # warning message.
2615                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovetopageexists}, $filename);
2616                                 $warning_count++;
2617                                 next;
2619                         }
2621                         $moved_list{$move_count}{Filename}      = $page_info{"PageFilename"};
2622                         $moved_list{$move_count}{Name}          = $page_info{"PageName"};
2624                         $move_count++;
2626                 }
2628                 # Disconnect from the database server.
2630                 $kiriwrite_dbmodule->disconnect();
2632                 # Write out a message saying that the pages were moved (if any)
2633                 # to the new database (and any warnings given).
2635                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepages}, { Style => "pageheader" });
2636                 $kiriwrite_presmodule->addlinebreak();
2637                 $kiriwrite_presmodule->addlinebreak();
2639                 if (%moved_list){
2641                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{movedpagesmessage}, $olddatabase_name, $newdatabase_name));
2642                         $kiriwrite_presmodule->addlinebreak();
2643                         $kiriwrite_presmodule->addlinebreak();
2645                         $kiriwrite_presmodule->startbox("datalist");
2646                         foreach $page (keys %moved_list){
2647                                 if (!$moved_list{$page}{Name}){
2648                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2649                                         $kiriwrite_presmodule->addtext(" (" . $moved_list{$page}{Filename} . ")");
2650                                 } else {
2651                                         $kiriwrite_presmodule->addtext($moved_list{$page}{Name} . " (" . $moved_list{$page}{Filename} . ")");
2652                                 }
2654                                 $kiriwrite_presmodule->addlinebreak();
2655                         }
2656                         $kiriwrite_presmodule->endbox();
2658                 } else {
2660                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagesmoved}, $olddatabase_name, $newdatabase_name));
2661                         $kiriwrite_presmodule->addlinebreak();
2662                         $kiriwrite_presmodule->addlinebreak();
2664                 }
2666                 if (%warning_list){
2668                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{errormessages});
2669                         $kiriwrite_presmodule->addlinebreak();
2670                         $kiriwrite_presmodule->addlinebreak();
2671                         $kiriwrite_presmodule->startbox("datalist");
2672                         foreach $warning (keys %warning_list){
2673                                 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
2674                                 $kiriwrite_presmodule->addlinebreak();
2675                         }
2676                         $kiriwrite_presmodule->endbox();
2678                 }
2680                 $kiriwrite_presmodule->addlinebreak();
2681                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $olddatabase_name)}); 
2682                 $kiriwrite_presmodule->addtext(" | ");
2683                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $newdatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{viewpagelist}, $newdatabase_name)});
2685                 return $kiriwrite_presmodule->grab();
2687         } elsif ($confirm eq 0) {
2689                 # The action to move several pages from one database
2690                 # to another has not been confirmed so write a form.
2692                 # Connect to the database server.
2694                 $kiriwrite_dbmodule->connect();
2696                 # Check if any errors occured while connecting to the database server.
2698                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2700                         # A database connection error has occured so return
2701                         # an error.
2703                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2705                 }
2707                 # Select the database.
2709                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2711                 # Check if any errors occured while selecting the database.
2713                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2715                         # The database does not exist, so return an error.
2717                         kiriwrite_error("databasemissingfile");
2719                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2721                         # The database has invalid permissions set, so return
2722                         # an error.
2724                         kiriwrite_error("databaseinvalidpermissions");
2726                 }
2728                 # Check if the database has read and write permissions.
2730                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2732                 if ($database_permissions eq 1){
2734                         # The database permissions are invalid so return an error.
2736                         kiriwrite_error("databaseinvalidpermissions");
2738                 }
2740                 # Get information about the database.
2742                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2744                 # Check if any errors had occured while getting the database
2745                 # information.
2747                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2749                         # A database error has occured so return an error and
2750                         # also the extended error information.
2752                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2754                 };
2756                 my $database_name       = $database_info{"DatabaseName"};
2758                 # Define some values for later.
2760                 my %db_list;
2761                 my %move_list;
2762                 my %page_info;
2763                 my $page;
2764                 my $data_file;
2765                 my $db_name;
2766                 my $filename;
2767                 my $filelist_filename;
2768                 my $pagename;
2769                 my $pageseek    = 0;
2770                 my $dbseek      = 0;
2772                 # Process each filename given.
2774                 tie (%move_list, 'Tie::IxHash');
2775                 tie (%db_list, 'Tie::IxHash');
2777                 foreach $filelist_filename (@filelist){
2779                         # Get the page information.
2781                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2783                         # Check if any errors occured.
2785                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2787                                 # A database error has occured so return an error and
2788                                 # also the extended error information.
2790                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2792                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2794                                 # The page does not exist, so process the next page.
2796                                 next;
2798                         }
2800                         # Add the page name and file name to the list of
2801                         # pages to move.
2803                         $move_list{$pageseek}{Filename} = $page_info{"PageFilename"};
2804                         $move_list{$pageseek}{Name}     = $page_info{"PageName"};
2806                         # Increment the page seek counter and reset the
2807                         # page found value.
2809                         $pageseek++;
2811                 }
2813                 # Check if any pages exust and return an error if
2814                 # there wasn't.
2816                 if ($pageseek eq 0){
2818                         # None of the selected pages exist, so return
2819                         # an error.
2821                         kiriwrite_error("nopagesselected");
2823                 }
2825                 # Get the list of databases.
2827                 my @database_list       = $kiriwrite_dbmodule->getdblist();
2829                 # Check if any errors occured while trying to get the list of databases.
2831                 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
2833                         # The database directory is missing so return an error.
2835                         kiriwrite_error("datadirectorymissing");
2837                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
2839                         # The database directory has invalid permissions set so return
2840                         # an error.
2842                         kiriwrite_error("datadirectoryinvalidpermissions");
2844                 }
2846                 # Get the information about each database (the short name and friendly name).
2848                 foreach $data_file (@database_list){
2850                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
2852                         # Check if any errors occured while selecting the database.
2854                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2856                                 # The database does not exist, so process the next
2857                                 # database.
2859                                 next;
2861                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2863                                 # The database has invalid permissions set, so process
2864                                 # the next database.
2866                                 next;
2868                         }
2870                         # Get the database information.
2872                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2874                         # Check if any errors had occured while getting the database
2875                         # information.
2877                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2879                                 # A database error has occured so process the next
2880                                 # database.
2882                                 next;
2884                         };
2886                         # Check if the database name is undefined and if it is
2887                         # then set it blank.
2889                         if (!$database_name){
2890                                 $database_name = "";
2891                         }
2893                         # Append the database to the list of databases available.
2895                         $db_list{$dbseek}{Filename}     = $data_file;
2896                         $db_list{$dbseek}{Name}         = $database_info{"DatabaseName"};
2898                         $dbseek++;
2900                 }
2902                 # Disconnect from the database server.
2904                 $kiriwrite_dbmodule->disconnect();
2906                 # Write out the form.
2908                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepages}, { Style => "pageheader" });
2909                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
2910                 $kiriwrite_presmodule->startbox();
2911                 $kiriwrite_presmodule->addhiddendata("mode", "page");
2912                 $kiriwrite_presmodule->addhiddendata("action", "multimove");
2913                 $kiriwrite_presmodule->addhiddendata("database", $database);
2914                 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
2915                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
2917                 # Write the page form data.
2919                 $pageseek = 1;
2921                 foreach $page (keys %move_list){
2922                         $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
2923                         $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $move_list{$page}{Filename});
2924                         $pageseek++;
2925                 }
2927                 $kiriwrite_presmodule->addlinebreak();
2928                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{movepagesmessage}, $database_name));
2929                 $kiriwrite_presmodule->addlinebreak();
2930                 $kiriwrite_presmodule->addlinebreak();
2931                 $kiriwrite_presmodule->startbox("datalist");
2933                 foreach $page (keys %move_list){
2934                         if (!$move_list{$page}{Name}){
2935                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2936                                 $kiriwrite_presmodule->addtext(" (" . $move_list{$page}{Filename} . ")");
2937                         } else {
2938                                 $kiriwrite_presmodule->addtext($move_list{$page}{Name} . " (" . $move_list{$page}{Filename} . ")");
2939                         }
2940                         $kiriwrite_presmodule->addlinebreak();
2941                 }
2943                 $kiriwrite_presmodule->endbox();
2944                 $kiriwrite_presmodule->addlinebreak();
2945                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepagesto});
2947                 $kiriwrite_presmodule->addselectbox("newdatabase");
2949                 foreach $db_name (keys %db_list){
2950                         $kiriwrite_presmodule->addoption($db_list{$db_name}{Name} . " (" . $db_list{$db_name}{Filename} . ")", { Value => $db_list{$db_name}{Filename}});
2951                 }
2953                 $kiriwrite_presmodule->endselectbox();
2954                 $kiriwrite_presmodule->addlinebreak();
2955                 $kiriwrite_presmodule->addlinebreak();
2956                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{movepagesbutton});
2957                 $kiriwrite_presmodule->addtext(" | ");
2958                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
2959                 $kiriwrite_presmodule->endbox();
2960                 $kiriwrite_presmodule->endform();
2962                 return $kiriwrite_presmodule->grab();
2964         } else {
2966                 # The confirm value is other than 0 or 1, so return
2967                 # an error.
2969                 kiriwrite_error("invalidvariable");
2971         }
2977 sub kiriwrite_page_multicopy{
2978 #################################################################################
2979 # kiriwrite_page_multicopy: Copy several pages from one database to another     #
2980 # database.                                                                     #
2981 #                                                                               #
2982 # Usage:                                                                        #
2983 #                                                                               #
2984 # kiriwrite_page_multicopy(database, newdatabase, confirm, filelist);           #
2985 #                                                                               #
2986 # database      Specifies the database to copy the selected pages from.         #
2987 # newdatabase   Specifies the database to copy the selected page to.            #
2988 # confirm       Confirms the action to copy the pages.                          #
2989 # filelist      A list of filenames to copy in an array.                        #
2990 #################################################################################
2992         # Get the values that were passed to the subroutine.
2994         my ($database, $newdatabase, $confirm, @filelist) = @_;
2996         # Check if the file list is blank and return an error
2997         # if it is.
2999         if (!@filelist){
3001                 # The file list really is blank so return
3002                 # an error.
3004                 kiriwrite_error("nopagesselected");
3006         }
3008         # Check if the confirm value is blank and if it is then
3009         # set the confirm value to 0.
3011         if (!$confirm){
3013                 $confirm = 0;
3015         }
3017         # Check if the database filename is valid and return an error if
3018         # it isn't.
3020         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
3022         if ($pagedatabase_filename_check eq 1){
3024                 # The database filename is blank, so return an error.
3026                 kiriwrite_error("blankdatabasepageadd");
3028         } elsif ($pagedatabase_filename_check eq 2){
3030                 # The database filename is invalid, so return an error.
3032                 kiriwrite_error("databasefilenameinvalid");
3034         }
3036         if ($confirm eq 1){
3038                 # The action to copy several pages from one database
3039                 # to another has been confirmed.
3041                 # Check if the database that the pages are copied from 
3042                 # is the same as the database the pages are copied to.
3043                 # Return an error if it is.
3045                 if ($database eq $newdatabase){
3047                         # The database that the pages are being copied from
3048                         # and the database that the pages are copied to
3049                         # is the same, so return an error.
3051                         kiriwrite_error("databasecopysame");
3053                 }
3055                 # Check if the new database filename is valid and return an error if
3056                 # it isn't.
3058                 my $pagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
3060                 if ($pagedatabase_filename_check eq 1){
3062                         # The database filename is blank, so return an error.
3064                         kiriwrite_error("blankdatabasepageadd");
3066                 } elsif ($pagedatabase_filename_check eq 2){
3068                         # The database filename is invalid, so return an error.
3070                         kiriwrite_error("databasefilenameinvalid");
3072                 }
3074                 # Connect to the database server.
3076                 $kiriwrite_dbmodule->connect();
3078                 # Check if any errors occured while connecting to the database server.
3080                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3082                         # A database connection error has occured so return
3083                         # an error.
3085                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3087                 }
3089                 # Select the database the pages are going to be copied from.
3091                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3093                 # Check if any errors had occured while selecting the database.
3095                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3097                         # The database does not exist, so return an error.
3099                         kiriwrite_error("oldcopydatabasedoesnotexist");
3101                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3103                         # The database has invalid permissions set, so return
3104                         # an error.
3106                         kiriwrite_error("oldcopydatabasefileinvalidpermissions");
3108                 }
3110                 # Select the database the pages are going to be copied to.
3112                 $kiriwrite_dbmodule->selectseconddb({ DatabaseName => $newdatabase });
3114                 # Check if any errors had occured while selecting the database.
3116                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3118                         # The database does not exist, so return an error.
3120                         kiriwrite_error("newcopydatabasedoesnotexist");
3122                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3124                         # The database has invalid permissions set, so return
3125                         # an error.
3127                         kiriwrite_error("newcopydatabasefileinvalidpermissions");
3129                 }
3131                 # Check if the database has read and write permissions.
3133                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($newdatabase, 1, 1);
3135                 if ($database_permissions eq 1){
3137                         # The database permissions are invalid so return an error.
3139                         kiriwrite_error("databaseinvalidpermissions");
3141                 }
3143                 # Define some values for later.
3145                 my %copied_list;
3146                 my %warning_list;
3147                 my %page_info;
3149                 my @olddatabase_info;
3150                 my @olddatabase_page;
3151                 my @newdatabase_info;
3152                 my @newdatabase_page;
3154                 my $filename;
3155                 my $filename_sql;
3156                 my $filename_out;
3158                 my $olddatabase_database_handle;
3159                 my $olddatabase_string_handle;
3160                 my $olddatabase_name;
3161                 my $newdatabase_database_handle;
3162                 my $newdatabase_string_handle;
3163                 my $newdatabase_name;
3165                 my $page;
3166                 my $warning;
3167                 my $page_filename;
3168                 my $page_filename_sql;
3169                 my $page_name;
3170                 my $page_name_sql;
3171                 my $page_description;
3172                 my $page_description_sql;
3173                 my $page_section;
3174                 my $page_section_sql;
3175                 my $page_template;
3176                 my $page_template_sql;
3177                 my $page_data;
3178                 my $page_data_sql;
3179                 my $page_settings;
3180                 my $page_settings_sql;
3181                 my $page_lastmodified;
3182                 my $page_lastmodified_sql;
3184                 my $page_seek = 0;
3185                 my $warning_count = 0;
3187                 my $page_found = 0;
3189                 tie(%copied_list, 'Tie::IxHash');
3190                 tie(%warning_list, 'Tie::IxHash');
3192                 # Get information about the database that the selected pages are moving from.
3194                 my %olddatabase_info = $kiriwrite_dbmodule->getdatabaseinfo();
3196                 # Check if any errors had occured while getting the database
3197                 # information.
3199                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3201                         # A database error has occured so return an error and
3202                         # also the extended error information.
3204                         kiriwrite_error("oldcopydatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
3206                 };
3208                 $olddatabase_name = $olddatabase_info{"DatabaseName"};
3210                 # Get information about the database that the selected pages are moving to.
3212                 my %newdatabase_info = $kiriwrite_dbmodule->getseconddatabaseinfo();
3214                 # Check if any errors had occured while getting the database
3215                 # information.
3217                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3219                         # A database error has occured so return an error and
3220                         # also the extended error information.
3222                         kiriwrite_error("newcopydatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
3224                 };
3226                 $newdatabase_name = $newdatabase_info{"DatabaseName"};
3228                 # Check if the database filename is valid and return an error if
3229                 # it isn't.
3231                 my $newpagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
3233                 if ($newpagedatabase_filename_check eq 1){
3235                         # The database filename is blank, so return an error.
3237                         kiriwrite_error("blankdatabasepageadd");
3239                 } elsif ($newpagedatabase_filename_check eq 2){
3241                         # The database filename is invalid, so return an error.
3243                         kiriwrite_error("databasefilenameinvalid");
3245                 }
3247                 foreach $filename (@filelist){
3249                         # Get the page information.
3251                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3253                         # Check if any errors occured.
3255                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3257                                 # A database error has occured so return an error and
3258                                 # also the extended error information.
3260                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3261                                 $warning_count++;
3262                                 next;
3264                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3266                                 # The page does not exist, so process the next page.
3268                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfrompageerror}, $filename);
3269                                 $warning_count++;
3270                                 next;
3272                         }
3274                         $kiriwrite_dbmodule->copypage({ PageFilename => $filename });
3276                         # Check if any errors occured while copying the page.
3278                         if ($kiriwrite_dbmodule->geterror eq "OldDatabaseError"){
3280                                 # A database error has occured while copying the pages from
3281                                 # the old database, so write a warning message.
3283                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfromdatabaseerror}, $filename,  $kiriwrite_dbmodule->geterror(1));
3284                                 $warning_count++;
3285                                 next;
3287                         } elsif ($kiriwrite_dbmodule->geterror eq "NewDatabaseError"){
3289                                 # A database error has occured while copying the pages to
3290                                 # the new database, so write a warning message.
3292                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopytodatabaseerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3293                                 $warning_count++;
3294                                 next;
3296                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3298                                 # The page with the filename given in the database that
3299                                 # the page is to be copied from doesn't exist so write
3300                                 # a warning message.
3302                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfrompagenotexist}, $filename);
3303                                 $warning_count++;
3304                                 next;
3306                         } elsif ($kiriwrite_dbmodule->geterror eq "PageAlreadyExists"){
3308                                 # The page with the filename given in the database that
3309                                 # the page is to be copied to already exists so write a
3310                                 # warning message.
3312                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopytopageexists}, $filename);
3313                                 $warning_count++;
3314                                 next;
3316                         }
3318                         # Append the copied page (filename and name) to the list of
3319                         # copied pages.
3321                         $copied_list{$page_seek}{Filename}      = $filename;
3322                         $copied_list{$page_seek}{Name}          = $page_info{"PageName"};
3323                         $page_seek++;
3325                 }
3327                 # Disconnect from the database server.
3329                 $kiriwrite_dbmodule->disconnect();
3331                 # Write out a message saying that the pages were moved (if any)
3332                 # to the new database (and any warnings given).
3334                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypages}, { Style => "pageheader" });
3335                 $kiriwrite_presmodule->addlinebreak();
3336                 $kiriwrite_presmodule->addlinebreak();
3338                 if (%copied_list){
3340                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{copypagesresultmessage}, $olddatabase_name, $newdatabase_name));
3341                         $kiriwrite_presmodule->addlinebreak();
3342                         $kiriwrite_presmodule->addlinebreak();
3343                         $kiriwrite_presmodule->startbox("datalist");
3344                         foreach $page (keys %copied_list){
3345                                 if (!$copied_list{$page}{Name}){
3346                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
3347                                         $kiriwrite_presmodule->addtext(" (" . $copied_list{$page}{Filename} . ")");
3348                                 } else {
3349                                         $kiriwrite_presmodule->addtext($copied_list{$page}{Name} . " (" . $copied_list{$page}{Filename} . ")");
3350                                 }
3351                                 $kiriwrite_presmodule->addlinebreak();
3352                         }
3353                         $kiriwrite_presmodule->endbox();
3355                 } else {
3357                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagescopied}, $olddatabase_name, $newdatabase_name));
3359                 }
3361                 if (%warning_list){
3363                         $kiriwrite_presmodule->addlinebreak();
3364                         $kiriwrite_presmodule->addlinebreak();
3365                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypageswarnings});
3366                         $kiriwrite_presmodule->addlinebreak();
3367                         $kiriwrite_presmodule->addlinebreak();
3368                         $kiriwrite_presmodule->startbox("datalist");
3369                         foreach $warning (keys %warning_list){
3370                                 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
3371                                                         $kiriwrite_presmodule->addlinebreak();
3372                         }
3373                         $kiriwrite_presmodule->endbox();
3375                 }
3377                 $kiriwrite_presmodule->addlinebreak();
3378                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $olddatabase_name)});
3379                 $kiriwrite_presmodule->addtext(" | ");
3380                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $newdatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{viewpagelist}, $newdatabase_name)});
3382                 return $kiriwrite_presmodule->grab();
3384         } elsif ($confirm eq 0) {
3386                 # The action to copy several pages from one database
3387                 # to another has not been confirmed so write a form.
3389                 # Connect to the database server.
3391                 $kiriwrite_dbmodule->connect();
3393                 # Check if any errors occured while connecting to the database server.
3395                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3397                         # A database connection error has occured so return
3398                         # an error.
3400                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3402                 }
3404                 # Select the database to copy the pages from.
3406                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3408                 # Check if any errors occured while selecting the database.
3410                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3412                         # The database does not exist, so return an error.
3414                         kiriwrite_error("databasemissingfile");
3416                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3418                         # The database has invalid permissions set, so return
3419                         # an error.
3421                         kiriwrite_error("databaseinvalidpermissions");
3423                 }
3425                 # Get information about the database.
3427                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3429                 # Check if any errors had occured while getting the database
3430                 # information.
3432                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3434                         # A database error has occured so return an error and
3435                         # also the extended error information.
3437                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3439                 };
3441                 my $database_name       = $database_info{"DatabaseName"};
3443                 # Define some values for later.
3445                 my %page_info;
3446                 my %copy_list;
3447                 my %db_list;
3448                 my @page_info;
3449                 my $page;
3450                 my $data_file;
3451                 my $dbname;
3452                 my $filename;
3453                 my $pageseek    = 0;
3454                 my $dbseek      = 0;
3455                 my $pagefound   = 0;
3457                 tie(%copy_list, 'Tie::IxHash');
3458                 tie(%db_list, 'Tie::IxHash');
3460                 # Process each filename given.
3462                 foreach $filename (@filelist){
3464                         # Get the page information.
3466                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3468                         # Check if any errors occured.
3470                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3472                                 # A database error has occured so return an error and
3473                                 # also the extended error information.
3475                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3477                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3479                                 # The page does not exist, so process the next page.
3481                                 next;
3483                         }
3485                         # Add the page name and file name to the list of
3486                         # pages to move.
3488                         $copy_list{$pageseek}{Filename} = $page_info{"PageFilename"};
3489                         $copy_list{$pageseek}{Name}     = $page_info{"PageName"};
3491                         # Increment the page seek counter.
3493                         $pageseek++;
3495                 }
3497                 # Check if any pages exust and return an error if
3498                 # there wasn't.
3500                 if ($pageseek eq 0){
3502                         # None of the selected pages exist, so return
3503                         # an error.
3505                         kiriwrite_error("nopagesselected");
3507                 }
3509                 # Get the database filenames and names.
3511                 my @database_list       = $kiriwrite_dbmodule->getdblist();
3513                 # Check if any errors occured while trying to get the list of databases.
3515                 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
3517                         # The database directory is missing so return an error.
3519                         kiriwrite_error("datadirectorymissing");
3521                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
3523                         # The database directory has invalid permissions set so return
3524                         # an error.
3526                         kiriwrite_error("datadirectoryinvalidpermissions");
3528                 }
3530                 # Process each database to get the database name.
3532                 foreach $data_file (@database_list){
3534                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
3536                         # Check if any errors occured while selecting the database.
3538                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3540                                 # The database does not exist, so process the next
3541                                 # database.
3543                                 next;
3545                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3547                                 # The database has invalid permissions set, so process
3548                                 # the next database.
3550                                 next;
3552                         }
3554                         # Get the database information.
3556                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3558                         # Check if any errors had occured while getting the database
3559                         # information.
3561                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3563                                 # A database error has occured so process the next
3564                                 # database.
3566                                 next;
3568                         };
3570                         # Check if the database name is undefined and if it is
3571                         # then set it blank.
3573                         if (!$database_name){
3574                                 $database_name = "";
3575                         }
3577                         # Append the database filename and name to the list of databases
3578                         # to move the pages to.
3580                         $db_list{$dbseek}{Filename}     = $data_file;
3581                         $db_list{$dbseek}{Name}         = $database_info{"DatabaseName"};
3583                         $dbseek++;
3585                 }
3587                 # Disconnect from the database server.
3589                 $kiriwrite_dbmodule->disconnect();
3591                 # Write out the form.
3593                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypages}, { Style => "pageheader" });
3594                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
3595                 $kiriwrite_presmodule->startbox();
3596                 $kiriwrite_presmodule->addhiddendata("mode", "page");
3597                 $kiriwrite_presmodule->addhiddendata("action", "multicopy");
3598                 $kiriwrite_presmodule->addhiddendata("database", $database);
3599                 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
3600                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
3602                 $pageseek = 1;
3604                 foreach $page (keys %copy_list){
3605                         $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
3606                         $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $copy_list{$page}{Filename});
3607                         $pageseek++;
3608                 }
3610                 $kiriwrite_presmodule->addlinebreak();
3611                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{copypagesmessage}, $database_name));
3613                 $kiriwrite_presmodule->addlinebreak();
3614                 $kiriwrite_presmodule->addlinebreak();
3616                 $kiriwrite_presmodule->startbox("datalist");
3618                 foreach $page (keys %copy_list){
3619                         if (!$copy_list{$page}{Name}){
3620                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
3621                                 $kiriwrite_presmodule->addtext(" (" . $copy_list{$page}{Filename} . ")");
3622                         } else {
3623                                 $kiriwrite_presmodule->addtext($copy_list{$page}{Name} . " (" . $copy_list{$page}{Filename} . ")");
3624                         }
3625                         $kiriwrite_presmodule->addlinebreak();
3626                 }
3628                 $kiriwrite_presmodule->endbox();
3630                 $kiriwrite_presmodule->addlinebreak();
3632                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypagesto});
3633                 $kiriwrite_presmodule->addselectbox("newdatabase");
3635                 foreach $dbname (keys %db_list){
3636                         $kiriwrite_presmodule->addoption($db_list{$dbname}{Name} . " (" . $db_list{$dbname}{Filename} . ")", { Value => $db_list{$dbname}{Filename}});
3637                 }
3639                 $kiriwrite_presmodule->endselectbox();
3641                 $kiriwrite_presmodule->addlinebreak();
3642                 $kiriwrite_presmodule->addlinebreak();
3643                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{copypagesbutton});
3644                 $kiriwrite_presmodule->addtext(" | ");
3645                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
3647                 $kiriwrite_presmodule->endbox();                
3648                 $kiriwrite_presmodule->endform();
3650                 return $kiriwrite_presmodule->grab();
3652         } else {
3654                 # The confirm value is other than 0 or 1, so return
3655                 # an error.
3657                 kiriwrite_error("invalidvariable");
3659         }
3663 sub kiriwrite_page_multiedit{
3664 #################################################################################
3665 # kiriwrite_page_multiedit: Edit several pages from a database.                 #
3666 #                                                                               #
3667 # Usage:                                                                        #
3668 #                                                                               #
3669 # kiriwrite_page_multiedit(database, newsection, altersection, newtemplate,     #
3670 #                               altertemplate, newsettings, altersettings       #
3671 #                               confirm, filelist);                             #
3672 #                                                                               #
3673 # database      Specifies the database to edit the pages from.                  #
3674 # newsection    Specifies the new section name to use on the selected pages.    #
3675 # altersection  Specifies if the section name should be altered.                #
3676 # newtemplate   Specifies the new template filename to use on the selected      #
3677 #               pages.                                                          #
3678 # altertemplate Specifies if the template filename should be altered.           #
3679 # newsettings   Specifies the new settings to use on the selected pages.        #
3680 # altersettings Specifies if the settings should be altered.                    #
3681 # confirm       Confirms the action to edit the selected pages.                 #
3682 # filelist      The list of file names to edit.                                 #
3683 #################################################################################
3685         # Get the values that were passed to the subroutine.
3687         my ($database, $newsection, $altersection, $newtemplate, $altertemplate, $newsettings, $altersettings, $confirm, @filelist) = @_;
3689         # Check if the file list is blank and return an error
3690         # if it is.
3692         if (!@filelist){
3694                 # The file list really is blank so return
3695                 # an error.
3697                 kiriwrite_error("nopagesselected");
3699         }
3701         # Check if certain values are undefined and define them if
3702         # they are.
3704         if (!$altersection){
3706                 # The alter section value is blank, so set it to
3707                 # off.
3709                 $altersection   = "off";
3711         }
3713         if (!$altertemplate){
3715                 # The alter template value is blank, so set it to
3716                 # off.
3718                 $altertemplate  = "off";
3720         }
3722         if (!$altersettings){
3724                 # The alter settings value is blank, so set it to
3725                 # off.
3727                 $altersettings  = "off";
3729         }
3731         # Check if the database filename is valid and return an error if
3732         # it isn't.
3734         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
3736         if ($pagedatabase_filename_check eq 1){
3738                 # The database filename is blank, so return an error.
3740                 kiriwrite_error("blankdatabasepageadd");
3742         } elsif ($pagedatabase_filename_check eq 2){
3744                 # The database filename is invalid, so return an error.
3746                 kiriwrite_error("databasefilenameinvalid");
3748         }
3750         # Check if the confirm value is blank and if it is then
3751         # set the confirm value to 0.
3753         if (!$confirm){
3755                 $confirm = 0;
3757         }
3759         if ($confirm eq 1){
3761                 # The action to edit the template has been confirmed so
3762                 # edit the selected pages.
3764                 # Check the values recieved at UTF8 compliant before
3765                 # converting.
3767                 kiriwrite_variablecheck($newsection, "utf8", 0, 0);
3768                 kiriwrite_variablecheck($newtemplate, "utf8", 0, 0);
3769                 kiriwrite_variablecheck($newsettings, "utf8", 0, 0);
3771                 # Convert the values into proper UTF8 values.
3773                 $newsection     = kiriwrite_utf8convert($newsection);
3774                 $newtemplate    = kiriwrite_utf8convert($newtemplate);
3775                 $newsettings    = kiriwrite_utf8convert($newsettings);
3777                 # Check the length of the variables.
3779                 kiriwrite_variablecheck($altersection, "maxlength", 3, 0);
3780                 kiriwrite_variablecheck($altertemplate, "maxlength", 3, 0);
3781                 kiriwrite_variablecheck($altersettings, "maxlength", 3, 0);
3782                 my $newsection_maxlength_check  = kiriwrite_variablecheck($newsection, "maxlength", 256, 1);
3783                 my $newtemplate_maxlength_check = kiriwrite_variablecheck($newtemplate, "maxlength", 256, 1);
3784                 my $newtemplate_filename_check  = kiriwrite_variablecheck($newtemplate, "filename", 0, 1);
3785                 my $newsettings_maxlength_check = kiriwrite_variablecheck($newsettings, "maxlength", 1, 1);
3786                 my $newsettings_settings_check  = kiriwrite_variablecheck($newsettings, "pagesetting", 0, 1);
3788                 # Check the values and return an error if needed.
3790                 if ($newsection_maxlength_check eq 1 && $altersection eq "on"){
3792                         # The new section name is too long, so return an
3793                         # error.
3795                         kiriwrite_error("pagesectiontoolong");
3797                 }
3799                 if ($newtemplate_maxlength_check eq 1 && $altertemplate eq "on"){
3801                         # The new template name is too long, so return an
3802                         # error.
3804                         kiriwrite_error("templatefilenametoolong");
3806                 }
3808                 # Check if the template filename is set to !skip or !none
3809                 # and skip this check if it is.
3811                 if ($newtemplate eq "!skip" || $newtemplate eq "!none"){
3813                         # Skip this check as the template filename is 
3814                         # !skip or !none.
3816                 } else {
3817                         if ($newtemplate_filename_check eq 1 && $altertemplate eq "on" || $newtemplate_filename_check eq 2 && $altertemplate eq "on"){
3819                                 # The new template filename is invalid, so return
3820                                 # an error.
3822                                 kiriwrite_error("templatefilenameinvalid");
3824                         }
3825                 }
3827                 if ($newsettings_maxlength_check eq 1 && $altertemplate eq "on"){
3829                         # The new settings value is too long, so return
3830                         # an error.
3832                         kiriwrite_error("pagesettingstoolong");
3834                 }
3836                 if ($newsettings_settings_check eq 1 && $altersettings eq "on"){
3838                         # The new settings value is invalid, so return
3839                         # an error.
3841                         kiriwrite_error("pagesettingsinvalid");
3843                 }
3845                 # Define some values for later.
3847                 my %database_info;
3848                 my %edited_list;
3849                 my %warning_list;
3850                 my %page_info;
3851                 my $page;
3852                 my $warning;
3853                 my $filename;
3854                 my $page_name;
3855                 my $pagefound = 0;
3856                 my $pageedited = 0;
3857                 my $warning_count = 0;
3859                 tie(%edited_list, 'Tie::IxHash');
3860                 tie(%warning_list, 'Tie::IxHash');
3862                 # Check if the template filename is !skip and
3863                 # set the alter template value to off if it
3864                 # is.
3866                 if ($newtemplate eq "!skip"){
3868                         $altertemplate = "off";
3870                 }
3872                 # Check if all values are not selected and return
3873                 # an error if they are.
3875                 if ($altersection ne "on" && $altertemplate ne "on" && $altersettings ne "on"){
3877                         # All values are not selected so return 
3878                         # an error.
3880                         kiriwrite_error("noeditvaluesselected");
3882                 }
3884                 # Connect to the database server.
3886                 $kiriwrite_dbmodule->connect();
3888                 # Check if any errors occured while connecting to the database server.
3890                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3892                         # A database connection error has occured so return
3893                         # an error.
3895                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3897                 }
3899                 # Select the database.
3901                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3903                 # Check if any errors occured while selecting the database.
3905                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3907                         # The database does not exist, so return an error.
3909                         kiriwrite_error("databasemissingfile");
3911                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3913                         # The database has invalid permissions set, so return
3914                         # an error.
3916                         kiriwrite_error("databaseinvalidpermissions");
3918                 }
3920                 # Check if the database has read and write permissions.
3922                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
3924                 if ($database_permissions eq 1){
3926                         # The database permissions are invalid so return an error.
3928                         kiriwrite_error("databaseinvalidpermissions");
3930                 }
3932                 # Get information about the database.
3934                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3936                 # Check if any errors had occured while getting the database
3937                 # information.
3939                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3941                         # A database error has occured so return an error and
3942                         # also the extended error information.
3944                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3946                 };
3948                 my $database_name = $database_info{"DatabaseName"};
3950                 # Edit the selected pages.
3952                 foreach $filename (@filelist){
3954                         # Get the page information.
3956                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3958                         # Check if any errors occured.
3960                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3962                                 # A database error has occured so write a warning message.
3964                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3966                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3968                                 # The page does not exist, so write a warning message.
3970                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepagedoesnotexist}, $filename);
3971                                 $warning_count++;
3972                                 next;
3974                         }
3976                         # Check if the page section should be altered.
3978                         if ($altersection eq "on"){
3980                                 # Change the section name.
3982                                 $page_info{"PageSection"} = $newsection;
3984                         }
3986                         # Check if the page template should be altered.
3988                         if ($altertemplate eq "on"){
3990                                 # Change the page template filename.
3992                                 $page_info{"PageTemplate"} = $newtemplate;
3994                         }
3996                         # Check if the page settings should be altered.
3998                         if ($altersettings eq "on"){
4000                                 # Change the page settings value.
4002                                 $page_info{"PageSettings"} = $newsettings;
4004                         }
4006                         # Edit the selected page.
4008                         $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"} });
4010                         # Check if any errors occured while editing the page.
4012                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4014                                 # A database error has occured so write a warning message
4015                                 # with the extended error information.
4017                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
4018                                 $warning_count++;
4019                                 next;
4021                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4023                                 # The pages does not exist in the database.
4025                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepagedoesnotexist}, $filename);
4026                                 $warning_count++;
4027                                 next;
4029                         } elsif ($kiriwrite_dbmodule->geterror eq "PageExists"){
4031                                 # A page already exists with the new filename.
4033                                 kiriwrite_error("pagefilenameexists");
4035                         }
4037                         # The page has been edited so write a message saying that the page
4038                         # has been edited.
4040                         $edited_list{$pageedited}{Filename}     = $page_info{"PageFilename"};
4041                         $edited_list{$pageedited}{Name}         = $page_info{"PageName"};
4042  
4043                         # Increment the counter of edited pages.
4044  
4045                         $pageedited++;
4047                 }
4049                 # Disconnect from the database server.
4051                 $kiriwrite_dbmodule->disconnect();
4053                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multiedit}, { Style => "pageheader" });
4054                 $kiriwrite_presmodule->addlinebreak();
4055                 $kiriwrite_presmodule->addlinebreak();
4057                 # Check if the counter of edited pages is 0 and if it is
4058                 # then write a message saying that no pages were edited
4059                 # else write a message listing all of the pages edited.
4061                 if ($pageedited eq 0){
4063                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagesedited}, $database_name));
4065                 } else {
4067                         # Write out the message saying that the selected pages
4068                         # were edited.
4070                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagesedited}, $database_name));
4071                         $kiriwrite_presmodule->addlinebreak();
4072                         $kiriwrite_presmodule->addlinebreak();
4073                         $kiriwrite_presmodule->startbox("datalist");
4075                         foreach $page (keys %edited_list){
4077                                 # Check if the page name is not blank.
4079                                 if (!$edited_list{$page}{Name}){
4081                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
4082                                         $kiriwrite_presmodule->addtext(" (" . $edited_list{$page}{Filename} . ")");
4084                                 } else {
4086                                         $kiriwrite_presmodule->addtext($edited_list{$page}{Name});
4087                                         $kiriwrite_presmodule->addtext(" (" . $edited_list{$page}{Filename} . ")");
4089                                 }
4091                                 $kiriwrite_presmodule->addlinebreak();
4092                         }
4094                         $kiriwrite_presmodule->endbox();
4096                 }
4098                 # Check if any warnings have occured and write a message
4099                 # if any warnings did occur.
4101                 if (%warning_list){
4103                         # One or several warnings have occured so 
4104                         # write a message.
4106                         $kiriwrite_presmodule->addlinebreak();
4107                         $kiriwrite_presmodule->addlinebreak();
4108                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{editedpageswarnings});
4109                         $kiriwrite_presmodule->addlinebreak();
4110                         $kiriwrite_presmodule->addlinebreak();
4111                         $kiriwrite_presmodule->startbox("datalist");
4112                         foreach $warning (keys %warning_list) {
4113                                 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
4114                                 $kiriwrite_presmodule->addlinebreak();
4115                         }
4116                         $kiriwrite_presmodule->endbox();
4118                 }
4120                 # Write a link going back to the page list for
4121                 # the selected database.
4123                 $kiriwrite_presmodule->addlinebreak();
4124                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
4126                 return $kiriwrite_presmodule->grab();
4128         } elsif ($confirm eq 0){
4130                 # The action to edit the template has not been confirmed
4131                 # so write a form out instead.
4133                 # Connect to the database server.
4135                 $kiriwrite_dbmodule->connect();
4137                 # Check if any errors occured while connecting to the database server.
4139                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4141                         # A database connection error has occured so return
4142                         # an error.
4144                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4146                 }
4148                 # Select the database.
4150                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
4152                 # Check if any errors occured while selecting the database.
4154                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4156                         # The database does not exist, so return an error.
4158                         kiriwrite_error("databasemissingfile");
4160                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4162                         # The database has invalid permissions set, so return
4163                         # an error.
4165                         kiriwrite_error("databaseinvalidpermissions");
4167                 }
4169                 # Check if the database has read and write permissions.
4171                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
4173                 if ($database_permissions eq 1){
4175                         # The database permissions are invalid so return an error.
4177                         kiriwrite_error("databaseinvalidpermissions");
4179                 }
4181                 # Get information about the database.
4183                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4185                 # Check if any errors had occured while getting the database
4186                 # information.
4188                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4190                         # A database error has occured so return an error and
4191                         # also the extended error information.
4193                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4195                 };
4197                 my $database_name       = $database_info{"DatabaseName"};
4199                 # Define some variables for later.
4201                 my %edit_list;
4202                 my %template_list;
4203                 my %template_info;
4204                 my %page_info;
4205                 my @templates_list;
4206                 my @filenames;
4207                 my $filelist_filename;
4208                 my $filename;
4209                 my $page;
4210                 my $pageseek = 0;
4211                 my $page_name;
4212                 my $page_filename;
4213                 my $template;
4214                 my $template_filename;
4215                 my $template_warning;
4216                 my $templateseek = 0;
4218                 tie(%edit_list, 'Tie::IxHash');
4219                 tie(%template_list, 'Tie::IxHash');
4221                 # Get the information about each page that is going
4222                 # to be edited.
4224                 foreach $filelist_filename (@filelist){
4226                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
4228                         # Check if any errors occured.
4230                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4232                                 # A database error has occured so return an error and
4233                                 # also the extended error information.
4235                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4237                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4239                                 # The page does not exist, so process the next page.
4241                                 next;
4243                         }
4245                         # Add the page name and file name to the list of
4246                         # pages to edit.
4248                         $edit_list{$pageseek}{Filename} = $page_info{"PageFilename"};
4249                         $edit_list{$pageseek}{Name}     = $page_info{"PageName"};
4251                         # Increment the page seek counter and reset the
4252                         # page found value.
4254                         $pageseek++;
4256                 }
4258                 # Check if any pages were found in the database and return
4259                 # an error if not.
4261                 if ($pageseek eq 0){
4263                         # No pages were found so return an error.
4265                         kiriwrite_error("nopagesselected");
4267                 }
4269                 # Connect to the template database.
4271                 $kiriwrite_dbmodule->connecttemplate();
4273                 # Check if any errors had occured.
4275                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
4277                         # The template database does not exist so write a warning
4278                         # message.
4280                         $template_warning = $kiriwrite_lang->{pages}->{templatedatabasenotexistmultieditkeep};
4282                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
4284                         # The template database has invalid permissions set so
4285                         # return an error.
4287                         $template_warning = $kiriwrite_lang->{pages}->{templatedatabasepermissionsinvalidmultieditkeep};
4289                 }
4291                 if (!$template_warning){
4293                         # Get the list of templates available.
4295                         @templates_list = $kiriwrite_dbmodule->gettemplatelist();
4297                         # Check if any errors had occured.
4299                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
4301                                 # A database error occured while getting the list
4302                                 # of templates so write a warning message with the 
4303                                 # extended error information.
4305                                 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrormultieditkeep}, $kiriwrite_dbmodule->geterror(1));
4307                         }
4309                         if (!$template_warning){
4311                                 foreach $template_filename (@templates_list){
4313                                         # Get the template data.
4315                                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
4317                                         # Check if any error occured while getting the template information.
4319                                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
4321                                                 # A database error has occured, so write a warning message with
4322                                                 # the extended error information.
4324                                                 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrormultieditkeep}, $kiriwrite_dbmodule->geterror(1));
4326                                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
4328                                                 # The template does not exist, so process the next page.
4330                                                 next;
4332                                         }
4334                                         # Add the template to the list of templates.
4336                                         $template_list{$templateseek}{Filename} = $template_info{"TemplateFilename"};
4337                                         $template_list{$templateseek}{Name}     = $template_info{"TemplateName"};
4339                                         $templateseek++;
4341                                 }
4343                         }
4345                 }
4347                 # Disconnect from the template database.
4349                 $kiriwrite_dbmodule->disconnecttemplate();
4351                 # Disconnect from the database server.
4353                 $kiriwrite_dbmodule->disconnect();
4355                 # Write a form for editing the selected pages.
4357                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multiedit}, { Style => "pageheader" });
4358                 $kiriwrite_presmodule->addlinebreak();
4359                 $kiriwrite_presmodule->addlinebreak();
4360                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
4361                 $kiriwrite_presmodule->startbox();
4362                 $kiriwrite_presmodule->addhiddendata("mode", "page");
4363                 $kiriwrite_presmodule->addhiddendata("action", "multiedit");
4364                 $kiriwrite_presmodule->addhiddendata("database", $database);
4365                 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
4366                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
4368                 $pageseek = 1;
4370                 foreach $page (keys %edit_list){
4371                         $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
4372                         $kiriwrite_presmodule->addhiddendata("id[" . $pageseek  . "]", $edit_list{$page}{Filename});
4373                         $pageseek++;
4374                 }
4376                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{multieditmessage}, $database_name));
4377                 $kiriwrite_presmodule->addlinebreak();
4378                 $kiriwrite_presmodule->addlinebreak();
4379                 $kiriwrite_presmodule->startbox("datalist");
4381                 foreach $page (keys %edit_list){
4382                         if (!$edit_list{$page}{Name}){
4383                                 $kiriwrite_presmodule->additalictext("No Name");
4384                                 $kiriwrite_presmodule->addtext(" (" . $edit_list{$page}{Filename} . ")");
4385                         } else {
4386                                 $kiriwrite_presmodule->addtext($edit_list{$page}{Name} . " (" . $edit_list{$page}{Filename} . ")");
4387                         }
4389                         $kiriwrite_presmodule->addlinebreak();
4390                 }
4392                 $kiriwrite_presmodule->endbox();
4393                 $kiriwrite_presmodule->addlinebreak();
4394                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multieditmessagevalues});
4395                 $kiriwrite_presmodule->addlinebreak();
4396                 $kiriwrite_presmodule->addlinebreak();
4397                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
4399                 $kiriwrite_presmodule->startheader();
4400                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{alter}, { Style => "tablecellheader" });
4401                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
4402                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
4403                 $kiriwrite_presmodule->endheader();
4405                 $kiriwrite_presmodule->startrow();
4406                 $kiriwrite_presmodule->addcell("tablecell1");
4407                 $kiriwrite_presmodule->addcheckbox("altersection");
4408                 $kiriwrite_presmodule->endcell();
4409                 $kiriwrite_presmodule->addcell("tablecell1");
4410                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
4411                 $kiriwrite_presmodule->endcell();
4412                 $kiriwrite_presmodule->addcell("tablecell1");
4413                 $kiriwrite_presmodule->addinputbox("newsection", { Size => 64, MaxLength => 256 });
4414                 $kiriwrite_presmodule->endcell();
4415                 $kiriwrite_presmodule->endrow();
4417                 $kiriwrite_presmodule->startrow();
4418                 $kiriwrite_presmodule->addcell("tablecell2");
4419                 $kiriwrite_presmodule->addcheckbox("altertemplate");
4420                 $kiriwrite_presmodule->endcell();
4421                 $kiriwrite_presmodule->addcell("tablecell2");
4422                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
4423                 $kiriwrite_presmodule->endcell();
4425                 $kiriwrite_presmodule->addcell("tablecell2");
4427                 if ($template_warning){
4429                         $kiriwrite_presmodule->addhiddendata("newtemplate", "!skip");
4430                         $kiriwrite_presmodule->addtext($template_warning);
4432                 } else {
4434                         $kiriwrite_presmodule->addselectbox("newtemplate");
4436                         foreach $template (keys %template_list){
4438                                 $kiriwrite_presmodule->addoption($template_list{$template}{Name} . " (" . $template_list{$template}{Filename} . ")", { Value => $template_list{$template}{Filename}});
4440                         }
4442                         $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
4443                         $kiriwrite_presmodule->endselectbox();
4444                 }
4446                 $kiriwrite_presmodule->endcell();
4447                 $kiriwrite_presmodule->endrow();
4449                 $kiriwrite_presmodule->startrow();
4450                 $kiriwrite_presmodule->addcell("tablecell1");
4451                 $kiriwrite_presmodule->addcheckbox("altersettings");
4452                 $kiriwrite_presmodule->endcell();
4453                 $kiriwrite_presmodule->addcell("tablecell1");
4454                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
4455                 $kiriwrite_presmodule->endcell();
4456                 $kiriwrite_presmodule->addcell("tablecell1");
4457                 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => 1 , Selected => 1});
4458                 $kiriwrite_presmodule->addlinebreak();
4459                 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => 2 });
4460                 $kiriwrite_presmodule->addlinebreak();
4461                 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => 3 });
4462                 $kiriwrite_presmodule->addlinebreak();
4463                 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => 0 });
4464                 $kiriwrite_presmodule->endcell();
4465                 $kiriwrite_presmodule->endrow();
4467                 $kiriwrite_presmodule->endtable();
4468                 $kiriwrite_presmodule->addlinebreak();
4469                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{editpagesbutton});
4470                 $kiriwrite_presmodule->addtext(" | ");
4471                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
4472                 $kiriwrite_presmodule->addtext(" | ");
4473                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
4474                 $kiriwrite_presmodule->endbox();
4475                 $kiriwrite_presmodule->endform();
4477                 return $kiriwrite_presmodule->grab();
4479         } else {
4481                 # The confirm value is something else other than
4482                 # 1 or 0, so return an error.
4484                 kiriwrite_error("invalidvariable");
4486         }
4490 sub kiriwrite_page_list{
4491 #################################################################################
4492 # kiriwrite_page_list: Lists pages from an database.                            #
4493 #                                                                               #
4494 # Usage:                                                                        #
4495 #                                                                               #
4496 # kiriwrite_page_list([database]);                                              #
4497 #                                                                               #
4498 # database      Specifies the database to retrieve the pages from.              #
4499 #################################################################################
4501         # Get the database file name from what was passed to the subroutine.
4503         my ($database_file) = @_;
4505         # Check if the database_file variable is empty, if it is then print out a
4506         # select box asking the user to select a database from the list.
4508         if (!$database_file) {
4510                 # Define the variables required for this section.
4512                 my %database_info;
4513                 my @database_list;
4514                 my @databasefilenames;
4515                 my @databasenames;
4516                 my $dbseek              = 0;
4517                 my $dbfilename          = "";
4518                 my $dbname              = "";
4519                 my $data_file           = "";
4520                 my $data_file_length    = 0;
4521                 my $data_file_friendly  = "";
4522                 my $database_name       = "";
4523                 my $file_permissions    = "";
4525                 # Connect to the database server.
4527                 $kiriwrite_dbmodule->connect();
4529                 # Check if any errors occured while connecting to the database server.
4531                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4533                         # A database connection error has occured so return
4534                         # an error.
4536                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4538                 }
4540                 # Open the data directory and get all of the databases.
4542                 @database_list  = $kiriwrite_dbmodule->getdblist();
4544                 # Check if any errors occured while trying to get the list of databases.
4546                 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
4548                         # The database directory is missing so return an error.
4550                         kiriwrite_error("datadirectorymissing");
4552                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
4554                         # The database directory has invalid permissions set so return
4555                         # an error.
4557                         kiriwrite_error("datadirectoryinvalidpermissions");
4559                 }
4561                 # Get the information about each database (the short name and friendly name).
4563                 foreach $data_file (@database_list){
4565                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
4567                         # Check if any errors occured while selecting the database.
4569                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4571                                 # The database does not exist, so process the next
4572                                 # database.
4574                                 next;
4576                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4578                                 # The database has invalid permissions set, so process
4579                                 # the next database.
4581                                 next;
4583                         }
4585                         # Get the database information.
4587                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4589                         # Check if any errors had occured while getting the database
4590                         # information.
4592                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4594                                 # A database error has occured, so process the next 
4595                                 # database.
4597                                 next;
4599                         };
4601                         # Set the database name.
4603                         $database_name          = $database_info{"DatabaseName"};
4605                         # Check if the database name is undefined and if it is
4606                         # then set it blank.
4608                         if (!$database_name){
4609                                 $database_name = "";
4610                         }
4612                         # Append the database to the list of databases available.
4614                         push(@databasefilenames, $data_file);
4615                         push(@databasenames, $database_name);
4617                 }
4619                 # Disconnect from the database server.
4621                 $kiriwrite_dbmodule->disconnect();
4623                 # Write the page data.
4625                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{viewpages}, { Style => "pageheader" });
4626                 $kiriwrite_presmodule->addlinebreak();
4627                 $kiriwrite_presmodule->addlinebreak();
4628                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{nodatabaseselected});
4629                 $kiriwrite_presmodule->addlinebreak();
4630                 $kiriwrite_presmodule->addlinebreak();
4631                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"});
4632                 $kiriwrite_presmodule->startbox();
4633                 $kiriwrite_presmodule->addhiddendata("mode", "page");
4634                 $kiriwrite_presmodule->addhiddendata("action", "view");
4635                 $kiriwrite_presmodule->addselectbox("database");
4636                 foreach $dbfilename (@databasefilenames){
4637                         $dbname = $databasenames[$dbseek];
4638                         $dbseek++;
4639                         $kiriwrite_presmodule->addoption($dbname . " (" . $dbfilename . ")", { Value => $dbfilename });
4640                 }
4641                 $kiriwrite_presmodule->endselectbox();
4642                 $kiriwrite_presmodule->addtext(" | ");
4643                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{viewbutton});
4644                 $kiriwrite_presmodule->endbox();
4645                 $kiriwrite_presmodule->endform();
4647                 return $kiriwrite_presmodule->grab();
4649         } else {
4651                 my %database_info;
4652                 my %page_info;
4653                 my @database_pages;
4654                 my $pagemultioptions    = "";
4655                 my $db_name             = "";
4656                 my $tablestyle          = "";
4658                 my $page_filename       = "";
4659                 my $page_name           = "";
4660                 my $page_description    = "";
4661                 my $page_modified       = "";
4663                 my $tablestyletype      = 0;
4664                 my $page_count          = 0;
4665                 my $db_file_notblank    = 0;
4667                 tie(%database_info, 'Tie::IxHash');
4668                 tie(%page_info, 'Tie::IxHash');
4670                 # The database_file variable is not blank, so print out a list of pages from
4671                 # the selected database.
4673                 # Preform a variable check on the database filename to make sure that it is
4674                 # valid before using it.
4676                 kiriwrite_variablecheck($database_file, "filename", "", 0);
4677                 kiriwrite_variablecheck($database_file, "maxlength", 32, 0);
4679                 # Connect to the database server.
4681                 $kiriwrite_dbmodule->connect();
4683                 # Check if any errors occured while connecting to the database server.
4685                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4687                         # A database connection error has occured so return
4688                         # an error.
4690                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4692                 }
4694                 # Select the database.
4696                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_file });
4698                 # Check if any errors had occured while selecting the database.
4700                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4702                         # The database does not exist, so return an error.
4704                         kiriwrite_error("databasemissingfile");
4706                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4708                         # The database has invalid permissions set, so return
4709                         # an error.
4711                         kiriwrite_error("databaseinvalidpermissions");
4713                 }
4715                 # Get information about the database.
4717                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4719                 $db_name = $database_info{"DatabaseName"};
4721                 # Check if any errors had occured while getting the database
4722                 # information.
4724                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4726                         # A database error has occured so return an error and
4727                         # also the extended error information.
4729                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4731                 }
4733                 # Get the list of pages.
4735                 @database_pages = $kiriwrite_dbmodule->getpagelist();
4737                 # Check if any errors had occured while getting the list of pages.
4739                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4741                         # A database error has occured so return an error and
4742                         # also the extended error information.
4744                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4746                 }
4748                 # Check if there are any page names in the database array.
4750                 if (@database_pages){
4752                         # Write the start of the page.
4754                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagelist}, $db_name), { Style => "pageheader" });
4755                         $kiriwrite_presmodule->addlinebreak();
4756                         $kiriwrite_presmodule->addlinebreak();
4757                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
4758                         $kiriwrite_presmodule->startbox();
4759                         $kiriwrite_presmodule->addhiddendata("mode", "page");
4760                         $kiriwrite_presmodule->addhiddendata("database", $database_file);
4761                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
4763                         # Write the list of multiple selection options.
4765                         $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
4766                         $kiriwrite_presmodule->addtext(" | ");
4767                         $kiriwrite_presmodule->addbutton("action", { Value => "multidelete", Description => $kiriwrite_lang->{pages}->{deleteselectedbutton} });
4768                         $kiriwrite_presmodule->addtext(" | ");
4769                         $kiriwrite_presmodule->addbutton("action", { Value => "multimove", Description => $kiriwrite_lang->{pages}->{moveselectedbutton} });
4770                         $kiriwrite_presmodule->addtext(" | ");
4771                         $kiriwrite_presmodule->addbutton("action", { Value => "multicopy", Description => $kiriwrite_lang->{pages}->{copyselectedbutton} });
4772                         $kiriwrite_presmodule->addtext(" | ");
4773                         $kiriwrite_presmodule->addbutton("action", { Value => "multiedit", Description => $kiriwrite_lang->{pages}->{editselectedbutton} });
4775                         $kiriwrite_presmodule->addlinebreak();
4776                         $kiriwrite_presmodule->addlinebreak();
4777                         $kiriwrite_presmodule->endbox();
4779                         # Write the table header.
4781                         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
4782                         $kiriwrite_presmodule->startheader();
4783                         $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
4784                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagefilename}, { Style => "tablecellheader" });
4785                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagename}, { Style => "tablecellheader" });
4786                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagedescription}, { Style => "tablecellheader" });
4787                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{lastmodified}, { Style => "tablecellheader" });
4788                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
4789                         $kiriwrite_presmodule->endheader();
4791                         # Process each page filename and get the page information.
4793                         foreach $page_filename (@database_pages){
4795                                 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page_filename, Reduced => 1 });
4797                                 # Check if any errors have occured.
4799                                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4801                                         # A database error has occured so return an error and
4802                                         # also the extended error information.
4804                                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4806                                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4808                                         # The page does not exist, so process the next page.
4810                                         next;
4812                                 }
4814                                 $page_count++;
4816                                 $page_filename          = $page_info{"PageFilename"};
4817                                 $page_name              = $page_info{"PageName"};
4818                                 $page_description       = $page_info{"PageDescription"};
4819                                 $page_modified          = $page_info{"PageLastModified"};
4821                                 # Set the table cell style.
4823                                 if ($tablestyletype eq 0){
4825                                         $tablestyle = "tablecell1";
4826                                         $tablestyletype = 1;
4828                                 } else {
4830                                         $tablestyle = "tablecell2";
4831                                         $tablestyletype = 0;
4833                                 }
4835                                 # Write out the row of data.
4837                                 $kiriwrite_presmodule->startrow();
4838                                 $kiriwrite_presmodule->addcell($tablestyle);
4839                                 $kiriwrite_presmodule->addhiddendata("id[" . $page_count . "]", $page_filename);
4840                                 $kiriwrite_presmodule->addcheckbox("name[" . $page_count . "]");
4841                                 $kiriwrite_presmodule->endcell();
4842                                 $kiriwrite_presmodule->addcell($tablestyle);
4843                                 $kiriwrite_presmodule->addtext($page_filename);
4844                                 $kiriwrite_presmodule->endcell();
4845                                 $kiriwrite_presmodule->addcell($tablestyle);
4847                                 if (!$page_name){
4849                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
4851                                 } else {
4853                                         $kiriwrite_presmodule->addtext($page_name);
4855                                 }
4857                                 $kiriwrite_presmodule->endcell();
4858                                 $kiriwrite_presmodule->addcell($tablestyle);
4860                                 if (!$page_description){
4862                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
4864                                 } else {
4866                                         $kiriwrite_presmodule->addtext($page_description);
4868                                 }
4870                                 $kiriwrite_presmodule->endcell();
4871                                 $kiriwrite_presmodule->addcell($tablestyle);
4873                                 if (!$page_modified){
4875                                         $kiriwrite_presmodule->additalictext("No Date");
4877                                 } else {
4879                                         $kiriwrite_presmodule->addtext($page_modified);
4881                                 }
4883                                 $kiriwrite_presmodule->endcell();
4884                                 $kiriwrite_presmodule->addcell($tablestyle);
4885                                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"}  . "?mode=page&action=edit&database=" . $database_file . "&page=" . $page_filename, { Text => $kiriwrite_lang->{options}->{edit} });
4886                                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"}  . "?mode=page&action=delete&database=" . $database_file . "&page=" . $page_filename, { Text => $kiriwrite_lang->{options}->{delete} });
4887                                 $kiriwrite_presmodule->endcell();
4888                                 $kiriwrite_presmodule->endrow();
4890                                 # Increment the counter.
4892                         }
4894                 }
4896                 # Disconnect from the database server.
4898                 $kiriwrite_dbmodule->disconnect();
4900                 $kiriwrite_presmodule->endtable();
4901                 $kiriwrite_presmodule->startbox();
4902                 $kiriwrite_presmodule->addhiddendata("count", $page_count);
4903                 $kiriwrite_presmodule->endbox();
4904                 $kiriwrite_presmodule->endform();
4906                 if (!@database_pages || !$page_count){
4908                         # There were no values in the database pages array and 
4909                         # the page count had not been incremented so write a
4910                         # message saying that there were no pages in the
4911                         # database.
4913                         $kiriwrite_presmodule->clear();
4914                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagelist}, $db_name), { Style => "pageheader" });
4915                         $kiriwrite_presmodule->addlinebreak();
4916                         $kiriwrite_presmodule->addlinebreak();
4917                         $kiriwrite_presmodule->startbox("errorbox");
4918                         $kiriwrite_presmodule->enterdata($kiriwrite_lang->{pages}->{nopagesindatabase});
4919                         $kiriwrite_presmodule->endbox();
4921                 }
4923                 return $kiriwrite_presmodule->grab();
4925         }
4929 sub kiriwrite_template_add{
4930 #################################################################################
4931 # kiriwrite_template_add: Add a template to the template folder                 #
4932 #                                                                               #
4933 # Usage:                                                                        #
4934 #                                                                               #
4935 # kiriwrite_template_add(filename, name, description, layout, confirm);         #
4936 #                                                                               #
4937 # filename      The filename of the new template.                               #
4938 # name          The name of the template.                                       #
4939 # description   The description of the template.                                #
4940 # layout        The layout of the new template.                                 #
4941 # confirm       Confirm the action of creating a new template.                  #
4942 #################################################################################
4944         # Get the variables that were passed to the subroutine.
4946         my ($templatefilename, $templatename, $templatedescription, $templatelayout, $confirm) = @_;
4948         # Check if the confirm value is blank and if it is then set confirm to 0.
4950         if (!$confirm){
4952                 # The confirm value is blank, so set the value of confirm to 0.
4954                 $confirm = 0;
4956         }
4958         if ($confirm eq 1){
4960                 # Check (validate) each of the values.
4962                 kiriwrite_variablecheck($templatename, "utf8", 0, 0);
4963                 kiriwrite_variablecheck($templatedescription, "utf8", 0, 0);
4964                 kiriwrite_variablecheck($templatelayout, "utf8", 0, 0);
4966                 # Convert the values into proper UTF8 strings that can be used.
4968                 $templatename           = kiriwrite_utf8convert($templatename);
4969                 $templatedescription    = kiriwrite_utf8convert($templatedescription);
4970                 $templatelayout         = kiriwrite_utf8convert($templatelayout);
4972                 # Check the length of the converted UTF8 strings.
4974                 my $templatefilename_length_check       = kiriwrite_variablecheck($templatefilename, "maxlength", 64, 1);
4975                 my $templatename_length_check           = kiriwrite_variablecheck($templatename, "maxlength", 512, 1);
4976                 my $templatedescription_length_check    = kiriwrite_variablecheck($templatedescription, "maxlength", 512, 1);
4977                 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
4979                 if ($templatefilename_length_check eq 1){
4981                         # The template filename length is too long, so return an error.
4983                         kiriwrite_error("templatefilenametoolong");
4985                 }
4987                 if ($templatename_length_check eq 1){
4989                         # The template name length is too long, so return an error.
4991                         kiriwrite_error("templatenametoolong");
4993                 }
4996                 if ($templatedescription_length_check eq 1){
4998                         # The template description length is too long, so return an error.
5000                         kiriwrite_error("templatedescriptiontoolong");
5002                 }
5004                 # Check if the filename specified is a valid filename.
5006                 kiriwrite_variablecheck($templatefilename, "filename", "", 0);
5008                 # Connect to the template server.
5010                 $kiriwrite_dbmodule->connect();
5012                 # Connect to the template database.
5014                 $kiriwrite_dbmodule->connecttemplate(1);
5016                 # Check if any errors had occured.
5018                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5020                         # The template database has invalid permissions set so
5021                         # return an error.
5023                         kiriwrite_error("templatedatabaseinvalidpermissions");
5025                 }
5027                 $kiriwrite_dbmodule->addtemplate({ TemplateFilename => $templatefilename, TemplateName => $templatename, TemplateDescription => $templatedescription, TemplateLayout => $templatelayout });
5029                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5031                         # A database error has occured so return an error along
5032                         # with the extended error information.
5034                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5036                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5038                         # The template database has invalid permissions set so return
5039                         # an error.
5041                         kiriwrite_error("templatedatabaseinvalidpermissions");
5043                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplatePageExists"){
5045                         # The template page already exists so return an error.
5047                         kiriwrite_error("templatefilenameexists");
5049                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseUncreateable"){
5051                         # The template databases is uncreatable so return an error.
5053                         kiriwrite_error("templatedatabasenotcreated");
5055                 }
5057                 $kiriwrite_dbmodule->disconnecttemplate();
5059                 # Disconnect from the template server.
5061                 $kiriwrite_dbmodule->disconnect();
5063                 # Print out the confirmation message.
5065                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{addedtemplate}, { Style => "pageheader" });
5066                 $kiriwrite_presmodule->addlinebreak();
5067                 $kiriwrite_presmodule->addlinebreak();
5068                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{addedtemplatemessage}, $templatename));
5069                 $kiriwrite_presmodule->addlinebreak();
5070                 $kiriwrite_presmodule->addlinebreak();
5071                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5072                 return $kiriwrite_presmodule->grab();
5074         } else {
5075                 # No confirmation was made, so print out a form for adding a template.
5077                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{addtemplate}, { Style => "pageheader" });
5078                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5079                 $kiriwrite_presmodule->startbox();
5080                 $kiriwrite_presmodule->addhiddendata("mode", "template");
5081                 $kiriwrite_presmodule->addhiddendata("action", "add");
5082                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5083                 $kiriwrite_presmodule->addlinebreak();
5084                 $kiriwrite_presmodule->starttable("", { CellSpacing => 0, CellPadding => 5 });
5086                 $kiriwrite_presmodule->startheader();
5087                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
5088                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
5089                 $kiriwrite_presmodule->endheader();
5091                 $kiriwrite_presmodule->startrow();
5092                 $kiriwrite_presmodule->addcell("tablecell1");
5093                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatename});
5094                 $kiriwrite_presmodule->endcell();
5095                 $kiriwrite_presmodule->addcell("tablecell2");
5096                 $kiriwrite_presmodule->addinputbox("templatename", { 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}->{templatedescription});
5103                 $kiriwrite_presmodule->endcell();
5104                 $kiriwrite_presmodule->addcell("tablecell2");
5105                 $kiriwrite_presmodule->addinputbox("templatedescription", { Size => 64, MaxLength => 512 });
5106                 $kiriwrite_presmodule->endcell();
5107                 $kiriwrite_presmodule->endrow();
5109                 $kiriwrite_presmodule->startrow();
5110                 $kiriwrite_presmodule->addcell("tablecell1");
5111                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatefilename});
5112                 $kiriwrite_presmodule->endcell();
5113                 $kiriwrite_presmodule->addcell("tablecell2");
5114                 $kiriwrite_presmodule->addinputbox("templatefilename", { Size => 32, MaxLength => 64 });
5115                 $kiriwrite_presmodule->endcell();
5116                 $kiriwrite_presmodule->endrow();
5118                 $kiriwrite_presmodule->startrow();
5119                 $kiriwrite_presmodule->addcell("tablecell1");
5120                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatelayout});
5121                 $kiriwrite_presmodule->endcell();
5122                 $kiriwrite_presmodule->addcell("tablecell2");
5123                 $kiriwrite_presmodule->addtextbox("templatelayout", { Columns => 50, Rows => 10 });
5124                 $kiriwrite_presmodule->addlinebreak();
5125                 $kiriwrite_presmodule->addlinebreak();
5126                 $kiriwrite_presmodule->startbox("datalist");
5127                 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
5128                 $kiriwrite_presmodule->addlinebreak();
5129                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagecontent});
5130                 $kiriwrite_presmodule->addlinebreak();
5131                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
5132                 $kiriwrite_presmodule->addlinebreak();
5133                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
5134                 $kiriwrite_presmodule->addlinebreak();
5135                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
5136                 $kiriwrite_presmodule->addlinebreak();
5137                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
5138                 $kiriwrite_presmodule->addlinebreak();
5139                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
5140                 $kiriwrite_presmodule->addlinebreak();
5141                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
5142                 $kiriwrite_presmodule->addlinebreak();
5143                 $kiriwrite_presmodule->endbox();
5144                 $kiriwrite_presmodule->endcell();
5145                 $kiriwrite_presmodule->endrow();
5146                 $kiriwrite_presmodule->endtable();
5148                 $kiriwrite_presmodule->addlinebreak();
5149                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{addtemplatebutton});
5150                 $kiriwrite_presmodule->addtext(" | ");
5151                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
5152                 $kiriwrite_presmodule->addtext(" | ");
5153                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template" , { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5155                 $kiriwrite_presmodule->endbox();
5156                 $kiriwrite_presmodule->endform();
5158                 return $kiriwrite_presmodule->grab();
5160         }
5165 sub kiriwrite_template_edit{
5166 #################################################################################
5167 # kiriwrite_template_edit: Edit a template from the template folder.            #
5168 #                                                                               #
5169 # Usage:                                                                        #
5170 #                                                                               #
5171 # kiriwrite_template_edit(filename, [newfilename], [newname], [newdescription], #
5172 #                               [templatelayout], [confirm]);                   #
5173 #                                                                               #
5174 # filename              The current filename of the template to edit.           #
5175 # newfilename           The new filename of the template to edit.               #
5176 # newname               The new name of the template being edited.              #
5177 # newdescription        The new description of the template being edited.       #
5178 # templatelayout        The modified/altered template layout.                   #
5179 # confirm               Confirms the action to edit a template and its          #
5180 #                       settings.                                               #
5181 #################################################################################
5183         # Get all the variables that have been passed to the subroutine.
5185         my ($templatefilename, $templatenewfilename, $templatenewname, $templatenewdescription, $templatelayout, $confirm) = @_;
5187         # Check if the confirm variable is blank, if it is then
5188         # set confirm to '0'
5190         if (!$confirm){
5192                 # confirm is uninitalised/blank, so set the value of confirm
5193                 # to '0'
5195                 $confirm = 0;
5197         }
5199         # Check if the template filename is blank and if it is, then return
5200         # an error.
5202         if (!$templatefilename){
5204                 kiriwrite_error("templatefilenameblank");
5206         }
5208         # Connect to the database server.
5210         $kiriwrite_dbmodule->connect();
5212         # Check if any errors occured while connecting to the database server.
5214         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5216                 # A database connection error has occured so return
5217                 # an error.
5219                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5221         }
5223         if ($confirm eq 1){
5225                 # Check certain strings to see if they UTF8 compiliant.
5227                 kiriwrite_variablecheck($templatenewname, "utf8", 0, 0);
5228                 kiriwrite_variablecheck($templatenewdescription, "utf8", 0, 0);
5229                 kiriwrite_variablecheck($templatelayout, "utf8", 0, 0);
5231                 # Convert the values into proper UTF8 strings.
5233                 $templatenewname        = kiriwrite_utf8convert($templatenewname);
5234                 $templatenewdescription = kiriwrite_utf8convert($templatenewdescription);
5235                 $templatelayout         = kiriwrite_utf8convert($templatelayout);
5237                 # Check if the filenames recieved are valid filenames.
5239                 kiriwrite_variablecheck($templatenewfilename, "maxlength", 64, 0);
5240                 kiriwrite_variablecheck($templatenewdescription, "maxlength", 512, 0);
5241                 kiriwrite_variablecheck($templatenewname, "maxlength", 512, 0);
5242                 kiriwrite_variablecheck($templatefilename, "maxlength", 64, 0);
5243                 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
5245                 kiriwrite_variablecheck($templatefilename, "filename", "", 0);
5246                 kiriwrite_variablecheck($templatenewfilename, "filename", "", 0);
5248                 # Connect to the template database.
5250                 $kiriwrite_dbmodule->connecttemplate();
5252                 # Check if any errors had occured.
5254                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5256                         # The template database has invalid permissions set so
5257                         # return an error.
5259                         kiriwrite_error("templatedatabaseinvalidpermissions");
5261                 }
5263                 # Edit the template.
5265                 $kiriwrite_dbmodule->edittemplate({ TemplateFilename => $templatefilename, NewTemplateFilename => $templatenewfilename, NewTemplateName => $templatenewname, NewTemplateDescription => $templatenewdescription, NewTemplateLayout => $templatelayout });
5267                 # Check if any error occured while editing the template.
5269                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5271                         # A database error has occured, so return an error.
5273                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5275                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5277                         # The template database has invalid permissions set so return
5278                         # an error.
5280                         kiriwrite_error("templatedatabaseinvalidpermissions");
5282                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5284                         # The template does not exist, so process the next template.
5286                         kiriwrite_error("templatedoesnotexist");
5288                 }
5290                 # Disconnect from the database server.
5292                 $kiriwrite_dbmodule->disconnect();
5294                 # Disconnect from the template database.
5296                 $kiriwrite_dbmodule->disconnecttemplate();
5298                 # Append a link so that the user can return to the templates list.
5300                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{editedtemplate}, { Style => "pageheader" });
5301                 $kiriwrite_presmodule->addlinebreak();
5302                 $kiriwrite_presmodule->addlinebreak();
5303                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{editedtemplatemessage}, $templatenewname));
5304                 $kiriwrite_presmodule->addlinebreak();
5305                 $kiriwrite_presmodule->addlinebreak();
5306                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5308         } else {
5310                 # Connect to the template database.
5312                 $kiriwrite_dbmodule->connecttemplate();
5314                 # Check if any errors had occured.
5316                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5318                         # The template database has invalid permissions set so
5319                         # return an error.
5321                         kiriwrite_error("templatedatabaseinvalidpermissions");
5323                 }
5325                 # Get the template information.
5327                 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $templatefilename });
5329                 # Check if any error occured while getting the template information.
5331                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5333                         # A database error has occured, so return an error.
5335                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5337                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5339                         # The template does not exist, so return an error.
5341                         kiriwrite_error("templatedoesnotexist");
5343                 }
5345                 # Disconnect from the template database.
5347                 $kiriwrite_dbmodule->disconnecttemplate();
5349                 # Get the values from the query results.
5351                 my $template_filename           = $template_info{"TemplateFilename"};
5352                 my $template_name               = $template_info{"TemplateName"};
5353                 my $template_description        = $template_info{"TemplateDescription"};
5354                 my $template_layout             = $template_info{"TemplateLayout"};
5355                 my $template_modified           = $template_info{"TemplateLastModified"};
5357                 # Check if the values are undefined and set them blank
5358                 # if they are.
5360                 if (!$template_name){
5361                         $template_name = "";
5362                 }
5364                 if (!$template_description){
5365                         $template_description = "";
5366                 }
5368                 if (!$template_layout){
5369                         $template_layout = "";
5370                 }
5372                 # Write out the form for editing an template with the current template 
5373                 # settings put into the correct place.
5375                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{edittemplate}, { Style => "pageheader" });
5376                 $kiriwrite_presmodule->addlinebreak();
5377                 $kiriwrite_presmodule->addlinebreak();
5378                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5379                 $kiriwrite_presmodule->startbox();
5380                 $kiriwrite_presmodule->addhiddendata("mode", "template");
5381                 $kiriwrite_presmodule->addhiddendata("action", "edit");
5382                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5383                 $kiriwrite_presmodule->addhiddendata("template", $template_filename);
5384                 $kiriwrite_presmodule->starttable("", { CellSpacing => 0, CellPadding => 5});
5386                 $kiriwrite_presmodule->startheader();
5387                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
5388                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
5389                 $kiriwrite_presmodule->endheader();
5391                 $kiriwrite_presmodule->startrow();
5392                 $kiriwrite_presmodule->addcell("tablecell1");
5393                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatename});
5394                 $kiriwrite_presmodule->endcell();
5395                 $kiriwrite_presmodule->addcell("tablecell2");
5396                 $kiriwrite_presmodule->addinputbox("newname", { Size => 64, MaxLength => 512, Value => $template_name });
5397                 $kiriwrite_presmodule->endcell();
5398                 $kiriwrite_presmodule->endrow();
5400                 $kiriwrite_presmodule->startrow();
5401                 $kiriwrite_presmodule->addcell("tablecell1");
5402                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatedescription});
5403                 $kiriwrite_presmodule->endcell();
5404                 $kiriwrite_presmodule->addcell("tablecell2");
5405                 $kiriwrite_presmodule->addinputbox("newdescription", { Size => 64, MaxLength => 512, Value => $template_description });
5406                 $kiriwrite_presmodule->endcell();
5407                 $kiriwrite_presmodule->endrow();
5409                 $kiriwrite_presmodule->startrow();
5410                 $kiriwrite_presmodule->addcell("tablecell1");
5411                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatefilename});
5412                 $kiriwrite_presmodule->endcell();
5413                 $kiriwrite_presmodule->addcell("tablecell2");
5414                 $kiriwrite_presmodule->addinputbox("newfilename", { Size => 32, MaxLength => 64, Value => $template_filename });
5415                 $kiriwrite_presmodule->endcell();
5416                 $kiriwrite_presmodule->endrow();
5418                 $kiriwrite_presmodule->startrow();
5419                 $kiriwrite_presmodule->addcell("tablecell1");
5420                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatelayout});
5421                 $kiriwrite_presmodule->endcell();
5422                 $kiriwrite_presmodule->addcell("tablecell2");
5423                 $kiriwrite_presmodule->addtextbox("newlayout", { Rows => 10, Columns => 50, Value => $template_layout});
5424                 $kiriwrite_presmodule->addlinebreak();
5425                 $kiriwrite_presmodule->addlinebreak();
5426                 $kiriwrite_presmodule->startbox("datalist");
5427                 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
5428                 $kiriwrite_presmodule->addlinebreak();
5429                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagecontent});
5430                 $kiriwrite_presmodule->addlinebreak();
5431                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
5432                 $kiriwrite_presmodule->addlinebreak();
5433                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
5434                 $kiriwrite_presmodule->addlinebreak();
5435                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
5436                 $kiriwrite_presmodule->addlinebreak();
5437                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
5438                 $kiriwrite_presmodule->addlinebreak();
5439                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
5440                 $kiriwrite_presmodule->addlinebreak();
5441                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
5442                 $kiriwrite_presmodule->addlinebreak();
5443                 $kiriwrite_presmodule->endbox();
5444                 $kiriwrite_presmodule->endcell();
5445                 $kiriwrite_presmodule->endrow();
5447                 $kiriwrite_presmodule->endtable();
5449                 $kiriwrite_presmodule->addlinebreak();
5451                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{edittemplatebutton});
5452                 $kiriwrite_presmodule->addtext(" | ");
5453                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
5454                 $kiriwrite_presmodule->addtext(" | ");
5455                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5457                 $kiriwrite_presmodule->endbox();
5458                 $kiriwrite_presmodule->endform();
5460         }
5462         # Disconnect from the database server.
5464         $kiriwrite_dbmodule->disconnect();
5466         return $kiriwrite_presmodule->grab();
5470 sub kiriwrite_template_delete{
5471 #################################################################################
5472 # kiriwrite_template_delete: Delete a template from the template folder.        #
5473 #                                                                               #
5474 # Usage:                                                                        #
5475 #                                                                               #
5476 # kiriwrite_template_delete(filename, confirm);                                 #
5477 #                                                                               #
5478 # filename      Specifies the filename of the database to delete.               #
5479 # confirm       Confirms the action to delete a template.                       #
5480 #################################################################################
5482         # Get the parameters that were passed to the subroutine.
5484         my ($template_filename, $template_confirm) = @_;
5486         if (!$template_confirm){
5487                 $template_confirm = 0;
5488         }
5490         # Check the length of the variables.
5491         kiriwrite_variablecheck($template_filename, "maxlength", 64, 0);
5492         kiriwrite_variablecheck($template_confirm, "maxlength", 1, 0);
5494         # Check if the template_name string is blank and if it is then
5495         # return an error (as the template_name string should not be
5496         # blank.
5498         if (!$template_filename){
5500                 # The template_filename string really is blank, 
5501                 # so return an error saying that an empty
5502                 # filename was passed (to the subroutine).
5504                 kiriwrite_error("templatefilenameblank");
5506         }
5508         # Check if the template_confirm string is blank and if it is, write
5509         # out a form asking the user to confirm the deletion.
5511         if ($template_confirm eq 1){
5513                 # The action to delete the template from the template database has
5514                 # been confirmed so delete the template.
5516                 # Connect to the database server.
5518                 $kiriwrite_dbmodule->connect();
5520                 # Check if any errors occured while connecting to the database server.
5522                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5524                         # A database connection error has occured so return
5525                         # an error.
5527                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5529                 }
5531                 # Check if the template database exists and the file permissions
5532                 # are valid and return an error if they aren't.
5534                 $kiriwrite_dbmodule->connecttemplate();
5536                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5538                         # The template database does not exist so write a warning
5539                         # message.
5541                         kiriwrite_error("templatedatabasemissing");
5543                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5545                         # The template database has invalid permissions set so
5546                         # return an error.
5548                         kiriwrite_error("templatedatabaseinvalidpermissions");
5550                 }
5552                 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
5554                 # Check if any error occured while getting the template information.
5556                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5558                         # A database error has occured, so return an error.
5560                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5562                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5564                         # The template does not exist, so return an error.
5566                         kiriwrite_error("templatedoesnotexist");
5568                 }
5570                 # Delete the selected template.
5572                 $kiriwrite_dbmodule->deletetemplate({ TemplateFilename => $template_filename });
5574                 # Check if any error occured while deleting the template.
5576                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5578                         # A database error has occured, so return an error.
5580                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5582                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5584                         # The template does not exist, so process the next template.
5586                         kiriwrite_error("templatedoesnotexist");
5588                 }
5590                 $kiriwrite_dbmodule->disconnecttemplate();
5592                 # Get the deleted database name.
5594                 my $database_template_name = $template_info{"TemplateName"};
5596                 # Disconnect from the database server.
5598                 $kiriwrite_dbmodule->disconnect();
5600                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{deletedtemplate}, { Style => "pageheader" });
5601                 $kiriwrite_presmodule->addlinebreak();
5602                 $kiriwrite_presmodule->addlinebreak();
5603                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{deletedtemplatemessage}, $database_template_name) );
5604                 $kiriwrite_presmodule->addlinebreak();
5605                 $kiriwrite_presmodule->addlinebreak();
5606                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5608                 return $kiriwrite_presmodule->grab();
5610         } elsif ($template_confirm eq 0) {
5612                 # The template confirm value is 0 (previously blank and then set to 0), so
5613                 # write out a form asking the user to confirm the deletion of the template.
5615                 # Connect to the database server.
5617                 $kiriwrite_dbmodule->connect();
5619                 # Check if any errors occured while connecting to the database server.
5621                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5623                         # A database connection error has occured so return
5624                         # an error.
5626                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5628                 }
5630                 # Connect to the template database.
5632                 $kiriwrite_dbmodule->connecttemplate();
5634                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5636                         # The template database does not exist so write a warning
5637                         # message.
5639                         kiriwrite_error("templatedatabasemissing");
5641                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5643                         # The template database has invalid permissions set so
5644                         # return an error.
5646                         kiriwrite_error("templatedatabaseinvalidpermissions");
5648                 }
5650                 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
5652                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5654                         # A database error has occured, so return an error.
5656                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5658                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5660                         # The template does not exist, so return an error.
5662                         kiriwrite_error("templatedoesnotexist");
5664                 }
5666                 my $template_data_filename      = $template_info{"TemplateFilename"};
5667                 my $template_data_name          = $template_info{"TemplateName"};
5669                 $kiriwrite_dbmodule->disconnecttemplate();
5671                 # Disconnect from the database server.
5673                 $kiriwrite_dbmodule->disconnect();
5675                 # Write out the confirmation form.
5677                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{deletetemplate}, { Style => "pageheader" });
5678                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5679                 $kiriwrite_presmodule->startbox();
5680                 $kiriwrite_presmodule->addhiddendata("mode", "template");
5681                 $kiriwrite_presmodule->addhiddendata("template", $template_filename);
5682                 $kiriwrite_presmodule->addhiddendata("action", "delete");
5683                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5684                 $kiriwrite_presmodule->addlinebreak();
5685                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{deletetemplatemessage}, $template_data_name, $template_data_filename));
5686                 $kiriwrite_presmodule->addlinebreak();
5687                 $kiriwrite_presmodule->addlinebreak();
5688                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{deletetemplatebutton});
5689                 $kiriwrite_presmodule->addtext(" | ");
5690                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{deletetemplatereturntolist} });
5691                 $kiriwrite_presmodule->endbox();
5692                 $kiriwrite_presmodule->endform();
5694                 return $kiriwrite_presmodule->grab();
5696         } else {
5698                         kiriwrite_error("invalidvariable");
5700         }
5704 sub kiriwrite_template_list{
5705 #################################################################################
5706 # kiriwrite_template_list: List the templates in the template folder.           #
5707 #                                                                               #
5708 # Usage:                                                                        #
5709 #                                                                               #
5710 # kiriwrite_template_list();                                                    #
5711 #################################################################################
5713         # Define certain values for later.
5715         my %template_info;
5717         my @templates_list;
5719         my $template;
5720         my $template_filename           = "";
5721         my $template_filename_list      = "";
5722         my $template_name               = "";
5723         my $template_description        = "";
5724         my $template_data               = "";
5726         my $template_count = 0;
5728         my $template_style = 0;
5729         my $template_stylename = "";
5731         my $templatewarning = "";
5733         # Connect to the database server.
5735         $kiriwrite_dbmodule->connect();
5737         # Check if any errors occured while connecting to the database server.
5739         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5741                 # A database connection error has occured so return
5742                 # an error.
5744                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5746         }
5748         # Connect to the template database.
5750         $kiriwrite_dbmodule->connecttemplate();
5752         # Check if any errors had occured.
5754         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5756                 # The template database does not exist so write a warning
5757                 # message.
5759                 $templatewarning = $kiriwrite_lang->{template}->{templatedatabasedoesnotexist};
5761         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5763                 # The template database has invalid permissions set so
5764                 # return an error.
5766                 kiriwrite_error("templatedatabaseinvalidpermissions");
5768         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5770                 # A database error occured while getting the list of
5771                 # templates so return an error with the extended
5772                 # error information.
5774                 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5776         }
5778         # Get the list of template databases.
5780         if (!$templatewarning){
5782                 @templates_list = $kiriwrite_dbmodule->gettemplatelist();
5784         }
5786         # Check if any errors had occured.
5788         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5790                 # A database error occured while getting the list
5791                 # of templates so return an error with the 
5792                 # extended error information.
5794                 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5796         }
5798         # Check if any templates are in the database and if there isn't
5799         # then write a message saying that there are no templates in the
5800         # database.
5802         if (!@templates_list && !$templatewarning){
5803                 $templatewarning = $kiriwrite_lang->{template}->{notemplatesavailable};
5804         }
5806         # Process the templates into a template list.
5808         $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{viewtemplates}, { Style => "pageheader" });
5809         $kiriwrite_presmodule->addlinebreak();
5810         $kiriwrite_presmodule->addlinebreak();
5812         if ($templatewarning){
5814                 $kiriwrite_presmodule->startbox("errorbox");
5815                 $kiriwrite_presmodule->addtext($templatewarning);
5816                 $kiriwrite_presmodule->endbox();
5818         } else {
5820                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
5821                 $kiriwrite_presmodule->startheader();
5822                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatefilename}, { Style => "tablecellheader" });
5823                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatename}, { Style => "tablecellheader" });
5824                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatedescription}, { Style => "tablecellheader" });
5825                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
5826                 $kiriwrite_presmodule->endheader();
5828                 foreach $template (@templates_list){
5830                         # Get the template data.
5832                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
5834                         # Check if any errors occured while trying to get the template
5835                         # data.
5837                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5839                                 # A database error has occured, so return an error.
5841                                 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5843                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5845                                 # The template does not exist, so process the next template.
5847                                 next;
5849                         }
5851                         $template_filename      = $template_info{"TemplateFileName"};
5852                         $template_name          = $template_info{"TemplateName"};
5853                         $template_description   = $template_info{"TemplateDescription"};
5855                         # Check what style the row of table cells should be.
5856  
5857                         if ($template_style eq 0){
5858  
5859                                 $template_stylename = "tablecell1";
5860                                 $template_style = 1;
5861  
5862                         } else {
5863  
5864                                 $template_stylename = "tablecell2";
5865                                 $template_style = 0;
5866  
5867                         }
5869                         $kiriwrite_presmodule->startrow();
5870                         $kiriwrite_presmodule->addcell($template_stylename);
5871                         $kiriwrite_presmodule->addtext($template_info{"TemplateFilename"});
5873                         # Check if the blank template value was set.
5875                         if (!$template_info{"TemplateLayout"}){
5876                                 $kiriwrite_presmodule->additalictext(" " . "[Blank Template]");
5877                         }
5879                         $kiriwrite_presmodule->endcell();
5880                         $kiriwrite_presmodule->addcell($template_stylename);
5882                         # Check if the template name is blank and if it is
5883                         # write a message to say there's no name for the
5884                         # template.
5886                         if (!$template_info{"TemplateName"}){
5887                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
5888                         } else {
5889                                 $kiriwrite_presmodule->addtext($template_info{"TemplateName"});
5890                         }
5892                         $kiriwrite_presmodule->endcell();
5893                         $kiriwrite_presmodule->addcell($template_stylename);
5895                         # Check if the template description is blank and if
5896                         # it is then write a message to say there's no
5897                         # description for the template.
5899                         if (!$template_info{"TemplateDescription"}){
5900                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
5901                         } else {
5902                                 $kiriwrite_presmodule->addtext($template_info{"TemplateDescription"});
5903                         }
5905                         $kiriwrite_presmodule->endcell();
5906                         $kiriwrite_presmodule->addcell($template_stylename);
5907                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template&action=edit&template=" . $template_info{"TemplateFilename"}, { Text => $kiriwrite_lang->{options}->{edit} });
5908                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template&action=delete&template=" . $template_info{"TemplateFilename"}, { Text => $kiriwrite_lang->{options}->{delete} });
5909                         $kiriwrite_presmodule->endcell();
5910                         $kiriwrite_presmodule->endrow();
5912                 }
5914                 $kiriwrite_presmodule->endtable();
5916         }
5918         # Disconnect from the database server.
5920         $kiriwrite_dbmodule->disconnect();
5922         $kiriwrite_dbmodule->disconnecttemplate();
5923         return $kiriwrite_presmodule->grab();
5928 sub kiriwrite_database_add{
5929 #################################################################################
5930 # kiriwrite_database_add: Creates a new database.                               #
5931 #                                                                               #
5932 # Usage:                                                                        #
5933 #                                                                               #
5934 # kiriwrite_database_add(filename, name, description, notes, categories,        #
5935 #                               [confirm]);                                     #
5936 #                                                                               #
5937 # filename      Specifies the filename for the database.                        #
5938 # name          Specifies a (friendly) name for the database.                   #
5939 # description   Specifies a description for the database.                       #
5940 # notes         Specifies the notes for the database.                           #
5941 # categories    Specifies the categories for the database.                      #
5942 # confirm       Confirms the action to create a database.                       #
5943 #################################################################################
5945         # Get the variables passed from the subroutine.
5947         my ($database_filename, $database_name, $database_description, $database_notes, $database_categories, $database_confirm) = @_;
5949         # Check if the confirm value is blank and if it is then
5950         # set the confirm value to 0.
5952         if (!$database_confirm){
5954                 # The confirm value was blank so set the value to 0.
5956                 $database_confirm = 0;
5958         }
5960         if ($database_confirm eq 1){
5962                 # The action to create a new database is confirmed.
5964                 # Validate the database name and database descriptions.
5966                 my $database_name_check_utf8            = kiriwrite_variablecheck($database_name, "utf8", 0, 0);
5967                 my $database_description_check_utf8     = kiriwrite_variablecheck($database_description, "utf8", 0, 0);
5968                 my $database_notes_check_utf8           = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
5969                 my $database_categories_check_utf8      = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
5971                 # Convert the UTF8 strings before checking the length of the strings.
5973                 $database_name                  = kiriwrite_utf8convert($database_name);
5974                 $database_description           = kiriwrite_utf8convert($database_description);
5975                 $database_notes                 = kiriwrite_utf8convert($database_notes);
5976                 $database_categories            = kiriwrite_utf8convert($database_categories);
5978                 my $database_name_check_blank           = kiriwrite_variablecheck($database_name, "blank", 0, 1);
5979                 my $database_name_check_length          = kiriwrite_variablecheck($database_name, "maxlength", 256, 1);
5980                 my $database_description_check_length   = kiriwrite_variablecheck($database_description, "maxlength", 512, 1);
5981                 my $database_filename_check_length      = kiriwrite_variablecheck($database_filename, "maxlength", 32, 1);
5982                 my $database_categories_check_length    = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
5984                 # Check if values returned contains any values that would
5985                 # result in a specific error message being returned.
5987                 if ($database_name_check_length eq 1){
5989                         # The length of the database name is too long, so return an error.
5990                         kiriwrite_error("databasenametoolong");
5992                 }
5994                 if ($database_description_check_length eq 1){
5996                         # The database description length is too long, so return an error.
5997                         kiriwrite_error("databasedescriptiontoolong");
5999                 }
6001                 if ($database_name_check_blank eq 1){
6003                         # The database name is blank, so return an error.
6004                         kiriwrite_error("databasenameblank");
6006                 }
6008                 if ($database_filename_check_length eq 1){
6010                         # The database filename is to long, so return an error.
6011                         kiriwrite_error("databasefilenametoolong");
6013                 }
6015                 if ($database_categories_check_length eq 1){
6017                         # The database categories is too long, so return an error.
6018                         kiriwrite_error("databasecategoriestoolong");
6020                 }
6022                 # Check if the database filename is blank and if it is then
6023                 # generate a filename.
6025                 if ($database_filename eq ""){
6027                         # Filename is blank so generate a file name from
6028                         # the database name.
6030                         $database_filename = kiriwrite_processfilename($database_name);
6032                 } else {
6034                         # Filename is not blank so don't generate a filename.
6036                 }
6038                 kiriwrite_variablecheck($database_filename, "filename", "", 0);
6039                 kiriwrite_variablecheck($database_filename, "maxlength", 32, 0);
6041                 # Connect to the database server.
6043                 $kiriwrite_dbmodule->connect();
6045                 # Check if any errors occured while connecting to the database server.
6047                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6049                         # A database connection error has occured so return
6050                         # an error.
6052                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6054                 }
6056                 my $database_name_final = $database_name;
6058                 # Create the database.
6060                 $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"} });
6062                 # Check if any errors have occured.
6064                 if ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
6066                         # A database with the filename given already exists, so
6067                         # return an error.
6069                         kiriwrite_error("fileexists");
6071                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6073                         # A database error has occured so return an error with
6074                         # the extended error information.
6076                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6078                 }
6080                 # Disconnect from the database server.
6082                 $kiriwrite_dbmodule->disconnect();
6084                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
6085                 $kiriwrite_presmodule->addlinebreak();
6086                 $kiriwrite_presmodule->addlinebreak();
6087                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseadded} , $database_name_final));
6088                 $kiriwrite_presmodule->addlinebreak();
6089                 $kiriwrite_presmodule->addlinebreak();
6090                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6092                 return $kiriwrite_presmodule->grab();
6094         }
6096         # There is confirm value is not 1, so write a form for creating a database to
6097         # store pages in.
6099         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
6100         $kiriwrite_presmodule->addlinebreak();
6101         $kiriwrite_presmodule->addlinebreak();
6102         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6103         $kiriwrite_presmodule->startbox();      
6104         $kiriwrite_presmodule->addhiddendata("mode", "db");
6105         $kiriwrite_presmodule->addhiddendata("action", "new");
6106         $kiriwrite_presmodule->addhiddendata("confirm", "1");
6107         $kiriwrite_presmodule->endbox();
6108         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
6110         $kiriwrite_presmodule->startheader();
6111         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader"});
6112         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader"});
6113         $kiriwrite_presmodule->endheader();
6115         $kiriwrite_presmodule->startrow();
6116         $kiriwrite_presmodule->addcell("tablecell1");
6117         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
6118         $kiriwrite_presmodule->endcell();
6119         $kiriwrite_presmodule->addcell("tablecell2");
6120         $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256 });
6121         $kiriwrite_presmodule->endcell();
6122         $kiriwrite_presmodule->endrow();
6124         $kiriwrite_presmodule->startrow();
6125         $kiriwrite_presmodule->addcell("tablecell1");
6126         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
6127         $kiriwrite_presmodule->endcell();
6128         $kiriwrite_presmodule->addcell("tablecell2");
6129         $kiriwrite_presmodule->addinputbox("databasedescription", { 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}->{databasecategories});
6136         $kiriwrite_presmodule->endcell();
6137         $kiriwrite_presmodule->addcell("tablecell2");
6138         $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512 });
6139         $kiriwrite_presmodule->endcell();
6140         $kiriwrite_presmodule->endrow();
6142         $kiriwrite_presmodule->startrow();
6143         $kiriwrite_presmodule->addcell("tablecell1");
6144         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
6145         $kiriwrite_presmodule->endcell();
6146         $kiriwrite_presmodule->addcell("tablecell2");
6147         $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => 50, Rows => 10, WordWrap => 0 });
6148         $kiriwrite_presmodule->endcell();
6149         $kiriwrite_presmodule->endrow();
6151         $kiriwrite_presmodule->startrow();
6152         $kiriwrite_presmodule->addcell("tablecell1");
6153         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
6154         $kiriwrite_presmodule->endcell();
6155         $kiriwrite_presmodule->addcell("tablecell2");
6156         $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32 });
6157         $kiriwrite_presmodule->startlist();
6158         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabaseautogenerate});
6159         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasenoextensions});
6160         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacterlength});
6161         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacters});
6162         $kiriwrite_presmodule->endlist();
6163         $kiriwrite_presmodule->endcell();
6164         $kiriwrite_presmodule->endrow();
6166         $kiriwrite_presmodule->endtable();
6167         $kiriwrite_presmodule->startbox();
6168         $kiriwrite_presmodule->addlinebreak();
6169         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{adddatabasebutton});
6170         $kiriwrite_presmodule->addtext("|");
6171         $kiriwrite_presmodule->addreset($kiriwrite_lang->{database}->{clearvaluesbutton});
6172         $kiriwrite_presmodule->addtext("| ");
6173         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6174         $kiriwrite_presmodule->endbox();
6175         $kiriwrite_presmodule->endform();
6177         # Exit the subroutine taking the data in the pagadata variable with it.
6179         return $kiriwrite_presmodule->grab();
6183 sub kiriwrite_database_edit{
6184 #################################################################################
6185 # kiriwrite_database_edit: Edits an database.                                   #
6186 #                                                                               #
6187 # Usage:                                                                        #
6188 #                                                                               #
6189 # kiriwrite_database_edit(filename, newfilename, newname, newdescription,       #
6190 #                               notes, categories, [confirm]);                  #
6191 #                                                                               #
6192 # filename              Specifies the filename of the database.                 #
6193 # newfilename           Specifies the new filename of the database.             #
6194 # newname               Specifies the new name of the database.                 #
6195 # newdescription        Specifies the new description of the database.          #
6196 # notes                 Specifies the new notes of the database.                #
6197 # categories            Specifies the new categories of the database.           #
6198 # confirm               Confirms the action to edit a database.                 #
6199 #################################################################################
6201         # First, get all the variables passed to the subroutine.
6203         my ($database_shortname, $database_newfilename, $database_newname, $database_newdescription, $database_notes, $database_categories, $database_confirm) = @_;
6205         # Check if the database confirm value is blank and if it is
6206         # set the confirm value to 0.
6208         if (!$database_confirm){
6210                 $database_confirm = 0;
6212         }
6214         # Check if the database filename given is valid and return an error
6215         # if it isn't.
6217         kiriwrite_variablecheck($database_shortname, "filename", "", 0);
6219         # 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
6220         # if $database_confirm was used directly).
6222         if ($database_confirm eq 1){
6224                 # Check if the new data passes the validation tests below. First, check the length of the variables.
6226                 my $database_name_check_utf8            = kiriwrite_variablecheck($database_newname, "utf8", 0, 0);
6227                 my $database_description_check_utf8     = kiriwrite_variablecheck($database_newdescription, "utf8", 0, 0);
6228                 my $database_notes_check_utf8           = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
6229                 my $database_categories_check_utf8      = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
6231                 # Convert the UTF8 strings to make sure their length is accurate.
6233                 $database_newname               = kiriwrite_utf8convert($database_newname);
6234                 $database_newdescription        = kiriwrite_utf8convert($database_newdescription);
6235                 $database_notes                 = kiriwrite_utf8convert($database_notes);
6236                 $database_categories            = kiriwrite_utf8convert($database_categories);
6238                 # Preform the following tests.
6240                 my $database_filename_check_length      = kiriwrite_variablecheck($database_newfilename, "maxlength", 32, 1);
6241                 my $database_filename_letnum            = kiriwrite_variablecheck($database_newfilename, "filename", 0, 0);
6242                 my $database_name_check_length          = kiriwrite_variablecheck($database_newname, "maxlength", 256, 1);
6243                 my $database_description_check_length   = kiriwrite_variablecheck($database_newdescription, "maxlength", 512, 1);
6244                 my $database_categories_check_length    = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
6245                 my $database_name_check_blank           = kiriwrite_variablecheck($database_newname, "blank", 0, 1);
6247                 # Check if the data is valid and return a specific error if it doesn't.
6249                 if ($database_name_check_length eq 1){
6251                         # The length of the database name is too long, so return an error.
6252                         kiriwrite_error("databasenametoolong");
6254                 }
6256                 if ($database_description_check_length eq 1){
6258                         # The database description length is too long, so return an error.
6259                         kiriwrite_error("databasedescriptiontoolong");
6261                 }
6263                 if ($database_name_check_blank eq 1){
6265                         # The database name is blank, so return an error.
6266                         kiriwrite_error("databasenameblank");
6268                 }
6270                 if ($database_filename_check_length eq 1){
6272                         # The database filename is too long, so return an error.
6273                         kiriwrite_error("databasefilenametoolong");
6275                 }
6277                 if ($database_categories_check_length eq 1){
6279                         # The database categories is too long, so return an error.
6280                         kiriwrite_error("databasecategoriestoolong");
6282                 }
6284                 # Connect to the database server.
6286                 $kiriwrite_dbmodule->connect();
6288                 # Check if any errors occured while connecting to the database server.
6290                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6292                         # A database connection error has occured so return
6293                         # an error.
6295                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6297                 }
6299                 # Get the database.
6301                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
6303                 # Check if any errors had occured while selecting the database.
6305                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6307                         # The database does not exist, so return an error.
6309                         kiriwrite_error("databasemissingfile");
6311                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6313                         # The database has invalid permissions set, so return
6314                         # an error.
6316                         kiriwrite_error("databaseinvalidpermissions");
6318                 }
6320                 # FIX THIS!! >O
6322                 $kiriwrite_dbmodule->editdatabase({ DatabaseNewFilename => $database_newfilename, DatabaseName => $database_newname , DatabaseDescription => $database_newdescription , DatabaseNotes => $database_notes, DatabaseCategories => $database_categories });
6324                 # Check if any errors had occured while using the database.
6326                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6328                         # The database does not exist, so return an error.
6330                         kiriwrite_error("databasemissingfile");
6332                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6334                         # The database has invalid permissions set, so return
6335                         # an error.
6337                         kiriwrite_error("databaseinvalidpermissions");
6339                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
6341                         # The database directory has invalid permissions set, so
6342                         # return an error.
6344                         kiriwrite_error("datadirectoryinvalidpermissions");
6346                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
6348                         # A database already exists with the new filename, so
6349                         # return an error.
6351                         kiriwrite_error("databasealreadyexists");
6353                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6355                         # A database error has occured so return an error with
6356                         # the extended error information.
6358                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6360                 }
6362                 # Disconnect from the server.
6364                 $kiriwrite_dbmodule->disconnect();
6366                 # Write out a message saying that the database has been updated.
6368                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{editeddatabase}, { Style => "pageheader" } );
6369                 $kiriwrite_presmodule->addlinebreak();
6370                 $kiriwrite_presmodule->addlinebreak();
6371                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseupdated}, $database_newname));
6372                 $kiriwrite_presmodule->addlinebreak();
6373                 $kiriwrite_presmodule->addlinebreak();
6374                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6376                 return $kiriwrite_presmodule->grab();
6378         } else {
6380                 my (%database_info);
6382                 # Check if the database filename given is valid and return an error
6383                 # if it isn't.
6385                 # Connect to the database server.
6387                 $kiriwrite_dbmodule->connect();
6389                 # Check if any errors occured while connecting to the database server.
6391                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6393                         # A database connection error has occured so return
6394                         # an error.
6396                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6398                 }
6400                 # Select the database.
6402                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
6404                 # Check if any errors had occured while setting the database.
6406                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6408                         # The database does not exist, so return an error.
6410                         kiriwrite_error("databasemissingfile");
6412                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6414                         # The database has invalid permissions set, so return
6415                         # an error.
6417                         kiriwrite_error("databaseinvalidpermissions");
6419                 }
6421                 # Get the database information.
6423                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6425                 # Check if any errors had occured while getting the database
6426                 # information.
6428                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6430                         # A database error has occured so return an error and
6431                         # also the extended error information.
6433                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6435                 }
6437                 # Get the values needed from the kiriwrite_database_info table.
6439                 my $database_oldname            = $database_info{"DatabaseName"};
6440                 my $database_olddescription     = $database_info{"Description"};
6441                 my $database_notes              = $database_info{"Notes"};
6442                 my $database_categories         = $database_info{"Categories"};
6444                 # Disconnect from the database server.
6446                 $kiriwrite_dbmodule->disconnect();
6448                 # Print out the form for editing a database's settings.
6450                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{editdatabase}, $database_oldname), { Style => "pageheader" });
6451                 $kiriwrite_presmodule->addlinebreak();
6452                 $kiriwrite_presmodule->addlinebreak();
6453                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6454                 $kiriwrite_presmodule->startbox();
6455                 $kiriwrite_presmodule->addhiddendata("mode", "db");
6456                 $kiriwrite_presmodule->addhiddendata("action", "edit");
6457                 $kiriwrite_presmodule->addhiddendata("database", $database_shortname);
6458                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
6459                 $kiriwrite_presmodule->endbox();
6461                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
6462                 $kiriwrite_presmodule->startheader();
6463                 $kiriwrite_presmodule->addheader("Setting", { Style => "tablecellheader" });
6464                 $kiriwrite_presmodule->addheader("Value", { Style => "tablecellheader" });
6465                 $kiriwrite_presmodule->endheader();
6467                 $kiriwrite_presmodule->startrow();
6468                 $kiriwrite_presmodule->addcell("tablecell1");
6469                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
6470                 $kiriwrite_presmodule->endcell();
6471                 $kiriwrite_presmodule->addcell("tablecell2");
6472                 $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256, Value => $database_oldname } );
6473                 $kiriwrite_presmodule->endcell();
6474                 $kiriwrite_presmodule->endrow();
6476                 $kiriwrite_presmodule->startrow();
6477                 $kiriwrite_presmodule->addcell("tablecell1");
6478                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
6479                 $kiriwrite_presmodule->endcell();
6480                 $kiriwrite_presmodule->addcell("tablecell2");
6481                 $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512, Value => $database_olddescription } );
6482                 $kiriwrite_presmodule->endcell();
6483                 $kiriwrite_presmodule->endrow();
6485                 $kiriwrite_presmodule->startrow();
6486                 $kiriwrite_presmodule->addcell("tablecell1");
6487                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
6488                 $kiriwrite_presmodule->endcell();
6489                 $kiriwrite_presmodule->addcell("tablecell2");
6490                 $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512, Value => $database_categories } );
6491                 $kiriwrite_presmodule->endcell();
6492                 $kiriwrite_presmodule->endrow();
6494                 $kiriwrite_presmodule->startrow();
6495                 $kiriwrite_presmodule->addcell("tablecell1");
6496                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
6497                 $kiriwrite_presmodule->endcell();
6498                 $kiriwrite_presmodule->addcell("tablecell2");
6499                 $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => 50, Rows => 10, Value => $database_notes } );
6500                 $kiriwrite_presmodule->endcell();
6501                 $kiriwrite_presmodule->endrow();
6503                 $kiriwrite_presmodule->startrow();
6504                 $kiriwrite_presmodule->addcell("tablecell1");
6505                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
6506                 $kiriwrite_presmodule->endcell();
6507                 $kiriwrite_presmodule->addcell("tablecell2");
6508                 $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32, Value => $database_shortname } );
6509                 $kiriwrite_presmodule->endcell();
6510                 $kiriwrite_presmodule->endrow();
6512                 $kiriwrite_presmodule->endtable();
6514                 $kiriwrite_presmodule->startbox();
6515                 $kiriwrite_presmodule->addlinebreak();
6516                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{editdatabasebutton});
6517                 $kiriwrite_presmodule->addtext(" | ");
6518                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
6519                 $kiriwrite_presmodule->addtext(" | ");
6520                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6521                 $kiriwrite_presmodule->endbox();
6522                 $kiriwrite_presmodule->endform();
6524                 return $kiriwrite_presmodule->grab();
6526         }
6528         # The interpreter should not be here. So return an error saying invalid variable.
6530         kiriwrite_error("invalidvariable");
6534 sub kiriwrite_database_delete{
6535 #################################################################################
6536 # kiriwrite_database_delete: Deletes an database.                               #
6537 #                                                                               #
6538 # Usage:                                                                        #
6539 #                                                                               #
6540 # kiriwrite_database_delete(filename, [confirm]);                               #
6541 #                                                                               #
6542 # filename      Specifies the filename for the database to be deleted.          #
6543 # confirm       Confirms the action to delete a database.                       #
6544 #################################################################################
6546         my ($database_filename, $database_confirm) = @_;
6548         # Check if the confirm value is blank and if it is then set the
6549         # confirm value to 0.
6551         if (!$database_confirm){
6553                 $database_confirm = 0;
6555         }
6557         # Connect to the database server.
6559         $kiriwrite_dbmodule->connect();
6561         # Check if any errors occured while connecting to the database server.
6563         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6565                 # A database connection error has occured so return
6566                 # an error.
6568                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6570         }
6572         # Check if the database filename given is valid and return an error
6573         # if it isn't.
6575         kiriwrite_variablecheck($database_filename, "filename", "", 0);
6577         # Check if the request to delete a database has been confirmed. If it has, 
6578         # then delete the database itself.
6580         if ($database_confirm eq 1){
6581                 # There is a value in the confirm variable of the HTTP query.
6583                 # Select the database to delete and get the database name.
6585                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
6587                 # Check if any error occured while selecting the database.
6589                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6591                         # The database does not exist so return an error.
6593                         kiriwrite_error("databasemissingfile");
6595                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6597                         # The database has invalid permissions set so return
6598                         # an error.
6600                         kiriwrite_error("databaseinvalidpermissions");
6602                 }
6604                 my %database_info       = $kiriwrite_dbmodule->getdatabaseinfo();
6606                 # Check if any errors have occured while getting the database
6607                 # name.
6609                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6611                         # A database error has occured so return an error with
6612                         # the extended error information.
6614                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6616                 }
6618                 my $database_name = $database_info{"DatabaseName"};
6620                 # Delete the selected database.
6622                 $kiriwrite_dbmodule->deletedatabase({ DatabaseName => $database_filename });
6624                 # Check if any error occured while deleting the database.
6626                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6628                         # The database does not exist so return an error.
6630                         kiriwrite_error("databasemissingfile");
6632                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6634                         # The database has invalid permissions set so return
6635                         # an error.
6637                         kiriwrite_error("databaseinvalidpermissions");
6639                 }
6641                 # Disconnect from the database server.
6643                 $kiriwrite_dbmodule->disconnect();
6645                 # Write a message saying that the database has been deleted.
6647                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deleteddatabase}, { Style => "pageheader" });
6648                 $kiriwrite_presmodule->addlinebreak();
6649                 $kiriwrite_presmodule->addlinebreak();
6650                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deleteddatabasemessage}, $database_name));
6651                 $kiriwrite_presmodule->addlinebreak();
6652                 $kiriwrite_presmodule->addlinebreak();
6653                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} }); 
6655                 return $kiriwrite_presmodule->grab();
6657         }
6659         # The action has not been confirmed, so write out a form asking the 
6660         # user to confirm.
6662         # Get the database name.
6664         $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
6666         # Check if any error occured while selecting the database.
6668         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6670                 # The database does not exist so return an error.
6672                 kiriwrite_error("databasemissingfile");
6674         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6676                 # The database has invalid permissions set so return
6677                 # an error.
6679                 kiriwrite_error("databaseinvalidpermissions");
6682         }
6684         # Check if any errors have occured.
6686         my %database_info       = $kiriwrite_dbmodule->getdatabaseinfo();
6688         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6690                 # A database error has occured so return an error with
6691                 # the extended error information.
6693                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6695         }
6697         my $database_name = $database_info{"DatabaseName"};
6699         # Disconnect from the database server.
6701         $kiriwrite_dbmodule->disconnect();
6703         # Write out the form to ask the user to confirm the deletion of the 
6704         # selected database.
6706         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deletedatabase}, { Style => "pageheader" });
6707         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6708         $kiriwrite_presmodule->startbox();
6709         $kiriwrite_presmodule->addhiddendata("mode", "db");
6710         $kiriwrite_presmodule->addhiddendata("action", "delete");
6711         $kiriwrite_presmodule->addhiddendata("database", $database_filename);
6712         $kiriwrite_presmodule->addhiddendata("confirm", "1");
6713         $kiriwrite_presmodule->addlinebreak();
6714         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deletedatabasemessage}, $database_name));
6715         $kiriwrite_presmodule->addlinebreak();
6716         $kiriwrite_presmodule->addlinebreak();
6717         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{deletedatabasebutton});
6718         $kiriwrite_presmodule->addtext(" | ");
6719         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{deletedatabasereturn} });
6720         $kiriwrite_presmodule->endbox();
6721         $kiriwrite_presmodule->endform();
6723         return $kiriwrite_presmodule->grab();
6727 sub kiriwrite_database_list{
6728 #################################################################################
6729 # kiriwrite_database_list: Lists the databases available.                       #
6730 #                                                                               #
6731 # Usage:                                                                        #
6732 #                                                                               #
6733 # kiriwrite_database_list();                                                    #
6734 #################################################################################
6736         # Connect to the database server.
6738         $kiriwrite_dbmodule->connect();
6740         # Check if any errors occured while connecting to the database server.
6742         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6744                 # A database connection error has occured so return
6745                 # an error.
6747                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6749         }
6751         # Get the list of available databases and process any errors that
6752         # might have occured.
6754         my @database_list = $kiriwrite_dbmodule->getdblist();
6756         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
6758                 # The database directory is missing so return an error.
6760                 kiriwrite_error("datadirectorymissing");
6762         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
6764                 # The database directory has invalid permissions set so return
6765                 # an error.
6767                 kiriwrite_error("datadirectoryinvalidpermissions");
6769         }
6771         # Declare the following variables that are going to be used before using 
6772         # the foreach function.
6774         my ($database_info, %database_info);
6775         my @error_list;
6776         my @permissions_list;
6777         my $database_count = 0;
6778         my $database_filename = "";
6779         my $database_filename_friendly = "";
6780         my $database_filename_length = 0;
6781         my $database_name = "";
6782         my $database_description = "";
6783         my $database_permissions = "";
6784         my $nodescription = 0;
6785         my $noname = 0;
6786         my $data_file = "";
6787         my $table_style = 0;
6788         my $table_style_name = "";
6790         # Begin creating the table for the list of databases.
6792         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
6793         $kiriwrite_presmodule->addlinebreak();
6794         $kiriwrite_presmodule->addlinebreak();
6795         $kiriwrite_presmodule->starttable("", { CellPadding => "5", CellSpacing => "0" });
6796         $kiriwrite_presmodule->startheader();
6797         $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
6798         $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
6799         $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databaseoptions}, { Style => "tablecellheader" });
6800         $kiriwrite_presmodule->endheader();
6802         foreach $data_file (@database_list){
6804                 # Select the database.
6806                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
6808                 # Check if any error occured while selecting the database.
6810                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6812                         # The database does not exist, so process the next
6813                         # database.
6815                         next;
6817                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6819                         # The database has invalid permissions settings, so
6820                         # add the database to the list of databases with
6821                         # invalid permissions set and process the next
6822                         # database.
6824                         push(@permissions_list, $data_file);
6825                         next;
6827                 }
6829                 # Get information about the database.
6831                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6833                 # Check if any error occured while getting information from the
6834                 # database.
6836                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6838                         # A database error has occured, add the database and specific
6839                         # error message to the list of databases with errors and
6840                         # process the next database.
6842                         push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
6843                         next;
6845                 }
6847                 $database_name          = $database_info{"DatabaseName"};
6848                 $database_description   = $database_info{"Description"};
6850                 # Check the style to be used with.
6852                 if ($table_style eq 0){
6854                         # Use the first style and set the style value
6855                         # to use the next style, the next time the
6856                         # if statement is checked.
6858                         $table_style_name = "tablecell1";
6859                         $table_style = 1;
6860                 } else {
6862                         # Use the second style and set the style
6863                         # value to use the first style, the next
6864                         # time if statement is checked.
6866                         $table_style_name = "tablecell2";
6867                         $table_style = 0;
6868                 }
6870                 # Create a friendly name for the database.
6872                 $database_filename_friendly = $data_file;
6874                 # Append the database information to the table.
6876                 $kiriwrite_presmodule->startrow();
6877                 $kiriwrite_presmodule->addcell($table_style_name);
6879                 if (!$database_name){
6880                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
6881                 } else {
6882                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_filename_friendly, { Text => $database_name });
6883                 }
6885                 $kiriwrite_presmodule->endcell();
6886                 $kiriwrite_presmodule->addcell($table_style_name);
6888                 if (!$database_description){
6889                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
6890                 } else {
6891                         $kiriwrite_presmodule->addtext($database_description);
6892                 }
6894                 $kiriwrite_presmodule->endcell();
6895                 $kiriwrite_presmodule->addcell($table_style_name);
6896                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=edit&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{edit} });
6897                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=compile&type=single&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{compile} });
6898                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=delete&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{delete} });
6899                 $kiriwrite_presmodule->endrow();
6901                 $database_count++;
6902                 $nodescription = 0;
6903                 $noname = 0;
6905         }
6907         $kiriwrite_presmodule->endtable();
6909         # Disconnect from the database server.
6911         $kiriwrite_dbmodule->disconnect();
6913         # Check if there are no valid databases are if there is no
6914         # valid databases then write a message saying that no
6915         # valid databases are available.
6917         if ($database_count eq 0){
6919                 $kiriwrite_presmodule->clear();
6920                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
6921                 $kiriwrite_presmodule->addlinebreak();
6922                 $kiriwrite_presmodule->addlinebreak();
6923                 $kiriwrite_presmodule->startbox("errorbox");
6924                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{nodatabasesavailable});
6925                 $kiriwrite_presmodule->endbox();
6927         }
6929         # Check if any databases with problems have appeared and if they
6930         # have, print out a message saying which databases have problems.
6932         if (@permissions_list){
6934                 $kiriwrite_presmodule->addlinebreak();
6935                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
6936                 $kiriwrite_presmodule->addlinebreak();
6937                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
6938                 $kiriwrite_presmodule->addlinebreak();
6940                 foreach $data_file (@permissions_list){
6941                         $kiriwrite_presmodule->addlinebreak();
6942                         $kiriwrite_presmodule->addtext($data_file);
6943                 }
6945                 $kiriwrite_presmodule->addlinebreak();
6947         }
6949         if (@error_list){
6951                 $kiriwrite_presmodule->addlinebreak();
6952                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
6953                 $kiriwrite_presmodule->addlinebreak();
6954                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
6955                 $kiriwrite_presmodule->addlinebreak();
6957                 foreach $data_file (@error_list){
6958                         $kiriwrite_presmodule->addlinebreak();
6959                         $kiriwrite_presmodule->addtext($data_file);
6960                 }
6962                 $kiriwrite_presmodule->addlinebreak();
6964         }
6966         return $kiriwrite_presmodule->grab();   # Return to the main part of the script with the processed information.
6971 sub kiriwrite_filter_list{
6972 #################################################################################
6973 # kiriwrite_filter_list: Lists the filters that will be used when compiling a   #
6974 # webpage.                                                                      #
6975 #                                                                               #
6976 # Usage:                                                                        #
6977 #                                                                               #
6978 # kiriwrite_filter_list();                                                      #
6979 #################################################################################
6981         my $filtersdb_notexist = 0;
6983         # Connect to the database server.
6985         $kiriwrite_dbmodule->connect();
6987         # Check if any errors occured while connecting to the database server.
6989         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6991                 # A database connection error has occured so return
6992                 # an error.
6994                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6996         }
6998         # Connect to the filter database.
7000         $kiriwrite_dbmodule->connectfilter();
7002         # Check if any error has occured while connecting to the filter
7003         # database.
7005         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7007                 # The filter database does not exist.
7009                 $filtersdb_notexist = 1;
7011         } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7013                 # The filter database has invalid permissions set so return
7014                 # an error.
7016                 kiriwrite_error("filtersdbpermissions");
7018         } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7020                 # A database error has occured with the filter database.
7022                 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7024         }
7026         # Define some variables required for processing the filters list.
7028         my %filter_list;
7029         my %filter_info;
7030         my @database_filters;
7031         my $blankfindfilter = 0;
7032         my $filterswarning = "";
7033         my $filter;
7034         my $filter_count = 0;
7035         my $filter_style = 0;
7036         my $filter_style_name = "";
7038         tie(%filter_list, 'Tie::IxHash');
7040         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{viewfilters}, { Style => "pageheader" });
7041         $kiriwrite_presmodule->addlinebreak();
7042         $kiriwrite_presmodule->addlinebreak();
7044         # If the filter database exists then get the list of filters,
7045         # otherwise write a message saying that the filter database
7046         # does not exist and will be created when a filter is added.
7048         if ($filtersdb_notexist eq 0){
7050                 # Get the list of available filters.
7052                 @database_filters       = $kiriwrite_dbmodule->getfilterlist();
7054                 # Check if any errors occured while getting the list of filters.
7056                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7058                         # A database error has occured with the filter database.
7060                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7062                 }
7064                 # Process each filter getting the priority, find setting and
7065                 # replace setting.
7067                 foreach $filter (@database_filters){
7069                         # Get the information about the filter.
7071                         %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
7073                         # Check if any errors occured while getting the filter information.
7075                         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7077                                 # A database error occured while using the filter database.
7079                                 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7081                         } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7083                                 # The filter does not exist so process the next filter.
7085                                 next;
7087                         }
7089                         # Check if the find filter is blank.
7091                         if (!$filter_info{"FilterFind"}){
7093                                 # The find filter is blank, so set the value to write a warning
7094                                 # message saying that a find filter given is blank.
7096                                 $blankfindfilter = 1;
7098                         }
7100                         $filter_list{$filter_count}{ID}         = $filter_info{"FilterID"};
7101                         $filter_list{$filter_count}{Priority}   = $filter_info{"FilterPriority"};
7102                         $filter_list{$filter_count}{Find}       = $filter_info{"FilterFind"};
7103                         $filter_list{$filter_count}{Replace}    = $filter_info{"FilterReplace"};
7104                         $filter_list{$filter_count}{Notes}      = $filter_info{"FilterNotes"};
7106                         $filter_count++;
7108                 }
7110                 # Check if there are filters in the filter database and
7111                 # write a message if there isn't.
7113                 if ($filter_count eq 0){
7115                         # There are no filters in the filter database.
7117                         $filterswarning = $kiriwrite_lang->{filter}->{nofiltersavailable};
7119                 }
7121         }
7123         # Check if the database wasn't found and if it
7124         # wasn't then write a message saying that the
7125         # database will be created when a filter is
7126         # added.
7128         if ($filtersdb_notexist eq 1){
7130                 # The filter database doesn't exist so write
7131                 # a message.
7133                 $filterswarning = $kiriwrite_lang->{filter}->{filterdatabasedoesnotexist};
7136         }
7138         # Check if there is a warning message and if
7139         # there is then write that warning message
7140         # else write the list of filters.
7142         if ($filterswarning){
7144                 $kiriwrite_presmodule->startbox("errorbox");
7145                 $kiriwrite_presmodule->addtext($filterswarning);
7146                 $kiriwrite_presmodule->endbox();
7148         } else {
7150                 # The filter database exists so write out the
7151                 # list of filters.
7153                 if ($blankfindfilter eq 1){
7155                         $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{filter}->{warningtitle});
7156                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{blankfindfilters});
7157                         $kiriwrite_presmodule->addtext();
7158                         $kiriwrite_presmodule->addlinebreak();
7159                         $kiriwrite_presmodule->addlinebreak();
7161                 }
7163                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7165                 $kiriwrite_presmodule->startheader();
7166                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{priority}, { Style => "tablecellheader" });
7167                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{findsetting}, { Style => "tablecellheader" });
7168                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{replacesetting}, { Style => "tablecellheader" });
7169                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
7170                 $kiriwrite_presmodule->endheader();
7172                 foreach $filter (keys %filter_list){
7174                         # Check which style should be used.
7176                         if ($filter_style eq 0){
7178                                 $filter_style_name = "tablecell1";
7179                                 $filter_style = 1;
7181                         } else {
7183                                 $filter_style_name = "tablecell2";
7184                                 $filter_style = 0;
7186                         }
7188                         $kiriwrite_presmodule->startrow();
7189                         $kiriwrite_presmodule->addcell($filter_style_name);
7190                         $kiriwrite_presmodule->addtext($filter_list{$filter}{Priority});
7191                         $kiriwrite_presmodule->endcell();
7192                         $kiriwrite_presmodule->addcell($filter_style_name);
7194                         # Check if the find filter is blank.
7196                         if (!$filter_list{$filter}{Find}){
7198                                 # The find filter is blank.
7200                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{filter}->{blankfindsetting});
7202                         } else {
7204                                 # The find filter is not blank.
7206                                 $kiriwrite_presmodule->addtext($filter_list{$filter}{Find});
7208                         }
7210                         $kiriwrite_presmodule->endcell();
7211                         $kiriwrite_presmodule->addcell($filter_style_name);
7213                         # Check if the replace filter is blank.
7215                         if (!$filter_list{$filter}{Replace}){
7217                                 # The replace filter is blank.
7219                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{filter}->{blankreplacesetting});
7221                         } else {
7223                                 # The replace filter is not blank.
7225                                 $kiriwrite_presmodule->addtext($filter_list{$filter}{Replace});
7227                         }
7229                         $kiriwrite_presmodule->endcell();
7230                         $kiriwrite_presmodule->addcell($filter_style_name);
7231                         $kiriwrite_presmodule->addlink("?mode=filter&action=edit&filter=" . $filter_list{$filter}{ID}, { Text => $kiriwrite_lang->{options}->{edit} });
7232                         $kiriwrite_presmodule->addlink("?mode=filter&action=delete&filter=" . $filter_list{$filter}{ID}, { Text => $kiriwrite_lang->{options}->{delete} });
7233                         $kiriwrite_presmodule->endcell();
7234                         $kiriwrite_presmodule->endrow();
7236                 }
7238                 $kiriwrite_presmodule->endtable();
7240         }
7242         # Disconnect from the filter database.
7244         $kiriwrite_dbmodule->disconnectfilter();
7246         # Disconnect from the database server.
7248         $kiriwrite_dbmodule->disconnect();
7250         return $kiriwrite_presmodule->grab();
7254 sub kiriwrite_filter_add{
7255 #################################################################################
7256 # kiriwrite_filter_add: Adds a filter to the filter list.                       #
7257 #                                                                               #
7258 # Usage:                                                                        #
7259 #                                                                               #
7260 # kiriwrite_filter_add(filterfind, filterreplace, filterpriority,               #
7261 #                       filternotes, [confirm]);                                #
7262 #                                                                               #
7263 # filterfind            Specifies the new word(s) to find.                      #
7264 # filterreplace         Specifies the new word(s) to replace.                   #
7265 # filterpriority        Specifies the new priority to use.                      #
7266 # filternotes           Specifies the new notes to use.                         #
7267 # confirm               Confirms the action to add a filter.                    #
7268 #################################################################################
7270         # Get the values that have been passed to the subroutine.
7272         my ($filter_new_find, $filter_new_replace, $filter_new_priority, $filter_new_notes, $confirm) = @_;
7274         # Check the confirm value to make sure it is no more than
7275         # one character long.
7277         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
7279         if (!$confirm){
7281                 # The confirm value is undefined, so set the
7282                 # value of the confirm integer to '0'.
7284                 $confirm = 0;
7286         }
7288         if ($confirm eq 1){
7290                 # The confirm integer is '1', so add the word
7291                 # to the filter list.
7293                 # First, check the variables recieved are UTF8
7294                 # copliant.
7296                 kiriwrite_variablecheck($filter_new_find, "utf8", 0, 0);
7297                 kiriwrite_variablecheck($filter_new_replace, "utf8", 0, 0);
7298                 kiriwrite_variablecheck($filter_new_priority, "utf8", 0, 0);
7299                 kiriwrite_variablecheck($filter_new_notes, "utf8", 0, 0);
7301                 # Convert the UTF8 values so that the length can
7302                 # checked properly.
7304                 $filter_new_find        = kiriwrite_utf8convert($filter_new_find);
7305                 $filter_new_replace     = kiriwrite_utf8convert($filter_new_replace);
7306                 $filter_new_priority    = kiriwrite_utf8convert($filter_new_priority);
7307                 $filter_new_notes       = kiriwrite_utf8convert($filter_new_notes);
7309                 # Check if the find filter is blank and return an error
7310                 # if it is.
7312                 if (!$filter_new_find){
7314                         # The find filter given is blank so return an
7315                         # error.
7317                         kiriwrite_error("blankfindfilter");
7319                 }
7321                 if (!$filter_new_priority){
7323                         # The filter priority is blank so set it
7324                         # to 1.
7326                         $filter_new_priority = 1;
7328                 }
7330                 # Check the length and contents of the values given
7331                 # to make sure they are valid.
7333                 my $filterfind_maxlength_check          = kiriwrite_variablecheck($filter_new_find, "maxlength", 1024, 1);
7334                 my $filterreplace_maxlength_check       = kiriwrite_variablecheck($filter_new_replace, "maxlength", 1024, 1);
7335                 my $filterpriority_maxlength_check      = kiriwrite_variablecheck($filter_new_priority, "maxlength", 5, 1);
7336                 my $filterpriority_numbers_check        = kiriwrite_variablecheck($filter_new_priority, "numbers", 0, 1);
7338                 # Check if the result of the tests to see if they
7339                 # are valid.
7341                 if ($filterfind_maxlength_check eq 1){
7343                         # The find filter is too long, so return
7344                         # an error.
7346                         kiriwrite_error("findfiltertoolong");
7348                 }
7350                 if ($filterreplace_maxlength_check eq 1){
7352                         # The replace filter is too long, so
7353                         # return an error.
7355                         kiriwrite_error("replacefiltertoolong");
7357                 }
7359                 if ($filterpriority_maxlength_check eq 1){
7361                         # The length of the filter priority
7362                         # given is too long, so return an
7363                         # error.
7365                         kiriwrite_error("filterprioritytoolong");
7367                 }
7369                 if ($filterpriority_numbers_check eq 1){
7371                         # The priority of the filter given
7372                         # contains characters other than
7373                         # numbers.
7375                         kiriwrite_error("filterpriorityinvalidchars");
7377                 }
7379                 # Check if the filter priority is less than 1
7380                 # and more than 10000 and return an error
7381                 # if it is.
7383                 if ($filter_new_priority < 1 || $filter_new_priority > 50000){
7385                         # The filter priority is less than 1 and
7386                         # more than 10000, so return an error.
7388                         kiriwrite_error("filterpriorityinvalid");
7390                 }
7392                 # Connect to the database server.
7394                 $kiriwrite_dbmodule->connect();
7396                 # Check if any errors occured while connecting to the database server.
7398                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7400                         # A database connection error has occured so return
7401                         # an error.
7403                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7405                 }
7407                 # Connect to the filter database.
7409                 $kiriwrite_dbmodule->connectfilter(1);
7411                 # Check if any error has occured while connecting to the filter
7412                 # database.
7414                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7416                         # The filter database does not exist.
7418                         kiriwrite_error("filtersdbmissing");
7420                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7422                         # The filter database has invalid permissions set so return
7423                         # an error.
7425                         kiriwrite_error("filtersdbpermissions");
7427                 }
7429                 # Add the filter to the filter database.
7431                 $kiriwrite_dbmodule->addfilter({ FindFilter => $filter_new_find, ReplaceFilter => $filter_new_replace, Priority => $filter_new_priority, Notes => $filter_new_notes});
7433                 # Check if any errors have occured while adding the filter.
7435                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7437                         # The filter database has invalid permissions set so return
7438                         # an error.
7440                         kiriwrite_error("filtersdbpermissions");
7442                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseUncreatable"){
7444                         # The filter database is uncreatable so return an error.
7446                         kiriwrite_error("filterdatabase");
7448                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7450                         # A database error with the filter database has occured so return
7451                         # an error with the extended error information.
7453                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7455                 }
7457                 # Disconnect from the filter database.
7459                 $kiriwrite_dbmodule->disconnectfilter();
7461                 # Disconnect from the database server.
7463                 $kiriwrite_dbmodule->disconnect();
7465                 # Write out a message saying that the filter was added to the
7466                 # filter database.
7468                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{filteradded}, { Style => "pageheader" });
7469                 $kiriwrite_presmodule->addlinebreak();
7470                 $kiriwrite_presmodule->addlinebreak();
7471                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{filteraddedmessage});
7472                 $kiriwrite_presmodule->addlinebreak();
7473                 $kiriwrite_presmodule->addlinebreak();
7474                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7476                 return $kiriwrite_presmodule->grab();
7478         } elsif ($confirm ne 0) {
7480                 # The confirm integer is another value (which
7481                 # it shouldn't be) so return an error.
7483                 kiriwrite_error("invalidvalue");
7485         }
7487         # The confirm integer was blank so print out a form
7488         # for adding a new filter.
7490         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{addfilter}, { Style => "pageheader" });
7491         $kiriwrite_presmodule->addlinebreak();
7492         $kiriwrite_presmodule->addlinebreak();
7493         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
7494         $kiriwrite_presmodule->startbox();
7495         $kiriwrite_presmodule->addhiddendata("mode", "filter");
7496         $kiriwrite_presmodule->addhiddendata("action", "add");
7497         $kiriwrite_presmodule->addhiddendata("confirm", 1);
7498         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7500         $kiriwrite_presmodule->startheader();
7501         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
7502         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
7503         $kiriwrite_presmodule->endheader();
7505         $kiriwrite_presmodule->startrow();
7506         $kiriwrite_presmodule->addcell("tablecell1");
7507         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
7508         $kiriwrite_presmodule->endcell();
7509         $kiriwrite_presmodule->addcell("tablecell2");
7510         $kiriwrite_presmodule->addinputbox("findword", { 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}->{replacefilter});
7517         $kiriwrite_presmodule->endcell();
7518         $kiriwrite_presmodule->addcell("tablecell2");
7519         $kiriwrite_presmodule->addinputbox("replaceword", { Size => 64, MaxLength => 1024 });
7520         $kiriwrite_presmodule->endcell();
7521         $kiriwrite_presmodule->endrow();
7523         $kiriwrite_presmodule->startrow();
7524         $kiriwrite_presmodule->addcell("tablecell1");
7525         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
7526         $kiriwrite_presmodule->endcell();
7527         $kiriwrite_presmodule->addcell("tablecell2");
7528         $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5 });
7529         $kiriwrite_presmodule->startlist();
7530         $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
7531         $kiriwrite_presmodule->endlist();
7532         $kiriwrite_presmodule->endcell();
7533         $kiriwrite_presmodule->endrow();
7535         $kiriwrite_presmodule->startrow();
7536         $kiriwrite_presmodule->addcell("tablecell1");
7537         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
7538         $kiriwrite_presmodule->endcell();
7539         $kiriwrite_presmodule->addcell("tablecell2");
7540         $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10 });
7541         $kiriwrite_presmodule->endcell();
7542         $kiriwrite_presmodule->endrow();
7544         $kiriwrite_presmodule->endtable();
7546         $kiriwrite_presmodule->addlinebreak();
7547         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{addfilterbutton});
7548         $kiriwrite_presmodule->addtext(" | ");
7549         $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
7550         $kiriwrite_presmodule->addtext(" | ");
7551         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7553         $kiriwrite_presmodule->endbox();
7554         $kiriwrite_presmodule->endform();
7556         return $kiriwrite_presmodule->grab();
7560 sub kiriwrite_filter_edit{
7561 #################################################################################
7562 # kiriwrite_filter_edit: Edits a filter from the filter list.                   #
7563 #                                                                               #
7564 # Usage:                                                                        #
7565 #                                                                               #
7566 # kiriwrite_filter_edit(filternumber, newfilterfind, newfilterreplace,          #
7567 #                       newfilterpriority, newfilternotes, confirm);            #
7568 #                                                                               #
7569 # filterid              Specifies the filter number (line number) in the        #
7570 #                       filter database.                                        #
7571 # newfilterfind         Specifies the new word to find.                         #
7572 # newfilterreplace      Specifies the new word to replace.                      #
7573 # newfilterpriority     Specifies the new filter priority.                      #
7574 # newfilternotes        Specifies the new filter notes.                         #
7575 # confirm               Confirms the action to edit a filter.                   #
7576 #################################################################################
7578         # Get the values that have been passed to the subroutine.
7580         my ($filter_id, $filter_new_find, $filter_new_replace, $filter_new_priority, $filter_new_notes, $confirm) = @_;
7582         # Check the confirm value to make sure it is no more than
7583         # one character long.
7585         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
7587         # Check if the confirm value is blank and if it is
7588         # srt the confirm value to 0.
7590         if (!$confirm){
7592                 # The confirm value does not have any value
7593                 # set so set it to 0.
7595                 $confirm = 0;
7597         }
7599         # Check if the filter identification number is blank,
7600         # contains characters other than numbers and is more
7601         # than seven characters long.
7603         if (!$filter_id){
7605                 # The filter identification number is blank,
7606                 # so return an error.
7608                 kiriwrite_error("filteridblank");
7610         }
7612         my $filter_id_numbers_check     = kiriwrite_variablecheck($filter_id, "numbers", 0, 1);
7614         if ($filter_id_numbers_check eq 1){
7616                 # The filter identification number contains
7617                 # characters other than numbers, so return
7618                 # an error.
7620                 kiriwrite_error("filteridinvalid");
7622         }
7624         my $filter_id_maxlength_check   = kiriwrite_variablecheck($filter_id, "maxlength", 7, 1);
7626         if ($filter_id_maxlength_check eq 1){
7628                 # The filter identification number given
7629                 # is more than seven characters long, so
7630                 # return an error.
7632                 kiriwrite_error("filteridtoolong");
7634         }
7636         my $filter_priority;
7637         my $filter_find;
7638         my $filter_replace;
7639         my $filter_notes;
7640  
7641         # Check if the action to edit a filter has been
7642         # confirmed.
7644         if ($confirm eq 1){
7646                 # The action to edit a filter has been confirmed so
7647                 # edit the selected filter.
7649                 # First, check the variables recieved are UTF8
7650                 # copliant.
7652                 kiriwrite_variablecheck($filter_new_find, "utf8", 0, 0);
7653                 kiriwrite_variablecheck($filter_new_replace, "utf8", 0, 0);
7654                 kiriwrite_variablecheck($filter_new_priority, "utf8", 0, 0);
7655                 kiriwrite_variablecheck($filter_new_notes, "utf8", 0, 0);
7657                 # Convert the UTF8 values so that the length can
7658                 # checked properly.
7660                 $filter_find            = kiriwrite_utf8convert($filter_new_find);
7661                 $filter_replace         = kiriwrite_utf8convert($filter_new_replace);
7662                 $filter_priority        = kiriwrite_utf8convert($filter_new_priority);
7663                 $filter_notes           = kiriwrite_utf8convert($filter_new_notes);
7665                 # Check if the find filter is blank and return an error
7666                 # if it is.
7668                 if (!$filter_new_find){
7670                         # The find filter given is blank so return an
7671                         # error.
7673                         kiriwrite_error("blankfindfilter");
7675                 }
7677                 if (!$filter_new_priority){
7679                         # The filter priority is blank so set it
7680                         # to 1.
7682                         $filter_new_priority = 1;
7684                 }
7686                 # Check the length and contents of the values given
7687                 # to make sure they are valid.
7689                 my $filterfind_maxlength_check          = kiriwrite_variablecheck($filter_new_find, "maxlength", 1024, 1);
7690                 my $filterreplace_maxlength_check       = kiriwrite_variablecheck($filter_new_replace, "maxlength", 1024, 1);
7691                 my $filterpriority_maxlength_check      = kiriwrite_variablecheck($filter_new_priority, "maxlength", 5, 1);
7692                 my $filterpriority_numbers_check        = kiriwrite_variablecheck($filter_new_priority, "numbers", 0, 1);
7694                 # Check if the result of the tests to see if they
7695                 # are valid.
7697                 if ($filterfind_maxlength_check eq 1){
7699                         # The find filter is too long, so return
7700                         # an error.
7702                         kiriwrite_error("findfiltertoolong");
7704                 }
7706                 if ($filterreplace_maxlength_check eq 1){
7708                         # The replace filter is too long, so
7709                         # return an error.
7711                         kiriwrite_error("replacefiltertoolong");
7713                 }
7715                 if ($filterpriority_maxlength_check eq 1){
7717                         # The length of the filter priority
7718                         # given is too long, so return an
7719                         # error.
7721                         kiriwrite_error("filterprioritytoolong");
7723                 }
7725                 if ($filterpriority_numbers_check eq 1){
7727                         # The priority of the filter given
7728                         # contains characters other than
7729                         # numbers.
7731                         kiriwrite_error("filterpriorityinvalidchars");
7733                 }
7735                 # Check if the filter priority is less than 1
7736                 # and more than 10000 and return an error
7737                 # if it is.
7739                 if ($filter_new_priority < 1 || $filter_new_priority > 50000){
7741                         # The filter priority is less than 1 and
7742                         # more than 10000, so return an error.
7744                         kiriwrite_error("filterpriorityinvalid");
7746                 }
7748                 # Connect to the database server.
7750                 $kiriwrite_dbmodule->connect();
7752                 # Check if any errors occured while connecting to the database server.
7754                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7756                         # A database connection error has occured so return
7757                         # an error.
7759                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7761                 }
7763                 # Connect to the filter database.
7765                 $kiriwrite_dbmodule->connectfilter();
7767                 # Check if any error has occured while connecting to the filter
7768                 # database.
7770                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7772                         # The filter database does not exist.
7774                         kiriwrite_error("filtersdbmissing");
7776                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7778                         # The filter database has invalid permissions set so return
7779                         # an error.
7781                         kiriwrite_error("filtersdbpermissions");
7783                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7785                         # A database error has occured with the filter database.
7787                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7789                 }
7791                 # Edit the selected filter in the filter database.
7793                 $kiriwrite_dbmodule->editfilter({ FilterID => $filter_id, NewFindFilter => $filter_new_find, NewReplaceFilter => $filter_new_replace, NewFilterPriority => $filter_new_priority, NewFilterNotes => $filter_new_notes });
7795                 # Check if any errors occured while editing the filter.
7797                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7799                         # The filter database has invalid permissions set so return
7800                         # an error.
7802                         kiriwrite_error("filtersdbpermissions");
7804                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7806                         # A database error has occured while using the filter database
7807                         # so return an error.
7809                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7811                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7813                         # The specified filter does not exist so return an error.
7815                         kiriwrite_error("filterdoesnotexist");
7817                 }
7819                 # Disconnect from the filter database.
7821                 $kiriwrite_dbmodule->disconnectfilter();
7823                 # Disconnect from the database server.
7825                 $kiriwrite_dbmodule->disconnect();
7827                 # Write a message saying that the filter was edited.
7829                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfilter}, { Style => "pageheader" });
7830                 $kiriwrite_presmodule->addlinebreak();
7831                 $kiriwrite_presmodule->addlinebreak();
7832                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfiltermessage});
7833                 $kiriwrite_presmodule->addlinebreak();
7834                 $kiriwrite_presmodule->addlinebreak();
7835                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist}});
7837                 return $kiriwrite_presmodule->grab();
7839         } elsif ($confirm eq 0){
7841                 # The action to edit a filter has not been confirmed
7842                 # so write a form for editing the filter with.
7844                 # Connect to the database server.
7846                 $kiriwrite_dbmodule->connect();
7848                 # Check if any errors occured while connecting to the database server.
7850                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7852                         # A database connection error has occured so return
7853                         # an error.
7855                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7857                 }
7859                 # Connect to the database server.
7861                 $kiriwrite_dbmodule->connect();
7863                 # Check if any errors occured while connecting to the database server.
7865                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7867                         # A database connection error has occured so return
7868                         # an error.
7870                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7872                 }
7874                 # Connect to the filter database.
7876                 $kiriwrite_dbmodule->connectfilter();
7878                 # Check if any error has occured while connecting to the filter
7879                 # database.
7881                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7883                         # The filter database does not exist.
7885                         kiriwrite_error("filtersdbmissing");
7887                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7889                         # The filter database has invalid permissions set so return
7890                         # an error.
7892                         kiriwrite_error("filtersdbpermissions");
7894                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7896                         # A database error has occured with the filter database.
7898                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7900                 }
7902                 # Get information about the filter.
7904                 my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
7906                 # Check if any errors occured while getting information about the filter.
7908                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7910                         # A database error occured while using the filter database so
7911                         # return an error.
7913                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7915                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7917                         # The filter does not exist so return an error.
7919                         kiriwrite_error("filterdoesnotexist");
7921                 }
7923                 # Get the required information.
7925                 $filter_priority        = $filter_info{"FilterPriority"};
7926                 $filter_find            = $filter_info{"FilterFind"};
7927                 $filter_replace         = $filter_info{"FilterReplace"};
7928                 $filter_notes           = $filter_info{"FilterNotes"};
7930                 # Disconnect from the filter database.
7932                 $kiriwrite_dbmodule->disconnectfilter();
7934                 # Disconnect from the database server.
7936                 $kiriwrite_dbmodule->disconnect();
7938                 # Write out the form.
7940                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editfilter}, { Style => "pageheader" });
7941                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
7942                 $kiriwrite_presmodule->startbox();
7943                 $kiriwrite_presmodule->addhiddendata("mode", "filter");
7944                 $kiriwrite_presmodule->addhiddendata("action", "edit");
7945                 $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
7946                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
7948                 $kiriwrite_presmodule->addlinebreak();
7949                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7951                 $kiriwrite_presmodule->startheader();
7952                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
7953                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
7954                 $kiriwrite_presmodule->endheader();
7956                 $kiriwrite_presmodule->startrow();
7957                 $kiriwrite_presmodule->addcell("tablecell1");
7958                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
7959                 $kiriwrite_presmodule->endcell();
7960                 $kiriwrite_presmodule->addcell("tablecell2");
7961                 $kiriwrite_presmodule->addinputbox("filterfind", { Size => 64, MaxLength => 1024, Value => $filter_find });
7962                 $kiriwrite_presmodule->endcell();
7963                 $kiriwrite_presmodule->endrow();
7965                 $kiriwrite_presmodule->startrow();
7966                 $kiriwrite_presmodule->addcell("tablecell1");
7967                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{replacefilter});
7968                 $kiriwrite_presmodule->endcell();
7969                 $kiriwrite_presmodule->addcell("tablecell2");
7970                 $kiriwrite_presmodule->addinputbox("filterreplace", { Size => 64, MaxLength => 1024, Value => $filter_replace });
7971                 $kiriwrite_presmodule->endcell();
7972                 $kiriwrite_presmodule->endrow();
7974                 $kiriwrite_presmodule->startrow();
7975                 $kiriwrite_presmodule->addcell("tablecell1");
7976                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
7977                 $kiriwrite_presmodule->endcell();
7978                 $kiriwrite_presmodule->addcell("tablecell2");
7979                 $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5, Value => $filter_priority });
7980                 $kiriwrite_presmodule->startlist();
7981                 $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
7982                 $kiriwrite_presmodule->endlist();
7983                 $kiriwrite_presmodule->endcell();
7984                 $kiriwrite_presmodule->endrow();
7986                 $kiriwrite_presmodule->startrow();
7987                 $kiriwrite_presmodule->addcell("tablecell1");
7988                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
7989                 $kiriwrite_presmodule->endcell();
7990                 $kiriwrite_presmodule->addcell("tablecell2");
7991                 $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10});
7992                 $kiriwrite_presmodule->endcell();
7993                 $kiriwrite_presmodule->endrow();
7995                 $kiriwrite_presmodule->endtable();
7997                 $kiriwrite_presmodule->addlinebreak();
7998                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{editfilterbutton});
7999                 $kiriwrite_presmodule->addtext(" | ");
8000                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
8001                 $kiriwrite_presmodule->addtext(" | ");
8002                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
8003                 $kiriwrite_presmodule->endbox();
8004                 $kiriwrite_presmodule->endform();
8006                 return $kiriwrite_presmodule->grab(); 
8008         } else {
8010                 # A confirm value other than 0 or 1 has been
8011                 # specified, so return an error.
8013                 kiriwrite_error("invalidvalue");
8015         }
8019 sub kiriwrite_filter_delete{
8020 #################################################################################
8021 # kiriwrite_filter_delete: Deletes a filter from the filter list.               #
8022 #                                                                               #
8023 # Usage:                                                                        #
8024 #                                                                               #
8025 # kiriwrite_filter_delete(filterid, confirm);                                   #
8026 #                                                                               #
8027 # filterid      Specifies the filter line number to delete.                     #
8028 # confirm       Confirms the deletion of the selected filter.                   #
8029 #################################################################################
8031         # Get the values that were passed to this subroutine.
8033         my ($filter_id, $confirm) = @_;
8035         # Check the confirm value to make sure it is no more than
8036         # one character long.
8038         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
8040         # Check if the confirm value is blank and if it is
8041         # srt the confirm value to 0.
8043         if (!$confirm){
8045                 # The confirm value does not have any value
8046                 # set so set it to 0.
8048                 $confirm = 0;
8050         }
8052         # Check if the filter identification number is blank,
8053         # contains characters other than numbers and is more
8054         # than seven characters long.
8056         if (!$filter_id){
8058                 # The filter identification number is blank,
8059                 # so return an error.
8061                 kiriwrite_error("filteridblank");
8063         }
8065         my $filter_id_numbers_check     = kiriwrite_variablecheck($filter_id, "numbers", 0, 1);
8067         if ($filter_id_numbers_check eq 1){
8069                 # The filter identification number contains
8070                 # characters other than numbers, so return
8071                 # an error.
8073                 kiriwrite_error("filteridinvalid");
8075         }
8077         my $filter_id_maxlength_check   = kiriwrite_variablecheck($filter_id, "maxlength", 7, 1);
8079         if ($filter_id_maxlength_check eq 1){
8081                 # The filter identification number given
8082                 # is more than seven characters long, so
8083                 # return an error.
8085                 kiriwrite_error("filteridtoolong");
8087         }
8089         # Define some values for later.
8091         my @database_filter;
8092         my $filter_exists = 0;
8094         # Check if the confirm integer has a value of '1'.
8096         if ($confirm eq 1){
8098                 # The action to delete a filter has been confirmed.
8100                 # Connect to the database server.
8102                 $kiriwrite_dbmodule->connect();
8104                 # Check if any errors occured while connecting to the database server.
8106                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8108                         # A database connection error has occured so return
8109                         # an error.
8111                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8113                 }
8115                 # Connect to the filter database.
8117                 $kiriwrite_dbmodule->connectfilter();
8119                 # Check if any error has occured while connecting to the filter
8120                 # database.
8122                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8124                         # The filter database does not exist.
8126                         kiriwrite_error("filtersdbmissing");
8128                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8130                         # The filter database has invalid permissions set so return
8131                         # an error.
8133                         kiriwrite_error("filtersdbpermissions");
8135                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8137                         # A database error has occured with the filter database.
8139                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8141                 }
8143                 # Delete the filter from the filter database.
8145                 $kiriwrite_dbmodule->deletefilter({ FilterID => $filter_id });
8147                 # Check if any errors occured while deleting the filter.
8149                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8151                         # A database error has occured while trying to delete a filter so
8152                         # return an error.
8154                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8156                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8158                         # The filter does not exist so return an error.
8159  
8160                         kiriwrite_error("filterdoesnotexist");
8162                 }
8164                 # Disconnect from the filter database.
8166                 $kiriwrite_dbmodule->disconnectfilter();
8168                 # Disconnect from the database server.
8170                 $kiriwrite_dbmodule->disconnect();
8172                 # Write a message saying that the filter was deleted
8173                 # from the filter database.
8175                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfilter}, { Style => "pageheader" });
8176                 $kiriwrite_presmodule->addlinebreak();
8177                 $kiriwrite_presmodule->addlinebreak();
8178                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfiltermessage});
8179                 $kiriwrite_presmodule->addlinebreak();
8180                 $kiriwrite_presmodule->addlinebreak();
8181                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
8183         } elsif ($confirm eq 0) {
8185                 # Connect to the database server.
8187                 $kiriwrite_dbmodule->connect();
8189                 # Check if any errors occured while connecting to the database server.
8191                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8193                         # A database connection error has occured so return
8194                         # an error.
8196                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8198                 }
8200                 # Connect to the filter database.
8202                 $kiriwrite_dbmodule->connectfilter();
8204                 # Check if any error has occured while connecting to the filter
8205                 # database.
8207                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8209                         # The filter database does not exist.
8211                         kiriwrite_error("filtersdbmissing");
8213                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8215                         # The filter database has invalid permissions set so return
8216                         # an error.
8218                         kiriwrite_error("filtersdbpermissions");
8220                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8222                         # A database error has occured with the filter database.
8224                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8226                 }
8228                 # Get information about the filter (to check if it exists).
8230                 my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
8232                 # Check if any errors occured while getting information about the filter.
8234                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8236                         # A database error occured while using the filter database so
8237                         # return an error.
8239                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8241                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8243                         # The filter does not exist so return an error.
8245                         kiriwrite_error("filterdoesnotexist");
8247                 }
8249                 # Disconnect from the filter database.
8251                 $kiriwrite_dbmodule->disconnectfilter();
8253                 # Disconnect from the database
8255                 # The confirm integer is '0', so continue write out
8256                 # a form asking the user to confirm the deletion
8257                 # pf the filter.
8259                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefilter}, { Style => "pageheader" });
8260                 $kiriwrite_presmodule->addlinebreak();
8261                 $kiriwrite_presmodule->addlinebreak();
8262                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefiltermessage});
8263                 $kiriwrite_presmodule->addlinebreak();
8264                 $kiriwrite_presmodule->addlinebreak();
8265                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
8266                 $kiriwrite_presmodule->startbox();
8267                 $kiriwrite_presmodule->addhiddendata("mode", "filter");
8268                 $kiriwrite_presmodule->addhiddendata("action", "delete");
8269                 $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
8270                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
8271                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{deletefilterbutton});
8272                 $kiriwrite_presmodule->addtext(" | ");
8273                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{deletefilterreturn} });
8274                 $kiriwrite_presmodule->endbox();
8275                 $kiriwrite_presmodule->endform();
8277         } else {
8279                 kiriwrite_error("invalidvalue");
8281         }
8283         return $kiriwrite_presmodule->grab();
8287 sub kiriwrite_compile_makepages{
8288 #################################################################################
8289 # kiriwrite_compile_makepages: Compile the selected pages and place them in the #
8290 # specified output directory.                                                   #
8291 #                                                                               #
8292 # Usage:                                                                        #
8293 #                                                                               #
8294 # kiriwrite_compile_makepages(type, selectedlist, confirm);                     #
8295 #                                                                               #
8296 # type          Specifies if single or multiple databases are to be compiled.   #
8297 # confirm       Specifies if the action to compile the databases should really  #
8298 #               be done.                                                        #
8299 # selectedlist  Specifies the databases to compile from as an array.            #
8300 #################################################################################
8302         # Get the values that have been passed to the subroutine.
8304         my ($type, $confirm, @selectedlist) = @_;
8306         # Check if the confirm value is more than one
8307         # character long.
8309         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
8311         # Check if the confirm value is blank and if it
8312         # is then set the confirm value to 0.
8314         if (!$confirm){
8316                 # The confirm value is blank, so set the
8317                 # confirm value to 0.
8319                 $confirm = 0;
8321         }
8323         # Check if there are any databases selected
8324         # and return an error if there isn't.
8326         if (!@selectedlist){
8328                 # There are no databases in the array
8329                 # so return an error.
8331                 kiriwrite_error("nodatabaseselected");
8333         }
8335         # Check if the type given is no more than
8336         # 7 characters long.
8338         my $type_maxlength_check = kiriwrite_variablecheck($type, "maxlength", 8, 1);
8340         if ($type_maxlength_check eq 1){
8342                 # The type length given is too long so
8343                 # return an error.
8345                 kiriwrite_error("variabletoolong");
8347         }
8349         # Check if the action to compile the databases
8350         # has been confirmed.
8352         if ($confirm eq 1){
8354                 # The action to compile the datavases has
8355                 # been confirmed.
8357                 # Define some variables for later.
8359                 my %database_info;
8360                 my %filter_info;
8361                 my %template_info;
8362                 my %page_info;
8363                 my %templatefiles;
8364                 my @page_filenames;
8365                 my @databaseinfo;
8366                 my @databasepages;
8367                 my @filterslist;
8368                 my @findfilter;
8369                 my @replacefilter;
8370                 my @templateslist;
8371                 my @pagedirectories;
8372                 my @database_filters;
8373                 my $warning_count               = 0;
8374                 my $error_count                 = 0;
8375                 my $pages_count                 = 0;
8376                 my $filter;
8377                 my $filters_count               = 0;
8378                 my $filters_find_blank_warning  = 0;
8379                 my $filter_find;
8380                 my $filter_replace;
8381                 my $database;
8382                 my $database_name;
8383                 my $page_filename;
8384                 my $page_filename_check;
8385                 my $page_filename_char          = "";
8386                 my $page_filename_directory;
8387                 my $page_filename_length        = 0;
8388                 my $page_filename_seek          = 0;
8389                 my $page_filename_dircount      = 0;
8390                 my $page_filename_exists        = 0;
8391                 my $page_filename_permissions   = 0;
8392                 my $page_directory_name;
8393                 my $page_directory_path;
8394                 my $page_name;
8395                 my $page_description;
8396                 my $page_section;
8397                 my $page_template;
8398                 my $page_content;
8399                 my $page_settings;
8400                 my $page_lastmodified;
8401                 my $page_title;
8402                 my $page_final;
8403                 my $page_autosection;
8404                 my $page_autotitle;
8405                 my $page;
8406                 my $database_filename_check     = 0;
8407                 my $database_maxlength_check    = 0;
8408                 my $output_exists               = 0;
8409                 my $output_permissions          = 0;
8410                 my $filters_exists              = 0;
8411                 my $filters_permissions         = 0;
8412                 my $filters_skip                = 0;
8413                 my $template;
8414                 my $templates_skip              = 0;
8415                 my $information_prefix          = $kiriwrite_lang->{compile}->{informationprefix};
8416                 my $error_prefix                = $kiriwrite_lang->{compile}->{errorprefix};
8417                 my $warning_prefix              = $kiriwrite_lang->{compile}->{warningprefix};
8418                 my $filehandle_page;
8420                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabases}, { Style => "pageheader" });
8421                 $kiriwrite_presmodule->addlinebreak();
8422                 $kiriwrite_presmodule->addlinebreak();
8423                 $kiriwrite_presmodule->startbox("datalist");
8425                 # Check if the output directory exists and has
8426                 # valid permissions set.
8428                 $output_exists          = kiriwrite_fileexists($kiriwrite_config{'directory_data_output'});
8430                 if ($output_exists ne 0){
8432                         # The output directory does not exist so
8433                         # return an error.
8435                         kiriwrite_error("outputdirectorymissing");
8437                 }
8439                 $output_permissions     = kiriwrite_filepermissions($kiriwrite_config{'directory_data_output'}, 1, 1);
8441                 if ($output_permissions ne 0){
8443                         # The output directory has invalid
8444                         # permissions set so return an error.
8446                         kiriwrite_error("outputdirectoryinvalidpermissions");
8448                 }
8450                 # Connect to the database server.
8452                 $kiriwrite_dbmodule->connect();
8454                 # Check if any errors occured while connecting to the database server.
8456                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8458                         # A database connection error has occured so return
8459                         # an error.
8461                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8463                 }
8465                 # Connect to the filter database.
8467                 $kiriwrite_dbmodule->connectfilter();
8469                 # Check if any error has occured while connecting to the filter
8470                 # database.
8472                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8474                         # The filter database does not exist so write a warning message.
8476                         $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{filterdatabasemissing});
8477                         $kiriwrite_presmodule->addlinebreak();
8478                         $filters_skip = 1;
8479                         $warning_count++;
8481                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8483                         # The filter database has invalid permissions set so write a
8484                         # an error message.
8486                         $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{filterdatabasepermissions});
8487                         $kiriwrite_presmodule->addlinebreak();
8488                         $filters_skip = 1;
8489                         $error_count++;
8491                 }
8493                 # Load the filter database (if the filters skip
8494                 # value isn't set to 1).
8496                 if ($filters_skip eq 0){
8498                         # Get the list of available filters.
8500                         @database_filters       = $kiriwrite_dbmodule->getfilterlist();
8502                         # Check if any errors occured while getting the list of filters.
8504                         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8506                                 # A database error has occured with the filter database.
8508                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8509                                 $kiriwrite_presmodule->addlinebreak();
8510                                 $error_count++;
8512                         }
8514                         # Check if the filters skip value is set to 0
8515                         # before executing the query.
8517                         if ($filters_skip eq 0){
8519                                 foreach $filter (@database_filters){
8521                                         # Get the filter information.
8523                                         %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
8525                                         # Check if any errors occured while getting the filter information.
8527                                         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8529                                                 # A database error occured while using the filter database.
8531                                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8532                                                 $kiriwrite_presmodule->addlinebreak();
8533                                                 $error_count++;
8534                                                 next;
8536                                         } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8538                                                 # The filter does not exist so process the next filter.
8540                                                 next;
8542                                         }
8544                                         # Check if the find filter is blank and
8545                                         # if it is then write a warning message.
8547                                         if (!$filter_info{"FilterFind"}){
8549                                                 if ($filters_find_blank_warning ne 1){
8551                                                         $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{findfilterblank});
8552                                                         $kiriwrite_presmodule->addlinebreak();
8553                                                         $filters_find_blank_warning = 1;
8554                                                 }
8555                                                 next;
8557                                         } else {
8559                                                 # Add each find and replace filter.
8561                                                 $findfilter[$filters_count]     = $filter_info{"FilterFind"};
8562                                                 $replacefilter[$filters_count]  = $filter_info{"FilterReplace"};
8564                                         }
8566                                         $filters_count++;
8568                                 }
8570                                 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishfilterdatabase});
8571                                 $kiriwrite_presmodule->addlinebreak();
8573                         }
8575                 }
8577                 # Disconnect from the filter database.
8579                 $kiriwrite_dbmodule->disconnectfilter();
8581                 # Connect to the template database.
8583                 $kiriwrite_dbmodule->connecttemplate();
8585                 # Check if any errors occured while connecting to the template database.
8587                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
8589                         # The template database does not exist so set the template
8590                         # warning message.
8592                         $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{templatedatabasemissing});
8593                         $kiriwrite_presmodule->addlinebreak();
8594                         $templates_skip = 1;
8595                         $warning_count++;
8597                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
8599                         # The template database has invalid permissions set so write
8600                         # the template warning message.
8601  
8602                         $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{templatedatabasepermissions});
8603                         $kiriwrite_presmodule->addlinebreak();
8604                         $templates_skip = 1;
8605                         $error_count++;
8607                 }
8609                 # Check if the template skip value isn't set and if it isn't
8610                 # then get the list of templates.
8612                 if (!$templates_skip){
8614                         @templateslist = $kiriwrite_dbmodule->gettemplatelist();
8616                         # Check if any errors had occured.
8618                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
8620                                 # A database error occured while getting the list
8621                                 # of templates so return a warning message with the 
8622                                 # extended error information.
8624                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8625                                 $templates_skip = 1;
8626                                 $error_count++;
8628                         }
8630                         # Check if the template skip value isn't set and if it isn't
8631                         # then process each template.
8633                         if (!$templates_skip){
8635                                 # Process each template.
8637                                 foreach $template (@templateslist){
8639                                         # Get information about the template.
8641                                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
8643                                         # Check if any error occured while getting the template information.
8645                                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
8647                                                 # A database error has occured, so return an error.
8649                                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8650                                                 $error_count++;
8652                                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
8654                                                 # The template does not exist, so process the next template.
8656                                                 next;
8658                                         }
8660                                         # Place each template file into the hash.
8662                                         $templatefiles{$template_info{"TemplateFilename"}}{template}    = $template_info{"TemplateLayout"};
8663                                         $templatefiles{$template_info{"TemplateFilename"}}{valid}       = 1;
8665                                 }
8667                                 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishtemplatedatabase});
8668                                 $kiriwrite_presmodule->addlinebreak();
8670                         }
8672                 }
8674                 # Disconnect from the template database.
8676                 $kiriwrite_dbmodule->disconnecttemplate();
8678                 # Process each database.
8680                 foreach $database (@selectedlist){
8682                         # Check if the database filename and length
8683                         # are valid.
8685                         $kiriwrite_presmodule->addhorizontalline();
8687                         $database_filename_check        = kiriwrite_variablecheck($database, "page_filename", "", 1);
8688                         $database_maxlength_check       = kiriwrite_variablecheck($database, "maxlength", 32, 1);
8690                         if ($database_filename_check ne 0){
8692                                 # The database filename is invalid, so process
8693                                 # the next database.
8695                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenameinvalidcharacters}, $database));
8696                                 $kiriwrite_presmodule->addlinebreak();
8697                                 $error_count++;
8698                                 next;
8700                         }
8702                         if ($database_maxlength_check ne 0){
8704                                 # The database file is too long, so process the
8705                                 # next database.
8707                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenametoolong}, $database));
8708                                 $kiriwrite_presmodule->addlinebreak();
8709                                 $error_count++;
8710                                 next;
8712                         }
8714                         # Select the database.
8716                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
8718                         # Check if any errors had occured while selecting the database.
8720                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
8722                                 # The database does not exist, so write a warning message.
8724                                 $kiriwrite_presmodule->addtext($warning_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasemissing}, $database));
8725                                 $kiriwrite_presmodule->addlinebreak();
8726                                 $warning_count++;
8727                                 next;
8729                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
8731                                 # The database has invalid permissions set, so write
8732                                 # an error message.
8734                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseinvalidpermissions}, $database));
8735                                 $kiriwrite_presmodule->addlinebreak();
8736                                 $error_count++;
8737                                 next;
8739                         }
8741                         # Get information about the database.
8743                         my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
8745                         # Check if any error occured while getting the database information.
8747                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
8749                                 # A database error has occured so write an error.
8751                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseerror}, $database, $kiriwrite_dbmodule->geterror(1)));
8752                                 $kiriwrite_presmodule->addlinebreak();
8753                                 $error_count++;
8754                                 next;
8756                         };
8758                         # Get the database name.
8760                         $database_name = $database_info{"DatabaseName"};
8762                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compilingpages}, $database_name));
8763                         $kiriwrite_presmodule->addlinebreak();
8765                         # Get the list of pages in the database.
8767                         @databasepages = $kiriwrite_dbmodule->getpagelist();
8769                         # Check if any errors occured while getting the list of pages.
8771                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
8773                                 # A database error has occured so return an error and
8774                                 # also the extended error information.
8776                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasepageerror}, $database, $kiriwrite_dbmodule->geterror(1)));
8777                                 $kiriwrite_presmodule->addlinebreak();
8778                                 $error_count++;
8779                                 next;
8781                         }
8783                         foreach $page (@databasepages) {
8785                                 # Get information about the page.
8787                                 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
8789                                 $page_filename          = $page_info{"PageFilename"};
8790                                 $page_name              = $page_info{"PageName"};
8791                                 $page_description       = $page_info{"PageDescription"};
8792                                 $page_section           = $page_info{"PageSection"};
8793                                 $page_template          = $page_info{"PageTemplate"};
8794                                 $page_content           = $page_info{"PageContent"};
8795                                 $page_settings          = $page_info{"PageSettings"};
8796                                 $page_lastmodified      = $page_info{"PageLastModified"};
8798                                 # Check if the filename is valid.
8800                                 $page_filename_check = kiriwrite_variablecheck($page_filename, "page_filename", 0, 1);
8802                                 if ($page_filename_check ne 0){
8804                                         # The file name is not valid so write a
8805                                         # error and process the next page.
8807                                         $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{invalidpagefilename}, $page_name));
8808                                         $kiriwrite_presmodule->addlinebreak();
8809                                         $error_count++;
8810                                         next;
8812                                 }
8814                                 # Check if the template with the filename does not exist
8815                                 # in the template files hash and write a message and
8816                                 # process the next page.
8818                                 if (!$templatefiles{$page_template}{valid} && $page_template ne "!none" && $templates_skip eq 0){
8820                                         $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatefilemissing}, $page_template, $page_name, $page_filename));
8821                                         $kiriwrite_presmodule->addlinebreak();
8822                                         $error_count++;
8823                                         next;
8825                                         $page_final = $page_content;
8827                                 } elsif ($page_template eq "!none"){
8829                                         $page_final = $page_content;
8831                                 } else {
8833                                         $page_final = $templatefiles{$page_template}{template};
8835                                         if (!$page_final){
8836                                                 $page_final = "";
8837                                         }
8839                                         $page_final =~ s/<kiriwrite:pagecontent>/$page_content/g;
8841                                 }
8843                                 # Create the combined page title (if needed).
8845                                 if ($page_settings eq 0 || $page_settings > 3){
8847                                         # Don't use page name or section name.
8849                                         $page_final =~ s/<kiriwrite:pagetitle>//g;
8851                                 } elsif ($page_settings eq 1){
8853                                         # Use the page name and section name.
8855                                         $page_autotitle = "(" . $page_section . " - " . $page_name . ")";
8856                                         $page_title = $page_section . " - " . $page_name;
8857                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_title/g;
8859                                 } elsif ($page_settings eq 2){
8861                                         # Use the page name only.
8863                                         $page_autotitle = "(" . $page_name . ")";
8864                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_name/g;
8866                                 } elsif ($page_settings eq 3){
8868                                         # Use the section name only.
8870                                         if ($page_section){
8871                                                 $page_autotitle = "(" . $page_section . ")";
8872                                         }
8873                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_section/g;
8875                                 }
8877                                 # Check if the section name is not blank and
8878                                 # place brackets inbetween if it is.
8880                                 if ($page_section){
8882                                         $page_autosection = "(" . $page_section . ")";
8884                                 }
8886                                 # Replace each <kiriwrite> value with the apporiate page
8887                                 # values.
8889                                 $page_final =~ s/<kiriwrite:pagename>/$page_name/g;
8890                                 $page_final =~ s/<kiriwrite:pagedescription>/$page_description/g;
8891                                 $page_final =~ s/<kiriwrite:pagesection>/$page_section/g;
8892                                 $page_final =~ s/<kiriwrite:autosection>/$page_autosection/g;
8893                                 $page_final =~ s/<kiriwrite:autotitle>/$page_autotitle/g;
8895                                 # Process the filters on the page data.
8897                                 if ($filters_skip eq 0){
8899                                         $filters_count = 0;
8901                                         foreach $filter_find (@findfilter){
8903                                                 # Get the replace filter and process each
8904                                                 # filter on the page.
8906                                                 $filter_replace = $replacefilter[$filters_count];
8907                                                 $page_final =~ s/$filter_find/$filter_replace/g;
8908                                                 $filters_count++;
8910                                         }
8912                                 }
8914                                 # Process the page filename and check what directories
8915                                 # need to be created.
8917                                 $page_filename_length = int(length($page_filename));
8919                                 do {
8921                                         $page_filename_char = substr($page_filename, $page_filename_seek, 1);
8923                                         # Check if a forward slash appears and add it to
8924                                         # the list of directories array.
8926                                         if ($page_filename_char eq '/'){
8928                                                 # Append the directory name to the list of
8929                                                 # directories array.
8931                                                 $pagedirectories[$page_filename_dircount] = $page_filename_directory;
8932                                                 $page_filename_directory        = "";
8933                                                 $page_filename_char             = "";
8934                                                 $page_filename_dircount++;
8936                                         } else {
8938                                                 # Append the character to the directory/filename.
8940                                                 $page_filename_directory = $page_filename_directory . $page_filename_char;
8942                                         }
8944                                         $page_filename_seek++;
8946                                 } until ($page_filename_length eq $page_filename_seek);
8948                                 foreach $page_directory_name (@pagedirectories){
8950                                         # Check if the directory name is undefined and if it
8951                                         # is then set it blank.
8953                                         if (!$page_directory_name){
8954                                                 $page_directory_name = "";
8955                                         }
8957                                         if (!$page_directory_path){
8958                                                 $page_directory_path = "";
8959                                         }
8961                                         # Check if the directory exists and create 
8962                                         # the directory if it doesn't exist.
8964                                         $page_directory_path = $page_directory_path . '/' . $page_directory_name;
8966                                         mkdir($kiriwrite_config{"directory_data_output"} . '/' . $page_directory_path);
8968                                 }
8970                                 # Check if the file already exists and if it does then check
8971                                 # the permissions of the file and return an error if the
8972                                 # permissions set are invalid.
8974                                 $page_filename_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"} . '/' . $page_filename);        
8976                                 if ($page_filename_exists eq 0){
8978                                         # The page filename exists, so check if the permissions given are
8979                                         # valid.
8981                                         $page_filename_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"} . '/' . $page_filename, 1, 1);
8983                                         if ($page_filename_permissions eq 1){
8985                                                 # The file has invalid permissions set.
8987                                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pageinvalidpermissions}, $page_filename));
8988                                                 $kiriwrite_presmodule->addlinebreak();
8989                                                 $error_count++;
8991                                                 # Reset certain values.
8993                                                 $page_autotitle = "";
8994                                                 $page_autosection = "";
8995                                                 $page_filename_seek = 0;
8996                                                 $page_filename_dircount = 0;
8998                                                 $page_filename_directory = "";
8999                                                 $page_directory_path = "";
9000                                                 $page_directory_name = "";
9001                                                 @pagedirectories = ();
9002                                                 
9003                                                 next;
9005                                         }
9007                                 }
9009                                 # Reset certain values.
9011                                 $page_autotitle = "";
9012                                 $page_autosection = "";
9013                                 $page_filename_seek = 0;
9014                                 $page_filename_dircount = 0;
9016                                 $page_filename_directory = "";
9017                                 $page_directory_path = "";
9018                                 $page_directory_name = "";
9019                                 @pagedirectories = ();
9021                                 # Write the file to the output directory.
9023                                 ($page_filename) = $page_filename =~ m/^(.*)$/g;
9024                                 ($kiriwrite_config{"directory_data_output"}) = $kiriwrite_config{"directory_data_output"} =~ m/^(.*)$/g;
9026                                 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);
9028                                 if (!$page_final){
9030                                         $page_final = "";
9032                                 }
9034                                 binmode $filehandle_page, ':utf8';
9035                                 print $filehandle_page $page_final;
9036                                 close($filehandle_page);
9038                                 # Write a message saying the page has been compiled. Check
9039                                 # to see if the page name is blank and write a message
9040                                 # saying there's no page name.
9042                                 if (!$page_name){
9043                                         $kiriwrite_presmodule->addtext($information_prefix . ' ');
9044                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
9045                                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledpageblankname}, $page_filename));
9046                                 } else {
9047                                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compiledpage}, $page_name, $page_filename));
9048                                 }
9051                                 $kiriwrite_presmodule->addlinebreak();
9052                                 $pages_count++;
9054                         }
9056                         # Write a message saying that the database has
9057                         # been processed.
9059                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefinish}, $database_name));
9060                         $kiriwrite_presmodule->addlinebreak();
9062                 }
9064                 # Disconnect from the database server.
9066                 $kiriwrite_dbmodule->disconnect();
9068                 $kiriwrite_presmodule->addhorizontalline();
9069                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compileresults}, $pages_count, $error_count, $warning_count));
9070                 $kiriwrite_presmodule->endbox();
9071                 $kiriwrite_presmodule->addlinebreak();
9072                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9074                 return $kiriwrite_presmodule->grab();
9076         } elsif ($confirm eq 0){
9078                 # The action to compile the databases has
9079                 # not been confirmed so check what type
9080                 # is being used.
9082                 if ($type eq "single"){
9084                         # The type is a single database selected so
9085                         # process that database.
9087                         # Define some variables for later.
9089                         my %database_info; 
9090                         my $database_filename_check;
9091                         my $database_maxlength_check;
9092                         my $databasefilename;
9093                         my $database_name;
9095                         # Check that the database name and length are
9096                         # valid and return an error if they aren't.
9098                         $databasefilename = $selectedlist[0];
9100                         # Connect to the database server.
9102                         $kiriwrite_dbmodule->connect();
9104                         # Check if any errors occured while connecting to the database server.
9106                         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9108                                 # A database connection error has occured so return
9109                                 # an error.
9111                                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9113                         }
9115                         # Select the database.
9117                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasefilename });
9119                         # Check if any errors had occured while selecting the database.
9121                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9123                                 # The database does not exist, so return an error.
9125                                 kiriwrite_error("databasemissingfile");
9127                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9129                                 # The database has invalid permissions set, so return
9130                                 # an error.
9132                                 kiriwrite_error("databaseinvalidpermissions");
9134                         }
9136                         # Get information about the database.
9138                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9140                         # Check if any error occured while getting the database information.
9142                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9144                                 # A database error has occured so return an error and
9145                                 # also the extended error information.
9147                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
9149                         };
9151                         $database_name = $database_info{"DatabaseName"};
9153                         # Disconnect from the database server.
9155                         $kiriwrite_dbmodule->disconnect();
9157                         # Write out a form asking the user to confirm if the
9158                         # user wants to compile the selected database.
9160                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabase}, { Style => "pageheader" });
9161                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9162                         $kiriwrite_presmodule->startbox();
9163                         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9164                         $kiriwrite_presmodule->addhiddendata("action", "compile");
9165                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9166                         $kiriwrite_presmodule->addhiddendata("id[1]", $databasefilename);
9167                         $kiriwrite_presmodule->addhiddendata("name[1]", "on");
9168                         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9169                         $kiriwrite_presmodule->addlinebreak();
9170                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledatabasemessage}, $database_name));
9171                         $kiriwrite_presmodule->addlinebreak();
9172                         $kiriwrite_presmodule->addlinebreak();
9173                         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compiledatabasebutton});
9174                         $kiriwrite_presmodule->addtext(" | ");
9175                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9176                         $kiriwrite_presmodule->endbox();
9177                         $kiriwrite_presmodule->endform();
9179                         return $kiriwrite_presmodule->grab();
9181                 } elsif ($type eq "multiple"){
9183                         # The type is multiple databases selected
9184                         # so process each database.
9186                         # Define some variables for later.
9188                         my %database_list;
9189                         my $databasename;
9190                         my $database;
9191                         my $database_filename_check;
9192                         my $database_maxlength_check;
9193                         my $database_count = 0;
9194                         my $database_info_name;
9196                         # Connect to the database server.
9198                         $kiriwrite_dbmodule->connect();
9200                         # Check if any errors occured while connecting to the database server.
9202                         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9204                                 # A database connection error has occured so return
9205                                 # an error.
9207                                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9209                         }
9211                         foreach $databasename (@selectedlist){
9213                                 # Check if the database is in the database
9214                                 # directory and skip it if it isn't.
9215  
9216                                 $database_filename_check        = kiriwrite_variablecheck($databasename, "filename", "", 1);
9217                                 $database_maxlength_check       = kiriwrite_variablecheck($databasename, "maxlength", 32, 1);
9218  
9219                                 if ($database_filename_check ne 0 || $database_maxlength_check ne 0){
9220  
9221                                         # The database filename given is invalid or
9222                                         # the database filename given is too long
9223                                         # so process the next database.
9224  
9225                                         next;
9226  
9227                                 }
9229                                 # Select the database to add the page to.
9231                                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasename });
9233                                 # Check if any errors had occured while selecting the database.
9235                                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9237                                         # The database does not exist, so process the next database.
9239                                         next;
9241                                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9243                                         # The database has invalid permissions set, so process
9244                                         # the next database.
9246                                         next;
9248                                 }
9250                                 # Get information about the database.
9252                                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9254                                 # Check if any error occured while getting the database information.
9256                                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9258                                         # A database error has occured so process the next
9259                                         # database.
9261                                         next;
9263                                 };
9265                                 $database_list{$database_count}{Name}           = $database_info{"DatabaseName"};
9266                                 $database_list{$database_count}{Filename}       = $databasename;
9268                                 $database_count++;
9270                         }
9272                         # Check if any databases are available to be compiled.
9274                         if ($database_count eq 0){
9276                                 # No databases are available to be compiled.
9278                                 kiriwrite_error("nodatabaseselected");
9280                         }
9282                         # Write out the form for compiling the database.
9284                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabases}, { Style => "pageheader" });
9285                         $kiriwrite_presmodule->addlinebreak();
9286                         $kiriwrite_presmodule->addlinebreak();
9287                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9288                         $kiriwrite_presmodule->startbox();
9289                         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9290                         $kiriwrite_presmodule->addhiddendata("action", "compile");
9291                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9292                         $kiriwrite_presmodule->addhiddendata("count", $database_count);
9293                         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9294                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabasesmessage});
9295                         $kiriwrite_presmodule->addlinebreak();
9296                         $kiriwrite_presmodule->addlinebreak();
9297                         $kiriwrite_presmodule->startbox("datalist");
9299                         $database_count = 0;
9301                         # write out the list of databases to compile.
9303                         foreach $database (keys %database_list){
9305                                 $database_count++;
9307                                 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9308                                 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9310                                 # Check if the database name is undefined and if it is
9311                                 # then write a message saying the database name is blank.
9313                                 if (!$database_list{$database}{Name}){
9314                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{compile}->{blankdatabasename});
9315                                 } else {
9316                                         $kiriwrite_presmodule->addtext($database_list{$database}{Name});
9317                                 }
9319                                 $kiriwrite_presmodule->addlinebreak();
9321                         }
9323                         $kiriwrite_presmodule->endbox();
9325                         # Disconnect from the database server.
9327                         $kiriwrite_dbmodule->disconnect();
9329                         $kiriwrite_presmodule->addlinebreak();
9330                         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselecteddatabasesbutton});
9331                         $kiriwrite_presmodule->addtext(" | ");
9332                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9333                         $kiriwrite_presmodule->endbox();
9334                         $kiriwrite_presmodule->endform();
9336                         return $kiriwrite_presmodule->grab();
9338                 } else {
9340                         # The type is something else other than
9341                         # single or multiple, so return an error.
9343                         kiriwrite_error("invalidvariable");
9345                 }
9347         } else {
9349                 # The confirm value is neither 0 or 1, so
9350                 # return an error.
9352                 kiriwrite_error("invalidvariable");
9354         }
9358 sub kiriwrite_compile_all{
9359 #################################################################################
9360 # kiriwrite_compile_all: Compile all of the databases in the database           #
9361 # directory.                                                                    #
9362 #                                                                               #
9363 # Usage:                                                                        #
9364 #                                                                               #
9365 # kiriwrite_compile_all();                                                      #
9366 #################################################################################
9368         # Connect to the database server.
9370         $kiriwrite_dbmodule->connect();
9372         # Check if any errors occured while connecting to the database server.
9374         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9376                 # A database connection error has occured so return
9377                 # an error.
9379                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9381         }
9383         # Get the list of available databases.
9385         my @database_list = $kiriwrite_dbmodule->getdblist();
9387         # Check if any errors occured while getting the databases.
9389         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9391                 # The database directory is missing so return an error.
9393                 kiriwrite_error("datadirectorymissing");
9395         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9397                 # The database directory has invalid permissions set so return
9398                 # an error.
9400                 kiriwrite_error("datadirectoryinvalidpermissions");
9402         }
9404         # Define some variables for later.
9406         my $database;
9407         my $database_name_filename_check;
9408         my $database_count              = 0;
9410         # Check the list of databases to compile to see if it is blank,
9411         # if it is then return an error.
9413         if (!@database_list){
9415                 # The list of database is blank so return an error.
9417                 kiriwrite_error("nodatabasesavailable");
9419         }
9421         # Write out a form for confirming the action to compile all of the databases.
9423         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabases}, { Style => "pageheader" });
9424         $kiriwrite_presmodule->addlinebreak();
9425         $kiriwrite_presmodule->addlinebreak();
9427         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9428         $kiriwrite_presmodule->startbox();
9429         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9430         $kiriwrite_presmodule->addhiddendata("action", "compile");
9431         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9433         foreach $database (@database_list){
9435                 # Check if the database filename is blank.
9437                 if ($database eq ""){
9439                         # The database filename is blank so process
9440                         # the next database.
9442                         next;
9444                 }
9446                 # Check if the database filename is valid before
9447                 # using the database.
9449                 $database_name_filename_check   = kiriwrite_variablecheck($database, "filename", 0, 1);
9451                 if ($database_name_filename_check ne 0){
9453                         # The database filename is invalid so process
9454                         # the next database.
9456                         next;
9458                 }
9460                 $database_count++;
9461                 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database);
9462                 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9464         }
9466         $kiriwrite_presmodule->addhiddendata("count", $database_count);
9468         # Disconnect from the database server.
9470         $kiriwrite_dbmodule->disconnect();
9472         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabasesmessage});
9473         $kiriwrite_presmodule->addlinebreak();
9474         $kiriwrite_presmodule->addlinebreak();
9476         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9477         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compilealldatabasesbutton});
9478         $kiriwrite_presmodule->addtext(" | ");
9479         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9480         $kiriwrite_presmodule->endbox();
9481         $kiriwrite_presmodule->endform();
9483         return $kiriwrite_presmodule->grab();
9487 sub kiriwrite_selectedlist{
9488 #################################################################################
9489 # kiriwrite_page_selectedlist: Get the list of selected pages to use.           #
9490 #                                                                               #
9491 # Usage:                                                                        #
9492 #                                                                               #
9493 # kiriwrite_page_selectedlist();                                                #
9494 #################################################################################
9496         # Load the required Perl modules.
9498         my $query = new CGI;
9500         my $count       = $query->param('count');
9502         # Check if the list of files has a value and if not set it 0.
9504         if (!$count){
9506                 $count = 0;
9508         }
9510         # Define some values for later.
9512         my @filename_list; 
9513         my @selected_list;
9514         my @final_list;
9516         my $filename;
9517         my $selected;
9519         my $final_count = 0;
9520         my $seek = 0;
9522         # Get the list of filenames.
9524         do {
9526                 # Get the values from id[]
9528                 $seek++;
9530                 $filename               = $query->param('id[' . $seek . ']');
9531                 $filename_list[$seek]   = $filename;
9533         } until ($seek eq $count || $count eq 0);
9535         # Get the list of selected filenames.
9537         $seek = 0;
9539         do {
9541                 # Get the values from name[]
9543                 $seek++;
9545                 $selected       = $query->param('name[' . $seek . ']');
9547                 if (!$selected){
9549                         $selected = 'off';
9551                 }
9553                 $selected_list[$seek]   = $selected;
9555         } until ($seek eq $count || $count eq 0);
9557         # Create a final list of filenames to be used for
9558         # processing.
9560         $seek = 0;
9562         do {
9564                 # Check if the selected value is on and include
9565                 # the filename in the final list.
9567                 $seek++;
9569                 $selected       = $selected_list[$seek];
9571                 if ($selected eq "on"){
9573                         $filename       = $filename_list[$seek];
9574                         $final_list[$final_count] = $filename;
9575                         $final_count++;
9577                 }
9579         } until ($seek eq $count || $count eq 0);
9581         return @final_list;
9585 sub kiriwrite_compile_list{
9586 #################################################################################
9587 # kiriwrite_compile_list: Shows a list of databases that can be compiled.       #
9588 #                                                                               #
9589 # Usage:                                                                        #
9590 #                                                                               #
9591 # kiriwrite_compile_list();                                                     #
9592 #################################################################################
9594         # Define the following variables that are going to be used before using 
9595         # the foreach function.
9597         my %database_info;
9598         my %database_list;
9599         my $database_count = 0;
9600         my $database_filename = "";
9601         my $database_filename_friendly = "";
9602         my $database_permissions = "";
9603         my $database_name = "";
9604         my $database_description = "";
9605         my $data_file = "";
9606         my @permissions_list;
9607         my @error_list;
9608         my $table_style = 0;
9609         my $table_style_name = "";
9610         my $database;
9612         tie(%database_list, 'Tie::IxHash');
9614         # Connect to the database server.
9616         $kiriwrite_dbmodule->connect();
9618         # Check if any errors occured while connecting to the database server.
9620         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9622                 # A database connection error has occured so return
9623                 # an error.
9625                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9627         }
9629         # Get the list of available databases and process any errors that
9630         # might have occured.
9632         my @database_list = $kiriwrite_dbmodule->getdblist();
9634         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9636                 # The database directory is missing so return an error.
9638                 kiriwrite_error("datadirectorymissing");
9640         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9642                 # The database directory has invalid permissions set so return
9643                 # an error.
9645                 kiriwrite_error("datadirectoryinvalidpermissions");
9647         }
9649         # Begin creating the table for the list of databases.
9651         foreach $data_file (@database_list){
9653                 # Select the database.
9655                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
9657                 # Check if any error occured while selecting the database.
9659                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9661                         # The database does not exist, so process the next
9662                         # database.
9664                         next;
9666                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
9668                         # The database has invalid permissions settings, so
9669                         # add the database to the list of databases with
9670                         # invalid permissions set and process the next
9671                         # database.
9673                         push(@permissions_list, $data_file);
9674                         next;
9676                 }
9678                 # Get information about the database.
9680                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9682                 # Check if any error occured while getting information from the
9683                 # database.
9685                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9687                         # A database error has occured, add the database and specific
9688                         # error message to the list of databases with errors and
9689                         # process the next database.
9691                         push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
9692                         next;
9694                 }
9696                 $database_name          = $database_info{"DatabaseName"};
9697                 $database_description   = $database_info{"Description"};
9699                 # Create a friendly name for the database.
9701                 $database_filename_friendly = $data_file;
9703                 # Append the database information to the table.
9705                 $database_list{$database_count}{Filename}       = $database_filename_friendly;
9706                 $database_list{$database_count}{Name}           = $database_name;
9707                 $database_list{$database_count}{Description}    = $database_description;
9709                 $database_count++;
9711         }
9713         # Check if there are no valid databases are if there is no
9714         # valid databases then write a message saying that no
9715         # valid databases are available.
9717         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilepages}, { Style => "pageheader" });
9718         $kiriwrite_presmodule->addlinebreak();
9719         $kiriwrite_presmodule->addlinebreak();
9721         if ($database_count eq 0){
9723                 # There are no databases available for compiling so
9724                 # write a message instead.
9726                 $kiriwrite_presmodule->startbox("errorbox");
9727                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{nodatabasesavailable});
9728                 $kiriwrite_presmodule->endbox();
9730         } else {
9732                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9733                 $kiriwrite_presmodule->startbox();
9734                 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9735                 $kiriwrite_presmodule->addhiddendata("action", "compile");
9736                 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9738                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
9739                 $kiriwrite_presmodule->addtext(" | ");
9740                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselectedbutton});
9741                 $kiriwrite_presmodule->addlinebreak();
9742                 $kiriwrite_presmodule->addlinebreak();
9743                 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9744                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
9746                 $kiriwrite_presmodule->startheader();
9747                 $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
9748                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
9749                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
9750                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
9751                 $kiriwrite_presmodule->endheader();
9753                 $database_count = 1;
9755                 foreach $database (keys %database_list){
9757                         # Check the style to be used with.
9759                         if ($table_style eq 0){
9761                                 # Use the first style and set the style value
9762                                 # to use the next style, the next time the
9763                                 # if statement is checked.
9765                                 $table_style_name = "tablecell1";
9766                                 $table_style = 1;
9768                         } else {
9770                                 # Use the second style and set the style
9771                                 # value to use the first style, the next
9772                                 # time if statement is checked.
9774                                 $table_style_name = "tablecell2";
9775                                 $table_style = 0;
9776                         }
9778                         # Add the template to the list of available
9779                         # templates to compile.
9781                         $kiriwrite_presmodule->startrow();
9782                         $kiriwrite_presmodule->addcell($table_style_name);
9783                         $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9784                         $kiriwrite_presmodule->addcheckbox("name[" . $database_count . "]");
9785                         $kiriwrite_presmodule->endcell();
9786                         $kiriwrite_presmodule->addcell($table_style_name);
9788                         if (!$database_list{$database}{Name}){
9789                                 $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}) });
9790                         } else {
9791                                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_list{$database}{Filename}, { Text => $database_list{$database}{Name} });
9792                         }
9794                         $kiriwrite_presmodule->endcell();
9795                         $kiriwrite_presmodule->addcell($table_style_name);
9797                         if (!$database_list{$database}{Description}){
9798                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
9799                         } else {
9800                                 $kiriwrite_presmodule->addtext($database_list{$database}{Description});
9801                         }
9803                         $kiriwrite_presmodule->endcell();
9804                         $kiriwrite_presmodule->addcell($table_style_name);
9805                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile&action=compile&type=single&database=" . $database_list{$database}{Filename}, { Text => $kiriwrite_lang->{options}->{compile} });
9806                         $kiriwrite_presmodule->endcell();
9807                         $kiriwrite_presmodule->endrow();
9809                         $database_count++;
9811                 }
9813                 $kiriwrite_presmodule->endtable();
9814                 $kiriwrite_presmodule->endbox();
9815                 $kiriwrite_presmodule->endform();
9817         }
9819         # Disconnect from the database server.
9821         $kiriwrite_dbmodule->disconnect();
9823         # Check if any databases with problems have appeared and if they
9824         # have, print out a message saying which databases have problems.
9826         if (@permissions_list){
9828                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
9829                 $kiriwrite_presmodule->addlinebreak();
9830                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
9831                 $kiriwrite_presmodule->addlinebreak();
9832  
9833                 foreach $database (@permissions_list){
9834  
9835                         $kiriwrite_presmodule->addlinebreak();
9836                         $kiriwrite_presmodule->addtext($database);
9837  
9838                 }
9839  
9840                 $kiriwrite_presmodule->addlinebreak();
9841                 $kiriwrite_presmodule->addlinebreak();
9843         }
9845         if (@error_list){
9847                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
9848                 $kiriwrite_presmodule->addlinebreak();
9849                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
9850                 $kiriwrite_presmodule->addlinebreak();
9852                 foreach $database (@error_list){
9854                         $kiriwrite_presmodule->addlinebreak();
9855                         $kiriwrite_presmodule->addtext($database);
9857                 }
9859         }
9861         return $kiriwrite_presmodule->grab();
9865 sub kiriwrite_compile_clean{
9866 #################################################################################
9867 # kiriwrite_compile_clean: Deletes the contents of the output directory.        #
9868 #                                                                               #
9869 # Usage:                                                                        #
9870 #                                                                               #
9871 # kiriwrite_compile_clean(confirm);                                             #
9872 #                                                                               #
9873 # confirm       Confirms the deletion of files from the output directory.       #
9874 #################################################################################
9876         # Get the values passed to the subroutine.
9878         my ($confirm) = @_;
9880         # Define some variables for later.
9882         my $file_permissions;
9883         my $output_directory_exists;
9884         my $output_directory_permissions;
9885         my $warning_message;
9887         # Check if the output directory exists.
9889         $output_directory_exists         = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"});
9891         if ($output_directory_exists eq 1){
9893                 # The output directory does not exist so return
9894                 # an error.
9896                 kiriwrite_error("outputdirectorymissing");
9898         }
9900         # Check if the output directory has invalid
9901         # permissions set.
9903         $output_directory_permissions   = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"});
9905         if ($output_directory_permissions eq 1){
9907                 # The output directory has invalid permissions
9908                 # set, so return an error.
9910                 kiriwrite_error("outputdirectoryinvalidpermissions");
9912         }
9914         if ($confirm) {
9916                 if ($confirm eq 1){
9918                         # The action to clean the output directory has been
9919                         # confirmed.
9921                         # Remove the list of files and directories from the
9922                         # output directory.
9924                         $file_permissions = kiriwrite_compile_clean_helper($kiriwrite_config{"directory_data_output"}, 1);
9926                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9928                         if ($file_permissions eq 1){
9930                                 $kiriwrite_presmodule->addlinebreak();
9931                                 $kiriwrite_presmodule->addlinebreak();
9932                                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{somecontentnotremoved});
9933                                 $kiriwrite_presmodule->addlinebreak();
9934                                 $kiriwrite_presmodule->addlinebreak();
9936                         } else {
9938                                 $kiriwrite_presmodule->addlinebreak();
9939                                 $kiriwrite_presmodule->addlinebreak();
9940                                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{contentremoved});
9941                                 $kiriwrite_presmodule->addlinebreak();
9942                                 $kiriwrite_presmodule->addlinebreak();
9944                         }
9946                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9948                         return $kiriwrite_presmodule->grab();
9950                 } else {
9952                         # A value other than 1 is set for the confirm value
9953                         # (which it shouldn't be) so return an error.
9955                         kiriwrite_error("invalidvariable");
9957                 }
9959         }
9961         # Print out a form for cleaning the output directory.
9963         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9964         $kiriwrite_presmodule->addlinebreak();
9965         $kiriwrite_presmodule->addlinebreak();
9966         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9967         $kiriwrite_presmodule->startbox();
9968         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9969         $kiriwrite_presmodule->addhiddendata("action", "clean");
9970         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9971         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectorymessage});
9972         $kiriwrite_presmodule->addlinebreak();
9973         $kiriwrite_presmodule->addlinebreak();
9974         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{cleanoutputdirectorybutton});
9975         $kiriwrite_presmodule->addtext(" | ");
9976         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist}});
9977         $kiriwrite_presmodule->endbox();
9978         $kiriwrite_presmodule->endform();
9980         return $kiriwrite_presmodule->grab();
9984 sub kiriwrite_compile_clean_helper{
9985 #################################################################################
9986 # kiriwrite_compile_clean_helper: Helper for cleaning out the output directory. #
9987 # This command sometimes is called recursively (when a directory is found).     #
9988 #                                                                               #
9989 # Usage:                                                                        #
9990 #                                                                               #
9991 # kiriwrite_compile_clean_helper(directory, removedirectory, [permissions]);    #
9992 #                                                                               #
9993 # directory             Specifies the directory to remove files (and            #
9994 #                       sub-directories) from.                                  #
9995 # keepdirectory         Keeps the directory itself after all files have been    #
9996 #                       removed.                                                #
9997 # permissions           Used recursively for error checking.                    #
9998 #################################################################################
10000         # Get the values passed to the subroutine.
10002         my ($directory, $directory_keep, $permissions) = @_;
10004         # Check if the directory_keep is only one charater long.
10006         my $directory_file = "";
10007         my @directory_list;
10008         my $file_permissions = 0;
10009         my $debug = 0;
10011         # Check if the file permissions value is blank.
10013         if (!$permissions){
10015                 # The file permissions value is blank.
10017                 $permissions = 0;
10019         }
10021         # Open the directory specified, read the contents of
10022         # the directory and then close the directory.
10024         opendir(DIRECTORY, $directory);
10025         @directory_list = readdir(DIRECTORY);
10026         closedir(DIRECTORY);
10028         # Remove each file and directory.
10030         foreach $directory_file (@directory_list){
10032                 # Check if the filename is '.' or '..' and if it
10033                 # is skip those files.
10035                 if ($directory_file eq "." || $directory_file eq ".."){
10037                         # The filename is '.' or '..' so skip processing
10038                         # these files.
10040                 } else {
10042                         # Check if the permissions on the file or directory has
10043                         # valid permissions set.
10045                         $file_permissions = kiriwrite_filepermissions($directory . '/' . $directory_file, 1, 1);
10047                         if ($file_permissions eq 1){
10049                                 # The file or directory has invalid permissions set.
10051                                 $permissions = 1;
10052                                 next;
10054                         }
10056                         # Check if the filename is a directory.
10058                         if (-d $directory . '/' . $directory_file){
10060                                 # The filename is a directory so send the directory name
10061                                 # and this subroutine again (recursively).
10063                                 kiriwrite_compile_clean_helper($directory . '/' . $directory_file, 0, $permissions);
10065                         } else {
10067                                 # The file is not a directory but an actual file so
10068                                 # remove as normal (in terms of the Perl language).
10070                                 ($directory) = $directory =~ m/^(.*)$/g;
10071                                 ($directory_file) = $directory_file =~ m/^(.*)$/g;
10073                                 # Check if the directory is undefined and if it is then
10074                                 # set it to blank.
10076                                 if (!$directory){
10077                                         $directory = "";
10078                                 }
10080                                 if (!$directory_file){
10081                                         $directory_file = "";
10082                                 }
10084                                 unlink($directory . '/' . $directory_file);
10086                         }
10088                 }
10090         }
10092         # Check if the directory should be kept.
10094         if ($directory_keep eq 1){
10096                 # The directory_keep value is set as 1 so the directory
10097                 # specified should be kept.
10099         } elsif ($directory_keep eq 0) {
10101                 # The directory_keep value is set as 0 so remove the
10102                 # directory specified.
10104                 ($directory) = $directory =~ m/^(.*)$/g;
10105                 rmdir($directory);
10107         } else {
10109                 # A value other than 0 or 1 was specified so return
10110                 # an error,
10112                 kiriwrite_error('invalidvalue');
10114         }
10116         return $permissions;
10120 sub kiriwrite_settings_view{
10121 #################################################################################
10122 # kiriwrite_options_view: Writes out the list of options and variables.         #
10123 #                                                                               #
10124 # Usage:                                                                        #
10125 #                                                                               #
10126 # kiriwrite_settings_view();                                                    #
10127 #################################################################################
10129         # Get the settings.
10131         my $settings_directory_db               = $kiriwrite_config{"directory_data_db"};
10132         my $settings_directory_output           = $kiriwrite_config{"directory_data_output"};
10133         my $settings_noncgi_images              = $kiriwrite_config{"directory_noncgi_images"};
10134         my $settings_system_datetime            = $kiriwrite_config{"system_datetime"};
10135         my $settings_system_language            = $kiriwrite_config{"system_language"};
10136         my $settings_system_presentation        = $kiriwrite_config{"system_presmodule"};
10137         my $settings_system_database            = $kiriwrite_config{"system_dbmodule"};
10139         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{viewsettings}, { Style => "pageheader" });
10140         $kiriwrite_presmodule->addlinebreak();
10141         $kiriwrite_presmodule->addlinebreak();
10142         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{currentsettings});
10143         $kiriwrite_presmodule->addlinebreak();
10144         $kiriwrite_presmodule->addlinebreak();
10145         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10147         $kiriwrite_presmodule->startheader();
10148         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10149         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10150         $kiriwrite_presmodule->endheader();
10152         $kiriwrite_presmodule->startrow();
10153         $kiriwrite_presmodule->addcell("tablecellheader");
10154         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10155         $kiriwrite_presmodule->endcell();
10156         $kiriwrite_presmodule->addcell("tablecellheader");
10157         $kiriwrite_presmodule->endcell();
10158         $kiriwrite_presmodule->endrow();
10160         $kiriwrite_presmodule->startrow();
10161         $kiriwrite_presmodule->addcell("tablecell1");
10162         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10163         $kiriwrite_presmodule->endcell();
10164         $kiriwrite_presmodule->addcell("tablecell2");
10165         $kiriwrite_presmodule->addtext($settings_directory_db);
10166         $kiriwrite_presmodule->endcell();
10167         $kiriwrite_presmodule->endrow();
10169         $kiriwrite_presmodule->startrow();
10170         $kiriwrite_presmodule->addcell("tablecell1");
10171         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
10172         $kiriwrite_presmodule->endcell();
10173         $kiriwrite_presmodule->addcell("tablecell2");
10174         $kiriwrite_presmodule->addtext($settings_directory_output);
10175         $kiriwrite_presmodule->endcell();
10176         $kiriwrite_presmodule->endrow();
10178         $kiriwrite_presmodule->startrow();
10179         $kiriwrite_presmodule->addcell("tablecell1");
10180         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
10181         $kiriwrite_presmodule->endcell();
10182         $kiriwrite_presmodule->addcell("tablecell2");
10183         $kiriwrite_presmodule->addtext($settings_noncgi_images);
10184         $kiriwrite_presmodule->endcell();
10185         $kiriwrite_presmodule->endrow();
10187         $kiriwrite_presmodule->startrow();
10188         $kiriwrite_presmodule->addcell("tablecellheader");
10189         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
10190         $kiriwrite_presmodule->endcell();
10191         $kiriwrite_presmodule->addcell("tablecellheader");
10192         $kiriwrite_presmodule->endcell();
10193         $kiriwrite_presmodule->endrow();
10195         $kiriwrite_presmodule->startrow();
10196         $kiriwrite_presmodule->addcell("tablecell1");
10197         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
10198         $kiriwrite_presmodule->endcell();
10199         $kiriwrite_presmodule->addcell("tablecell2");
10200         $kiriwrite_presmodule->addtext($settings_system_datetime);
10201         $kiriwrite_presmodule->endcell();
10202         $kiriwrite_presmodule->endrow();
10204         $kiriwrite_presmodule->startrow();
10205         $kiriwrite_presmodule->addcell("tablecellheader");
10206         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
10207         $kiriwrite_presmodule->endcell();
10208         $kiriwrite_presmodule->addcell("tablecellheader");
10209         $kiriwrite_presmodule->endcell();
10210         $kiriwrite_presmodule->endrow();
10212         $kiriwrite_presmodule->startrow();
10213         $kiriwrite_presmodule->addcell("tablecell1");
10214         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
10215         $kiriwrite_presmodule->endcell();
10216         $kiriwrite_presmodule->addcell("tablecell2");
10217         $kiriwrite_presmodule->addtext($settings_system_language);
10218         $kiriwrite_presmodule->endcell();
10219         $kiriwrite_presmodule->endrow();
10221         $kiriwrite_presmodule->startrow();
10222         $kiriwrite_presmodule->addcell("tablecellheader");
10223         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
10224         $kiriwrite_presmodule->endcell();
10225         $kiriwrite_presmodule->addcell("tablecellheader");
10226         $kiriwrite_presmodule->endcell();
10227         $kiriwrite_presmodule->endrow();
10229         $kiriwrite_presmodule->startrow();
10230         $kiriwrite_presmodule->addcell("tablecell1");
10231         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
10232         $kiriwrite_presmodule->endcell();
10233         $kiriwrite_presmodule->addcell("tablecell2");
10234         $kiriwrite_presmodule->addtext($settings_system_presentation);
10235         $kiriwrite_presmodule->endcell();
10236         $kiriwrite_presmodule->endrow();
10238         $kiriwrite_presmodule->startrow();
10239         $kiriwrite_presmodule->addcell("tablecell1");
10240         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
10241         $kiriwrite_presmodule->endcell();
10242         $kiriwrite_presmodule->addcell("tablecell2");
10243         $kiriwrite_presmodule->addtext($settings_system_database);
10244         $kiriwrite_presmodule->endcell();
10245         $kiriwrite_presmodule->endrow();
10247         $kiriwrite_presmodule->endtable();
10249         $kiriwrite_presmodule->addlinebreak();
10250         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{altersettings});
10252         return $kiriwrite_presmodule->grab();
10256 sub kiriwrite_settings_edit{
10257 #################################################################################
10258 # kiriwrite_settings_edit: Edits the options.                                   #
10259 #                                                                               #
10260 # Usage:                                                                        #
10261 #                                                                               #
10262 # kiriwrite_settings_edit(options);                                             #
10263 #                                                                               #
10264 # options               Specifies the following options in any order.           #
10265 #                                                                               #
10266 # DatabaseDirectory     Specifies the new database directory to use.            #
10267 # OutputDirectory       Specifies the new output directory to use.              #
10268 # ImagesURIPath         Specifies the new URI path for images.                  #
10269 # DateTimeFormat        Specifies the new date and time format.                 #
10270 # SystemLanguage        Specifies the new language to use for Kiriwrite.        #
10271 # PrsentationModule     Specifies the new presentation module to use for        #
10272 #                       Kiriwrite.                                              #
10273 # DatabaseModule        Specifies the new database module to use for Kiriwrite. #
10274 #                                                                               #
10275 # Options for server-based database modules.                                    #
10276 #                                                                               #
10277 # DatabaseServer        Specifies the database server to use.                   #
10278 # DaravasePort          Specifies the port the database server is running on.   #
10279 # DatabaseProtocol      Specifies the protocol the database server is using.    #
10280 # DatabaseSQLDatabase   Specifies the SQL database name to use.                 #
10281 # DatabaseUsername      Specifies the database server username.                 #
10282 # DatabasePasswordKeep  Keeps the current password in the configuration file.   #
10283 # DatabasePassword      Specifies the password for the database server username.#
10284 # DatabaseTablePrefix   Specifies the prefix used for tables.                   #
10285 #################################################################################
10287         # Get the values that have been passed to the subroutine.
10289         my ($passedoptions) = @_;
10291         # Get the values from the hash.
10293         my $settings_dbdirectory                = $passedoptions->{"DatabaseDirectory"};
10294         my $settings_outputdirectory            = $passedoptions->{"OutputDirectory"};
10295         my $settings_imagesuri                  = $passedoptions->{"ImagesURIPath"};
10296         my $settings_datetimeformat             = $passedoptions->{"DateTimeFormat"};
10297         my $settings_languagesystem             = $passedoptions->{"SystemLanguage"};
10298         my $settings_presmodule                 = $passedoptions->{"PresentationModule"};
10299         my $settings_dbmodule                   = $passedoptions->{"DatabaseModule"};
10301         my $settings_database_server            = $passedoptions->{"DatabaseServer"};
10302         my $settings_database_port              = $passedoptions->{"DatabasePort"};
10303         my $settings_database_protocol          = $passedoptions->{"DatabaseProtocol"};
10304         my $settings_database_sqldatabase       = $passedoptions->{"DatabaseSQLDatabase"};
10305         my $settings_database_username          = $passedoptions->{"DatabaseUsername"};
10306         my $settings_database_passwordkeep      = $passedoptions->{"DatabasePasswordKeep"};
10307         my $settings_database_password          = $passedoptions->{"DatabasePassword"};
10308         my $settings_database_tableprefix       = $passedoptions->{"DatabaseTablePrefix"};
10310         my $confirm                             = $passedoptions->{"Confirm"};
10312         # Load the required Perl modules.
10314         my $xsl = XML::Simple->new();
10316         if (!$confirm){
10318                 # If the confirm value is blank, then set the confirm
10319                 # value to 0.
10321                 $confirm = 0;
10323         }
10325         if ($confirm eq "1"){
10327                 # The action to edit the settings has been confirmed.
10328                 # Start by checking each variable about to be placed
10329                 # in the settings file is valid.
10331                 # Deinfe some variables for later.
10333                 my @kiriwrite_new_settings;
10335                 # Check the length of the directory names.
10337                 kiriwrite_variablecheck($settings_dbdirectory, "maxlength", 64, 0);
10338                 kiriwrite_variablecheck($settings_outputdirectory, "maxlength", 64, 0);
10339                 kiriwrite_variablecheck($settings_imagesuri, "maxlength", 512, 0);
10340                 kiriwrite_variablecheck($settings_datetimeformat, "maxlength", 32, 0);
10342                 kiriwrite_variablecheck($settings_languagesystem, "language_filename", "", 0);
10344                 # Check the module names to see if they're valid.
10346                 my $kiriwrite_presmodule_modulename_check       = kiriwrite_variablecheck($settings_presmodule, "module", 0, 1);
10347                 my $kiriwrite_dbmodule_modulename_check         = kiriwrite_variablecheck($settings_dbmodule, "module", 0, 1);
10349                 if ($kiriwrite_presmodule_modulename_check eq 1){
10351                         # The presentation module name is blank, so return
10352                         # an error.
10354                         kiriwrite_error("presmoduleblank");
10356                 }
10358                 if ($kiriwrite_presmodule_modulename_check eq 2){
10360                         # The presentation module name is invalid, so return
10361                         # an error.
10363                         kiriwrite_error("presmoduleinvalid");
10365                 }
10367                 if ($kiriwrite_dbmodule_modulename_check eq 1){
10369                         # The database module name is blank, so return
10370                         # an error.
10372                         kiriwrite_error("dbmoduleblank");
10374                 }
10376                 if ($kiriwrite_dbmodule_modulename_check eq 2){
10378                         # The database module name is invalid, so return
10379                         # an error.
10381                         kiriwrite_error("dbmoduleinvalid");
10383                 }
10385                 # Check if the directory names only contain letters and numbers and
10386                 # return a specific error if they don't.
10388                 my $kiriwrite_dbdirectory_check         = kiriwrite_variablecheck($settings_dbdirectory, "directory", 0, 1);
10389                 my $kiriwrite_outputdirectory_check     = kiriwrite_variablecheck($settings_outputdirectory, "directory", 0, 1);
10390                 kiriwrite_variablecheck($settings_datetimeformat, "datetime", 0, 0);
10392                 if ($kiriwrite_dbdirectory_check eq 1){
10394                         # The database directory name is blank, so return
10395                         # an error.
10397                         kiriwrite_error("dbdirectoryblank");
10399                 } elsif ($kiriwrite_dbdirectory_check eq 2){
10401                         # The database directory name is invalid, so return
10402                         # an error.
10404                         kiriwrite_error("dbdirectoryinvalid");
10406                 }
10408                 if ($kiriwrite_outputdirectory_check eq 1){
10410                         # The output directory name is blank, so return
10411                         # an error.
10413                         kiriwrite_error("outputdirectoryblank");
10415                 } elsif ($kiriwrite_outputdirectory_check eq 2){
10417                         # The output directory name is invalid, so return
10418                         # an error.
10420                         kiriwrite_error("outputdirectoryinvalid");
10422                 }
10424                 # Check if the presentation module with the filename given exists.
10426                 my $presmodule_exists = kiriwrite_fileexists("Modules/Presentation/" . $settings_presmodule . ".pm");
10428                 if ($presmodule_exists eq 1){
10430                         # The presentation module does not exist so return an error.
10432                         kiriwrite_error("presmodulemissing");
10434                 }
10436                 # Check if the database module with the filename given exists.
10438                 my $dbmodule_exists = kiriwrite_fileexists("Modules/Database/" . $settings_dbmodule . ".pm");
10440                 if ($dbmodule_exists eq 1){
10442                         # The database module does not exist so return an error.
10444                         kiriwrite_error("dbmodulemissing");
10446                 }
10448                 # Check if the language filename given exists.
10450                 my $languagefile_exists = kiriwrite_fileexists("lang/" . $settings_languagesystem . ".xml");
10452                 if ($languagefile_exists eq 1){
10454                         # The language filename given does not exist so return an error.
10456                         kiriwrite_error("languagefilenamemissing");             
10458                 }
10460                 # Check the database server options to see if they are valid.
10462                 my $kiriwrite_databaseserver_length_check               = kiriwrite_variablecheck($settings_database_server, "maxlength", 128, 1);
10463                 my $kiriwrite_databaseserver_lettersnumbers_check       = kiriwrite_variablecheck($settings_database_server, "lettersnumbers", 0, 1);
10464                 my $kiriwrite_databaseport_length_check                 = kiriwrite_variablecheck($settings_database_port, "maxlength", 5, 1);
10465                 my $kiriwrite_databaseport_numbers_check                = kiriwrite_variablecheck($settings_database_port, "numbers", 0, 1);
10466                 my $kiriwrite_databaseport_port_check                   = kiriwrite_variablecheck($settings_database_port, "port", 0, 1);
10467                 my $kiriwrite_databaseprotocol_length_check             = kiriwrite_variablecheck($settings_database_protocol, "maxlength", 5, 1);
10468                 my $kiriwrite_databaseprotocol_protocol_check           = kiriwrite_variablecheck($settings_database_protocol, "serverprotocol", 0, 1);
10469                 my $kiriwrite_databasename_length_check                 = kiriwrite_variablecheck($settings_database_sqldatabase, "maxlength", 32, 1);
10470                 my $kiriwrite_databasename_lettersnumbers_check         = kiriwrite_variablecheck($settings_database_sqldatabase, "lettersnumbers", 0, 1);
10471                 my $kiriwrite_databaseusername_length_check             = kiriwrite_variablecheck($settings_database_username, "maxlength", 16, 1);
10472                 my $kiriwrite_databaseusername_lettersnumbers_check     = kiriwrite_variablecheck($settings_database_username, "lettersnumbers", 0, 1);
10473                 my $kiriwrite_databasepassword_length_check             = kiriwrite_variablecheck($settings_database_password, "maxlength", 64, 1);
10474                 my $kiriwrite_databasetableprefix_length_check          = kiriwrite_variablecheck($settings_database_tableprefix, "maxlength", 16, 1);
10475                 my $kiriwrite_databasetableprefix_lettersnumbers_check  = kiriwrite_variablecheck($settings_database_tableprefix, "lettersnumbers", 0, 1);
10477                 if ($kiriwrite_databaseserver_length_check eq 1){
10479                         # The length of the database server name is too long so
10480                         # return an error.
10482                         kiriwrite_error("servernametoolong");
10484                 }
10486                 if ($kiriwrite_databaseserver_lettersnumbers_check eq 1){
10488                         # The database server name contains characters other
10489                         # than letters and numbers, so return an error.
10491                         kiriwrite_error("servernameinvalid");
10493                 }
10495                 if ($kiriwrite_databaseport_length_check eq 1){
10497                         # The database port number length is too long so return
10498                         # an error.
10500                         kiriwrite_error("serverportnumbertoolong");
10502                 }
10504                 if ($kiriwrite_databaseport_numbers_check eq 1){
10506                         # The database port number contains characters other
10507                         # than numbers so return an error.
10509                         kiriwrite_error("serverportnumberinvalidcharacters");
10511                 }
10513                 if ($kiriwrite_databaseport_port_check eq 1){
10515                         # The database port number given is invalid so return
10516                         # an error.
10518                         kiriwrite_error("serverportnumberinvalid");
10520                 }
10522                 if ($kiriwrite_databaseprotocol_length_check eq 1){
10524                         # The database protocol name given is too long so
10525                         # return an error.
10527                         kiriwrite_error("serverprotocolnametoolong");
10529                 }
10531                 if ($kiriwrite_databaseprotocol_protocol_check eq 1){
10533                         # The server protcol given is invalid so return
10534                         # an error.
10536                         kiriwrite_error("serverprotocolinvalid");
10538                 }
10540                 if ($kiriwrite_databasename_length_check eq 1){
10542                         # The SQL database name is too long so return
10543                         # an error.
10545                         kiriwrite_error("serverdatabasenametoolong");
10547                 }
10549                 if ($kiriwrite_databasename_lettersnumbers_check eq 1){
10551                         # The database name contains invalid characters
10552                         # so return an error.
10554                         kiriwrite_error("serverdatabasenameinvalid");
10556                 }
10558                 if ($kiriwrite_databaseusername_length_check eq 1){
10560                         # The database username given is too long so
10561                         # return an error.
10563                         kiriwrite_error("serverdatabaseusernametoolong");
10565                 }
10567                 if ($kiriwrite_databaseusername_lettersnumbers_check eq 1){
10569                         # The database username contains invalid characters
10570                         # so return an error.
10572                         kiriwrite_error("serverdatabaseusernameinvalid");
10574                 }
10576                 if ($kiriwrite_databasepassword_length_check eq 1){
10578                         # The database password given is too long so return
10579                         # an error.
10581                         kiriwrite_error("serverdatabasepasswordtoolong");
10583                 }
10585                 if ($kiriwrite_databasetableprefix_length_check eq 1){
10587                         # The database table prefix given is too long so
10588                         # return an error.
10590                         kiriwrite_error("serverdatabasetableprefixtoolong");
10592                 }
10594                 if ($kiriwrite_databasetableprefix_lettersnumbers_check eq 1){
10596                         # The database table prefix given contains invalid
10597                         # characters so return an error.
10599                         kiriwrite_error("serverdatabasetableprefixinvalid");
10601                 }
10603                 # Check if the current password should be kept.
10605                 if ($settings_database_passwordkeep eq "on"){
10607                         # The current password in the configuration file should be used.
10609                         $settings_database_password     = $kiriwrite_config{"database_password"};
10611                 }
10613                 # Write the new settings to the XML file.
10615                 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 });
10617                 # Write a confirmation message.
10619                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingsedited}, { Style => "pageheader" });
10620                 $kiriwrite_presmodule->addlinebreak();
10621                 $kiriwrite_presmodule->addlinebreak();
10622                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingseditedmessage});
10623                 $kiriwrite_presmodule->addlinebreak();
10624                 $kiriwrite_presmodule->addlinebreak();
10625                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
10627                 return $kiriwrite_presmodule->grab();
10629         }
10631         # Get the list of languages available.
10633         my %language_list;
10634         my @language_directory          = "";
10635         my $language;
10636         my $language_filename           = "";
10637         my $language_file_xml           = "";
10638         my $language_file_systemname    = "";
10639         my $language_file_localname     = "";
10640         my $language_file_seek          = 0;
10641         my $language_flie_dot           = 0;
10642         my $language_file_length        = 0;
10643         my $language_file_count         = 0;
10644         my $language_file_char          = "";
10645         my $language_file_friendly      = "";
10646         my $language_config             = $kiriwrite_config{"system_language"};
10648         tie(%language_list, 'Tie::IxHash');
10650         opendir(LANGUAGEDIR, "lang");
10651         @language_directory = grep /m*\.xml$/, readdir(LANGUAGEDIR);
10652         closedir(LANGUAGEDIR);
10654         # Process each language by loading the XML configuration file
10655         # used for each language and then get the System name and 
10656         # the local name of the language.
10658         foreach $language_filename (@language_directory){
10660                 # Load the language file currently selected.
10662                 $language_file_xml = $xsl->XMLin("lang" . '/' . $language_filename, SuppressEmpty => 1);
10664                 # Get the system name and the local name of the language.
10666                 $language_file_localname = $language_file_xml -> {about} -> {name};
10668                 # Check if either the system name or the local name of the language
10669                 # is blank and if it is, then don't add the language to the list.
10671                 if ($language_file_localname eq ""){
10673                         # The system name or the local name is blank so don't add
10674                         # the language to the list.
10675                 
10676                 } else {
10678                         # Get the 'friendly' name of the language file name (basically
10679                         # remove the .xml part from the filename.
10681                         $language_file_length = length($language_filename);
10683                         do {
10685                                 # Get a character from the language filename and currently
10686                                 # set by the seek counter.
10688                                 $language_file_char = substr($language_filename, $language_file_seek, 1);
10690                                 # Check if the character is a dot and if it is then set the
10691                                 # last dot value to the seek counter value.
10693                                 if ($language_file_char eq "."){
10695                                         # Current chatacter is a dot so set the last dot value 
10696                                         # to what is currently the seek counter.
10698                                         $language_flie_dot = $language_file_seek;
10700                                 } else {
10702                                         # Current character is not a dot, so do nothing.
10704                                 }
10706                                 # Increment the seek counter.
10708                                 $language_file_seek++;
10710                         } until ($language_file_seek eq $language_file_length);
10712                         # Reset the seek counter.
10714                         $language_file_seek = 0;
10716                         # Process the file name again and this time process the file
10717                         # name until it reaches the last dot found.
10719                         do {
10721                                 # Get the character the seek counter is currently set at.
10723                                 $language_file_char = substr($language_filename, $language_file_seek, 1);
10725                                 # Append the character to the friendly file name.
10727                                 $language_file_friendly = $language_file_friendly . $language_file_char;
10729                                 # Increment the seek counter.
10730         
10731                                 $language_file_seek++;
10733                         } until ($language_file_seek eq $language_flie_dot);
10735                         # Append the language to the available languages list.
10737                         $language_list{$language_file_count}{Filename} = $language_file_friendly;
10738                         $language_list{$language_file_count}{Name} = $language_file_localname;
10739                         $language_file_count++;
10741                         # Reset certain counters and values before continuing.
10743                         $language_file_seek     = 0;
10744                         $language_flie_dot      = 0;
10745                         $language_file_length   = 0;
10746                         $language_file_char     = "";
10747                         $language_file_friendly = "";
10749                 }
10751         }
10753         # Get the list of presentation modules available.
10755         my %presmodule_list;
10756         my @presmodule_directory;
10757         my $presmodule;
10758         my $presmodule_file             = "";
10759         my $presmodule_char             = "";
10760         my $presmodule_dot              = 0;
10761         my $presmodule_firstdot         = 0;
10762         my $presmodule_firstdotfound    = "";
10763         my $presmodule_seek             = 0;
10764         my $presmodule_length           = 0;
10765         my $presmodule_count            = 0;
10766         my $presmodule_friendly         = "";
10767         my $presmodule_selectlist       = "";
10768         my $presmodule_config           = $kiriwrite_config{"system_presmodule"};
10770         # Open and get the list of presentation modules (perl modules) by filtering
10771         # out the 
10773         opendir(OUTPUTSYSTEMDIR, "Modules/Presentation");
10774         @presmodule_directory = grep /m*\.pm$/, readdir(OUTPUTSYSTEMDIR);
10775         closedir(OUTPUTSYSTEMDIR);
10777         # Process each presentation module and add them to the list of available
10778         # presentation modules.
10780         foreach $presmodule_file (@presmodule_directory){
10782                 # Get the length of the presentation module (perl module) filename.
10784                 $presmodule_length = length($presmodule_file);
10786                 # Get the friendly name of the Perl module (by getting rid of the
10787                 # .pm part of the filename).
10789                 do {
10791                         $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10793                         # Check if the current character is a dot and if it is then
10794                         # set the last dot found number to the current seek number.
10796                         if ($presmodule_char eq "."){
10798                                 # Put the seek value as the last dot found number.
10800                                 $presmodule_dot = $presmodule_seek;
10802                         }
10804                         # Increment the seek counter.
10806                         $presmodule_seek++;
10808                 } until ($presmodule_seek eq $presmodule_length);
10810                 # Reset the seek counter as it is going to be used again.
10812                 $presmodule_seek = 0;
10814                 # Get the friendly name of the Perl module by the processing the file
10815                 # name to the last dot the previous 'do' tried to find.
10817                 do {
10819                         # Get the character the seek counter is currently set at.
10821                         $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10823                         # Append the character to the friendly name of the presentation module.
10825                         $presmodule_friendly = $presmodule_friendly . $presmodule_char;
10827                         # Increment the seek counter.
10829                         $presmodule_seek++;
10831                 } until ($presmodule_seek eq $presmodule_dot);
10833                 # Append the option to tbe list of available presentation modules.
10835                 $presmodule_list{$presmodule_count}{Filename} = $presmodule_friendly;
10837                 # Reset the following values.
10839                 $presmodule_seek        = 0;
10840                 $presmodule_length      = 0;
10841                 $presmodule_char        = "";
10842                 $presmodule_friendly    = "";
10843                 $presmodule_count++;
10845         }
10847         # Get the list of database modules available.
10849         my %dbmodule_list;
10850         my @dbmodule_directory;
10851         my $dbmodule;
10852         my $dbmodule_file               = "";
10853         my $dbmodule_char               = "";
10854         my $dbmodule_dot                = 0;
10855         my $dbmodule_firstdot           = 0;
10856         my $dbmodule_firstdotfound      = "";
10857         my $dbmodule_seek               = 0;
10858         my $dbmodule_length             = 0;
10859         my $dbmodule_count              = 0;
10860         my $dbmodule_friendly           = "";
10861         my $dbmodule_selectlist         = "";
10862         my $dbmodule_config             = $kiriwrite_config{"system_dbmodule"};
10864         # Open and get the list of presentation modules (perl modules) by filtering
10865         # out the 
10867         opendir(DATABASEDIR, "Modules/Database");
10868         @dbmodule_directory = grep /m*\.pm$/, readdir(DATABASEDIR);
10869         closedir(DATABASEDIR);
10871         # Process each presentation module and add them to the list of available
10872         # presentation modules.
10874         foreach $dbmodule_file (@dbmodule_directory){
10876                 # Get the length of the database module (perl module) filename.
10878                 $dbmodule_length = length($dbmodule_file);
10880                 # Get the friendly name of the Perl module (by getting rid of the
10881                 # .pm part of the filename).
10883                 do {
10885                         $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10887                         # Check if the current character is a dot and if it is then
10888                         # set the last dot found number to the current seek number.
10890                         if ($dbmodule_char eq "."){
10892                                 # Put the seek value as the last dot found number.
10894                                 $dbmodule_dot = $dbmodule_seek;
10896                         }
10898                         # Increment the seek counter.
10900                         $dbmodule_seek++;
10902                 } until ($dbmodule_seek eq $dbmodule_length);
10904                 # Reset the seek counter as it is going to be used again.
10906                 $dbmodule_seek = 0;
10908                 # Get the friendly name of the Perl module by the processing the file
10909                 # name to the last dot the previous 'do' tried to find.
10911                 do {
10913                         # Get the character the seek counter is currently set at.
10915                         $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10917                         # Append the character to the friendly name of the presentation module.
10919                         $dbmodule_friendly = $dbmodule_friendly . $dbmodule_char;
10921                         # Increment the seek counter.
10923                         $dbmodule_seek++;
10925                 } until ($dbmodule_seek eq $dbmodule_dot);
10927                 # Append the option to tbe list of available database modules.
10929                 $dbmodule_list{$dbmodule_count}{Filename} = $dbmodule_friendly;
10931                 # Reset the following values.
10933                 $dbmodule_seek  = 0;
10934                 $dbmodule_length        = 0;
10935                 $dbmodule_char          = "";
10936                 $dbmodule_friendly      = "";
10937                 $dbmodule_count++;
10939         }
10941         # Get the directory settings.
10943         my $directory_settings_database         = $kiriwrite_config{"directory_data_db"};
10944         my $directory_settings_output           = $kiriwrite_config{"directory_data_output"};
10945         my $directory_settings_imagesuri        = $kiriwrite_config{"directory_noncgi_images"};
10946         my $datetime_setting                    = $kiriwrite_config{"system_datetime"};
10948         my $database_server                     = $kiriwrite_config{"database_server"};
10949         my $database_port                       = $kiriwrite_config{"database_port"};
10950         my $database_protocol                   = $kiriwrite_config{"database_protocol"};
10951         my $database_sqldatabase                = $kiriwrite_config{"database_sqldatabase"};
10952         my $database_username                   = $kiriwrite_config{"database_username"};
10953         my $database_passwordhash               = $kiriwrite_config{"database_passwordhash"};
10954         my $database_password                   = $kiriwrite_config{"database_password"};
10955         my $database_prefix                     = $kiriwrite_config{"database_tableprefix"};
10957         # Print out a form for editing the settings.
10959         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{editsettings}, { Style => "pageheader" });
10960         $kiriwrite_presmodule->addlinebreak();
10961         $kiriwrite_presmodule->addlinebreak();
10962         $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{setting}->{warning});
10963         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{warningmessage});
10964         $kiriwrite_presmodule->addlinebreak();
10965         $kiriwrite_presmodule->addlinebreak();
10967         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
10968         $kiriwrite_presmodule->startbox();
10969         $kiriwrite_presmodule->addhiddendata("mode", "settings");
10970         $kiriwrite_presmodule->addhiddendata("action", "edit");
10971         $kiriwrite_presmodule->addhiddendata("confirm", 1);
10973         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10975         $kiriwrite_presmodule->startheader();
10976         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10977         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10978         $kiriwrite_presmodule->endheader();
10980         $kiriwrite_presmodule->startrow();
10981         $kiriwrite_presmodule->addcell("tablecellheader");
10982         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10983         $kiriwrite_presmodule->endcell();
10984         $kiriwrite_presmodule->addcell("tablecellheader");
10985         $kiriwrite_presmodule->endcell();
10986         $kiriwrite_presmodule->endrow();
10988         $kiriwrite_presmodule->startrow();
10989         $kiriwrite_presmodule->addcell("tablecell1");
10990         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10991         $kiriwrite_presmodule->endcell();
10992         $kiriwrite_presmodule->addcell("tablecell2");
10993         $kiriwrite_presmodule->addinputbox("databasedir", { Size => 32, MaxLength => 64, Value => $directory_settings_database });
10994         $kiriwrite_presmodule->endcell();
10995         $kiriwrite_presmodule->endrow();
10997         $kiriwrite_presmodule->startrow();
10998         $kiriwrite_presmodule->addcell("tablecell1");
10999         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
11000         $kiriwrite_presmodule->endcell();
11001         $kiriwrite_presmodule->addcell("tablecell2");
11002         $kiriwrite_presmodule->addinputbox("outputdir", { Size => 32, MaxLength => 64, Value => $directory_settings_output });
11003         $kiriwrite_presmodule->endcell();
11004         $kiriwrite_presmodule->endrow();
11006         $kiriwrite_presmodule->startrow();
11007         $kiriwrite_presmodule->addcell("tablecell1");
11008         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
11009         $kiriwrite_presmodule->endcell();
11010         $kiriwrite_presmodule->addcell("tablecell2");
11011         $kiriwrite_presmodule->addinputbox("imagesuripath", { Size => 32, MaxLength => 64, Value => $directory_settings_imagesuri });
11012         $kiriwrite_presmodule->endcell();
11013         $kiriwrite_presmodule->endrow();
11015         $kiriwrite_presmodule->startrow();
11016         $kiriwrite_presmodule->addcell("tablecellheader");
11017         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
11018         $kiriwrite_presmodule->endcell();
11019         $kiriwrite_presmodule->addcell("tablecellheader");
11020         $kiriwrite_presmodule->endcell();
11021         $kiriwrite_presmodule->endrow();
11023         $kiriwrite_presmodule->startrow();
11024         $kiriwrite_presmodule->addcell("tablecell1");
11025         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
11026         $kiriwrite_presmodule->endcell();
11027         $kiriwrite_presmodule->addcell("tablecell2");
11028         $kiriwrite_presmodule->addinputbox("datetime", { Size => 32, MaxLength => 64, Value => $datetime_setting });
11029         $kiriwrite_presmodule->addlinebreak();
11030         $kiriwrite_presmodule->addlinebreak();
11031         $kiriwrite_presmodule->startbox("datalist");
11033         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleday});
11034         $kiriwrite_presmodule->addlinebreak();
11035         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleday});
11036         $kiriwrite_presmodule->addlinebreak();
11037         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlemonth});
11038         $kiriwrite_presmodule->addlinebreak();
11039         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublemonth});
11040         $kiriwrite_presmodule->addlinebreak();
11041         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleyear});
11042         $kiriwrite_presmodule->addlinebreak();
11043         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleyear});
11044         $kiriwrite_presmodule->addlinebreak();
11045         $kiriwrite_presmodule->addlinebreak();
11046         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlehour});
11047         $kiriwrite_presmodule->addlinebreak();
11048         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublehour});
11049         $kiriwrite_presmodule->addlinebreak();
11050         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleminute});
11051         $kiriwrite_presmodule->addlinebreak();
11052         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleminute});
11053         $kiriwrite_presmodule->addlinebreak();
11054         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlesecond});
11055         $kiriwrite_presmodule->addlinebreak();
11056         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublesecond});
11057         $kiriwrite_presmodule->addlinebreak();
11058         $kiriwrite_presmodule->addlinebreak();
11059         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{othercharacters});
11060         $kiriwrite_presmodule->endbox();
11061         $kiriwrite_presmodule->endcell();
11062         $kiriwrite_presmodule->endrow();
11064         $kiriwrite_presmodule->startrow();
11065         $kiriwrite_presmodule->addcell("tablecellheader");
11066         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
11067         $kiriwrite_presmodule->endcell();
11068         $kiriwrite_presmodule->addcell("tablecellheader");
11069         $kiriwrite_presmodule->endcell();
11070         $kiriwrite_presmodule->endrow();
11072         $kiriwrite_presmodule->startrow();
11073         $kiriwrite_presmodule->addcell("tablecell1");
11074         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
11075         $kiriwrite_presmodule->endcell();
11076         $kiriwrite_presmodule->addcell("tablecell2");
11078         $kiriwrite_presmodule->addselectbox("language");
11080         # Process the list of available languages.
11082         foreach $language (keys %language_list){
11084                 # Check if the language filename matches the filename in the configuration
11085                 # file.
11087                 if ($language_list{$language}{Filename} eq $language_config){
11089                         $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} , Selected => 1 });
11091                 } else {
11093                         $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} });
11095                 }
11097         }
11099         $kiriwrite_presmodule->endselectbox();
11101         $kiriwrite_presmodule->startrow();
11102         $kiriwrite_presmodule->addcell("tablecellheader");
11103         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
11104         $kiriwrite_presmodule->endcell();
11105         $kiriwrite_presmodule->addcell("tablecellheader");
11106         $kiriwrite_presmodule->endcell();
11107         $kiriwrite_presmodule->endrow();
11109         $kiriwrite_presmodule->startrow();
11110         $kiriwrite_presmodule->addcell("tablecell1");
11111         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
11112         $kiriwrite_presmodule->endcell();
11113         $kiriwrite_presmodule->addcell("tablecell2");
11115         $kiriwrite_presmodule->addselectbox("presmodule");
11117         # Process the list of available presentation modules.
11119         foreach $presmodule (keys %presmodule_list){
11121                 # Check if the presentation module fileanme matches the filename in the 
11122                 # configuration file.
11124                 if ($presmodule_list{$presmodule}{Filename} eq $presmodule_config){
11126                         $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} , Selected => 1 });
11128                 } else {
11130                         $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} });
11132                 }
11134         }
11136         $kiriwrite_presmodule->endselectbox();
11138         $kiriwrite_presmodule->endcell();
11139         $kiriwrite_presmodule->endrow();
11141         $kiriwrite_presmodule->startrow();
11142         $kiriwrite_presmodule->addcell("tablecell1");
11143         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
11144         $kiriwrite_presmodule->endcell();
11145         $kiriwrite_presmodule->addcell("tablecell2");
11147         # Process the list of available database modules.
11149         $kiriwrite_presmodule->addselectbox("dbmodule");
11151         foreach $dbmodule (keys %dbmodule_list){
11153                 # Check if the database module fileanme matches the filename in the 
11154                 # configuration file.
11156                 if ($dbmodule_list{$dbmodule}{Filename} eq $dbmodule_config){
11158                         $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} , Selected => 1 });
11160                 } else {
11162                         $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} });
11164                 }
11167         }
11169         $kiriwrite_presmodule->endselectbox();
11171         $kiriwrite_presmodule->endcell();
11172         $kiriwrite_presmodule->endrow();
11174         $kiriwrite_presmodule->startrow();
11175         $kiriwrite_presmodule->addcell("tablecell1");
11176         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseserver});
11177         $kiriwrite_presmodule->endcell();
11178         $kiriwrite_presmodule->addcell("tablecell2");
11179         $kiriwrite_presmodule->addinputbox("database_server", { Size => 32, MaxLength => 128, Value => $database_server });
11180         $kiriwrite_presmodule->endcell();
11181         $kiriwrite_presmodule->endrow();
11183         $kiriwrite_presmodule->startrow();
11184         $kiriwrite_presmodule->addcell("tablecell1");
11185         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseport});
11186         $kiriwrite_presmodule->endcell();
11187         $kiriwrite_presmodule->addcell("tablecell2");
11188         $kiriwrite_presmodule->addinputbox("database_port", { Size => 5, MaxLength => 5, Value => $database_port });
11189         $kiriwrite_presmodule->endcell();
11190         $kiriwrite_presmodule->endrow();
11192         $kiriwrite_presmodule->startrow();
11193         $kiriwrite_presmodule->addcell("tablecell1");
11194         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseprotocol});
11195         $kiriwrite_presmodule->endcell();
11196         $kiriwrite_presmodule->addcell("tablecell2");
11198         # Check if TCP is being used.
11200         $kiriwrite_presmodule->addselectbox("database_protocol");
11202         if ($database_protocol eq "tcp"){
11204                 # The TCP protocol is selected so have the TCP option selected.
11206                 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp", Selected => 1});
11208         } else {
11210                 # The TCP protocol is not selected.
11212                 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp"});
11214         } 
11216         # Check if UDP is being used.
11218         if ($database_protocol eq "udp"){
11220                 # The UDP protocol is selected so have the UDP option selected.
11222                 $kiriwrite_presmodule->addoption("UDP", { Value => "udp", Selected => 1});
11224         } else {
11226                 # The UDP protocol is not selected.
11228                 $kiriwrite_presmodule->addoption("UDP", { Value => "udp"});
11230         }
11232         $kiriwrite_presmodule->endselectbox();
11234         $kiriwrite_presmodule->endcell();
11235         $kiriwrite_presmodule->endrow();
11237         $kiriwrite_presmodule->startrow();
11238         $kiriwrite_presmodule->addcell("tablecell1");
11239         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasename});
11240         $kiriwrite_presmodule->endcell();
11241         $kiriwrite_presmodule->addcell("tablecell2");
11242         $kiriwrite_presmodule->addinputbox("database_sqldatabase", { Size => 32, MaxLength => 32, Value => $database_sqldatabase });
11243         $kiriwrite_presmodule->endcell();
11244         $kiriwrite_presmodule->endrow();
11246         $kiriwrite_presmodule->startrow();
11247         $kiriwrite_presmodule->addcell("tablecell1");
11248         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseusername});
11249         $kiriwrite_presmodule->endcell();
11250         $kiriwrite_presmodule->addcell("tablecell2");
11251         $kiriwrite_presmodule->addinputbox("database_username", { Size => 16, MaxLength => 16, Value => $database_username });
11252         $kiriwrite_presmodule->endcell();
11253         $kiriwrite_presmodule->endrow();
11255         $kiriwrite_presmodule->startrow();
11256         $kiriwrite_presmodule->addcell("tablecell1");
11257         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasepassword});
11258         $kiriwrite_presmodule->endcell();
11259         $kiriwrite_presmodule->addcell("tablecell2");
11260         $kiriwrite_presmodule->addinputbox("database_password", { Size => 16, MaxLength => 64, Password => 1 });
11261         $kiriwrite_presmodule->addtext(" ");
11262         $kiriwrite_presmodule->addcheckbox("database_password_keep", { OptionDescription => "Keep the current password", Checked => 1 });
11263         $kiriwrite_presmodule->endcell();
11264         $kiriwrite_presmodule->endrow();
11266         $kiriwrite_presmodule->startrow();
11267         $kiriwrite_presmodule->addcell("tablecell1");
11268         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{tableprefix});
11269         $kiriwrite_presmodule->endcell();
11270         $kiriwrite_presmodule->addcell("tablecell2");
11271         $kiriwrite_presmodule->addinputbox("database_tableprefix", { Size => 16, MaxLength => 16, Value => $database_prefix });
11272         $kiriwrite_presmodule->endcell();
11273         $kiriwrite_presmodule->endrow();
11275         $kiriwrite_presmodule->endtable();
11277         $kiriwrite_presmodule->addlinebreak();
11278         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{setting}->{changesettingsbutton});
11279         $kiriwrite_presmodule->addtext(" | ");
11280         $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
11281         $kiriwrite_presmodule->addtext(" | ");
11282         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
11283         $kiriwrite_presmodule->endbox();
11284         $kiriwrite_presmodule->endform();
11286         return $kiriwrite_presmodule->grab();
11290 sub kiriwrite_settings_load{
11291 #################################################################################
11292 # kiriwrite_settings_load: Load the configuration settings into the global      #
11293 # variables.                                                                    #
11294 #                                                                               #
11295 # Usage:                                                                        #
11296 #                                                                               #
11297 # kiriwrite_settings_load();                                                    #
11298 #################################################################################
11300         # Load the required Perl modules.
11302         use XML::Simple qw(XMLin);
11303         my $xsl = XML::Simple->new();
11305         # Check if the Kiriwrite configuration file exists before using it and
11306         # return an critical error if it doesn't exist.
11308         my $kiriwrite_conf_exist = kiriwrite_fileexists("kiriwrite.xml");
11310         if ($kiriwrite_conf_exist eq 1){
11312                 # The configuration really does not exist so return an critical error.
11314                 kiriwrite_critical("configfilemissing");
11316         }
11318         # Check if the Kiriwrite configuration file has valid permission settings
11319         # before using it and return an critical error if it doesn't have the
11320         # valid permission settings.
11322         my $kiriwrite_conf_permissions = kiriwrite_filepermissions("kiriwrite.xml", 1, 0);
11324         if ($kiriwrite_conf_permissions eq 1){
11326                 # The permission settings for the Kiriwrite configuration file are
11327                 # invalid, so return an critical error.
11329                 kiriwrite_critical("configfileinvalidpermissions");
11331         }
11333         # Converts the XML file into meaningful data for later on in this subroutine.
11335         my $kiriwrite_conf_file = 'kiriwrite.xml';
11336         my $kiriwrite_conf_data = $xsl->XMLin($kiriwrite_conf_file, SuppressEmpty => 1);
11338         # Go and fetch the settings and place them into a hash (that is global).
11340         %kiriwrite_config = (
11342                 "directory_data_db"             => $kiriwrite_conf_data->{settings}->{directories}->{database},
11343                 "directory_data_output"         => $kiriwrite_conf_data->{settings}->{directories}->{output},
11344                 "directory_noncgi_images"       => $kiriwrite_conf_data->{settings}->{directories}->{images},
11346                 "system_language"               => $kiriwrite_conf_data->{settings}->{language}->{lang},
11347                 "system_presmodule"             => $kiriwrite_conf_data->{settings}->{system}->{presentation},
11348                 "system_dbmodule"               => $kiriwrite_conf_data->{settings}->{system}->{database},
11349                 "system_datetime"               => $kiriwrite_conf_data->{settings}->{system}->{datetime},
11351                 "database_server"               => $kiriwrite_conf_data->{settings}->{database}->{server},
11352                 "database_port"                 => $kiriwrite_conf_data->{settings}->{database}->{port},
11353                 "database_protocol"             => $kiriwrite_conf_data->{settings}->{database}->{protocol},
11354                 "database_sqldatabase"          => $kiriwrite_conf_data->{settings}->{database}->{database},
11355                 "database_username"             => $kiriwrite_conf_data->{settings}->{database}->{username},
11356                 "database_password"             => $kiriwrite_conf_data->{settings}->{database}->{password},
11357                 "database_tableprefix"          => $kiriwrite_conf_data->{settings}->{database}->{prefix}
11359         );
11361         # Do a validation check on all of the variables that were loaded into the global configuration hash.
11363         kiriwrite_variablecheck($kiriwrite_config{"directory_data_db"}, "maxlength", 64, 0);
11364         kiriwrite_variablecheck($kiriwrite_config{"directory_data_output"}, "maxlength", 64, 0);
11365         kiriwrite_variablecheck($kiriwrite_config{"directory_noncgi_images"}, "maxlength", 512, 0);
11366         kiriwrite_variablecheck($kiriwrite_config{"directory_data_template"}, "maxlength", 64, 0);
11368         my $kiriwrite_config_language_filename = kiriwrite_variablecheck($kiriwrite_config{"system_language"}, "language_filename", "", 1);
11369         my $kiriwrite_config_presmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_presmodule"}, "module", 0, 1);
11370         my $kiriwrite_config_dbmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_dbmodule"}, "module", 0, 1);
11372         # Check if the language filename is valid and return an critical error if
11373         # they aren't.
11375         if ($kiriwrite_config_language_filename eq 1){
11377                 # The language filename is blank so return an critical error.
11379                 kiriwrite_critical("languagefilenameblank");
11381         } elsif ($kiriwrite_config_language_filename eq 2){
11383                 # The language filename is invalid so return an critical error.
11385                 kiriwrite_critical("languagefilenameinvalid");
11387         }
11389         # Check if the presentation and database module names are valid and return a critical
11390         # error if they aren't.
11392         if ($kiriwrite_config_presmodule_filename eq 1){
11394                 # The presentation module filename given is blank so return an 
11395                 # critical error.
11397                 kiriwrite_critical("presmoduleblank");
11399         }
11401         if ($kiriwrite_config_presmodule_filename eq 2){
11403                 # The presentation module filename is invalid so return an
11404                 # critical error.
11406                 kiriwrite_critical("presmoduleinvalid");
11408         }
11410         if ($kiriwrite_config_dbmodule_filename eq 1){
11412                 # The database module filename given is blank so return an
11413                 # critical error.
11415                 kiriwrite_critical("dbmoduleblank");
11417         }
11419         if ($kiriwrite_config_dbmodule_filename eq 2){
11421                 # The database module filename given is invalid so return
11422                 # an critical error.
11424                 kiriwrite_critical("dbmoduleinvalid");
11426         }
11428         # Check if the language file does exist before loading it and return an critical error
11429         # if it does not exist.
11431         my $kiriwrite_config_language_fileexists = kiriwrite_fileexists("lang/" . $kiriwrite_config{"system_language"} . ".xml");
11433         if ($kiriwrite_config_language_fileexists eq 1){
11435                 # Language file does not exist so return an critical error.
11437                 kiriwrite_critical("languagefilemissing");
11439         }
11441         # Check if the language file has valid permission settings and return an critical error if
11442         # the language file has invalid permissions settings.
11444         my $kiriwrite_config_language_filepermissions = kiriwrite_filepermissions("lang/" . $kiriwrite_config{"system_language"} . ".xml", 1, 0);
11446         if ($kiriwrite_config_language_filepermissions eq 1){
11448                 # Language file contains invalid permissions so return an critical error.
11450                 kiriwrite_critical("languagefilepermissions");
11452         }
11454         # Load the language file.
11456         $kiriwrite_lang = $xsl->XMLin("lang/" . $kiriwrite_config{"system_language"} . ".xml", SuppressEmpty => 1);
11458         # Check if the presentation module does exist before loading it and return an critical error
11459         # if the presentation module does not exist.
11461         my $kiriwrite_config_presmodule_fileexists = kiriwrite_fileexists("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm");
11463         if ($kiriwrite_config_presmodule_fileexists eq 1){
11465                 # Presentation module does not exist so return an critical error.
11467                 kiriwrite_critical("presmodulemissing");
11469         }
11471         # Check if the presentation module does have the valid permission settings and return a
11472         # critical error if the presentation module contains invalid permission settings.
11474         my $kiriwrite_config_presmodule_permissions = kiriwrite_filepermissions("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm", 1, 0);
11476         if ($kiriwrite_config_presmodule_permissions eq 1){
11478                 # Presentation module contains invalid permissions so return an critical error.
11480                 kiriwrite_critical("presmoduleinvalidpermissions");
11482         }
11484         # Check if the database module does exist before loading it and return an critical error
11485         # if the database module does not exist.
11487         my $kiriwrite_config_dbmodule_fileexists = kiriwrite_fileexists("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm");
11489         if ($kiriwrite_config_dbmodule_fileexists eq 1){
11491                 # Database module does not exist so return an critical error.
11493                 kiriwrite_critical("dbmodulemissing");
11495         }
11497         # Check if the database module does have the valid permission settings and return an
11498         # critical error if the database module contains invalid permission settings.
11500         my $kiriwrite_config_dbmodule_permissions = kiriwrite_filepermissions("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm", 1, 0);
11502         if ($kiriwrite_config_dbmodule_permissions eq 1){
11504                 # Presentation module contains invalid permissions so return an critical error.
11506                 kiriwrite_critical("dbmoduleinvalidpermissions");
11508         }
11510         # Include the Modules directory.
11512         use lib "Modules/";
11514         # Load the presentation module.
11516         my $presmodulename = "Presentation::" . $kiriwrite_config{"system_presmodule"};
11517         ($presmodulename) = $presmodulename =~ m/^(.*)$/g;
11518         eval "use " . $presmodulename;
11519         $presmodulename = "Kiriwrite::Presentation::" . $kiriwrite_config{"system_presmodule"};
11520         $kiriwrite_presmodule = $presmodulename->new();
11522         # Load the database module.
11524         my $dbmodulename = "Database::" . $kiriwrite_config{"system_dbmodule"};
11525         ($dbmodulename) = $dbmodulename =~ m/^(.*)$/g;
11526         eval "use " . $dbmodulename;
11527         $dbmodulename = "Kiriwrite::Database::" . $kiriwrite_config{"system_dbmodule"};
11528         $kiriwrite_dbmodule = $dbmodulename->new();
11530         # Load the following settings to the database module.
11532         $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"} });
11534         return;
11538 sub kiriwrite_variablecheck{
11539 #################################################################################
11540 # kiriwrite_variablecheck: Checks the variables for any invalid characters.     #
11541 #                                                                               #
11542 # Usage:                                                                        #
11543 #                                                                               #
11544 # kiriwrite_variablecheck(variable, type, length, noerror);                     #
11545 #                                                                               #
11546 # variable      Specifies the variable to be checked.                           #
11547 # type          Specifies what type the variable is.                            #
11548 # option        Specifies the maximum/minimum length of the variable            #
11549 #               (if minlength/maxlength is used) or if the filename should be   #
11550 #               checked to see if it is blank.                                  #
11551 # noerror       Specifies if Kiriwrite should return an error or not on         #
11552 #               certain values.                                                 #
11553 #################################################################################
11555         # Get the values that were passed to the subroutine.
11557         my ($variable_data, $variable_type, $variable_option, $variable_noerror) = @_;
11559         if ($variable_type eq "numbers"){
11561                 # Check for numbers and return an error if there is anything else than numebrs.
11563                 my $variable_data_validated = $variable_data;   # Copy the variable_data to variable_data_validated.
11564                 $variable_data_validated =~ tr/0-9//d;          # Take away all of the numbers and from the variable. 
11565                                                                 # If it only contains numbers then it should be blank.
11567                 if ($variable_data_validated eq ""){
11568                         # The validated variable is blank. So continue to the end of this section where the return function should be.
11569                 } else {
11570                         # The variable is not blank, so check if the no error value is set
11571                         # to 1 or not.
11573                         if ($variable_noerror eq 1){
11575                                 # The validated variable is not blank and the noerror
11576                                 # value is set to 1. So return an value of 1.
11577                                 # (meaning that the data is invalid).
11579                                 return 1;
11581                         } elsif ($variable_noerror eq 0) {
11583                                 # The validated variable is not blank and the noerror
11584                                 # value is set to 0.
11586                                 kiriwrite_error("invalidvariable");
11588                         } else {
11590                                 # The variable noerror value is something else
11591                                 # pther than 1 or 0. So return an error.
11593                                 kiriwrite_error("invalidvariable");
11595                         }
11597                 }
11599                 return 0;
11601         } elsif ($variable_type eq "lettersnumbers"){
11603                 # Check for letters and numbers and return an error if there is anything else other
11604                 # than letters and numbers.
11606                 my $variable_data_validated = $variable_data;   # Copy the variable_data to variable_data_validated
11607                 $variable_data_validated =~ tr/a-zA-Z0-9.//d;
11608                 $variable_data_validated =~ s/\s//g;
11610                 if ($variable_data_validated eq ""){
11611                         # The validated variable is blank. So continue to the end of this section where the return function should be.
11612                 } else {
11613                         # The variable is not blank, so check if the no error value is set
11614                         # to 1 or not.
11616                         if ($variable_noerror eq 1){
11618                                 # The validated variable is not blank and the noerror
11619                                 # value is set to 1. So return an value of 1.
11620                                 # (meaning that the data is invalid).
11622                                 return 1;
11624                         } elsif ($variable_noerror eq 0) {
11626                                 # The validated variable is not blank and the noerror
11627                                 # value is set to 0.
11629                                 kiriwrite_error("invalidvariable");
11631                         } else {
11633                                 # The variable noerror value is something else
11634                                 # pther than 1 or 0. So return an error.
11636                                 kiriwrite_error("invalidvariable");
11638                         }
11640                 }
11642                 return 0;
11644         } elsif ($variable_type eq "maxlength"){
11645                 # Check for the length of the variable, return an error if it is longer than the length specified.
11647                 # Check if the variable_data string is blank, if it is then set the variable_data_length
11648                 # to '0'.
11650                 my $variable_data_length = 0;
11652                 if (!$variable_data){
11654                         # Set variable_data_length to '0'.
11655                         $variable_data_length = 0;
11657                 } else {
11659                         # Get the length of the variable recieved.
11660                         $variable_data_length = length($variable_data);
11662                 }
11666                 if ($variable_data_length > $variable_option){
11668                         # The variable length is longer than it should be so check if
11669                         # the no error value is set 1.
11671                         if ($variable_noerror eq 1){
11673                                 # The no error value is set to 1, so return an
11674                                 # value of 1 (meaning tha the variable is
11675                                 # too long to be used).
11677                                 return 1;
11679                         } elsif ($variable_noerror eq 0){
11681                                 # The no error value is set to 0, so return
11682                                 # an error.
11684                                 kiriwrite_error("variabletoolong");
11686                         } else {
11688                                 # The no error value is something else other
11689                                 # than 0 or 1, so return an error.
11691                                 kiriwrite_error("variabletoolong");
11693                         }
11695                 } else {
11697                         # The variable length is exactly or shorter than specified, so continue to end of this section where
11698                         # the return function should be.
11700                 }
11702                 return 0;
11704         } elsif ($variable_type eq "blank"){
11705                 # Check if the variable is blank and if it is blank, then return an error.
11707                 if (!$variable_data){
11709                         # The variable data really is blank, so check what
11710                         # the no error value is set.
11712                         if ($variable_noerror eq 1){
11714                                 # The no error value is set to 1, so return
11715                                 # a value of 1 (saying that the variable was
11716                                 # blank).
11718                                 return 1;
11720                         } elsif ($variable_noerror eq 0){
11722                                 # The no error value is set to 0, so return
11723                                 # an error.
11725                                 kiriwrite_error("blankvariable");
11727                         } else {
11729                                 # The no error value is something else other
11730                                 # than 0 or 1, so return an error.
11732                                 kiriwrite_error("invalidvariable");
11734                         }
11736                 }
11738                 return 0;
11740         } elsif ($variable_type eq "filename"){
11741                 # Check for letters and numbers, if anything else than letters and numbers is there (including spaces) return
11742                 # an error.
11744                 # Check if the filename passed is blank, if it is then return with an error.
11746                 if ($variable_data eq ""){
11748                         # The filename specified is blank, so check what the
11749                         # noerror value is set.
11751                         if ($variable_noerror eq 1){
11753                                 # The no error value is set to 1 so return
11754                                 # a value of 1 (meaning that the filename
11755                                 # was blank).
11757                                 return 1;
11759                         } elsif ($variable_noerror eq 0){
11761                                 # The no error value is set to 1 so return
11762                                 # an error.
11764                                 kiriwrite_error("blankfilename");
11766                         } else {
11768                                 # The no error value is something else other
11769                                 # than 0 or 1, so return an error.
11771                                 kiriwrite_error("invalidvariable");
11773                         }
11775                 } else {
11778                 }
11780                 my $variable_data_validated = $variable_data;
11781                 $variable_data_validated =~ tr/a-zA-Z0-9\.//d;
11783                 # Check if the validated data variable is blank, if it is 
11784                 # then continue to the end of this section where the return 
11785                 # function should be, otherwise return an error.
11787                 if ($variable_data_validated eq ""){
11789                         # The validated data variable is blank, meaning that 
11790                         # it only contained letters and numbers.
11792                 } else {
11794                         # The validated data variable is not blank, meaning 
11795                         # that it contains something else, so return an error
11796                         # (or a value).
11798                         if ($variable_noerror eq 1){
11800                                 # The no error value is set to 1 so return
11801                                 # an value of 2. (meaning that the filename
11802                                 # is invalid).
11805                                 return 2;
11807                         } elsif ($variable_noerror eq 0){
11809                                 # The no error value is set to 0 so return
11810                                 # an error.
11812                                 kiriwrite_error("invalidfilename");
11814                         } else {
11816                                 # The no error value is something else other
11817                                 # than 0 or 1 so return an error.
11819                                 kiriwrite_error("invalidvariable");
11821                         }
11823                 }
11825                 return 0;
11827         } elsif ($variable_type eq "filenameindir"){
11828                 # Check if the filename is in the directory and return an
11829                 # error if it isn't.
11831                 if ($variable_data eq ""){
11833                         # The filename specified is blank, so check what the
11834                         # noerror value is set.
11836                         if ($variable_noerror eq 1){
11838                                 # The no error value is set to 1 so return
11839                                 # a value of 1 (meaning that the filename
11840                                 # was blank).
11842                                 return 1;
11844                         } elsif ($variable_noerror eq 0){
11846                                 # The no error value is set to 1 so return
11847                                 # an error.
11849                                 kiriwrite_error("blankfilename");
11851                         } else {
11853                                 # The no error value is something else other
11854                                 # than 0 or 1, so return an error.
11856                                 kiriwrite_error("invalidvariable");
11858                         }
11860                 } else {
11863                 }
11865                 # Set the following variables for later on.
11867                 my $variable_data_length = 0;
11868                 my $variable_data_char = "";
11869                 my $variable_data_validated = "";
11870                 my $variable_data_seek = 0;
11871                 my $variable_database_list = "";
11872                 my $variable_database_listcurrent = "";
11873                 my $variable_data_firstlevel = 1;
11875                 # Get the length of the variable recieved.
11877                 $variable_data_length = length($variable_data);
11879                 # Check if the database filename contains the directory command
11880                 # for up a directory level and if it is, return an error
11881                 # or return with a number.
11883                 do {
11885                         # Get a character from the filename passed to this subroutine.
11887                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
11889                         # Check if the current character is the forward slash character.
11891                         if ($variable_data_char eq "/"){
11893                                 # Check if the current directory is blank (and on the first level), or if the
11894                                 # current directory contains two dots or one dot, if it does return an error.
11896                                 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
11898                                         # Check if the noerror value is set to 1, if it is return an
11899                                         # number, else return an proper error.
11901                                         if ($variable_noerror eq 1){
11903                                                 # Page filename contains invalid characters and
11904                                                 # the no error value is set to 1 so return a 
11905                                                 # value of 2 (meaning that the page filename
11906                                                 # is invalid).
11908                                                 return 2;
11910                                         } elsif ($variable_noerror eq 0) {
11912                                                 # Page filename contains invalid characters and
11913                                                 # the no error value is set to 0 so return an
11914                                                 # error.
11916                                                 kiriwrite_error("invalidfilename");
11918                                         } else {
11920                                                 # The no error value is something else other
11921                                                 # than 0 or 1 so return an error.
11923                                                 kiriwrite_error("invalidvariable");
11925                                         }
11927                                 }
11929                                 # Append the forward slash, clear the current directory name and set
11930                                 # the first directory level value to 0.
11932                                 $variable_database_list = $variable_database_list . $variable_data_char;
11933                                 $variable_database_listcurrent = "";
11934                                 $variable_data_firstlevel = 0;
11936                         } else {
11938                                 # Append the current character to the directory name and to the current
11939                                 # directory name.
11941                                 $variable_database_list = $variable_database_list . $variable_data_char;
11942                                 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
11944                         }
11946                         # Increment the seek counter.
11948                         $variable_data_seek++;
11950                 } until ($variable_data_seek eq $variable_data_length);
11952                 return 0;
11954         } elsif ($variable_type eq "datetime"){
11955                 # Check if the date and time setting format is valid.
11957                 if ($variable_data eq ""){
11959                         if ($variable_noerror eq 1){
11961                                 # The no error value is set to 1 so return
11962                                 # a value of 1 (meaning that the date and
11963                                 # time format was blank).
11965                                 return 1;
11967                         } elsif ($variable_noerror eq 0){
11969                                 # The no error value is set to 1 so return
11970                                 # an error.
11972                                 kiriwrite_error("blankdatetimeformat");
11974                         } else {
11976                                 # The no error value is something else other
11977                                 # than 0 or 1, so return an error.
11979                                 kiriwrite_error("invalidvariable");
11981                         }
11983                 }
11985                 my $variable_data_validated = $variable_data;
11986                 $variable_data_validated =~ tr|dDmMyYhms/():[ ]||d;
11988                 if ($variable_data_validated eq ""){
11990                         # The date and time format is valid. So
11991                         # skip this bit.
11993                 } else {
11995                         # The validated data variable is not blank, meaning 
11996                         # that it contains something else, so return an error
11997                         # (or a value).
11999                         if ($variable_noerror eq 1){
12001                                 # The no error value is set to 1 so return
12002                                 # an value of 2. (meaning that the date and
12003                                 # time format was invalid).
12005                                 return 2;
12007                         } elsif ($variable_noerror eq 0){
12009                                 # The no error value is set to 0 so return
12010                                 # an error.
12012                                 kiriwrite_error("invaliddatetimeformat");
12014                         } else {
12016                                 # The no error value is something else other
12017                                 # than 0 or 1 so return an error.
12019                                 kiriwrite_error("invalidvariable");
12021                         }
12023                 }
12025                 return 0;
12027         } elsif ($variable_type eq "directory"){
12028                 # Check if the directory only contains letters and numbers and
12029                 # return an error if anything else appears.
12031                 my $variable_data_validated = $variable_data;
12032                 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12034                 if ($variable_data eq ""){
12036                         if ($variable_noerror eq 1){
12038                                 # The no error value is set to 1 so return
12039                                 # a value of 1 (meaning that the directory
12040                                 # name was blank).
12042                                 return 1;
12044                         } elsif ($variable_noerror eq 0){
12046                                 # The no error value is set to 1 so return
12047                                 # an error.
12049                                 kiriwrite_error("blankdirectory");
12051                         } else {
12053                                 # The no error value is something else other
12054                                 # than 0 or 1, so return an error.
12056                                 kiriwrite_error("invalidvariable");
12058                         }
12060                 }
12062                 if ($variable_data_validated eq ""){
12064                         # The validated data variable is blank, meaning that
12065                         # it only contains letters and numbers.
12067                 } else {
12069                         # The validated data variable is not blank, meaning 
12070                         # that it contains something else, so return an error
12071                         # (or a value).
12073                         if ($variable_noerror eq 1){
12075                                 # The no error value is set to 1 so return
12076                                 # an value of 2. (meaning that the directory
12077                                 # name is invalid).
12079                                 return 2;
12081                         } elsif ($variable_noerror eq 0){
12083                                 # The no error value is set to 0 so return
12084                                 # an error.
12086                                 kiriwrite_error("invaliddirectory");
12088                         } else {
12090                                 # The no error value is something else other
12091                                 # than 0 or 1 so return an error.
12093                                 kiriwrite_error("invalidvariable");
12095                         }
12097                 }
12099                 return 0;
12101         } elsif ($variable_type eq "language_filename"){
12103                 # The variable type is a language filename type.
12104                 # Check if the language file name is blank and 
12105                 # if it is then return an error (or value).
12107                 if ($variable_data eq ""){
12109                         # The language filename is blank so check the
12110                         # no error value and return an error (or value).
12112                         if ($variable_noerror eq 1){
12114                                 # Language filename is blank and the no error value
12115                                 # is set as 1, so return a value of 1 (saying that
12116                                 # the language filename is blank).
12118                                 return 1;
12120                         } elsif ($variable_noerror eq 0) {
12122                                 # Language filename is blank and the no error value
12123                                 # is not set as 1, so return an error.
12125                                 kiriwrite_critical("languagefilenameblank");
12127                         } else {
12129                                 # The noerror value is something else other
12130                                 # than 0 or 1 so return an error.
12132                                 kiriwrite_error("invalidvariable");
12134                         }
12136                 }
12138                 # Set the following variables for later on.
12140                 my $variable_data_length = 0;
12141                 my $variable_data_char = "";
12142                 my $variable_data_seek = 0;
12144                 # Get the length of the language file name.
12146                 $variable_data_length = length($variable_data);
12148                 do {
12150                         # Get a character from the language filename passed to this 
12151                         # subroutine and the character the seek counter value is set
12152                         # to.
12154                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12156                         # Check if the language filename contains a forward slash or a dot, 
12157                         # if the selected character is a forward slash then return an error
12158                         # (or value).
12160                         if ($variable_data_char eq "/" || $variable_data_char eq "."){
12162                                 # The language filename contains a forward slash or
12163                                 # a dot so depending on the no error value, return
12164                                 # an error or a value.
12166                                 if ($variable_noerror eq 1){
12168                                         # Language filename contains a forward slash or a dot
12169                                         # and the no error value has been set to 1, so return 
12170                                         # an value of 2 (saying that the language file name is 
12171                                         # invalid).
12173                                         return 2;
12175                                 } elsif ($variable_noerror eq 0) {
12177                                         # Language filename contains a forward slash and the no
12178                                         # error value has not been set to 1, so return an error.
12180                                         kiriwrite_critical("languagefilenameinvalid");
12182                                 } else {
12184                                         # The noerror value is something else other than
12185                                         # 1 or 0 so return an error.
12187                                         kiriwrite_error("invalidvariable");
12189                                 }
12191                         }
12193                         # Increment the seek counter.
12195                         $variable_data_seek++;
12197                 } until ($variable_data_seek eq $variable_data_length);
12199                 return 0;
12201         } elsif ($variable_type eq "pagesetting"){
12203                 # The variable type is a page setting, so check if the page
12204                 # setting has one of the valid options.
12206                 if ($variable_data eq 0 || $variable_data eq 1 || $variable_data eq 2 || $variable_data eq 3){
12208                         # The variable is one of the options above, so continue
12209                         # to the end of this section.
12211                 } else {
12213                         # The variable is not one of the options above, so check
12214                         # and see if a error or a value should be returned.
12216                         if ($variable_noerror eq 1){
12218                                 # The page setting is invalid and the no error
12219                                 # value is set 1, so return a value of 1
12220                                 # (saying that the page setting value is
12221                                 # invalid).
12223                                 return 1;
12225                         } elsif ($variable_noerror eq 0) {
12227                                 # Page setting is invalid and the no error value
12228                                 # is not 1, so return an error.
12230                                 kiriwrite_error("invalidvariable");
12232                         } else {
12234                                 # The no error value is something else other
12235                                 # than 0 or 1 so return an error.
12237                                 kiriwrite_error("invalidvariable");
12239                         }
12241                 }
12243                 return 0;
12245         } elsif ($variable_type eq "page_filename"){
12246          
12247                 # The variable type is a page filename type. Check
12248                 # if the data is empty and if it is then return an
12249                 # error (or value).
12251                 if ($variable_data eq ""){
12253                         # The filename is blank so check the no error
12254                         # value and depending on it return an value
12255                         # or an error.
12257                         if ($variable_noerror eq 1){
12259                                 # Page filename is blank and the no error value
12260                                 # is set as 1, so return a value of 1 (saying
12261                                 # the filename is blank).
12263                                 return 1;
12265                         } elsif ($variable_noerror eq 0) {
12267                                 # Page filename is blank and the no error value
12268                                 # is not 1, so return an error.
12270                                 kiriwrite_error("emptypagefilename");
12272                         } else {
12274                                 # The no error value is something else other
12275                                 # than 0 or 1 so return an error.
12277                                 kiriwrite_error("invalidvariable");
12279                         }
12280                 }
12282                 # Set the following variables for later on.
12285                 my $variable_data_length = 0;
12286                 my $variable_data_slash = 0;
12287                 my $variable_data_char = "";
12288                 my $variable_data_validated = "";
12289                 my $variable_data_seek = 0;
12290                 my $variable_database_list = "";
12291                 my $variable_database_listcurrent = "";
12292                 my $variable_data_firstlevel = 1;
12294                 # Get the length of the filename.
12296                 $variable_data_length = length($variable_data);
12298                 # Check that only valid characters should be appearing in
12299                 # the filename.
12301                 $variable_data_validated = $variable_data;
12302                 $variable_data_validated =~ tr|a-zA-Z0-9\.\/\-_||d;
12304                 if ($variable_data_validated ne ""){
12306                         # The validated variable is not blank, meaning the
12307                         # variable contains invalid characters, so return
12308                         # an error.
12310                         if ($variable_noerror eq 1){
12312                                 # Page filename contains invalid characters and
12313                                 # the no error value is set to 1 so return a 
12314                                 # value of 2 (meaning that the page filename
12315                                 # is invalid).
12317                                 return 2;
12319                         } elsif ($variable_noerror eq 0) {
12321                                 # Page filename contains invalid characters and
12322                                 # the no error value is set to 0 so return an
12323                                 # error.
12325                                 kiriwrite_error("invalidfilename");
12327                         } else {
12329                                 # The no error value is something else other
12330                                 # than 0 or 1 so return an error.
12332                                 kiriwrite_error("invalidvariable");
12334                         }
12336                 }
12338                 # Check if the page filename contains the directory command
12339                 # for up a directory level and if it is, return an error
12340                 # or return with a number.
12342                 do {
12344                         # Get a character from the filename passed to this subroutine.
12346                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12348                         # Check if the current character is the forward slash character.
12350                         if ($variable_data_char eq "/"){
12352                                 # Check if the current directory is blank (and on the first level), or if the
12353                                 # current directory contains two dots or one dot, if it does return an error.
12355                                 $variable_data_slash = 1;
12357                                 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
12359                                         # Check if the noerror value is set to 1, if it is return an
12360                                         # number, else return an proper error.
12362                                         if ($variable_noerror eq 1){
12364                                                 # Page filename contains invalid characters and
12365                                                 # the no error value is set to 1 so return a 
12366                                                 # value of 2 (meaning that the page filename
12367                                                 # is invalid).
12369                                                 return 2;
12371                                         } elsif ($variable_noerror eq 0) {
12373                                                 # Page filename contains invalid characters and
12374                                                 # the no error value is set to 0 so return an
12375                                                 # error.
12377                                                 kiriwrite_error("invalidfilename");
12379                                         } else {
12381                                                 # The no error value is something else other
12382                                                 # than 0 or 1 so return an error.
12384                                                 kiriwrite_error("invalidvariable");
12386                                         }
12388                                 }
12390                                 # Append the forward slash, clear the current directory name and set
12391                                 # the first directory level value to 0.
12393                                 $variable_database_list = $variable_database_list . $variable_data_char;
12394                                 $variable_database_listcurrent = "";
12395                                 $variable_data_firstlevel = 0;
12397                         } else {
12399                                 # Append the current character to the directory name and to the current
12400                                 # directory name.
12402                                 $variable_data_slash = 0;
12404                                 $variable_database_list = $variable_database_list . $variable_data_char;
12405                                 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
12407                         }
12409                         # Increment the seek counter.
12411                         $variable_data_seek++;
12413                 } until ($variable_data_seek eq $variable_data_length);
12415                 # Check if the last character is a slash and return an
12416                 # error if it is.
12418                 if ($variable_data_slash eq 1){
12420                         if ($variable_noerror eq 1){
12422                                 # Last character is a slash and the no error 
12423                                 # value is set to 1 so return a value of 2 
12424                                 # (meaning that the page filename is invalid).
12426                                 return 2;
12428                         } elsif ($variable_noerror eq 0) {
12430                                 # Page filename contains a slash for the last
12431                                 # character and the no error value is set to 0 
12432                                 # so return an error.
12434                                 kiriwrite_error("invalidfilename");
12436                         } else {
12438                                 # The no error value is something else other
12439                                 # than 0 or 1 so return an error.
12441                                 kiriwrite_error("invalidvariable");
12443                         }
12445                 }
12447                 return 0;
12449         } elsif ($variable_type eq "module"){
12451                 # The variable type is a presentation module filename.
12453                 # Check if the variable_data is blank and if it is
12454                 # return an error.
12456                 if ($variable_data eq ""){
12458                         # The presentation module is blank so check if an error
12459                         # value should be returned or a number should be
12460                         # returned.
12462                         if ($variable_noerror eq 1){
12464                                 # Module name is blank and the no error value 
12465                                 # is set to 1 so return a value of 2 (meaning 
12466                                 # that the page filename is blank).
12468                                 return 1;
12470                         } elsif ($variable_noerror eq 0) {
12472                                 # Module name contains is blank and the no error 
12473                                 # value is set to 0 so return an error.
12475                                 kiriwrite_critical("moduleblank");
12477                         } else {
12479                                 # The no error value is something else other
12480                                 # than 0 or 1 so return an error.
12482                                 kiriwrite_critical("invalidvalue");
12484                         }
12486                 } else {
12488                 }
12490                 my $variable_data_validated = $variable_data;
12491                 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12493                 if ($variable_data_validated eq ""){
12495                 } else {
12497                         if ($variable_noerror eq 1){
12499                                 # Module name contains invalid characters and
12500                                 # the no error value is set to 1 so return a 
12501                                 # value of 2 (meaning that the page filename
12502                                 # is invalid).
12504                                 return 2;
12506                         } elsif ($variable_noerror eq 0) {
12508                                 # Module name contains invalid characters and
12509                                 # the no error value is set to 0 so return an
12510                                 # error.
12512                                 kiriwrite_critical("moduleinvalid");
12514                         } else {
12516                                 # The no error value is something else other
12517                                 # than 0 or 1 so return an error.
12519                                 kiriwrite_error("invalidvalue");
12521                         }
12523                 }
12525                 return 0;
12527         } elsif ($variable_type eq "utf8"){
12529                 # The variable type is a UTF8 string.
12531                 if (!$variable_data){
12533                         $variable_data = "";
12535                 }
12537                 # Check if the string is a valid UTF8 string.
12539                 if ($variable_data =~ m/^(
12540                         [\x09\x0A\x0D\x20-\x7E]              # ASCII
12541                         | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
12542                         |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
12543                         | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
12544                         |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
12545                         |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
12546                         | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
12547                         |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
12548                 )*$/x){
12550                         # The UTF-8 string is valid.
12552                 } else {
12554                         # The UTF-8 string is not valid, check if the no error
12555                         # value is set to 1 and return an error if it isn't.
12557                         if ($variable_noerror eq 1){
12559                                 # The no error value has been set to 1, so return
12560                                 # a value of 1 (meaning that the UTF-8 string is
12561                                 # invalid).
12563                                 return 1; 
12565                         } elsif ($variable_noerror eq 0) {
12567                                 # The no error value has been set to 0, so return
12568                                 # an error.
12570                                 kiriwrite_error("invalidutf8");
12572                         } else {
12574                                 # The no error value is something else other than 0
12575                                 # or 1, so return an error.
12577                                 kiriwrite_error("invalidoption");
12579                         }
12581                 }
12583                 return 0;
12585         } elsif ($variable_type eq "serverprotocol"){
12587                 # Check if the server protocol is TCP or UDP and return
12588                 # an error if it isn't.
12590                 if ($variable_data ne "tcp" && $variable_data ne "udp"){
12592                         # The protocol given is not valid, check if the no
12593                         # error value is set to 1 and return an error if it isn't.
12595                         if ($variable_noerror eq 1){
12597                                 # The no error value has been set to 1, so return a
12598                                 # value of 1 (meaning that the server protocol is
12599                                 # invalid).
12601                                 return 1;
12603                         } elsif ($variable_noerror eq 0){
12605                                 # The no error value has been set to 0, so return
12606                                 # an error.
12608                                 kiriwrite_error("serverprotocolinvalid");
12610                         } else {
12612                                 # The no error value is something else other than 0
12613                                 # or 1, so return an error.
12615                                 kiriwrite_error("invalidoption");
12617                         }
12619                 }
12621                 return 0;
12623         } elsif ($variable_type eq "port"){
12625                 # Check if the port number given is less than 0 or more than 65535
12626                 # and return an error if it is.
12628                 if ($variable_data < 0 || $variable_data > 65535){
12630                         # The port number is less than 0 and more than 65535 so
12631                         # check if the no error value is set to 1 and return an
12632                         # error if it isn't.
12634                         if ($variable_noerror eq 1){
12636                                 # The no error value has been set to 1, so return a
12637                                 # value of 1 (meaning that the port number is invalid).
12639                                 return 1;
12641                         } elsif ($variable_noerror eq 0){
12643                                 # The no error value has been set to 0, so return
12644                                 # an error.
12646                                 kiriwrite_error("serverportnumberinvalid");
12648                         } else {
12650                                 # The no error value is something else other than 0
12651                                 # or 1, so return an error.
12653                                 kiriwrite_error("invalidoption");
12655                         }
12657                 }
12659                 return 0;
12661         }
12663         # Another type than the valid ones above has been specified so return an error specifying an invalid option.
12664         kiriwrite_error("invalidoption");
12668 sub kiriwrite_output_header{
12669 #################################################################################
12670 # kiriwrite_output_header: Outputs the header to the browser/stdout/console.    #
12671 #                                                                               #
12672 # Usage:                                                                        #
12673 #                                                                               #
12674 # kiriwrite_output_header();                                                    #
12675 #################################################################################
12677         # Print a header saying that the page expires immediately since the
12678         # date is set in the past.
12680         print header(-Expires=>'Sunday, 01-Jan-06 00:00:00 GMT', -charset=>'utf-8');
12681         return;
12684 sub kiriwrite_processfilename{
12685 #################################################################################
12686 # kiriwrite_processfilename: Processes a name and turns it into a filename that #
12687 # can be used by Kiriwrite.                                                     #
12688 #                                                                               #
12689 # Usage:                                                                        #
12690 #                                                                               #
12691 # kiriwrite_processfilename(text);                                              #
12692 #                                                                               #
12693 # text          Specifies the text to be used in the process for creating a new #
12694 #               filename.                                                       #
12695 #################################################################################
12697         # Get the values that have been passed to the subroutine.
12699         my ($process_text) = @_;
12701         # Define some variables that will be used later on.
12703         my $processed_stageone  = "";
12704         my $processed_stagetwo  = "";
12705         my $processed_length    = "";
12706         my $processed_char      = "";
12707         my $processed_seek      = 0;
12708         my $processed_filename  = "";
12710         # Set the first stage value of the processed filename to the
12711         # process filename and then filter it out to only contain
12712         # numbers and letters (no spaces) and then convert the
12713         # capitals to small letters.
12715         $processed_stageone = $process_text;
12716         $processed_stageone =~ tr#a-zA-Z0-9##cd;
12717         $processed_stageone =~ tr/A-Z/a-z/;
12719         # Now set the second stage value of the processed filename
12720         # to the first stage value of the processed filename and
12721         # then limit the filename down to 32 characters.
12723         $processed_stagetwo = $processed_stageone;
12724         $processed_length = length($processed_stagetwo);
12726         # Process the second stage filename into the final 
12727         # filename and do so until the seek counter is 32
12728         # or reaches the length of the second stage filename.
12730         do {
12732                 # Get the character that is the seek counter
12733                 # is set at.
12735                 $processed_char = substr($processed_stagetwo, $processed_seek, 1);
12737                 # Append to the final processed filename.
12739                 $processed_filename = $processed_filename . $processed_char;
12741                 # Increment the seek counter.
12743                 $processed_seek++;
12745         } until ($processed_seek eq 32 || $processed_seek eq $processed_length);
12747         return $processed_filename;
12751 sub kiriwrite_language{
12752 #################################################################################
12753 # kiriwrite_language: Process language strings that needs certain text inserted.#
12754 #                                                                               #
12755 # Usage:                                                                        #
12756 #                                                                               #
12757 # kiriwrite_language(string, [text, text, ...]);                                #
12758 #                                                                               #
12759 # string        Specifies the string to process.                                #
12760 # text          Specifies the text to pass to the string (can be repeated many  #
12761 #               times).                                                         #
12762 #################################################################################
12764         my $string = shift;
12765         my $item;
12767         foreach $item (@_){
12769                 $string =~ s/%s/$item/;
12771         }
12773         return $string;
12777 sub kiriwrite_error{
12778 #################################################################################
12779 # kiriwrite_error: Prints out an error message.                                 #
12780 #                                                                               #
12781 # Usage:                                                                        #
12782 #                                                                               #
12783 # kiriwrite_error(errortype, errorext);                                         #
12784 #                                                                               #
12785 # errortype     Specifies the type of error that occured.                       #
12786 # errorext      Specifies the extended error information.                       #
12787 #################################################################################
12789         # Get the error type from the subroutine.
12791         my ($error_type, $error_extended) = @_;
12793         # Disconnect from the database server.
12795         if ($kiriwrite_dbmodule){
12796                 $kiriwrite_dbmodule->disconnect();
12797         }
12799         # Load the list of error messages.
12801         my ($kiriwrite_error, %kiriwrite_error);
12803         %kiriwrite_error = (
12805                 # Catch all error message.
12806                 "generic"                       => $kiriwrite_lang->{error}->{generic},
12808                 # Standard error messages.
12809                 "blankfilename"                 => $kiriwrite_lang->{error}->{blankfilename},
12810                 "blankvariable"                 => $kiriwrite_lang->{error}->{blankvariable},
12811                 "fileexists"                    => $kiriwrite_lang->{error}->{fileexists},
12812                 "internalerror"                 => $kiriwrite_lang->{error}->{internalerror},
12813                 "invalidoption"                 => $kiriwrite_lang->{error}->{invalidoption},
12814                 "invalidaction"                 => $kiriwrite_lang->{error}->{invalidaction},
12815                 "invalidfilename"               => $kiriwrite_lang->{error}->{invalidfilename},
12816                 "invalidmode"                   => $kiriwrite_lang->{error}->{invalidmode},
12817                 "invalidutf8"                   => $kiriwrite_lang->{error}->{invalidutf8},
12818                 "invalidvariable"               => $kiriwrite_lang->{error}->{invalidvariable},
12819                 "variabletoolong"               => $kiriwrite_lang->{error}->{variabletoolong},
12821                 # Specific error messages.
12822                 "blankcompiletype"              => $kiriwrite_lang->{error}->{blankcompiletype},
12823                 "blankdatabasepageadd"          => $kiriwrite_lang->{error}->{blankdatabasepageadd},
12824                 "blankdirectory"                => $kiriwrite_lang->{error}->{blankdirectory},
12825                 "blankfindfilter"               => $kiriwrite_lang->{error}->{blankfindfilter},
12826                 "blankdatetimeformat"           => $kiriwrite_lang->{error}->{blankdatetimeformat},
12827                 "databaseconnectionerror"       => $kiriwrite_lang->{error}->{databaseconnectionerror},
12828                 "databasecategoriestoolong"     => $kiriwrite_lang->{error}->{databasecategoriestoolong},
12829                 "databasecopysame"              => $kiriwrite_lang->{error}->{databasecopysame},
12830                 "databasealreadyexists"         => $kiriwrite_lang->{error}->{databasealreadyexists},
12831                 "datadirectorymissing"          => $kiriwrite_lang->{error}->{datadirectorymissing},
12832                 "datadirectoryinvalidpermissions"       => $kiriwrite_lang->{error}->{datadirectoryinvalidpermissions},
12833                 "databasedescriptiontoolong"    => $kiriwrite_lang->{error}->{databasedescriptiontoolong},
12834                 "databasefilenameinvalid"       => $kiriwrite_lang->{error}->{databasefilenameinvalid},
12835                 "databasefilenametoolong"       => $kiriwrite_lang->{error}->{databasefilenametoolong},
12836                 "databaseerror" => $kiriwrite_lang->{error}->{databaseerror},
12837                 "databaseinvalidpermissions"    => $kiriwrite_lang->{error}->{databaseinvalidpermissions},
12838                 "databasenameinvalid"           => $kiriwrite_lang->{error}->{databasenameinvalid},
12839                 "databasenametoolong"           => $kiriwrite_lang->{error}->{databasenametoolong},
12840                 "databasenameblank"             => $kiriwrite_lang->{error}->{databasenameblank},
12841                 "databasemissingfile"           => $kiriwrite_lang->{error}->{databasemissingfile},
12842                 "databasemovemissingfile"       => $kiriwrite_lang->{error}->{databasemovemissingfile},
12843                 "databasenorename"              => $kiriwrite_lang->{error}->{databasenorename},
12844                 "databasemovesame"              => $kiriwrite_lang->{error}->{databasemovesame},
12845                 "dbmoduleblank"                 => $kiriwrite_lang->{error}->{dbmoduleblank},
12846                 "dbmoduleinvalid"               => $kiriwrite_lang->{error}->{dbmoduleinvalid},
12847                 "dbdirectoryblank"              => $kiriwrite_lang->{error}->{dbdirectoryblank},
12848                 "dbdirectoryinvalid"            => $kiriwrite_lang->{error}->{dbdirectoryinvalid},
12849                 "dbmodulemissing"               => $kiriwrite_lang->{error}->{dbmodulemissing},
12850                 "filtersdatabasenotcreated"     => $kiriwrite_lang->{error}->{filtersdatabasenotcreated},
12851                 "filtersdbdatabaseerror"        => $kiriwrite_lang->{error}->{filtersdbdatabaseerror},
12852                 "filtersdbpermissions"          => $kiriwrite_lang->{error}->{filtersdbpermissions},
12853                 "filtersdbmissing"              => $kiriwrite_lang->{error}->{filtersdbmissing},
12854                 "filteridblank"                 => $kiriwrite_lang->{error}->{filteridblank},
12855                 "filterdoesnotexist"            => $kiriwrite_lang->{error}->{filterdoesnotexist},
12856                 "filteridinvalid"               => $kiriwrite_lang->{error}->{filteridinvalid},
12857                 "filteridtoolong"               => $kiriwrite_lang->{error}->{filteridtoolong},
12858                 "findfiltertoolong"             => $kiriwrite_lang->{error}->{findfiltertoolong},
12859                 "filterpriorityinvalid"         => $kiriwrite_lang->{error}->{filterpriorityinvalid},
12860                 "filterpriorityinvalidchars"    => $kiriwrite_lang->{error}->{filterpriorityinvalidchars},
12861                 "filterprioritytoolong"         => $kiriwrite_lang->{error}->{filterprioritytoolong},
12862                 "invalidcompiletype"            => $kiriwrite_lang->{error}->{invalidcompiletype},
12863                 "invalidpagenumber"             => $kiriwrite_lang->{error}->{invalidpagenumber},
12864                 "nopagesselected"               => $kiriwrite_lang->{error}->{nopagesselected},
12865                 "invaliddirectory"              => $kiriwrite_lang->{error}->{invaliddirectory},
12866                 "invaliddatetimeformat"         => $kiriwrite_lang->{error}->{invaliddatetimeformat},
12867                 "invalidlanguagefilename"       => $kiriwrite_lang->{error}->{invalidlanguagefilename},
12868                 "languagefilenamemissing"       => $kiriwrite_lang->{error}->{languagefilenamemissing},
12869                 "moduleblank"                   => $kiriwrite_lang->{error}->{moduleblank},
12870                 "moduleinvalid"                 => $kiriwrite_lang->{error}->{moduleinvalid},
12871                 "newcopydatabasedatabaseerror"  => $kiriwrite_lang->{error}->{newcopydatabasedatabaseerror},
12872                 "newcopydatabasedoesnotexist"   => $kiriwrite_lang->{error}->{newcopydatabasedoesnotexist},
12873                 "newcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newcopydatabasefileinvalidpermissions},
12874                 "newmovedatabasedatabaseerror"  => $kiriwrite_lang->{error}->{newmovedatabasedatabaseerror},
12875                 "newmovedatabasedoesnotexist"   => $kiriwrite_lang->{error}->{newmovedatabasedoesnotexist},
12876                 "newmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newmovedatabasefileinvalidpermissions},
12877                 "nodatabasesavailable"          => $kiriwrite_lang->{error}->{nodatabasesavailable},
12878                 "nodatabaseselected"            => $kiriwrite_lang->{error}->{nodatabaseselected},
12879                 "noeditvaluesselected"          => $kiriwrite_lang->{error}->{noeditvaluesselected},
12880                 "oldcopydatabasedatabaseerror"  => $kiriwrite_lang->{error}->{oldcopydatabasedatabaseerror},
12881                 "oldcopydatabasedoesnotexist"   => $kiriwrite_lang->{error}->{oldcopydatabasedoesnotexist},
12882                 "oldcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldcopydatabasefileinvalidpermissions},
12883                 "oldmovedatabasedatabaseerror"  => $kiriwrite_lang->{error}->{oldmovedatabasedatabaseerror},
12884                 "oldmovedatabasedoesnotexist"   => $kiriwrite_lang->{error}->{oldmovedatabasedoesnotexist},
12885                 "oldmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldmovedatabasefileinvalidpermissions},
12886                 "outputdirectoryblank"          => $kiriwrite_lang->{error}->{outputdirectoryblank},
12887                 "outputdirectoryinvalid"        => $kiriwrite_lang->{error}->{outputdirectoryinvalid},
12888                 "outputdirectorymissing"        => $kiriwrite_lang->{error}->{outputdirectorymissing},
12889                 "outputdirectoryinvalidpermissions"     => $kiriwrite_lang->{error}->{outputdirectoryinvalidpermissions},
12890                 "presmoduleblank"               => $kiriwrite_lang->{error}->{presmoduleblank},
12891                 "presmoduleinvalid"             => $kiriwrite_lang->{error}->{presmoduleinvalid},
12892                 "presmodulemissing"             => $kiriwrite_lang->{error}->{presmodulemissing},
12893                 "pagefilenamedoesnotexist"      => $kiriwrite_lang->{error}->{pagefilenamedoesnotexist},
12894                 "pagefilenameexists"            => $kiriwrite_lang->{error}->{pagefilenameexists},
12895                 "pagefilenameinvalid"           => $kiriwrite_lang->{error}->{pagefilenameinvalid},
12896                 "pagefilenametoolong"           => $kiriwrite_lang->{error}->{pagefilenametoolong},
12897                 "pagefilenameblank"             => $kiriwrite_lang->{error}->{pagefilenameblank},
12898                 "pagetitletoolong"              => $kiriwrite_lang->{error}->{pagetitletoolong},
12899                 "pagedescriptiontoolong"        => $kiriwrite_lang->{error}->{pagedescriptiontoolong},
12900                 "pagesectiontoolong"            => $kiriwrite_lang->{error}->{pagesectiontoolong},
12901                 "pagedatabasefilenametoolong"   => $kiriwrite_lang->{error}->{pagedatabasefilenametoolong},
12902                 "pagesettingstoolong"           => $kiriwrite_lang->{error}->{pagesettingstoolong},
12903                 "pagesettingsinvalid"           => $kiriwrite_lang->{error}->{pagesettingsinvalid},
12904                 "pagetemplatefilenametoolong"   => $kiriwrite_lang->{error}->{pagetemplatefilenametoolong},
12905                 "replacefiltertoolong"          => $kiriwrite_lang->{error}->{replacefiltertoolong},
12906                 "servernameinvalid"             => $kiriwrite_lang->{error}->{servernameinvalid},
12907                 "servernametoolong"             => $kiriwrite_lang->{error}->{servernametoolong},
12908                 "serverdatabasenameinvalid"     => $kiriwrite_lang->{error}->{serverdatabasenameinvalid},
12909                 "serverdatabasenametoolong"     => $kiriwrite_lang->{error}->{serverdatabasenametoolong},
12910                 "serverdatabaseusernameinvalid" => $kiriwrite_lang->{error}->{serverdatabaseusernameinvalid},
12911                 "serverdatabaseusernametoolong" => $kiriwrite_lang->{error}->{serverdatabaseusernametoolong},
12912                 "serverdatabasepasswordtoolong" => $kiriwrite_lang->{error}->{serverdatabasepasswordtoolong},
12913                 "serverdatabasetableprefixinvalid"      => $kiriwrite_lang->{error}->{serverdatabasetableprefixinvalid},
12914                 "serverdatabasetableprefixtoolong"      => $kiriwrite_lang->{error}->{serverdatabasetableprefixtoolong},
12915                 "serverportnumberinvalid"       => $kiriwrite_lang->{error}->{serverportnumberinvalid},
12916                 "serverportnumberinvalidcharacters"     => $kiriwrite_lang->{error}->{serverportnumberinvalidcharacters},
12917                 "serverportnumbertoolong"       => $kiriwrite_lang->{error}->{serverportnumbertoolong},
12918                 "serverprotocolnametoolong"     => $kiriwrite_lang->{error}->{serverprotocolnametoolong},
12919                 "serverprotocolinvalid"         => $kiriwrite_lang->{error}->{serverprotocolinvalid},
12920                 "templatenameblank"             => $kiriwrite_lang->{error}->{templatenameblank},
12921                 "templatefilenameexists"        => $kiriwrite_lang->{error}->{templatefilenameexists},
12922                 "templatefilenameinvalid"       => $kiriwrite_lang->{error}->{templatefilenameinvalid},
12923                 "templatedatabaseerror"         => $kiriwrite_lang->{error}->{templatedatabaseerror},
12924                 "templatedatabaseinvalidpermissions"    => $kiriwrite_lang->{error}->{templatedatabaseinvalidpermissions},
12925                 "templatedatabaseinvalidformat" => $kiriwrite_lang->{error}->{templatedatabaseinvalidformat},
12926                 "templatedirectoryblank"        => $kiriwrite_lang->{error}->{templatedirectoryblank},
12927                 "templatedirectoryinvalid"      => $kiriwrite_lang->{error}->{templatedirectoryinvalid},
12928                 "templatedatabasenotcreated"    => $kiriwrite_lang->{error}->{templatedatabasenotcreated},
12929                 "templatefilenametoolong"       => $kiriwrite_lang->{error}->{templatefilenametoolong},
12930                 "templatenametoolong"           => $kiriwrite_lang->{error}->{templatenametoolong},
12931                 "templatedescriptiontoolong"    => $kiriwrite_lang->{error}->{templatedescriptiontoolong},
12932                 "templatedatabasemissing"       => $kiriwrite_lang->{error}->{templatedatabasemissing},
12933                 "templatedoesnotexist"          => $kiriwrite_lang->{error}->{templatedoesnotexist},
12934                 "templatefilenameblank"         => $kiriwrite_lang->{error}->{templatefilenameblank},
12936         );
12938         # Check if the specified error is blank and if it is
12939         # use the generic error messsage.
12941         if (!$kiriwrite_error{$error_type}){
12942                 $error_type = "generic";
12943         }
12945         $kiriwrite_presmodule->clear();
12947         $kiriwrite_presmodule->startbox("errorbox");
12948         $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{error}, { Style => "errorheader" });
12949         $kiriwrite_presmodule->addlinebreak();
12950         $kiriwrite_presmodule->addtext($kiriwrite_error{$error_type}, { Style => "errortext" });
12952         # Check to see if extended error information was passed.
12954         if ($error_extended){
12956                 # Write the extended error information.
12958                 $kiriwrite_presmodule->addlinebreak();
12959                 $kiriwrite_presmodule->addlinebreak();
12960                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{extendederror});
12961                 $kiriwrite_presmodule->addlinebreak();
12962                 $kiriwrite_presmodule->addlinebreak();
12963                 $kiriwrite_presmodule->startbox("datalist");
12964                 $kiriwrite_presmodule->addtext($error_extended);
12965                 $kiriwrite_presmodule->endbox();
12967         }
12969         $kiriwrite_presmodule->endbox();
12971         kiriwrite_output_header;
12972         kiriwrite_output_page($kiriwrite_lang->{error}->{error}, $kiriwrite_presmodule->grab(), "none");
12974         exit;
12978 sub kiriwrite_fileexists{
12979 #################################################################################
12980 # kiriwrite_fileexists: Check if a file exists and returns a value depending on #
12981 # if the file exists or not.                                                    #
12982 #                                                                               # 
12983 # Usage:                                                                        #
12984 #                                                                               #
12985 # kiriwrite_fileexists(filename);                                               #
12986 #                                                                               #
12987 # filename      Specifies the file name to check if it exists or not.           #
12988 #################################################################################
12990         # Get the value that was passed to the subroutine.
12992         my ($filename) = @_;
12994         # Check if the filename exists, if it does, return a value of 0, else
12995         # return a value of 1, meaning that the file was not found.
12997         if (-e $filename){
12999                 # Specified file does exist so return a value of 0.
13001                 return 0;
13003         } else {
13005                 # Specified file does not exist so return a value of 1.
13007                 return 1;
13009         }
13013 sub kiriwrite_filepermissions{
13014 #################################################################################
13015 # kiriwrite_filepermissions: Check if the file permissions of a file and return #
13016 # either a 1 saying that the permissions are valid or return a 0 saying that    #
13017 # the permissions are invalid.                                                  #
13018 #                                                                               #
13019 # Usage:                                                                        #
13020 #                                                                               #
13021 # kiriwrite_filepermissions(filename, [read], [write], [filemissingskip]);      #
13022 #                                                                               #
13023 # filename              Specifies the filename to check for permissions.        #
13024 # read                  Preform check that the file is readable.                #
13025 # write                 Preform check that the file is writeable.               #
13026 # filemissingskip       Skip the check of seeing if it can read or write if the #
13027 #                       file is missing.                                        #
13028 #################################################################################
13030         # Get the values that was passed to the subroutine.
13032         my ($filename, $readpermission, $writepermission, $ignorechecks) = @_;
13034         # Check to make sure that the read permission and write permission values
13035         # are only 1 character long.
13037         kiriwrite_variablecheck($readpermission, "maxlength", 1, 0);
13038         kiriwrite_variablecheck($writepermission, "maxlength", 1, 0);
13039         kiriwrite_variablecheck($ignorechecks, "maxlength", 1, 0);
13041         my $ignorechecks_result = 0;
13043         # Check if the file should be ignored for read and write checking if 
13044         # it doesn't exist.
13046         if ($ignorechecks){
13048                 if (-e $filename){
13050                         # The file exists so the checks are to be done.
13052                         $ignorechecks_result = 0;
13054                 } else {
13056                         # The file does not exist so the checks don't need to
13057                         # be done to prevent false positives.
13059                         $ignorechecks_result = 1;
13061                 }
13063         } else {
13065                 $ignorechecks_result = 0;
13067         }
13069         # Check if the file should be checked to see if it can be read.
13071         if ($readpermission && $ignorechecks_result eq 0){
13073                 # The file should be checked to see if it does contain read permissions
13074                 # and return a 0 if it is invalid.
13076                 if (-r $filename){
13078                         # The file is readable, so do nothing.
13080                 } else {
13082                         # The file is not readable, so return 1.
13084                         return 1;
13086                 }
13088         }
13090         # Check if the file should be checked to see if it can be written.
13092         if ($writepermission && $ignorechecks_result eq 0){
13094                 # The file should be checked to see if it does contain write permissions
13095                 # and return a 0 if it is invalid.
13097                 if (-w $filename){
13099                         # The file is writeable, so do nothing.
13101                 } else {
13103                         # The file is not writeable, so return 1.
13105                         return 1;
13107                 }
13109         }
13111         # No problems have occured, so return 0.
13113         return 0;
13117 sub kiriwrite_utf8convert{
13118 #################################################################################
13119 # kiriwrite_utf8convert: Properly converts values into UTF-8 values.            #
13120 #                                                                               #
13121 # Usage:                                                                        #
13122 #                                                                               #
13123 # utfstring     # The UTF-8 string to convert.                                  #
13124 #################################################################################
13126         # Get the values passed to the subroutine.
13128         my ($utfstring) = @_;
13130         # Load the Encode perl module.
13132         use Encode qw(decode_utf8);
13134         # Convert the string.
13136         my $finalutf8 = Encode::decode_utf8( $utfstring );
13138         return $finalutf8;
13142 sub kiriwrite_critical{
13143 #################################################################################
13144 # kiriwrite_critical: Displays an critical error message that cannot be         #
13145 # normally by the kiriwrite_error subroutine.                                   #
13146 #                                                                               #
13147 # Usage:                                                                        #
13148 #                                                                               #
13149 # errortype     Specifies the type of critical error that has occured.          #
13150 #################################################################################
13152         # Get the value that was passed to the subroutine.
13154         my ($error_type) = @_;
13156         my %error_list;
13158         # Get the error type from the errortype string.
13160         %error_list = (
13162                 # Generic critical error message.
13164                 "generic"                       => "A critical error has occured but the error is not known to Kiriwrite.",
13166                 # Specific critical error messages.
13168                 "configfilemissing"             => "The Kiriwrite configuration file is missing! Running the installer script for Kiriwrite is recommended.",
13169                 "configfileinvalidpermissions"  => "The Kiriwrite configuration file has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13170                 "dbmodulemissing"               => "The database module is missing! Running the installer script for Kiriwrite is recommended.",
13171                 "dbmoduleinvalidpermissions"    => "The database module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13172                 "dbmoduleinvalid"               => "The database module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13173                 "invalidvalue"                  => "An invalid value was passed.",
13174                 "languagefilenameblank"         => "The language filename given is blank! Running the installer script for Kiriwrite is recommended.",
13175                 "languagefilenameinvalid"       => "The language filename given is invalid! Running the installer script for Kiriwrite is recommended.",
13176                 "languagefilemissing"   => "The language filename given does not exist. Running the installer script for Kiriwrite is recommended.",
13177                 "languagefilenameinvalidpermissions"    => "The language file with the filename given has invalid permissions set. Please set the valid permission settings for the language file.",
13178                 "presmodulemissing"             => "The presentation module is missing! Running the installer script for Kiriwrite is recommended.",
13179                 "presmoduleinvalidpermissions"  => "The presentation module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the presentation module.",
13180                 "presmoduleinvalid"             => "The presentation module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13181         );
13183         if (!$error_list{$error_type}){
13185                 $error_type = "generic";
13187         }
13189         print header();
13190         print "Critical Error: " . $error_list{$error_type};
13191         exit;
13195 sub kiriwrite_output_page{
13196 #################################################################################
13197 # kiriwrite_output_page: Outputs the page to the browser/stdout/console.        #
13198 #                                                                               #
13199 # Usage:                                                                        #
13200 #                                                                               #
13201 # kiriwrite_output_page(pagetitle, pagedata, menutype);                         #
13202 #                                                                               #
13203 # pagetitle     Specifies the page title.                                       #
13204 # pagedata      Specifies the page data.                                        #
13205 # menutype      Prints out which menu to use.                                   #
13206 #################################################################################
13208         my ($pagetitle, $pagedata, $menutype) = @_;
13210         # Open the script page template and load it into the scriptpage variable,
13211         # while declaring the variable.
13213         open (my $filehandle_scriptpage, "<:utf8", 'page.html');
13214         my @scriptpage = <$filehandle_scriptpage>;
13215         binmode $filehandle_scriptpage, ':utf8';
13216         close ($filehandle_scriptpage);
13218         # Define the variables required.
13220         my $scriptpageline = "";
13221         my $pageoutput = "";
13222         my $menuoutput = "";
13224         $kiriwrite_presmodule->clear();
13226         # Print out the main menu for Kiriwrite.
13228         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{menu}->{viewdatabases} });
13229         $kiriwrite_presmodule->addtext(" | ");
13230         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page", { Text => $kiriwrite_lang->{menu}->{viewpages} });
13231         $kiriwrite_presmodule->addtext(" | ");
13232         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{menu}->{viewfilters} });
13233         $kiriwrite_presmodule->addtext(" | ");
13234         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{menu}->{viewtemplates} });
13235         $kiriwrite_presmodule->addtext(" | ");
13236         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{menu}->{compilepages} });
13237         $kiriwrite_presmodule->addtext(" | ");
13238         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{menu}->{viewsettings} });
13239         $kiriwrite_presmodule->addlinebreak();
13241         # Check what menu is going to be printed along with the default 'top' menu.
13243         if ($menutype eq "database"){
13245                 # If the menu type is database then print out the database sub-menu.
13247                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{database}->{submenu}->{viewdatabases} });
13248                 $kiriwrite_presmodule->addtext(" | ");
13249                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=new", { Text => $kiriwrite_lang->{database}->{submenu}->{adddatabase} });
13251         } elsif ($menutype eq "pages"){
13252                 # If the menu type is pages then print out the pages sub-menu.
13254                 # First, fetch the database name from the HTTP query string.
13256                 my $query = new CGI;
13257                 my $db_filename = $query->param('database');
13259                 # Check if a value has been placed in the db_filename string.
13261                 if (!$db_filename){
13263                         # As the database filename is blank, don't add an option to add a page.
13265                 } else {
13267                         # A database file has been specified so add an option to add a page to
13268                         # the selected database.
13270                         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page&action=add&database="  . $db_filename, { Text => $kiriwrite_lang->{pages}->{submenu}->{addpage} });
13272                 }
13274         } elsif ($menutype eq "filter"){
13276                 # If the menu type is filters then print out the filter sub-menu.
13278                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{submenu}->{showfilters} });
13279                 $kiriwrite_presmodule->addtext(" | ");
13280                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter&action=add", { Text => $kiriwrite_lang->{filter}->{submenu}->{addfilter} });
13282         } elsif ($menutype eq "settings"){
13284                 # If the menu type is options then print out the options sub-menu.
13286                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{submenu}->{viewsettings} });
13287                 $kiriwrite_presmodule->addtext(" | ");
13288                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings&action=edit", { Text => $kiriwrite_lang->{setting}->{submenu}->{editsettings} });
13290         } elsif ($menutype eq "template"){
13292                 # If the menu type is template then print out the template sub-menu.
13294                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{template}->{submenu}->{showtemplates} });
13295                 $kiriwrite_presmodule->addtext(" | ");
13296                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template&action=add", { Text => $kiriwrite_lang->{template}->{submenu}->{addtemplate} });
13298         } elsif ($menutype eq "compile"){
13300                 # If the menu type is compile then print out the compile sub-menu.
13302                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{submenu}->{listdatabases} });
13303                 $kiriwrite_presmodule->addtext(" | ");
13304                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=all", { Text => $kiriwrite_lang->{compile}->{submenu}->{compileall} });
13305                 $kiriwrite_presmodule->addtext(" | ");
13306                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=clean", { Text => $kiriwrite_lang->{compile}->{submenu}->{cleanoutputdirectory} });
13308         }
13310         $menuoutput = $kiriwrite_presmodule->grab();
13312         # Find <kiriwrite> tages and replace with the apporiate variables.
13314         foreach $scriptpageline (@scriptpage){
13316                 $scriptpageline =~ s/<kiriwrite:menu>/$menuoutput/g;
13317                 $scriptpageline =~ s/<kiriwrite:imagespath>/$kiriwrite_config{"directory_noncgi_images"}/g;
13318                 $scriptpageline =~ s/<kiriwrite:pagedata>/$pagedata/g;
13320                 # Check if page title specified is blank, otherwise add a page title
13321                 # to the title.
13323                 if ($pagetitle eq ""){
13324                         $scriptpageline =~ s/<kiriwrite:title>//g;
13325                 } else {
13326                         $scriptpageline =~ s/<kiriwrite:title>/ ($pagetitle)/g;
13327                 }
13329                 
13331                 # Append processed line to the pageoutput variable.
13333                 $pageoutput = $pageoutput . $scriptpageline;
13335         }
13337         binmode STDOUT, ':utf8';
13339         print $pageoutput;
13341         return;
13345 sub kiriwrite_output_xml{
13346 #################################################################################
13347 # kiriwrite_output_xml: Outputs several types of data to an XML file            #
13348 #                                                                               #
13349 # Usage:                                                                        #
13350 #                                                                               #
13351 # kiriwrite_output_xml(filename, type, settings);                               #
13352 #                                                                               #
13353 # filename      Specifies the filename of the XML file.                         #
13354 # type          Specifies the type of the XML file to be written.               #
13355 # settings              Specifies the following settings in any order.          #
13356 #                                                                               #
13357 # Settings for Kiriwrite configuration files:                                   #
13358 #                                                                               #
13359 # DatabaseDirectory     Specifies the new database directory to use.            #
13360 # OutputDirectory       Specifies the new output directory to use.              #
13361 # ImagesURIPath         Specifies the new URI path for images.                  #
13362 # DateTimeFormat        Specifies the new date and time format.                 #
13363 # SystemLanguage        Specifies the new language to use for Kiriwrite.        #
13364 # PrsentationModule     Specifies the new presentation module to use for        #
13365 #                       Kiriwrite.                                              #
13366 # DatabaseModule        Specifies the new database module to use for Kiriwrite. #
13367 # DatabaseServer        Specifies the database server to use.                   #
13368 # DaravasePort          Specifies the port the database server is running on.   #
13369 # DatabaseProtocol      Specifies the protocol the database server is using.    #
13370 # DatabaseSQLDatabase   Specifies the SQL database name to use.                 #
13371 # DatabaseUsername      Specifies the database server username.                 #
13372 # DatabasePassword      Specifies the password for the database server username.#
13373 # DatabaseTablePrefix   Specifies the table prefix to use.                      #
13374 #################################################################################
13376         # Get the variables passed from the subroutine.
13378         my $xml_filename        = shift;
13379         my $xml_type            = shift;
13380         my ($passedsettings)    = @_;
13382         # Check if filename is blank, if it is then return an error.
13384         if ($xml_filename eq ""){
13385                 # Filename is blank, return an error.
13386                 kiriwrite_error("blankfilename");
13387         }
13389         # Validate the XML filename to make sure nothing supicious is being passed.
13391         kiriwrite_variablecheck($xml_filename, "maxlength", 64, 0);
13392         kiriwrite_variablecheck($xml_filename, "filename", "", 0);
13394         # Check what type of XML data to output.
13396         if ($xml_type eq "config") {
13398                 # The type of XML data to output is a Kiriwrite configuration file.
13400                 # Get the data from the hash.
13402                 my $settings_databasedir                = $passedsettings->{"DatabaseDirectory"};
13403                 my $settings_outputdir                  = $passedsettings->{"OutputDirectory"};
13404                 my $settings_imagesuri                  = $passedsettings->{"ImagesURIPath"};
13405                 my $settings_datetime                   = $passedsettings->{"DateTimeFormat"};
13406                 my $settings_systemlanguage             = $passedsettings->{"SystemLanguage"};
13407                 my $settings_presmodule                 = $passedsettings->{"PresentationModule"};
13408                 my $settings_dbmodule                   = $passedsettings->{"DatabaseModule"};
13410                 my $settings_database_server            = $passedsettings->{"DatabaseServer"};
13411                 my $settings_database_port              = $passedsettings->{"DatabasePort"};
13412                 my $settings_database_protocol          = $passedsettings->{"DatabaseProtocol"};
13413                 my $settings_database_sqldatabase       = $passedsettings->{"DatabaseSQLDatabase"};
13414                 my $settings_database_username          = $passedsettings->{"DatabaseUsername"};
13415                 my $settings_database_password          = $passedsettings->{"DatabasePassword"};
13416                 my $settings_database_tableprefix       = $passedsettings->{"DatabaseTablePrefix"};
13418                 # Convert the password to make sure it can be read properly.
13420                 $settings_database_password =~ s/\0//g;
13421                 $settings_database_password =~ s/</&lt;/g;
13422                 $settings_database_password =~ s/>/&gt;/g;
13424                 # Convert the less than and greater than characters are there and
13425                 # convert them.
13427                 $settings_imagesuri =~ s/</&lt;/g;
13428                 $settings_imagesuri =~ s/>/&gt;/g;
13430                 # Create the XML data layout.
13432                 my $xmldata = "<?xml version=\"1.0\"?>\r\n\r\n<kiriwrite-config>\r\n";
13434                 $xmldata = $xmldata . "<!-- This file was automatically generated by Kiriwrite, please feel free to edit to your own needs. -->\r\n";
13435                 $xmldata = $xmldata . "\t<settings>\r\n\t\t<directories>\r\n";
13437                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_databasedir . "</database>\r\n";
13438                 $xmldata = $xmldata . "\t\t\t<output>" . $settings_outputdir  . "</output>\r\n";
13439                 $xmldata = $xmldata . "\t\t\t<images>" . $settings_imagesuri . "</images>\r\n";
13440                 $xmldata = $xmldata . "\t\t</directories>\r\n";
13442                 $xmldata = $xmldata . "\t\t<language>\r\n";
13443                 $xmldata = $xmldata . "\t\t\t<lang>" . $settings_systemlanguage . "</lang>\r\n";
13444                 $xmldata = $xmldata . "\t\t</language>\r\n";
13446                 $xmldata = $xmldata . "\t\t<system>\r\n";
13447                 $xmldata = $xmldata . "\t\t\t<presentation>" . $settings_presmodule . "</presentation>\r\n";
13448                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_dbmodule . "</database>\r\n";
13449                 $xmldata = $xmldata . "\t\t\t<datetime>" . $settings_datetime . "</datetime>\r\n";
13450                 $xmldata = $xmldata . "\t\t</system>\r\n";
13452                 $xmldata = $xmldata . "\t\t<database>\r\n";
13453                 $xmldata = $xmldata . "\t\t\t<server>" . $settings_database_server . "</server>\r\n";
13454                 $xmldata = $xmldata . "\t\t\t<port>" . $settings_database_port . "</port>\r\n";
13455                 $xmldata = $xmldata . "\t\t\t<protocol>" . $settings_database_protocol . "</protocol>\r\n";
13456                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_database_sqldatabase . "</database>\r\n";
13457                 $xmldata = $xmldata . "\t\t\t<username>" . $settings_database_username . "</username>\r\n";
13458                 $xmldata = $xmldata . "\t\t\t<password>" . $settings_database_password . "</password>\r\n";
13459                 $xmldata = $xmldata . "\t\t\t<prefix>" . $settings_database_tableprefix . "</prefix>\r\n";
13460                 $xmldata = $xmldata . "\t\t</database>\r\n";
13462                 $xmldata = $xmldata . "\t</settings>\r\n";
13464                 $xmldata = $xmldata . "</kiriwrite-config>";
13466                 # Open the Kiriwrite XML configuration file and write the new settings to the
13467                 # configuration file.
13469                 open(my $filehandle_xmlconfig, "> ", "kiriwrite.xml");
13470                 print $filehandle_xmlconfig $xmldata;
13471                 close($filehandle_xmlconfig);
13473         } else {
13475                 # The type of XML data is something else that is not supported by
13476                 # Kiriwrite, so return an error.
13478                 kiriwrite_error("invalidoption");
13480         }
13482         return;
13486 #################################################################################
13487 # End listing the functions needed.                                             #
13488 #################################################################################
13490 #################################################################################
13491 # Begin proper script execution.                                                #
13492 #################################################################################
13494 kiriwrite_settings_load;        # Load the configuration options.
13496 my $query = new CGI;            # Easily fetch variables from the HTTP string.
13500 # Check if a mode has been specified and if a mode has been specified, continue
13501 # and work out what mode has been specified.
13503 if ($query->param('mode')){
13504         my $http_query_mode = $query->param('mode');
13506         if ($http_query_mode eq "db"){
13508                 # If mode is 'db' (database), then check what action is required.
13510                 if ($query->param('action')){
13511                         # An action has been specified, so find out what action has been specified.
13513                         my $http_query_action = $query->param('action');
13515                         if ($http_query_action eq "edit"){
13516                                 # The edit action (which mean edit the settings for the selected database) has been specified,
13517                                 # get the database name and check if the action to edit an database has been confirmed.
13519                                 if ($query->param('database')){
13520                                         # If there is a value in the database variable check if it is a valid database. Otherwise,
13521                                         # return an error.
13523                                         my $http_query_database = $query->param('database');
13524                                 
13525                                         # Check if a value for confirm has been specified, if there is, check if it is the correct
13526                                         # value, otherwise return an error.
13528                                         if ($query->param('confirm')){
13529                                                 # A value for confirm has been specified, find out what value it is. If the value is correct
13530                                                 # then edit the database settings, otherwise return an error.
13532                                                 my $http_query_confirm = $query->param('confirm');
13534                                                 if ($http_query_confirm eq 1){
13535                                                         # Value is correct, collect the variables to pass onto the database variable.
13536         
13537                                                         # Get the variables from the HTTP query.
13538         
13539                                                         my $newdatabasename             = $query->param('databasename');
13540                                                         my $newdatabasedescription      = $query->param('databasedescription');
13541                                                         my $newdatabasefilename         = $query->param('databasefilename');
13542                                                         my $databaseshortname           = $query->param('database');
13543                                                         my $databasenotes               = $query->param('databasenotes');
13544                                                         my $databasecategories          = $query->param('databasecategories');
13546                                                         # Check the permissions of the database configuration file and return
13547                                                         # an error if the database permissions are invalid.
13548         
13549                                                         # Pass the variables to the database editing subroutine.
13551                                                         my $pagedata = kiriwrite_database_edit($databaseshortname, $newdatabasefilename, $newdatabasename, $newdatabasedescription, $databasenotes, $databasecategories, 1);
13552         
13553                                                         kiriwrite_output_header;
13554                                                         kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13555                                                         exit;
13556         
13557                                                 } else {
13558                                                         # Value is incorrect, return and error.
13559                                                         kiriwrite_error("invalidvariable");
13560                                                 } 
13562                                         }
13564                                         # Display the form for editing an database.
13565                                         my $pagedata = kiriwrite_database_edit($http_query_database);
13567                                         kiriwrite_output_header;
13568                                         kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13569                                         exit;
13571                                 } else {
13573                                         # If there is no value in the database variable, then return an error.
13574                                         kiriwrite_error("invalidvariable");
13576                                 }
13578                         } elsif ($http_query_action eq "delete"){
13580                                 # Action equested is to delete a database, find out if the user has already confirmed deletion of the database
13581                                 # and if the deletion of the database has been confirmed, delete the database.
13583                                 if ($query->param('confirm')){
13585                                         # User has confirmed to delete a database, pass the parameters to the kiriwrite_database_delete
13586                                         # subroutine.
13588                                         my $database_filename = $query->param('database');
13589                                         my $database_confirm = $query->param('confirm');
13590                                         my $pagedata = kiriwrite_database_delete($database_filename, $database_confirm);
13592                                         kiriwrite_output_header;
13593                                         kiriwrite_output_page($kiriwrite_lang->{database}->{deleteddatabase}, $pagedata, "database");
13595                                         exit;
13597                                 }
13599                                 # User has clicked on the delete link (thus hasn't confirmed the action to delete a database).
13601                                 my $database_filename = $query->param('database');
13602                                 my $pagedata = kiriwrite_database_delete($database_filename);
13604                                 kiriwrite_output_header;
13605                                 kiriwrite_output_page($kiriwrite_lang->{database}->{deletedatabase}, $pagedata, "database");
13607                                 exit;
13609                         } elsif ($http_query_action eq "new"){
13611                                 # Action requested is to create a new database, find out if the user has already entered the information needed
13612                                 # to create a database and see if the user has confirmed the action, otherwise printout a form for adding a
13613                                 # database.
13615                                 my $http_query_confirm = $query->param('confirm');
13617                                 # Check if the confirm value is correct.
13619                                 if ($http_query_confirm){
13620                                         if ($http_query_confirm eq 1){
13622                                                 # User has confirmed to create a database, pass the parameters to the 
13623                                                 # kiriwrite_database_add subroutine.
13625                                                 my $http_query_confirm = $query->param('confirm');
13627                                                 my $database_name               = $query->param('databasename');
13628                                                 my $database_description        = $query->param('databasedescription');
13629                                                 my $database_filename           = $query->param('databasefilename');
13630                                                 my $database_notes              = $query->param('databasenotes');
13631                                                 my $database_categories         = $query->param('databasecategories');
13633                                                 my $pagedata = kiriwrite_database_add($database_filename, $database_name, $database_description, $database_notes, $database_categories, $http_query_confirm);
13635                                                 kiriwrite_output_header;
13636                                                 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13637                                                 exit;
13639                                         } else {
13641                                                 # The confirm value is something else other than 1 (which it shouldn't be), so
13642                                                 # return an error.
13644                                         }
13645                                 }
13647                                 # User has clicked on the 'Add Database' link.
13649                                 my $pagedata = kiriwrite_database_add;
13651                                 kiriwrite_output_header;
13652                                 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13653                                 exit;
13655                         } else {
13656                                 # Another option has been specified, so return an error.
13658                                 kiriwrite_error("invalidaction");
13659                         }
13660                 }
13662                 # No action has been specified, do the default action of displaying a list
13663                 # of databases.
13665                 my $pagedata = kiriwrite_database_list;
13667                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
13668                 kiriwrite_output_page("", $pagedata, "database");       # Output the page to browser/console/stdout.
13669                 exit;                                   # End the script.
13671         } elsif ($http_query_mode eq "page"){
13673                 # If mode is 'page', then check what action is required.
13675                 if ($query->param('action')){
13676                         my $http_query_action = $query->param('action');
13678                         # Check if the action requested matches with one of the options below. If it does,
13679                         # go to that section, otherwise return an error.
13681                         if ($http_query_action eq "view"){
13683                                 # The action selected was to view pages from a database, 
13685                                 my $database_name       = $query->param('database');
13686                                 my $pagedata            = kiriwrite_page_list($database_name);
13688                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13689                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{viewingdatabase}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13690                                 exit;                   # End the script.
13692                         } elsif ($http_query_action eq "add"){
13694                                 # The action selected was to add a page to the selected database.
13696                                 my $http_query_confirm  = $query->param('confirm');
13698                                 if (!$http_query_confirm){
13700                                         $http_query_confirm = 0;
13702                                 }
13704                                 if ($http_query_confirm eq 1){
13705                 
13706                                         my $http_query_database         = $query->param('database');
13707                                         my $http_query_filename         = $query->param('pagefilename');
13708                                         my $http_query_name             = $query->param('pagename');
13709                                         my $http_query_description      = $query->param('pagedescription');
13710                                         my $http_query_section          = $query->param('pagesection');
13711                                         my $http_query_template         = $query->param('pagetemplate');
13712                                         my $http_query_settings         = $query->param('pagesettings');
13713                                         my $http_query_content          = $query->param('pagecontent');
13714                         
13715                                         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);
13717                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13718                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13719                                         exit;                           # End the script.
13721                                 }
13722                 
13723                                 my $http_query_database = $query->param('database');
13724                                 my $pagedata            = kiriwrite_page_add($http_query_database);
13726                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13727                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13728                                 exit;                           # End the script.
13730                         } elsif ($http_query_action eq "edit"){
13731                          
13732                                 # The action selected was to edit a page from a database.
13734                                 my $http_query_confirm = $query->param('confirm');
13736                                 if (!$http_query_confirm){
13738                                         $http_query_confirm = 0;
13740                                 }
13742                                 if ($http_query_confirm eq 1){
13744                                         # Get the needed values from the HTTP query.
13746                                         my $http_query_database         = $query->param('database');
13747                                         my $http_query_filename         = $query->param('page');
13748                                         my $http_query_newfilename      = $query->param('pagefilename');
13749                                         my $http_query_name             = $query->param('pagename');
13750                                         my $http_query_description      = $query->param('pagedescription');
13751                                         my $http_query_section          = $query->param('pagesection');
13752                                         my $http_query_template         = $query->param('pagetemplate');
13753                                         my $http_query_settings         = $query->param('pagesettings');
13754                                         my $http_query_content          = $query->param('pagecontent');
13756                                         # Pass the values to the editing pages subroutine.
13758                                         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);
13760                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13761                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages");   # Output the page to browser/console/stdout.
13762                                         exit;                           # End the script.
13764                                 }
13766                                 # Get the needed values from the HTTP query.
13768                                 my $http_query_database = $query->param('database');
13769                                 my $http_query_filename = $query->param('page');
13771                                 # Pass the values to the editing pages subroutine.
13773                                 my $pagedata = kiriwrite_page_edit($http_query_database, $http_query_filename);
13775                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13776                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages");   # Output the page to browser/console/stdout.
13777                                 exit;                           # End the script.
13780                         } elsif ($http_query_action eq "delete"){
13782                                 # The action selected was to delete a page from a database.
13784                                 my $http_query_database = $query->param('database');
13785                                 my $http_query_page     = $query->param('page');
13786                                 my $http_query_confirm  = $query->param('confirm');
13788                                 my $pagedata = "";
13789                                 my $selectionlist = "";
13791                                 if ($http_query_confirm){
13793                                         # The action has been confirmed, so try to delete the selected page
13794                                         # from the database.
13796                                         $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page, $http_query_confirm);
13798                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13799                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13800                                         exit;                           # End the script.
13802                                 }
13804                                 $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page);
13806                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13807                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13808                                 exit;                           # End the script.
13811                         } elsif ($http_query_action eq "multidelete"){
13813                                 # The action selected was to delete multiple pages from a
13814                                 # database.
13816                                 my $http_query_database = $query->param('database');
13817                                 my $http_query_confirm  = $query->param('confirm');
13819                                 my @filelist;
13820                                 my $pagedata;
13822                                 if ($http_query_confirm){
13824                                         # The action to delete multiple pages from the selected
13825                                         # database has been confirmed.
13827                                         @filelist       = kiriwrite_selectedlist();
13828                                         $pagedata       = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13830                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13831                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13832                                         exit;                           # End the script.
13834                                 }
13836                                 # Get the list of selected pages and pass them to the
13837                                 # multiple page delete subroutine.
13839                                 @filelist       = kiriwrite_selectedlist();
13840                                 $pagedata       = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13842                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13843                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13844                                 exit;                           # End the script.
13846                         } elsif ($http_query_action eq "multimove"){
13848                                 # The action selected was to move multiple pages from a
13849                                 # database.
13851                                 my $http_query_database         = $query->param('database');
13852                                 my $http_query_newdatabase      = $query->param('newdatabase');
13853                                 my $http_query_confirm          = $query->param('confirm');
13855                                 my @filelist;
13856                                 my $pagedata;
13858                                 if ($http_query_confirm){
13860                                         # The action to move multiple pages from the selected
13861                                         # database has been confirmed.
13863                                         @filelist       = kiriwrite_selectedlist();
13864                                         $pagedata       = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13866                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13867                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13868                                         exit;                           # End the script.
13870                                 }
13872                                 # Get the list of selected pages and pass them to the
13873                                 # multiple page move subroutine.
13875                                 @filelist       = kiriwrite_selectedlist();
13876                                 $pagedata       = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13878                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13879                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13880                                 exit;                           # End the script.
13882                         } elsif ($http_query_action eq "multicopy"){
13884                                 # The action selected was to copy multiple pages from a
13885                                 # database.
13887                                 my $http_query_database         = $query->param('database');
13888                                 my $http_query_newdatabase      = $query->param('newdatabase');
13889                                 my $http_query_confirm          = $query->param('confirm');
13891                                 my @filelist;
13892                                 my $pagedata;
13894                                 if ($http_query_confirm){
13896                                         # The action to copy multiple pages from the selected
13897                                         # database has been confirmed.
13899                                         @filelist       = kiriwrite_selectedlist();
13900                                         $pagedata       = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13902                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13903                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13904                                         exit;                           # End the script.
13906                                 }
13908                                 # Get the list of selected pages and pass them to the
13909                                 # multiple page copy subroutine.
13911                                 @filelist       = kiriwrite_selectedlist();
13912                                 $pagedata       = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13914                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13915                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13916                                 exit;                           # End the script.
13918                         } elsif ($http_query_action eq "multiedit"){
13920                                 # The action selected was to edit multiple pages from a
13921                                 # database.
13923                                 my $http_query_database         = $query->param('database');
13924                                 my $http_query_newsection       = $query->param('newsection');
13925                                 my $http_query_altersection     = $query->param('altersection');
13926                                 my $http_query_newtemplate      = $query->param('newtemplate');
13927                                 my $http_query_altertemplate    = $query->param('altertemplate');
13928                                 my $http_query_newsettings      = $query->param('newsettings');
13929                                 my $http_query_altersettings    = $query->param('altersettings');
13930                                 my $http_query_confirm          = $query->param('confirm');
13932                                 my @filelist;
13933                                 my $pagedata;
13935                                 if (!$http_query_confirm){
13937                                         @filelist       = kiriwrite_selectedlist();
13938                                         $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);
13940                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13941                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13942                                         exit;
13944                                 }
13946                                 # Get the list of selected pages and pass them to the
13947                                 # multiple page edit subroutine.
13949                                 @filelist       = kiriwrite_selectedlist();
13950                                 $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);
13952                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13953                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13954                                 exit;                           # End the script.
13956                         } else {
13957                                 kiriwrite_error("invalidaction");
13958                         }
13960                 } else {
13962                         # If there the action option is left blank, then print out a form where the database
13963                         # can be selected to view pages from.
13965                         my $pagedata = kiriwrite_page_list;
13967                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13968                         kiriwrite_output_page($kiriwrite_lang->{pages}->{databaseselecttitle}, $pagedata, "pages");     # Output the page to browser/console/stdout.
13969                         exit;                           # End the script.
13971                 }
13973                 # No action has been specified, do the default action of listing pages from
13974                 # the first database found in the directory.
13976         } elsif ($http_query_mode eq "filter"){
13978                 # If there's a value for action in the HTTP query, then
13979                 # get that value that is in the HTTP query.
13981                 if ($query->param('action')){
13983                         # There is a value for action in the HTTP query,
13984                         # so get the value from it.
13986                         my $http_query_action = $query->param('action');
13988                         if ($http_query_action eq "add"){
13990                                 # The action the user requested is to add a filter to the
13991                                 # filter database.
13993                                 # Check if there is a value in confirm and if there is
13994                                 # then pass it on to the new find and replace words
13995                                 # to add to the filter database.
13997                                 my $http_query_confirm = $query->param('confirm');
13999                                 if ($http_query_confirm){
14001                                         # There is a value in http_query_confirm, so pass on the
14002                                         # new find and replace words so that they can be added
14003                                         # to the filter database.
14005                                         my $http_query_findwords        = $query->param('findword');
14006                                         my $http_query_replacewords     = $query->param('replaceword');
14007                                         my $http_query_priority         = $query->param('priority');
14008                                         my $http_query_notes            = $query->param('notes');
14009                                 
14010                                         my $pagedata = kiriwrite_filter_add($http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
14012                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14013                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14014                                         exit;                           # End the script.
14016                                 }
14018                                 my $pagedata = kiriwrite_filter_add();
14020                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14021                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14022                                 exit;                           # End the script.
14024                         } elsif ($http_query_action eq "edit"){
14026                                 # The action the user requested is to edit an filter from
14027                                 # the filter database.
14029                                 my $http_query_number = $query->param('filter');
14030                                 my $http_query_confirm = $query->param('confirm');
14032                                 if ($http_query_confirm){
14034                                         # There is a value in http_query_confirm, so pass on the
14035                                         # new find and replace words so that the filter database
14036                                         # can be edited.
14038                                         my $http_query_findwords        = $query->param('filterfind');
14039                                         my $http_query_replacewords     = $query->param('filterreplace');
14040                                         my $http_query_priority         = $query->param('priority');
14041                                         my $http_query_notes            = $query->param('notes');
14043                                         my $pagedata = kiriwrite_filter_edit($http_query_number, $http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
14045                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14046                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter");    # Output the page to browser/console/stdout.
14047                                         exit;                           # End the script.
14049                                 }
14051                                 my $pagedata = kiriwrite_filter_edit($http_query_number);
14053                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14054                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter");    # Output the page to browser/console/stdout.
14055                                 exit;                                   # End the script.
14057                         } elsif ($http_query_action eq "delete"){
14059                                 # The action the user requested is to delete an filter
14060                                 # from the filter database.
14062                                 my $http_query_number = $query->param('filter');
14063                                 my $http_query_confirm = $query->param('confirm');
14065                                 if ($http_query_confirm){
14067                                         my $pagedata = kiriwrite_filter_delete($http_query_number, $http_query_confirm);
14069                                         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14070                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14071                                         exit;                                   # End the script
14073                                 }
14075                                 my $pagedata = kiriwrite_filter_delete($http_query_number);
14077                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14078                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter");  # Output the page to browser/console/stdout.
14079                                 exit;                                   # End the script.
14081                         } else {
14083                                 # Another action was requested that was not one of 
14084                                 # the ones prcedding this catch all, so return
14085                                 # an error saying that an invalid option was
14086                                 # specified.
14088                                 kiriwrite_error("invalidaction");
14090                         }
14092                 } else {
14094                         my $pagedata = kiriwrite_filter_list();
14096                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14097                         kiriwrite_output_page($kiriwrite_lang->{filter}->{viewfilters}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14098                         exit;                           # End the script.
14100                 }
14104         } elsif ($http_query_mode eq "template"){
14106                 # Check if an action has been specified in the HTTP query.
14108                 if ($query->param('action')){
14110                         # An action has been specified in the HTTP query.
14112                         my $http_query_action = $query->param('action');
14114                         if ($http_query_action eq "delete"){
14115                                 # Get the required parameters from the HTTP query.
14117                                 my $http_query_template = $query->param('template');
14118                                 my $http_query_confirm  = $query->param('confirm');
14120                                 # Check if a value for confirm has been specified (it shouldn't)
14121                                 # be blank.
14123                                 if (!$http_query_confirm){
14124                                         # The confirm parameter of the HTTP query is blank, so
14125                                         # write out a form asking the user to confirm the deletion
14126                                         # of the selected template.
14128                                         my $pagedata = kiriwrite_template_delete($http_query_template);
14130                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14131                                         kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template");    # Output the page to browser/console/stdout.
14132                                         exit;                           # End the script.
14134                                 } else {
14136                                         my $pagedata = kiriwrite_template_delete($http_query_template, $http_query_confirm);
14138                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14139                                         kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template");    # Output the page to browser/console/stdout.
14140                                         exit;                           # End the script.
14142                                 }
14144                         } elsif ($http_query_action eq "add") {
14146                                 # Get the variables from the HTTP query in preperation for processing.
14148                                 my $http_query_confirm  = $query->param('confirm');
14149                                 my $http_query_templatelayout   = $query->param('templatelayout');
14150                                 my $http_query_templatename     = $query->param('templatename');
14151                                 my $http_query_templatedescription = $query->param('templatedescription');
14152                                 my $http_query_templatefilename = $query->param('templatefilename');
14154                                 # Check if there is a confirmed value in the http_query_confirm variable.
14156                                 if (!$http_query_confirm){
14158                                         # Since there is no confirm value, print out a form for creating a new
14159                                         # template.
14161                                         my $pagedata = kiriwrite_template_add();
14163                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14164                                         kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template");       # Output the page to browser/console/stdout.
14165                                         exit;                           # End the script.
14167                                 } else {
14169                                         # A value in the http_query_confirm value is specified, so pass the
14170                                         # variables onto the kiriwrite_template_add subroutine.
14172                                         my $pagedata = kiriwrite_template_add($http_query_templatefilename, $http_query_templatename, $http_query_templatedescription, $http_query_templatelayout, $http_query_confirm);
14174                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14175                                         kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template");       # Output the page to browser/console/stdout.
14176                                         exit;                           # End the script.
14178                                 }
14180                         } elsif ($http_query_action eq "edit") {
14182                                 # Get the required parameters from the HTTP query.
14184                                 my $http_query_templatefile     = $query->param('template');
14185                                 my $http_query_confirm          = $query->param('confirm');
14187                                 # Check to see if http_query_confirm has a value of '1' in it and
14188                                 # if it does, edit the template using the settings providied.
14190                                 if (!$http_query_confirm){
14192                                         # Since there is no confirm value, open the template configuration
14193                                         # file and the template file itself then print out the data on to
14194                                         # the form.
14196                                         my $pagedata = kiriwrite_template_edit($http_query_templatefile);
14197                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14198                                         kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template");      # Output the page to browser/console/stdout.
14199                                         exit;                           # End the script.
14201                                 } elsif ($http_query_confirm eq 1) {
14203                                         # Since there is a confirm value of 1, the user has confirm the
14204                                         # action of editing of a template so get the other variables 
14205                                         # that were also sent and pass the variables to the subroutine.
14207                                         my $http_query_newfilename      = $query->param('newfilename');
14208                                         my $http_query_newname          = $query->param('newname');
14209                                         my $http_query_newdescription   = $query->param('newdescription');
14210                                         my $http_query_newlayout        = $query->param('newlayout');
14212                                         my $pagedata = kiriwrite_template_edit($http_query_templatefile, $http_query_newfilename, $http_query_newname, $http_query_newdescription, $http_query_newlayout, $http_query_confirm);
14213                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14214                                         kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template");      # Output the page to browser/console/stdout.
14215                                         exit;                           # End the script.
14217                                 } else {
14219                                         # Another confirm value is there instead of '0' or '1'. Return
14220                                         # an error saying it is invalid.
14222                                         kiriwrite_error("invalidvariable");
14224                                 }
14226                         } else {
14228                                 # Another action was specified and was not one of the ones above, so
14229                                 # return an error.
14231                                 kiriwrite_error("invalidaction");
14233                         }
14235                 } else {
14237                         # If the action option is left blank, then print out a form where the list
14238                         # of templates are available.
14240                         my $pagedata = kiriwrite_template_list;
14242                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14243                         kiriwrite_output_page($kiriwrite_lang->{template}->{viewtemplates}, $pagedata, "template");     # Output the page to browser/console/stdout.
14244                         exit;                           # End the script.
14246                 }
14248         } elsif ($http_query_mode eq "compile"){
14250                 # The mode selected is to compile pages from databases.
14252                 # If the action option is left blank, then print out a form where the list
14253                 # of databases to compile are available.
14255                 if ($query->param('action')){
14257                         my $http_query_action = $query->param('action');
14259                         if ($http_query_action eq "compile"){
14261                                 # The specified action is to compile the pages, check if the
14262                                 # action to compile the page has been confirmed.
14264                                 my $http_query_confirm  = $query->param('confirm');
14265                                 my $http_query_type     = $query->param('type');
14267                                 # If it is blank, set the confirm value to 0.
14269                                 if (!$http_query_confirm){
14271                                         # The http_query_confirm variable is uninitalised, so place a
14272                                         # '0' (meaning an unconfirmed action).
14274                                         $http_query_confirm = 0;
14276                                 }
14278                                 # If the compile type is blank then return an error.
14280                                 if (!$http_query_type){
14282                                         # Compile type is blank so return an error.
14284                                         kiriwrite_error("blankcompiletype");
14286                                 }
14288                                 if ($http_query_type eq "multiple"){
14290                                         if ($http_query_confirm eq 1){
14292                                                 # The action to compile the pages has been confirmed so
14293                                                 # compile the pages.
14295                                                 my @selectedlist = kiriwrite_selectedlist();
14296                                                 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14298                                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14299                                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14300                                                 exit;                           # End the script.
14302                                         } else {
14304                                                 # The action to compile the pages has not been confirmed
14305                                                 # so write a form asking the user to confirm the action
14306                                                 # of compiling the pages.
14308                                                 my @selectedlist = kiriwrite_selectedlist();
14309                                                 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14311                                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14312                                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compileselecteddatabases}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14313                                                 exit;                           # End the script.
14315                                         }
14317                                 } elsif ($http_query_type eq "single"){
14319                                         my $http_query_database = $query->param('database');
14320                                         my @selectedlist;
14321                                         $selectedlist[0] = $http_query_database;
14322                                         my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14324                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14325                                         kiriwrite_output_page($kiriwrite_lang->{compile}->{compiledatabase}, $pagedata, "compile");
14326                                         exit;                           # End the script.
14328                                 } else {
14330                                         kiriwrite_error("invalidcompiletype");
14332                                 }
14334                         } elsif ($http_query_action eq "all"){
14336                                 # The selected action is to compile all of the databases
14337                                 # in the database directory. Check if the action to
14338                                 # compile all of the databases has been confirmed.
14340                                 my $http_query_confirm = $query->param('confirm');
14342                                 if (!$http_query_confirm){
14344                                         # The http_query_confirm variable is uninitalised, so place a
14345                                         # '0' (meaning an unconfirmed action).
14347                                         $http_query_confirm = 0;
14349                                 }
14351                                 if ($http_query_confirm eq 1){
14353                                         # The action to compile all the databases has been confirmed.
14355                                 }
14357                                 my $pagedata = kiriwrite_compile_all();
14359                                 kiriwrite_output_header;                        # Output the header to browser/console/stdout.
14360                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilealldatabases}, $pagedata, "compile");
14361                                 exit;
14363                         } elsif ($http_query_action eq "clean") {
14365                                 # The selected action is to clean the output directory.
14366                                 # Check if the action to clean the output directory
14367                                 # has been confirmed.
14369                                 my $http_query_confirm = $query->param('confirm');
14371                                 if (!$http_query_confirm){
14373                                         # The http_query_confirm variable is uninitalised, so place a
14374                                         # '0' (meaning an unconfirmed action).
14376                                         $http_query_confirm = 0;
14378                                 }
14380                                 if ($http_query_confirm eq 1){
14382                                         # The action to clean the output directory has been confirmed.
14384                                         my $pagedata = kiriwrite_compile_clean($http_query_confirm);
14386                                         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14387                                         kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14388                                         exit;                                   # End the script.
14389                         
14390                                 }
14392                                 # The action to clean the output directory is not
14393                                 # confirmed, so write a page asking the user
14394                                 # to confirm cleaning the output directory.
14396                                 my $pagedata = kiriwrite_compile_clean();
14398                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14399                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14400                                 exit;                                   # End the script.
14402                         } else {
14404                                 # The action specified was something else other than those
14405                                 # above, so return an error.
14407                                 kiriwrite_error("invalidaction");
14409                         }
14410                 }
14412                 my $pagedata = kiriwrite_compile_list;
14414                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14415                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14416                 exit;                                   # End the script.
14418         } elsif ($http_query_mode eq "settings"){
14420                 # The mode selected is view (and change settings).
14422                 # If the action value has been left blank, then view the list of
14423                 # current settings.
14425                 if ($query->param('action')){
14426                         my $http_query_action = $query->param('action');
14428                         if ($http_query_action eq "edit"){
14430                                 # The action specified is to edit the settings. Check if the action
14431                                 # to edit the settings has been confirmed.
14433                                 my $http_query_confirm = $query->param('confirm');
14435                                 if (!$http_query_confirm){
14437                                         # The confirm value is blank, so set it to 0.
14439                                         $http_query_confirm = 0;
14441                                 }
14443                                 if ($http_query_confirm eq 1){
14445                                         # The action to edit the settings has been confirmed. Get the
14446                                         # required settings from the HTTP query.
14448                                         my $http_query_database         = $query->param('databasedir');
14449                                         my $http_query_output           = $query->param('outputdir');
14450                                         my $http_query_imagesuri        = $query->param('imagesuripath');
14451                                         my $http_query_datetimeformat   = $query->param('datetime');
14452                                         my $http_query_systemlanguage   = $query->param('language');
14453                                         my $http_query_presmodule       = $query->param('presmodule');
14454                                         my $http_query_dbmodule         = $query->param('dbmodule');
14456                                         my $http_query_database_server          = $query->param('database_server');
14457                                         my $http_query_database_port            = $query->param('database_port');
14458                                         my $http_query_database_protocol        = $query->param('database_protocol');
14459                                         my $http_query_database_sqldatabase     = $query->param('database_sqldatabase');
14460                                         my $http_query_database_username        = $query->param('database_username');
14461                                         my $http_query_database_passwordkeep    = $query->param('database_password_keep');
14462                                         my $http_query_database_password        = $query->param('database_password');
14463                                         my $http_query_database_tableprefix     = $query->param('database_tableprefix');
14465                                         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 });
14467                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14468                                         kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14469                                         exit;                           # End the script.
14471                                 }
14473                                 # The action to edit the settings has not been confirmed.
14475                                 my $pagedata = kiriwrite_settings_edit;
14477                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14478                                 kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14479                                 exit;                           # End the script.
14481                         } else {
14483                                 # The action specified was something else other than those
14484                                 # above, so return an error.
14486                                 kiriwrite_error("invalidaction");
14488                         }
14490                 }
14492                 # No action has been specified, so print out the list of settings currently being used.
14494                 my $pagedata = kiriwrite_settings_view;
14496                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14497                 kiriwrite_output_page($kiriwrite_lang->{setting}->{viewsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14498                 exit;                                   # End the script.
14500         } else {
14501                 # Another mode has been specified than the ones above, so return an error saying that
14502                 # an invalid option was specified.
14504                 kiriwrite_error("invalidmode");
14505         }
14507 } else {
14509         # No mode has been specified, so print the default "first-run" view of the
14510         # database list.
14512         my $pagedata = kiriwrite_database_list;
14514         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14515         kiriwrite_output_page("", $pagedata, "database");       # Output the page to browser/console/stdout.
14516         exit;                                   # End the script.
14520 __END__
14522 =head1 NAME
14524 Kiriwrite
14526 =head1 DESCRIPTION
14528 Web-based webpage compiler.
14530 =head1 AUTHOR
14532 Steve Brokenshire <sbrokenshire@xestia.co.uk>
14534 =head1 USAGE
14536 This perl script is intended to be used on a web server which has CGI with Perl support or with mod_perl support.
14538 =head1 DOCUMENTATION
14540 For more information on how to use Kiriwrite, please see the documentation that was included with Kiriwrite.
14542 - From the Xestia Documentation website: http://documentation.xestia.co.uk and click on the Kiriwrite link on the page.
14544 - From the Documentation directory from the Kiriwrite source packages (.tar/.tar.gz/.tar.bz2).
14546 - 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