Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Still more fiddling with the loading stuff.
[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->addhiddendata("mode", "page");
588                 $kiriwrite_presmodule->addhiddendata("action", "add");
589                 $kiriwrite_presmodule->addhiddendata("database", $pagedatabase);
590                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
591                 $kiriwrite_presmodule->addlinebreak();
592                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
594                 $kiriwrite_presmodule->startheader();
595                 $kiriwrite_presmodule->addcell("tablecellheader");
596                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{setting});
597                 $kiriwrite_presmodule->endcell();
598                 $kiriwrite_presmodule->addcell("tablecellheader");
599                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{value});
600                 $kiriwrite_presmodule->endcell();
601                 $kiriwrite_presmodule->endheader();
603                 $kiriwrite_presmodule->startrow();
604                 $kiriwrite_presmodule->addcell("tablecell1");
605                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{database});
606                 $kiriwrite_presmodule->endcell();
607                 $kiriwrite_presmodule->addcell("tablecell2");
608                 $kiriwrite_presmodule->addtext($database_name);
609                 $kiriwrite_presmodule->endcell();
610                 $kiriwrite_presmodule->endrow();
612                 $kiriwrite_presmodule->startrow();
613                 $kiriwrite_presmodule->addcell("tablecell1");
614                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagename});
615                 $kiriwrite_presmodule->endcell();
616                 $kiriwrite_presmodule->addcell("tablecell2");
617                 $kiriwrite_presmodule->addinputbox("pagename", { Size => 64, MaxLength => 512 });
618                 $kiriwrite_presmodule->endcell();
619                 $kiriwrite_presmodule->endrow();
621                 $kiriwrite_presmodule->startrow();
622                 $kiriwrite_presmodule->addcell("tablecell1");
623                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedescription});
624                 $kiriwrite_presmodule->endcell();
625                 $kiriwrite_presmodule->addcell("tablecell2");
626                 $kiriwrite_presmodule->addinputbox("pagedescription", { Size => 64, MaxLength => 512 });
627                 $kiriwrite_presmodule->endcell();
628                 $kiriwrite_presmodule->endrow();
630                 $kiriwrite_presmodule->startrow();
631                 $kiriwrite_presmodule->addcell("tablecell1");
632                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
633                 $kiriwrite_presmodule->endcell();
634                 $kiriwrite_presmodule->addcell("tablecell2");
635                 $kiriwrite_presmodule->addinputbox("pagesection", { Size => 64, MaxLength => 256 });
636                 $kiriwrite_presmodule->endcell();
637                 $kiriwrite_presmodule->endrow();
639                 $kiriwrite_presmodule->startrow();
640                 $kiriwrite_presmodule->addcell("tablecell1");
641                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
642                 $kiriwrite_presmodule->endcell();
643                 $kiriwrite_presmodule->addcell("tablecell2");
645                 # Check if the template warning value has been set
646                 # and write the error message in place of the templates
647                 # list if it is.
649                 if ($template_warning eq 1){
651                         $kiriwrite_presmodule->addhiddendata("pagetemplate", "!none");
652                         $kiriwrite_presmodule->addtext($template_warningmessage);
654                 } else {
656                         my $template_file;
657                         my $page_filename;
658                         my $page_name;
660                         $kiriwrite_presmodule->addselectbox("pagetemplate");
662                         foreach $template_file (keys %template_list){
664                                 $page_filename  = $template_list{$template_file}{Filename};
665                                 $page_name      = $template_list{$template_file}{Name};
666                                 $kiriwrite_presmodule->addoption($page_name . " (" . $page_filename . ")", { Value => $page_filename });
667                                 $template_count++;
669                                 $template_count = 0;
670                         }
672                         $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
673                         $kiriwrite_presmodule->endselectbox();
675                 }
677                 $kiriwrite_presmodule->endcell();
678                 $kiriwrite_presmodule->endrow();
680                 $kiriwrite_presmodule->startrow();
681                 $kiriwrite_presmodule->addcell("tablecell1");
682                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagefilename});
683                 $kiriwrite_presmodule->endcell();
684                 $kiriwrite_presmodule->addcell("tablecell2");
685                 $kiriwrite_presmodule->addinputbox("pagefilename", { Size => 64, MaxLength => 256 });
686                 $kiriwrite_presmodule->endcell();
687                 $kiriwrite_presmodule->endrow();
689                 $kiriwrite_presmodule->startrow();
690                 $kiriwrite_presmodule->addcell("tablecell1");
691                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagecontent});
692                 $kiriwrite_presmodule->endcell();
693                 $kiriwrite_presmodule->addcell("tablecell2");
694                 $kiriwrite_presmodule->addtextbox("pagecontent", { Columns => 50, Rows => 10 });
695                 $kiriwrite_presmodule->addlinebreak();
696                 $kiriwrite_presmodule->addlinebreak();
697                 $kiriwrite_presmodule->startbox("datalist");
698                 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
699                 $kiriwrite_presmodule->addlinebreak();
700                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
701                 $kiriwrite_presmodule->addlinebreak();
702                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
703                 $kiriwrite_presmodule->addlinebreak();
704                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
705                 $kiriwrite_presmodule->addlinebreak();
706                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
707                 $kiriwrite_presmodule->addlinebreak();
708                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
709                 $kiriwrite_presmodule->addlinebreak();
710                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
711                 $kiriwrite_presmodule->addlinebreak();
712                 $kiriwrite_presmodule->endbox();
713                 $kiriwrite_presmodule->endcell();
714                 $kiriwrite_presmodule->endrow();
716                 $kiriwrite_presmodule->startrow();
717                 $kiriwrite_presmodule->addcell("tablecell1");
718                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
719                 $kiriwrite_presmodule->endcell();
720                 $kiriwrite_presmodule->addcell("tablecell2");
721                 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", Selected => 1, LineBreak => 1});
722                 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", Selected => 0, LineBreak => 1});
723                 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", Selected => 0, LineBreak => 1});
724                 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", Selected => 0, LineBreak => 1});
725                 $kiriwrite_presmodule->endcell();
726                 $kiriwrite_presmodule->endrow();
728                 $kiriwrite_presmodule->endtable();
730                 $kiriwrite_presmodule->addlinebreak();
731                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{addpagebutton});
732                 $kiriwrite_presmodule->addtext(" | ");
733                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
734                 $kiriwrite_presmodule->addtext(" | ");
735                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $pagedatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
736                 $kiriwrite_presmodule->endform();
738                 return $kiriwrite_presmodule->grab();
740         } else {
742                 # The confirm value is something else than '1' or '0' so
743                 # return an error.
745                 kiriwrite_error("invalidvalue");
747         }
753 sub kiriwrite_page_delete{
754 #################################################################################
755 # kiriwrite_page_delete: Deletes a (single) page from a database.               #
756 #                                                                               #
757 # Usage:                                                                        #
758 #                                                                               #
759 # kiriwrite_page_delete(database, page, [confirm]);                             #
760 #                                                                               #
761 # database      Specifies the database to delete from.                          #
762 # page          Specifies the page to delete.                                   #
763 # confirm       Confirms the action to delete the page.                         #
764 #################################################################################
766         my ($database, $page, $confirm) = @_;
768         # Check if the database filename is valid and return an error if
769         # it isn't.
771         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
773         if ($pagedatabase_filename_check eq 1){
775                 # The database filename is blank, so return an error.
777                 kiriwrite_error("blankdatabasepageadd");
779         } elsif ($pagedatabase_filename_check eq 2){
781                 # The database filename is invalid, so return an error.
783                 kiriwrite_error("databasefilenameinvalid");
785         }
787         # Check the length the database name and return an error if it's
788         # too long.
790         my $pagedatabase_length_check   = kiriwrite_variablecheck($database, "maxlength", 32, 1);
792         if ($pagedatabase_length_check eq 1){
794                 # The database name is too long, so return an error.
796                 kiriwrite_error("databasefilenametoolong");
798         }
800         # Check if the page name is specified is blank and return an error if
801         # it is.
803         if (!$page){
805                 # The page name is blank, so return an error.
807                 kiriwrite_error("blankfilename");
809         }
811         # If the confirm value is blank, then set the confirm value to 0.
813         if (!$confirm){
815                 $confirm = 0;
817         }
819         if ($confirm eq 1){
821                 # The action to delete the selected page from the database
822                 # has been confirmed.
824                 # Connect to the database server.
826                 $kiriwrite_dbmodule->connect();
828                 # Check if any errors occured while connecting to the database server.
830                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
832                         # A database connection error has occured so return
833                         # an error.
835                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
837                 }
839                 # Select the database to delete the page from.
841                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
843                 # Check if any errors had occured while selecting the database.
845                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
847                         # The database does not exist, so return an error.
849                         kiriwrite_error("databasemissingfile");
851                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
853                         # The database has invalid permissions set, so return
854                         # an error.
856                         kiriwrite_error("databaseinvalidpermissions");
858                 }
860                 # Check if the database has write permissions.
862                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
864                 if ($database_permissions eq 1){
866                         # The database permissions are invalid so return an error.
868                         kiriwrite_error("databaseinvalidpermissions");
870                 }
872                 # Get the information about the database.
874                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
876                 # Check if any error occured while getting the database information.
878                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
880                         # A database error has occured so return an error and
881                         # also the extended error information.
883                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
885                 }
887                 # Get the information about the page that is going to be deleted.
889                 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
891                 # Check if any errors occured while getting the page information.
893                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
895                         # A database error has occured so return an error and
896                         # also the extended error information.
898                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
900                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
902                         # The page does not exist, so return an error.
904                         kiriwrite_error("pagefilenamedoesnotexist");
906                 }
908                 # Delete the page from the database.
910                 $kiriwrite_dbmodule->deletepage({ PageFilename => $page });
912                 # Check if any errors occured while deleting the page from the database.
914                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
916                         # A database error has occured so return an error and
917                         # also the extended error information.
919                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
921                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
923                         # The page does not exist, so return an error.
925                         kiriwrite_error("pagefilenamedoesnotexist");
927                 }
929                 # Get the database name and page name.
931                 my $database_name       = $database_info{"DatabaseName"};
932                 my $page_name           = $page_info{"PageName"};
934                 # Disconnect from the database server.
936                 $kiriwrite_dbmodule->disconnect();
938                 # Write out a message saying that the selected page from
939                 # the database has been deleted.
941                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedeleted}, { Style => "pageheader" });
942                 $kiriwrite_presmodule->addlinebreak();
943                 $kiriwrite_presmodule->addlinebreak();
944                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagedeletedmessage}, $page_name, $database_name));
945                 $kiriwrite_presmodule->addlinebreak();
946                 $kiriwrite_presmodule->addlinebreak();
947                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
949                 return $kiriwrite_presmodule->grab();
951         } elsif ($confirm eq 0){
953                 # Connect to the database server.
955                 $kiriwrite_dbmodule->connect();
957                 # Check if any errors occured while connecting to the database server.
959                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
961                         # A database connection error has occured so return
962                         # an error.
964                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
966                 }
968                 # Select the database.
970                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
972                 # Check if any errors had occured while selecting the database.
974                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
976                         # The database does not exist, so return an error.
978                         kiriwrite_error("databasemissingfile");
980                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
982                         # The database has invalid permissions set, so return
983                         # an error.
985                         kiriwrite_error("databaseinvalidpermissions");
987                 }
989                 # Get information about the database.
991                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
993                 # Check if any errors occured while getting the database information.
995                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
997                         # A database error has occured so return an error and
998                         # also the extended error information.
1000                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1002                 }
1004                 # Get information about the page that is going to be deleted.
1006                 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
1008                 # Check if any errors occured while getting the page information.
1010                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1012                         # A database error has occured so return an error and
1013                         # also the extended error information.
1015                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1017                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1019                         # The page does not exist, so return an error.
1021                         kiriwrite_error("pagefilenamedoesnotexist");
1023                 }
1025                 my $database_name       = $database_info{"DatabaseName"};
1026                 my $page_name           = $page_info{"PageName"};
1028                 # Disconnect from the database server.
1030                 $kiriwrite_dbmodule->disconnect();
1032                 # Write a message asking the user to confirm the deletion of the
1033                 # page.
1035                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletepage}, $page_name), { Style => "pageheader" });
1036                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1037                 $kiriwrite_presmodule->addhiddendata("mode", "page");
1038                 $kiriwrite_presmodule->addhiddendata("action", "delete");
1039                 $kiriwrite_presmodule->addhiddendata("database", $database);
1040                 $kiriwrite_presmodule->addhiddendata("page", $page);
1041                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
1042                 $kiriwrite_presmodule->addlinebreak();
1043                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletepagemessage}, $page_name, $database_name));
1044                 $kiriwrite_presmodule->addlinebreak();
1045                 $kiriwrite_presmodule->addlinebreak();
1046                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{deletepagebutton});
1047                 $kiriwrite_presmodule->addtext(" | ");
1048                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{deletepagesreturnlink}, $database_name)});
1049                 $kiriwrite_presmodule->endform();
1051                 return $kiriwrite_presmodule->grab();
1053         } else {
1055                 # Another page deletion type was specified, so return an error.
1057                 kiriwrite_error("invalidoption");
1059         }
1063 sub kiriwrite_page_edit{
1064 #################################################################################
1065 # kiriwrite_page_edit: Edits a page from a database.                            #
1066 #                                                                               #
1067 # Usage:                                                                        #
1068 #                                                                               #
1069 # kiriwrite_page_edit(database, filename, newname, newfilename, newdescription, #
1070 #                       newsection, newtemplate,  newsettings, newpagecontent   #
1071 #                       confirm);                                               #
1072 #                                                                               #
1073 # database       Specifies the database to edit from.                           #
1074 # filename       Specifies the filename to use.                                 #
1075 # newfilename    Specifies the new page filename to use.                        #
1076 # newname        Specifies the new page name to use.                            #
1077 # newdescription Specifies the new description for the page.                    #
1078 # newsection     Specifies the new section name to use.                         #
1079 # newtemplate    Specifies the new template filename to use.                    #
1080 # newsettings    Specifies the new page settings to use.                        #
1081 # newpagecontent Specifies the new page content to use.                         #
1082 # confirm        Confirms the action to edit the page.                          #
1083 #################################################################################
1085         # Get the values that have been passed to the subroutine.
1087         my ($database, $pagefilename, $pagenewfilename, $pagenewtitle, $pagenewdescription, $pagenewsection, $pagenewtemplate, $pagenewsettings, $pagenewcontent, $confirm) = @_;
1089         # Check if the confirm value is blank and if it is, then set it to '0'.
1091         if (!$confirm){
1093                 $confirm = 0;
1095         }
1097         # Check if the confirm value is more than one character long and if it
1098         # is then return an error.
1100         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
1102         # Check if the database filename is valid and return an error if
1103         # it isn't.
1105         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
1107         if ($pagedatabase_filename_check eq 1){
1109                 # The database filename is blank, so return an error.
1111                 kiriwrite_error("blankdatabasepageadd");
1113         } elsif ($pagedatabase_filename_check eq 2){
1115                 # The database filename is invalid, so return an error.
1117                 kiriwrite_error("databasefilenameinvalid");
1119         }
1121         # Check the length the database name and return an error if it's
1122         # too long.
1124         my $pagedatabase_length_check   = kiriwrite_variablecheck($database, "maxlength", 32, 1);
1126         if ($pagedatabase_length_check eq 1){
1128                 # The database name is too long, so return an error.
1130                 kiriwrite_error("databasefilenametoolong");
1132         }
1134         # Check if the page identification number is blank (which it shouldn't
1135         # be) and if it is, then return an error.
1137         if (!$pagefilename){
1139                 kiriwrite_error("blankfilename");
1141         }
1143         # Check if the confirm value is '1' and if it is, edit the specified
1144         # page in the database.
1146         if ($confirm eq 1){
1148                 # Check if the new page filename is blank.
1150                 if (!$pagenewfilename){
1152                         # The page filename is blank so return an error.
1154                         kiriwrite_error("pagefilenameblank");
1156                 }
1158                 # The action to edit a page has been confirmed so check the
1159                 # variables recieved are UTF8 compiliant before converting.
1161                 kiriwrite_variablecheck($database, "utf8", 0, 0);
1162                 kiriwrite_variablecheck($pagefilename, "utf8", 0, 0);
1163                 kiriwrite_variablecheck($pagenewfilename, "utf8", 0, 0);
1164                 kiriwrite_variablecheck($pagenewtitle, "utf8", 0, 0);
1165                 kiriwrite_variablecheck($pagenewdescription, "utf8", 0, 0);
1166                 kiriwrite_variablecheck($pagenewsection, "utf8", 0, 0);
1167                 kiriwrite_variablecheck($pagenewsettings, "utf8", 0, 0);
1168                 kiriwrite_variablecheck($pagenewtemplate, "utf8", 0, 0);
1169                 kiriwrite_variablecheck($pagenewcontent, "utf8", 0, 0);
1171                 # Convert the variables into proper UTF8 variables.
1173                 $database               = kiriwrite_utf8convert($database);
1174                 $pagefilename           = kiriwrite_utf8convert($pagefilename);
1175                 $pagenewfilename        = kiriwrite_utf8convert($pagenewfilename);
1176                 $pagenewtitle           = kiriwrite_utf8convert($pagenewtitle);
1177                 $pagenewdescription     = kiriwrite_utf8convert($pagenewdescription);
1178                 $pagenewsection         = kiriwrite_utf8convert($pagenewsection);
1179                 $pagenewsettings        = kiriwrite_utf8convert($pagenewsettings);
1180                 $pagenewtemplate        = kiriwrite_utf8convert($pagenewtemplate);
1181                 $pagenewcontent         = kiriwrite_utf8convert($pagenewcontent);
1183                 # Check the lengths of the variables.
1185                 my $pagenewfilename_maxlength_check     = kiriwrite_variablecheck($pagenewfilename, "maxlength", 256, 1);
1186                 my $pagenewtitle_maxlength_check        = kiriwrite_variablecheck($pagenewtitle, "maxlength", 512, 1);
1187                 my $pagenewdescription_maxlength_check  = kiriwrite_variablecheck($pagenewdescription, "maxlength", 512, 1);
1188                 my $pagenewsection_maxlength_check      = kiriwrite_variablecheck($pagenewsection, "maxlength", 256, 1);
1189                 my $pagenewsettings_maxlength_check     = kiriwrite_variablecheck($pagenewsettings, "maxlength", 1, 1);
1190                 my $pagenewtemplate_maxlength_check     = kiriwrite_variablecheck($pagenewtemplate, "maxlength", 64, 1);
1192                 # Check each result to see if the length of the variable
1193                 # is valid and return an error if it isn't.
1195                 if ($pagenewfilename_maxlength_check eq 1){
1197                         # The new page filename given is too long, so return an error.
1199                         kiriwrite_error("pagefilenametoolong");
1201                 }
1203                 if ($pagenewtitle_maxlength_check eq 1){
1205                         # The new page title given is too long, so return an error.
1207                         kiriwrite_error("pagetitletoolong");
1209                 }
1211                 if ($pagenewdescription_maxlength_check eq 1){
1213                         # The new page description given is too long, so return an error.
1215                         kiriwrite_error("pagedescriptiontoolong");
1217                 }
1219                 if ($pagenewsection_maxlength_check eq 1){
1221                         # The new page section given is too long, so return an error.
1223                         kiriwrite_error("pagesectiontoolong");
1225                 }
1227                 if ($pagenewsettings_maxlength_check eq 1){
1229                         # The new page settings given is too long, so return an error.
1231                         kiriwrite_error("pagesettingstoolong");
1233                 }
1235                 if ($pagenewtemplate_maxlength_check eq 1){
1237                         # The new page template given is too long, so return an error.
1239                         kiriwrite_error("pagetemplatefilenametoolong");
1241                 }
1243                 # Check if the new page filename and new page settings
1244                 # are valid.
1246                 my $pagenewfilename_filename_check      = kiriwrite_variablecheck($pagenewfilename, "page_filename", 0, 1);
1247                 my $pagenewsettings_settings_check      = kiriwrite_variablecheck($pagenewsettings, "pagesetting", 0, 1);
1248                 my $pagetemplate_filename_check = 0;
1250                 if ($pagenewtemplate ne "!none"){
1252                         # A template is being used so check the filename of the
1253                         # template.
1255                         $pagetemplate_filename_check    = kiriwrite_variablecheck($pagenewtemplate, "page_filename", 0, 1);
1257                 }
1259                 # Check each result to see if the variables have passed
1260                 # their tests and return an error if they haven't.
1262                 if ($pagenewfilename_filename_check ne 0){
1264                         # The new page filename is invalid, so return an error.
1266                         kiriwrite_error("pagefilenameinvalid");
1268                 }
1270                 if ($pagenewsettings_settings_check eq 1){
1272                         # The new page settings is invalid, so return an error.
1274                         kiriwrite_error("pagesettingsinvalid");
1276                 }
1278                 if ($pagetemplate_filename_check eq 1){
1280                         # The template filename given is invalid, so return an error
1282                         kiriwrite_error("templatefilenameinvalid");
1284                 }
1286                 # Connect to the database server.
1288                 $kiriwrite_dbmodule->connect();
1290                 # Check if any errors occured while connecting to the database server.
1292                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1294                         # A database connection error has occured so return
1295                         # an error.
1297                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1299                 }
1301                 # Select the database.
1303                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1305                 # Check if any errors had occured while selecting the database.
1307                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1309                         # The database does not exist, so return an error.
1311                         kiriwrite_error("databasemissingfile");
1313                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1315                         # The database has invalid permissions set, so return
1316                         # an error.
1318                         kiriwrite_error("databaseinvalidpermissions");
1320                 }
1322                 # Check if the database has write permissions.
1324                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
1326                 if ($database_permissions eq 1){
1328                         # The database permissions are invalid so return an error.
1330                         kiriwrite_error("databaseinvalidpermissions");
1332                 }
1334                 # Get the database information.
1336                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1338                 # Check if any errors had occured while getting the database information.
1340                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1342                         # A database error has occured so return an error and
1343                         # also the extended error information.
1345                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1347                 };
1349                 my $database_name = $database_info{"DatabaseName"};
1351                 # Edit the selected page.
1353                 $kiriwrite_dbmodule->editpage({ PageFilename => $pagefilename, PageNewFilename => $pagenewfilename, PageNewName => $pagenewtitle, PageNewDescription => $pagenewdescription, PageNewSection => $pagenewsection, PageNewTemplate => $pagenewtemplate, PageNewContent => $pagenewcontent, PageNewSettings => $pagenewsettings });
1355                 # Check if any errors occured while editing the page.
1357                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1359                         # A database error has occured so return an error and
1360                         # also the extended error information.
1362                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1364                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1366                         # The pages does not exist in the database.
1368                         kiriwrite_error("pagefilenamedoesnotexist");
1370                 }
1372                 # Disconnect from the database server.
1374                 $kiriwrite_dbmodule->disconnect();
1376                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{editedpage}, { Style => "pageheader" });
1377                 $kiriwrite_presmodule->addlinebreak();
1378                 $kiriwrite_presmodule->addlinebreak();
1379                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{editedpagemessage}, $pagenewtitle));
1380                 $kiriwrite_presmodule->addlinebreak();
1381                 $kiriwrite_presmodule->addlinebreak();
1382                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
1384                 return $kiriwrite_presmodule->grab();
1386         } elsif ($confirm eq 0) {
1388                 # Connect to the database server.
1390                 $kiriwrite_dbmodule->connect();
1392                 # Check if any errors occured while connecting to the database server.
1394                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1396                         # A database connection error has occured so return
1397                         # an error.
1399                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1401                 }
1403                 # Select the database.
1405                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1407                 # Check if any errors had occured while selecting the database.
1409                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1411                         # The database does not exist, so return an error.
1413                         kiriwrite_error("databasemissingfile");
1415                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1417                         # The database has invalid permissions set, so return
1418                         # an error.
1420                         kiriwrite_error("databaseinvalidpermissions");
1422                 }
1424                 # Get the information about the database.
1426                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1428                 # Check if any errors had occured while getting the database information.
1430                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1432                         # A database error has occured so return an error and
1433                         # also the extended error information.
1435                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1437                 };
1439                 my $database_name = $database_info{"DatabaseName"};
1441                 # Get the page info.
1443                 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $pagefilename });
1445                 # Check if any errors occured while getting the page information.
1447                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1449                         # A database error has occured so return an error and
1450                         # also the extended error information.
1452                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1454                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1456                         # The page does not exist, so return an error.
1458                         kiriwrite_error("pagefilenamedoesnotexist");
1460                 }
1462                 # Get the values from the hash.
1464                 my $data_filename               = $page_info{"PageFilename"};
1465                 my $data_name                   = $page_info{"PageName"};
1466                 my $data_description            = $page_info{"PageDescription"};
1467                 my $data_section                = $page_info{"PageSection"};
1468                 my $data_template               = $page_info{"PageTemplate"};
1469                 my $data_content                = $page_info{"PageContent"};
1470                 my $data_settings               = $page_info{"PageSettings"};
1471                 my $data_lastmodified           = $page_info{"PageLastModified"};
1473                 my $template_warning;
1474                 my $page_count = 0;
1475                 my %template_list;
1476                 my %template_info;
1477                 my @database_pages;
1478                 my @database_info;
1479                 my @database_templates;
1480                 my @template_filenames;
1481                 my $template_file;
1482                 my $template_filename;
1483                 my $template_name;
1484                 my $template_count = 0;
1485                 my $template_found = 0;
1487                 tie(%template_list, 'Tie::IxHash');
1489                 # Connect to the template database.
1491                 $kiriwrite_dbmodule->connecttemplate();
1493                 # Check if any errors occured while connecting to the template database.
1495                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
1497                         # The template database does not exist so set the template
1498                         # warning message.
1500                         $template_warning = $kiriwrite_lang->{pages}->{notemplatedatabasekeep};
1502                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
1504                         # The template database has invalid permissions set so write
1505                         # the template warning message.
1507                         $template_warning = $kiriwrite_lang->{pages}->{templatepermissionserrorkeep};
1509                 }
1511                 if (!$template_warning){
1513                         # Get the list of available templates.
1515                         @template_filenames = $kiriwrite_dbmodule->gettemplatelist();
1517                         # Check if any errors had occured.
1519                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1521                                 # A database error occured while getting the list
1522                                 # of templates so return an error with the 
1523                                 # extended error information.
1525                                 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrorkeep} , $kiriwrite_dbmodule->geterror(1));
1527                         }
1529                         if (!$template_warning){
1531                                 foreach $template_filename (@template_filenames){
1533                                         # Get the information about each template.
1535                                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
1537                                         # Check if any errors occured while getting the template information.
1539                                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1541                                                 # A template database error has occured so return a warning message
1542                                                 # with the extended error information.
1544                                                 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrorkeep} , $kiriwrite_dbmodule->geterror(1));
1545                                                 last;
1547                                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
1549                                                 # The template does not exist so process the next template.
1551                                                 next;
1553                                         }
1555                                         # Append the template name and filename to the list of available templates.
1557                                         $template_list{$template_count}{Filename} = $template_info{"TemplateFilename"};
1558                                         $template_list{$template_count}{Name}     = $template_info{"TemplateName"};
1560                                         # Append the template filename and name and make it the selected
1561                                         # template if that is the template the page is using.
1563                                         if ($data_template eq $template_filename && !$template_found){
1565                                                 $template_list{$template_count}{Selected}       = 1;
1566                                                 $template_found = 1;
1568                                         } else {
1570                                                 $template_list{$template_count}{Selected}       = 0;
1572                                         }
1574                                         $template_count++;
1576                                 }
1578                         }
1580                 }
1582                 # Check if certain values are undefined and if they
1583                 # are then set them blank (defined).
1585                 if (!$data_name){
1586                         $data_name = "";
1587                 }
1589                 if (!$data_description){
1590                         $data_description = "";
1591                 }
1593                 if (!$data_section){
1594                         $data_section = "";
1595                 }
1597                 if (!$data_template){
1598                         $data_template = "";
1600                 }
1602                 if (!$data_content){
1603                         $data_content = "";
1604                 }
1606                 if (!$data_settings){
1607                         $data_settings = "";
1608                 }
1610                 if (!$data_lastmodified){
1611                         $data_lastmodified = "";
1612                 }
1614                 # Begin writing out the form for editing the selected page.
1616                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{editpage}, $data_name), { Style => "pageheader" });
1617                 $kiriwrite_presmodule->addlinebreak();
1618                 $kiriwrite_presmodule->addlinebreak();
1620                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1621                 $kiriwrite_presmodule->addhiddendata("mode", "page");
1622                 $kiriwrite_presmodule->addhiddendata("action", "edit");
1623                 $kiriwrite_presmodule->addhiddendata("database", $database);
1624                 $kiriwrite_presmodule->addhiddendata("page", $pagefilename);
1625                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
1627                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
1629                 $kiriwrite_presmodule->startheader();
1630                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
1631                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
1632                 $kiriwrite_presmodule->endheader();
1634                 $kiriwrite_presmodule->startrow();
1635                 $kiriwrite_presmodule->addcell("tablecell1");
1636                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{database});
1637                 $kiriwrite_presmodule->endcell();
1638                 $kiriwrite_presmodule->addcell("tablecell2");
1639                 $kiriwrite_presmodule->addtext($database_name);
1640                 $kiriwrite_presmodule->endcell();
1641                 $kiriwrite_presmodule->endrow();
1643                 $kiriwrite_presmodule->startrow();
1644                 $kiriwrite_presmodule->addcell("tablecell1");
1645                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagename});
1646                 $kiriwrite_presmodule->endcell();
1647                 $kiriwrite_presmodule->addcell("tablecell2");
1648                 $kiriwrite_presmodule->addinputbox("pagename", { Size => 64, MaxLength => 256, Value => $data_name });
1649                 $kiriwrite_presmodule->endcell();
1650                 $kiriwrite_presmodule->endrow();
1652                 $kiriwrite_presmodule->startrow();
1653                 $kiriwrite_presmodule->addcell("tablecell1");
1654                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedescription});
1655                 $kiriwrite_presmodule->endcell();
1656                 $kiriwrite_presmodule->addcell("tablecell2");
1657                 $kiriwrite_presmodule->addinputbox("pagedescription", { Size => 64, MaxLength => 256, Value => $data_description });
1658                 $kiriwrite_presmodule->endcell();
1659                 $kiriwrite_presmodule->endrow();
1661                 $kiriwrite_presmodule->startrow();
1662                 $kiriwrite_presmodule->addcell("tablecell1");
1663                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
1664                 $kiriwrite_presmodule->endcell();
1665                 $kiriwrite_presmodule->addcell("tablecell2");
1666                 $kiriwrite_presmodule->addinputbox("pagesection", { Size => 64, MaxLength => 256, Value => $data_section });
1667                 $kiriwrite_presmodule->endcell();
1668                 $kiriwrite_presmodule->endrow();
1670                 $kiriwrite_presmodule->startrow();
1671                 $kiriwrite_presmodule->addcell("tablecell1");
1672                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
1673                 $kiriwrite_presmodule->endcell();
1674                 $kiriwrite_presmodule->addcell("tablecell2");
1676                 # Check if any template warnings have occured.
1678                 if ($template_warning){
1680                         $kiriwrite_presmodule->addtext($template_warning);
1681                         $kiriwrite_presmodule->addlinebreak();
1683                 }
1685                 $kiriwrite_presmodule->addselectbox("pagetemplate");
1687                 # Process the list of templates, select one if the
1688                 # template filename for the page matches, else give
1689                 # an option for the user to keep the current template
1690                 # filename.
1692                 $template_count = 0;
1694                 foreach $template_file (keys %template_list){
1696                         if ($template_list{$template_count}{Selected}){
1698                                 $kiriwrite_presmodule->addoption($template_list{$template_count}{Name} . " (" . $template_list{$template_count}{Filename} . ")", { Value => $template_list{$template_count}{Filename}, Selected => 1 });
1700                         } else {
1702                                 $kiriwrite_presmodule->addoption($template_list{$template_count}{Name} . " (" . $template_list{$template_count}{Filename} . ")", { Value => $template_list{$template_count}{Filename} });
1704                         }
1706                         $template_count++;
1708                 }
1710                 if ($data_template eq "!none"){
1712                         $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
1713                         $template_found = 1;
1715                 } else {
1717                         $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none" });
1719                 }
1721                 if ($template_found eq 0 && $data_template ne "!none"){
1723                         # The template with the filename given was not found.
1725                         $kiriwrite_presmodule->addoption(kiriwrite_language($kiriwrite_lang->{pages}->{keeptemplatefilename}, $data_template), { Value => $data_template, Selected => 1, Style => "warningoption" });
1727                 }
1729                 # Disconnect from the template database.
1731                 $kiriwrite_dbmodule->disconnecttemplate();
1733                 # Disconnect from the database server.
1735                 $kiriwrite_dbmodule->disconnect();
1737                 $kiriwrite_presmodule->endselectbox();
1739                 $kiriwrite_presmodule->endcell();
1740                 $kiriwrite_presmodule->endrow();
1742                 $kiriwrite_presmodule->startrow();
1743                 $kiriwrite_presmodule->addcell("tablecell1");
1744                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagefilename});
1745                 $kiriwrite_presmodule->endcell();
1746                 $kiriwrite_presmodule->addcell("tablecell2");
1747                 $kiriwrite_presmodule->addinputbox("pagefilename", { Size => 64, MaxLength => 256, Value => $data_filename });
1748                 $kiriwrite_presmodule->endcell();
1749                 $kiriwrite_presmodule->endrow();
1751                 $kiriwrite_presmodule->startrow();
1752                 $kiriwrite_presmodule->addcell("tablecell1");
1753                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagecontent});
1754                 $kiriwrite_presmodule->endcell();
1755                 $kiriwrite_presmodule->addcell("tablecell2");
1756                 $kiriwrite_presmodule->addtextbox("pagecontent", { Columns => 50, Rows => 10, Value => $data_content });
1757                 $kiriwrite_presmodule->addlinebreak();
1758                 $kiriwrite_presmodule->addlinebreak();
1759                 $kiriwrite_presmodule->startbox("datalist");
1760                 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
1761                 $kiriwrite_presmodule->addlinebreak();
1762                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
1763                 $kiriwrite_presmodule->addlinebreak();
1764                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
1765                 $kiriwrite_presmodule->addlinebreak();
1766                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
1767                 $kiriwrite_presmodule->addlinebreak();
1768                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
1769                 $kiriwrite_presmodule->addlinebreak();
1770                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
1771                 $kiriwrite_presmodule->addlinebreak();
1772                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
1773                 $kiriwrite_presmodule->addlinebreak();
1774                 $kiriwrite_presmodule->endbox();
1775                 $kiriwrite_presmodule->endcell();
1776                 $kiriwrite_presmodule->endrow();
1778                 $kiriwrite_presmodule->startrow();
1779                 $kiriwrite_presmodule->addcell("tablecell1");
1780                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
1781                 $kiriwrite_presmodule->endcell();
1782                 $kiriwrite_presmodule->addcell("tablecell2");
1784                 # Check if the page settings value is set to a 
1785                 # certain number and select that option based
1786                 # on the number else set the value to 0.
1788                 if ($data_settings eq 1){
1789                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", Selected => 1, LineBreak => 1});
1790                 } else {
1791                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", LineBreak => 1});
1792                 }
1794                 if ($data_settings eq 2){
1795                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", Selected => 1, LineBreak => 1});
1796                 } else {
1797                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", LineBreak => 1});
1798                 }
1800                 if ($data_settings eq 3){
1801                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", Selected => 1, LineBreak => 1});
1802                 } else {
1803                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", LineBreak => 1});
1804                 }
1806                 if ($data_settings eq 0 || ($data_settings ne 1 && $data_settings ne 2 && $data_settings ne 3)){
1807                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", Selected => 1, LineBreak => 1});
1808                 } else {
1809                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", LineBreak => 1});
1810                 }
1812                 $kiriwrite_presmodule->endcell();
1813                 $kiriwrite_presmodule->endrow();
1814                 $kiriwrite_presmodule->endtable();
1816                 $kiriwrite_presmodule->addlinebreak();
1817                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{editpagebutton});
1818                 $kiriwrite_presmodule->addtext(" | ");
1819                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{common}->{clearvalues});
1820                 $kiriwrite_presmodule->addtext(" | ");
1821                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) } );
1823                 $kiriwrite_presmodule->endform();
1825                 return $kiriwrite_presmodule->grab();
1827         } else {
1829                 # The confirm value is a value other than '0' and '1' so
1830                 # return an error.
1832                 kiriwrite_error("invalidvalue");
1834         }
1838 sub kiriwrite_page_multidelete{
1839 #################################################################################
1840 # kiriwrite_page_multidelete: Delete mulitple pages from the database.          #
1841 #                                                                               #
1842 # Usage:                                                                        #
1843 #                                                                               #
1844 # kiriwrite_page_multidelete(database, confirm, filelist);                      #
1845 #                                                                               #
1846 # database      Specifies the database to delete multiple pages from.           #
1847 # confirm       Confirms the action to delete the selected pages from the       #
1848 #               database.                                                       #
1849 # filelist      The list of files to delete from the selected database.         #
1850 #################################################################################
1852         # Get the information passed to the subroutine.
1854         my ($database, $confirm, @filelist) = @_;
1856         # Check if the database name is blank and return an error if
1857         # it is.
1859         if (!$database){
1861                 # The database name is blank so return an error.
1863                 kiriwrite_error("databasenameblank");
1865         }
1867         # Check if the file list array has any values and return
1868         # an error if it doesn't.
1870         if (!@filelist){
1872                 # The page list really is blank so return
1873                 # an error.
1875                 kiriwrite_error("nopagesselected");
1876         }
1878         # Check if the database filename is valid and return an error if
1879         # it isn't.
1881         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
1883         if ($pagedatabase_filename_check eq 1){
1885                 # The database filename is blank, so return an error.
1887                 kiriwrite_error("blankdatabasepageadd");
1889         } elsif ($pagedatabase_filename_check eq 2){
1891                 # The database filename is invalid, so return an error.
1893                 kiriwrite_error("databasefilenameinvalid");
1895         }
1897         # Check the length the database name and return an error if it's
1898         # too long.
1900         my $pagedatabase_length_check   = kiriwrite_variablecheck($database, "maxlength", 32, 1);
1902         if ($pagedatabase_length_check eq 1){
1904                 # The database name is too long, so return an error.
1906                 kiriwrite_error("databasefilenametoolong");
1908         }
1910         # Check if the confirm value is blank and if it is, then
1911         # set it to 0.
1913         if (!$confirm){
1915                 # The confirm value is blank so set the confirm value
1916                 # to 0.
1918                 $confirm = 0;
1920         }
1922         if ($confirm eq 1){
1924                 # The action to delete multiple pages from the database has
1925                 # been confirmed.
1927                 # Connect to the database server.
1929                 $kiriwrite_dbmodule->connect();
1931                 # Check if any errors occured while connecting to the database server.
1933                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1935                         # A database connection error has occured so return
1936                         # an error.
1938                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1940                 }
1942                 # Select the database.
1944                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1946                 # Check if any errors occured while selecting the database.
1948                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1950                         # The database does not exist, so return an error.
1952                         kiriwrite_error("databasemissingfile");
1954                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1956                         # The database has invalid permissions set, so return
1957                         # an error.
1959                         kiriwrite_error("databaseinvalidpermissions");
1961                 }
1963                 # Check if the database has read and write permissions.
1965                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
1967                 if ($database_permissions eq 1){
1969                         # The database permissions are invalid so return an error.
1971                         kiriwrite_error("databaseinvalidpermissions");
1973                 }
1975                 # Get information about the database.
1977                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1979                 # Check if any errors had occured while getting the database
1980                 # information.
1982                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1984                         # A database error has occured so return an error and
1985                         # also the extended error information.
1987                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1989                 };
1991                 my $database_name       = $database_info{"DatabaseName"};
1993                 # Define some variables for later.
1995                 my @database_page;
1996                 my %page_info;
1997                 my $filelist_filename;
1998                 my %deleted_list;
1999                 my $page;
2000                 my $page_name;
2001                 my $page_found = 0;
2002                 my $page_count = 0;
2004                 tie (%deleted_list, 'Tie::IxHash');
2006                 my $deleted_list = "";
2008                 foreach $filelist_filename (@filelist){
2010                         # Get the page information.
2012                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2014                         # Check if any errors occured.
2016                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2018                                 # A database error has occured so return an error and
2019                                 # also the extended error information.
2021                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2023                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2025                                 # The page does not exist, so process the next page.
2027                                 next;
2029                         }
2031                         # Add the page to the list of deleted pages.
2033                         $deleted_list{$page_count}{Filename}    = $page_info{"PageFilename"};
2034                         $deleted_list{$page_count}{Name}        = $page_info{"PageName"};
2036                         # Delete the page.
2038                         $kiriwrite_dbmodule->deletepage({ PageFilename => $filelist_filename });
2040                         # Check if any errors occured while deleting the page from the database.
2042                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2044                                 # A database error has occured so return an error and
2045                                 # also the extended error information.
2047                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2049                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2051                                 # The page does not exist, so process the next page.
2053                                 next;
2055                         }
2057                         $page_found = 0;
2058                         $page_count++;
2060                 }
2062                 # Disconnect from the database server.
2064                 $kiriwrite_dbmodule->disconnect();
2066                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{selectedpagesdeleted}, { Style => "pageheader" });
2067                 $kiriwrite_presmodule->addlinebreak();
2068                 $kiriwrite_presmodule->addlinebreak();
2069                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{selectedpagesdeletedmessage}, $database_name));
2070                 $kiriwrite_presmodule->addlinebreak();
2071                 $kiriwrite_presmodule->addlinebreak();
2072                 $kiriwrite_presmodule->startbox("datalist");
2074                 foreach $page (keys %deleted_list){
2076                         if (!$deleted_list{$page}{Name}){
2077                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2078                                 $kiriwrite_presmodule->addtext(" (" . $deleted_list{$page}{Filename} . ")");
2080                         } else {
2081                                 $kiriwrite_presmodule->addtext($deleted_list{$page}{Name} . " (" . $deleted_list{$page}{Filename} . ")");
2082                         }
2084                         $kiriwrite_presmodule->addlinebreak();
2085                 }
2087                 $kiriwrite_presmodule->endbox();
2088                 $kiriwrite_presmodule->addlinebreak();
2089                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
2090                 $kiriwrite_presmodule->endform();
2092                 return $kiriwrite_presmodule->grab();
2094         } elsif ($confirm eq 0){
2096                 # The action to delete multiple pages from the database has
2097                 # not been confirmed, so write a form asking the user to confirm
2098                 # the deletion of those pages.
2100                 # Connect to the database server.
2102                 $kiriwrite_dbmodule->connect();
2104                 # Check if any errors occured while connecting to the database server.
2106                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2108                         # A database connection error has occured so return
2109                         # an error.
2111                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2113                 }
2115                 # Select the database.
2117                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2119                 # Check if any errors occured while selecting the database.
2121                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2123                         # The database does not exist, so return an error.
2125                         kiriwrite_error("databasemissingfile");
2127                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2129                         # The database has invalid permissions set, so return
2130                         # an error.
2132                         kiriwrite_error("databaseinvalidpermissions");
2134                 }
2136                 # Check if the database has read and write permissions.
2138                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2140                 if ($database_permissions eq 1){
2142                         # The database permissions are invalid so return an error.
2144                         kiriwrite_error("databaseinvalidpermissions");
2146                 }
2148                 # Get information about the database.
2150                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2152                 # Check if any errors had occured while getting the database
2153                 # information.
2155                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2157                         # A database error has occured so return an error and
2158                         # also the extended error information.
2160                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2162                 };
2164                 my $database_name       = $database_info{"DatabaseName"};
2166                 # Define some variables for later.
2168                 my %page_info;
2169                 my %delete_list;
2170                 my $pagename;
2171                 my $page = "";
2172                 my $filelist_filename;
2173                 my $filelist_filename_sql;
2174                 my $pageseek = 0;
2176                 tie(%delete_list, 'Tie::IxHash');
2178                 # Process each filename given.
2180                 foreach $filelist_filename (@filelist){
2182                         # Get the page information.
2184                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2186                         # Check if any errors occured.
2188                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2190                                 # A database error has occured so return an error and
2191                                 # also the extended error information.
2193                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2195                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2197                                 # The page does not exist, so process the next page.
2199                                 next;
2201                         }
2203                         # Add the page file name and name to the list
2204                         # of pages to delete.
2206                         $delete_list{$pageseek}{Filename}       = $page_info{"PageFilename"};
2207                         $delete_list{$pageseek}{Name}           = $page_info{"PageName"};
2209                         # Increment the page seek counter and reset the
2210                         # page found value.
2212                         $pageseek++;
2214                 }
2216                 # Disconnect from the database server.
2218                 $kiriwrite_dbmodule->disconnect();
2220                 # Check if any files were selected and return
2221                 # an error if there wasn't.
2223                 if ($pageseek eq 0){
2225                         # No pages were selected so return an error.
2227                         kiriwrite_error("nopagesselected");
2229                 }
2231                 # Write the form for displaying pages.
2233                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{deletemultiplepages}, { Style => "pageheader" });
2234                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
2235                 $kiriwrite_presmodule->addhiddendata("mode", "page");
2236                 $kiriwrite_presmodule->addhiddendata("action", "multidelete");
2237                 $kiriwrite_presmodule->addhiddendata("database", $database);
2238                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
2239                 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
2241                 $pageseek = 1;
2243                 foreach $page (keys %delete_list){
2245                         $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
2246                         $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $delete_list{$page}{Filename});
2248                         $pageseek++;
2250                 }
2252                 $kiriwrite_presmodule->addlinebreak();
2253                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletemultiplemessage}, $database_name));
2254                 $kiriwrite_presmodule->addlinebreak();
2255                 $kiriwrite_presmodule->addlinebreak();
2256                 $kiriwrite_presmodule->startbox("datalist");
2258                 foreach $page (keys %delete_list){
2260                         if (!$delete_list{$page}{Name}){
2261                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2262                                 $kiriwrite_presmodule->addtext(" (" . $delete_list{$page}{Filename} . ")");
2263                         } else {
2264                                 $kiriwrite_presmodule->addtext($delete_list{$page}{Name} . " (" . $delete_list{$page}{Filename} . ")");
2265                         }
2266                         $kiriwrite_presmodule->addlinebreak();
2268                 }
2270                 $kiriwrite_presmodule->endbox();
2271                 $kiriwrite_presmodule->addlinebreak();
2272                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{deletepagesbutton});
2273                 $kiriwrite_presmodule->addtext(" | ");
2274                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{deletepagesreturnlink}, $database_name)});
2275                 $kiriwrite_presmodule->endform();
2277                 return $kiriwrite_presmodule->grab();
2279         } else {
2281                 # A confirm value other than 0 or 1 is given, so
2282                 # return an error.
2284                 kiriwrite_error("invaildvalue");
2286         }
2290 sub kiriwrite_page_multimove{
2291 #################################################################################
2292 # kiriwrite_page_multimove: Move several pages from one database to another     #
2293 # database.                                                                     #
2294 #                                                                               #
2295 # Usage:                                                                        #
2296 #                                                                               #
2297 # kiriwrite_page_multimove(database, newdatabase, confirm, filelist);           #
2298 #                                                                               #
2299 # database      Specifies the database to move the selected pages from.         #
2300 # newdatabase   Specifies the database to move the selected pages to.           #
2301 # confirm       Confirms the action to move the pages from one database to      #
2302 #               another.                                                        #
2303 # filelist      Specifies the list of pages to move.                            #
2304 #################################################################################
2306         # Get the values that were passed to the subroutine.
2308         my ($database, $newdatabase, $confirm, @filelist) = @_;
2310         # Check if the database filename is valid and return
2311         # an error if it isn't.
2313         my $newpagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
2315         if ($newpagedatabase_filename_check eq 1){
2317                 # The database filename is blank, so return an error.
2319                 kiriwrite_error("blankdatabasepageadd");
2321         } elsif ($newpagedatabase_filename_check eq 2){
2323                 # The database filename is invalid, so return an error.
2325                 kiriwrite_error("databasefilenameinvalid");
2327         }
2329         # Check if the file list is blank and return an error
2330         # if it is.
2332         if (!@filelist){
2334                 # The file list really is blank so return
2335                 # an error.
2337                 kiriwrite_error("nopagesselected");
2339         }
2341         # Check if the confirm value is blank and if it is then
2342         # set the confirm value to 0.
2344         if (!$confirm){
2346                 $confirm = 0;
2348         }
2350         if ($confirm eq 1){
2352                 # The action to move several pages from one database
2353                 # to another has been confirmed.
2355                 # Check if the database that the pages are moving from 
2356                 # is the same as the database the pages are moving to.
2357                 # Return an error if it is.
2359                 if ($database eq $newdatabase){
2361                         # The database that the pages are moving from
2362                         # and the database the pages are moving to
2363                         # is the same, so return an error.
2365                         kiriwrite_error("databasemovesame");
2367                 }
2369                 # Check if the new database filename is valid and return an error if
2370                 # it isn't.
2372                 my $newpagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
2374                 if ($newpagedatabase_filename_check eq 1){
2376                         # The database filename is blank, so return an error.
2378                         kiriwrite_error("blankdatabasepageadd");
2380                 } elsif ($newpagedatabase_filename_check eq 2){
2382                         # The database filename is invalid, so return an error.
2384                         kiriwrite_error("databasefilenameinvalid");
2386                 }
2388                 # Connect to the database server.
2390                 $kiriwrite_dbmodule->connect();
2392                 # Check if any errors occured while connecting to the database server.
2394                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2396                         # A database connection error has occured so return
2397                         # an error.
2399                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2401                 }
2403                 # Select the database the pages are going to be moved from.
2405                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2407                 # Check if any errors had occured while selecting the database.
2409                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2411                         # The database does not exist, so return an error.
2413                         kiriwrite_error("oldmovedatabasedoesnotexist");
2415                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2417                         # The database has invalid permissions set, so return
2418                         # an error.
2420                         kiriwrite_error("oldmovedatabasefileinvalidpermissions");
2422                 }
2424                 # Check if the database has read and write permissions.
2426                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2428                 if ($database_permissions eq 1){
2430                         # The database permissions are invalid so return an error.
2432                         kiriwrite_error("databaseinvalidpermissions");
2434                 }
2436                 # Select the database the pages are going to be moved to.
2438                 $kiriwrite_dbmodule->selectseconddb({ DatabaseName => $newdatabase });
2440                 # Check if any errors had occured while selecting the database.
2442                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2444                         # The database does not exist, so return an error.
2446                         kiriwrite_error("newmovedatabasedoesnotexist");
2448                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2450                         # The database has invalid permissions set, so return
2451                         # an error.
2453                         kiriwrite_error("newmovedatabasefileinvalidpermissions");
2455                 }
2457                 # Check if the database has read and write permissions.
2459                 $database_permissions = $kiriwrite_dbmodule->dbpermissions($newdatabase, 1, 1);
2461                 if ($database_permissions eq 1){
2463                         # The database permissions are invalid so return an error.
2465                         kiriwrite_error("databaseinvalidpermissions");
2467                 }
2469                 # Define some values for later.
2471                 my %moved_list;
2472                 my %warning_list;
2473                 my %page_info;
2475                 my $filename;
2477                 my $olddatabase_name;
2478                 my $newdatabase_name;
2480                 my $page;
2481                 my $warning;
2483                 my $page_found = 0;
2484                 my $move_count = 0;
2485                 my $warning_count = 0;
2487                 tie(%moved_list, 'Tie::IxHash');
2488                 tie(%warning_list, 'Tie::IxHash');
2490                 # Get information about the database that the selected pages are moving from.
2492                 my %olddatabase_info = $kiriwrite_dbmodule->getdatabaseinfo();
2494                 # Check if any errors had occured while getting the database
2495                 # information.
2497                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2499                         # A database error has occured so return an error and
2500                         # also the extended error information.
2502                         kiriwrite_error("oldmovedatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
2504                 };
2506                 $olddatabase_name = $olddatabase_info{"DatabaseName"};
2508                 # Get information about the database that the selected pages are moving to.
2510                 my %newdatabase_info = $kiriwrite_dbmodule->getseconddatabaseinfo();
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("newmovedatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
2522                 };
2524                 $newdatabase_name = $newdatabase_info{"DatabaseName"};
2526                 # Get each file in the old database, get the page values,
2527                 # put them into the new database and delete the pages
2528                 # from the old database.
2530                 foreach $filename (@filelist){
2532                         # Get the page information.
2534                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
2536                         # Check if any errors occured.
2538                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2540                                 # A database error has occured so write a warning message and
2541                                 # also the extended error information.
2543                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2544                                 $warning_count++;
2545                                 next;
2547                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2549                                 # The page does not exist, so process the next page.
2551                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{pagedoesnotexist}, $filename);
2552                                 $warning_count++;
2553                                 next;
2555                         }
2557                         # Move the selected page.
2559                         $kiriwrite_dbmodule->movepage({ PageFilename => $filename });
2561                         # Check if any errors occured while moving the page.
2563                         if ($kiriwrite_dbmodule->geterror eq "OldDatabaseError"){
2565                                 # A database error has occured while moving the pages from
2566                                 # the old database, so write a warning message.
2568                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovefrompageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2569                                 $warning_count++;
2570                                 next;
2572                         } elsif ($kiriwrite_dbmodule->geterror eq "NewDatabaseError"){
2574                                 # A database error has occured while moving the pages to
2575                                 # the new database, so write a warning message.
2577                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovetopageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2578                                 $warning_count++;
2579                                 next;
2581                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2583                                 # The page with the filename given in the database that
2584                                 # the page is to be moved from doesn't exist so write
2585                                 # a warning message.
2587                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovefrompagenotexist}, $filename);
2588                                 $warning_count++;
2589                                 next;
2591                         } elsif ($kiriwrite_dbmodule->geterror eq "PageAlreadyExists"){
2593                                 # The page with the filename given in the database that
2594                                 # the page is to be moved to already exists so write a
2595                                 # warning message.
2597                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovetopageexists}, $filename);
2598                                 $warning_count++;
2599                                 next;
2601                         }
2603                         $moved_list{$move_count}{Filename}      = $page_info{"PageFilename"};
2604                         $moved_list{$move_count}{Name}          = $page_info{"PageName"};
2606                         $move_count++;
2608                 }
2610                 # Disconnect from the database server.
2612                 $kiriwrite_dbmodule->disconnect();
2614                 # Write out a message saying that the pages were moved (if any)
2615                 # to the new database (and any warnings given).
2617                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepages}, { Style => "pageheader" });
2618                 $kiriwrite_presmodule->addlinebreak();
2619                 $kiriwrite_presmodule->addlinebreak();
2621                 if (%moved_list){
2623                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{movedpagesmessage}, $olddatabase_name, $newdatabase_name));
2624                         $kiriwrite_presmodule->addlinebreak();
2625                         $kiriwrite_presmodule->addlinebreak();
2627                         $kiriwrite_presmodule->startbox("datalist");
2628                         foreach $page (keys %moved_list){
2629                                 if (!$moved_list{$page}{Name}){
2630                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2631                                         $kiriwrite_presmodule->addtext(" (" . $moved_list{$page}{Filename} . ")");
2632                                 } else {
2633                                         $kiriwrite_presmodule->addtext($moved_list{$page}{Name} . " (" . $moved_list{$page}{Filename} . ")");
2634                                 }
2636                                 $kiriwrite_presmodule->addlinebreak();
2637                         }
2638                         $kiriwrite_presmodule->endbox();
2640                 } else {
2642                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagesmoved}, $olddatabase_name, $newdatabase_name));
2643                         $kiriwrite_presmodule->addlinebreak();
2644                         $kiriwrite_presmodule->addlinebreak();
2646                 }
2648                 if (%warning_list){
2650                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{errormessages});
2651                         $kiriwrite_presmodule->addlinebreak();
2652                         $kiriwrite_presmodule->addlinebreak();
2653                         $kiriwrite_presmodule->startbox("datalist");
2654                         foreach $warning (keys %warning_list){
2655                                 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
2656                                 $kiriwrite_presmodule->addlinebreak();
2657                         }
2658                         $kiriwrite_presmodule->endbox();
2660                 }
2662                 $kiriwrite_presmodule->addlinebreak();
2663                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $olddatabase_name)}); 
2664                 $kiriwrite_presmodule->addtext(" | ");
2665                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $newdatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{viewpagelist}, $newdatabase_name)});
2667                 return $kiriwrite_presmodule->grab();
2669         } elsif ($confirm eq 0) {
2671                 # The action to move several pages from one database
2672                 # to another has not been confirmed so write a form.
2674                 # Connect to the database server.
2676                 $kiriwrite_dbmodule->connect();
2678                 # Check if any errors occured while connecting to the database server.
2680                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2682                         # A database connection error has occured so return
2683                         # an error.
2685                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2687                 }
2689                 # Select the database.
2691                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2693                 # Check if any errors occured while selecting the database.
2695                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2697                         # The database does not exist, so return an error.
2699                         kiriwrite_error("databasemissingfile");
2701                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2703                         # The database has invalid permissions set, so return
2704                         # an error.
2706                         kiriwrite_error("databaseinvalidpermissions");
2708                 }
2710                 # Check if the database has read and write permissions.
2712                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2714                 if ($database_permissions eq 1){
2716                         # The database permissions are invalid so return an error.
2718                         kiriwrite_error("databaseinvalidpermissions");
2720                 }
2722                 # Get information about the database.
2724                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2726                 # Check if any errors had occured while getting the database
2727                 # information.
2729                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2731                         # A database error has occured so return an error and
2732                         # also the extended error information.
2734                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2736                 };
2738                 my $database_name       = $database_info{"DatabaseName"};
2740                 # Define some values for later.
2742                 my %db_list;
2743                 my %move_list;
2744                 my %page_info;
2745                 my $page;
2746                 my $data_file;
2747                 my $db_name;
2748                 my $filename;
2749                 my $filelist_filename;
2750                 my $pagename;
2751                 my $pageseek    = 0;
2752                 my $dbseek      = 0;
2754                 # Process each filename given.
2756                 tie (%move_list, 'Tie::IxHash');
2757                 tie (%db_list, 'Tie::IxHash');
2759                 foreach $filelist_filename (@filelist){
2761                         # Get the page information.
2763                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2765                         # Check if any errors occured.
2767                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2769                                 # A database error has occured so return an error and
2770                                 # also the extended error information.
2772                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2774                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2776                                 # The page does not exist, so process the next page.
2778                                 next;
2780                         }
2782                         # Add the page name and file name to the list of
2783                         # pages to move.
2785                         $move_list{$pageseek}{Filename} = $page_info{"PageFilename"};
2786                         $move_list{$pageseek}{Name}     = $page_info{"PageName"};
2788                         # Increment the page seek counter and reset the
2789                         # page found value.
2791                         $pageseek++;
2793                 }
2795                 # Check if any pages exust and return an error if
2796                 # there wasn't.
2798                 if ($pageseek eq 0){
2800                         # None of the selected pages exist, so return
2801                         # an error.
2803                         kiriwrite_error("nopagesselected");
2805                 }
2807                 # Get the list of databases.
2809                 my @database_list       = $kiriwrite_dbmodule->getdblist();
2811                 # Check if any errors occured while trying to get the list of databases.
2813                 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
2815                         # The database directory is missing so return an error.
2817                         kiriwrite_error("datadirectorymissing");
2819                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
2821                         # The database directory has invalid permissions set so return
2822                         # an error.
2824                         kiriwrite_error("datadirectoryinvalidpermissions");
2826                 }
2828                 # Get the information about each database (the short name and friendly name).
2830                 foreach $data_file (@database_list){
2832                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
2834                         # Check if any errors occured while selecting the database.
2836                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2838                                 # The database does not exist, so process the next
2839                                 # database.
2841                                 next;
2843                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2845                                 # The database has invalid permissions set, so process
2846                                 # the next database.
2848                                 next;
2850                         }
2852                         # Get the database information.
2854                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2856                         # Check if any errors had occured while getting the database
2857                         # information.
2859                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2861                                 # A database error has occured so process the next
2862                                 # database.
2864                                 next;
2866                         };
2868                         # Check if the database name is undefined and if it is
2869                         # then set it blank.
2871                         if (!$database_name){
2872                                 $database_name = "";
2873                         }
2875                         # Append the database to the list of databases available.
2877                         $db_list{$dbseek}{Filename}     = $data_file;
2878                         $db_list{$dbseek}{Name}         = $database_info{"DatabaseName"};
2880                         $dbseek++;
2882                 }
2884                 # Disconnect from the database server.
2886                 $kiriwrite_dbmodule->disconnect();
2888                 # Write out the form.
2890                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepages}, { Style => "pageheader" });
2891                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
2892                 $kiriwrite_presmodule->addhiddendata("mode", "page");
2893                 $kiriwrite_presmodule->addhiddendata("action", "multimove");
2894                 $kiriwrite_presmodule->addhiddendata("database", $database);
2895                 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
2896                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
2898                 # Write the page form data.
2900                 $pageseek = 1;
2902                 foreach $page (keys %move_list){
2903                         $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
2904                         $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $move_list{$page}{Filename});
2905                         $pageseek++;
2906                 }
2908                 $kiriwrite_presmodule->addlinebreak();
2909                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{movepagesmessage}, $database_name));
2910                 $kiriwrite_presmodule->addlinebreak();
2911                 $kiriwrite_presmodule->addlinebreak();
2912                 $kiriwrite_presmodule->startbox("datalist");
2914                 foreach $page (keys %move_list){
2915                         if (!$move_list{$page}{Name}){
2916                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2917                                 $kiriwrite_presmodule->addtext(" (" . $move_list{$page}{Filename} . ")");
2918                         } else {
2919                                 $kiriwrite_presmodule->addtext($move_list{$page}{Name} . " (" . $move_list{$page}{Filename} . ")");
2920                         }
2921                         $kiriwrite_presmodule->addlinebreak();
2922                 }
2924                 $kiriwrite_presmodule->endbox();
2925                 $kiriwrite_presmodule->addlinebreak();
2926                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepagesto});
2928                 $kiriwrite_presmodule->addselectbox("newdatabase");
2930                 foreach $db_name (keys %db_list){
2931                         $kiriwrite_presmodule->addoption($db_list{$db_name}{Name} . " (" . $db_list{$db_name}{Filename} . ")", { Value => $db_list{$db_name}{Filename}});
2932                 }
2934                 $kiriwrite_presmodule->endselectbox();
2935                 $kiriwrite_presmodule->addlinebreak();
2936                 $kiriwrite_presmodule->addlinebreak();
2937                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{movepagesbutton});
2938                 $kiriwrite_presmodule->addtext(" | ");
2939                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
2940                 $kiriwrite_presmodule->endform();
2942                 return $kiriwrite_presmodule->grab();
2944         } else {
2946                 # The confirm value is other than 0 or 1, so return
2947                 # an error.
2949                 kiriwrite_error("invalidvariable");
2951         }
2957 sub kiriwrite_page_multicopy{
2958 #################################################################################
2959 # kiriwrite_page_multicopy: Copy several pages from one database to another     #
2960 # database.                                                                     #
2961 #                                                                               #
2962 # Usage:                                                                        #
2963 #                                                                               #
2964 # kiriwrite_page_multicopy(database, newdatabase, confirm, filelist);           #
2965 #                                                                               #
2966 # database      Specifies the database to copy the selected pages from.         #
2967 # newdatabase   Specifies the database to copy the selected page to.            #
2968 # confirm       Confirms the action to copy the pages.                          #
2969 # filelist      A list of filenames to copy in an array.                        #
2970 #################################################################################
2972         # Get the values that were passed to the subroutine.
2974         my ($database, $newdatabase, $confirm, @filelist) = @_;
2976         # Check if the file list is blank and return an error
2977         # if it is.
2979         if (!@filelist){
2981                 # The file list really is blank so return
2982                 # an error.
2984                 kiriwrite_error("nopagesselected");
2986         }
2988         # Check if the confirm value is blank and if it is then
2989         # set the confirm value to 0.
2991         if (!$confirm){
2993                 $confirm = 0;
2995         }
2997         # Check if the database filename is valid and return an error if
2998         # it isn't.
3000         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
3002         if ($pagedatabase_filename_check eq 1){
3004                 # The database filename is blank, so return an error.
3006                 kiriwrite_error("blankdatabasepageadd");
3008         } elsif ($pagedatabase_filename_check eq 2){
3010                 # The database filename is invalid, so return an error.
3012                 kiriwrite_error("databasefilenameinvalid");
3014         }
3016         if ($confirm eq 1){
3018                 # The action to copy several pages from one database
3019                 # to another has been confirmed.
3021                 # Check if the database that the pages are copied from 
3022                 # is the same as the database the pages are copied to.
3023                 # Return an error if it is.
3025                 if ($database eq $newdatabase){
3027                         # The database that the pages are being copied from
3028                         # and the database that the pages are copied to
3029                         # is the same, so return an error.
3031                         kiriwrite_error("databasecopysame");
3033                 }
3035                 # Check if the new database filename is valid and return an error if
3036                 # it isn't.
3038                 my $pagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
3040                 if ($pagedatabase_filename_check eq 1){
3042                         # The database filename is blank, so return an error.
3044                         kiriwrite_error("blankdatabasepageadd");
3046                 } elsif ($pagedatabase_filename_check eq 2){
3048                         # The database filename is invalid, so return an error.
3050                         kiriwrite_error("databasefilenameinvalid");
3052                 }
3054                 # Connect to the database server.
3056                 $kiriwrite_dbmodule->connect();
3058                 # Check if any errors occured while connecting to the database server.
3060                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3062                         # A database connection error has occured so return
3063                         # an error.
3065                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3067                 }
3069                 # Select the database the pages are going to be copied from.
3071                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3073                 # Check if any errors had occured while selecting the database.
3075                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3077                         # The database does not exist, so return an error.
3079                         kiriwrite_error("oldcopydatabasedoesnotexist");
3081                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3083                         # The database has invalid permissions set, so return
3084                         # an error.
3086                         kiriwrite_error("oldcopydatabasefileinvalidpermissions");
3088                 }
3090                 # Select the database the pages are going to be copied to.
3092                 $kiriwrite_dbmodule->selectseconddb({ DatabaseName => $newdatabase });
3094                 # Check if any errors had occured while selecting the database.
3096                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3098                         # The database does not exist, so return an error.
3100                         kiriwrite_error("newcopydatabasedoesnotexist");
3102                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3104                         # The database has invalid permissions set, so return
3105                         # an error.
3107                         kiriwrite_error("newcopydatabasefileinvalidpermissions");
3109                 }
3111                 # Check if the database has read and write permissions.
3113                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($newdatabase, 1, 1);
3115                 if ($database_permissions eq 1){
3117                         # The database permissions are invalid so return an error.
3119                         kiriwrite_error("databaseinvalidpermissions");
3121                 }
3123                 # Define some values for later.
3125                 my %copied_list;
3126                 my %warning_list;
3127                 my %page_info;
3129                 my @olddatabase_info;
3130                 my @olddatabase_page;
3131                 my @newdatabase_info;
3132                 my @newdatabase_page;
3134                 my $filename;
3135                 my $filename_sql;
3136                 my $filename_out;
3138                 my $olddatabase_database_handle;
3139                 my $olddatabase_string_handle;
3140                 my $olddatabase_name;
3141                 my $newdatabase_database_handle;
3142                 my $newdatabase_string_handle;
3143                 my $newdatabase_name;
3145                 my $page;
3146                 my $warning;
3147                 my $page_filename;
3148                 my $page_filename_sql;
3149                 my $page_name;
3150                 my $page_name_sql;
3151                 my $page_description;
3152                 my $page_description_sql;
3153                 my $page_section;
3154                 my $page_section_sql;
3155                 my $page_template;
3156                 my $page_template_sql;
3157                 my $page_data;
3158                 my $page_data_sql;
3159                 my $page_settings;
3160                 my $page_settings_sql;
3161                 my $page_lastmodified;
3162                 my $page_lastmodified_sql;
3164                 my $page_seek = 0;
3165                 my $warning_count = 0;
3167                 my $page_found = 0;
3169                 tie(%copied_list, 'Tie::IxHash');
3170                 tie(%warning_list, 'Tie::IxHash');
3172                 # Get information about the database that the selected pages are moving from.
3174                 my %olddatabase_info = $kiriwrite_dbmodule->getdatabaseinfo();
3176                 # Check if any errors had occured while getting the database
3177                 # information.
3179                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3181                         # A database error has occured so return an error and
3182                         # also the extended error information.
3184                         kiriwrite_error("oldcopydatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
3186                 };
3188                 $olddatabase_name = $olddatabase_info{"DatabaseName"};
3190                 # Get information about the database that the selected pages are moving to.
3192                 my %newdatabase_info = $kiriwrite_dbmodule->getseconddatabaseinfo();
3194                 # Check if any errors had occured while getting the database
3195                 # information.
3197                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3199                         # A database error has occured so return an error and
3200                         # also the extended error information.
3202                         kiriwrite_error("newcopydatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
3204                 };
3206                 $newdatabase_name = $newdatabase_info{"DatabaseName"};
3208                 # Check if the database filename is valid and return an error if
3209                 # it isn't.
3211                 my $newpagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
3213                 if ($newpagedatabase_filename_check eq 1){
3215                         # The database filename is blank, so return an error.
3217                         kiriwrite_error("blankdatabasepageadd");
3219                 } elsif ($newpagedatabase_filename_check eq 2){
3221                         # The database filename is invalid, so return an error.
3223                         kiriwrite_error("databasefilenameinvalid");
3225                 }
3227                 foreach $filename (@filelist){
3229                         # Get the page information.
3231                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3233                         # Check if any errors occured.
3235                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3237                                 # A database error has occured so return an error and
3238                                 # also the extended error information.
3240                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3241                                 $warning_count++;
3242                                 next;
3244                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3246                                 # The page does not exist, so process the next page.
3248                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfrompageerror}, $filename);
3249                                 $warning_count++;
3250                                 next;
3252                         }
3254                         $kiriwrite_dbmodule->copypage({ PageFilename => $filename });
3256                         # Check if any errors occured while copying the page.
3258                         if ($kiriwrite_dbmodule->geterror eq "OldDatabaseError"){
3260                                 # A database error has occured while copying the pages from
3261                                 # the old database, so write a warning message.
3263                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfromdatabaseerror}, $filename,  $kiriwrite_dbmodule->geterror(1));
3264                                 $warning_count++;
3265                                 next;
3267                         } elsif ($kiriwrite_dbmodule->geterror eq "NewDatabaseError"){
3269                                 # A database error has occured while copying the pages to
3270                                 # the new database, so write a warning message.
3272                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopytodatabaseerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3273                                 $warning_count++;
3274                                 next;
3276                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3278                                 # The page with the filename given in the database that
3279                                 # the page is to be copied from doesn't exist so write
3280                                 # a warning message.
3282                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfrompagenotexist}, $filename);
3283                                 $warning_count++;
3284                                 next;
3286                         } elsif ($kiriwrite_dbmodule->geterror eq "PageAlreadyExists"){
3288                                 # The page with the filename given in the database that
3289                                 # the page is to be copied to already exists so write a
3290                                 # warning message.
3292                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopytopageexists}, $filename);
3293                                 $warning_count++;
3294                                 next;
3296                         }
3298                         # Append the copied page (filename and name) to the list of
3299                         # copied pages.
3301                         $copied_list{$page_seek}{Filename}      = $filename;
3302                         $copied_list{$page_seek}{Name}          = $page_info{"PageName"};
3303                         $page_seek++;
3305                 }
3307                 # Disconnect from the database server.
3309                 $kiriwrite_dbmodule->disconnect();
3311                 # Write out a message saying that the pages were moved (if any)
3312                 # to the new database (and any warnings given).
3314                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypages}, { Style => "pageheader" });
3315                 $kiriwrite_presmodule->addlinebreak();
3316                 $kiriwrite_presmodule->addlinebreak();
3318                 if (%copied_list){
3320                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{copypagesresultmessage}, $olddatabase_name, $newdatabase_name));
3321                         $kiriwrite_presmodule->addlinebreak();
3322                         $kiriwrite_presmodule->addlinebreak();
3323                         $kiriwrite_presmodule->startbox("datalist");
3324                         foreach $page (keys %copied_list){
3325                                 if (!$copied_list{$page}{Name}){
3326                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
3327                                         $kiriwrite_presmodule->addtext(" (" . $copied_list{$page}{Filename} . ")");
3328                                 } else {
3329                                         $kiriwrite_presmodule->addtext($copied_list{$page}{Name} . " (" . $copied_list{$page}{Filename} . ")");
3330                                 }
3331                                 $kiriwrite_presmodule->addlinebreak();
3332                         }
3333                         $kiriwrite_presmodule->endbox();
3335                 } else {
3337                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagescopied}, $olddatabase_name, $newdatabase_name));
3339                 }
3341                 if (%warning_list){
3343                         $kiriwrite_presmodule->addlinebreak();
3344                         $kiriwrite_presmodule->addlinebreak();
3345                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypageswarnings});
3346                         $kiriwrite_presmodule->addlinebreak();
3347                         $kiriwrite_presmodule->addlinebreak();
3348                         $kiriwrite_presmodule->startbox("datalist");
3349                         foreach $warning (keys %warning_list){
3350                                 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
3351                                                         $kiriwrite_presmodule->addlinebreak();
3352                         }
3353                         $kiriwrite_presmodule->endbox();
3355                 }
3357                 $kiriwrite_presmodule->addlinebreak();
3358                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $olddatabase_name)});
3359                 $kiriwrite_presmodule->addtext(" | ");
3360                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $newdatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{viewpagelist}, $newdatabase_name)});
3361                 $kiriwrite_presmodule->endform();
3363                 return $kiriwrite_presmodule->grab();
3365         } elsif ($confirm eq 0) {
3367                 # The action to copy several pages from one database
3368                 # to another has not been confirmed so write a form.
3370                 # Connect to the database server.
3372                 $kiriwrite_dbmodule->connect();
3374                 # Check if any errors occured while connecting to the database server.
3376                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3378                         # A database connection error has occured so return
3379                         # an error.
3381                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3383                 }
3385                 # Select the database to copy the pages from.
3387                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3389                 # Check if any errors occured while selecting the database.
3391                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3393                         # The database does not exist, so return an error.
3395                         kiriwrite_error("databasemissingfile");
3397                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3399                         # The database has invalid permissions set, so return
3400                         # an error.
3402                         kiriwrite_error("databaseinvalidpermissions");
3404                 }
3406                 # Get information about the database.
3408                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3410                 # Check if any errors had occured while getting the database
3411                 # information.
3413                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3415                         # A database error has occured so return an error and
3416                         # also the extended error information.
3418                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3420                 };
3422                 my $database_name       = $database_info{"DatabaseName"};
3424                 # Define some values for later.
3426                 my %page_info;
3427                 my %copy_list;
3428                 my %db_list;
3429                 my @page_info;
3430                 my $page;
3431                 my $data_file;
3432                 my $dbname;
3433                 my $filename;
3434                 my $pageseek    = 0;
3435                 my $dbseek      = 0;
3436                 my $pagefound   = 0;
3438                 tie(%copy_list, 'Tie::IxHash');
3439                 tie(%db_list, 'Tie::IxHash');
3441                 # Process each filename given.
3443                 foreach $filename (@filelist){
3445                         # Get the page information.
3447                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3449                         # Check if any errors occured.
3451                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3453                                 # A database error has occured so return an error and
3454                                 # also the extended error information.
3456                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3458                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3460                                 # The page does not exist, so process the next page.
3462                                 next;
3464                         }
3466                         # Add the page name and file name to the list of
3467                         # pages to move.
3469                         $copy_list{$pageseek}{Filename} = $page_info{"PageFilename"};
3470                         $copy_list{$pageseek}{Name}     = $page_info{"PageName"};
3472                         # Increment the page seek counter.
3474                         $pageseek++;
3476                 }
3478                 # Check if any pages exust and return an error if
3479                 # there wasn't.
3481                 if ($pageseek eq 0){
3483                         # None of the selected pages exist, so return
3484                         # an error.
3486                         kiriwrite_error("nopagesselected");
3488                 }
3490                 # Get the database filenames and names.
3492                 my @database_list       = $kiriwrite_dbmodule->getdblist();
3494                 # Check if any errors occured while trying to get the list of databases.
3496                 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
3498                         # The database directory is missing so return an error.
3500                         kiriwrite_error("datadirectorymissing");
3502                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
3504                         # The database directory has invalid permissions set so return
3505                         # an error.
3507                         kiriwrite_error("datadirectoryinvalidpermissions");
3509                 }
3511                 # Process each database to get the database name.
3513                 foreach $data_file (@database_list){
3515                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
3517                         # Check if any errors occured while selecting the database.
3519                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3521                                 # The database does not exist, so process the next
3522                                 # database.
3524                                 next;
3526                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3528                                 # The database has invalid permissions set, so process
3529                                 # the next database.
3531                                 next;
3533                         }
3535                         # Get the database information.
3537                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3539                         # Check if any errors had occured while getting the database
3540                         # information.
3542                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3544                                 # A database error has occured so process the next
3545                                 # database.
3547                                 next;
3549                         };
3551                         # Check if the database name is undefined and if it is
3552                         # then set it blank.
3554                         if (!$database_name){
3555                                 $database_name = "";
3556                         }
3558                         # Append the database filename and name to the list of databases
3559                         # to move the pages to.
3561                         $db_list{$dbseek}{Filename}     = $data_file;
3562                         $db_list{$dbseek}{Name}         = $database_info{"DatabaseName"};
3564                         $dbseek++;
3566                 }
3568                 # Disconnect from the database server.
3570                 $kiriwrite_dbmodule->disconnect();
3572                 # Write out the form.
3574                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypages}, { Style => "pageheader" });
3575                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
3576                 $kiriwrite_presmodule->addhiddendata("mode", "page");
3577                 $kiriwrite_presmodule->addhiddendata("action", "multicopy");
3578                 $kiriwrite_presmodule->addhiddendata("database", $database);
3579                 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
3580                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
3582                 $pageseek = 1;
3584                 foreach $page (keys %copy_list){
3585                         $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
3586                         $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $copy_list{$page}{Filename});
3587                         $pageseek++;
3588                 }
3590                 $kiriwrite_presmodule->addlinebreak();
3591                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{copypagesmessage}, $database_name));
3593                 $kiriwrite_presmodule->addlinebreak();
3594                 $kiriwrite_presmodule->addlinebreak();
3596                 $kiriwrite_presmodule->startbox("datalist");
3598                 foreach $page (keys %copy_list){
3599                         if (!$copy_list{$page}{Name}){
3600                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
3601                                 $kiriwrite_presmodule->addtext(" (" . $copy_list{$page}{Filename} . ")");
3602                         } else {
3603                                 $kiriwrite_presmodule->addtext($copy_list{$page}{Name} . " (" . $copy_list{$page}{Filename} . ")");
3604                         }
3605                         $kiriwrite_presmodule->addlinebreak();
3606                 }
3608                 $kiriwrite_presmodule->endbox();
3610                 $kiriwrite_presmodule->addlinebreak();
3612                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypagesto});
3613                 $kiriwrite_presmodule->addselectbox("newdatabase");
3615                 foreach $dbname (keys %db_list){
3616                         $kiriwrite_presmodule->addoption($db_list{$dbname}{Name} . " (" . $db_list{$dbname}{Filename} . ")", { Value => $db_list{$dbname}{Filename}});
3617                 }
3619                 $kiriwrite_presmodule->endselectbox();
3621                 $kiriwrite_presmodule->addlinebreak();
3622                 $kiriwrite_presmodule->addlinebreak();
3623                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{copypagesbutton});
3624                 $kiriwrite_presmodule->addtext(" | ");
3625                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
3626                 $kiriwrite_presmodule->endform();
3628                 return $kiriwrite_presmodule->grab();
3630         } else {
3632                 # The confirm value is other than 0 or 1, so return
3633                 # an error.
3635                 kiriwrite_error("invalidvariable");
3637         }
3641 sub kiriwrite_page_multiedit{
3642 #################################################################################
3643 # kiriwrite_page_multiedit: Edit several pages from a database.                 #
3644 #                                                                               #
3645 # Usage:                                                                        #
3646 #                                                                               #
3647 # kiriwrite_page_multiedit(database, newsection, altersection, newtemplate,     #
3648 #                               altertemplate, newsettings, altersettings       #
3649 #                               confirm, filelist);                             #
3650 #                                                                               #
3651 # database      Specifies the database to edit the pages from.                  #
3652 # newsection    Specifies the new section name to use on the selected pages.    #
3653 # altersection  Specifies if the section name should be altered.                #
3654 # newtemplate   Specifies the new template filename to use on the selected      #
3655 #               pages.                                                          #
3656 # altertemplate Specifies if the template filename should be altered.           #
3657 # newsettings   Specifies the new settings to use on the selected pages.        #
3658 # altersettings Specifies if the settings should be altered.                    #
3659 # confirm       Confirms the action to edit the selected pages.                 #
3660 # filelist      The list of file names to edit.                                 #
3661 #################################################################################
3663         # Get the values that were passed to the subroutine.
3665         my ($database, $newsection, $altersection, $newtemplate, $altertemplate, $newsettings, $altersettings, $confirm, @filelist) = @_;
3667         # Check if the file list is blank and return an error
3668         # if it is.
3670         if (!@filelist){
3672                 # The file list really is blank so return
3673                 # an error.
3675                 kiriwrite_error("nopagesselected");
3677         }
3679         # Check if certain values are undefined and define them if
3680         # they are.
3682         if (!$altersection){
3684                 # The alter section value is blank, so set it to
3685                 # off.
3687                 $altersection   = "off";
3689         }
3691         if (!$altertemplate){
3693                 # The alter template value is blank, so set it to
3694                 # off.
3696                 $altertemplate  = "off";
3698         }
3700         if (!$altersettings){
3702                 # The alter settings value is blank, so set it to
3703                 # off.
3705                 $altersettings  = "off";
3707         }
3709         # Check if the database filename is valid and return an error if
3710         # it isn't.
3712         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
3714         if ($pagedatabase_filename_check eq 1){
3716                 # The database filename is blank, so return an error.
3718                 kiriwrite_error("blankdatabasepageadd");
3720         } elsif ($pagedatabase_filename_check eq 2){
3722                 # The database filename is invalid, so return an error.
3724                 kiriwrite_error("databasefilenameinvalid");
3726         }
3728         # Check if the confirm value is blank and if it is then
3729         # set the confirm value to 0.
3731         if (!$confirm){
3733                 $confirm = 0;
3735         }
3737         if ($confirm eq 1){
3739                 # The action to edit the template has been confirmed so
3740                 # edit the selected pages.
3742                 # Check the values recieved at UTF8 compliant before
3743                 # converting.
3745                 kiriwrite_variablecheck($newsection, "utf8", 0, 0);
3746                 kiriwrite_variablecheck($newtemplate, "utf8", 0, 0);
3747                 kiriwrite_variablecheck($newsettings, "utf8", 0, 0);
3749                 # Convert the values into proper UTF8 values.
3751                 $newsection     = kiriwrite_utf8convert($newsection);
3752                 $newtemplate    = kiriwrite_utf8convert($newtemplate);
3753                 $newsettings    = kiriwrite_utf8convert($newsettings);
3755                 # Check the length of the variables.
3757                 kiriwrite_variablecheck($altersection, "maxlength", 3, 0);
3758                 kiriwrite_variablecheck($altertemplate, "maxlength", 3, 0);
3759                 kiriwrite_variablecheck($altersettings, "maxlength", 3, 0);
3760                 my $newsection_maxlength_check  = kiriwrite_variablecheck($newsection, "maxlength", 256, 1);
3761                 my $newtemplate_maxlength_check = kiriwrite_variablecheck($newtemplate, "maxlength", 256, 1);
3762                 my $newtemplate_filename_check  = kiriwrite_variablecheck($newtemplate, "filename", 0, 1);
3763                 my $newsettings_maxlength_check = kiriwrite_variablecheck($newsettings, "maxlength", 1, 1);
3764                 my $newsettings_settings_check  = kiriwrite_variablecheck($newsettings, "pagesetting", 0, 1);
3766                 # Check the values and return an error if needed.
3768                 if ($newsection_maxlength_check eq 1 && $altersection eq "on"){
3770                         # The new section name is too long, so return an
3771                         # error.
3773                         kiriwrite_error("pagesectiontoolong");
3775                 }
3777                 if ($newtemplate_maxlength_check eq 1 && $altertemplate eq "on"){
3779                         # The new template name is too long, so return an
3780                         # error.
3782                         kiriwrite_error("templatefilenametoolong");
3784                 }
3786                 # Check if the template filename is set to !skip or !none
3787                 # and skip this check if it is.
3789                 if ($newtemplate eq "!skip" || $newtemplate eq "!none"){
3791                         # Skip this check as the template filename is 
3792                         # !skip or !none.
3794                 } else {
3795                         if ($newtemplate_filename_check eq 1 && $altertemplate eq "on" || $newtemplate_filename_check eq 2 && $altertemplate eq "on"){
3797                                 # The new template filename is invalid, so return
3798                                 # an error.
3800                                 kiriwrite_error("templatefilenameinvalid");
3802                         }
3803                 }
3805                 if ($newsettings_maxlength_check eq 1 && $altertemplate eq "on"){
3807                         # The new settings value is too long, so return
3808                         # an error.
3810                         kiriwrite_error("pagesettingstoolong");
3812                 }
3814                 if ($newsettings_settings_check eq 1 && $altersettings eq "on"){
3816                         # The new settings value is invalid, so return
3817                         # an error.
3819                         kiriwrite_error("pagesettingsinvalid");
3821                 }
3823                 # Define some values for later.
3825                 my %database_info;
3826                 my %edited_list;
3827                 my %warning_list;
3828                 my %page_info;
3829                 my $page;
3830                 my $warning;
3831                 my $filename;
3832                 my $page_name;
3833                 my $pagefound = 0;
3834                 my $pageedited = 0;
3835                 my $warning_count = 0;
3837                 tie(%edited_list, 'Tie::IxHash');
3838                 tie(%warning_list, 'Tie::IxHash');
3840                 # Check if the template filename is !skip and
3841                 # set the alter template value to off if it
3842                 # is.
3844                 if ($newtemplate eq "!skip"){
3846                         $altertemplate = "off";
3848                 }
3850                 # Check if all values are not selected and return
3851                 # an error if they are.
3853                 if ($altersection ne "on" && $altertemplate ne "on" && $altersettings ne "on"){
3855                         # All values are not selected so return 
3856                         # an error.
3858                         kiriwrite_error("noeditvaluesselected");
3860                 }
3862                 # Connect to the database server.
3864                 $kiriwrite_dbmodule->connect();
3866                 # Check if any errors occured while connecting to the database server.
3868                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3870                         # A database connection error has occured so return
3871                         # an error.
3873                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3875                 }
3877                 # Select the database.
3879                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3881                 # Check if any errors occured while selecting the database.
3883                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3885                         # The database does not exist, so return an error.
3887                         kiriwrite_error("databasemissingfile");
3889                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3891                         # The database has invalid permissions set, so return
3892                         # an error.
3894                         kiriwrite_error("databaseinvalidpermissions");
3896                 }
3898                 # Check if the database has read and write permissions.
3900                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
3902                 if ($database_permissions eq 1){
3904                         # The database permissions are invalid so return an error.
3906                         kiriwrite_error("databaseinvalidpermissions");
3908                 }
3910                 # Get information about the database.
3912                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3914                 # Check if any errors had occured while getting the database
3915                 # information.
3917                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3919                         # A database error has occured so return an error and
3920                         # also the extended error information.
3922                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3924                 };
3926                 my $database_name = $database_info{"DatabaseName"};
3928                 # Edit the selected pages.
3930                 foreach $filename (@filelist){
3932                         # Get the page information.
3934                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3936                         # Check if any errors occured.
3938                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3940                                 # A database error has occured so write a warning message.
3942                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3944                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3946                                 # The page does not exist, so write a warning message.
3948                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepagedoesnotexist}, $filename);
3949                                 $warning_count++;
3950                                 next;
3952                         }
3954                         # Check if the page section should be altered.
3956                         if ($altersection eq "on"){
3958                                 # Change the section name.
3960                                 $page_info{"PageSection"} = $newsection;
3962                         }
3964                         # Check if the page template should be altered.
3966                         if ($altertemplate eq "on"){
3968                                 # Change the page template filename.
3970                                 $page_info{"PageTemplate"} = $newtemplate;
3972                         }
3974                         # Check if the page settings should be altered.
3976                         if ($altersettings eq "on"){
3978                                 # Change the page settings value.
3980                                 $page_info{"PageSettings"} = $newsettings;
3982                         }
3984                         # Edit the selected page.
3986                         $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"} });
3988                         # Check if any errors occured while editing the page.
3990                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3992                                 # A database error has occured so write a warning message
3993                                 # with the extended error information.
3995                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3996                                 $warning_count++;
3997                                 next;
3999                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4001                                 # The pages does not exist in the database.
4003                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepagedoesnotexist}, $filename);
4004                                 $warning_count++;
4005                                 next;
4007                         }
4009                         # The page has been edited so write a message saying that the page
4010                         # has been edited.
4012                         $edited_list{$pageedited}{Filename}     = $page_info{"PageFilename"};
4013                         $edited_list{$pageedited}{Name}         = $page_info{"PageName"};
4014  
4015                         # Increment the counter of edited pages.
4016  
4017                         $pageedited++;
4019                 }
4021                 # Disconnect from the database server.
4023                 $kiriwrite_dbmodule->disconnect();
4025                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multiedit}, { Style => "pageheader" });
4026                 $kiriwrite_presmodule->addlinebreak();
4027                 $kiriwrite_presmodule->addlinebreak();
4029                 # Check if the counter of edited pages is 0 and if it is
4030                 # then write a message saying that no pages were edited
4031                 # else write a message listing all of the pages edited.
4033                 if ($pageedited eq 0){
4035                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagesedited}, $database_name));
4037                 } else {
4039                         # Write out the message saying that the selected pages
4040                         # were edited.
4042                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagesedited}, $database_name));
4043                         $kiriwrite_presmodule->addlinebreak();
4044                         $kiriwrite_presmodule->addlinebreak();
4045                         $kiriwrite_presmodule->startbox("datalist");
4047                         foreach $page (keys %edited_list){
4049                                 # Check if the page name is not blank.
4051                                 if (!$edited_list{$page}{Name}){
4053                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{pages}->{noname});
4054                                         $kiriwrite_presmodule->addtext(" (" . $edited_list{$page}{Filename} . ")");
4056                                 } else {
4058                                         $kiriwrite_presmodule->addtext($edited_list{$page}{Name});
4059                                         $kiriwrite_presmodule->addtext(" (" . $edited_list{$page}{Filename} . ")");
4061                                 }
4063                                 $kiriwrite_presmodule->addlinebreak();
4064                         }
4066                         $kiriwrite_presmodule->endbox();
4068                 }
4070                 # Check if any warnings have occured and write a message
4071                 # if any warnings did occur.
4073                 if (%warning_list){
4075                         # One or several warnings have occured so 
4076                         # write a message.
4078                         $kiriwrite_presmodule->addlinebreak();
4079                         $kiriwrite_presmodule->addlinebreak();
4080                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{editedpageswarnings});
4081                         $kiriwrite_presmodule->addlinebreak();
4082                         $kiriwrite_presmodule->addlinebreak();
4083                         $kiriwrite_presmodule->startbox("datalist");
4084                         foreach $warning (keys %warning_list) {
4085                                 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
4086                                 $kiriwrite_presmodule->addlinebreak();
4087                         }
4088                         $kiriwrite_presmodule->endbox();
4090                 }
4092                 # Write a link going back to the page list for
4093                 # the selected database.
4095                 $kiriwrite_presmodule->addlinebreak();
4096                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
4098                 return $kiriwrite_presmodule->grab();
4100         } elsif ($confirm eq 0){
4102                 # The action to edit the template has not been confirmed
4103                 # so write a form out instead.
4105                 # Connect to the database server.
4107                 $kiriwrite_dbmodule->connect();
4109                 # Check if any errors occured while connecting to the database server.
4111                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4113                         # A database connection error has occured so return
4114                         # an error.
4116                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4118                 }
4120                 # Select the database.
4122                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
4124                 # Check if any errors occured while selecting the database.
4126                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4128                         # The database does not exist, so return an error.
4130                         kiriwrite_error("databasemissingfile");
4132                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4134                         # The database has invalid permissions set, so return
4135                         # an error.
4137                         kiriwrite_error("databaseinvalidpermissions");
4139                 }
4141                 # Check if the database has read and write permissions.
4143                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
4145                 if ($database_permissions eq 1){
4147                         # The database permissions are invalid so return an error.
4149                         kiriwrite_error("databaseinvalidpermissions");
4151                 }
4153                 # Get information about the database.
4155                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4157                 # Check if any errors had occured while getting the database
4158                 # information.
4160                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4162                         # A database error has occured so return an error and
4163                         # also the extended error information.
4165                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4167                 };
4169                 my $database_name       = $database_info{"DatabaseName"};
4171                 # Define some variables for later.
4173                 my %edit_list;
4174                 my %template_list;
4175                 my %template_info;
4176                 my %page_info;
4177                 my @templates_list;
4178                 my @filenames;
4179                 my $filelist_filename;
4180                 my $filename;
4181                 my $page;
4182                 my $pageseek = 0;
4183                 my $page_name;
4184                 my $page_filename;
4185                 my $template;
4186                 my $template_filename;
4187                 my $template_warning;
4188                 my $templateseek = 0;
4190                 tie(%edit_list, 'Tie::IxHash');
4191                 tie(%template_list, 'Tie::IxHash');
4193                 # Get the information about each page that is going
4194                 # to be edited.
4196                 foreach $filelist_filename (@filelist){
4198                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
4200                         # Check if any errors occured.
4202                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4204                                 # A database error has occured so return an error and
4205                                 # also the extended error information.
4207                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4209                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4211                                 # The page does not exist, so process the next page.
4213                                 next;
4215                         }
4217                         # Add the page name and file name to the list of
4218                         # pages to edit.
4220                         $edit_list{$pageseek}{Filename} = $page_info{"PageFilename"};
4221                         $edit_list{$pageseek}{Name}     = $page_info{"PageName"};
4223                         # Increment the page seek counter and reset the
4224                         # page found value.
4226                         $pageseek++;
4228                 }
4230                 # Check if any pages were found in the database and return
4231                 # an error if not.
4233                 if ($pageseek eq 0){
4235                         # No pages were found so return an error.
4237                         kiriwrite_error("nopagesselected");
4239                 }
4241                 # Connect to the template database.
4243                 $kiriwrite_dbmodule->connecttemplate();
4245                 # Check if any errors had occured.
4247                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
4249                         # The template database does not exist so write a warning
4250                         # message.
4252                         $template_warning = $kiriwrite_lang->{pages}->{templatedatabasenotexistmultieditkeep};
4254                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
4256                         # The template database has invalid permissions set so
4257                         # return an error.
4259                         $template_warning = $kiriwrite_lang->{pages}->{templatedatabasepermissionsinvalidmultieditkeep};
4261                 }
4263                 if (!$template_warning){
4265                         # Get the list of templates available.
4267                         @templates_list = $kiriwrite_dbmodule->gettemplatelist();
4269                         # Check if any errors had occured.
4271                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
4273                                 # A database error occured while getting the list
4274                                 # of templates so write a warning message with the 
4275                                 # extended error information.
4277                                 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrormultieditkeep}, $kiriwrite_dbmodule->geterror(1));
4279                         }
4281                         if (!$template_warning){
4283                                 foreach $template_filename (@templates_list){
4285                                         # Get the template data.
4287                                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
4289                                         # Check if any error occured while getting the template information.
4291                                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
4293                                                 # A database error has occured, so write a warning message with
4294                                                 # the extended error information.
4296                                                 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrormultieditkeep}, $kiriwrite_dbmodule->geterror(1));
4298                                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
4300                                                 # The template does not exist, so process the next page.
4302                                                 next;
4304                                         }
4306                                         # Add the template to the list of templates.
4308                                         $template_list{$templateseek}{Filename} = $template_info{"TemplateFilename"};
4309                                         $template_list{$templateseek}{Name}     = $template_info{"TemplateName"};
4311                                         $templateseek++;
4313                                 }
4315                         }
4317                 }
4319                 # Disconnect from the template database.
4321                 $kiriwrite_dbmodule->disconnecttemplate();
4323                 # Disconnect from the database server.
4325                 $kiriwrite_dbmodule->disconnect();
4327                 # Write a form for editing the selected pages.
4329                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multiedit}, { Style => "pageheader" });
4330                 $kiriwrite_presmodule->addlinebreak();
4331                 $kiriwrite_presmodule->addlinebreak();
4332                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
4333                 $kiriwrite_presmodule->addhiddendata("mode", "page");
4334                 $kiriwrite_presmodule->addhiddendata("action", "multiedit");
4335                 $kiriwrite_presmodule->addhiddendata("database", $database);
4336                 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
4337                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
4339                 $pageseek = 1;
4341                 foreach $page (keys %edit_list){
4342                         $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
4343                         $kiriwrite_presmodule->addhiddendata("id[" . $pageseek  . "]", $edit_list{$page}{Filename});
4344                         $pageseek++;
4345                 }
4347                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{multieditmessage}, $database_name));
4348                 $kiriwrite_presmodule->addlinebreak();
4349                 $kiriwrite_presmodule->addlinebreak();
4350                 $kiriwrite_presmodule->startbox("datalist");
4352                 foreach $page (keys %edit_list){
4353                         if (!$edit_list{$page}{Name}){
4354                                 $kiriwrite_presmodule->additalictext("No Name");
4355                                 $kiriwrite_presmodule->addtext(" (" . $edit_list{$page}{Filename} . ")");
4356                         } else {
4357                                 $kiriwrite_presmodule->addtext($edit_list{$page}{Name} . " (" . $edit_list{$page}{Filename} . ")");
4358                         }
4360                         $kiriwrite_presmodule->addlinebreak();
4361                 }
4363                 $kiriwrite_presmodule->endbox();
4364                 $kiriwrite_presmodule->addlinebreak();
4365                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multieditmessagevalues});
4366                 $kiriwrite_presmodule->addlinebreak();
4367                 $kiriwrite_presmodule->addlinebreak();
4368                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
4370                 $kiriwrite_presmodule->startheader();
4371                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{alter}, { Style => "tablecellheader" });
4372                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
4373                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
4374                 $kiriwrite_presmodule->endheader();
4376                 $kiriwrite_presmodule->startrow();
4377                 $kiriwrite_presmodule->addcell("tablecell1");
4378                 $kiriwrite_presmodule->addcheckbox("altersection");
4379                 $kiriwrite_presmodule->endcell();
4380                 $kiriwrite_presmodule->addcell("tablecell1");
4381                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
4382                 $kiriwrite_presmodule->endcell();
4383                 $kiriwrite_presmodule->addcell("tablecell1");
4384                 $kiriwrite_presmodule->addinputbox("newsection", { Size => 64, MaxLength => 256 });
4385                 $kiriwrite_presmodule->endcell();
4386                 $kiriwrite_presmodule->endrow();
4388                 $kiriwrite_presmodule->startrow();
4389                 $kiriwrite_presmodule->addcell("tablecell2");
4390                 $kiriwrite_presmodule->addcheckbox("altertemplate");
4391                 $kiriwrite_presmodule->endcell();
4392                 $kiriwrite_presmodule->addcell("tablecell2");
4393                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
4394                 $kiriwrite_presmodule->endcell();
4396                 $kiriwrite_presmodule->addcell("tablecell2");
4398                 if ($template_warning){
4400                         $kiriwrite_presmodule->addhiddendata("newtemplate", "!skip");
4401                         $kiriwrite_presmodule->addtext($template_warning);
4403                 } else {
4405                         $kiriwrite_presmodule->addselectbox("newtemplate");
4407                         foreach $template (keys %template_list){
4409                                 $kiriwrite_presmodule->addoption($template_list{$template}{Name} . " (" . $template_list{$template}{Filename} . ")", { Value => $template_list{$template}{Filename}});
4411                         }
4413                         $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
4414                         $kiriwrite_presmodule->endselectbox();
4415                 }
4417                 $kiriwrite_presmodule->endcell();
4418                 $kiriwrite_presmodule->endrow();
4420                 $kiriwrite_presmodule->startrow();
4421                 $kiriwrite_presmodule->addcell("tablecell1");
4422                 $kiriwrite_presmodule->addcheckbox("altersettings");
4423                 $kiriwrite_presmodule->endcell();
4424                 $kiriwrite_presmodule->addcell("tablecell1");
4425                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
4426                 $kiriwrite_presmodule->endcell();
4427                 $kiriwrite_presmodule->addcell("tablecell1");
4428                 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => 1 , Selected => 1});
4429                 $kiriwrite_presmodule->addlinebreak();
4430                 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => 2 });
4431                 $kiriwrite_presmodule->addlinebreak();
4432                 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => 3 });
4433                 $kiriwrite_presmodule->addlinebreak();
4434                 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => 0 });
4435                 $kiriwrite_presmodule->endcell();
4436                 $kiriwrite_presmodule->endrow();
4438                 $kiriwrite_presmodule->endtable();
4439                 $kiriwrite_presmodule->addlinebreak();
4440                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{editpagesbutton});
4441                 $kiriwrite_presmodule->addtext(" | ");
4442                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
4443                 $kiriwrite_presmodule->addtext(" | ");
4444                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
4445                 $kiriwrite_presmodule->endform();
4447                 return $kiriwrite_presmodule->grab();
4449         } else {
4451                 # The confirm value is something else other than
4452                 # 1 or 0, so return an error.
4454                 kiriwrite_error("invalidvariable");
4456         }
4460 sub kiriwrite_page_list{
4461 #################################################################################
4462 # kiriwrite_page_list: Lists pages from an database.                            #
4463 #                                                                               #
4464 # Usage:                                                                        #
4465 #                                                                               #
4466 # kiriwrite_page_list([database]);                                              #
4467 #                                                                               #
4468 # database      Specifies the database to retrieve the pages from.              #
4469 #################################################################################
4471         # Get the database file name from what was passed to the subroutine.
4473         my ($database_file) = @_;
4475         # Check if the database_file variable is empty, if it is then print out a
4476         # select box asking the user to select a database from the list.
4478         if (!$database_file) {
4480                 # Define the variables required for this section.
4482                 my %database_info;
4483                 my @database_list;
4484                 my @databasefilenames;
4485                 my @databasenames;
4486                 my $dbseek              = 0;
4487                 my $dbfilename          = "";
4488                 my $dbname              = "";
4489                 my $data_file           = "";
4490                 my $data_file_length    = 0;
4491                 my $data_file_friendly  = "";
4492                 my $database_name       = "";
4493                 my $file_permissions    = "";
4495                 # Connect to the database server.
4497                 $kiriwrite_dbmodule->connect();
4499                 # Check if any errors occured while connecting to the database server.
4501                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4503                         # A database connection error has occured so return
4504                         # an error.
4506                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4508                 }
4510                 # Open the data directory and get all of the databases.
4512                 @database_list  = $kiriwrite_dbmodule->getdblist();
4514                 # Check if any errors occured while trying to get the list of databases.
4516                 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
4518                         # The database directory is missing so return an error.
4520                         kiriwrite_error("datadirectorymissing");
4522                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
4524                         # The database directory has invalid permissions set so return
4525                         # an error.
4527                         kiriwrite_error("datadirectoryinvalidpermissions");
4529                 }
4531                 # Get the information about each database (the short name and friendly name).
4533                 foreach $data_file (@database_list){
4535                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
4537                         # Check if any errors occured while selecting the database.
4539                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4541                                 # The database does not exist, so process the next
4542                                 # database.
4544                                 next;
4546                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4548                                 # The database has invalid permissions set, so process
4549                                 # the next database.
4551                                 next;
4553                         }
4555                         # Get the database information.
4557                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4559                         # Check if any errors had occured while getting the database
4560                         # information.
4562                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4564                                 # A database error has occured, so process the next 
4565                                 # database.
4567                                 next;
4569                         };
4571                         # Set the database name.
4573                         $database_name          = $database_info{"DatabaseName"};
4575                         # Check if the database name is undefined and if it is
4576                         # then set it blank.
4578                         if (!$database_name){
4579                                 $database_name = "";
4580                         }
4582                         # Append the database to the list of databases available.
4584                         push(@databasefilenames, $data_file);
4585                         push(@databasenames, $database_name);
4587                 }
4589                 # Disconnect from the database server.
4591                 $kiriwrite_dbmodule->disconnect();
4593                 # Write the page data.
4595                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{viewpages}, { Style => "pageheader" });
4596                 $kiriwrite_presmodule->addlinebreak();
4597                 $kiriwrite_presmodule->addlinebreak();
4598                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{nodatabaseselected});
4599                 $kiriwrite_presmodule->addlinebreak();
4600                 $kiriwrite_presmodule->addlinebreak();
4601                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"});
4602                 $kiriwrite_presmodule->addhiddendata("mode", "page");
4603                 $kiriwrite_presmodule->addhiddendata("action", "view");
4604                 $kiriwrite_presmodule->addselectbox("database");
4605                 foreach $dbfilename (@databasefilenames){
4606                         $dbname = $databasenames[$dbseek];
4607                         $dbseek++;
4608                         $kiriwrite_presmodule->addoption($dbname . " (" . $dbfilename . ")", { Value => $dbfilename });
4609                 }
4610                 $kiriwrite_presmodule->endselectbox();
4611                 $kiriwrite_presmodule->addtext(" | ");
4612                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{viewbutton});
4613                 $kiriwrite_presmodule->endform();
4615                 return $kiriwrite_presmodule->grab();
4617         } else {
4619                 my %database_info;
4620                 my %template_info;
4621                 my @database_pages;
4622                 my $pagemultioptions    = "";
4623                 my $db_name             = "";
4624                 my $tablestyle          = "";
4626                 my $page_filename       = "";
4627                 my $page_name           = "";
4628                 my $page_description    = "";
4629                 my $page_modified       = "";
4631                 my $tablestyletype      = 0;
4632                 my $page_count          = 0;
4633                 my $db_file_notblank    = 0;
4635                 tie(%database_info, 'Tie::IxHash');
4636                 tie(%template_info, 'Tie::IxHash');
4638                 # The database_file variable is not blank, so print out a list of pages from
4639                 # the selected database.
4641                 # Preform a variable check on the database filename to make sure that it is
4642                 # valid before using it.
4644                 kiriwrite_variablecheck($database_file, "filename", "", 0);
4645                 kiriwrite_variablecheck($database_file, "maxlength", 32, 0);
4647                 # Connect to the database server.
4649                 $kiriwrite_dbmodule->connect();
4651                 # Check if any errors occured while connecting to the database server.
4653                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4655                         # A database connection error has occured so return
4656                         # an error.
4658                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4660                 }
4662                 # Select the database.
4664                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_file });
4666                 # Check if any errors had occured while selecting the database.
4668                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4670                         # The database does not exist, so return an error.
4672                         kiriwrite_error("databasemissingfile");
4674                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4676                         # The database has invalid permissions set, so return
4677                         # an error.
4679                         kiriwrite_error("databaseinvalidpermissions");
4681                 }
4683                 # Get information about the database.
4685                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4687                 $db_name = $database_info{"DatabaseName"};
4689                 # Check if any errors had occured while getting the database
4690                 # information.
4692                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4694                         # A database error has occured so return an error and
4695                         # also the extended error information.
4697                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4699                 }
4701                 # Get the list of pages.
4703                 @database_pages = $kiriwrite_dbmodule->getpagelist();
4705                 # Check if any errors had occured while getting the list of pages.
4707                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4709                         # A database error has occured so return an error and
4710                         # also the extended error information.
4712                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4714                 }
4716                 # Check if there are any page names in the database array.
4718                 if (@database_pages){
4720                         # Write the start of the page.
4722                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagelist}, $db_name), { Style => "pageheader" });
4723                         $kiriwrite_presmodule->addlinebreak();
4724                         $kiriwrite_presmodule->addlinebreak();
4725                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
4726                         $kiriwrite_presmodule->addhiddendata("mode", "page");
4727                         $kiriwrite_presmodule->addhiddendata("database", $database_file);
4728                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
4730                         # Write the list of multiple selection options.
4732                         $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
4733                         $kiriwrite_presmodule->addtext(" | ");
4734                         $kiriwrite_presmodule->addbutton("action", { Value => "multidelete", Description => $kiriwrite_lang->{pages}->{deleteselectedbutton} });
4735                         $kiriwrite_presmodule->addtext(" | ");
4736                         $kiriwrite_presmodule->addbutton("action", { Value => "multimove", Description => $kiriwrite_lang->{pages}->{moveselectedbutton} });
4737                         $kiriwrite_presmodule->addtext(" | ");
4738                         $kiriwrite_presmodule->addbutton("action", { Value => "multicopy", Description => $kiriwrite_lang->{pages}->{copyselectedbutton} });
4739                         $kiriwrite_presmodule->addtext(" | ");
4740                         $kiriwrite_presmodule->addbutton("action", { Value => "multiedit", Description => $kiriwrite_lang->{pages}->{editselectedbutton} });
4742                         $kiriwrite_presmodule->addlinebreak();
4743                         $kiriwrite_presmodule->addlinebreak();
4745                         # Write the table header.
4747                         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
4748                         $kiriwrite_presmodule->startheader();
4749                         $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
4750                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagefilename}, { Style => "tablecellheader" });
4751                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagename}, { Style => "tablecellheader" });
4752                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagedescription}, { Style => "tablecellheader" });
4753                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{lastmodified}, { Style => "tablecellheader" });
4754                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
4755                         $kiriwrite_presmodule->endheader();
4757                         # Process each page filename and get the page information.
4759                         foreach $page_filename (@database_pages){
4761                                 %template_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page_filename });
4763                                 # Check if any errors have occured.
4765                                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4767                                         # A database error has occured so return an error and
4768                                         # also the extended error information.
4770                                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4772                                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4774                                         # The page does not exist, so process the next page.
4776                                         next;
4778                                 }
4780                                 $page_count++;
4782                                 $page_filename          = $template_info{"PageFilename"};
4783                                 $page_name              = $template_info{"PageName"};
4784                                 $page_description       = $template_info{"PageDescription"};
4785                                 $page_modified          = $template_info{"PageLastModified"};
4787                                 # Set the table cell style.
4789                                 if ($tablestyletype eq 0){
4791                                         $tablestyle = "tablecell1";
4792                                         $tablestyletype = 1;
4794                                 } else {
4796                                         $tablestyle = "tablecell2";
4797                                         $tablestyletype = 0;
4799                                 }
4801                                 # Write out the row of data.
4803                                 $kiriwrite_presmodule->startrow();
4804                                 $kiriwrite_presmodule->addcell($tablestyle);
4805                                 $kiriwrite_presmodule->addhiddendata("id[" . $page_count . "]", $page_filename);
4806                                 $kiriwrite_presmodule->addcheckbox("name[" . $page_count . "]");
4807                                 $kiriwrite_presmodule->endcell();
4808                                 $kiriwrite_presmodule->addcell($tablestyle);
4809                                 $kiriwrite_presmodule->addtext($page_filename);
4810                                 $kiriwrite_presmodule->endcell();
4811                                 $kiriwrite_presmodule->addcell($tablestyle);
4813                                 if (!$page_name){
4815                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
4817                                 } else {
4819                                         $kiriwrite_presmodule->addtext($page_name);
4821                                 }
4823                                 $kiriwrite_presmodule->endcell();
4824                                 $kiriwrite_presmodule->addcell($tablestyle);
4826                                 if (!$page_description){
4828                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
4830                                 } else {
4832                                         $kiriwrite_presmodule->addtext($page_description);
4834                                 }
4836                                 $kiriwrite_presmodule->endcell();
4837                                 $kiriwrite_presmodule->addcell($tablestyle);
4839                                 if (!$page_modified){
4841                                         $kiriwrite_presmodule->additalictext("No Date");
4843                                 } else {
4845                                         $kiriwrite_presmodule->addtext($page_modified);
4847                                 }
4849                                 $kiriwrite_presmodule->endcell();
4850                                 $kiriwrite_presmodule->addcell($tablestyle);
4851                                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"}  . "?mode=page&action=edit&database=" . $database_file . "&page=" . $page_filename, { Text => $kiriwrite_lang->{options}->{edit} });
4852                                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"}  . "?mode=page&action=delete&database=" . $database_file . "&page=" . $page_filename, { Text => $kiriwrite_lang->{options}->{delete} });
4853                                 $kiriwrite_presmodule->endcell();
4854                                 $kiriwrite_presmodule->endrow();
4856                                 # Increment the counter.
4858                         }
4860                 }
4862                 # Disconnect from the database server.
4864                 $kiriwrite_dbmodule->disconnect();
4866                 $kiriwrite_presmodule->addhiddendata("count", $page_count);
4867                 $kiriwrite_presmodule->endtable();
4868                 $kiriwrite_presmodule->endform();
4870                 if (!@database_pages || !$page_count){
4872                         # There were no values in the database pages array and 
4873                         # the page count had not been incremented so write a
4874                         # message saying that there were no pages in the
4875                         # database.
4877                         $kiriwrite_presmodule->clear();
4878                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagelist}, $db_name), { Style => "pageheader" });
4879                         $kiriwrite_presmodule->addlinebreak();
4880                         $kiriwrite_presmodule->addlinebreak();
4881                         $kiriwrite_presmodule->startbox("errorbox");
4882                         $kiriwrite_presmodule->enterdata($kiriwrite_lang->{pages}->{nopagesindatabase});
4883                         $kiriwrite_presmodule->endbox();
4885                 }
4887                 return $kiriwrite_presmodule->grab();
4889         }
4893 sub kiriwrite_page_multipleselect{
4894 #################################################################################
4895 # kiriwrite_page_multipleselect: Gets the multiple page selections from a       #
4896 # database and processes them into a single which can be used in the            #
4897 # kiriwrite_page_delete.                                                        #
4898 #                                                                               #
4899 # Usage:                                                                        #
4900 #                                                                               #
4901 # kiriwrite_page_multipleselect();                                              #
4902 #################################################################################
4904         # Load the required perl modules for this subroutine.
4906         my $query = new CGI;
4908         # Setup some variables that will be used later on.
4910         my $page_select_seek = 1;
4911         my $page_current_value = "";
4912         my $selectionlist = "";
4914         # Get the required variables from the HTTP query.
4916         my $page_count = $query->param('count');
4918         do {
4920                 # Get the current value of the selected page's checkbox.
4922                 $page_current_value = $query->param('name[' . $page_select_seek . ']');
4924                 # If page_current_value is undefinied or blank, set page_current_value
4925                 # to off.
4927                 if (!$page_current_value){
4929                         $page_current_value = "off";
4931                 }
4933                 # Check if the page_current_value is set to 'on' if it is append the
4934                 # current page seek value to the selection list.
4936                 if ($page_current_value eq "on"){
4938                         # Append the current seek value to the selection list.
4940                         $selectionlist = $selectionlist . $page_select_seek . "|";
4942                 }
4944                 # Increment the page selection seeking counter.
4946                 $page_select_seek++;
4948         } until ($page_select_seek eq $page_count);
4950         return $selectionlist;
4954 sub kiriwrite_template_add{
4955 #################################################################################
4956 # kiriwrite_template_add: Add a template to the template folder                 #
4957 #                                                                               #
4958 # Usage:                                                                        #
4959 #                                                                               #
4960 # kiriwrite_template_add(filename, name, description, layout, confirm);         #
4961 #                                                                               #
4962 # filename      The filename of the new template.                               #
4963 # name          The name of the template.                                       #
4964 # description   The description of the template.                                #
4965 # layout        The layout of the new template.                                 #
4966 # confirm       Confirm the action of creating a new template.                  #
4967 #################################################################################
4969         # Get the variables that were passed to the subroutine.
4971         my ($templatefilename, $templatename, $templatedescription, $templatelayout, $confirm) = @_;
4973         # Check if the confirm value is blank and if it is then set confirm to 0.
4975         if (!$confirm){
4977                 # The confirm value is blank, so set the value of confirm to 0.
4979                 $confirm = 0;
4981         }
4983         if ($confirm eq 1){
4985                 # Check (validate) each of the values.
4987                 kiriwrite_variablecheck($templatename, "utf8", 0, 0);
4988                 kiriwrite_variablecheck($templatedescription, "utf8", 0, 0);
4989                 kiriwrite_variablecheck($templatelayout, "utf8", 0, 0);
4991                 # Convert the values into proper UTF8 strings that can be used.
4993                 $templatename           = kiriwrite_utf8convert($templatename);
4994                 $templatedescription    = kiriwrite_utf8convert($templatedescription);
4995                 $templatelayout         = kiriwrite_utf8convert($templatelayout);
4997                 # Check the length of the converted UTF8 strings.
4999                 my $templatefilename_length_check       = kiriwrite_variablecheck($templatefilename, "maxlength", 64, 1);
5000                 my $templatename_length_check           = kiriwrite_variablecheck($templatename, "maxlength", 512, 1);
5001                 my $templatedescription_length_check    = kiriwrite_variablecheck($templatedescription, "maxlength", 512, 1);
5002                 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
5004                 if ($templatefilename_length_check eq 1){
5006                         # The template filename length is too long, so return an error.
5008                         kiriwrite_error("templatefilenametoolong");
5010                 }
5012                 if ($templatename_length_check eq 1){
5014                         # The template name length is too long, so return an error.
5016                         kiriwrite_error("templatenametoolong");
5018                 }
5021                 if ($templatedescription_length_check eq 1){
5023                         # The template description length is too long, so return an error.
5025                         kiriwrite_error("templatedescriptiontoolong");
5027                 }
5029                 # Check if the filename specified is a valid filename.
5031                 kiriwrite_variablecheck($templatefilename, "filename", "", 0);
5033                 # Connect to the template server.
5035                 $kiriwrite_dbmodule->connect();
5037                 # Connect to the template database.
5039                 $kiriwrite_dbmodule->connecttemplate(1);
5041                 # Check if any errors had occured.
5043                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5045                         # The template database has invalid permissions set so
5046                         # return an error.
5048                         kiriwrite_error("templatedatabaseinvalidpermissions");
5050                 }
5052                 $kiriwrite_dbmodule->addtemplate({ TemplateFilename => $templatefilename, TemplateName => $templatename, TemplateDescription => $templatedescription, TemplateLayout => $templatelayout });
5054                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5056                         # A database error has occured so return an error along
5057                         # with the extended error information.
5059                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5061                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5063                         # The template database has invalid permissions set so return
5064                         # an error.
5066                         kiriwrite_error("templatedatabaseinvalidpermissions");
5068                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplatePageExists"){
5070                         # The template page already exists so return an error.
5072                         kiriwrite_error("templatefilenameexists");
5074                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseUncreateable"){
5076                         # The template databases is uncreatable so return an error.
5078                         kiriwrite_error("templatedatabasenotcreated");
5080                 }
5082                 $kiriwrite_dbmodule->disconnecttemplate();
5084                 # Disconnect from the template server.
5086                 $kiriwrite_dbmodule->disconnect();
5088                 # Print out the confirmation message.
5090                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{addedtemplate}, { Style => "pageheader" });
5091                 $kiriwrite_presmodule->addlinebreak();
5092                 $kiriwrite_presmodule->addlinebreak();
5093                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{addedtemplatemessage}, $templatename));
5094                 $kiriwrite_presmodule->addlinebreak();
5095                 $kiriwrite_presmodule->addlinebreak();
5096                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5097                 return $kiriwrite_presmodule->grab();
5099         } else {
5100                 # No confirmation was made, so print out a form for adding a template.
5102                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{addtemplate}, { Style => "pageheader" });
5103                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5104                 $kiriwrite_presmodule->addhiddendata("mode", "template");
5105                 $kiriwrite_presmodule->addhiddendata("action", "add");
5106                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5107                 $kiriwrite_presmodule->addlinebreak();
5108                 $kiriwrite_presmodule->starttable("", { CellSpacing => 0, CellPadding => 5 });
5110                 $kiriwrite_presmodule->startheader();
5111                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
5112                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
5113                 $kiriwrite_presmodule->endheader();
5115                 $kiriwrite_presmodule->startrow();
5116                 $kiriwrite_presmodule->addcell("tablecell1");
5117                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatename});
5118                 $kiriwrite_presmodule->endcell();
5119                 $kiriwrite_presmodule->addcell("tablecell2");
5120                 $kiriwrite_presmodule->addinputbox("templatename", { Size => 64, MaxLength => 512 });
5121                 $kiriwrite_presmodule->endcell();
5122                 $kiriwrite_presmodule->endrow();
5124                 $kiriwrite_presmodule->startrow();
5125                 $kiriwrite_presmodule->addcell("tablecell1");
5126                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatedescription});
5127                 $kiriwrite_presmodule->endcell();
5128                 $kiriwrite_presmodule->addcell("tablecell2");
5129                 $kiriwrite_presmodule->addinputbox("templatedescription", { Size => 64, MaxLength => 512 });
5130                 $kiriwrite_presmodule->endcell();
5131                 $kiriwrite_presmodule->endrow();
5133                 $kiriwrite_presmodule->startrow();
5134                 $kiriwrite_presmodule->addcell("tablecell1");
5135                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatefilename});
5136                 $kiriwrite_presmodule->endcell();
5137                 $kiriwrite_presmodule->addcell("tablecell2");
5138                 $kiriwrite_presmodule->addinputbox("templatefilename", { Size => 32, MaxLength => 64 });
5139                 $kiriwrite_presmodule->endcell();
5140                 $kiriwrite_presmodule->endrow();
5142                 $kiriwrite_presmodule->startrow();
5143                 $kiriwrite_presmodule->addcell("tablecell1");
5144                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatelayout});
5145                 $kiriwrite_presmodule->endcell();
5146                 $kiriwrite_presmodule->addcell("tablecell2");
5147                 $kiriwrite_presmodule->addtextbox("templatelayout", { Columns => 50, Rows => 10 });
5148                 $kiriwrite_presmodule->addlinebreak();
5149                 $kiriwrite_presmodule->addlinebreak();
5150                 $kiriwrite_presmodule->startbox("datalist");
5151                 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
5152                 $kiriwrite_presmodule->addlinebreak();
5153                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagecontent});
5154                 $kiriwrite_presmodule->addlinebreak();
5155                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
5156                 $kiriwrite_presmodule->addlinebreak();
5157                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
5158                 $kiriwrite_presmodule->addlinebreak();
5159                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
5160                 $kiriwrite_presmodule->addlinebreak();
5161                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
5162                 $kiriwrite_presmodule->addlinebreak();
5163                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
5164                 $kiriwrite_presmodule->addlinebreak();
5165                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
5166                 $kiriwrite_presmodule->addlinebreak();
5167                 $kiriwrite_presmodule->endbox();
5168                 $kiriwrite_presmodule->endcell();
5169                 $kiriwrite_presmodule->endrow();
5170                 $kiriwrite_presmodule->endtable();
5172                 $kiriwrite_presmodule->addlinebreak();
5173                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{addtemplatebutton});
5174                 $kiriwrite_presmodule->addtext(" | ");
5175                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
5176                 $kiriwrite_presmodule->addtext(" | ");
5177                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template" , { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5179                 $kiriwrite_presmodule->endform();
5181                 return $kiriwrite_presmodule->grab();
5183         }
5188 sub kiriwrite_template_edit{
5189 #################################################################################
5190 # kiriwrite_template_edit: Edit a template from the template folder.            #
5191 #                                                                               #
5192 # Usage:                                                                        #
5193 #                                                                               #
5194 # kiriwrite_template_edit(filename, [newfilename], [newname], [newdescription], #
5195 #                               [templatelayout], [confirm]);                   #
5196 #                                                                               #
5197 # filename              The current filename of the template to edit.           #
5198 # newfilename           The new filename of the template to edit.               #
5199 # newname               The new name of the template being edited.              #
5200 # newdescription        The new description of the template being edited.       #
5201 # templatelayout        The modified/altered template layout.                   #
5202 # confirm               Confirms the action to edit a template and its          #
5203 #                       settings.                                               #
5204 #################################################################################
5206         # Get all the variables that have been passed to the subroutine.
5208         my ($templatefilename, $templatenewfilename, $templatenewname, $templatenewdescription, $templatelayout, $confirm) = @_;
5210         # Check if the confirm variable is blank, if it is then
5211         # set confirm to '0'
5213         if (!$confirm){
5215                 # confirm is uninitalised/blank, so set the value of confirm
5216                 # to '0'
5218                 $confirm = 0;
5220         }
5222         # Check if the template filename is blank and if it is, then return
5223         # an error.
5225         if (!$templatefilename){
5227                 kiriwrite_error("templatefilenameblank");
5229         }
5231         # Connect to the database server.
5233         $kiriwrite_dbmodule->connect();
5235         # Check if any errors occured while connecting to the database server.
5237         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5239                 # A database connection error has occured so return
5240                 # an error.
5242                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5244         }
5246         if ($confirm eq 1){
5248                 # Check certain strings to see if they UTF8 compiliant.
5250                 kiriwrite_variablecheck($templatenewname, "utf8", 0, 0);
5251                 kiriwrite_variablecheck($templatenewdescription, "utf8", 0, 0);
5252                 kiriwrite_variablecheck($templatelayout, "utf8", 0, 0);
5254                 # Convert the values into proper UTF8 strings.
5256                 $templatenewname        = kiriwrite_utf8convert($templatenewname);
5257                 $templatenewdescription = kiriwrite_utf8convert($templatenewdescription);
5258                 $templatelayout         = kiriwrite_utf8convert($templatelayout);
5260                 # Check if the filenames recieved are valid filenames.
5262                 kiriwrite_variablecheck($templatenewfilename, "maxlength", 64, 0);
5263                 kiriwrite_variablecheck($templatenewdescription, "maxlength", 512, 0);
5264                 kiriwrite_variablecheck($templatenewname, "maxlength", 512, 0);
5265                 kiriwrite_variablecheck($templatefilename, "maxlength", 64, 0);
5266                 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
5268                 kiriwrite_variablecheck($templatefilename, "filename", "", 0);
5269                 kiriwrite_variablecheck($templatenewfilename, "filename", "", 0);
5271                 # Connect to the template database.
5273                 $kiriwrite_dbmodule->connecttemplate();
5275                 # Check if any errors had occured.
5277                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5279                         # The template database has invalid permissions set so
5280                         # return an error.
5282                         kiriwrite_error("templatedatabaseinvalidpermissions");
5284                 }
5286                 # Edit the template.
5288                 $kiriwrite_dbmodule->edittemplate({ TemplateFilename => $templatefilename, NewTemplateFilename => $templatenewfilename, NewTemplateName => $templatenewname, NewTemplateDescription => $templatenewdescription, NewTemplateLayout => $templatelayout });
5290                 # Check if any error occured while editing the template.
5292                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5294                         # A database error has occured, so return an error.
5296                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5298                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5300                         # The template database has invalid permissions set so return
5301                         # an error.
5303                         kiriwrite_error("templatedatabaseinvalidpermissions");
5305                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5307                         # The template does not exist, so process the next template.
5309                         kiriwrite_error("templatedoesnotexist");
5311                 }
5313                 # Disconnect from the database server.
5315                 $kiriwrite_dbmodule->disconnect();
5317                 # Disconnect from the template database.
5319                 $kiriwrite_dbmodule->disconnecttemplate();
5321                 # Append a link so that the user can return to the templates list.
5323                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{editedtemplate}, { Style => "pageheader" });
5324                 $kiriwrite_presmodule->addlinebreak();
5325                 $kiriwrite_presmodule->addlinebreak();
5326                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{editedtemplatemessage}, $templatenewname));
5327                 $kiriwrite_presmodule->addlinebreak();
5328                 $kiriwrite_presmodule->addlinebreak();
5329                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5331         } else {
5333                 # Connect to the template database.
5335                 $kiriwrite_dbmodule->connecttemplate();
5337                 # Check if any errors had occured.
5339                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5341                         # The template database has invalid permissions set so
5342                         # return an error.
5344                         kiriwrite_error("templatedatabaseinvalidpermissions");
5346                 }
5348                 # Get the template information.
5350                 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $templatefilename });
5352                 # Check if any error occured while getting the template information.
5354                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5356                         # A database error has occured, so return an error.
5358                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5360                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5362                         # The template does not exist, so return an error.
5364                         kiriwrite_error("templatedoesnotexist");
5366                 }
5368                 # Disconnect from the template database.
5370                 $kiriwrite_dbmodule->disconnecttemplate();
5372                 # Get the values from the query results.
5374                 my $template_filename           = $template_info{"TemplateFilename"};
5375                 my $template_name               = $template_info{"TemplateName"};
5376                 my $template_description        = $template_info{"TemplateDescription"};
5377                 my $template_layout             = $template_info{"TemplateLayout"};
5378                 my $template_modified           = $template_info{"TemplateLastModified"};
5380                 # Check if the values are undefined and set them blank
5381                 # if they are.
5383                 if (!$template_name){
5384                         $template_name = "";
5385                 }
5387                 if (!$template_description){
5388                         $template_description = "";
5389                 }
5391                 if (!$template_layout){
5392                         $template_layout = "";
5393                 }
5395                 # Write out the form for editing an template with the current template 
5396                 # settings put into the correct place.
5398                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{edittemplate}, { Style => "pageheader" });
5399                 $kiriwrite_presmodule->addlinebreak();
5400                 $kiriwrite_presmodule->addlinebreak();
5401                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5402                 $kiriwrite_presmodule->addhiddendata("mode", "template");
5403                 $kiriwrite_presmodule->addhiddendata("action", "edit");
5404                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5405                 $kiriwrite_presmodule->addhiddendata("template", $template_filename);
5406                 $kiriwrite_presmodule->starttable("", { CellSpacing => 0, CellPadding => 5});
5408                 $kiriwrite_presmodule->startheader();
5409                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
5410                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
5411                 $kiriwrite_presmodule->endheader();
5413                 $kiriwrite_presmodule->startrow();
5414                 $kiriwrite_presmodule->addcell("tablecell1");
5415                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatename});
5416                 $kiriwrite_presmodule->endcell();
5417                 $kiriwrite_presmodule->addcell("tablecell2");
5418                 $kiriwrite_presmodule->addinputbox("newname", { Size => 64, MaxLength => 512, Value => $template_name });
5419                 $kiriwrite_presmodule->endcell();
5420                 $kiriwrite_presmodule->endrow();
5422                 $kiriwrite_presmodule->startrow();
5423                 $kiriwrite_presmodule->addcell("tablecell1");
5424                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatedescription});
5425                 $kiriwrite_presmodule->endcell();
5426                 $kiriwrite_presmodule->addcell("tablecell2");
5427                 $kiriwrite_presmodule->addinputbox("newdescription", { Size => 64, MaxLength => 512, Value => $template_description });
5428                 $kiriwrite_presmodule->endcell();
5429                 $kiriwrite_presmodule->endrow();
5431                 $kiriwrite_presmodule->startrow();
5432                 $kiriwrite_presmodule->addcell("tablecell1");
5433                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatefilename});
5434                 $kiriwrite_presmodule->endcell();
5435                 $kiriwrite_presmodule->addcell("tablecell2");
5436                 $kiriwrite_presmodule->addinputbox("newfilename", { Size => 32, MaxLength => 64, Value => $template_filename });
5437                 $kiriwrite_presmodule->endcell();
5438                 $kiriwrite_presmodule->endrow();
5440                 $kiriwrite_presmodule->startrow();
5441                 $kiriwrite_presmodule->addcell("tablecell1");
5442                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatelayout});
5443                 $kiriwrite_presmodule->endcell();
5444                 $kiriwrite_presmodule->addcell("tablecell2");
5445                 $kiriwrite_presmodule->addtextbox("newlayout", { Rows => 10, Columns => 50, Value => $template_layout});
5446                 $kiriwrite_presmodule->addlinebreak();
5447                 $kiriwrite_presmodule->addlinebreak();
5448                 $kiriwrite_presmodule->startbox("datalist");
5449                 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
5450                 $kiriwrite_presmodule->addlinebreak();
5451                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagecontent});
5452                 $kiriwrite_presmodule->addlinebreak();
5453                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
5454                 $kiriwrite_presmodule->addlinebreak();
5455                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
5456                 $kiriwrite_presmodule->addlinebreak();
5457                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
5458                 $kiriwrite_presmodule->addlinebreak();
5459                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
5460                 $kiriwrite_presmodule->addlinebreak();
5461                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
5462                 $kiriwrite_presmodule->addlinebreak();
5463                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
5464                 $kiriwrite_presmodule->addlinebreak();
5465                 $kiriwrite_presmodule->endbox();
5466                 $kiriwrite_presmodule->endcell();
5467                 $kiriwrite_presmodule->endrow();
5469                 $kiriwrite_presmodule->endtable();
5471                 $kiriwrite_presmodule->addlinebreak();
5473                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{edittemplatebutton});
5474                 $kiriwrite_presmodule->addtext(" | ");
5475                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
5476                 $kiriwrite_presmodule->addtext(" | ");
5477                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5479                 $kiriwrite_presmodule->endform();
5481         }
5483         # Disconnect from the database server.
5485         $kiriwrite_dbmodule->disconnect();
5487         return $kiriwrite_presmodule->grab();
5491 sub kiriwrite_template_delete{
5492 #################################################################################
5493 # kiriwrite_template_delete: Delete a template from the template folder.        #
5494 #                                                                               #
5495 # Usage:                                                                        #
5496 #                                                                               #
5497 # kiriwrite_template_delete(filename, confirm);                                 #
5498 #                                                                               #
5499 # filename      Specifies the filename of the database to delete.               #
5500 # confirm       Confirms the action to delete a template.                       #
5501 #################################################################################
5503         # Get the parameters that were passed to the subroutine.
5505         my ($template_filename, $template_confirm) = @_;
5507         if (!$template_confirm){
5508                 $template_confirm = 0;
5509         }
5511         # Check the length of the variables.
5512         kiriwrite_variablecheck($template_filename, "maxlength", 64, 0);
5513         kiriwrite_variablecheck($template_confirm, "maxlength", 1, 0);
5515         # Check if the template_name string is blank and if it is then
5516         # return an error (as the template_name string should not be
5517         # blank.
5519         if (!$template_filename){
5521                 # The template_filename string really is blank, 
5522                 # so return an error saying that an empty
5523                 # filename was passed (to the subroutine).
5525                 kiriwrite_error("templatefilenameblank");
5527         }
5529         # Check if the template_confirm string is blank and if it is, write
5530         # out a form asking the user to confirm the deletion.
5532         if ($template_confirm eq 1){
5534                 # The action to delete the template from the template database has
5535                 # been confirmed so delete the template.
5537                 # Connect to the database server.
5539                 $kiriwrite_dbmodule->connect();
5541                 # Check if any errors occured while connecting to the database server.
5543                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5545                         # A database connection error has occured so return
5546                         # an error.
5548                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5550                 }
5552                 # Check if the template database exists and the file permissions
5553                 # are valid and return an error if they aren't.
5555                 $kiriwrite_dbmodule->connecttemplate();
5557                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5559                         # The template database does not exist so write a warning
5560                         # message.
5562                         kiriwrite_error("templatedatabasemissing");
5564                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5566                         # The template database has invalid permissions set so
5567                         # return an error.
5569                         kiriwrite_error("templatedatabaseinvalidpermissions");
5571                 }
5573                 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
5575                 # Check if any error occured while getting the template information.
5577                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5579                         # A database error has occured, so return an error.
5581                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5583                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5585                         # The template does not exist, so return an error.
5587                         kiriwrite_error("templatedoesnotexist");
5589                 }
5591                 # Delete the selected template.
5593                 $kiriwrite_dbmodule->deletetemplate({ TemplateFilename => $template_filename });
5595                 # Check if any error occured while deleting the template.
5597                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5599                         # A database error has occured, so return an error.
5601                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5603                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5605                         # The template does not exist, so process the next template.
5607                         kiriwrite_error("templatedoesnotexist");
5609                 }
5611                 $kiriwrite_dbmodule->disconnecttemplate();
5613                 # Get the deleted database name.
5615                 my $database_template_name = $template_info{"TemplateName"};
5617                 # Disconnect from the database server.
5619                 $kiriwrite_dbmodule->disconnect();
5621                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{deletedtemplate}, { Style => "pageheader" });
5622                 $kiriwrite_presmodule->addlinebreak();
5623                 $kiriwrite_presmodule->addlinebreak();
5624                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{deletedtemplatemessage}, $database_template_name) );
5625                 $kiriwrite_presmodule->addlinebreak();
5626                 $kiriwrite_presmodule->addlinebreak();
5627                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5629                 return $kiriwrite_presmodule->grab();
5631         } elsif ($template_confirm eq 0) {
5633                 # The template confirm value is 0 (previously blank and then set to 0), so
5634                 # write out a form asking the user to confirm the deletion of the template.
5636                 # Connect to the database server.
5638                 $kiriwrite_dbmodule->connect();
5640                 # Check if any errors occured while connecting to the database server.
5642                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5644                         # A database connection error has occured so return
5645                         # an error.
5647                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5649                 }
5651                 # Connect to the template database.
5653                 $kiriwrite_dbmodule->connecttemplate();
5655                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5657                         # The template database does not exist so write a warning
5658                         # message.
5660                         kiriwrite_error("templatedatabasemissing");
5662                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5664                         # The template database has invalid permissions set so
5665                         # return an error.
5667                         kiriwrite_error("templatedatabaseinvalidpermissions");
5669                 }
5671                 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
5673                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5675                         # A database error has occured, so return an error.
5677                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5679                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5681                         # The template does not exist, so return an error.
5683                         kiriwrite_error("templatedoesnotexist");
5685                 }
5687                 my $template_data_filename      = $template_info{"TemplateFilename"};
5688                 my $template_data_name          = $template_info{"TemplateName"};
5690                 $kiriwrite_dbmodule->disconnecttemplate();
5692                 # Disconnect from the database server.
5694                 $kiriwrite_dbmodule->disconnect();
5696                 # Write out the confirmation form.
5698                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{deletetemplate}, { Style => "pageheader" });
5699                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5700                 $kiriwrite_presmodule->addhiddendata("mode", "template");
5701                 $kiriwrite_presmodule->addhiddendata("template", $template_filename);
5702                 $kiriwrite_presmodule->addhiddendata("action", "delete");
5703                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5704                 $kiriwrite_presmodule->addlinebreak();
5705                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{deletetemplatemessage}, $template_data_name, $template_data_filename));
5706                 $kiriwrite_presmodule->addlinebreak();
5707                 $kiriwrite_presmodule->addlinebreak();
5708                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{deletetemplatebutton});
5709                 $kiriwrite_presmodule->addtext(" | ");
5710                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{deletetemplatereturntolist} });
5711                 $kiriwrite_presmodule->endform();
5713                 return $kiriwrite_presmodule->grab();
5715         } else {
5717                         kiriwrite_error("invalidvariable");
5719         }
5723 sub kiriwrite_template_list{
5724 #################################################################################
5725 # kiriwrite_template_list: List the templates in the template folder.           #
5726 #                                                                               #
5727 # Usage:                                                                        #
5728 #                                                                               #
5729 # kiriwrite_template_list();                                                    #
5730 #################################################################################
5732         # Define certain values for later.
5734         my %template_info;
5736         my @templates_list;
5738         my $template;
5739         my $template_filename           = "";
5740         my $template_filename_list      = "";
5741         my $template_name               = "";
5742         my $template_description        = "";
5743         my $template_data               = "";
5745         my $template_count = 0;
5747         my $template_style = 0;
5748         my $template_stylename = "";
5750         my $templatewarning = "";
5752         # Connect to the database server.
5754         $kiriwrite_dbmodule->connect();
5756         # Check if any errors occured while connecting to the database server.
5758         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5760                 # A database connection error has occured so return
5761                 # an error.
5763                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5765         }
5767         # Connect to the template database.
5769         $kiriwrite_dbmodule->connecttemplate();
5771         # Check if any errors had occured.
5773         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5775                 # The template database does not exist so write a warning
5776                 # message.
5778                 $templatewarning = $kiriwrite_lang->{template}->{templatedatabasedoesnotexist};
5780         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5782                 # The template database has invalid permissions set so
5783                 # return an error.
5785                 kiriwrite_error("templatedatabaseinvalidpermissions");
5787         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5789                 # A database error occured while getting the list of
5790                 # templates so return an error with the extended
5791                 # error information.
5793                 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5795         }
5797         # Get the list of template databases.
5799         if (!$templatewarning){
5801                 @templates_list = $kiriwrite_dbmodule->gettemplatelist();
5803         }
5805         # Check if any errors had occured.
5807         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5809                 # A database error occured while getting the list
5810                 # of templates so return an error with the 
5811                 # extended error information.
5813                 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5815         }
5817         # Check if any templates are in the database and if there isn't
5818         # then write a message saying that there are no templates in the
5819         # database.
5821         if (!@templates_list && !$templatewarning){
5822                 $templatewarning = $kiriwrite_lang->{template}->{notemplatesavailable};
5823         }
5825         # Process the templates into a template list.
5827         $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{viewtemplates}, { Style => "pageheader" });
5828         $kiriwrite_presmodule->addlinebreak();
5829         $kiriwrite_presmodule->addlinebreak();
5831         if ($templatewarning){
5833                 $kiriwrite_presmodule->startbox("errorbox");
5834                 $kiriwrite_presmodule->addtext($templatewarning);
5835                 $kiriwrite_presmodule->endbox();
5837         } else {
5839                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
5840                 $kiriwrite_presmodule->startheader();
5841                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatefilename}, { Style => "tablecellheader" });
5842                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatename}, { Style => "tablecellheader" });
5843                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatedescription}, { Style => "tablecellheader" });
5844                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
5845                 $kiriwrite_presmodule->endheader();
5847                 foreach $template (@templates_list){
5849                         # Get the template data.
5851                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
5853                         # Check if any errors occured while trying to get the template
5854                         # data.
5856                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5858                                 # A database error has occured, so return an error.
5860                                 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5862                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5864                                 # The template does not exist, so process the next template.
5866                                 next;
5868                         }
5870                         $template_filename      = $template_info{"TemplateFileName"};
5871                         $template_name          = $template_info{"TemplateName"};
5872                         $template_description   = $template_info{"TemplateDescription"};
5874                         # Check what style the row of table cells should be.
5875  
5876                         if ($template_style eq 0){
5877  
5878                                 $template_stylename = "tablecell1";
5879                                 $template_style = 1;
5880  
5881                         } else {
5882  
5883                                 $template_stylename = "tablecell2";
5884                                 $template_style = 0;
5885  
5886                         }
5888                         $kiriwrite_presmodule->startrow();
5889                         $kiriwrite_presmodule->addcell($template_stylename);
5890                         $kiriwrite_presmodule->addtext($template_info{"TemplateFilename"});
5892                         # Check if the blank template value was set.
5894                         if (!$template_info{"TemplateLayout"}){
5895                                 $kiriwrite_presmodule->additalictext(" " . "[Blank Template]");
5896                         }
5898                         $kiriwrite_presmodule->endcell();
5899                         $kiriwrite_presmodule->addcell($template_stylename);
5901                         # Check if the template name is blank and if it is
5902                         # write a message to say there's no name for the
5903                         # template.
5905                         if (!$template_info{"TemplateName"}){
5906                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
5907                         } else {
5908                                 $kiriwrite_presmodule->addtext($template_info{"TemplateName"});
5909                         }
5911                         $kiriwrite_presmodule->endcell();
5912                         $kiriwrite_presmodule->addcell($template_stylename);
5914                         # Check if the template description is blank and if
5915                         # it is then write a message to say there's no
5916                         # description for the template.
5918                         if (!$template_info{"TemplateDescription"}){
5919                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
5920                         } else {
5921                                 $kiriwrite_presmodule->addtext($template_info{"TemplateDescription"});
5922                         }
5924                         $kiriwrite_presmodule->endcell();
5925                         $kiriwrite_presmodule->addcell($template_stylename);
5926                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template&action=edit&template=" . $template_info{"TemplateFilename"}, { Text => $kiriwrite_lang->{options}->{edit} });
5927                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template&action=delete&template=" . $template_info{"TemplateFilename"}, { Text => $kiriwrite_lang->{options}->{delete} });
5928                         $kiriwrite_presmodule->endcell();
5929                         $kiriwrite_presmodule->endrow();
5931                 }
5933                 $kiriwrite_presmodule->endtable();
5934                 $kiriwrite_presmodule->endform();
5936         }
5938         # Disconnect from the database server.
5940         $kiriwrite_dbmodule->disconnect();
5942         $kiriwrite_dbmodule->disconnecttemplate();
5943         return $kiriwrite_presmodule->grab();
5948 sub kiriwrite_database_add{
5949 #################################################################################
5950 # kiriwrite_database_add: Creates a new database.                               #
5951 #                                                                               #
5952 # Usage:                                                                        #
5953 #                                                                               #
5954 # kiriwrite_database_add(filename, name, description, [confirm]);               #
5955 #                                                                               #
5956 # filename      Specifies the filename for the database.                        #
5957 # name          Specifies a (friendly) name for the database.                   #
5958 # description   Specifies a description for the database.                       #
5959 # confirm       Confirms the action to create a database.                       #
5960 #################################################################################
5962         # Get the variables passed from the subroutine.
5964         my ($database_filename, $database_name, $database_description, $database_notes, $database_categories, $database_confirm) = @_;
5966         # Check if the confirm value is blank and if it is then
5967         # set the confirm value to 0.
5969         if (!$database_confirm){
5971                 # The confirm value was blank so set the value to 0.
5973                 $database_confirm = 0;
5975         }
5977         if ($database_confirm eq 1){
5979                 # The action to create a new database is confirmed.
5981                 # Validate the database name and database descriptions.
5983                 my $database_name_check_utf8            = kiriwrite_variablecheck($database_name, "utf8", 0, 0);
5984                 my $database_description_check_utf8     = kiriwrite_variablecheck($database_description, "utf8", 0, 0);
5985                 my $database_notes_check_utf8           = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
5986                 my $database_categories_check_utf8      = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
5988                 # Convert the UTF8 strings before checking the length of the strings.
5990                 $database_name                  = kiriwrite_utf8convert($database_name);
5991                 $database_description           = kiriwrite_utf8convert($database_description);
5992                 $database_notes                 = kiriwrite_utf8convert($database_notes);
5993                 $database_categories            = kiriwrite_utf8convert($database_categories);
5995                 my $database_name_check_blank           = kiriwrite_variablecheck($database_name, "blank", 0, 1);
5996                 my $database_name_check_length          = kiriwrite_variablecheck($database_name, "maxlength", 256, 1);
5997                 my $database_description_check_length   = kiriwrite_variablecheck($database_description, "maxlength", 512, 1);
5998                 my $database_filename_check_length      = kiriwrite_variablecheck($database_filename, "maxlength", 32, 1);
5999                 my $database_categories_check_length    = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
6001                 # Check if values returned contains any values that would
6002                 # result in a specific error message being returned.
6004                 if ($database_name_check_length eq 1){
6006                         # The length of the database name is too long, so return an error.
6007                         kiriwrite_error("databasenametoolong");
6009                 }
6011                 if ($database_description_check_length eq 1){
6013                         # The database description length is too long, so return an error.
6014                         kiriwrite_error("databasedescriptiontoolong");
6016                 }
6018                 if ($database_name_check_blank eq 1){
6020                         # The database name is blank, so return an error.
6021                         kiriwrite_error("databasenameblank");
6023                 }
6025                 if ($database_filename_check_length eq 1){
6027                         # The database filename is to long, so return an error.
6028                         kiriwrite_error("databasefilenametoolong");
6030                 }
6032                 if ($database_categories_check_length eq 1){
6034                         # The database categories is too long, so return an error.
6035                         kiriwrite_error("databasecategoriestoolong");
6037                 }
6039                 # Check if the database filename is blank and if it is then
6040                 # generate a filename.
6042                 if ($database_filename eq ""){
6044                         # Filename is blank so generate a file name from
6045                         # the database name.
6047                         $database_filename = kiriwrite_processfilename($database_name);
6049                 } else {
6051                         # Filename is not blank so don't generate a filename.
6053                 }
6055                 kiriwrite_variablecheck($database_filename, "filename", "", 0);
6056                 kiriwrite_variablecheck($database_filename, "maxlength", 32, 0);
6058                 # Connect to the database server.
6060                 $kiriwrite_dbmodule->connect();
6062                 # Check if any errors occured while connecting to the database server.
6064                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6066                         # A database connection error has occured so return
6067                         # an error.
6069                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6071                 }
6073                 my $database_name_final = $database_name;
6075                 # Create the database.
6077                 $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"} });
6079                 # Check if any errors have occured.
6081                 if ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
6083                         # A database with the filename given already exists, so
6084                         # return an error.
6086                         kiriwrite_error("fileexists");
6088                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6090                         # A database error has occured so return an error with
6091                         # the extended error information.
6093                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6095                 }
6097                 # Disconnect from the database server.
6099                 $kiriwrite_dbmodule->disconnect();
6101                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
6102                 $kiriwrite_presmodule->addlinebreak();
6103                 $kiriwrite_presmodule->addlinebreak();
6104                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseadded} , $database_name_final));
6105                 $kiriwrite_presmodule->addlinebreak();
6106                 $kiriwrite_presmodule->addlinebreak();
6107                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6109                 return $kiriwrite_presmodule->grab();
6111         }
6113         # There is confirm value is not 1, so write a form for creating a database to
6114         # store pages in.
6116         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
6117         $kiriwrite_presmodule->addlinebreak();
6118         $kiriwrite_presmodule->addlinebreak();
6119         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6120         $kiriwrite_presmodule->addhiddendata("mode", "db");
6121         $kiriwrite_presmodule->addhiddendata("action", "new");
6122         $kiriwrite_presmodule->addhiddendata("confirm", "1");
6123         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
6125         $kiriwrite_presmodule->startheader();
6126         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader"});
6127         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader"});
6128         $kiriwrite_presmodule->endheader();
6130         $kiriwrite_presmodule->startrow();
6131         $kiriwrite_presmodule->addcell("tablecell1");
6132         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
6133         $kiriwrite_presmodule->endcell();
6134         $kiriwrite_presmodule->addcell("tablecell2");
6135         $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256 });
6136         $kiriwrite_presmodule->endcell();
6137         $kiriwrite_presmodule->endrow();
6139         $kiriwrite_presmodule->startrow();
6140         $kiriwrite_presmodule->addcell("tablecell1");
6141         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
6142         $kiriwrite_presmodule->endcell();
6143         $kiriwrite_presmodule->addcell("tablecell2");
6144         $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512 });
6145         $kiriwrite_presmodule->endcell();
6146         $kiriwrite_presmodule->endrow();
6148         $kiriwrite_presmodule->startrow();
6149         $kiriwrite_presmodule->addcell("tablecell1");
6150         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
6151         $kiriwrite_presmodule->endcell();
6152         $kiriwrite_presmodule->addcell("tablecell2");
6153         $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512 });
6154         $kiriwrite_presmodule->endcell();
6155         $kiriwrite_presmodule->endrow();
6157         $kiriwrite_presmodule->startrow();
6158         $kiriwrite_presmodule->addcell("tablecell1");
6159         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
6160         $kiriwrite_presmodule->endcell();
6161         $kiriwrite_presmodule->addcell("tablecell2");
6162         $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => 50, Rows => 10, WordWrap => 0 });
6163         $kiriwrite_presmodule->endcell();
6164         $kiriwrite_presmodule->endrow();
6166         $kiriwrite_presmodule->startrow();
6167         $kiriwrite_presmodule->addcell("tablecell1");
6168         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
6169         $kiriwrite_presmodule->endcell();
6170         $kiriwrite_presmodule->addcell("tablecell2");
6171         $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32 });
6172         $kiriwrite_presmodule->startlist();
6173         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabaseautogenerate});
6174         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasenoextensions});
6175         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacterlength});
6176         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacters});
6177         $kiriwrite_presmodule->endlist();
6178         $kiriwrite_presmodule->endcell();
6179         $kiriwrite_presmodule->endrow();
6181         $kiriwrite_presmodule->endtable();
6182         $kiriwrite_presmodule->addlinebreak();
6183         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{adddatabasebutton});
6184         $kiriwrite_presmodule->addtext("|");
6185         $kiriwrite_presmodule->addreset($kiriwrite_lang->{database}->{clearvaluesbutton});
6186         $kiriwrite_presmodule->addtext("| ");
6187         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6188         $kiriwrite_presmodule->endform();
6190         # Exit the subroutine taking the data in the pagadata variable with it.
6192         return $kiriwrite_presmodule->grab();
6196 sub kiriwrite_database_edit{
6197 #################################################################################
6198 # kiriwrite_database_edit: Edits an database.                                   #
6199 #                                                                               #
6200 # Usage:                                                                        #
6201 #                                                                               #
6202 # kiriwrite_database_edit(filename, name, description, newfilename, newname,    #
6203 #                               newdescription, notes, categories, [confirm]);  #
6204 #                                                                               #
6205 # filename              Specifies the filename of the database.                 #
6206 # name                  Specifies the name of the database.                     #
6207 # description           Specifies the description of the database.              #
6208 # newfilename           Specifies the new filename of the database.             #
6209 # newname               Specifies the new name of the database.                 #
6210 # newdescription        Specifies the new description of the database.          #
6211 # notes                 Specifies the new notes of the database.                #
6212 # categories            Specifies the new categories of the database.           #
6213 # confirm               Confirms the action to edit a database.                 #
6214 #################################################################################
6216         # First, get all the variables passed to the subroutine.
6218         my ($database_shortname, $database_name, $database_description, $database_newfilename, $database_newname, $database_newdescription, $database_notes, $database_categories, $database_confirm) = @_;
6220         # Check if the database confirm value is blank and if it is
6221         # set the confirm value to 0.
6223         if (!$database_confirm){
6225                 $database_confirm = 0;
6227         }
6229         # 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
6230         # if $database_confirm was used directly).
6232         if ($database_confirm eq 1){
6234                 # Check if the new data passes the validation tests below. First, check the length of the variables.
6236                 my $database_name_check_utf8            = kiriwrite_variablecheck($database_newname, "utf8", 0, 0);
6237                 my $database_description_check_utf8     = kiriwrite_variablecheck($database_newdescription, "utf8", 0, 0);
6238                 my $database_notes_check_utf8           = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
6239                 my $database_categories_check_utf8      = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
6241                 # Convert the UTF8 strings to make sure their length is accurate.
6243                 $database_newname               = kiriwrite_utf8convert($database_newname);
6244                 $database_newdescription        = kiriwrite_utf8convert($database_newdescription);
6245                 $database_notes                 = kiriwrite_utf8convert($database_notes);
6246                 $database_categories            = kiriwrite_utf8convert($database_categories);
6248                 # Check if the database filename given is valid and return an error
6249                 # if it isn't.
6251                 kiriwrite_variablecheck($database_shortname, "filename", "", 0);
6253                 # Preform the following tests.
6255                 my $database_filename_check_length      = kiriwrite_variablecheck($database_newfilename, "maxlength", 32, 1);
6256                 my $database_filename_letnum            = kiriwrite_variablecheck($database_newfilename, "filename", 0, 0);
6257                 my $database_name_check_length          = kiriwrite_variablecheck($database_newname, "maxlength", 256, 1);
6258                 my $database_description_check_length   = kiriwrite_variablecheck($database_newdescription, "maxlength", 512, 1);
6259                 my $database_categories_check_length    = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
6260                 my $database_name_check_blank           = kiriwrite_variablecheck($database_newname, "blank", 0, 1);
6262                 # Check if the data is valid and return a specific error if it doesn't.
6264                 if ($database_name_check_length eq 1){
6266                         # The length of the database name is too long, so return an error.
6267                         kiriwrite_error("databasenametoolong");
6269                 }
6271                 if ($database_description_check_length eq 1){
6273                         # The database description length is too long, so return an error.
6274                         kiriwrite_error("databasedescriptiontoolong");
6276                 }
6278                 if ($database_name_check_blank eq 1){
6280                         # The database name is blank, so return an error.
6281                         kiriwrite_error("databasenameblank");
6283                 }
6285                 if ($database_filename_check_length eq 1){
6287                         # The database filename is too long, so return an error.
6288                         kiriwrite_error("databasefilenametoolong");
6290                 }
6292                 if ($database_categories_check_length eq 1){
6294                         # The database categories is too long, so return an error.
6295                         kiriwrite_error("databasecategoriestoolong");
6297                 }
6299                 # Connect to the database server.
6301                 $kiriwrite_dbmodule->connect();
6303                 # Check if any errors occured while connecting to the database server.
6305                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6307                         # A database connection error has occured so return
6308                         # an error.
6310                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6312                 }
6314                 # Get the database.
6316                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
6318                 # Check if any errors had occured while selecting the database.
6320                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6322                         # The database does not exist, so return an error.
6324                         kiriwrite_error("databasemissingfile");
6326                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6328                         # The database has invalid permissions set, so return
6329                         # an error.
6331                         kiriwrite_error("databaseinvalidpermissions");
6333                 }
6335                 # FIX THIS!! >O
6337                 $kiriwrite_dbmodule->editdatabase({ DatabaseNewFilename => $database_newfilename, DatabaseName => $database_newname , DatabaseDescription => $database_newdescription , DatabaseNotes => $database_notes, DatabaseCategories => $database_categories });
6339                 # Check if any errors had occured while using the database.
6341                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6343                         # The database does not exist, so return an error.
6345                         kiriwrite_error("databasemissingfile");
6347                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6349                         # The database has invalid permissions set, so return
6350                         # an error.
6352                         kiriwrite_error("databaseinvalidpermissions");
6354                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
6356                         # The database directory has invalid permissions set, so
6357                         # return an error.
6359                         kiriwrite_error("datadirectoryinvalidpermissions");
6361                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
6363                         # A database already exists with the new filename, so
6364                         # return an error.
6366                         kiriwrite_error("databasealreadyexists");
6368                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6370                         # A database error has occured so return an error with
6371                         # the extended error information.
6373                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6375                 }
6377                 # Disconnect from the server.
6379                 $kiriwrite_dbmodule->disconnect();
6381                 # Write out a message saying that the database has been updated.
6383                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{editeddatabase}, { Style => "pageheader" } );
6384                 $kiriwrite_presmodule->addlinebreak();
6385                 $kiriwrite_presmodule->addlinebreak();
6386                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseupdated}, $database_newname));
6387                 $kiriwrite_presmodule->addlinebreak();
6388                 $kiriwrite_presmodule->addlinebreak();
6389                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6391                 return $kiriwrite_presmodule->grab();
6393         } else {
6395                 my (%database_info);
6397                 # Check if the database filename given is valid and return an error
6398                 # if it isn't.
6400                 # Connect to the database server.
6402                 $kiriwrite_dbmodule->connect();
6404                 # Check if any errors occured while connecting to the database server.
6406                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6408                         # A database connection error has occured so return
6409                         # an error.
6411                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6413                 }
6415                 # Select the database.
6417                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
6419                 # Check if any errors had occured while setting the database.
6421                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6423                         # The database does not exist, so return an error.
6425                         kiriwrite_error("databasemissingfile");
6427                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6429                         # The database has invalid permissions set, so return
6430                         # an error.
6432                         kiriwrite_error("databaseinvalidpermissions");
6434                 }
6436                 # Get the database information.
6438                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6440                 # Check if any errors had occured while getting the database
6441                 # information.
6443                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6445                         # A database error has occured so return an error and
6446                         # also the extended error information.
6448                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6450                 }
6452                 # Get the values needed from the kiriwrite_database_info table.
6454                 my $database_oldname            = $database_info{"DatabaseName"};
6455                 my $database_olddescription     = $database_info{"Description"};
6456                 my $database_notes              = $database_info{"Notes"};
6457                 my $database_categories         = $database_info{"Categories"};
6459                 # Disconnect from the database server.
6461                 $kiriwrite_dbmodule->disconnect();
6463                 # Print out the form for editing a database's settings.
6465                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{editdatabase}, $database_oldname), { Style => "pageheader" });
6466                 $kiriwrite_presmodule->addlinebreak();
6467                 $kiriwrite_presmodule->addlinebreak();
6468                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6469                 $kiriwrite_presmodule->addhiddendata("mode", "db");
6470                 $kiriwrite_presmodule->addhiddendata("action", "edit");
6471                 $kiriwrite_presmodule->addhiddendata("database", $database_shortname);
6472                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
6473                 $kiriwrite_presmodule->addhiddendata("olddatabasename", $database_oldname);
6474                 $kiriwrite_presmodule->addhiddendata("olddatabasedescription", $database_olddescription);
6476                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
6477                 $kiriwrite_presmodule->startheader();
6478                 $kiriwrite_presmodule->addheader("Setting", { Style => "tablecellheader" });
6479                 $kiriwrite_presmodule->addheader("Value", { Style => "tablecellheader" });
6480                 $kiriwrite_presmodule->endheader();
6482                 $kiriwrite_presmodule->startrow();
6483                 $kiriwrite_presmodule->addcell("tablecell1");
6484                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
6485                 $kiriwrite_presmodule->endcell();
6486                 $kiriwrite_presmodule->addcell("tablecell2");
6487                 $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256, Value => $database_oldname } );
6488                 $kiriwrite_presmodule->endcell();
6489                 $kiriwrite_presmodule->endrow();
6491                 $kiriwrite_presmodule->startrow();
6492                 $kiriwrite_presmodule->addcell("tablecell1");
6493                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
6494                 $kiriwrite_presmodule->endcell();
6495                 $kiriwrite_presmodule->addcell("tablecell2");
6496                 $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512, Value => $database_olddescription } );
6497                 $kiriwrite_presmodule->endcell();
6498                 $kiriwrite_presmodule->endrow();
6500                 $kiriwrite_presmodule->startrow();
6501                 $kiriwrite_presmodule->addcell("tablecell1");
6502                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
6503                 $kiriwrite_presmodule->endcell();
6504                 $kiriwrite_presmodule->addcell("tablecell2");
6505                 $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512, Value => $database_categories } );
6506                 $kiriwrite_presmodule->endcell();
6507                 $kiriwrite_presmodule->endrow();
6509                 $kiriwrite_presmodule->startrow();
6510                 $kiriwrite_presmodule->addcell("tablecell1");
6511                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
6512                 $kiriwrite_presmodule->endcell();
6513                 $kiriwrite_presmodule->addcell("tablecell2");
6514                 $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => 50, Rows => 10, Value => $database_notes } );
6515                 $kiriwrite_presmodule->endcell();
6516                 $kiriwrite_presmodule->endrow();
6518                 $kiriwrite_presmodule->startrow();
6519                 $kiriwrite_presmodule->addcell("tablecell1");
6520                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
6521                 $kiriwrite_presmodule->endcell();
6522                 $kiriwrite_presmodule->addcell("tablecell2");
6523                 $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32, Value => $database_shortname } );
6524                 $kiriwrite_presmodule->endcell();
6525                 $kiriwrite_presmodule->endrow();
6527                 $kiriwrite_presmodule->endtable();
6529                 $kiriwrite_presmodule->addlinebreak();
6531                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{editdatabasebutton});
6532                 $kiriwrite_presmodule->addtext(" | ");
6533                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
6534                 $kiriwrite_presmodule->addtext(" | ");
6535                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6537                 $kiriwrite_presmodule->endform();
6539                 return $kiriwrite_presmodule->grab();
6541         }
6543         # The interpreter should not be here. So return an error saying invalid variable.
6545         kiriwrite_error("invalidvariable");
6549 sub kiriwrite_database_delete{
6550 #################################################################################
6551 # kiriwrite_database_delete: Deletes an database.                               #
6552 #                                                                               #
6553 # Usage:                                                                        #
6554 #                                                                               #
6555 # kiriwrite_database_delete(filename, [confirm]);                               #
6556 #                                                                               #
6557 # filename      Specifies the filename for the database to be deleted.          #
6558 # confirm       Confirms the action to delete a database.                       #
6559 #################################################################################
6561         my ($database_filename, $database_confirm) = @_;
6563         # Check if the confirm value is blank and if it is then set the
6564         # confirm value to 0.
6566         if (!$database_confirm){
6568                 $database_confirm = 0;
6570         }
6572         # Connect to the database server.
6574         $kiriwrite_dbmodule->connect();
6576         # Check if any errors occured while connecting to the database server.
6578         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6580                 # A database connection error has occured so return
6581                 # an error.
6583                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6585         }
6587         # Check if the database filename given is valid and return an error
6588         # if it isn't.
6590         kiriwrite_variablecheck($database_filename, "filename", "", 0);
6592         # Check if the request to delete a database has been confirmed. If it has, 
6593         # then delete the database itself.
6595         if ($database_confirm eq 1){
6596                 # There is a value in the confirm variable of the HTTP query.
6598                 # Select the database to delete and get the database name.
6600                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
6602                 # Check if any error occured while selecting the database.
6604                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6606                         # The database does not exist so return an error.
6608                         kiriwrite_error("databasemissingfile");
6610                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6612                         # The database has invalid permissions set so return
6613                         # an error.
6615                         kiriwrite_error("databaseinvalidpermissions");
6617                 }
6619                 my %database_info       = $kiriwrite_dbmodule->getdatabaseinfo();
6621                 # Check if any errors have occured while getting the database
6622                 # name.
6624                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6626                         # A database error has occured so return an error with
6627                         # the extended error information.
6629                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6631                 }
6633                 my $database_name = $database_info{"DatabaseName"};
6635                 # Delete the selected database.
6637                 $kiriwrite_dbmodule->deletedatabase({ DatabaseName => $database_filename });
6639                 # Check if any error occured while deleting the database.
6641                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6643                         # The database does not exist so return an error.
6645                         kiriwrite_error("databasemissingfile");
6647                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6649                         # The database has invalid permissions set so return
6650                         # an error.
6652                         kiriwrite_error("databaseinvalidpermissions");
6654                 }
6656                 # Disconnect from the database server.
6658                 $kiriwrite_dbmodule->disconnect();
6660                 # Write a message saying that the database has been deleted.
6662                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deleteddatabase}, { Style => "pageheader" });
6663                 $kiriwrite_presmodule->addlinebreak();
6664                 $kiriwrite_presmodule->addlinebreak();
6665                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deleteddatabasemessage}, $database_name));
6666                 $kiriwrite_presmodule->addlinebreak();
6667                 $kiriwrite_presmodule->addlinebreak();
6668                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} }); 
6670                 return $kiriwrite_presmodule->grab();
6672         }
6674         # The action has not been confirmed, so write out a form asking the 
6675         # user to confirm.
6677         # Get the database name.
6679         $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
6681         # Check if any error occured while selecting the database.
6683         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6685                 # The database does not exist so return an error.
6687                 kiriwrite_error("databasemissingfile");
6689         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6691                 # The database has invalid permissions set so return
6692                 # an error.
6694                 kiriwrite_error("databaseinvalidpermissions");
6697         }
6699         # Check if any errors have occured.
6701         my %database_info       = $kiriwrite_dbmodule->getdatabaseinfo();
6703         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6705                 # A database error has occured so return an error with
6706                 # the extended error information.
6708                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6710         }
6712         my $database_name = $database_info{"DatabaseName"};
6714         # Disconnect from the database server.
6716         $kiriwrite_dbmodule->disconnect();
6718         # Write out the form to ask the user to confirm the deletion of the 
6719         # selected database.
6721         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deletedatabase}, { Style => "pageheader" });
6722         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6723         $kiriwrite_presmodule->addhiddendata("mode", "db");
6724         $kiriwrite_presmodule->addhiddendata("action", "delete");
6725         $kiriwrite_presmodule->addhiddendata("database", $database_filename);
6726         $kiriwrite_presmodule->addhiddendata("confirm", "1");
6727         $kiriwrite_presmodule->addlinebreak();
6728         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deletedatabasemessage}, $database_name));
6729         $kiriwrite_presmodule->addlinebreak();
6730         $kiriwrite_presmodule->addlinebreak();
6731         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{deletedatabasebutton});
6732         $kiriwrite_presmodule->addtext(" | ");
6733         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{deletedatabasereturn} });
6734         $kiriwrite_presmodule->endform();
6736         return $kiriwrite_presmodule->grab();
6740 sub kiriwrite_database_list{
6741 #################################################################################
6742 # kiriwrite_database_list: Lists the databases available.                       #
6743 #                                                                               #
6744 # Usage:                                                                        #
6745 #                                                                               #
6746 # kiriwrite_database_list();                                                    #
6747 #################################################################################
6749         # Connect to the database server.
6751         $kiriwrite_dbmodule->connect();
6753         # Check if any errors occured while connecting to the database server.
6755         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6757                 # A database connection error has occured so return
6758                 # an error.
6760                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6762         }
6764         # Get the list of available databases and process any errors that
6765         # might have occured.
6767         my @database_list = $kiriwrite_dbmodule->getdblist();
6769         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
6771                 # The database directory is missing so return an error.
6773                 kiriwrite_error("datadirectorymissing");
6775         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
6777                 # The database directory has invalid permissions set so return
6778                 # an error.
6780                 kiriwrite_error("datadirectoryinvalidpermissions");
6782         }
6784         # Declare the following variables that are going to be used before using 
6785         # the foreach function.
6787         my ($database_info, %database_info);
6788         my @error_list;
6789         my @permissions_list;
6790         my $database_count = 0;
6791         my $database_filename = "";
6792         my $database_filename_friendly = "";
6793         my $database_filename_length = 0;
6794         my $database_name = "";
6795         my $database_description = "";
6796         my $database_permissions = "";
6797         my $nodescription = 0;
6798         my $noname = 0;
6799         my $data_file = "";
6800         my $table_style = 0;
6801         my $table_style_name = "";
6803         # Begin creating the table for the list of databases.
6805         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
6806         $kiriwrite_presmodule->addlinebreak();
6807         $kiriwrite_presmodule->addlinebreak();
6808         $kiriwrite_presmodule->starttable("", { CellPadding => "5", CellSpacing => "0" });
6809         $kiriwrite_presmodule->startheader();
6810         $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
6811         $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
6812         $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databaseoptions}, { Style => "tablecellheader" });
6813         $kiriwrite_presmodule->endheader();
6815         foreach $data_file (@database_list){
6817                 # Select the database.
6819                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
6821                 # Check if any error occured while selecting the database.
6823                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6825                         # The database does not exist, so process the next
6826                         # database.
6828                         next;
6830                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6832                         # The database has invalid permissions settings, so
6833                         # add the database to the list of databases with
6834                         # invalid permissions set and process the next
6835                         # database.
6837                         push(@permissions_list, $data_file);
6838                         next;
6840                 }
6842                 # Get information about the database.
6844                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6846                 # Check if any error occured while getting information from the
6847                 # database.
6849                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6851                         # A database error has occured, add the database and specific
6852                         # error message to the list of databases with errors and
6853                         # process the next database.
6855                         push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
6856                         next;
6858                 }
6860                 $database_name          = $database_info{"DatabaseName"};
6861                 $database_description   = $database_info{"Description"};
6863                 # Check the style to be used with.
6865                 if ($table_style eq 0){
6867                         # Use the first style and set the style value
6868                         # to use the next style, the next time the
6869                         # if statement is checked.
6871                         $table_style_name = "tablecell1";
6872                         $table_style = 1;
6873                 } else {
6875                         # Use the second style and set the style
6876                         # value to use the first style, the next
6877                         # time if statement is checked.
6879                         $table_style_name = "tablecell2";
6880                         $table_style = 0;
6881                 }
6883                 # Create a friendly name for the database.
6885                 $database_filename_friendly = $data_file;
6887                 # Append the database information to the table.
6889                 $kiriwrite_presmodule->startrow();
6890                 $kiriwrite_presmodule->addcell($table_style_name);
6892                 if (!$database_name){
6893                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
6894                 } else {
6895                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_filename_friendly, { Text => $database_name });
6896                 }
6898                 $kiriwrite_presmodule->endcell();
6899                 $kiriwrite_presmodule->addcell($table_style_name);
6901                 if (!$database_description){
6902                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
6903                 } else {
6904                         $kiriwrite_presmodule->addtext($database_description);
6905                 }
6907                 $kiriwrite_presmodule->endcell();
6908                 $kiriwrite_presmodule->addcell($table_style_name);
6909                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=edit&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{edit} });
6910                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=compile&type=single&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{compile} });
6911                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=delete&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{delete} });
6912                 $kiriwrite_presmodule->endrow();
6914                 $database_count++;
6915                 $nodescription = 0;
6916                 $noname = 0;
6918         }
6920         $kiriwrite_presmodule->endtable();
6922         # Disconnect from the database server.
6924         $kiriwrite_dbmodule->disconnect();
6926         # Check if there are no valid databases are if there is no
6927         # valid databases then write a message saying that no
6928         # valid databases are available.
6930         if ($database_count eq 0){
6932                 $kiriwrite_presmodule->clear();
6933                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
6934                 $kiriwrite_presmodule->addlinebreak();
6935                 $kiriwrite_presmodule->addlinebreak();
6936                 $kiriwrite_presmodule->startbox("errorbox");
6937                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{nodatabasesavailable});
6938                 $kiriwrite_presmodule->endbox();
6940         }
6942         # Check if any databases with problems have appeared and if they
6943         # have, print out a message saying which databases have problems.
6945         if (@permissions_list){
6947                 $kiriwrite_presmodule->addlinebreak();
6948                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
6949                 $kiriwrite_presmodule->addlinebreak();
6950                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
6951                 $kiriwrite_presmodule->addlinebreak();
6953                 foreach $data_file (@permissions_list){
6954                         $kiriwrite_presmodule->addlinebreak();
6955                         $kiriwrite_presmodule->addtext($data_file);
6956                 }
6958                 $kiriwrite_presmodule->addlinebreak();
6960         }
6962         if (@error_list){
6964                 $kiriwrite_presmodule->addlinebreak();
6965                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
6966                 $kiriwrite_presmodule->addlinebreak();
6967                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
6968                 $kiriwrite_presmodule->addlinebreak();
6970                 foreach $data_file (@error_list){
6971                         $kiriwrite_presmodule->addlinebreak();
6972                         $kiriwrite_presmodule->addtext($data_file);
6973                 }
6975                 $kiriwrite_presmodule->addlinebreak();
6977         }
6979         return $kiriwrite_presmodule->grab();   # Return to the main part of the script with the processed information.
6984 sub kiriwrite_filter_list{
6985 #################################################################################
6986 # kiriwrite_filter_list: Lists the filters that will be used when compiling a   #
6987 # webpage.                                                                      #
6988 #                                                                               #
6989 # Usage:                                                                        #
6990 #                                                                               #
6991 # kiriwrite_filter_list();                                                      #
6992 #################################################################################
6994         my $filtersdb_notexist = 0;
6996         # Connect to the database server.
6998         $kiriwrite_dbmodule->connect();
7000         # Check if any errors occured while connecting to the database server.
7002         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7004                 # A database connection error has occured so return
7005                 # an error.
7007                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7009         }
7011         # Connect to the filter database.
7013         $kiriwrite_dbmodule->connectfilter();
7015         # Check if any error has occured while connecting to the filter
7016         # database.
7018         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7020                 # The filter database does not exist.
7022                 $filtersdb_notexist = 1;
7024         } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7026                 # The filter database has invalid permissions set so return
7027                 # an error.
7029                 kiriwrite_error("filtersdbpermissions");
7031         }
7033         # Define some variables required for processing the filters list.
7035         my %filter_list;
7036         my %filter_info;
7037         my @database_filters;
7038         my $blankfindfilter = 0;
7039         my $filterswarning = "";
7040         my $filter;
7041         my $filter_count = 0;
7042         my $filter_style = 0;
7043         my $filter_style_name = "";
7045         tie(%filter_list, 'Tie::IxHash');
7047         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{viewfilters}, { Style => "pageheader" });
7048         $kiriwrite_presmodule->addlinebreak();
7049         $kiriwrite_presmodule->addlinebreak();
7051         # If the filters database exists then get the list of filters,
7052         # otherwise write a message saying that the filters database
7053         # does not exist and will be created when a filter is added.
7055         if ($filtersdb_notexist eq 0){
7057                 # Get the list of available filters.
7059                 @database_filters       = $kiriwrite_dbmodule->getfilterlist();
7061                 # Check if any errors occured while getting the list of filters.
7063                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7065                         # A database error has occured with the filters database.
7067                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7069                 }
7071                 # Process each filter getting the priority, find setting and
7072                 # replace setting.
7074                 foreach $filter (@database_filters){
7076                         # Get the information about the filter.
7078                         %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
7080                         # Check if any errors occured while getting the filter information.
7082                         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7084                                 # A database error occured while using the filter database.
7086                                 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7088                         } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7090                                 # The filter does not exist so process the next filter.
7092                                 next;
7094                         }
7096                         # Check if the find filter is blank.
7098                         if (!$filter_info{"FilterFind"}){
7100                                 # The find filter is blank, so set the value to write a warning
7101                                 # message saying that a find filter given is blank.
7103                                 $blankfindfilter = 1;
7105                         }
7107                         $filter_list{$filter_count}{ID}         = $filter_info{"FilterID"};
7108                         $filter_list{$filter_count}{Priority}   = $filter_info{"FilterPriority"};
7109                         $filter_list{$filter_count}{Find}       = $filter_info{"FilterFind"};
7110                         $filter_list{$filter_count}{Replace}    = $filter_info{"FilterReplace"};
7111                         $filter_list{$filter_count}{Notes}      = $filter_info{"FilterNotes"};
7113                         $filter_count++;
7115                 }
7117                 # Check if there are filters in the filters database and
7118                 # write a message if there isn't.
7120                 if ($filter_count eq 0){
7122                         # There are no filters in the filters database.
7124                         $filterswarning = $kiriwrite_lang->{filter}->{nofiltersavailable};
7126                 }
7128         }
7130         # Check if the database wasn't found and if it
7131         # wasn't then write a message saying that the
7132         # database will be created when a filter is
7133         # added.
7135         if ($filtersdb_notexist eq 1){
7137                 # The filters database doesn't exist so write
7138                 # a message.
7140                 $filterswarning = $kiriwrite_lang->{filter}->{filterdatabasedoesnotexist};
7143         }
7145         # Check if there is a warning message and if
7146         # there is then write that warning message
7147         # else write the list of filters.
7149         if ($filterswarning){
7151                 $kiriwrite_presmodule->startbox("errorbox");
7152                 $kiriwrite_presmodule->addtext($filterswarning);
7153                 $kiriwrite_presmodule->endbox();
7155         } else {
7157                 # The filters database exists so write out the
7158                 # list of filters.
7160                 if ($blankfindfilter eq 1){
7162                         $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{filter}->{warningtitle});
7163                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{blankfindfilters});
7164                         $kiriwrite_presmodule->addtext();
7165                         $kiriwrite_presmodule->addlinebreak();
7166                         $kiriwrite_presmodule->addlinebreak();
7168                 }
7170                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7172                 $kiriwrite_presmodule->startheader();
7173                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{priority}, { Style => "tablecellheader" });
7174                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{findsetting}, { Style => "tablecellheader" });
7175                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{replacesetting}, { Style => "tablecellheader" });
7176                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
7177                 $kiriwrite_presmodule->endheader();
7179                 foreach $filter (keys %filter_list){
7181                         # Check which style should be used.
7183                         if ($filter_style eq 0){
7185                                 $filter_style_name = "tablecell1";
7186                                 $filter_style = 1;
7188                         } else {
7190                                 $filter_style_name = "tablecell2";
7191                                 $filter_style = 0;
7193                         }
7195                         $kiriwrite_presmodule->startrow();
7196                         $kiriwrite_presmodule->addcell($filter_style_name);
7197                         $kiriwrite_presmodule->addtext($filter_list{$filter}{Priority});
7198                         $kiriwrite_presmodule->endcell();
7199                         $kiriwrite_presmodule->addcell($filter_style_name);
7201                         # Check if the find filter is blank.
7203                         if (!$filter_list{$filter}{Find}){
7205                                 # The find filter is blank.
7207                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{filter}->{blankfindsetting});
7209                         } else {
7211                                 # The find filter is not blank.
7213                                 $kiriwrite_presmodule->addtext($filter_list{$filter}{Find});
7215                         }
7217                         $kiriwrite_presmodule->endcell();
7218                         $kiriwrite_presmodule->addcell($filter_style_name);
7220                         # Check if the replace filter is blank.
7222                         if (!$filter_list{$filter}{Replace}){
7224                                 # The replace filter is blank.
7226                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{filter}->{blankreplacesetting});
7228                         } else {
7230                                 # The replace filter is not blank.
7232                                 $kiriwrite_presmodule->addtext($filter_list{$filter}{Replace});
7234                         }
7236                         $kiriwrite_presmodule->endcell();
7237                         $kiriwrite_presmodule->addcell($filter_style_name);
7238                         $kiriwrite_presmodule->addlink("?mode=filter&action=edit&filter=" . $filter_list{$filter}{ID}, { Text => $kiriwrite_lang->{options}->{edit} });
7239                         $kiriwrite_presmodule->addlink("?mode=filter&action=delete&filter=" . $filter_list{$filter}{ID}, { Text => $kiriwrite_lang->{options}->{delete} });
7240                         $kiriwrite_presmodule->endcell();
7241                         $kiriwrite_presmodule->endrow();
7243                 }
7245                 $kiriwrite_presmodule->endtable();
7247         }
7249         # Disconnect from the filter database.
7251         $kiriwrite_dbmodule->disconnectfilter();
7253         # Disconnect from the database server.
7255         $kiriwrite_dbmodule->disconnect();
7257         return $kiriwrite_presmodule->grab();
7261 sub kiriwrite_filter_add{
7262 #################################################################################
7263 # kiriwrite_filter_add: Adds a filter to the filter list.                       #
7264 #                                                                               #
7265 # Usage:                                                                        #
7266 #                                                                               #
7267 # kiriwrite_filter_add(filterfind, filterreplace, filterpriority,               #
7268 #                       filternotes, [confirm]);                                #
7269 #                                                                               #
7270 # filterfind            Specifies the new word(s) to find.                      #
7271 # filterreplace         Specifies the new word(s) to replace.                   #
7272 # filterpriority        Specifies the new priority to use.                      #
7273 # filternotes           Specifies the new notes to use.                         #
7274 # confirm               Confirms the action to add a filter.                    #
7275 #################################################################################
7277         # Get the values that have been passed to the subroutine.
7279         my ($filter_new_find, $filter_new_replace, $filter_new_priority, $filter_new_notes, $confirm) = @_;
7281         # Check the confirm value to make sure it is no more than
7282         # one character long.
7284         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
7286         if (!$confirm){
7288                 # The confirm value is undefined, so set the
7289                 # value of the confirm integer to '0'.
7291                 $confirm = 0;
7293         }
7295         if ($confirm eq 1){
7297                 # The confirm integer is '1', so add the word
7298                 # to the filter list.
7300                 # First, check the variables recieved are UTF8
7301                 # copliant.
7303                 kiriwrite_variablecheck($filter_new_find, "utf8", 0, 0);
7304                 kiriwrite_variablecheck($filter_new_replace, "utf8", 0, 0);
7305                 kiriwrite_variablecheck($filter_new_priority, "utf8", 0, 0);
7306                 kiriwrite_variablecheck($filter_new_notes, "utf8", 0, 0);
7308                 # Convert the UTF8 values so that the length can
7309                 # checked properly.
7311                 $filter_new_find        = kiriwrite_utf8convert($filter_new_find);
7312                 $filter_new_replace     = kiriwrite_utf8convert($filter_new_replace);
7313                 $filter_new_priority    = kiriwrite_utf8convert($filter_new_priority);
7314                 $filter_new_notes       = kiriwrite_utf8convert($filter_new_notes);
7316                 # Check if the find filter is blank and return an error
7317                 # if it is.
7319                 if (!$filter_new_find){
7321                         # The find filter given is blank so return an
7322                         # error.
7324                         kiriwrite_error("blankfindfilter");
7326                 }
7328                 if (!$filter_new_priority){
7330                         # The filter priority is blank so set it
7331                         # to 1.
7333                         $filter_new_priority = 1;
7335                 }
7337                 # Check the length and contents of the values given
7338                 # to make sure they are valid.
7340                 my $filterfind_maxlength_check          = kiriwrite_variablecheck($filter_new_find, "maxlength", 1024, 1);
7341                 my $filterreplace_maxlength_check       = kiriwrite_variablecheck($filter_new_replace, "maxlength", 1024, 1);
7342                 my $filterpriority_maxlength_check      = kiriwrite_variablecheck($filter_new_priority, "maxlength", 5, 1);
7343                 my $filterpriority_numbers_check        = kiriwrite_variablecheck($filter_new_priority, "numbers", 0, 1);
7345                 # Check if the result of the tests to see if they
7346                 # are valid.
7348                 if ($filterfind_maxlength_check eq 1){
7350                         # The find filter is too long, so return
7351                         # an error.
7353                         kiriwrite_error("findfiltertoolong");
7355                 }
7357                 if ($filterreplace_maxlength_check eq 1){
7359                         # The replace filter is too long, so
7360                         # return an error.
7362                         kiriwrite_error("replacefiltertoolong");
7364                 }
7366                 if ($filterpriority_maxlength_check eq 1){
7368                         # The length of the filter priority
7369                         # given is too long, so return an
7370                         # error.
7372                         kiriwrite_error("filterprioritytoolong");
7374                 }
7376                 if ($filterpriority_numbers_check eq 1){
7378                         # The priority of the filter given
7379                         # contains characters other than
7380                         # numbers.
7382                         kiriwrite_error("filterpriorityinvalidchars");
7384                 }
7386                 # Check if the filter priority is less than 1
7387                 # and more than 10000 and return an error
7388                 # if it is.
7390                 if ($filter_new_priority < 1 || $filter_new_priority > 50000){
7392                         # The filter priority is less than 1 and
7393                         # more than 10000, so return an error.
7395                         kiriwrite_error("filterpriorityinvalid");
7397                 }
7399                 # Connect to the database server.
7401                 $kiriwrite_dbmodule->connect();
7403                 # Check if any errors occured while connecting to the database server.
7405                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7407                         # A database connection error has occured so return
7408                         # an error.
7410                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7412                 }
7414                 # Connect to the filters database.
7416                 $kiriwrite_dbmodule->connectfilter(1);
7418                 # Check if any error has occured while connecting to the filter
7419                 # database.
7421                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7423                         # The filter database does not exist.
7425                         kiriwrite_error("filtersdbmissing");
7427                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7429                         # The filter database has invalid permissions set so return
7430                         # an error.
7432                         kiriwrite_error("filtersdbpermissions");
7434                 }
7436                 # Add the filter to the filter database.
7438                 $kiriwrite_dbmodule->addfilter({ FindFilter => $filter_new_find, ReplaceFilter => $filter_new_replace, Priority => $filter_new_priority, Notes => $filter_new_notes});
7440                 # Check if any errors have occured while adding the filter.
7442                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7444                         # The filter database has invalid permissions set so return
7445                         # an error.
7447                         kiriwrite_error("filtersdbpermissions");
7449                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseUncreatable"){
7451                         # The filter database is uncreatable so return an error.
7453                         kiriwrite_error("filterdatabase");
7455                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7457                         # A database error with the filter database has occured so return
7458                         # an error with the extended error information.
7460                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7462                 }
7464                 # Disconnect from the filter database.
7466                 $kiriwrite_dbmodule->disconnectfilter();
7468                 # Disconnect from the database server.
7470                 $kiriwrite_dbmodule->disconnect();
7472                 # Write out a message saying that the filter was added to the
7473                 # filters database.
7475                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{filteradded}, { Style => "pageheader" });
7476                 $kiriwrite_presmodule->addlinebreak();
7477                 $kiriwrite_presmodule->addlinebreak();
7478                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{filteraddedmessage});
7479                 $kiriwrite_presmodule->addlinebreak();
7480                 $kiriwrite_presmodule->addlinebreak();
7481                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7483                 return $kiriwrite_presmodule->grab();
7485         } elsif ($confirm ne 0) {
7487                 # The confirm integer is another value (which
7488                 # it shouldn't be) so return an error.
7490                 kiriwrite_error("invalidvalue");
7492         }
7494         # The confirm integer was blank so print out a form
7495         # for adding a new filter.
7497         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{addfilter}, { Style => "pageheader" });
7498         $kiriwrite_presmodule->addlinebreak();
7499         $kiriwrite_presmodule->addlinebreak();
7500         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
7501         $kiriwrite_presmodule->addhiddendata("mode", "filter");
7502         $kiriwrite_presmodule->addhiddendata("action", "add");
7503         $kiriwrite_presmodule->addhiddendata("confirm", 1);
7504         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7506         $kiriwrite_presmodule->startheader();
7507         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
7508         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
7509         $kiriwrite_presmodule->endheader();
7511         $kiriwrite_presmodule->startrow();
7512         $kiriwrite_presmodule->addcell("tablecell1");
7513         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
7514         $kiriwrite_presmodule->endcell();
7515         $kiriwrite_presmodule->addcell("tablecell2");
7516         $kiriwrite_presmodule->addinputbox("findword", { Size => 64, MaxLength => 1024 });
7517         $kiriwrite_presmodule->endcell();
7518         $kiriwrite_presmodule->endrow();
7520         $kiriwrite_presmodule->startrow();
7521         $kiriwrite_presmodule->addcell("tablecell1");
7522         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{replacefilter});
7523         $kiriwrite_presmodule->endcell();
7524         $kiriwrite_presmodule->addcell("tablecell2");
7525         $kiriwrite_presmodule->addinputbox("replaceword", { Size => 64, MaxLength => 1024 });
7526         $kiriwrite_presmodule->endcell();
7527         $kiriwrite_presmodule->endrow();
7529         $kiriwrite_presmodule->startrow();
7530         $kiriwrite_presmodule->addcell("tablecell1");
7531         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
7532         $kiriwrite_presmodule->endcell();
7533         $kiriwrite_presmodule->addcell("tablecell2");
7534         $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5 });
7535         $kiriwrite_presmodule->startlist();
7536         $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
7537         $kiriwrite_presmodule->endlist();
7538         $kiriwrite_presmodule->endcell();
7539         $kiriwrite_presmodule->endrow();
7541         $kiriwrite_presmodule->startrow();
7542         $kiriwrite_presmodule->addcell("tablecell1");
7543         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
7544         $kiriwrite_presmodule->endcell();
7545         $kiriwrite_presmodule->addcell("tablecell2");
7546         $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10 });
7547         $kiriwrite_presmodule->endcell();
7548         $kiriwrite_presmodule->endrow();
7550         $kiriwrite_presmodule->endtable();
7552         $kiriwrite_presmodule->addlinebreak();
7553         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{addfilterbutton});
7554         $kiriwrite_presmodule->addtext(" | ");
7555         $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
7556         $kiriwrite_presmodule->addtext(" | ");
7557         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7559         $kiriwrite_presmodule->endform();
7561         return $kiriwrite_presmodule->grab();
7565 sub kiriwrite_filter_edit{
7566 #################################################################################
7567 # kiriwrite_filter_edit: Edits a filter from the filter list.                   #
7568 #                                                                               #
7569 # Usage:                                                                        #
7570 #                                                                               #
7571 # kiriwrite_filter_edit(filternumber, newfilterfind, newfilterreplace,          #
7572 #                       newfilterpriority, newfilternotes, confirm);            #
7573 #                                                                               #
7574 # filterid              Specifies the filter number (line number) in the        #
7575 #                       filters database.                                       #
7576 # newfilterfind         Specifies the new word to find.                         #
7577 # newfilterreplace      Specifies the new word to replace.                      #
7578 # newfilterpriority     Specifies the new filter priority.                      #
7579 # newfilternotes        Specifies the new filter notes.                         #
7580 # confirm               Confirms the action to edit a filter.                   #
7581 #################################################################################
7583         # Get the values that have been passed to the subroutine.
7585         my ($filter_id, $filter_new_find, $filter_new_replace, $filter_new_priority, $filter_new_notes, $confirm) = @_;
7587         # Check the confirm value to make sure it is no more than
7588         # one character long.
7590         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
7592         # Check if the confirm value is blank and if it is
7593         # srt the confirm value to 0.
7595         if (!$confirm){
7597                 # The confirm value does not have any value
7598                 # set so set it to 0.
7600                 $confirm = 0;
7602         }
7604         # Check if the filter identification number is blank,
7605         # contains characters other than numbers and is more
7606         # than seven characters long.
7608         if (!$filter_id){
7610                 # The filter identification number is blank,
7611                 # so return an error.
7613                 kiriwrite_error("filteridblank");
7615         }
7617         my $filter_id_numbers_check     = kiriwrite_variablecheck($filter_id, "numbers", 0, 1);
7619         if ($filter_id_numbers_check eq 1){
7621                 # The filter identification number contains
7622                 # characters other than numbers, so return
7623                 # an error.
7625                 kiriwrite_error("filteridinvalid");
7627         }
7629         my $filter_id_maxlength_check   = kiriwrite_variablecheck($filter_id, "maxlength", 7, 1);
7631         if ($filter_id_maxlength_check eq 1){
7633                 # The filter identification number given
7634                 # is more than seven characters long, so
7635                 # return an error.
7637                 kiriwrite_error("filteridtoolong");
7639         }
7641         my $filter_priority;
7642         my $filter_find;
7643         my $filter_replace;
7644         my $filter_notes;
7645  
7646         # Check if the action to edit a filter has been
7647         # confirmed.
7649         if ($confirm eq 1){
7651                 # The action to edit a filter has been confirmed so
7652                 # edit the selected filter.
7654                 # First, check the variables recieved are UTF8
7655                 # copliant.
7657                 kiriwrite_variablecheck($filter_new_find, "utf8", 0, 0);
7658                 kiriwrite_variablecheck($filter_new_replace, "utf8", 0, 0);
7659                 kiriwrite_variablecheck($filter_new_priority, "utf8", 0, 0);
7660                 kiriwrite_variablecheck($filter_new_notes, "utf8", 0, 0);
7662                 # Convert the UTF8 values so that the length can
7663                 # checked properly.
7665                 $filter_find            = kiriwrite_utf8convert($filter_new_find);
7666                 $filter_replace         = kiriwrite_utf8convert($filter_new_replace);
7667                 $filter_priority        = kiriwrite_utf8convert($filter_new_priority);
7668                 $filter_notes           = kiriwrite_utf8convert($filter_new_notes);
7670                 # Check if the find filter is blank and return an error
7671                 # if it is.
7673                 if (!$filter_new_find){
7675                         # The find filter given is blank so return an
7676                         # error.
7678                         kiriwrite_error("blankfindfilter");
7680                 }
7682                 if (!$filter_new_priority){
7684                         # The filter priority is blank so set it
7685                         # to 1.
7687                         $filter_new_priority = 1;
7689                 }
7691                 # Check the length and contents of the values given
7692                 # to make sure they are valid.
7694                 my $filterfind_maxlength_check          = kiriwrite_variablecheck($filter_new_find, "maxlength", 1024, 1);
7695                 my $filterreplace_maxlength_check       = kiriwrite_variablecheck($filter_new_replace, "maxlength", 1024, 1);
7696                 my $filterpriority_maxlength_check      = kiriwrite_variablecheck($filter_new_priority, "maxlength", 5, 1);
7697                 my $filterpriority_numbers_check        = kiriwrite_variablecheck($filter_new_priority, "numbers", 0, 1);
7699                 # Check if the result of the tests to see if they
7700                 # are valid.
7702                 if ($filterfind_maxlength_check eq 1){
7704                         # The find filter is too long, so return
7705                         # an error.
7707                         kiriwrite_error("findfiltertoolong");
7709                 }
7711                 if ($filterreplace_maxlength_check eq 1){
7713                         # The replace filter is too long, so
7714                         # return an error.
7716                         kiriwrite_error("replacefiltertoolong");
7718                 }
7720                 if ($filterpriority_maxlength_check eq 1){
7722                         # The length of the filter priority
7723                         # given is too long, so return an
7724                         # error.
7726                         kiriwrite_error("filterprioritytoolong");
7728                 }
7730                 if ($filterpriority_numbers_check eq 1){
7732                         # The priority of the filter given
7733                         # contains characters other than
7734                         # numbers.
7736                         kiriwrite_error("filterpriorityinvalidchars");
7738                 }
7740                 # Check if the filter priority is less than 1
7741                 # and more than 10000 and return an error
7742                 # if it is.
7744                 if ($filter_new_priority < 1 || $filter_new_priority > 50000){
7746                         # The filter priority is less than 1 and
7747                         # more than 10000, so return an error.
7749                         kiriwrite_error("filterpriorityinvalid");
7751                 }
7753                 # Connect to the database server.
7755                 $kiriwrite_dbmodule->connect();
7757                 # Check if any errors occured while connecting to the database server.
7759                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7761                         # A database connection error has occured so return
7762                         # an error.
7764                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7766                 }
7768                 # Connect to the filters database.
7770                 $kiriwrite_dbmodule->connectfilter();
7772                 # Check if any error has occured while connecting to the filter
7773                 # database.
7775                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7777                         # The filter database does not exist.
7779                         kiriwrite_error("filtersdbmissing");
7781                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7783                         # The filter database has invalid permissions set so return
7784                         # an error.
7786                         kiriwrite_error("filtersdbpermissions");
7788                 }
7790                 # Edit the selected filter in the filter database.
7792                 $kiriwrite_dbmodule->editfilter({ FilterID => $filter_id, NewFindFilter => $filter_new_find, NewReplaceFilter => $filter_new_replace, NewFilterPriority => $filter_new_priority, NewFilterNotes => $filter_new_notes });
7794                 # Check if any errors occured while editing the filter.
7796                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7798                         # The filter database has invalid permissions set so return
7799                         # an error.
7801                         kiriwrite_error("filtersdbpermissions");
7803                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7805                         # A database error has occured while using the filters database
7806                         # so return an error.
7808                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7810                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7812                         # The specified filter does not exist so return an error.
7814                         kiriwrite_error("filterdoesnotexist");
7816                 }
7818                 # Disconnect from the filter database.
7820                 $kiriwrite_dbmodule->disconnectfilter();
7822                 # Disconnect from the database server.
7824                 $kiriwrite_dbmodule->disconnect();
7826                 # Write a message saying that the filter was edited.
7828                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfilter}, { Style => "pageheader" });
7829                 $kiriwrite_presmodule->addlinebreak();
7830                 $kiriwrite_presmodule->addlinebreak();
7831                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfiltermessage});
7832                 $kiriwrite_presmodule->addlinebreak();
7833                 $kiriwrite_presmodule->addlinebreak();
7834                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist}});
7836                 return $kiriwrite_presmodule->grab();
7838         } elsif ($confirm eq 0){
7840                 # The action to edit a filter has not been confirmed
7841                 # so write a form for editing the filter with.
7843                 # Connect to the database server.
7845                 $kiriwrite_dbmodule->connect();
7847                 # Check if any errors occured while connecting to the database server.
7849                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7851                         # A database connection error has occured so return
7852                         # an error.
7854                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7856                 }
7858                 # Connect to the database server.
7860                 $kiriwrite_dbmodule->connect();
7862                 # Check if any errors occured while connecting to the database server.
7864                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7866                         # A database connection error has occured so return
7867                         # an error.
7869                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7871                 }
7873                 # Connect to the filters database.
7875                 $kiriwrite_dbmodule->connectfilter();
7877                 # Check if any error has occured while connecting to the filter
7878                 # database.
7880                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7882                         # The filter database does not exist.
7884                         kiriwrite_error("filtersdbmissing");
7886                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7888                         # The filter database has invalid permissions set so return
7889                         # an error.
7891                         kiriwrite_error("filtersdbpermissions");
7893                 }
7895                 # Get information about the filter.
7897                 my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
7899                 # Check if any errors occured while getting information about the filter.
7901                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7903                         # A database error occured while using the filter database so
7904                         # return an error.
7906                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7908                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7910                         # The filter does not exist so return an error.
7912                         kiriwrite_error("filterdoesnotexist");
7914                 }
7916                 # Get the required information.
7918                 $filter_priority        = $filter_info{"FilterPriority"};
7919                 $filter_find            = $filter_info{"FilterFind"};
7920                 $filter_replace         = $filter_info{"FilterReplace"};
7921                 $filter_notes           = $filter_info{"FilterNotes"};
7923                 # Disconnect from the filter database.
7925                 $kiriwrite_dbmodule->disconnectfilter();
7927                 # Disconnect from the database server.
7929                 $kiriwrite_dbmodule->disconnect();
7931                 # Write out the form.
7933                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editfilter}, { Style => "pageheader" });
7934                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
7935                 $kiriwrite_presmodule->addhiddendata("mode", "filter");
7936                 $kiriwrite_presmodule->addhiddendata("action", "edit");
7937                 $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
7938                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
7940                 $kiriwrite_presmodule->addlinebreak();
7941                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7943                 $kiriwrite_presmodule->startheader();
7944                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
7945                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
7946                 $kiriwrite_presmodule->endheader();
7948                 $kiriwrite_presmodule->startrow();
7949                 $kiriwrite_presmodule->addcell("tablecell1");
7950                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
7951                 $kiriwrite_presmodule->endcell();
7952                 $kiriwrite_presmodule->addcell("tablecell2");
7953                 $kiriwrite_presmodule->addinputbox("filterfind", { Size => 64, MaxLength => 1024, Value => $filter_find });
7954                 $kiriwrite_presmodule->endcell();
7955                 $kiriwrite_presmodule->endrow();
7957                 $kiriwrite_presmodule->startrow();
7958                 $kiriwrite_presmodule->addcell("tablecell1");
7959                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{replacefilter});
7960                 $kiriwrite_presmodule->endcell();
7961                 $kiriwrite_presmodule->addcell("tablecell2");
7962                 $kiriwrite_presmodule->addinputbox("filterreplace", { Size => 64, MaxLength => 1024, Value => $filter_replace });
7963                 $kiriwrite_presmodule->endcell();
7964                 $kiriwrite_presmodule->endrow();
7966                 $kiriwrite_presmodule->startrow();
7967                 $kiriwrite_presmodule->addcell("tablecell1");
7968                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
7969                 $kiriwrite_presmodule->endcell();
7970                 $kiriwrite_presmodule->addcell("tablecell2");
7971                 $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5, Value => $filter_priority });
7972                 $kiriwrite_presmodule->startlist();
7973                 $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
7974                 $kiriwrite_presmodule->endlist();
7975                 $kiriwrite_presmodule->endcell();
7976                 $kiriwrite_presmodule->endrow();
7978                 $kiriwrite_presmodule->startrow();
7979                 $kiriwrite_presmodule->addcell("tablecell1");
7980                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
7981                 $kiriwrite_presmodule->endcell();
7982                 $kiriwrite_presmodule->addcell("tablecell2");
7983                 $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10});
7984                 $kiriwrite_presmodule->endcell();
7985                 $kiriwrite_presmodule->endrow();
7987                 $kiriwrite_presmodule->endtable();
7989                 $kiriwrite_presmodule->addlinebreak();
7990                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{editfilterbutton});
7991                 $kiriwrite_presmodule->addtext(" | ");
7992                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
7993                 $kiriwrite_presmodule->addtext(" | ");
7994                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7996                 return $kiriwrite_presmodule->grab(); 
7998         } else {
8000                 # A confirm value other than 0 or 1 has been
8001                 # specified, so return an error.
8003                 kiriwrite_error("invalidvalue");
8005         }
8009 sub kiriwrite_filter_delete{
8010 #################################################################################
8011 # kiriwrite_filter_delete: Deletes a filter from the filter list.               #
8012 #                                                                               #
8013 # Usage:                                                                        #
8014 #                                                                               #
8015 # kiriwrite_filter_delete(number, confirm);                                     #
8016 #                                                                               #
8017 # number        Specifies the filter line number to delete.                     #
8018 # confirm       Confirms the deletion of the selected filter.                   #
8019 #################################################################################
8021         # Get the values that were passed to this subroutine.
8023         my ($filter_id, $confirm) = @_;
8025         # Check the confirm value to make sure it is no more than
8026         # one character long.
8028         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
8030         # Check if the confirm value is blank and if it is
8031         # srt the confirm value to 0.
8033         if (!$confirm){
8035                 # The confirm value does not have any value
8036                 # set so set it to 0.
8038                 $confirm = 0;
8040         }
8042         # Check if the filter identification number is blank,
8043         # contains characters other than numbers and is more
8044         # than seven characters long.
8046         if (!$filter_id){
8048                 # The filter identification number is blank,
8049                 # so return an error.
8051                 kiriwrite_error("filteridblank");
8053         }
8055         my $filter_id_numbers_check     = kiriwrite_variablecheck($filter_id, "numbers", 0, 1);
8057         if ($filter_id_numbers_check eq 1){
8059                 # The filter identification number contains
8060                 # characters other than numbers, so return
8061                 # an error.
8063                 kiriwrite_error("filteridinvalid");
8065         }
8067         my $filter_id_maxlength_check   = kiriwrite_variablecheck($filter_id, "maxlength", 7, 1);
8069         if ($filter_id_maxlength_check eq 1){
8071                 # The filter identification number given
8072                 # is more than seven characters long, so
8073                 # return an error.
8075                 kiriwrite_error("filteridtoolong");
8077         }
8079         # Define some values for later.
8081         my @database_filter;
8082         my $filter_exists = 0;
8084         # Check if the confirm integer has a value of '1'.
8086         if ($confirm eq 1){
8088                 # The action to delete a filter has been confirmed.
8090                 # Connect to the database server.
8092                 $kiriwrite_dbmodule->connect();
8094                 # Check if any errors occured while connecting to the database server.
8096                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8098                         # A database connection error has occured so return
8099                         # an error.
8101                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8103                 }
8105                 # Connect to the filter database.
8107                 $kiriwrite_dbmodule->connectfilter();
8109                 # Check if any error has occured while connecting to the filter
8110                 # database.
8112                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8114                         # The filter database does not exist.
8116                         kiriwrite_error("filtersdbmissing");
8118                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8120                         # The filter database has invalid permissions set so return
8121                         # an error.
8123                         kiriwrite_error("filtersdbpermissions");
8125                 }
8127                 # Delete the filter from the filter database.
8129                 $kiriwrite_dbmodule->deletefilter({ FilterID => $filter_id });
8131                 # Check if any errors occured while deleting the filter.
8133                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8135                         # A database error has occured while trying to delete a filter so
8136                         # return an error.
8138                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8140                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8142                         # The filter does not exist so return an error.
8143  
8144                         kiriwrite_error("filterdoesnotexist");
8146                 }
8148                 # Disconnect from the filter database.
8150                 $kiriwrite_dbmodule->disconnectfilter();
8152                 # Disconnect from the database server.
8154                 $kiriwrite_dbmodule->disconnect();
8156                 # Write a message saying that the filter was deleted
8157                 # from the filters database.
8159                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfilter}, { Style => "pageheader" });
8160                 $kiriwrite_presmodule->addlinebreak();
8161                 $kiriwrite_presmodule->addlinebreak();
8162                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfiltermessage});
8163                 $kiriwrite_presmodule->addlinebreak();
8164                 $kiriwrite_presmodule->addlinebreak();
8165                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
8167         } elsif ($confirm eq 0) {
8169                 # Connect to the database server.
8171                 $kiriwrite_dbmodule->connect();
8173                 # Check if any errors occured while connecting to the database server.
8175                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8177                         # A database connection error has occured so return
8178                         # an error.
8180                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8182                 }
8184                 # Connect to the filter database.
8186                 $kiriwrite_dbmodule->connectfilter();
8188                 # Check if any error has occured while connecting to the filter
8189                 # database.
8191                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8193                         # The filter database does not exist.
8195                         kiriwrite_error("filtersdbmissing");
8197                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8199                         # The filter database has invalid permissions set so return
8200                         # an error.
8202                         kiriwrite_error("filtersdbpermissions");
8204                 }
8206                 # Get information about the filter (to check if it exists).
8208                 my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
8210                 # Check if any errors occured while getting information about the filter.
8212                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8214                         # A database error occured while using the filter database so
8215                         # return an error.
8217                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8219                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8221                         # The filter does not exist so return an error.
8223                         kiriwrite_error("filterdoesnotexist");
8225                 }
8227                 # Disconnect from the filter database.
8229                 $kiriwrite_dbmodule->disconnectfilter();
8231                 # Disconnect from the database
8233                 # The confirm integer is '0', so continue write out
8234                 # a form asking the user to confirm the deletion
8235                 # pf the filter.
8237                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefilter}, { Style => "pageheader" });
8238                 $kiriwrite_presmodule->addlinebreak();
8239                 $kiriwrite_presmodule->addlinebreak();
8240                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefiltermessage});
8241                 $kiriwrite_presmodule->addlinebreak();
8242                 $kiriwrite_presmodule->addlinebreak();
8243                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
8244                 $kiriwrite_presmodule->addhiddendata("mode", "filter");
8245                 $kiriwrite_presmodule->addhiddendata("action", "delete");
8246                 $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
8247                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
8248                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{deletefilterbutton});
8249                 $kiriwrite_presmodule->addtext(" | ");
8250                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{deletefilterreturn} });
8251                 $kiriwrite_presmodule->endform();
8253         } else {
8255                 kiriwrite_error("invalidvalue");
8257         }
8259         return $kiriwrite_presmodule->grab();
8263 sub kiriwrite_compile_makepages{
8264 #################################################################################
8265 # kiriwrite_compile_makepages: Compile the selected pages and place them in the #
8266 # specified output directory.                                                   #
8267 #                                                                               #
8268 # Usage:                                                                        #
8269 #                                                                               #
8270 # kiriwrite_compile_makepages(type, selectedlist, confirm);                     #
8271 #                                                                               #
8272 # type          Specifies if single or multiple databases are to be compiled.   #
8273 # confirm       Specifies if the action to compile the databases should really  #
8274 #               be done.                                                        #
8275 # selectedlist  Specifies the databases to compile from as an array.            #
8276 #################################################################################
8278         # Get the values that have been passed to the subroutine.
8280         my ($type, $confirm, @selectedlist) = @_;
8282         # Check if the confirm value is more than one
8283         # character long.
8285         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
8287         # Check if the confirm value is blank and if it
8288         # is then set the confirm value to 0.
8290         if (!$confirm){
8292                 # The confirm value is blank, so set the
8293                 # confirm value to 0.
8295                 $confirm = 0;
8297         }
8299         # Check if there are any databases selected
8300         # and return an error if there isn't.
8302         if (!@selectedlist){
8304                 # There are no databases in the array
8305                 # so return an error.
8307                 kiriwrite_error("nodatabaseselected");
8309         }
8311         # Check if the type given is no more than
8312         # 7 characters long.
8314         my $type_maxlength_check = kiriwrite_variablecheck($type, "maxlength", 8, 1);
8316         if ($type_maxlength_check eq 1){
8318                 # The type length given is too long so
8319                 # return an error.
8321                 kiriwrite_error("variabletoolong");
8323         }
8325         # Check if the action to compile the databases
8326         # has been confirmed.
8328         if ($confirm eq 1){
8330                 # The action to compile the datavases has
8331                 # been confirmed.
8333                 # Define some variables for later.
8335                 my %database_info;
8336                 my %filter_info;
8337                 my %template_info;
8338                 my %page_info;
8339                 my %templatefiles;
8340                 my @page_filenames;
8341                 my @databaseinfo;
8342                 my @databasepages;
8343                 my @filterslist;
8344                 my @findfilter;
8345                 my @replacefilter;
8346                 my @templateslist;
8347                 my @pagedirectories;
8348                 my @database_filters;
8349                 my $warning_count               = 0;
8350                 my $error_count                 = 0;
8351                 my $pages_count                 = 0;
8352                 my $filter;
8353                 my $filters_count               = 0;
8354                 my $filters_find_blank_warning  = 0;
8355                 my $filter_find;
8356                 my $filter_replace;
8357                 my $database;
8358                 my $database_name;
8359                 my $page_filename;
8360                 my $page_filename_check;
8361                 my $page_filename_char          = "";
8362                 my $page_filename_directory;
8363                 my $page_filename_length        = 0;
8364                 my $page_filename_seek          = 0;
8365                 my $page_filename_dircount      = 0;
8366                 my $page_filename_exists        = 0;
8367                 my $page_filename_permissions   = 0;
8368                 my $page_directory_name;
8369                 my $page_directory_path;
8370                 my $page_name;
8371                 my $page_description;
8372                 my $page_section;
8373                 my $page_template;
8374                 my $page_content;
8375                 my $page_settings;
8376                 my $page_lastmodified;
8377                 my $page_title;
8378                 my $page_final;
8379                 my $page_autosection;
8380                 my $page_autotitle;
8381                 my $page;
8382                 my $database_filename_check     = 0;
8383                 my $database_maxlength_check    = 0;
8384                 my $output_exists               = 0;
8385                 my $output_permissions          = 0;
8386                 my $filters_exists              = 0;
8387                 my $filters_permissions         = 0;
8388                 my $filters_skip                = 0;
8389                 my $template;
8390                 my $templates_skip              = 0;
8391                 my $information_prefix          = $kiriwrite_lang->{compile}->{informationprefix};
8392                 my $error_prefix                = $kiriwrite_lang->{compile}->{errorprefix};
8393                 my $warning_prefix              = $kiriwrite_lang->{compile}->{warningprefix};
8394                 my $filehandle_page;
8396                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabases}, { Style => "pageheader" });
8397                 $kiriwrite_presmodule->addlinebreak();
8398                 $kiriwrite_presmodule->addlinebreak();
8399                 $kiriwrite_presmodule->startbox("datalist");
8401                 # Check if the output directory exists and has
8402                 # valid permissions set.
8404                 $output_exists          = kiriwrite_fileexists($kiriwrite_config{'directory_data_output'});
8406                 if ($output_exists ne 0){
8408                         # The output directory does not exist so
8409                         # return an error.
8411                         kiriwrite_error("outputdirectorymissing");
8413                 }
8415                 $output_permissions     = kiriwrite_filepermissions($kiriwrite_config{'directory_data_output'}, 1, 1);
8417                 if ($output_permissions ne 0){
8419                         # The output directory has invalid
8420                         # permissions set so return an error.
8422                         kiriwrite_error("outputdirectoryinvalidpermissions");
8424                 }
8426                 # Connect to the database server.
8428                 $kiriwrite_dbmodule->connect();
8430                 # Check if any errors occured while connecting to the database server.
8432                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8434                         # A database connection error has occured so return
8435                         # an error.
8437                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8439                 }
8441                 # Connect to the filter database.
8443                 $kiriwrite_dbmodule->connectfilter();
8445                 # Check if any error has occured while connecting to the filter
8446                 # database.
8448                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8450                         # The filter database does not exist so write a warning message.
8452                         $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{filterdatabasemissing});
8453                         $kiriwrite_presmodule->addlinebreak();
8454                         $filters_skip = 1;
8455                         $warning_count++;
8457                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8459                         # The filter database has invalid permissions set so write a
8460                         # an error message.
8462                         $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{filterdatabasepermissions});
8463                         $kiriwrite_presmodule->addlinebreak();
8464                         $filters_skip = 1;
8465                         $error_count++;
8467                 }
8469                 # Load the filters database (if the filters skip
8470                 # value isn't set to 1).
8472                 if ($filters_skip eq 0){
8474                         # Get the list of available filters.
8476                         @database_filters       = $kiriwrite_dbmodule->getfilterlist();
8478                         # Check if any errors occured while getting the list of filters.
8480                         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8482                                 # A database error has occured with the filters database.
8484                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8485                                 $kiriwrite_presmodule->addlinebreak();
8486                                 $error_count++;
8488                         }
8490                         # Check if the filters skip value is set to 0
8491                         # before executing the query.
8493                         if ($filters_skip eq 0){
8495                                 foreach $filter (@database_filters){
8497                                         # Get the filter information.
8499                                         %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
8501                                         # Check if any errors occured while getting the filter information.
8503                                         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8505                                                 # A database error occured while using the filter database.
8507                                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8508                                                 $kiriwrite_presmodule->addlinebreak();
8509                                                 $error_count++;
8510                                                 next;
8512                                         } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8514                                                 # The filter does not exist so process the next filter.
8516                                                 next;
8518                                         }
8520                                         # Check if the find filter is blank and
8521                                         # if it is then write a warning message.
8523                                         if (!$filter_info{"FilterFind"}){
8525                                                 if ($filters_find_blank_warning ne 1){
8527                                                         $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{findfilterblank});
8528                                                         $kiriwrite_presmodule->addlinebreak();
8529                                                         $filters_find_blank_warning = 1;
8530                                                 }
8531                                                 next;
8533                                         } else {
8535                                                 # Add each find and replace filter.
8537                                                 $findfilter[$filters_count]     = $filter_info{"FilterFind"};
8538                                                 $replacefilter[$filters_count]  = $filter_info{"FilterReplace"};
8540                                         }
8542                                         $filters_count++;
8544                                 }
8546                                 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishfilterdatabase});
8547                                 $kiriwrite_presmodule->addlinebreak();
8549                         }
8551                 }
8553                 # Disconnect from the filter database.
8555                 $kiriwrite_dbmodule->disconnectfilter();
8557                 # Connect to the template database.
8559                 $kiriwrite_dbmodule->connecttemplate();
8561                 # Check if any errors occured while connecting to the template database.
8563                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
8565                         # The template database does not exist so set the template
8566                         # warning message.
8568                         $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{templatedatabasemissing});
8569                         $kiriwrite_presmodule->addlinebreak();
8570                         $templates_skip = 1;
8571                         $warning_count++;
8573                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
8575                         # The template database has invalid permissions set so write
8576                         # the template warning message.
8577  
8578                         $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{templatedatabasepermissions});
8579                         $kiriwrite_presmodule->addlinebreak();
8580                         $templates_skip = 1;
8581                         $error_count++;
8583                 }
8585                 # Check if the template skip value isn't set and if it isn't
8586                 # then get the list of templates.
8588                 if (!$templates_skip){
8590                         @templateslist = $kiriwrite_dbmodule->gettemplatelist();
8592                         # Check if any errors had occured.
8594                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
8596                                 # A database error occured while getting the list
8597                                 # of templates so return a warning message with the 
8598                                 # extended error information.
8600                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8601                                 $templates_skip = 1;
8602                                 $error_count++;
8604                         }
8606                         # Check if the template skip value isn't set and if it isn't
8607                         # then process each template.
8609                         if (!$templates_skip){
8611                                 # Process each template.
8613                                 foreach $template (@templateslist){
8615                                         # Get information about the template.
8617                                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
8619                                         # Check if any error occured while getting the template information.
8621                                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
8623                                                 # A database error has occured, so return an error.
8625                                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8626                                                 $error_count++;
8628                                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
8630                                                 # The template does not exist, so process the next template.
8632                                                 next;
8634                                         }
8636                                         # Place each template file into the hash.
8638                                         $templatefiles{$template_info{"TemplateFilename"}}{template}    = $template_info{"TemplateFilename"};
8639                                         $templatefiles{$template_info{"TemplateFilename"}}{valid}       = 1;
8641                                 }
8643                                 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishtemplatedatabase});
8644                                 $kiriwrite_presmodule->addlinebreak();
8646                         }
8648                 }
8650                 # Disconnect from the template database.
8652                 $kiriwrite_dbmodule->disconnecttemplate();
8654                 # Process each database.
8656                 foreach $database (@selectedlist){
8658                         # Check if the database filename and length
8659                         # are valid.
8661                         $kiriwrite_presmodule->addhorizontalline();
8663                         $database_filename_check        = kiriwrite_variablecheck($database, "page_filename", "", 1);
8664                         $database_maxlength_check       = kiriwrite_variablecheck($database, "maxlength", 32, 1);
8666                         if ($database_filename_check ne 0){
8668                                 # The database filename is invalid, so process
8669                                 # the next database.
8671                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenameinvalidcharacters}, $database));
8672                                 $kiriwrite_presmodule->addlinebreak();
8673                                 $error_count++;
8674                                 next;
8676                         }
8678                         if ($database_maxlength_check ne 0){
8680                                 # The database file is too long, so process the
8681                                 # next database.
8683                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenametoolong}, $database));
8684                                 $kiriwrite_presmodule->addlinebreak();
8685                                 $error_count++;
8686                                 next;
8688                         }
8690                         # Select the database.
8692                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
8694                         # Check if any errors had occured while selecting the database.
8696                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
8698                                 # The database does not exist, so write a warning message.
8700                                 $kiriwrite_presmodule->addtext($warning_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasemissing}, $database));
8701                                 $kiriwrite_presmodule->addlinebreak();
8702                                 $warning_count++;
8703                                 next;
8705                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
8707                                 # The database has invalid permissions set, so write
8708                                 # an error message.
8710                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseinvalidpermissions}, $database));
8711                                 $kiriwrite_presmodule->addlinebreak();
8712                                 $error_count++;
8713                                 next;
8715                         }
8717                         # Get information about the database.
8719                         my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
8721                         # Check if any error occured while getting the database information.
8723                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
8725                                 # A database error has occured so write an error.
8727                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseerror}, $database, $kiriwrite_dbmodule->geterror(1)));
8728                                 $kiriwrite_presmodule->addlinebreak();
8729                                 $error_count++;
8730                                 next;
8732                         };
8734                         # Get the database name.
8736                         $database_name = $database_info{"DatabaseName"};
8738                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compilingpages}, $database_name));
8739                         $kiriwrite_presmodule->addlinebreak();
8741                         # Get the list of pages in the database.
8743                         @databasepages = $kiriwrite_dbmodule->getpagelist();
8745                         # Check if any errors occured while getting the list of pages.
8747                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
8749                                 # A database error has occured so return an error and
8750                                 # also the extended error information.
8752                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasepageerror}, $database, $kiriwrite_dbmodule->geterror(1)));
8753                                 $kiriwrite_presmodule->addlinebreak();
8754                                 $error_count++;
8755                                 next;
8757                         }
8759                         foreach $page (@databasepages) {
8761                                 # Get information about the page.
8763                                 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
8765                                 $page_filename          = $page_info{"PageFilename"};
8766                                 $page_name              = $page_info{"PageName"};
8767                                 $page_description       = $page_info{"PageDescription"};
8768                                 $page_section           = $page_info{"PageSection"};
8769                                 $page_template          = $page_info{"PageTemplate"};
8770                                 $page_content           = $page_info{"PageContent"};
8771                                 $page_settings          = $page_info{"PageSettings"};
8772                                 $page_lastmodified      = $page_info{"PageLastModified"};
8774                                 # Check if the filename is valid.
8776                                 $page_filename_check = kiriwrite_variablecheck($page_filename, "page_filename", 0, 1);
8778                                 if ($page_filename_check ne 0){
8780                                         # The file name is not valid so write a
8781                                         # error and process the next page.
8783                                         $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{invalidpagefilename}, $page_name));
8784                                         $kiriwrite_presmodule->addlinebreak();
8785                                         $error_count++;
8786                                         next;
8788                                 }
8790                                 # Check if the template with the filename does not exist
8791                                 # in the template files hash and write a message and
8792                                 # process the next page.
8794                                 if (!$templatefiles{$page_template}{valid} && $page_template ne "!none" && $templates_skip eq 0){
8796                                         $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatefilemissing}, $page_template, $page_name, $page_filename));
8797                                         $kiriwrite_presmodule->addlinebreak();
8798                                         $error_count++;
8799                                         next;
8801                                         $page_final = $page_content;
8803                                 } elsif ($page_template eq "!none"){
8805                                         $page_final = $page_content;
8807                                 } else {
8809                                         if ($page_content){
8811                                                 $page_final = $templatefiles{$page_template}{template};
8813                                                 if (!$page_final){
8814                                                         $page_final = "";
8815                                                 }
8817                                                 $page_final =~ s/<kiriwrite:pagecontent>/$page_content/g;
8819                                         }
8821                                 }
8823                                 # Create the combined page title (if needed).
8825                                 if ($page_settings eq 0 || $page_settings > 3){
8827                                         # Don't use page name or section name.
8829                                         $page_final =~ s/<kiriwrite:pagetitle>//g;
8831                                 } elsif ($page_settings eq 1){
8833                                         # Use the page name and section name.
8835                                         $page_autotitle = "(" . $page_section . " - " . $page_name . ")";
8836                                         $page_title = $page_section . " - " . $page_name;
8837                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_title/g;
8839                                 } elsif ($page_settings eq 2){
8841                                         # Use the page name only.
8843                                         $page_autotitle = "(" . $page_name . ")";
8844                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_name/g;
8846                                 } elsif ($page_settings eq 3){
8848                                         # Use the section name only.
8850                                         if ($page_section){
8851                                                 $page_autotitle = "(" . $page_section . ")";
8852                                         }
8853                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_section/g;
8855                                 }
8857                                 # Check if the section name is not blank and
8858                                 # place brackets inbetween if it is.
8860                                 if ($page_section){
8862                                         $page_autosection = "(" . $page_section . ")";
8864                                 }
8866                                 # Replace each <kiriwrite> value with the apporiate page
8867                                 # values.
8869                                 $page_final =~ s/<kiriwrite:pagename>/$page_name/g;
8870                                 $page_final =~ s/<kiriwrite:pagedescription>/$page_description/g;
8871                                 $page_final =~ s/<kiriwrite:pagesection>/$page_section/g;
8872                                 $page_final =~ s/<kiriwrite:autosection>/$page_autosection/g;
8873                                 $page_final =~ s/<kiriwrite:autotitle>/$page_autotitle/g;
8875                                 # Process the filters on the page data.
8877                                 if ($filters_skip eq 0){
8879                                         $filters_count = 0;
8881                                         foreach $filter_find (@findfilter){
8883                                                 # Get the replace filter and process each
8884                                                 # filter on the page.
8886                                                 $filter_replace = $replacefilter[$filters_count];
8887                                                 $page_final =~ s/$filter_find/$filter_replace/g;
8888                                                 $filters_count++;
8890                                         }
8892                                 }
8894                                 # Process the page filename and check what directories
8895                                 # need to be created.
8897                                 $page_filename_length = int(length($page_filename));
8899                                 do {
8901                                         $page_filename_char = substr($page_filename, $page_filename_seek, 1);
8903                                         # Check if a forward slash appears and add it to
8904                                         # the list of directories array.
8906                                         if ($page_filename_char eq '/'){
8908                                                 # Append the directory name to the list of
8909                                                 # directories array.
8911                                                 $pagedirectories[$page_filename_dircount] = $page_filename_directory;
8912                                                 $page_filename_directory        = "";
8913                                                 $page_filename_char             = "";
8914                                                 $page_filename_dircount++;
8916                                         } else {
8918                                                 # Append the character to the directory/filename.
8920                                                 $page_filename_directory = $page_filename_directory . $page_filename_char;
8922                                         }
8924                                         $page_filename_seek++;
8926                                 } until ($page_filename_length eq $page_filename_seek);
8928                                 foreach $page_directory_name (@pagedirectories){
8930                                         # Check if the directory name is undefined and if it
8931                                         # is then set it blank.
8933                                         if (!$page_directory_name){
8934                                                 $page_directory_name = "";
8935                                         }
8937                                         if (!$page_directory_path){
8938                                                 $page_directory_path = "";
8939                                         }
8941                                         # Check if the directory exists and create 
8942                                         # the directory if it doesn't exist.
8944                                         $page_directory_path = $page_directory_path . '/' . $page_directory_name;
8946                                         mkdir($kiriwrite_config{"directory_data_output"} . '/' . $page_directory_path);
8948                                 }
8950                                 # Check if the file already exists and if it does then check
8951                                 # the permissions of the file and return an error if the
8952                                 # permissions set are invalid.
8954                                 $page_filename_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"} . '/' . $page_filename);        
8956                                 if ($page_filename_exists eq 0){
8958                                         # The page filename exists, so check if the permissions given are
8959                                         # valid.
8961                                         $page_filename_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"} . '/' . $page_filename, 1, 1);
8963                                         if ($page_filename_permissions eq 1){
8965                                                 # The file has invalid permissions set.
8967                                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pageinvalidpermissions}, $page_filename));
8968                                                 $kiriwrite_presmodule->addlinebreak();
8969                                                 $error_count++;
8971                                                 # Reset certain values.
8973                                                 $page_autotitle = "";
8974                                                 $page_autosection = "";
8975                                                 $page_filename_seek = 0;
8976                                                 $page_filename_dircount = 0;
8978                                                 $page_filename_directory = "";
8979                                                 $page_directory_path = "";
8980                                                 $page_directory_name = "";
8981                                                 @pagedirectories = ();
8982                                                 
8983                                                 next;
8985                                         }
8987                                 }
8989                                 # Reset certain values.
8991                                 $page_autotitle = "";
8992                                 $page_autosection = "";
8993                                 $page_filename_seek = 0;
8994                                 $page_filename_dircount = 0;
8996                                 $page_filename_directory = "";
8997                                 $page_directory_path = "";
8998                                 $page_directory_name = "";
8999                                 @pagedirectories = ();
9001                                 # Write the file to the output directory.
9003                                 ($page_filename) = $page_filename =~ m/^(.*)$/g;
9004                                 ($kiriwrite_config{"directory_data_output"}) = $kiriwrite_config{"directory_data_output"} =~ m/^(.*)$/g;
9005                                 open($filehandle_page, ">:utf8 ",  $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);
9007                                 if (!$page_final){
9009                                         $page_final = "";
9011                                 }
9013                                 binmode $filehandle_page, ':utf8';
9014                                 print $filehandle_page $page_final;
9015                                 close($filehandle_page);
9017                                 # Write a message saying the page has been compiled. Check
9018                                 # to see if the page name is blank and write a message
9019                                 # saying there's no page name.
9021                                 if (!$page_name){
9022                                         $kiriwrite_presmodule->addtext($information_prefix . ' ');
9023                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
9024                                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledpageblankname}, $page_filename));
9025                                 } else {
9026                                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compiledpage}, $page_name, $page_filename));
9027                                 }
9030                                 $kiriwrite_presmodule->addlinebreak();
9031                                 $pages_count++;
9033                         }
9035                         # Write a message saying that the database has
9036                         # been processed.
9038                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefinish}, $database_name));
9039                         $kiriwrite_presmodule->addlinebreak();
9041                 }
9043                 # Disconnect from the database server.
9045                 $kiriwrite_dbmodule->disconnect();
9047                 $kiriwrite_presmodule->addhorizontalline();
9048                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compileresults}, $pages_count, $error_count, $warning_count));
9049                 $kiriwrite_presmodule->endbox();
9050                 $kiriwrite_presmodule->addlinebreak();
9051                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9053                 return $kiriwrite_presmodule->grab();
9055         } elsif ($confirm eq 0){
9057                 # The action to compile the databases has
9058                 # not been confirmed so check what type
9059                 # is being used.
9061                 if ($type eq "single"){
9063                         # The type is a single database selected so
9064                         # process that database.
9066                         # Define some variables for later.
9068                         my %database_info; 
9069                         my $database_filename_check;
9070                         my $database_maxlength_check;
9071                         my $databasefilename;
9072                         my $database_name;
9074                         # Check that the database name and length are
9075                         # valid and return an error if they aren't.
9077                         $databasefilename = $selectedlist[0];
9079                         # Connect to the database server.
9081                         $kiriwrite_dbmodule->connect();
9083                         # Check if any errors occured while connecting to the database server.
9085                         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9087                                 # A database connection error has occured so return
9088                                 # an error.
9090                                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9092                         }
9094                         # Select the database.
9096                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasefilename });
9098                         # Check if any errors had occured while selecting the database.
9100                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9102                                 # The database does not exist, so return an error.
9104                                 kiriwrite_error("databasemissingfile");
9106                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9108                                 # The database has invalid permissions set, so return
9109                                 # an error.
9111                                 kiriwrite_error("databaseinvalidpermissions");
9113                         }
9115                         # Get information about the database.
9117                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9119                         # Check if any error occured while getting the database information.
9121                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9123                                 # A database error has occured so return an error and
9124                                 # also the extended error information.
9126                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
9128                         };
9130                         $database_name = $database_info{"DatabaseName"};
9132                         # Disconnect from the database server.
9134                         $kiriwrite_dbmodule->disconnect();
9136                         # Write out a form asking the user to confirm if the
9137                         # user wants to compile the selected database.
9139                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabase}, { Style => "pageheader" });
9140                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9141                         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9142                         $kiriwrite_presmodule->addhiddendata("action", "compile");
9143                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9144                         $kiriwrite_presmodule->addhiddendata("id[1]", $databasefilename);
9145                         $kiriwrite_presmodule->addhiddendata("name[1]", "on");
9146                         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9147                         $kiriwrite_presmodule->addlinebreak();
9148                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledatabasemessage}, $database_name));
9149                         $kiriwrite_presmodule->addlinebreak();
9150                         $kiriwrite_presmodule->addlinebreak();
9151                         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compiledatabasebutton});
9152                         $kiriwrite_presmodule->addtext(" | ");
9153                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9155                         return $kiriwrite_presmodule->grab();
9157                 } elsif ($type eq "multiple"){
9159                         # The type is multiple databases selected
9160                         # so process each database.
9162                         # Define some variables for later.
9164                         my %database_list;
9165                         my $databasename;
9166                         my $database;
9167                         my $database_filename_check;
9168                         my $database_maxlength_check;
9169                         my $database_count = 0;
9170                         my $database_info_name;
9172                         # Connect to the database server.
9174                         $kiriwrite_dbmodule->connect();
9176                         # Check if any errors occured while connecting to the database server.
9178                         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9180                                 # A database connection error has occured so return
9181                                 # an error.
9183                                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9185                         }
9187                         foreach $databasename (@selectedlist){
9189                                 # Check if the database is in the database
9190                                 # directory and skip it if it isn't.
9191  
9192                                 $database_filename_check        = kiriwrite_variablecheck($databasename, "filename", "", 1);
9193                                 $database_maxlength_check       = kiriwrite_variablecheck($databasename, "maxlength", 32, 1);
9194  
9195                                 if ($database_filename_check ne 0 || $database_maxlength_check ne 0){
9196  
9197                                         # The database filename given is invalid or
9198                                         # the database filename given is too long
9199                                         # so process the next database.
9200  
9201                                         next;
9202  
9203                                 }
9205                                 # Select the database to add the page to.
9207                                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasename });
9209                                 # Check if any errors had occured while selecting the database.
9211                                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9213                                         # The database does not exist, so process the next database.
9215                                         next;
9217                                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9219                                         # The database has invalid permissions set, so process
9220                                         # the next database.
9222                                         next;
9224                                 }
9226                                 # Get information about the database.
9228                                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9230                                 # Check if any error occured while getting the database information.
9232                                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9234                                         # A database error has occured so process the next
9235                                         # database.
9237                                         next;
9239                                 };
9241                                 $database_list{$database_count}{Name}           = $database_info{"DatabaseName"};
9242                                 $database_list{$database_count}{Filename}       = $databasename;
9244                                 $database_count++;
9246                         }
9248                         # Check if any databases are available to be compiled.
9250                         if ($database_count eq 0){
9252                                 # No databases are available to be compiled.
9254                                 kiriwrite_error("nodatabaseselected");
9256                         }
9258                         # Write out the form for compiling the database.
9260                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabases}, { Style => "pageheader" });
9261                         $kiriwrite_presmodule->addlinebreak();
9262                         $kiriwrite_presmodule->addlinebreak();
9263                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9264                         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9265                         $kiriwrite_presmodule->addhiddendata("action", "compile");
9266                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9267                         $kiriwrite_presmodule->addhiddendata("count", $database_count);
9268                         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9269                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabasesmessage});
9270                         $kiriwrite_presmodule->addlinebreak();
9271                         $kiriwrite_presmodule->addlinebreak();
9272                         $kiriwrite_presmodule->startbox("datalist");
9274                         $database_count = 0;
9276                         # write out the list of databases to compile.
9278                         foreach $database (keys %database_list){
9280                                 $database_count++;
9282                                 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9283                                 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9285                                 # Check if the database name is undefined and if it is
9286                                 # then write a message saying the database name is blank.
9288                                 if (!$database_list{$database}{Name}){
9289                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{compile}->{blankdatabasename});
9290                                 } else {
9291                                         $kiriwrite_presmodule->addtext($database_list{$database}{Name});
9292                                 }
9294                                 $kiriwrite_presmodule->addlinebreak();
9296                         }
9298                         $kiriwrite_presmodule->endbox();
9300                         # Disconnect from the database server.
9302                         $kiriwrite_dbmodule->disconnect();
9304                         $kiriwrite_presmodule->addlinebreak();
9305                         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselecteddatabasesbutton});
9306                         $kiriwrite_presmodule->addtext(" | ");
9307                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9308                         $kiriwrite_presmodule->endform();
9310                         return $kiriwrite_presmodule->grab();
9312                 } else {
9314                         # The type is something else other than
9315                         # single or multiple, so return an error.
9317                         kiriwrite_error("invalidvariable");
9319                 }
9321         } else {
9323                 # The confirm value is neither 0 or 1, so
9324                 # return an error.
9326                 kiriwrite_error("invalidvariable");
9328         }
9332 sub kiriwrite_compile_all{
9333 #################################################################################
9334 # kiriwrite_compile_all: Compile all of the databases in the database           #
9335 # directory.                                                                    #
9336 #                                                                               #
9337 # Usage:                                                                        #
9338 #                                                                               #
9339 # kiriwrite_compile_all();                                                      #
9340 #################################################################################
9342         # Connect to the database server.
9344         $kiriwrite_dbmodule->connect();
9346         # Check if any errors occured while connecting to the database server.
9348         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9350                 # A database connection error has occured so return
9351                 # an error.
9353                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9355         }
9357         # Get the list of available databases.
9359         my @database_list = $kiriwrite_dbmodule->getdblist();
9361         # Check if any errors occured while getting the databases.
9363         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9365                 # The database directory is missing so return an error.
9367                 kiriwrite_error("datadirectorymissing");
9369         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9371                 # The database directory has invalid permissions set so return
9372                 # an error.
9374                 kiriwrite_error("datadirectoryinvalidpermissions");
9376         }
9378         # Define some variables for later.
9380         my $database;
9381         my $database_name_filename_check;
9382         my $database_count              = 0;
9384         # Check the list of databases to compile to see if it is blank,
9385         # if it is then return an error.
9387         if (!@database_list){
9389                 # The list of database is blank so return an error.
9391                 kiriwrite_error("nodatabasesavailable");
9393         }
9395         # Write out a form for confirming the action to compile all of the databases.
9397         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabases}, { Style => "pageheader" });
9398         $kiriwrite_presmodule->addlinebreak();
9399         $kiriwrite_presmodule->addlinebreak();
9401         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9402         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9403         $kiriwrite_presmodule->addhiddendata("action", "compile");
9404         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9406         foreach $database (@database_list){
9408                 # Check if the database filename is blank.
9410                 if ($database eq ""){
9412                         # The database filename is blank so process
9413                         # the next database.
9415                         next;
9417                 }
9419                 # Check if the database filename is valid before
9420                 # using the database.
9422                 $database_name_filename_check   = kiriwrite_variablecheck($database, "filename", 0, 1);
9424                 if ($database_name_filename_check ne 0){
9426                         # The database filename is invalid so process
9427                         # the next database.
9429                         next;
9431                 }
9433                 $database_count++;
9434                 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database);
9435                 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9437         }
9439         $kiriwrite_presmodule->addhiddendata("count", $database_count);
9441         # Disconnect from the database server.
9443         $kiriwrite_dbmodule->disconnect();
9445         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabasesmessage});
9446         $kiriwrite_presmodule->addlinebreak();
9447         $kiriwrite_presmodule->addlinebreak();
9449         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9450         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compilealldatabasesbutton});
9451         $kiriwrite_presmodule->addtext(" | ");
9452         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9454         return $kiriwrite_presmodule->grab();
9458 sub kiriwrite_selectedlist{
9459 #################################################################################
9460 # kiriwrite_page_selectedlist: Get the list of selected pages to use.           #
9461 #                                                                               #
9462 # Usage:                                                                        #
9463 #                                                                               #
9464 # kiriwrite_page_selectedlist();                                                #
9465 #################################################################################
9467         # Load the required Perl modules.
9469         my $query = new CGI;
9471         my $count       = $query->param('count');
9473         # Check if the list of files has a value and if not set it 0.
9475         if (!$count){
9477                 $count = 0;
9479         }
9481         # Define some values for later.
9483         my @filename_list; 
9484         my @selected_list;
9485         my @final_list;
9487         my $filename;
9488         my $selected;
9490         my $final_count = 0;
9491         my $seek = 0;
9493         # Get the list of filenames.
9495         do {
9497                 # Get the values from id[]
9499                 $seek++;
9501                 $filename               = $query->param('id[' . $seek . ']');
9502                 $filename_list[$seek]   = $filename;
9504         } until ($seek eq $count || $count eq 0);
9506         # Get the list of selected filenames.
9508         $seek = 0;
9510         do {
9512                 # Get the values from name[]
9514                 $seek++;
9516                 $selected       = $query->param('name[' . $seek . ']');
9518                 if (!$selected){
9520                         $selected = 'off';
9522                 }
9524                 $selected_list[$seek]   = $selected;
9526         } until ($seek eq $count || $count eq 0);
9528         # Create a final list of filenames to be used for
9529         # processing.
9531         $seek = 0;
9533         do {
9535                 # Check if the selected value is on and include
9536                 # the filename in the final list.
9538                 $seek++;
9540                 $selected       = $selected_list[$seek];
9542                 if ($selected eq "on"){
9544                         $filename       = $filename_list[$seek];
9545                         $final_list[$final_count] = $filename;
9546                         $final_count++;
9548                 }
9550         } until ($seek eq $count || $count eq 0);
9552         return @final_list;
9556 sub kiriwrite_compile_list{
9557 #################################################################################
9558 # kiriwrite_compile_list: Shows a list of databases that can be compiled.       #
9559 #                                                                               #
9560 # Usage:                                                                        #
9561 #                                                                               #
9562 # kiriwrite_compile_list();                                                     #
9563 #################################################################################
9565         # Define the following variables that are going to be used before using 
9566         # the foreach function.
9568         my %database_info;
9569         my %database_list;
9570         my $database_count = 0;
9571         my $database_filename = "";
9572         my $database_filename_friendly = "";
9573         my $database_permissions = "";
9574         my $database_name = "";
9575         my $database_description = "";
9576         my $data_file = "";
9577         my @permissions_list;
9578         my @error_list;
9579         my $table_style = 0;
9580         my $table_style_name = "";
9581         my $database;
9583         tie(%database_list, 'Tie::IxHash');
9585         # Connect to the database server.
9587         $kiriwrite_dbmodule->connect();
9589         # Check if any errors occured while connecting to the database server.
9591         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9593                 # A database connection error has occured so return
9594                 # an error.
9596                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9598         }
9600         # Get the list of available databases and process any errors that
9601         # might have occured.
9603         my @database_list = $kiriwrite_dbmodule->getdblist();
9605         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9607                 # The database directory is missing so return an error.
9609                 kiriwrite_error("datadirectorymissing");
9611         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9613                 # The database directory has invalid permissions set so return
9614                 # an error.
9616                 kiriwrite_error("datadirectoryinvalidpermissions");
9618         }
9620         # Begin creating the table for the list of databases.
9622         foreach $data_file (@database_list){
9624                 # Select the database.
9626                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
9628                 # Check if any error occured while selecting the database.
9630                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9632                         # The database does not exist, so process the next
9633                         # database.
9635                         next;
9637                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
9639                         # The database has invalid permissions settings, so
9640                         # add the database to the list of databases with
9641                         # invalid permissions set and process the next
9642                         # database.
9644                         push(@permissions_list, $data_file);
9645                         next;
9647                 }
9649                 # Get information about the database.
9651                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9653                 # Check if any error occured while getting information from the
9654                 # database.
9656                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9658                         # A database error has occured, add the database and specific
9659                         # error message to the list of databases with errors and
9660                         # process the next database.
9662                         push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
9663                         next;
9665                 }
9667                 $database_name          = $database_info{"DatabaseName"};
9668                 $database_description   = $database_info{"Description"};
9670                 # Create a friendly name for the database.
9672                 $database_filename_friendly = $data_file;
9674                 # Append the database information to the table.
9676                 $database_list{$database_count}{Filename}       = $database_filename_friendly;
9677                 $database_list{$database_count}{Name}           = $database_name;
9678                 $database_list{$database_count}{Description}    = $database_description;
9680                 $database_count++;
9682         }
9684         # Check if there are no valid databases are if there is no
9685         # valid databases then write a message saying that no
9686         # valid databases are available.
9688         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilepages}, { Style => "pageheader" });
9689         $kiriwrite_presmodule->addlinebreak();
9690         $kiriwrite_presmodule->addlinebreak();
9692         if ($database_count eq 0){
9694                 # There are no databases available for compiling so
9695                 # write a message instead.
9697                 $kiriwrite_presmodule->startbox("errorbox");
9698                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{nodatabasesavailable});
9699                 $kiriwrite_presmodule->endbox();
9701         } else {
9703                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9704                 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9705                 $kiriwrite_presmodule->addhiddendata("action", "compile");
9706                 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9708                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
9709                 $kiriwrite_presmodule->addtext(" | ");
9710                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselectedbutton});
9711                 $kiriwrite_presmodule->addlinebreak();
9712                 $kiriwrite_presmodule->addlinebreak();
9713                 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9714                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
9716                 $kiriwrite_presmodule->startheader();
9717                 $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
9718                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
9719                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
9720                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
9721                 $kiriwrite_presmodule->endheader();
9723                 $database_count = 1;
9725                 foreach $database (keys %database_list){
9727                         # Check the style to be used with.
9729                         if ($table_style eq 0){
9731                                 # Use the first style and set the style value
9732                                 # to use the next style, the next time the
9733                                 # if statement is checked.
9735                                 $table_style_name = "tablecell1";
9736                                 $table_style = 1;
9738                         } else {
9740                                 # Use the second style and set the style
9741                                 # value to use the first style, the next
9742                                 # time if statement is checked.
9744                                 $table_style_name = "tablecell2";
9745                                 $table_style = 0;
9746                         }
9748                         # Add the template to the list of available
9749                         # templates to compile.
9751                         $kiriwrite_presmodule->startrow();
9752                         $kiriwrite_presmodule->addcell($table_style_name);
9753                         $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9754                         $kiriwrite_presmodule->addcheckbox("name[" . $database_count . "]");
9755                         $kiriwrite_presmodule->endcell();
9756                         $kiriwrite_presmodule->addcell($table_style_name);
9758                         if (!$database_list{$database}{Name}){
9759                                 $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}) });
9760                         } else {
9761                                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_list{$database}{Filename}, { Text => $database_list{$database}{Name} });
9762                         }
9764                         $kiriwrite_presmodule->endcell();
9765                         $kiriwrite_presmodule->addcell($table_style_name);
9767                         if (!$database_list{$database}{Description}){
9768                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
9769                         } else {
9770                                 $kiriwrite_presmodule->addtext($database_list{$database}{Description});
9771                         }
9773                         $kiriwrite_presmodule->endcell();
9774                         $kiriwrite_presmodule->addcell($table_style_name);
9775                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile&action=compile&type=single&database=" . $database_list{$database}{Filename}, { Text => $kiriwrite_lang->{options}->{compile} });
9776                         $kiriwrite_presmodule->endcell();
9777                         $kiriwrite_presmodule->endrow();
9779                         $database_count++;
9781                 }
9783                 $kiriwrite_presmodule->endtable();
9784                 $kiriwrite_presmodule->endform();
9786         }
9788         # Disconnect from the database server.
9790         $kiriwrite_dbmodule->disconnect();
9792         # Check if any databases with problems have appeared and if they
9793         # have, print out a message saying which databases have problems.
9795         if (@permissions_list){
9797                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
9798                 $kiriwrite_presmodule->addlinebreak();
9799                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
9800                 $kiriwrite_presmodule->addlinebreak();
9801  
9802                 foreach $database (@permissions_list){
9803  
9804                         $kiriwrite_presmodule->addlinebreak();
9805                         $kiriwrite_presmodule->addtext($database);
9806  
9807                 }
9808  
9809                 $kiriwrite_presmodule->addlinebreak();
9810                 $kiriwrite_presmodule->addlinebreak();
9812         }
9814         if (@error_list){
9816                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
9817                 $kiriwrite_presmodule->addlinebreak();
9818                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
9819                 $kiriwrite_presmodule->addlinebreak();
9821                 foreach $database (@error_list){
9823                         $kiriwrite_presmodule->addlinebreak();
9824                         $kiriwrite_presmodule->addtext($database);
9826                 }
9828         }
9830         return $kiriwrite_presmodule->grab();
9834 sub kiriwrite_compile_clean{
9835 #################################################################################
9836 # kiriwrite_compile_clean: Deletes the contents of the output directory.        #
9837 #                                                                               #
9838 # Usage:                                                                        #
9839 #                                                                               #
9840 # kiriwrite_compile_clean(confirm);                                             #
9841 #                                                                               #
9842 # confirm       Confirms the deletion of files from the output directory.       #
9843 #################################################################################
9845         # Get the values passed to the subroutine.
9847         my ($confirm) = @_;
9849         # Define some variables for later.
9851         my $file_permissions;
9852         my $output_directory_exists;
9853         my $output_directory_permissions;
9854         my $warning_message;
9856         # Check if the output directory exists.
9858         $output_directory_exists         = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"});
9860         if ($output_directory_exists eq 1){
9862                 # The output directory does not exist so return
9863                 # an error.
9865                 kiriwrite_error("outputdirectorymissing");
9867         }
9869         # Check if the output directory has invalid
9870         # permissions set.
9872         $output_directory_permissions   = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"});
9874         if ($output_directory_permissions eq 1){
9876                 # The output directory has invalid permissions
9877                 # set, so return an error.
9879                 kiriwrite_error("outputdirectoryinvalidpermissions");
9881         }
9883         if ($confirm) {
9885                 if ($confirm eq 1){
9887                         # The action to clean the output directory has been
9888                         # confirmed.
9890                         # Remove the list of files and directories from the
9891                         # output directory.
9893                         $file_permissions = kiriwrite_compile_clean_helper($kiriwrite_config{"directory_data_output"}, 1);
9895                         if ($file_permissions eq 1){
9897                                 # One of the files or directories has invalid
9898                                 # permissions set so write a warning message.
9900                         }
9902                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9904                         if ($file_permissions eq 1){
9906                                 $kiriwrite_presmodule->addlinebreak();
9907                                 $kiriwrite_presmodule->addlinebreak();
9908                                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{somecontentnotremoved});
9909                                 $kiriwrite_presmodule->addlinebreak();
9910                                 $kiriwrite_presmodule->addlinebreak();
9912                         } else {
9914                                 $kiriwrite_presmodule->addlinebreak();
9915                                 $kiriwrite_presmodule->addlinebreak();
9916                                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{contentremoved});
9917                                 $kiriwrite_presmodule->addlinebreak();
9918                                 $kiriwrite_presmodule->addlinebreak();
9920                         }
9922                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9924                         return $kiriwrite_presmodule->grab();
9926                 } else {
9928                         # A value other than 1 is set for the confirm value
9929                         # (which it shouldn't be) so return an error.
9931                         kiriwrite_error("invalidvariable");
9933                 }
9935         }
9937         # Print out a form for cleaning the output directory.
9939         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9940         $kiriwrite_presmodule->addlinebreak();
9941         $kiriwrite_presmodule->addlinebreak();
9942         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9943         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9944         $kiriwrite_presmodule->addhiddendata("action", "clean");
9945         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9946         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectorymessage});
9947         $kiriwrite_presmodule->addlinebreak();
9948         $kiriwrite_presmodule->addlinebreak();
9949         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{cleanoutputdirectorybutton});
9950         $kiriwrite_presmodule->addtext(" | ");
9951         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist}});
9952         $kiriwrite_presmodule->endform();
9954         return $kiriwrite_presmodule->grab();
9958 sub kiriwrite_compile_clean_helper{
9959 #################################################################################
9960 # kiriwrite_compile_clean_helper: Helper for cleaning out the output directory. #
9961 # This command sometimes is called recursively (when a directory is found).     #
9962 #                                                                               #
9963 # Usage:                                                                        #
9964 #                                                                               #
9965 # kiriwrite_compile_clean_helper(directory, removedirectory, [permissions]);    #
9966 #                                                                               #
9967 # directory             Specifies the directory to remove files (and            #
9968 #                       sub-directories) from.                                  #
9969 # keepdirectory         Keeps the directory itself after all files have been    #
9970 #                       removed.                                                #
9971 # permissions           Used recursively for error checking.                    #
9972 #################################################################################
9974         # Get the values passed to the subroutine.
9976         my ($directory, $directory_keep, $permissions) = @_;
9978         # Check if the directory_keep is only one charater long.
9980         my $directory_file = "";
9981         my @directory_list;
9982         my $file_permissions = 0;
9983         my $debug = 0;
9985         # Check if the file permissions value is blank.
9987         if (!$permissions){
9989                 # The file permissions value is blank.
9991                 $permissions = 0;
9993         }
9995         # Open the directory specified, read the contents of
9996         # the directory and then close the directory.
9998         opendir(DIRECTORY, $directory);
9999         @directory_list = readdir(DIRECTORY);
10000         closedir(DIRECTORY);
10002         # Remove each file and directory.
10004         foreach $directory_file (@directory_list){
10006                 # Check if the filename is '.' or '..' and if it
10007                 # is skip those files.
10009                 if ($directory_file eq "." || $directory_file eq ".."){
10011                         # The filename is '.' or '..' so skip processing
10012                         # these files.
10014                 } else {
10016                         # Check if the permissions on the file or directory has
10017                         # valid permissions set.
10019                         $file_permissions = kiriwrite_filepermissions($directory . '/' . $directory_file, 1, 1);
10021                         if ($file_permissions eq 1){
10023                                 # The file or directory has invalid permissions set.
10025                                 $permissions = 1;
10026                                 next;
10028                         }
10030                         # Check if the filename is a directory.
10032                         if (-d $directory . '/' . $directory_file){
10034                                 # The filename is a directory so send the directory name
10035                                 # and this subroutine again (recursively).
10037                                 kiriwrite_compile_clean_helper($directory . '/' . $directory_file, 0, $permissions);
10039                         } else {
10041                                 # The file is not a directory but an actual file so
10042                                 # remove as normal (in terms of the Perl language).
10044                                 ($directory) = $directory =~ m/^(.*)$/g;
10045                                 ($directory_file) = $directory_file =~ m/^(.*)$/g;
10047                                 # Check if the directory is undefined and if it is then
10048                                 # set it to blank.
10050                                 if (!$directory){
10051                                         $directory = "";
10052                                 }
10054                                 if (!$directory_file){
10055                                         $directory_file = "";
10056                                 }
10058                                 unlink($directory . '/' . $directory_file);
10060                         }
10062                 }
10064         }
10066         # Check if the directory should be kept.
10068         if ($directory_keep eq 1){
10070                 # The directory_keep value is set as 1 so the directory
10071                 # specified should be kept.
10073         } elsif ($directory_keep eq 0) {
10075                 # The directory_keep value is set as 0 so remove the
10076                 # directory specified.
10078                 ($directory) = $directory =~ m/^(.*)$/g;
10079                 rmdir($directory);
10081         } else {
10083                 # A value other than 0 or 1 was specified so return
10084                 # an error,
10086                 kiriwrite_error('invalidvalue');
10088         }
10090         return $permissions;
10094 sub kiriwrite_settings_view{
10095 #################################################################################
10096 # kiriwrite_options_view: Writes out the list of options and variables.         #
10097 #                                                                               #
10098 # Usage:                                                                        #
10099 #                                                                               #
10100 # kiriwrite_settings_view();                                                    #
10101 #################################################################################
10103         # Get the settings.
10105         my $settings_directory_db               = $kiriwrite_config{"directory_data_db"};
10106         my $settings_directory_output           = $kiriwrite_config{"directory_data_output"};
10107         my $settings_noncgi_images              = $kiriwrite_config{"directory_noncgi_images"};
10108         my $settings_system_datetime            = $kiriwrite_config{"system_datetime"};
10109         my $settings_system_language            = $kiriwrite_config{"system_language"};
10110         my $settings_system_presentation        = $kiriwrite_config{"system_presmodule"};
10111         my $settings_system_database            = $kiriwrite_config{"system_dbmodule"};
10113         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{viewsettings}, { Style => "pageheader" });
10114         $kiriwrite_presmodule->addlinebreak();
10115         $kiriwrite_presmodule->addlinebreak();
10116         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{currentsettings});
10117         $kiriwrite_presmodule->addlinebreak();
10118         $kiriwrite_presmodule->addlinebreak();
10119         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10121         $kiriwrite_presmodule->startheader();
10122         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10123         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10124         $kiriwrite_presmodule->endheader();
10126         $kiriwrite_presmodule->startrow();
10127         $kiriwrite_presmodule->addcell("tablecellheader");
10128         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10129         $kiriwrite_presmodule->endcell();
10130         $kiriwrite_presmodule->addcell("tablecellheader");
10131         $kiriwrite_presmodule->endcell();
10132         $kiriwrite_presmodule->endrow();
10134         $kiriwrite_presmodule->startrow();
10135         $kiriwrite_presmodule->addcell("tablecell1");
10136         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10137         $kiriwrite_presmodule->endcell();
10138         $kiriwrite_presmodule->addcell("tablecell2");
10139         $kiriwrite_presmodule->addtext($settings_directory_db);
10140         $kiriwrite_presmodule->endcell();
10141         $kiriwrite_presmodule->endrow();
10143         $kiriwrite_presmodule->startrow();
10144         $kiriwrite_presmodule->addcell("tablecell1");
10145         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
10146         $kiriwrite_presmodule->endcell();
10147         $kiriwrite_presmodule->addcell("tablecell2");
10148         $kiriwrite_presmodule->addtext($settings_directory_output);
10149         $kiriwrite_presmodule->endcell();
10150         $kiriwrite_presmodule->endrow();
10152         $kiriwrite_presmodule->startrow();
10153         $kiriwrite_presmodule->addcell("tablecell1");
10154         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
10155         $kiriwrite_presmodule->endcell();
10156         $kiriwrite_presmodule->addcell("tablecell2");
10157         $kiriwrite_presmodule->addtext($settings_noncgi_images);
10158         $kiriwrite_presmodule->endcell();
10159         $kiriwrite_presmodule->endrow();
10161         $kiriwrite_presmodule->startrow();
10162         $kiriwrite_presmodule->addcell("tablecellheader");
10163         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
10164         $kiriwrite_presmodule->endcell();
10165         $kiriwrite_presmodule->addcell("tablecellheader");
10166         $kiriwrite_presmodule->endcell();
10167         $kiriwrite_presmodule->endrow();
10169         $kiriwrite_presmodule->startrow();
10170         $kiriwrite_presmodule->addcell("tablecell1");
10171         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
10172         $kiriwrite_presmodule->endcell();
10173         $kiriwrite_presmodule->addcell("tablecell2");
10174         $kiriwrite_presmodule->addtext($settings_system_datetime);
10175         $kiriwrite_presmodule->endcell();
10176         $kiriwrite_presmodule->endrow();
10178         $kiriwrite_presmodule->startrow();
10179         $kiriwrite_presmodule->addcell("tablecellheader");
10180         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
10181         $kiriwrite_presmodule->endcell();
10182         $kiriwrite_presmodule->addcell("tablecellheader");
10183         $kiriwrite_presmodule->endcell();
10184         $kiriwrite_presmodule->endrow();
10186         $kiriwrite_presmodule->startrow();
10187         $kiriwrite_presmodule->addcell("tablecell1");
10188         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
10189         $kiriwrite_presmodule->endcell();
10190         $kiriwrite_presmodule->addcell("tablecell2");
10191         $kiriwrite_presmodule->addtext($settings_system_language);
10192         $kiriwrite_presmodule->endcell();
10193         $kiriwrite_presmodule->endrow();
10195         $kiriwrite_presmodule->startrow();
10196         $kiriwrite_presmodule->addcell("tablecellheader");
10197         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
10198         $kiriwrite_presmodule->endcell();
10199         $kiriwrite_presmodule->addcell("tablecellheader");
10200         $kiriwrite_presmodule->endcell();
10201         $kiriwrite_presmodule->endrow();
10203         $kiriwrite_presmodule->startrow();
10204         $kiriwrite_presmodule->addcell("tablecell1");
10205         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
10206         $kiriwrite_presmodule->endcell();
10207         $kiriwrite_presmodule->addcell("tablecell2");
10208         $kiriwrite_presmodule->addtext($settings_system_presentation);
10209         $kiriwrite_presmodule->endcell();
10210         $kiriwrite_presmodule->endrow();
10212         $kiriwrite_presmodule->startrow();
10213         $kiriwrite_presmodule->addcell("tablecell1");
10214         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
10215         $kiriwrite_presmodule->endcell();
10216         $kiriwrite_presmodule->addcell("tablecell2");
10217         $kiriwrite_presmodule->addtext($settings_system_database);
10218         $kiriwrite_presmodule->endcell();
10219         $kiriwrite_presmodule->endrow();
10221         $kiriwrite_presmodule->endtable();
10223         $kiriwrite_presmodule->addlinebreak();
10224         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{altersettings});
10226         return $kiriwrite_presmodule->grab();
10230 sub kiriwrite_settings_edit{
10231 #################################################################################
10232 # kiriwrite_settings_edit: Edits the options.                                   #
10233 #                                                                               #
10234 # Usage:                                                                        #
10235 #                                                                               #
10236 # kiriwrite_settings_edit(options);                                             #
10237 #                                                                               #
10238 # options               Specifies the following options in any order.           #
10239 #                                                                               #
10240 # DatabaseDirectory     Specifies the new database directory to use.            #
10241 # OutputDirectory       Specifies the new output directory to use.              #
10242 # ImagesURIPath         Specifies the new URI path for images.                  #
10243 # DateTimeFormat        Specifies the new date and time format.                 #
10244 # SystemLanguage        Specifies the new language to use for Kiriwrite.        #
10245 # PrsentationModule     Specifies the new presentation module to use for        #
10246 #                       Kiriwrite.                                              #
10247 # DatabaseModule        Specifies the new database module to use for Kiriwrite. #
10248 #                                                                               #
10249 # Options for server-based database modules.                                    #
10250 #                                                                               #
10251 # DatabaseServer        Specifies the database server to use.                   #
10252 # DaravasePort          Specifies the port the database server is running on.   #
10253 # DatabaseProtocol      Specifies the protocol the database server is using.    #
10254 # DatabaseSQLDatabase   Specifies the SQL database name to use.                 #
10255 # DatabaseUsername      Specifies the database server username.                 #
10256 # DatabasePasswordKeep  Keeps the current password in the configuration file.   #
10257 # DatabasePassword      Specifies the password for the database server username.#
10258 # DatabaseTablePrefix   Specifies the prefix used for tables.                   #
10259 #################################################################################
10261         # Get the values that have been passed to the subroutine.
10263         my ($passedoptions) = @_;
10265         # Get the values from the hash.
10267         my $settings_dbdirectory                = $passedoptions->{"DatabaseDirectory"};
10268         my $settings_outputdirectory            = $passedoptions->{"OutputDirectory"};
10269         my $settings_imagesuri                  = $passedoptions->{"ImagesURIPath"};
10270         my $settings_datetimeformat             = $passedoptions->{"DateTimeFormat"};
10271         my $settings_languagesystem             = $passedoptions->{"SystemLanguage"};
10272         my $settings_presmodule                 = $passedoptions->{"PresentationModule"};
10273         my $settings_dbmodule                   = $passedoptions->{"DatabaseModule"};
10275         my $settings_database_server            = $passedoptions->{"DatabaseServer"};
10276         my $settings_database_port              = $passedoptions->{"DatabasePort"};
10277         my $settings_database_protocol          = $passedoptions->{"DatabaseProtocol"};
10278         my $settings_database_sqldatabase       = $passedoptions->{"DatabaseSQLDatabase"};
10279         my $settings_database_username          = $passedoptions->{"DatabaseUsername"};
10280         my $settings_database_passwordkeep      = $passedoptions->{"DatabasePasswordKeep"};
10281         my $settings_database_password          = $passedoptions->{"DatabasePassword"};
10282         my $settings_database_tableprefix       = $passedoptions->{"DatabaseTablePrefix"};
10284         my $confirm                             = $passedoptions->{"Confirm"};
10286         # Load the required Perl modules.
10288         my $xsl = XML::Simple->new();
10290         if (!$confirm){
10292                 # If the confirm value is blank, then set the confirm
10293                 # value to 0.
10295                 $confirm = 0;
10297         }
10299         if ($confirm eq "1"){
10301                 # The action to edit the settings has been confirmed.
10302                 # Start by checking each variable about to be placed
10303                 # in the settings file is valid.
10305                 # Deinfe some variables for later.
10307                 my @kiriwrite_new_settings;
10309                 # Check the length of the directory names.
10311                 kiriwrite_variablecheck($settings_dbdirectory, "maxlength", 64, 0);
10312                 kiriwrite_variablecheck($settings_outputdirectory, "maxlength", 64, 0);
10313                 kiriwrite_variablecheck($settings_imagesuri, "maxlength", 512, 0);
10314                 kiriwrite_variablecheck($settings_datetimeformat, "maxlength", 32, 0);
10316                 kiriwrite_variablecheck($settings_languagesystem, "language_filename", "", 0);
10318                 # Check the module names to see if they're valid.
10320                 my $kiriwrite_presmodule_modulename_check       = kiriwrite_variablecheck($settings_presmodule, "module", 0, 1);
10321                 my $kiriwrite_dbmodule_modulename_check         = kiriwrite_variablecheck($settings_dbmodule, "module", 0, 1);
10323                 if ($kiriwrite_presmodule_modulename_check eq 1){
10325                         # The presentation module name is blank, so return
10326                         # an error.
10328                         kiriwrite_error("presmoduleblank");
10330                 }
10332                 if ($kiriwrite_presmodule_modulename_check eq 2){
10334                         # The presentation module name is invalid, so return
10335                         # an error.
10337                         kiriwrite_error("presmoduleinvalid");
10339                 }
10341                 if ($kiriwrite_dbmodule_modulename_check eq 1){
10343                         # The database module name is blank, so return
10344                         # an error.
10346                         kiriwrite_error("dbmoduleblank");
10348                 }
10350                 if ($kiriwrite_dbmodule_modulename_check eq 2){
10352                         # The database module name is invalid, so return
10353                         # an error.
10355                         kiriwrite_error("dbmoduleinvalid");
10357                 }
10359                 # Check if the directory names only contain letters and numbers and
10360                 # return a specific error if they don't.
10362                 my $kiriwrite_dbdirectory_check         = kiriwrite_variablecheck($settings_dbdirectory, "directory", 0, 1);
10363                 my $kiriwrite_outputdirectory_check     = kiriwrite_variablecheck($settings_outputdirectory, "directory", 0, 1);
10364                 kiriwrite_variablecheck($settings_datetimeformat, "datetime", 0, 0);
10366                 if ($kiriwrite_dbdirectory_check eq 1){
10368                         # The database directory name is blank, so return
10369                         # an error.
10371                         kiriwrite_error("dbdirectoryblank");
10373                 } elsif ($kiriwrite_dbdirectory_check eq 2){
10375                         # The database directory name is invalid, so return
10376                         # an error.
10378                         kiriwrite_error("dbdirectoryinvalid");
10380                 }
10382                 if ($kiriwrite_outputdirectory_check eq 1){
10384                         # The output directory name is blank, so return
10385                         # an error.
10387                         kiriwrite_error("outputdirectoryblank");
10389                 } elsif ($kiriwrite_outputdirectory_check eq 2){
10391                         # The output directory name is invalid, so return
10392                         # an error.
10394                         kiriwrite_error("outputdirectoryinvalid");
10396                 }
10398                 # Check if the presentation module with the filename given exists.
10400                 my $presmodule_exists = kiriwrite_fileexists("Modules/Presentation/" . $settings_presmodule . ".pm");
10402                 if ($presmodule_exists eq 1){
10404                         # The presentation module does not exist so return an error.
10406                         kiriwrite_error("presmodulemissing");
10408                 }
10410                 # Check if the database module with the filename given exists.
10412                 my $dbmodule_exists = kiriwrite_fileexists("Modules/Database/" . $settings_dbmodule . ".pm");
10414                 if ($dbmodule_exists eq 1){
10416                         # The database module does not exist so return an error.
10418                         kiriwrite_error("dbmodulemissing");
10420                 }
10422                 # Check if the language filename given exists.
10424                 my $languagefile_exists = kiriwrite_fileexists("lang/" . $settings_languagesystem . ".xml");
10426                 if ($languagefile_exists eq 1){
10428                         # The language filename given does not exist so return an error.
10430                         kiriwrite_error("languagefilenamemissing");             
10432                 }
10434                 # Check the database server options to see if they are valid.
10436                 my $kiriwrite_databaseserver_length_check               = kiriwrite_variablecheck($settings_database_server, "maxlength", 128, 1);
10437                 my $kiriwrite_databaseserver_lettersnumbers_check       = kiriwrite_variablecheck($settings_database_server, "lettersnumbers", 0, 1);
10438                 my $kiriwrite_databaseport_length_check                 = kiriwrite_variablecheck($settings_database_port, "maxlength", 5, 1);
10439                 my $kiriwrite_databaseport_numbers_check                = kiriwrite_variablecheck($settings_database_port, "numbers", 0, 1);
10440                 my $kiriwrite_databaseport_port_check                   = kiriwrite_variablecheck($settings_database_port, "port", 0, 1);
10441                 my $kiriwrite_databaseprotocol_length_check             = kiriwrite_variablecheck($settings_database_protocol, "maxlength", 5, 1);
10442                 my $kiriwrite_databaseprotocol_protocol_check           = kiriwrite_variablecheck($settings_database_protocol, "serverprotocol", 0, 1);
10443                 my $kiriwrite_databasename_length_check                 = kiriwrite_variablecheck($settings_database_sqldatabase, "maxlength", 32, 1);
10444                 my $kiriwrite_databasename_lettersnumbers_check         = kiriwrite_variablecheck($settings_database_sqldatabase, "lettersnumbers", 0, 1);
10445                 my $kiriwrite_databaseusername_length_check             = kiriwrite_variablecheck($settings_database_username, "maxlength", 16, 1);
10446                 my $kiriwrite_databaseusername_lettersnumbers_check     = kiriwrite_variablecheck($settings_database_username, "lettersnumbers", 0, 1);
10447                 my $kiriwrite_databasepassword_length_check             = kiriwrite_variablecheck($settings_database_password, "maxlength", 64, 1);
10448                 my $kiriwrite_databasetableprefix_length_check          = kiriwrite_variablecheck($settings_database_tableprefix, "maxlength", 16, 1);
10449                 my $kiriwrite_databasetableprefix_lettersnumbers_check  = kiriwrite_variablecheck($settings_database_tableprefix, "lettersnumbers", 0, 1);
10451                 if ($kiriwrite_databaseserver_length_check eq 1){
10453                         # The length of the database server name is too long so
10454                         # return an error.
10456                         kiriwrite_error("servernametoolong");
10458                 }
10460                 if ($kiriwrite_databaseserver_lettersnumbers_check eq 1){
10462                         # The database server name contains characters other
10463                         # than letters and numbers, so return an error.
10465                         kiriwrite_error("servernameinvalid");
10467                 }
10469                 if ($kiriwrite_databaseport_length_check eq 1){
10471                         # The database port number length is too long so return
10472                         # an error.
10474                         kiriwrite_error("serverportnumbertoolong");
10476                 }
10478                 if ($kiriwrite_databaseport_numbers_check eq 1){
10480                         # The database port number contains characters other
10481                         # than numbers so return an error.
10483                         kiriwrite_error("serverportnumberinvalidcharacters");
10485                 }
10487                 if ($kiriwrite_databaseport_port_check eq 1){
10489                         # The database port number given is invalid so return
10490                         # an error.
10492                         kiriwrite_error("serverportnumberinvalid");
10494                 }
10496                 if ($kiriwrite_databaseprotocol_length_check eq 1){
10498                         # The database protocol name given is too long so
10499                         # return an error.
10501                         kiriwrite_error("serverprotocolnametoolong");
10503                 }
10505                 if ($kiriwrite_databaseprotocol_protocol_check eq 1){
10507                         # The server protcol given is invalid so return
10508                         # an error.
10510                         kiriwrite_error("serverprotocolinvalid");
10512                 }
10514                 if ($kiriwrite_databasename_length_check eq 1){
10516                         # The SQL database name is too long so return
10517                         # an error.
10519                         kiriwrite_error("serverdatabasenametoolong");
10521                 }
10523                 if ($kiriwrite_databasename_lettersnumbers_check eq 1){
10525                         # The database name contains invalid characters
10526                         # so return an error.
10528                         kiriwrite_error("serverdatabasenameinvalid");
10530                 }
10532                 if ($kiriwrite_databaseusername_length_check eq 1){
10534                         # The database username given is too long so
10535                         # return an error.
10537                         kiriwrite_error("serverdatabaseusernametoolong");
10539                 }
10541                 if ($kiriwrite_databaseusername_lettersnumbers_check eq 1){
10543                         # The database username contains invalid characters
10544                         # so return an error.
10546                         kiriwrite_error("serverdatabaseusernameinvalid");
10548                 }
10550                 if ($kiriwrite_databasepassword_length_check eq 1){
10552                         # The database password given is too long so return
10553                         # an error.
10555                         kiriwrite_error("serverdatabasepasswordtoolong");
10557                 }
10559                 if ($kiriwrite_databasetableprefix_length_check eq 1){
10561                         # The database table prefix given is too long so
10562                         # return an error.
10564                         kiriwrite_error("serverdatabasetableprefixtoolong");
10566                 }
10568                 if ($kiriwrite_databasetableprefix_lettersnumbers_check eq 1){
10570                         # The database table prefix given contains invalid
10571                         # characters so return an error.
10573                         kiriwrite_error("serverdatabasetableprefixinvalid");
10575                 }
10577                 # Check if the current password should be kept.
10579                 if ($settings_database_passwordkeep eq "on"){
10581                         # The current password in the configuration file should be used.
10583                         $settings_database_password     = $kiriwrite_config{"database_password"};
10585                 }
10587                 # Write the new settings to the XML file.
10589                 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 });
10591                 # Write a confirmation message.
10593                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingsedited}, { Style => "pageheadeR" });
10594                 $kiriwrite_presmodule->addlinebreak();
10595                 $kiriwrite_presmodule->addlinebreak();
10596                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingseditedmessage});
10597                 $kiriwrite_presmodule->addlinebreak();
10598                 $kiriwrite_presmodule->addlinebreak();
10599                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
10601                 return $kiriwrite_presmodule->grab();
10603         }
10605         # Get the list of languages available.
10607         my %language_list;
10608         my @language_directory          = "";
10609         my $language;
10610         my $language_filename           = "";
10611         my $language_file_xml           = "";
10612         my $language_file_systemname    = "";
10613         my $language_file_localname     = "";
10614         my $language_file_seek          = 0;
10615         my $language_flie_dot           = 0;
10616         my $language_file_length        = 0;
10617         my $language_file_count         = 0;
10618         my $language_file_char          = "";
10619         my $language_file_friendly      = "";
10620         my $language_config             = $kiriwrite_config{"system_language"};
10622         tie(%language_list, 'Tie::IxHash');
10624         opendir(LANGUAGEDIR, "lang");
10625         @language_directory = grep /m*\.xml$/, readdir(LANGUAGEDIR);
10626         closedir(LANGUAGEDIR);
10628         # Process each language by loading the XML configuration file
10629         # used for each language and then get the System name and 
10630         # the local name of the language.
10632         foreach $language_filename (@language_directory){
10634                 # Load the language file currently selected.
10636                 $language_file_xml = $xsl->XMLin("lang" . '/' . $language_filename, SuppressEmpty => 1);
10638                 # Get the system name and the local name of the language.
10640                 $language_file_localname = $language_file_xml -> {about} -> {name};
10642                 # Check if either the system name or the local name of the language
10643                 # is blank and if it is, then don't add the language to the list.
10645                 if ($language_file_localname eq ""){
10647                         # The system name or the local name is blank so don't add
10648                         # the language to the list.
10649                 
10650                 } else {
10652                         # Get the 'friendly' name of the language file name (basically
10653                         # remove the .xml part from the filename.
10655                         $language_file_length = length($language_filename);
10657                         do {
10659                                 # Get a character from the language filename and currently
10660                                 # set by the seek counter.
10662                                 $language_file_char = substr($language_filename, $language_file_seek, 1);
10664                                 # Check if the character is a dot and if it is then set the
10665                                 # last dot value to the seek counter value.
10667                                 if ($language_file_char eq "."){
10669                                         # Current chatacter is a dot so set the last dot value 
10670                                         # to what is currently the seek counter.
10672                                         $language_flie_dot = $language_file_seek;
10674                                 } else {
10676                                         # Current character is not a dot, so do nothing.
10678                                 }
10680                                 # Increment the seek counter.
10682                                 $language_file_seek++;
10684                         } until ($language_file_seek eq $language_file_length);
10686                         # Reset the seek counter.
10688                         $language_file_seek = 0;
10690                         # Process the file name again and this time process the file
10691                         # name until it reaches the last dot found.
10693                         do {
10695                                 # Get the character the seek counter is currently set at.
10697                                 $language_file_char = substr($language_filename, $language_file_seek, 1);
10699                                 # Append the character to the friendly file name.
10701                                 $language_file_friendly = $language_file_friendly . $language_file_char;
10703                                 # Increment the seek counter.
10704         
10705                                 $language_file_seek++;
10707                         } until ($language_file_seek eq $language_flie_dot);
10709                         # Append the language to the available languages list.
10711                         $language_list{$language_file_count}{Filename} = $language_file_friendly;
10712                         $language_list{$language_file_count}{Name} = $language_file_localname;
10713                         $language_file_count++;
10715                         # Reset certain counters and values before continuing.
10717                         $language_file_seek     = 0;
10718                         $language_flie_dot      = 0;
10719                         $language_file_length   = 0;
10720                         $language_file_char     = "";
10721                         $language_file_friendly = "";
10723                 }
10725         }
10727         # Get the list of presentation modules available.
10729         my %presmodule_list;
10730         my @presmodule_directory;
10731         my $presmodule;
10732         my $presmodule_file             = "";
10733         my $presmodule_char             = "";
10734         my $presmodule_dot              = 0;
10735         my $presmodule_firstdot         = 0;
10736         my $presmodule_firstdotfound    = "";
10737         my $presmodule_seek             = 0;
10738         my $presmodule_length           = 0;
10739         my $presmodule_count            = 0;
10740         my $presmodule_friendly         = "";
10741         my $presmodule_selectlist       = "";
10742         my $presmodule_config           = $kiriwrite_config{"system_presmodule"};
10744         # Open and get the list of presentation modules (perl modules) by filtering
10745         # out the 
10747         opendir(OUTPUTSYSTEMDIR, "Modules/Presentation");
10748         @presmodule_directory = grep /m*\.pm$/, readdir(OUTPUTSYSTEMDIR);
10749         closedir(OUTPUTSYSTEMDIR);
10751         # Process each presentation module and add them to the list of available
10752         # presentation modules.
10754         foreach $presmodule_file (@presmodule_directory){
10756                 # Get the length of the presentation module (perl module) filename.
10758                 $presmodule_length = length($presmodule_file);
10760                 # Get the friendly name of the Perl module (by getting rid of the
10761                 # .pm part of the filename).
10763                 do {
10765                         $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10767                         # Check if the current character is a dot and if it is then
10768                         # set the last dot found number to the current seek number.
10770                         if ($presmodule_char eq "."){
10772                                 # Put the seek value as the last dot found number.
10774                                 $presmodule_dot = $presmodule_seek;
10776                         }
10778                         # Increment the seek counter.
10780                         $presmodule_seek++;
10782                 } until ($presmodule_seek eq $presmodule_length);
10784                 # Reset the seek counter as it is going to be used again.
10786                 $presmodule_seek = 0;
10788                 # Get the friendly name of the Perl module by the processing the file
10789                 # name to the last dot the previous 'do' tried to find.
10791                 do {
10793                         # Get the character the seek counter is currently set at.
10795                         $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10797                         # Append the character to the friendly name of the presentation module.
10799                         $presmodule_friendly = $presmodule_friendly . $presmodule_char;
10801                         # Increment the seek counter.
10803                         $presmodule_seek++;
10805                 } until ($presmodule_seek eq $presmodule_dot);
10807                 # Append the option to tbe list of available presentation modules.
10809                 $presmodule_list{$presmodule_count}{Filename} = $presmodule_friendly;
10811                 # Reset the following values.
10813                 $presmodule_seek        = 0;
10814                 $presmodule_length      = 0;
10815                 $presmodule_char        = "";
10816                 $presmodule_friendly    = "";
10817                 $presmodule_count++;
10819         }
10821         # Get the list of database modules available.
10823         my %dbmodule_list;
10824         my @dbmodule_directory;
10825         my $dbmodule;
10826         my $dbmodule_file               = "";
10827         my $dbmodule_char               = "";
10828         my $dbmodule_dot                = 0;
10829         my $dbmodule_firstdot           = 0;
10830         my $dbmodule_firstdotfound      = "";
10831         my $dbmodule_seek               = 0;
10832         my $dbmodule_length             = 0;
10833         my $dbmodule_count              = 0;
10834         my $dbmodule_friendly           = "";
10835         my $dbmodule_selectlist         = "";
10836         my $dbmodule_config             = $kiriwrite_config{"system_dbmodule"};
10838         # Open and get the list of presentation modules (perl modules) by filtering
10839         # out the 
10841         opendir(DATABASEDIR, "Modules/Database");
10842         @dbmodule_directory = grep /m*\.pm$/, readdir(DATABASEDIR);
10843         closedir(DATABASEDIR);
10845         # Process each presentation module and add them to the list of available
10846         # presentation modules.
10848         foreach $dbmodule_file (@dbmodule_directory){
10850                 # Get the length of the database module (perl module) filename.
10852                 $dbmodule_length = length($dbmodule_file);
10854                 # Get the friendly name of the Perl module (by getting rid of the
10855                 # .pm part of the filename).
10857                 do {
10859                         $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10861                         # Check if the current character is a dot and if it is then
10862                         # set the last dot found number to the current seek number.
10864                         if ($dbmodule_char eq "."){
10866                                 # Put the seek value as the last dot found number.
10868                                 $dbmodule_dot = $dbmodule_seek;
10870                         }
10872                         # Increment the seek counter.
10874                         $dbmodule_seek++;
10876                 } until ($dbmodule_seek eq $dbmodule_length);
10878                 # Reset the seek counter as it is going to be used again.
10880                 $dbmodule_seek = 0;
10882                 # Get the friendly name of the Perl module by the processing the file
10883                 # name to the last dot the previous 'do' tried to find.
10885                 do {
10887                         # Get the character the seek counter is currently set at.
10889                         $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10891                         # Append the character to the friendly name of the presentation module.
10893                         $dbmodule_friendly = $dbmodule_friendly . $dbmodule_char;
10895                         # Increment the seek counter.
10897                         $dbmodule_seek++;
10899                 } until ($dbmodule_seek eq $dbmodule_dot);
10901                 # Append the option to tbe list of available database modules.
10903                 $dbmodule_list{$dbmodule_count}{Filename} = $dbmodule_friendly;
10905                 # Reset the following values.
10907                 $dbmodule_seek  = 0;
10908                 $dbmodule_length        = 0;
10909                 $dbmodule_char          = "";
10910                 $dbmodule_friendly      = "";
10911                 $dbmodule_count++;
10913         }
10915         # Get the directory settings.
10917         my $directory_settings_database         = $kiriwrite_config{"directory_data_db"};
10918         my $directory_settings_output           = $kiriwrite_config{"directory_data_output"};
10919         my $directory_settings_imagesuri        = $kiriwrite_config{"directory_noncgi_images"};
10920         my $datetime_setting                    = $kiriwrite_config{"system_datetime"};
10922         my $database_server                     = $kiriwrite_config{"database_server"};
10923         my $database_port                       = $kiriwrite_config{"database_port"};
10924         my $database_protocol                   = $kiriwrite_config{"database_protocol"};
10925         my $database_sqldatabase                = $kiriwrite_config{"database_sqldatabase"};
10926         my $database_username                   = $kiriwrite_config{"database_username"};
10927         my $database_passwordhash               = $kiriwrite_config{"database_passwordhash"};
10928         my $database_password                   = $kiriwrite_config{"database_password"};
10929         my $database_prefix                     = $kiriwrite_config{"database_tableprefix"};
10931         # Print out a form for editing the settings.
10933         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{editsettings}, { Style => "pageheader" });
10934         $kiriwrite_presmodule->addlinebreak();
10935         $kiriwrite_presmodule->addlinebreak();
10936         $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{setting}->{warning});
10937         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{warningmessage});
10938         $kiriwrite_presmodule->addlinebreak();
10939         $kiriwrite_presmodule->addlinebreak();
10941         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
10942         $kiriwrite_presmodule->addhiddendata("mode", "settings");
10943         $kiriwrite_presmodule->addhiddendata("action", "edit");
10944         $kiriwrite_presmodule->addhiddendata("confirm", 1);
10946         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10948         $kiriwrite_presmodule->startheader();
10949         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10950         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10951         $kiriwrite_presmodule->endheader();
10953         $kiriwrite_presmodule->startrow();
10954         $kiriwrite_presmodule->addcell("tablecellheader");
10955         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10956         $kiriwrite_presmodule->endcell();
10957         $kiriwrite_presmodule->addcell("tablecellheader");
10958         $kiriwrite_presmodule->endcell();
10959         $kiriwrite_presmodule->endrow();
10961         $kiriwrite_presmodule->startrow();
10962         $kiriwrite_presmodule->addcell("tablecell1");
10963         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10964         $kiriwrite_presmodule->endcell();
10965         $kiriwrite_presmodule->addcell("tablecell2");
10966         $kiriwrite_presmodule->addinputbox("databasedir", { Size => 32, MaxLength => 64, Value => $directory_settings_database });
10967         $kiriwrite_presmodule->endcell();
10968         $kiriwrite_presmodule->endrow();
10970         $kiriwrite_presmodule->startrow();
10971         $kiriwrite_presmodule->addcell("tablecell1");
10972         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
10973         $kiriwrite_presmodule->endcell();
10974         $kiriwrite_presmodule->addcell("tablecell2");
10975         $kiriwrite_presmodule->addinputbox("outputdir", { Size => 32, MaxLength => 64, Value => $directory_settings_output });
10976         $kiriwrite_presmodule->endcell();
10977         $kiriwrite_presmodule->endrow();
10979         $kiriwrite_presmodule->startrow();
10980         $kiriwrite_presmodule->addcell("tablecell1");
10981         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
10982         $kiriwrite_presmodule->endcell();
10983         $kiriwrite_presmodule->addcell("tablecell2");
10984         $kiriwrite_presmodule->addinputbox("imagesuripath", { Size => 32, MaxLength => 64, Value => $directory_settings_imagesuri });
10985         $kiriwrite_presmodule->endcell();
10986         $kiriwrite_presmodule->endrow();
10988         $kiriwrite_presmodule->startrow();
10989         $kiriwrite_presmodule->addcell("tablecellheader");
10990         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
10991         $kiriwrite_presmodule->endcell();
10992         $kiriwrite_presmodule->addcell("tablecellheader");
10993         $kiriwrite_presmodule->endcell();
10994         $kiriwrite_presmodule->endrow();
10996         $kiriwrite_presmodule->startrow();
10997         $kiriwrite_presmodule->addcell("tablecell1");
10998         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
10999         $kiriwrite_presmodule->endcell();
11000         $kiriwrite_presmodule->addcell("tablecell2");
11001         $kiriwrite_presmodule->addinputbox("datetime", { Size => 32, MaxLength => 64, Value => $datetime_setting });
11002         $kiriwrite_presmodule->addlinebreak();
11003         $kiriwrite_presmodule->addlinebreak();
11004         $kiriwrite_presmodule->startbox("datalist");
11006         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleday});
11007         $kiriwrite_presmodule->addlinebreak();
11008         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleday});
11009         $kiriwrite_presmodule->addlinebreak();
11010         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlemonth});
11011         $kiriwrite_presmodule->addlinebreak();
11012         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublemonth});
11013         $kiriwrite_presmodule->addlinebreak();
11014         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleyear});
11015         $kiriwrite_presmodule->addlinebreak();
11016         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleyear});
11017         $kiriwrite_presmodule->addlinebreak();
11018         $kiriwrite_presmodule->addlinebreak();
11019         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlehour});
11020         $kiriwrite_presmodule->addlinebreak();
11021         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublehour});
11022         $kiriwrite_presmodule->addlinebreak();
11023         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleminute});
11024         $kiriwrite_presmodule->addlinebreak();
11025         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleminute});
11026         $kiriwrite_presmodule->addlinebreak();
11027         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlesecond});
11028         $kiriwrite_presmodule->addlinebreak();
11029         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublesecond});
11030         $kiriwrite_presmodule->addlinebreak();
11031         $kiriwrite_presmodule->addlinebreak();
11032         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{othercharacters});
11033         $kiriwrite_presmodule->endbox();
11034         $kiriwrite_presmodule->endcell();
11035         $kiriwrite_presmodule->endrow();
11037         $kiriwrite_presmodule->startrow();
11038         $kiriwrite_presmodule->addcell("tablecellheader");
11039         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
11040         $kiriwrite_presmodule->endcell();
11041         $kiriwrite_presmodule->addcell("tablecellheader");
11042         $kiriwrite_presmodule->endcell();
11043         $kiriwrite_presmodule->endrow();
11045         $kiriwrite_presmodule->startrow();
11046         $kiriwrite_presmodule->addcell("tablecell1");
11047         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
11048         $kiriwrite_presmodule->endcell();
11049         $kiriwrite_presmodule->addcell("tablecell2");
11051         $kiriwrite_presmodule->addselectbox("language");
11053         # Process the list of available languages.
11055         foreach $language (keys %language_list){
11057                 # Check if the language filename matches the filename in the configuration
11058                 # file.
11060                 if ($language_list{$language}{Filename} eq $language_config){
11062                         $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} , Selected => 1 });
11064                 } else {
11066                         $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} });
11068                 }
11070         }
11072         $kiriwrite_presmodule->endselectbox();
11074         $kiriwrite_presmodule->startrow();
11075         $kiriwrite_presmodule->addcell("tablecellheader");
11076         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
11077         $kiriwrite_presmodule->endcell();
11078         $kiriwrite_presmodule->addcell("tablecellheader");
11079         $kiriwrite_presmodule->endcell();
11080         $kiriwrite_presmodule->endrow();
11082         $kiriwrite_presmodule->startrow();
11083         $kiriwrite_presmodule->addcell("tablecell1");
11084         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
11085         $kiriwrite_presmodule->endcell();
11086         $kiriwrite_presmodule->addcell("tablecell2");
11088         $kiriwrite_presmodule->addselectbox("presmodule");
11090         # Process the list of available presentation modules.
11092         foreach $presmodule (keys %presmodule_list){
11094                 # Check if the presentation module fileanme matches the filename in the 
11095                 # configuration file.
11097                 if ($presmodule_list{$presmodule}{Filename} eq $presmodule_config){
11099                         $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} , Selected => 1 });
11101                 } else {
11103                         $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} });
11105                 }
11107         }
11109         $kiriwrite_presmodule->endselectbox();
11111         $kiriwrite_presmodule->endcell();
11112         $kiriwrite_presmodule->endrow();
11114         $kiriwrite_presmodule->startrow();
11115         $kiriwrite_presmodule->addcell("tablecell1");
11116         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
11117         $kiriwrite_presmodule->endcell();
11118         $kiriwrite_presmodule->addcell("tablecell2");
11120         # Process the list of available database modules.
11122         $kiriwrite_presmodule->addselectbox("dbmodule");
11124         foreach $dbmodule (keys %dbmodule_list){
11126                 # Check if the database module fileanme matches the filename in the 
11127                 # configuration file.
11129                 if ($dbmodule_list{$dbmodule}{Filename} eq $dbmodule_config){
11131                         $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} , Selected => 1 });
11133                 } else {
11135                         $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} });
11137                 }
11140         }
11142         $kiriwrite_presmodule->endselectbox();
11144         $kiriwrite_presmodule->endcell();
11145         $kiriwrite_presmodule->endrow();
11147         $kiriwrite_presmodule->startrow();
11148         $kiriwrite_presmodule->addcell("tablecell1");
11149         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseserver});
11150         $kiriwrite_presmodule->endcell();
11151         $kiriwrite_presmodule->addcell("tablecell2");
11152         $kiriwrite_presmodule->addinputbox("database_server", { Size => 32, MaxLength => 128, Value => $database_server });
11153         $kiriwrite_presmodule->endcell();
11154         $kiriwrite_presmodule->endrow();
11156         $kiriwrite_presmodule->startrow();
11157         $kiriwrite_presmodule->addcell("tablecell1");
11158         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseport});
11159         $kiriwrite_presmodule->endcell();
11160         $kiriwrite_presmodule->addcell("tablecell2");
11161         $kiriwrite_presmodule->addinputbox("database_port", { Size => 5, MaxLength => 5, Value => $database_port });
11162         $kiriwrite_presmodule->endcell();
11163         $kiriwrite_presmodule->endrow();
11165         $kiriwrite_presmodule->startrow();
11166         $kiriwrite_presmodule->addcell("tablecell1");
11167         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseprotocol});
11168         $kiriwrite_presmodule->endcell();
11169         $kiriwrite_presmodule->addcell("tablecell2");
11171         # Check if TCP is being used.
11173         $kiriwrite_presmodule->addselectbox("database_protocol");
11175         if ($database_protocol eq "tcp"){
11177                 # The TCP protocol is selected so have the TCP option selected.
11179                 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp", Selected => 1});
11181         } else {
11183                 # The TCP protocol is not selected.
11185                 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp"});
11187         } 
11189         # Check if UDP is being used.
11191         if ($database_protocol eq "udp"){
11193                 # The UDP protocol is selected so have the UDP option selected.
11195                 $kiriwrite_presmodule->addoption("UDP", { Value => "udp", Selected => 1});
11197         } else {
11199                 # The UDP protocol is not selected.
11201                 $kiriwrite_presmodule->addoption("UDP", { Value => "udp"});
11203         }
11205         $kiriwrite_presmodule->endselectbox();
11207         $kiriwrite_presmodule->endcell();
11208         $kiriwrite_presmodule->endrow();
11210         $kiriwrite_presmodule->startrow();
11211         $kiriwrite_presmodule->addcell("tablecell1");
11212         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasename});
11213         $kiriwrite_presmodule->endcell();
11214         $kiriwrite_presmodule->addcell("tablecell2");
11215         $kiriwrite_presmodule->addinputbox("database_sqldatabase", { Size => 32, MaxLength => 32, Value => $database_sqldatabase });
11216         $kiriwrite_presmodule->endcell();
11217         $kiriwrite_presmodule->endrow();
11219         $kiriwrite_presmodule->startrow();
11220         $kiriwrite_presmodule->addcell("tablecell1");
11221         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseusername});
11222         $kiriwrite_presmodule->endcell();
11223         $kiriwrite_presmodule->addcell("tablecell2");
11224         $kiriwrite_presmodule->addinputbox("database_username", { Size => 16, MaxLength => 16, Value => $database_username });
11225         $kiriwrite_presmodule->endcell();
11226         $kiriwrite_presmodule->endrow();
11228         $kiriwrite_presmodule->startrow();
11229         $kiriwrite_presmodule->addcell("tablecell1");
11230         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasepassword});
11231         $kiriwrite_presmodule->endcell();
11232         $kiriwrite_presmodule->addcell("tablecell2");
11233         $kiriwrite_presmodule->addinputbox("database_password", { Size => 16, MaxLength => 64, Password => 1 });
11234         $kiriwrite_presmodule->addtext(" ");
11235         $kiriwrite_presmodule->addcheckbox("database_password_keep", { OptionDescription => "Keep the current password", Checked => 1 });
11236         $kiriwrite_presmodule->endcell();
11237         $kiriwrite_presmodule->endrow();
11239         $kiriwrite_presmodule->startrow();
11240         $kiriwrite_presmodule->addcell("tablecell1");
11241         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{tableprefix});
11242         $kiriwrite_presmodule->endcell();
11243         $kiriwrite_presmodule->addcell("tablecell2");
11244         $kiriwrite_presmodule->addinputbox("database_tableprefix", { Size => 16, MaxLength => 16, Value => $database_prefix });
11245         $kiriwrite_presmodule->endcell();
11246         $kiriwrite_presmodule->endrow();
11248         $kiriwrite_presmodule->endtable();
11250         $kiriwrite_presmodule->addlinebreak();
11251         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{setting}->{changesettingsbutton});
11252         $kiriwrite_presmodule->addtext(" | ");
11253         $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
11254         $kiriwrite_presmodule->addtext(" | ");
11255         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
11257         $kiriwrite_presmodule->endform();
11259         return $kiriwrite_presmodule->grab();
11263 sub kiriwrite_settings_load{
11264 #################################################################################
11265 # kiriwrite_settings_load: Load the configuration settings into the global      #
11266 # variables.                                                                    #
11267 #                                                                               #
11268 # Usage:                                                                        #
11269 #                                                                               #
11270 # kiriwrite_settings_load();                                                    #
11271 #################################################################################
11273         # Load the required Perl modules.
11275         use XML::Simple qw(XMLin);
11276         my $xsl = XML::Simple->new();
11278         # Check if the Kiriwrite configuration file exists before using it and
11279         # return an critical error if it doesn't exist.
11281         my $kiriwrite_conf_exist = kiriwrite_fileexists("kiriwrite.xml");
11283         if ($kiriwrite_conf_exist eq 1){
11285                 # The configuration really does not exist so return an critical error.
11287                 kiriwrite_critical("configfilemissing");
11289         }
11291         # Check if the Kiriwrite configuration file has valid permission settings
11292         # before using it and return an critical error if it doesn't have the
11293         # valid permission settings.
11295         my $kiriwrite_conf_permissions = kiriwrite_filepermissions("kiriwrite.xml", 1, 0);
11297         if ($kiriwrite_conf_permissions eq 1){
11299                 # The permission settings for the Kiriwrite configuration file are
11300                 # invalid, so return an critical error.
11302                 kiriwrite_critical("configfileinvalidpermissions");
11304         }
11306         # Converts the XML file into meaningful data for later on in this subroutine.
11308         my $kiriwrite_conf_file = 'kiriwrite.xml';
11309         my $kiriwrite_conf_data = $xsl->XMLin($kiriwrite_conf_file, SuppressEmpty => 1);
11311         # Go and fetch the settings and place them into a hash (that is global).
11313         %kiriwrite_config = (
11315                 "directory_data_db"             => $kiriwrite_conf_data->{settings}->{directories}->{database},
11316                 "directory_data_output"         => $kiriwrite_conf_data->{settings}->{directories}->{output},
11317                 "directory_noncgi_images"       => $kiriwrite_conf_data->{settings}->{directories}->{images},
11319                 "system_language"               => $kiriwrite_conf_data->{settings}->{language}->{lang},
11320                 "system_presmodule"             => $kiriwrite_conf_data->{settings}->{system}->{presentation},
11321                 "system_dbmodule"               => $kiriwrite_conf_data->{settings}->{system}->{database},
11322                 "system_datetime"               => $kiriwrite_conf_data->{settings}->{system}->{datetime},
11324                 "database_server"               => $kiriwrite_conf_data->{settings}->{database}->{server},
11325                 "database_port"                 => $kiriwrite_conf_data->{settings}->{database}->{port},
11326                 "database_protocol"             => $kiriwrite_conf_data->{settings}->{database}->{protocol},
11327                 "database_sqldatabase"          => $kiriwrite_conf_data->{settings}->{database}->{database},
11328                 "database_username"             => $kiriwrite_conf_data->{settings}->{database}->{username},
11329                 "database_password"             => $kiriwrite_conf_data->{settings}->{database}->{password},
11330                 "database_tableprefix"          => $kiriwrite_conf_data->{settings}->{database}->{prefix}
11332         );
11334         # Do a validation check on all of the variables that were loaded into the global configuration hash.
11336         kiriwrite_variablecheck($kiriwrite_config{"directory_data_db"}, "maxlength", 64, 0);
11337         kiriwrite_variablecheck($kiriwrite_config{"directory_data_output"}, "maxlength", 64, 0);
11338         kiriwrite_variablecheck($kiriwrite_config{"directory_noncgi_images"}, "maxlength", 512, 0);
11339         kiriwrite_variablecheck($kiriwrite_config{"directory_data_template"}, "maxlength", 64, 0);
11341         my $kiriwrite_config_language_filename = kiriwrite_variablecheck($kiriwrite_config{"system_language"}, "language_filename", "", 1);
11342         my $kiriwrite_config_presmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_presmodule"}, "module", 0, 1);
11343         my $kiriwrite_config_dbmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_dbmodule"}, "module", 0, 1);
11345         # Check if the language filename is valid and return an critical error if
11346         # they aren't.
11348         if ($kiriwrite_config_language_filename eq 1){
11350                 # The language filename is blank so return an critical error.
11352                 kiriwrite_critical("languagefilenameblank");
11354         } elsif ($kiriwrite_config_language_filename eq 2){
11356                 # The language filename is invalid so return an critical error.
11358                 kiriwrite_critical("languagefilenameinvalid");
11360         }
11362         # Check if the presentation and database module names are valid and return a critical
11363         # error if they aren't.
11365         if ($kiriwrite_config_presmodule_filename eq 1){
11367                 # The presentation module filename given is blank so return an 
11368                 # critical error.
11370                 kiriwrite_critical("presmoduleblank");
11372         }
11374         if ($kiriwrite_config_presmodule_filename eq 2){
11376                 # The presentation module filename is invalid so return an
11377                 # critical error.
11379                 kiriwrite_critical("presmoduleinvalid");
11381         }
11383         if ($kiriwrite_config_dbmodule_filename eq 1){
11385                 # The database module filename given is blank so return an
11386                 # critical error.
11388                 kiriwrite_critical("dbmoduleblank");
11390         }
11392         if ($kiriwrite_config_dbmodule_filename eq 2){
11394                 # The database module filename given is invalid so return
11395                 # an critical error.
11397                 kiriwrite_critical("dbmoduleinvalid");
11399         }
11401         # Check if the language file does exist before loading it and return an critical error
11402         # if it does not exist.
11404         my $kiriwrite_config_language_fileexists = kiriwrite_fileexists("lang/" . $kiriwrite_config{"system_language"} . ".xml");
11406         if ($kiriwrite_config_language_fileexists eq 1){
11408                 # Language file does not exist so return an critical error.
11410                 kiriwrite_critical("languagefilemissing");
11412         }
11414         # Check if the language file has valid permission settings and return an critical error if
11415         # the language file has invalid permissions settings.
11417         my $kiriwrite_config_language_filepermissions = kiriwrite_filepermissions("lang/" . $kiriwrite_config{"system_language"} . ".xml", 1, 0);
11419         if ($kiriwrite_config_language_filepermissions eq 1){
11421                 # Language file contains invalid permissions so return an critical error.
11423                 kiriwrite_critical("languagefilepermissions");
11425         }
11427         # Load the language file.
11429         $kiriwrite_lang = $xsl->XMLin("lang/" . $kiriwrite_config{"system_language"} . ".xml", SuppressEmpty => 1);
11431         # Check if the presentation module does exist before loading it and return an critical error
11432         # if the presentation module does not exist.
11434         my $kiriwrite_config_presmodule_fileexists = kiriwrite_fileexists("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm");
11436         if ($kiriwrite_config_presmodule_fileexists eq 1){
11438                 # Presentation module does not exist so return an critical error.
11440                 kiriwrite_critical("presmodulemissing");
11442         }
11444         # Check if the presentation module does have the valid permission settings and return a
11445         # critical error if the presentation module contains invalid permission settings.
11447         my $kiriwrite_config_presmodule_permissions = kiriwrite_filepermissions("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm", 1, 0);
11449         if ($kiriwrite_config_presmodule_permissions eq 1){
11451                 # Presentation module contains invalid permissions so return an critical error.
11453                 kiriwrite_critical("presmoduleinvalidpermissions");
11455         }
11457         # Check if the database module does exist before loading it and return an critical error
11458         # if the database module does not exist.
11460         my $kiriwrite_config_dbmodule_fileexists = kiriwrite_fileexists("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm");
11462         if ($kiriwrite_config_dbmodule_fileexists eq 1){
11464                 # Database module does not exist so return an critical error.
11466                 kiriwrite_critical("dbmodulemissing");
11468         }
11470         # Check if the database module does have the valid permission settings and return an
11471         # critical error if the database module contains invalid permission settings.
11473         my $kiriwrite_config_dbmodule_permissions = kiriwrite_filepermissions("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm", 1, 0);
11475         if ($kiriwrite_config_dbmodule_permissions eq 1){
11477                 # Presentation module contains invalid permissions so return an critical error.
11479                 kiriwrite_critical("dbmoduleinvalidpermissions");
11481         }
11483         # Include the Modules directory.
11485         use lib "Modules/";
11487         # Load the presentation module.
11489         my $presmodulename = "Presentation::" . $kiriwrite_config{"system_presmodule"};
11490         ($presmodulename) = $presmodulename =~ m/^(.*)$/g;
11491         eval "use " . $presmodulename;
11492         $presmodulename = "Kiriwrite::Presentation::" . $kiriwrite_config{"system_presmodule"};
11493         $kiriwrite_presmodule = $presmodulename->new();
11495         # Load the database module.
11497         my $dbmodulename = "Database::" . $kiriwrite_config{"system_dbmodule"};
11498         ($dbmodulename) = $dbmodulename =~ m/^(.*)$/g;
11499         eval "use " . $dbmodulename;
11500         $dbmodulename = "Kiriwrite::Database::" . $kiriwrite_config{"system_dbmodule"};
11501         $kiriwrite_dbmodule = $dbmodulename->new();
11503         # Load the following settings to the database module.
11505         $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"} });
11507         return;
11511 sub kiriwrite_variablecheck{
11512 #################################################################################
11513 # kiriwrite_variablecheck: Checks the variables for any invalid characters.     #
11514 #                                                                               #
11515 # Usage:                                                                        #
11516 #                                                                               #
11517 # kiriwrite_variablecheck(variablename, type, length, noerror);                 #
11518 #                                                                               #
11519 # variablename  Specifies the variable to be checked.                           #
11520 # type          Specifies what type the variable is.                            #
11521 # option        Specifies the maximum/minimum length of the variable            #
11522 #               (if minlength/maxlength is used) or if the filename should be   #
11523 #               checked to see if it is blank.                                  #
11524 # noerror       Specifies if Kiriwrite should return an error or not on         #
11525 #               certain values.                                                 #
11526 #################################################################################
11528         # Get the values that were passed to the subroutine.
11530         my ($variable_data, $variable_type, $variable_option, $variable_noerror) = @_;
11532         if ($variable_type eq "numbers"){
11534                 # Check for numbers and return an error if there is anything else than numebrs.
11536                 my $variable_data_validated = $variable_data;   # Copy the variable_data to variable_data_validated.
11537                 $variable_data_validated =~ tr/0-9//d;          # Take away all of the numbers and from the variable. 
11538                                                                 # If it only contains numbers then it should be blank.
11540                 if ($variable_data_validated eq ""){
11541                         # The validated variable is blank. So continue to the end of this section where the return function should be.
11542                 } else {
11543                         # The variable is not blank, so check if the no error value is set
11544                         # to 1 or not.
11546                         if ($variable_noerror eq 1){
11548                                 # The validated variable is not blank and the noerror
11549                                 # value is set to 1. So return an value of 1.
11550                                 # (meaning that the data is invalid).
11552                                 return 1;
11554                         } elsif ($variable_noerror eq 0) {
11556                                 # The validated variable is not blank and the noerror
11557                                 # value is set to 0.
11559                                 kiriwrite_error("invalidvariable");
11561                         } else {
11563                                 # The variable noerror value is something else
11564                                 # pther than 1 or 0. So return an error.
11566                                 kiriwrite_error("invalidvariable");
11568                         }
11570                 }
11572                 return 0;
11574         } elsif ($variable_type eq "lettersnumbers"){
11576                 # Check for letters and numbers and return an error if there is anything else other
11577                 # than letters and numbers.
11579                 my $variable_data_validated = $variable_data;   # Copy the variable_data to variable_data_validated
11580                 $variable_data_validated =~ tr/a-zA-Z0-9.//d;
11581                 $variable_data_validated =~ s/\s//g;
11583                 if ($variable_data_validated eq ""){
11584                         # The validated variable is blank. So continue to the end of this section where the return function should be.
11585                 } else {
11586                         # The variable is not blank, so check if the no error value is set
11587                         # to 1 or not.
11589                         if ($variable_noerror eq 1){
11591                                 # The validated variable is not blank and the noerror
11592                                 # value is set to 1. So return an value of 1.
11593                                 # (meaning that the data is invalid).
11595                                 return 1;
11597                         } elsif ($variable_noerror eq 0) {
11599                                 # The validated variable is not blank and the noerror
11600                                 # value is set to 0.
11602                                 kiriwrite_error("invalidvariable");
11604                         } else {
11606                                 # The variable noerror value is something else
11607                                 # pther than 1 or 0. So return an error.
11609                                 kiriwrite_error("invalidvariable");
11611                         }
11613                 }
11615                 return 0;
11617         } elsif ($variable_type eq "maxlength"){
11618                 # Check for the length of the variable, return an error if it is longer than the length specified.
11620                 # Check if the variable_data string is blank, if it is then set the variable_data_length
11621                 # to '0'.
11623                 my $variable_data_length = 0;
11625                 if (!$variable_data){
11627                         # Set variable_data_length to '0'.
11628                         $variable_data_length = 0;
11630                 } else {
11632                         # Get the length of the variable recieved.
11633                         $variable_data_length = length($variable_data);
11635                 }
11639                 if ($variable_data_length > $variable_option){
11641                         # The variable length is longer than it should be so check if
11642                         # the no error value is set 1.
11644                         if ($variable_noerror eq 1){
11646                                 # The no error value is set to 1, so return an
11647                                 # value of 1 (meaning tha the variable is
11648                                 # too long to be used).
11650                                 return 1;
11652                         } elsif ($variable_noerror eq 0){
11654                                 # The no error value is set to 0, so return
11655                                 # an error.
11657                                 kiriwrite_error("variabletoolong");
11659                         } else {
11661                                 # The no error value is something else other
11662                                 # than 0 or 1, so return an error.
11664                                 kiriwrite_error("variabletoolong");
11666                         }
11668                 } else {
11670                         # The variable length is exactly or shorter than specified, so continue to end of this section where
11671                         # the return function should be.
11673                 }
11675                 return 0;
11677         } elsif ($variable_type eq "blank"){
11678                 # Check if the variable is blank and if it is blank, then return an error.
11680                 if (!$variable_data){
11682                         # The variable data really is blank, so check what
11683                         # the no error value is set.
11685                         if ($variable_noerror eq 1){
11687                                 # The no error value is set to 1, so return
11688                                 # a value of 1 (saying that the variable was
11689                                 # blank).
11691                                 return 1;
11693                         } elsif ($variable_noerror eq 0){
11695                                 # The no error value is set to 0, so return
11696                                 # an error.
11698                                 kiriwrite_error("blankvariable");
11700                         } else {
11702                                 # The no error value is something else other
11703                                 # than 0 or 1, so return an error.
11705                                 kiriwrite_error("invalidvariable");
11707                         }
11709                 }
11711                 return 0;
11713         } elsif ($variable_type eq "filename"){
11714                 # Check for letters and numbers, if anything else than letters and numbers is there (including spaces) return
11715                 # an error.
11717                 # Check if the filename passed is blank, if it is then return with an error.
11719                 if ($variable_data eq ""){
11721                         # The filename specified is blank, so check what the
11722                         # noerror value is set.
11724                         if ($variable_noerror eq 1){
11726                                 # The no error value is set to 1 so return
11727                                 # a value of 1 (meaning that the filename
11728                                 # was blank).
11730                                 return 1;
11732                         } elsif ($variable_noerror eq 0){
11734                                 # The no error value is set to 1 so return
11735                                 # an error.
11737                                 kiriwrite_error("blankfilename");
11739                         } else {
11741                                 # The no error value is something else other
11742                                 # than 0 or 1, so return an error.
11744                                 kiriwrite_error("invalidvariable");
11746                         }
11748                 } else {
11751                 }
11753                 my $variable_data_validated = $variable_data;
11754                 $variable_data_validated =~ tr/a-zA-Z0-9\.//d;
11756                 # Check if the validated data variable is blank, if it is 
11757                 # then continue to the end of this section where the return 
11758                 # function should be, otherwise return an error.
11760                 if ($variable_data_validated eq ""){
11762                         # The validated data variable is blank, meaning that 
11763                         # it only contained letters and numbers.
11765                 } else {
11767                         # The validated data variable is not blank, meaning 
11768                         # that it contains something else, so return an error
11769                         # (or a value).
11771                         if ($variable_noerror eq 1){
11773                                 # The no error value is set to 1 so return
11774                                 # an value of 2. (meaning that the filename
11775                                 # is invalid).
11778                                 return 2;
11780                         } elsif ($variable_noerror eq 0){
11782                                 # The no error value is set to 0 so return
11783                                 # an error.
11785                                 kiriwrite_error("invalidfilename");
11787                         } else {
11789                                 # The no error value is something else other
11790                                 # than 0 or 1 so return an error.
11792                                 kiriwrite_error("invalidvariable");
11794                         }
11796                 }
11798                 return 0;
11800         } elsif ($variable_type eq "filenameindir"){
11801                 # Check if the filename is in the directory and return an
11802                 # error if it isn't.
11804                 if ($variable_data eq ""){
11806                         # The filename specified is blank, so check what the
11807                         # noerror value is set.
11809                         if ($variable_noerror eq 1){
11811                                 # The no error value is set to 1 so return
11812                                 # a value of 1 (meaning that the filename
11813                                 # was blank).
11815                                 return 1;
11817                         } elsif ($variable_noerror eq 0){
11819                                 # The no error value is set to 1 so return
11820                                 # an error.
11822                                 kiriwrite_error("blankfilename");
11824                         } else {
11826                                 # The no error value is something else other
11827                                 # than 0 or 1, so return an error.
11829                                 kiriwrite_error("invalidvariable");
11831                         }
11833                 } else {
11836                 }
11838                 # Set the following variables for later on.
11840                 my $variable_data_length = 0;
11841                 my $variable_data_char = "";
11842                 my $variable_data_validated = "";
11843                 my $variable_data_seek = 0;
11844                 my $variable_database_list = "";
11845                 my $variable_database_listcurrent = "";
11846                 my $variable_data_firstlevel = 1;
11848                 # Get the length of the variable recieved.
11850                 $variable_data_length = length($variable_data);
11852                 # Check if the database filename contains the directory command
11853                 # for up a directory level and if it is, return an error
11854                 # or return with a number.
11856                 do {
11858                         # Get a character from the filename passed to this subroutine.
11860                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
11862                         # Check if the current character is the forward slash character.
11864                         if ($variable_data_char eq "/"){
11866                                 # Check if the current directory is blank (and on the first level), or if the
11867                                 # current directory contains two dots or one dot, if it does return an error.
11869                                 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
11871                                         # Check if the noerror value is set to 1, if it is return an
11872                                         # number, else return an proper error.
11874                                         if ($variable_noerror eq 1){
11876                                                 # Page filename contains invalid characters and
11877                                                 # the no error value is set to 1 so return a 
11878                                                 # value of 2 (meaning that the page filename
11879                                                 # is invalid).
11881                                                 return 2;
11883                                         } elsif ($variable_noerror eq 0) {
11885                                                 # Page filename contains invalid characters and
11886                                                 # the no error value is set to 0 so return an
11887                                                 # error.
11889                                                 kiriwrite_error("invalidfilename");
11891                                         } else {
11893                                                 # The no error value is something else other
11894                                                 # than 0 or 1 so return an error.
11896                                                 kiriwrite_error("invalidvariable");
11898                                         }
11900                                 }
11902                                 # Append the forward slash, clear the current directory name and set
11903                                 # the first directory level value to 0.
11905                                 $variable_database_list = $variable_database_list . $variable_data_char;
11906                                 $variable_database_listcurrent = "";
11907                                 $variable_data_firstlevel = 0;
11909                         } else {
11911                                 # Append the current character to the directory name and to the current
11912                                 # directory name.
11914                                 $variable_database_list = $variable_database_list . $variable_data_char;
11915                                 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
11917                         }
11919                         # Increment the seek counter.
11921                         $variable_data_seek++;
11923                 } until ($variable_data_seek eq $variable_data_length);
11925                 return 0;
11927         } elsif ($variable_type eq "datetime"){
11928                 # Check if the date and time setting format is valid.
11930                 if ($variable_data eq ""){
11932                         if ($variable_noerror eq 1){
11934                                 # The no error value is set to 1 so return
11935                                 # a value of 1 (meaning that the date and
11936                                 # time format was blank).
11938                                 return 1;
11940                         } elsif ($variable_noerror eq 0){
11942                                 # The no error value is set to 1 so return
11943                                 # an error.
11945                                 kiriwrite_error("blankdatetimeformat");
11947                         } else {
11949                                 # The no error value is something else other
11950                                 # than 0 or 1, so return an error.
11952                                 kiriwrite_error("invalidvariable");
11954                         }
11956                 }
11958                 my $variable_data_validated = $variable_data;
11959                 $variable_data_validated =~ tr|dDmMyYhms/():[ ]||d;
11961                 if ($variable_data_validated eq ""){
11963                         # The date and time format is valid. So
11964                         # skip this bit.
11966                 } else {
11968                         # The validated data variable is not blank, meaning 
11969                         # that it contains something else, so return an error
11970                         # (or a value).
11972                         if ($variable_noerror eq 1){
11974                                 # The no error value is set to 1 so return
11975                                 # an value of 2. (meaning that the date and
11976                                 # time format was invalid).
11978                                 return 2;
11980                         } elsif ($variable_noerror eq 0){
11982                                 # The no error value is set to 0 so return
11983                                 # an error.
11985                                 kiriwrite_error("invaliddatetimeformat");
11987                         } else {
11989                                 # The no error value is something else other
11990                                 # than 0 or 1 so return an error.
11992                                 kiriwrite_error("invalidvariable");
11994                         }
11996                 }
11998                 return 0;
12000         } elsif ($variable_type eq "directory"){
12001                 # Check if the directory only contains letters and numbers and
12002                 # return an error if anything else appears.
12004                 my $variable_data_validated = $variable_data;
12005                 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12007                 if ($variable_data eq ""){
12009                         if ($variable_noerror eq 1){
12011                                 # The no error value is set to 1 so return
12012                                 # a value of 1 (meaning that the directory
12013                                 # name was blank).
12015                                 return 1;
12017                         } elsif ($variable_noerror eq 0){
12019                                 # The no error value is set to 1 so return
12020                                 # an error.
12022                                 kiriwrite_error("blankdirectory");
12024                         } else {
12026                                 # The no error value is something else other
12027                                 # than 0 or 1, so return an error.
12029                                 kiriwrite_error("invalidvariable");
12031                         }
12033                 }
12035                 if ($variable_data_validated eq ""){
12037                         # The validated data variable is blank, meaning that
12038                         # it only contains letters and numbers.
12040                 } else {
12042                         # The validated data variable is not blank, meaning 
12043                         # that it contains something else, so return an error
12044                         # (or a value).
12046                         if ($variable_noerror eq 1){
12048                                 # The no error value is set to 1 so return
12049                                 # an value of 2. (meaning that the directory
12050                                 # name is invalid).
12052                                 return 2;
12054                         } elsif ($variable_noerror eq 0){
12056                                 # The no error value is set to 0 so return
12057                                 # an error.
12059                                 kiriwrite_error("invaliddirectory");
12061                         } else {
12063                                 # The no error value is something else other
12064                                 # than 0 or 1 so return an error.
12066                                 kiriwrite_error("invalidvariable");
12068                         }
12070                 }
12072                 return 0;
12074         } elsif ($variable_type eq "language_filename"){
12076                 # The variable type is a language filename type.
12077                 # Check if the language file name is blank and 
12078                 # if it is then return an error (or value).
12080                 if ($variable_data eq ""){
12082                         # The language filename is blank so check the
12083                         # no error value and return an error (or value).
12085                         if ($variable_noerror eq 1){
12087                                 # Language filename is blank and the no error value
12088                                 # is set as 1, so return a value of 1 (saying that
12089                                 # the language filename is blank).
12091                                 return 1;
12093                         } elsif ($variable_noerror eq 0) {
12095                                 # Language filename is blank and the no error value
12096                                 # is not set as 1, so return an error.
12098                                 kiriwrite_critical("languagefilenameblank");
12100                         } else {
12102                                 # The noerror value is something else other
12103                                 # than 0 or 1 so return an error.
12105                                 kiriwrite_error("invalidvariable");
12107                         }
12109                 }
12111                 # Set the following variables for later on.
12113                 my $variable_data_length = 0;
12114                 my $variable_data_char = "";
12115                 my $variable_data_seek = 0;
12117                 # Get the length of the language file name.
12119                 $variable_data_length = length($variable_data);
12121                 do {
12123                         # Get a character from the language filename passed to this 
12124                         # subroutine and the character the seek counter value is set
12125                         # to.
12127                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12129                         # Check if the language filename contains a forward slash or a dot, 
12130                         # if the selected character is a forward slash then return an error
12131                         # (or value).
12133                         if ($variable_data_char eq "/" || $variable_data_char eq "."){
12135                                 # The language filename contains a forward slash or
12136                                 # a dot so depending on the no error value, return
12137                                 # an error or a value.
12139                                 if ($variable_noerror eq 1){
12141                                         # Language filename contains a forward slash or a dot
12142                                         # and the no error value has been set to 1, so return 
12143                                         # an value of 2 (saying that the language file name is 
12144                                         # invalid).
12146                                         return 2;
12148                                 } elsif ($variable_noerror eq 0) {
12150                                         # Language filename contains a forward slash and the no
12151                                         # error value has not been set to 1, so return an error.
12153                                         kiriwrite_critical("languagefilenameinvalid");
12155                                 } else {
12157                                         # The noerror value is something else other than
12158                                         # 1 or 0 so return an error.
12160                                         kiriwrite_error("invalidvariable");
12162                                 }
12164                         }
12166                         # Increment the seek counter.
12168                         $variable_data_seek++;
12170                 } until ($variable_data_seek eq $variable_data_length);
12172                 return 0;
12174         } elsif ($variable_type eq "pagesetting"){
12176                 # The variable type is a page setting, so check if the page
12177                 # setting has one of the valid options.
12179                 if ($variable_data eq 0 || $variable_data eq 1 || $variable_data eq 2 || $variable_data eq 3){
12181                         # The variable is one of the options above, so continue
12182                         # to the end of this section.
12184                 } else {
12186                         # The variable is not one of the options above, so check
12187                         # and see if a error or a value should be returned.
12189                         if ($variable_noerror eq 1){
12191                                 # The page setting is invalid and the no error
12192                                 # value is set 1, so return a value of 1
12193                                 # (saying that the page setting value is
12194                                 # invalid).
12196                                 return 1;
12198                         } elsif ($variable_noerror eq 0) {
12200                                 # Page setting is invalid and the no error value
12201                                 # is not 1, so return an error.
12203                                 kiriwrite_error("invalidvariable");
12205                         } else {
12207                                 # The no error value is something else other
12208                                 # than 0 or 1 so return an error.
12210                                 kiriwrite_error("invalidvariable");
12212                         }
12214                 }
12216                 return 0;
12218         } elsif ($variable_type eq "page_filename"){
12219          
12220                 # The variable type is a page filename type. Check
12221                 # if the data is empty and if it is then return an
12222                 # error (or value).
12224                 if ($variable_data eq ""){
12226                         # The filename is blank so check the no error
12227                         # value and depending on it return an value
12228                         # or an error.
12230                         if ($variable_noerror eq 1){
12232                                 # Page filename is blank and the no error value
12233                                 # is set as 1, so return a value of 1 (saying
12234                                 # the filename is blank).
12236                                 return 1;
12238                         } elsif ($variable_noerror eq 0) {
12240                                 # Page filename is blank and the no error value
12241                                 # is not 1, so return an error.
12243                                 kiriwrite_error("emptypagefilename");
12245                         } else {
12247                                 # The no error value is something else other
12248                                 # than 0 or 1 so return an error.
12250                                 kiriwrite_error("invalidvariable");
12252                         }
12253                 }
12255                 # Set the following variables for later on.
12258                 my $variable_data_length = 0;
12259                 my $variable_data_slash = 0;
12260                 my $variable_data_char = "";
12261                 my $variable_data_validated = "";
12262                 my $variable_data_seek = 0;
12263                 my $variable_database_list = "";
12264                 my $variable_database_listcurrent = "";
12265                 my $variable_data_firstlevel = 1;
12267                 # Get the length of the filename.
12269                 $variable_data_length = length($variable_data);
12271                 # Check that only valid characters should be appearing in
12272                 # the filename.
12274                 $variable_data_validated = $variable_data;
12275                 $variable_data_validated =~ tr|a-zA-Z0-9\.\/\-_||d;
12277                 if ($variable_data_validated ne ""){
12279                         # The validated variable is not blank, meaning the
12280                         # variable contains invalid characters, so return
12281                         # an error.
12283                         if ($variable_noerror eq 1){
12285                                 # Page filename contains invalid characters and
12286                                 # the no error value is set to 1 so return a 
12287                                 # value of 2 (meaning that the page filename
12288                                 # is invalid).
12290                                 return 2;
12292                         } elsif ($variable_noerror eq 0) {
12294                                 # Page filename contains invalid characters and
12295                                 # the no error value is set to 0 so return an
12296                                 # error.
12298                                 kiriwrite_error("invalidfilename");
12300                         } else {
12302                                 # The no error value is something else other
12303                                 # than 0 or 1 so return an error.
12305                                 kiriwrite_error("invalidvariable");
12307                         }
12309                 }
12311                 # Check if the page filename contains the directory command
12312                 # for up a directory level and if it is, return an error
12313                 # or return with a number.
12315                 do {
12317                         # Get a character from the filename passed to this subroutine.
12319                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12321                         # Check if the current character is the forward slash character.
12323                         if ($variable_data_char eq "/"){
12325                                 # Check if the current directory is blank (and on the first level), or if the
12326                                 # current directory contains two dots or one dot, if it does return an error.
12328                                 $variable_data_slash = 1;
12330                                 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
12332                                         # Check if the noerror value is set to 1, if it is return an
12333                                         # number, else return an proper error.
12335                                         if ($variable_noerror eq 1){
12337                                                 # Page filename contains invalid characters and
12338                                                 # the no error value is set to 1 so return a 
12339                                                 # value of 2 (meaning that the page filename
12340                                                 # is invalid).
12342                                                 return 2;
12344                                         } elsif ($variable_noerror eq 0) {
12346                                                 # Page filename contains invalid characters and
12347                                                 # the no error value is set to 0 so return an
12348                                                 # error.
12350                                                 kiriwrite_error("invalidfilename");
12352                                         } else {
12354                                                 # The no error value is something else other
12355                                                 # than 0 or 1 so return an error.
12357                                                 kiriwrite_error("invalidvariable");
12359                                         }
12361                                 }
12363                                 # Append the forward slash, clear the current directory name and set
12364                                 # the first directory level value to 0.
12366                                 $variable_database_list = $variable_database_list . $variable_data_char;
12367                                 $variable_database_listcurrent = "";
12368                                 $variable_data_firstlevel = 0;
12370                         } else {
12372                                 # Append the current character to the directory name and to the current
12373                                 # directory name.
12375                                 $variable_data_slash = 0;
12377                                 $variable_database_list = $variable_database_list . $variable_data_char;
12378                                 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
12380                         }
12382                         # Increment the seek counter.
12384                         $variable_data_seek++;
12386                 } until ($variable_data_seek eq $variable_data_length);
12388                 # Check if the last character is a slash and return an
12389                 # error if it is.
12391                 if ($variable_data_slash eq 1){
12393                         if ($variable_noerror eq 1){
12395                                 # Last character is a slash and the no error 
12396                                 # value is set to 1 so return a value of 2 
12397                                 # (meaning that the page filename is invalid).
12399                                 return 2;
12401                         } elsif ($variable_noerror eq 0) {
12403                                 # Page filename contains a slash for the last
12404                                 # character and the no error value is set to 0 
12405                                 # so return an error.
12407                                 kiriwrite_error("invalidfilename");
12409                         } else {
12411                                 # The no error value is something else other
12412                                 # than 0 or 1 so return an error.
12414                                 kiriwrite_error("invalidvariable");
12416                         }
12418                 }
12420                 return 0;
12422         } elsif ($variable_type eq "module"){
12424                 # The variable type is a presentation module filename.
12426                 # Check if the variable_data is blank and if it is
12427                 # return an error.
12429                 if ($variable_data eq ""){
12431                         # The presentation module is blank so check if an error
12432                         # value should be returned or a number should be
12433                         # returned.
12435                         if ($variable_noerror eq 1){
12437                                 # Module name is blank and the no error value 
12438                                 # is set to 1 so return a value of 2 (meaning 
12439                                 # that the page filename is blank).
12441                                 return 1;
12443                         } elsif ($variable_noerror eq 0) {
12445                                 # Module name contains is blank and the no error 
12446                                 # value is set to 0 so return an error.
12448                                 kiriwrite_critical("moduleblank");
12450                         } else {
12452                                 # The no error value is something else other
12453                                 # than 0 or 1 so return an error.
12455                                 kiriwrite_critical("invalidvalue");
12457                         }
12459                 } else {
12461                 }
12463                 my $variable_data_validated = $variable_data;
12464                 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12466                 if ($variable_data_validated eq ""){
12468                 } else {
12470                         if ($variable_noerror eq 1){
12472                                 # Module name contains invalid characters and
12473                                 # the no error value is set to 1 so return a 
12474                                 # value of 2 (meaning that the page filename
12475                                 # is invalid).
12477                                 return 2;
12479                         } elsif ($variable_noerror eq 0) {
12481                                 # Module name contains invalid characters and
12482                                 # the no error value is set to 0 so return an
12483                                 # error.
12485                                 kiriwrite_critical("moduleinvalid");
12487                         } else {
12489                                 # The no error value is something else other
12490                                 # than 0 or 1 so return an error.
12492                                 kiriwrite_error("invalidvalue");
12494                         }
12496                 }
12498                 return 0;
12500         } elsif ($variable_type eq "utf8"){
12502                 # The variable type is a UTF8 string.
12504                 if (!$variable_data){
12506                         $variable_data = "";
12508                 }
12510                 # Check if the string is a valid UTF8 string.
12512                 if ($variable_data =~ m/^(
12513                         [\x09\x0A\x0D\x20-\x7E]              # ASCII
12514                         | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
12515                         |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
12516                         | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
12517                         |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
12518                         |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
12519                         | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
12520                         |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
12521                 )*$/x){
12523                         # The UTF-8 string is valid.
12525                 } else {
12527                         # The UTF-8 string is not valid, check if the no error
12528                         # value is set to 1 and return an error if it isn't.
12530                         if ($variable_noerror eq 1){
12532                                 # The no error value has been set to 1, so return
12533                                 # a value of 1 (meaning that the UTF-8 string is
12534                                 # invalid).
12536                                 return 1; 
12538                         } elsif ($variable_noerror eq 0) {
12540                                 # The no error value has been set to 0, so return
12541                                 # an error.
12543                                 kiriwrite_error("invalidutf8");
12545                         } else {
12547                                 # The no error value is something else other than 0
12548                                 # or 1, so return an error.
12550                                 kiriwrite_error("invalidoption");
12552                         }
12554                 }
12556                 return 0;
12558         } elsif ($variable_type eq "serverprotocol"){
12560                 # Check if the server protocol is TCP or UDP and return
12561                 # an error if it isn't.
12563                 if ($variable_data ne "tcp" && $variable_data ne "udp"){
12565                         # The protocol given is not valid, check if the no
12566                         # error value is set to 1 and return an error if it isn't.
12568                         if ($variable_noerror eq 1){
12570                                 # The no error value has been set to 1, so return a
12571                                 # value of 1 (meaning that the server protocol is
12572                                 # invalid).
12574                                 return 1;
12576                         } elsif ($variable_noerror eq 0){
12578                                 # The no error value has been set to 0, so return
12579                                 # an error.
12581                                 kiriwrite_error("serverprotocolinvalid");
12583                         } else {
12585                                 # The no error value is something else other than 0
12586                                 # or 1, so return an error.
12588                                 kiriwrite_error("invalidoption");
12590                         }
12592                 }
12594                 return 0;
12596         } elsif ($variable_type eq "port"){
12598                 # Check if the port number given is less than 0 or more than 65535
12599                 # and return an error if it is.
12601                 if ($variable_data < 0 || $variable_data > 65535){
12603                         # The port number is less than 0 and more than 65535 so
12604                         # check if the no error value is set to 1 and return an
12605                         # error if it isn't.
12607                         if ($variable_noerror eq 1){
12609                                 # The no error value has been set to 1, so return a
12610                                 # value of 1 (meaning that the port number is invalid).
12612                                 return 1;
12614                         } elsif ($variable_noerror eq 0){
12616                                 # The no error value has been set to 0, so return
12617                                 # an error.
12619                                 kiriwrite_error("serverportnumberinvalid");
12621                         } else {
12623                                 # The no error value is something else other than 0
12624                                 # or 1, so return an error.
12626                                 kiriwrite_error("invalidoption");
12628                         }
12630                 }
12632                 return 0;
12634         }
12636         # Another type than the valid ones above has been specified so return an error specifying an invalid option.
12637         kiriwrite_error("invalidoption");
12641 sub kiriwrite_output_header{
12642 #################################################################################
12643 # kiriwrite_output_header: Outputs the header to the browser/stdout/console.    #
12644 #                                                                               #
12645 # Usage:                                                                        #
12646 #                                                                               #
12647 # kiriwrite_output_header(mimetype);                                            #
12648 #                                                                               #
12649 # mimetype      Specifies the mime type of the header.                          #
12650 #################################################################################
12652         # Print a header saying that the page expires immediately since the
12653         # date is set in the past.
12655         #print "Expires: Sunday, 01-Jan-06 00:00:00 GMT\n";
12656         #print "Content-Type: text/html; charset=utf-8\n";
12657         #print header();
12658         print header(-Expires=>'Sunday, 01-Jan-06 00:00:00 GMT', -charset=>'utf-8');
12659         return;
12662 sub kiriwrite_processfilename{
12663 #################################################################################
12664 # kiriwrite_processfilename: Processes a name and turns it into a filename that #
12665 # can be used by Kiriwrite.                                                     #
12666 #                                                                               #
12667 # Usage:                                                                        #
12668 #                                                                               #
12669 # kiriwrite_processfilename(text);                                              #
12670 #                                                                               #
12671 # text          Specifies the text to be used in the process for creating a new #
12672 #               filename.                                                       #
12673 #################################################################################
12675         # Get the values that have been passed to the subroutine.
12677         my ($process_text) = @_;
12679         # Define some variables that will be used later on.
12681         my $processed_stageone  = "";
12682         my $processed_stagetwo  = "";
12683         my $processed_length    = "";
12684         my $processed_char      = "";
12685         my $processed_seek      = 0;
12686         my $processed_filename  = "";
12688         # Set the first stage value of the processed filename to the
12689         # process filename and then filter it out to only contain
12690         # numbers and letters (no spaces) and then convert the
12691         # capitals to small letters.
12693         $processed_stageone = $process_text;
12694         $processed_stageone =~ tr#a-zA-Z0-9##cd;
12695         $processed_stageone =~ tr/A-Z/a-z/;
12697         # Now set the second stage value of the processed filename
12698         # to the first stage value of the processed filename and
12699         # then limit the filename down to 32 characters.
12701         $processed_stagetwo = $processed_stageone;
12702         $processed_length = length($processed_stagetwo);
12704         # Process the second stage filename into the final 
12705         # filename and do so until the seek counter is 32
12706         # or reaches the length of the second stage filename.
12708         do {
12710                 # Get the character that is the seek counter
12711                 # is set at.
12713                 $processed_char = substr($processed_stagetwo, $processed_seek, 1);
12715                 # Append to the final processed filename.
12717                 $processed_filename = $processed_filename . $processed_char;
12719                 # Increment the seek counter.
12721                 $processed_seek++;
12723         } until ($processed_seek eq 32 || $processed_seek eq $processed_length);
12725         return $processed_filename;
12729 sub kiriwrite_language{
12730 #################################################################################
12731 # kiriwrite_language: Process language strings that need certain text inserted. #
12732 #                                                                               #
12733 # Usage:                                                                        #
12734 #                                                                               #
12735 # kiriwrite_language(string, [text, text, ...]);                                #
12736 #                                                                               #
12737 # string        Specifies the string to process.                                #
12738 # text          Specifies the text to pass to the string (can be repeated many  #
12739 #               times).                                                         #
12740 #################################################################################
12742         my $string = shift;
12743         my $item;
12745         foreach $item (@_){
12747                 $string =~ s/%s/$item/;
12749         }
12751         return $string;
12755 sub kiriwrite_error{
12756 #################################################################################
12757 # kiriwrite_error: Prints out an error message.                                 #
12758 #                                                                               #
12759 # Usage:                                                                        #
12760 #                                                                               #
12761 # kiriwrite_error(errortype, errorext);                                         #
12762 #                                                                               #
12763 # errortype     Specifies the type of error that occured.                       #
12764 # errorext      Specifies the extended error information.                       #
12765 #################################################################################
12767         # Get the error type from the subroutine.
12769         my ($error_type, $error_extended) = @_;
12771         # Disconnect from the database server.
12773         if ($kiriwrite_dbmodule){
12774                 $kiriwrite_dbmodule->disconnect();
12775         }
12777         # Load the list of error messages.
12779         my ($kiriwrite_error, %kiriwrite_error);
12781         %kiriwrite_error = (
12783                 # Catch all error message.
12784                 "generic"                       => $kiriwrite_lang->{error}->{generic},
12786                 # Standard error messages.
12787                 "blankfilename"                 => $kiriwrite_lang->{error}->{blankfilename},
12788                 "blankvariable"                 => $kiriwrite_lang->{error}->{blankvariable},
12789                 "fileexists"                    => $kiriwrite_lang->{error}->{fileexists},
12790                 "internalerror"                 => $kiriwrite_lang->{error}->{internalerror},
12791                 "invalidoption"                 => $kiriwrite_lang->{error}->{invalidoption},
12792                 "invalidaction"                 => $kiriwrite_lang->{error}->{invalidaction},
12793                 "invalidfilename"               => $kiriwrite_lang->{error}->{invalidfilename},
12794                 "invalidmode"                   => $kiriwrite_lang->{error}->{invalidmode},
12795                 "invalidutf8"                   => $kiriwrite_lang->{error}->{invalidutf8},
12796                 "invalidvariable"               => $kiriwrite_lang->{error}->{invalidvariable},
12797                 "variabletoolong"               => $kiriwrite_lang->{error}->{variabletoolong},
12799                 # Specific error messages.
12800                 "blankcompiletype"              => $kiriwrite_lang->{error}->{blankcompiletype},
12801                 "blankdatabasepageadd"          => $kiriwrite_lang->{error}->{blankdatabasepageadd},
12802                 "blankdirectory"                => $kiriwrite_lang->{error}->{blankdirectory},
12803                 "blankfindfilter"               => $kiriwrite_lang->{error}->{blankfindfilter},
12804                 "blankdatetimeformat"           => $kiriwrite_lang->{error}->{blankdatetimeformat},
12805                 "databaseconnectionerror"       => $kiriwrite_lang->{error}->{databaseconnectionerror},
12806                 "databasecategoriestoolong"     => $kiriwrite_lang->{error}->{databasecategoriestoolong},
12807                 "databasecopysame"              => $kiriwrite_lang->{error}->{databasecopysame},
12808                 "databasealreadyexists"         => $kiriwrite_lang->{error}->{databasealreadyexists},
12809                 "datadirectorymissing"          => $kiriwrite_lang->{error}->{datadirectorymissing},
12810                 "datadirectoryinvalidpermissions"       => $kiriwrite_lang->{error}->{datadirectoryinvalidpermissions},
12811                 "databasedescriptiontoolong"    => $kiriwrite_lang->{error}->{databasedescriptiontoolong},
12812                 "databasefilenameinvalid"       => $kiriwrite_lang->{error}->{databasefilenameinvalid},
12813                 "databasefilenametoolong"       => $kiriwrite_lang->{error}->{databasefilenametoolong},
12814                 "databaseerror" => $kiriwrite_lang->{error}->{databaseerror},
12815                 "databaseinvalidpermissions"    => $kiriwrite_lang->{error}->{databaseinvalidpermissions},
12816                 "databasenameinvalid"           => $kiriwrite_lang->{error}->{databasenameinvalid},
12817                 "databasenametoolong"           => $kiriwrite_lang->{error}->{databasenametoolong},
12818                 "databasenameblank"             => $kiriwrite_lang->{error}->{databasenameblank},
12819                 "databasemissingfile"           => $kiriwrite_lang->{error}->{databasemissingfile},
12820                 "databasemovemissingfile"       => $kiriwrite_lang->{error}->{databasemovemissingfile},
12821                 "databasenorename"              => $kiriwrite_lang->{error}->{databasenorename},
12822                 "databasemovesame"              => $kiriwrite_lang->{error}->{databasemovesame},
12823                 "dbmoduleblank"                 => $kiriwrite_lang->{error}->{dbmoduleblank},
12824                 "dbmoduleinvalid"               => $kiriwrite_lang->{error}->{dbmoduleinvalid},
12825                 "dbdirectoryblank"              => $kiriwrite_lang->{error}->{dbdirectoryblank},
12826                 "dbdirectoryinvalid"            => $kiriwrite_lang->{error}->{dbdirectoryinvalid},
12827                 "dbmodulemissing"               => $kiriwrite_lang->{error}->{dbmodulemissing},
12828                 "filtersdatabasenotcreated"     => $kiriwrite_lang->{error}->{filtersdatabasenotcreated},
12829                 "filtersdbdatabaseerror"        => $kiriwrite_lang->{error}->{filtersdbdatabaseerror},
12830                 "filtersdbpermissions"          => $kiriwrite_lang->{error}->{filtersdbpermissions},
12831                 "filtersdbmissing"              => $kiriwrite_lang->{error}->{filtersdbmissing},
12832                 "filteridblank"                 => $kiriwrite_lang->{error}->{filteridblank},
12833                 "filterdoesnotexist"            => $kiriwrite_lang->{error}->{filterdoesnotexist},
12834                 "filteridinvalid"               => $kiriwrite_lang->{error}->{filteridinvalid},
12835                 "filteridtoolong"               => $kiriwrite_lang->{error}->{filteridtoolong},
12836                 "findfiltertoolong"             => $kiriwrite_lang->{error}->{findfiltertoolong},
12837                 "filterpriorityinvalid"         => $kiriwrite_lang->{error}->{filterpriorityinvalid},
12838                 "filterpriorityinvalidchars"    => $kiriwrite_lang->{error}->{filterpriorityinvalidchars},
12839                 "filterprioritytoolong"         => $kiriwrite_lang->{error}->{filterprioritytoolong},
12840                 "invalidcompiletype"            => $kiriwrite_lang->{error}->{invalidcompiletype},
12841                 "invalidpagenumber"             => $kiriwrite_lang->{error}->{invalidpagenumber},
12842                 "nopagesselected"               => $kiriwrite_lang->{error}->{nopagesselected},
12843                 "invaliddirectory"              => $kiriwrite_lang->{error}->{invaliddirectory},
12844                 "invaliddatetimeformat"         => $kiriwrite_lang->{error}->{invaliddatetimeformat},
12845                 "invalidlanguagefilename"       => $kiriwrite_lang->{error}->{invalidlanguagefilename},
12846                 "languagefilenamemissing"       => $kiriwrite_lang->{error}->{languagefilenamemissing},
12847                 "moduleblank"                   => $kiriwrite_lang->{error}->{moduleblank},
12848                 "moduleinvalid"                 => $kiriwrite_lang->{error}->{moduleinvalid},
12849                 "newcopydatabasedatabaseerror"  => $kiriwrite_lang->{error}->{newcopydatabasedatabaseerror},
12850                 "newcopydatabasedoesnotexist"   => $kiriwrite_lang->{error}->{newcopydatabasedoesnotexist},
12851                 "newcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newcopydatabasefileinvalidpermissions},
12852                 "newmovedatabasedatabaseerror"  => $kiriwrite_lang->{error}->{newmovedatabasedatabaseerror},
12853                 "newmovedatabasedoesnotexist"   => $kiriwrite_lang->{error}->{newmovedatabasedoesnotexist},
12854                 "newmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newmovedatabasefileinvalidpermissions},
12855                 "nodatabasesavailable"          => $kiriwrite_lang->{error}->{nodatabasesavailable},
12856                 "nodatabaseselected"            => $kiriwrite_lang->{error}->{nodatabaseselected},
12857                 "noeditvaluesselected"          => $kiriwrite_lang->{error}->{noeditvaluesselected},
12858                 "oldcopydatabasedatabaseerror"  => $kiriwrite_lang->{error}->{oldcopydatabasedatabaseerror},
12859                 "oldcopydatabasedoesnotexist"   => $kiriwrite_lang->{error}->{oldcopydatabasedoesnotexist},
12860                 "oldcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldcopydatabasefileinvalidpermissions},
12861                 "oldmovedatabasedatabaseerror"  => $kiriwrite_lang->{error}->{oldmovedatabasedatabaseerror},
12862                 "oldmovedatabasedoesnotexist"   => $kiriwrite_lang->{error}->{oldmovedatabasedoesnotexist},
12863                 "oldmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldmovedatabasefileinvalidpermissions},
12864                 "outputdirectoryblank"          => $kiriwrite_lang->{error}->{outputdirectoryblank},
12865                 "outputdirectoryinvalid"        => $kiriwrite_lang->{error}->{outputdirectoryinvalid},
12866                 "outputdirectorymissing"        => $kiriwrite_lang->{error}->{outputdirectorymissing},
12867                 "outputdirectoryinvalidpermissions"     => $kiriwrite_lang->{error}->{outputdirectoryinvalidpermissions},
12868                 "presmoduleblank"               => $kiriwrite_lang->{error}->{presmoduleblank},
12869                 "presmoduleinvalid"             => $kiriwrite_lang->{error}->{presmoduleinvalid},
12870                 "presmodulemissing"             => $kiriwrite_lang->{error}->{presmodulemissing},
12871                 "pagefilenamedoesnotexist"      => $kiriwrite_lang->{error}->{pagefilenamedoesnotexist},
12872                 "pagefilenameexists"            => $kiriwrite_lang->{error}->{pagefilenameexists},
12873                 "pagefilenameinvalid"           => $kiriwrite_lang->{error}->{pagefilenameinvalid},
12874                 "pagefilenametoolong"           => $kiriwrite_lang->{error}->{pagefilenametoolong},
12875                 "pagefilenameblank"             => $kiriwrite_lang->{error}->{pagefilenameblank},
12876                 "pagetitletoolong"              => $kiriwrite_lang->{error}->{pagetitletoolong},
12877                 "pagedescriptiontoolong"        => $kiriwrite_lang->{error}->{pagedescriptiontoolong},
12878                 "pagesectiontoolong"            => $kiriwrite_lang->{error}->{pagesectiontoolong},
12879                 "pagedatabasefilenametoolong"   => $kiriwrite_lang->{error}->{pagedatabasefilenametoolong},
12880                 "pagesettingstoolong"           => $kiriwrite_lang->{error}->{pagesettingstoolong},
12881                 "pagesettingsinvalid"           => $kiriwrite_lang->{error}->{pagesettingsinvalid},
12882                 "pagetemplatefilenametoolong"   => $kiriwrite_lang->{error}->{pagetemplatefilenametoolong},
12883                 "replacefiltertoolong"          => $kiriwrite_lang->{error}->{replacefiltertoolong},
12884                 "servernameinvalid"             => $kiriwrite_lang->{error}->{servernameinvalid},
12885                 "servernametoolong"             => $kiriwrite_lang->{error}->{servernametoolong},
12886                 "serverdatabasenameinvalid"     => $kiriwrite_lang->{error}->{serverdatabasenameinvalid},
12887                 "serverdatabasenametoolong"     => $kiriwrite_lang->{error}->{serverdatabasenametoolong},
12888                 "serverdatabaseusernameinvalid" => $kiriwrite_lang->{error}->{serverdatabaseusernameinvalid},
12889                 "serverdatabaseusernametoolong" => $kiriwrite_lang->{error}->{serverdatabaseusernametoolong},
12890                 "serverdatabasepasswordtoolong" => $kiriwrite_lang->{error}->{serverdatabasepasswordtoolong},
12891                 "serverdatabasetableprefixinvalid"      => $kiriwrite_lang->{error}->{serverdatabasetableprefixinvalid},
12892                 "serverdatabasetableprefixtoolong"      => $kiriwrite_lang->{error}->{serverdatabasetableprefixtoolong},
12893                 "serverportnumberinvalid"       => $kiriwrite_lang->{error}->{serverportnumberinvalid},
12894                 "serverportnumberinvalidcharacters"     => $kiriwrite_lang->{error}->{serverportnumberinvalidcharacters},
12895                 "serverportnumbertoolong"       => $kiriwrite_lang->{error}->{serverportnumbertoolong},
12896                 "serverprotocolnametoolong"     => $kiriwrite_lang->{error}->{serverprotocolnametoolong},
12897                 "serverprotocolinvalid"         => $kiriwrite_lang->{error}->{serverprotocolinvalid},
12898                 "templatenameblank"             => $kiriwrite_lang->{error}->{templatenameblank},
12899                 "templatefilenameexists"        => $kiriwrite_lang->{error}->{templatefilenameexists},
12900                 "templatefilenameinvalid"       => $kiriwrite_lang->{error}->{templatefilenameinvalid},
12901                 "templatedatabaseerror"         => $kiriwrite_lang->{error}->{templatedatabaseerror},
12902                 "templatedatabaseinvalidpermissions"    => $kiriwrite_lang->{error}->{templatedatabaseinvalidpermissions},
12903                 "templatedatabaseinvalidformat" => $kiriwrite_lang->{error}->{templatedatabaseinvalidformat},
12904                 "templatedirectoryblank"        => $kiriwrite_lang->{error}->{templatedirectoryblank},
12905                 "templatedirectoryinvalid"      => $kiriwrite_lang->{error}->{templatedirectoryinvalid},
12906                 "templatedatabasenotcreated"    => $kiriwrite_lang->{error}->{templatedatabasenotcreated},
12907                 "templatefilenametoolong"       => $kiriwrite_lang->{error}->{templatefilenametoolong},
12908                 "templatenametoolong"           => $kiriwrite_lang->{error}->{templatenametoolong},
12909                 "templatedescriptiontoolong"    => $kiriwrite_lang->{error}->{templatedescriptiontoolong},
12910                 "templatedatabasemissing"       => $kiriwrite_lang->{error}->{templatedatabasemissing},
12911                 "templatedoesnotexist"          => $kiriwrite_lang->{error}->{templatedoesnotexist},
12912                 "templatefilenameblank"         => $kiriwrite_lang->{error}->{templatefilenameblank},
12914         );
12916         # Check if the specified error is blank and if it is
12917         # use the generic error messsage.
12919         if (!$kiriwrite_error{$error_type}){
12920                 $error_type = "generic";
12921         }
12923         $kiriwrite_presmodule->clear();
12925         $kiriwrite_presmodule->startbox("errorbox");
12926         $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{error}, { Style => "errorheader" });
12927         $kiriwrite_presmodule->addlinebreak();
12928         $kiriwrite_presmodule->addtext($kiriwrite_error{$error_type}, { Style => "errortext" });
12930         # Check to see if extended error information was passed.
12932         if ($error_extended){
12934                 # Write the extended error information.
12936                 $kiriwrite_presmodule->addlinebreak();
12937                 $kiriwrite_presmodule->addlinebreak();
12938                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{extendederror});
12939                 $kiriwrite_presmodule->addlinebreak();
12940                 $kiriwrite_presmodule->addlinebreak();
12941                 $kiriwrite_presmodule->startbox("datalist");
12942                 $kiriwrite_presmodule->addtext($error_extended);
12943                 $kiriwrite_presmodule->endbox();
12945         }
12947         $kiriwrite_presmodule->endbox();
12949         kiriwrite_output_header;
12950         kiriwrite_output_page($kiriwrite_lang->{error}->{error}, $kiriwrite_presmodule->grab(), "none");
12952         exit;
12956 sub kiriwrite_fileexists{
12957 #################################################################################
12958 # kiriwrite_fileexists: Check if a file exists and returns a value depending on #
12959 # if the file exists or not.                                                    #
12960 #                                                                               # 
12961 # Usage:                                                                        #
12962 #                                                                               #
12963 # kiriwrite_fileexists(filename);                                               #
12964 #                                                                               #
12965 # filename      Specifies the file name to check if it exists or not.           #
12966 #################################################################################
12968         # Get the value that was passed to the subroutine.
12970         my ($filename) = @_;
12972         # Check if the filename exists, if it does, return a value of 0, else
12973         # return a value of 1, meaning that the file was not found.
12975         if (-e $filename){
12977                 # Specified file does exist so return a value of 0.
12979                 return 0;
12981         } else {
12983                 # Specified file does not exist so return a value of 1.
12985                 return 1;
12987         }
12991 sub kiriwrite_filepermissions{
12992 #################################################################################
12993 # kiriwrite_filepermissions: Check if the file permissions of a file and return #
12994 # either a 1 saying that the permissions are valid or return a 0 saying that    #
12995 # the permissions are invalid.                                                  #
12996 #                                                                               #
12997 # Usage:                                                                        #
12998 #                                                                               #
12999 # kiriwrite_filepermissions(filename, [read], [write], [filemissingskip]);      #
13000 #                                                                               #
13001 # filename              Specifies the filename to check for permissions.        #
13002 # read                  Preform check that the file is readable.                #
13003 # write                 Preform check that the file is writeable.               #
13004 # filemissingskip       Skip the check of seeing if it can read or write if the #
13005 #                       file is missing.                                        #
13006 #################################################################################
13008         # Get the values that was passed to the subroutine.
13010         my ($filename, $readpermission, $writepermission, $ignorechecks) = @_;
13012         # Check to make sure that the read permission and write permission values
13013         # are only 1 character long.
13015         kiriwrite_variablecheck($readpermission, "maxlength", 1, 0);
13016         kiriwrite_variablecheck($writepermission, "maxlength", 1, 0);
13017         kiriwrite_variablecheck($ignorechecks, "maxlength", 1, 0);
13019         my $ignorechecks_result = 0;
13021         # Check if the file should be ignored for read and write checking if 
13022         # it doesn't exist.
13024         if ($ignorechecks){
13026                 if (-e $filename){
13028                         # The file exists so the checks are to be done.
13030                         $ignorechecks_result = 0;
13032                 } else {
13034                         # The file does not exist so the checks don't need to
13035                         # be done to prevent false positives.
13037                         $ignorechecks_result = 1;
13039                 }
13041         } else {
13043                 $ignorechecks_result = 0;
13045         }
13047         # Check if the file should be checked to see if it can be read.
13049         if ($readpermission && $ignorechecks_result eq 0){
13051                 # The file should be checked to see if it does contain read permissions
13052                 # and return a 0 if it is invalid.
13054                 if (-r $filename){
13056                         # The file is readable, so do nothing.
13058                 } else {
13060                         # The file is not readable, so return 1.
13062                         return 1;
13064                 }
13066         }
13068         # Check if the file should be checked to see if it can be written.
13070         if ($writepermission && $ignorechecks_result eq 0){
13072                 # The file should be checked to see if it does contain write permissions
13073                 # and return a 0 if it is invalid.
13075                 if (-w $filename){
13077                         # The file is writeable, so do nothing.
13079                 } else {
13081                         # The file is not writeable, so return 1.
13083                         return 1;
13085                 }
13087         }
13089         # No problems have occured, so return 0.
13091         return 0;
13095 sub kiriwrite_utf8convert{
13096 #################################################################################
13097 # kiriwrite_utf8convert: Properly converts values into UTF-8 and make sure      #
13098 # that the size of the string is correct when doing input validation.           #
13099 #                                                                               #
13100 # Usage:                                                                        #
13101 #                                                                               #
13102 # utfstring     # The UTF-8 string to convert.                                  #
13103 #################################################################################
13105         # Get the values passed to the subroutine.
13107         my ($utfstring) = @_;
13109         # Load the Encode perl module.
13111         use Encode qw(decode_utf8);
13113         # Convert the string.
13115         my $finalutf8 = Encode::decode_utf8( $utfstring );
13117         return $finalutf8;
13121 sub kiriwrite_critical{
13122 #################################################################################
13123 # kiriwrite_critical: Displays an critical error message that cannot be         #
13124 # normally by the kiriwrite_error subroutine.                                   #
13125 #                                                                               #
13126 # Usage:                                                                        #
13127 #                                                                               #
13128 # errortype     Specifies the type of critical error that has occured.          #
13129 #################################################################################
13131         # Get the value that was passed to the subroutine.
13133         my ($error_type) = @_;
13135         my %error_list;
13137         # Get the error type from the errortype string.
13139         %error_list = (
13141                 # Generic critical error message.
13143                 "generic"                       => "A critical error has occured but the error is not known to Kiriwrite.",
13145                 # Specific critical error messages.
13147                 "configfilemissing"             => "The Kiriwrite configuration file is missing! Running the installer script for Kiriwrite is recommended.",
13148                 "configfileinvalidpermissions"  => "The Kiriwrite configuration file has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13149                 "dbmodulemissing"               => "The database module is missing! Running the installer script for Kiriwrite is recommended.",
13150                 "dbmoduleinvalidpermissions"    => "The database module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13151                 "dbmoduleinvalid"               => "The database module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13152                 "invalidvalue"                  => "An invalid value was passed.",
13153                 "languagefilenameblank"         => "The language filename given is blank! Running the installer script for Kiriwrite is recommended.",
13154                 "languagefilenameinvalid"       => "The language filename given is invalid! Running the installer script for Kiriwrite is recommended.",
13155                 "languagefilemissing"   => "The language filename given does not exist. Running the installer script for Kiriwrite is recommended.",
13156                 "languagefilenameinvalidpermissions"    => "The language file with the filename given has invalid permissions set. Please set the valid permission settings for the language file.",
13157                 "presmodulemissing"             => "The presentation module is missing! Running the installer script for Kiriwrite is recommended.",
13158                 "presmoduleinvalidpermissions"  => "The presentation module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the presentation module.",
13159                 "presmoduleinvalid"             => "The presentation module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13160         );
13162         if (!$error_list{$error_type}){
13164                 $error_type = "generic";
13166         }
13168         print header();
13169         print "Critical Error: " . $error_list{$error_type};
13170         exit;
13174 sub kiriwrite_output_page{
13175 #################################################################################
13176 # kiriwrite_output_page: Outputs the page to the browser/stdout/console.        #
13177 #                                                                               #
13178 # Usage:                                                                        #
13179 #                                                                               #
13180 # kiriwrite_output_page(pagetitle, pagedata, menutype);                         #
13181 #                                                                               #
13182 # pagetitle     Specifies the page title.                                       #
13183 # pagedata      Specifies the page data.                                        #
13184 # menutype      Prints out which menu to use.                                   #
13185 #################################################################################
13187         my ($pagetitle, $pagedata, $menutype) = @_;
13189         # Open the script page template and load it into the scriptpage variable,
13190         # while declaring the variable.
13192         open (my $filehandle_scriptpage, "<:utf8", 'page.html');
13193         my @scriptpage = <$filehandle_scriptpage>;
13194         binmode $filehandle_scriptpage, ':utf8';
13195         close ($filehandle_scriptpage);
13197         # Define the variables required.
13199         my $scriptpageline = "";
13200         my $pageoutput = "";
13201         my $menuoutput = "";
13203         $kiriwrite_presmodule->clear();
13205         # Print out the main menu for Kiriwrite.
13207         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{menu}->{viewdatabases} });
13208         $kiriwrite_presmodule->addtext(" | ");
13209         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page", { Text => $kiriwrite_lang->{menu}->{viewpages} });
13210         $kiriwrite_presmodule->addtext(" | ");
13211         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{menu}->{viewfilters} });
13212         $kiriwrite_presmodule->addtext(" | ");
13213         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{menu}->{viewtemplates} });
13214         $kiriwrite_presmodule->addtext(" | ");
13215         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{menu}->{compilepages} });
13216         $kiriwrite_presmodule->addtext(" | ");
13217         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{menu}->{viewsettings} });
13218         $kiriwrite_presmodule->addlinebreak();
13220         # Check what menu is going to be printed along with the default 'top' menu.
13222         if ($menutype eq "database"){
13224                 # If the menu type is database then print out the database sub-menu.
13226                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{database}->{submenu}->{viewdatabases} });
13227                 $kiriwrite_presmodule->addtext(" | ");
13228                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=new", { Text => $kiriwrite_lang->{database}->{submenu}->{adddatabase} });
13230         } elsif ($menutype eq "pages"){
13231                 # If the menu type is pages then print out the pages sub-menu.
13233                 # First, fetch the database name from the HTTP query string.
13235                 my $query = new CGI;
13236                 my $db_filename = $query->param('database');
13238                 # Check if a value has been placed in the db_filename string.
13240                 if (!$db_filename){
13242                         # As the database filename is blank, don't add an option to add a page.
13244                 } else {
13246                         # A database file has been specified so add an option to add a page to
13247                         # the selected database.
13249                         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page&action=add&database="  . $db_filename, { Text => $kiriwrite_lang->{pages}->{submenu}->{addpage} });
13251                 }
13253         } elsif ($menutype eq "filter"){
13255                 # If the menu type is filters then print out the filter sub-menu.
13257                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{submenu}->{showfilters} });
13258                 $kiriwrite_presmodule->addtext(" | ");
13259                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter&action=add", { Text => $kiriwrite_lang->{filter}->{submenu}->{addfilter} });
13261         } elsif ($menutype eq "settings"){
13263                 # If the menu type is options then print out the options sub-menu.
13265                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{submenu}->{viewsettings} });
13266                 $kiriwrite_presmodule->addtext(" | ");
13267                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings&action=edit", { Text => $kiriwrite_lang->{setting}->{submenu}->{editsettings} });
13269         } elsif ($menutype eq "template"){
13271                 # If the menu type is template then print out the template sub-menu.
13273                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{template}->{submenu}->{showtemplates} });
13274                 $kiriwrite_presmodule->addtext(" | ");
13275                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template&action=add", { Text => $kiriwrite_lang->{template}->{submenu}->{addtemplate} });
13277         } elsif ($menutype eq "compile"){
13279                 # If the menu type is compile then print out the compile sub-menu.
13281                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{submenu}->{listdatabases} });
13282                 $kiriwrite_presmodule->addtext(" | ");
13283                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=all", { Text => $kiriwrite_lang->{compile}->{submenu}->{compileall} });
13284                 $kiriwrite_presmodule->addtext(" | ");
13285                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=clean", { Text => $kiriwrite_lang->{compile}->{submenu}->{cleanoutputdirectory} });
13287         }
13289         $menuoutput = $kiriwrite_presmodule->grab();
13291         # Find <kiriwrite> tages and replace with the apporiate variables.
13293         foreach $scriptpageline (@scriptpage){
13295                 $scriptpageline =~ s/<kiriwrite:menu>/$menuoutput/g;
13296                 $scriptpageline =~ s/<kiriwrite:imagespath>/$kiriwrite_config{"directory_noncgi_images"}/g;
13297                 $scriptpageline =~ s/<kiriwrite:pagedata>/$pagedata/g;
13299                 # Check if page title specified is blank, otherwise add a page title
13300                 # to the title.
13302                 if ($pagetitle eq ""){
13303                         $scriptpageline =~ s/<kiriwrite:title>//g;
13304                 } else {
13305                         $scriptpageline =~ s/<kiriwrite:title>/ ($pagetitle)/g;
13306                 }
13308                 
13310                 # Append processed line to the pageoutput variable.
13312                 $pageoutput = $pageoutput . $scriptpageline;
13314         }
13316         binmode STDOUT, ':utf8';
13318         print $pageoutput;
13320         return;
13324 sub kiriwrite_output_xml{
13325 #################################################################################
13326 # kiriwrite_output_xml: Outputs several types of data to an XML file            #
13327 #                                                                               #
13328 # Usage:                                                                        #
13329 #                                                                               #
13330 # kiriwrite_output_xml(filename, type, settings);                               #
13331 #                                                                               #
13332 # filename      Specifies the filename of the XML file.                         #
13333 # type          Specifies the type of the XML file to be written.               #
13334 # settings              Specifies the following settings in any order.          #
13335 #                                                                               #
13336 # Settings for Kiriwrite configuration files:                                   #
13337 #                                                                               #
13338 # DatabaseDirectory     Specifies the new database directory to use.            #
13339 # OutputDirectory       Specifies the new output directory to use.              #
13340 # ImagesURIPath         Specifies the new URI path for images.                  #
13341 # DateTimeFormat        Specifies the new date and time format.                 #
13342 # SystemLanguage        Specifies the new language to use for Kiriwrite.        #
13343 # PrsentationModule     Specifies the new presentation module to use for        #
13344 #                       Kiriwrite.                                              #
13345 # DatabaseModule        Specifies the new database module to use for Kiriwrite. #
13346 # DatabaseServer        Specifies the database server to use.                   #
13347 # DaravasePort          Specifies the port the database server is running on.   #
13348 # DatabaseProtocol      Specifies the protocol the database server is using.    #
13349 # DatabaseSQLDatabase   Specifies the SQL database name to use.                 #
13350 # DatabaseUsername      Specifies the database server username.                 #
13351 # DatabasePassword      Specifies the password for the database server username.#
13352 # DatabaseTablePrefix   Specifies the table prefix to use.                      #
13353 #################################################################################
13355         # Get the variables passed from the subroutine.
13357         my $xml_filename        = shift;
13358         my $xml_type            = shift;
13359         my ($passedsettings)    = @_;
13361         # Check if filename is blank, if it is then return an error.
13363         if ($xml_filename eq ""){
13364                 # Filename is blank, return an error.
13365                 kiriwrite_error("blankfilename");
13366         }
13368         # Validate the XML filename to make sure nothing supicious is being passed.
13370         kiriwrite_variablecheck($xml_filename, "maxlength", 64, 0);
13371         kiriwrite_variablecheck($xml_filename, "filename", "", 0);
13373         # Check what type of XML data to output.
13375         if ($xml_type eq "config") {
13377                 # The type of XML data to output is a Kiriwrite configuration file.
13379                 # Get the data from the hash.
13381                 my $settings_databasedir                = $passedsettings->{"DatabaseDirectory"};
13382                 my $settings_outputdir                  = $passedsettings->{"OutputDirectory"};
13383                 my $settings_imagesuri                  = $passedsettings->{"ImagesURIPath"};
13384                 my $settings_datetime                   = $passedsettings->{"DateTimeFormat"};
13385                 my $settings_systemlanguage             = $passedsettings->{"SystemLanguage"};
13386                 my $settings_presmodule                 = $passedsettings->{"PresentationModule"};
13387                 my $settings_dbmodule                   = $passedsettings->{"DatabaseModule"};
13389                 my $settings_database_server            = $passedsettings->{"DatabaseServer"};
13390                 my $settings_database_port              = $passedsettings->{"DatabasePort"};
13391                 my $settings_database_protocol          = $passedsettings->{"DatabaseProtocol"};
13392                 my $settings_database_sqldatabase       = $passedsettings->{"DatabaseSQLDatabase"};
13393                 my $settings_database_username          = $passedsettings->{"DatabaseUsername"};
13394                 my $settings_database_password          = $passedsettings->{"DatabasePassword"};
13395                 my $settings_database_tableprefix       = $passedsettings->{"DatabaseTablePrefix"};
13397                 # Convert the password to make sure it can be read properly.
13399                 $settings_database_password =~ s/\0//g;
13400                 $settings_database_password =~ s/</&lt;/g;
13401                 $settings_database_password =~ s/>/&gt;/g;
13403                 # Convert the less than and greater than characters are there and
13404                 # convert them.
13406                 $settings_imagesuri =~ s/</&lt;/g;
13407                 $settings_imagesuri =~ s/>/&gt;/g;
13409                 # Create the XML data layout.
13411                 my $xmldata = "<?xml version=\"1.0\"?>\r\n\r\n<kiriwrite-config>\r\n";
13413                 $xmldata = $xmldata . "<!-- This file was automatically generated by Kiriwrite, please feel free to edit to your own needs. -->\r\n";
13414                 $xmldata = $xmldata . "\t<settings>\r\n\t\t<directories>\r\n";
13416                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_databasedir . "</database>\r\n";
13417                 $xmldata = $xmldata . "\t\t\t<output>" . $settings_outputdir  . "</output>\r\n";
13418                 $xmldata = $xmldata . "\t\t\t<images>" . $settings_imagesuri . "</images>\r\n";
13419                 $xmldata = $xmldata . "\t\t</directories>\r\n";
13421                 $xmldata = $xmldata . "\t\t<language>\r\n";
13422                 $xmldata = $xmldata . "\t\t\t<lang>" . $settings_systemlanguage . "</lang>\r\n";
13423                 $xmldata = $xmldata . "\t\t</language>\r\n";
13425                 $xmldata = $xmldata . "\t\t<system>\r\n";
13426                 $xmldata = $xmldata . "\t\t\t<presentation>" . $settings_presmodule . "</presentation>\r\n";
13427                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_dbmodule . "</database>\r\n";
13428                 $xmldata = $xmldata . "\t\t\t<datetime>" . $settings_datetime . "</datetime>\r\n";
13429                 $xmldata = $xmldata . "\t\t</system>\r\n";
13431                 $xmldata = $xmldata . "\t\t<database>\r\n";
13432                 $xmldata = $xmldata . "\t\t\t<server>" . $settings_database_server . "</server>\r\n";
13433                 $xmldata = $xmldata . "\t\t\t<port>" . $settings_database_port . "</port>\r\n";
13434                 $xmldata = $xmldata . "\t\t\t<protocol>" . $settings_database_protocol . "</protocol>\r\n";
13435                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_database_sqldatabase . "</database>\r\n";
13436                 $xmldata = $xmldata . "\t\t\t<username>" . $settings_database_username . "</username>\r\n";
13437                 $xmldata = $xmldata . "\t\t\t<password>" . $settings_database_password . "</password>\r\n";
13438                 $xmldata = $xmldata . "\t\t\t<prefix>" . $settings_database_tableprefix . "</prefix>\r\n";
13439                 $xmldata = $xmldata . "\t\t</database>\r\n";
13441                 $xmldata = $xmldata . "\t</settings>\r\n";
13443                 $xmldata = $xmldata . "</kiriwrite-config>";
13445                 # Open the Kiriwrite XML configuration file and write the new settings to the
13446                 # configuration file.
13448                 open(my $filehandle_xmlconfig, "> ", "kiriwrite.xml");
13449                 print $filehandle_xmlconfig $xmldata;
13450                 close($filehandle_xmlconfig);
13452         } else {
13454                 # The type of XML data is something else that is not supported by
13455                 # Kiriwrite, so return an error.
13457                 kiriwrite_error("invalidoption");
13459         }
13461         return;
13465 #################################################################################
13466 # End listing the functions needed.                                             #
13467 #################################################################################
13469 #################################################################################
13470 # Begin proper script execution.                                                #
13471 #################################################################################
13473 kiriwrite_settings_load;        # Load the configuration options.
13475 my $query = new CGI;            # Easily fetch variables from the HTTP string.
13479 # Check if a mode has been specified and if a mode has been specified, continue
13480 # and work out what mode has been specified.
13482 if ($query->param('mode')){
13483         my $http_query_mode = $query->param('mode');
13485         if ($http_query_mode eq "db"){
13487                 # If mode is 'db' (database), then check what action is required.
13489                 if ($query->param('action')){
13490                         # An action has been specified, so find out what action has been specified.
13492                         my $http_query_action = $query->param('action');
13494                         if ($http_query_action eq "edit"){
13495                                 # The edit action (which mean edit the settings for the selected database) has been specified,
13496                                 # get the database name and check if the action to edit an database has been confirmed.
13498                                 if ($query->param('database')){
13499                                         # If there is a value in the database variable check if it is a valid database. Otherwise,
13500                                         # return an error.
13502                                         my $http_query_database = $query->param('database');
13503                                 
13504                                         # Check if a value for confirm has been specified, if there is, check if it is the correct
13505                                         # value, otherwise return an error.
13507                                         if ($query->param('confirm')){
13508                                                 # A value for confirm has been specified, find out what value it is. If the value is correct
13509                                                 # then edit the database settings, otherwise return an error.
13511                                                 my $http_query_confirm = $query->param('confirm');
13513                                                 if ($http_query_confirm eq 1){
13514                                                         # Value is correct, collect the variables to pass onto the database variable.
13515         
13516                                                         # Get the variables from the HTTP query.
13517         
13518                                                         my $newdatabasename             = $query->param('databasename');
13519                                                         my $newdatabasedescription      = $query->param('databasedescription');
13520                                                         my $newdatabasefilename         = $query->param('databasefilename');
13521                                                         my $databasename                = $query->param('olddatabasename');
13522                                                         my $databasedescription         = $query->param('olddatabasedescription');
13523                                                         my $databaseshortname           = $query->param('database');
13524                                                         my $databasenotes               = $query->param('databasenotes');
13525                                                         my $databasecategories          = $query->param('databasecategories');
13527                                                         # Check the permissions of the database configuration file and return
13528                                                         # an error if the database permissions are invalid.
13529         
13530                                                         # Pass the variables to the database editing subroutine.
13532                                                         my $pagedata = kiriwrite_database_edit($databaseshortname, $databasename, $databasedescription, $newdatabasefilename, $newdatabasename, $newdatabasedescription, $databasenotes, $databasecategories, 1);
13533         
13534                                                         kiriwrite_output_header;
13535                                                         kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13536                                                         exit;
13537         
13538                                                 } else {
13539                                                         # Value is incorrect, return and error.
13540                                                         kiriwrite_error("invalidvariable");
13541                                                 } 
13543                                         }
13545                                         # Display the form for editing an database.
13546                                         my $pagedata = kiriwrite_database_edit($http_query_database);
13548                                         kiriwrite_output_header;
13549                                         kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13550                                         exit;
13552                                 } else {
13554                                         # If there is no value in the database variable, then return an error.
13555                                         kiriwrite_error("invalidvariable");
13557                                 }
13559                         } elsif ($http_query_action eq "delete"){
13561                                 # Action equested is to delete a database, find out if the user has already confirmed deletion of the database
13562                                 # and if the deletion of the database has been confirmed, delete the database.
13564                                 if ($query->param('confirm')){
13566                                         # User has confirmed to delete a database, pass the parameters to the kiriwrite_database_delete
13567                                         # subroutine.
13569                                         my $database_filename = $query->param('database');
13570                                         my $database_confirm = $query->param('confirm');
13571                                         my $pagedata = kiriwrite_database_delete($database_filename, $database_confirm);
13573                                         kiriwrite_output_header;
13574                                         kiriwrite_output_page($kiriwrite_lang->{database}->{deleteddatabase}, $pagedata, "database");
13576                                         exit;
13578                                 }
13580                                 # User has clicked on the delete link (thus hasn't confirmed the action to delete a database).
13582                                 my $database_filename = $query->param('database');
13583                                 my $pagedata = kiriwrite_database_delete($database_filename);
13585                                 kiriwrite_output_header;
13586                                 kiriwrite_output_page($kiriwrite_lang->{database}->{deletedatabase}, $pagedata, "database");
13588                                 exit;
13590                         } elsif ($http_query_action eq "new"){
13592                                 # Action requested is to create a new database, find out if the user has already entered the information needed
13593                                 # to create a database and see if the user has confirmed the action, otherwise printout a form for adding a
13594                                 # database.
13596                                 my $http_query_confirm = $query->param('confirm');
13598                                 # Check if the confirm value is correct.
13600                                 if ($http_query_confirm){
13601                                         if ($http_query_confirm eq 1){
13603                                                 # User has confirmed to create a database, pass the parameters to the 
13604                                                 # kiriwrite_database_add subroutine.
13606                                                 my $http_query_confirm = $query->param('confirm');
13608                                                 my $database_name               = $query->param('databasename');
13609                                                 my $database_description        = $query->param('databasedescription');
13610                                                 my $database_filename           = $query->param('databasefilename');
13611                                                 my $database_notes              = $query->param('databasenotes');
13612                                                 my $database_categories         = $query->param('databasecategories');
13614                                                 my $pagedata = kiriwrite_database_add($database_filename, $database_name, $database_description, $database_notes, $database_categories, $http_query_confirm);
13616                                                 kiriwrite_output_header;
13617                                                 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13618                                                 exit;
13620                                         } else {
13622                                                 # The confirm value is something else other than 1 (which it shouldn't be), so
13623                                                 # return an error.
13625                                         }
13626                                 }
13628                                 # User has clicked on the 'Add Database' link.
13630                                 my $pagedata = kiriwrite_database_add;
13632                                 kiriwrite_output_header;
13633                                 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13634                                 exit;
13636                         } else {
13637                                 # Another option has been specified, so return an error.
13639                                 kiriwrite_error("invalidaction");
13640                         }
13641                 }
13643                 # No action has been specified, do the default action of displaying a list
13644                 # of databases.
13646                 my $pagedata = kiriwrite_database_list;
13648                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
13649                 kiriwrite_output_page("", $pagedata, "database");       # Output the page to browser/console/stdout.
13650                 exit;                                   # End the script.
13652         } elsif ($http_query_mode eq "page"){
13654                 # If mode is 'page', then check what action is required.
13656                 if ($query->param('action')){
13657                         my $http_query_action = $query->param('action');
13659                         # Check if the action requested matches with one of the options below. If it does,
13660                         # go to that section, otherwise return an error.
13662                         if ($http_query_action eq "view"){
13664                                 # The action selected was to view pages from a database, 
13666                                 my $database_name       = $query->param('database');
13667                                 my $pagedata            = kiriwrite_page_list($database_name);
13669                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13670                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{viewingdatabase}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13671                                 exit;                   # End the script.
13673                         } elsif ($http_query_action eq "add"){
13675                                 # The action selected was to add a page to the selected database.
13677                                 my $http_query_confirm  = $query->param('confirm');
13679                                 if (!$http_query_confirm){
13681                                         $http_query_confirm = 0;
13683                                 }
13685                                 if ($http_query_confirm eq 1){
13686                 
13687                                         my $http_query_database         = $query->param('database');
13688                                         my $http_query_filename         = $query->param('pagefilename');
13689                                         my $http_query_name             = $query->param('pagename');
13690                                         my $http_query_description      = $query->param('pagedescription');
13691                                         my $http_query_section          = $query->param('pagesection');
13692                                         my $http_query_template         = $query->param('pagetemplate');
13693                                         my $http_query_settings         = $query->param('pagesettings');
13694                                         my $http_query_content          = $query->param('pagecontent');
13695                         
13696                                         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);
13698                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13699                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13700                                         exit;                           # End the script.
13702                                 }
13703                 
13704                                 my $http_query_database = $query->param('database');
13705                                 my $pagedata            = kiriwrite_page_add($http_query_database);
13707                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13708                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13709                                 exit;                           # End the script.
13711                         } elsif ($http_query_action eq "edit"){
13712                          
13713                                 # The action selected was to edit a page from a database.
13715                                 my $http_query_confirm = $query->param('confirm');
13717                                 if (!$http_query_confirm){
13719                                         $http_query_confirm = 0;
13721                                 }
13723                                 if ($http_query_confirm eq 1){
13725                                         # Get the needed values from the HTTP query.
13727                                         my $http_query_database         = $query->param('database');
13728                                         my $http_query_filename         = $query->param('page');
13729                                         my $http_query_newfilename      = $query->param('pagefilename');
13730                                         my $http_query_name             = $query->param('pagename');
13731                                         my $http_query_description      = $query->param('pagedescription');
13732                                         my $http_query_section          = $query->param('pagesection');
13733                                         my $http_query_template         = $query->param('pagetemplate');
13734                                         my $http_query_settings         = $query->param('pagesettings');
13735                                         my $http_query_content          = $query->param('pagecontent');
13737                                         # Pass the values to the editing pages subroutine.
13739                                         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);
13741                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13742                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages");   # Output the page to browser/console/stdout.
13743                                         exit;                           # End the script.
13745                                 }
13747                                 # Get the needed values from the HTTP query.
13749                                 my $http_query_database = $query->param('database');
13750                                 my $http_query_filename = $query->param('page');
13752                                 # Pass the values to the editing pages subroutine.
13754                                 my $pagedata = kiriwrite_page_edit($http_query_database, $http_query_filename);
13756                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13757                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages");   # Output the page to browser/console/stdout.
13758                                 exit;                           # End the script.
13761                         } elsif ($http_query_action eq "delete"){
13763                                 # The action selected was to delete a page from a database.
13765                                 my $http_query_database = $query->param('database');
13766                                 my $http_query_page     = $query->param('page');
13767                                 my $http_query_confirm  = $query->param('confirm');
13769                                 my $pagedata = "";
13770                                 my $selectionlist = "";
13772                                 if ($http_query_confirm){
13774                                         # The action has been confirmed, so try to delete the selected page
13775                                         # from the database.
13777                                         $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page, $http_query_confirm);
13779                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13780                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13781                                         exit;                           # End the script.
13783                                 }
13785                                 $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page);
13787                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13788                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13789                                 exit;                           # End the script.
13792                         } elsif ($http_query_action eq "multidelete"){
13794                                 # The action selected was to delete multiple pages from a
13795                                 # database.
13797                                 my $http_query_database = $query->param('database');
13798                                 my $http_query_confirm  = $query->param('confirm');
13800                                 my @filelist;
13801                                 my $pagedata;
13803                                 if ($http_query_confirm){
13805                                         # The action to delete multiple pages from the selected
13806                                         # database has been confirmed.
13808                                         @filelist       = kiriwrite_selectedlist();
13809                                         $pagedata       = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13811                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13812                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13813                                         exit;                           # End the script.
13815                                 }
13817                                 # Get the list of selected pages and pass them to the
13818                                 # multiple page delete subroutine.
13820                                 @filelist       = kiriwrite_selectedlist();
13821                                 $pagedata       = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13823                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13824                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13825                                 exit;                           # End the script.
13827                         } elsif ($http_query_action eq "multimove"){
13829                                 # The action selected was to move multiple pages from a
13830                                 # database.
13832                                 my $http_query_database         = $query->param('database');
13833                                 my $http_query_newdatabase      = $query->param('newdatabase');
13834                                 my $http_query_confirm          = $query->param('confirm');
13836                                 my @filelist;
13837                                 my $pagedata;
13839                                 if ($http_query_confirm){
13841                                         # The action to move multiple pages from the selected
13842                                         # database has been confirmed.
13844                                         @filelist       = kiriwrite_selectedlist();
13845                                         $pagedata       = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13847                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13848                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13849                                         exit;                           # End the script.
13851                                 }
13853                                 # Get the list of selected pages and pass them to the
13854                                 # multiple page move subroutine.
13856                                 @filelist       = kiriwrite_selectedlist();
13857                                 $pagedata       = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13859                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13860                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13861                                 exit;                           # End the script.
13863                         } elsif ($http_query_action eq "multicopy"){
13865                                 # The action selected was to copy multiple pages from a
13866                                 # database.
13868                                 my $http_query_database         = $query->param('database');
13869                                 my $http_query_newdatabase      = $query->param('newdatabase');
13870                                 my $http_query_confirm          = $query->param('confirm');
13872                                 my @filelist;
13873                                 my $pagedata;
13875                                 if ($http_query_confirm){
13877                                         # The action to copy multiple pages from the selected
13878                                         # database has been confirmed.
13880                                         @filelist       = kiriwrite_selectedlist();
13881                                         $pagedata       = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13883                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13884                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13885                                         exit;                           # End the script.
13887                                 }
13889                                 # Get the list of selected pages and pass them to the
13890                                 # multiple page copy subroutine.
13892                                 @filelist       = kiriwrite_selectedlist();
13893                                 $pagedata       = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13895                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13896                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13897                                 exit;                           # End the script.
13899                         } elsif ($http_query_action eq "multiedit"){
13901                                 # The action selected was to edit multiple pages from a
13902                                 # database.
13904                                 my $http_query_database         = $query->param('database');
13905                                 my $http_query_newsection       = $query->param('newsection');
13906                                 my $http_query_altersection     = $query->param('altersection');
13907                                 my $http_query_newtemplate      = $query->param('newtemplate');
13908                                 my $http_query_altertemplate    = $query->param('altertemplate');
13909                                 my $http_query_newsettings      = $query->param('newsettings');
13910                                 my $http_query_altersettings    = $query->param('altersettings');
13911                                 my $http_query_confirm          = $query->param('confirm');
13913                                 my @filelist;
13914                                 my $pagedata;
13916                                 if (!$http_query_confirm){
13918                                         @filelist       = kiriwrite_selectedlist();
13919                                         $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);
13921                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13922                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13923                                         exit;
13925                                 }
13927                                 # Get the list of selected pages and pass them to the
13928                                 # multiple page edit subroutine.
13930                                 @filelist       = kiriwrite_selectedlist();
13931                                 $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);
13933                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13934                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13935                                 exit;                           # End the script.
13937                         } else {
13938                                 kiriwrite_error("invalidaction");
13939                         }
13941                 } else {
13943                         # If there the action option is left blank, then print out a form where the database
13944                         # can be selected to view pages from.
13946                         my $pagedata = kiriwrite_page_list;
13948                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13949                         kiriwrite_output_page($kiriwrite_lang->{pages}->{databaseselecttitle}, $pagedata, "pages");     # Output the page to browser/console/stdout.
13950                         exit;                           # End the script.
13952                 }
13954                 # No action has been specified, do the default action of listing pages from
13955                 # the first database found in the directory.
13957         } elsif ($http_query_mode eq "filter"){
13959                 # If there's a value for action in the HTTP query, then
13960                 # get that value that is in the HTTP query.
13962                 if ($query->param('action')){
13964                         # There is a value for action in the HTTP query,
13965                         # so get the value from it.
13967                         my $http_query_action = $query->param('action');
13969                         if ($http_query_action eq "add"){
13971                                 # The action the user requested is to add a filter to the
13972                                 # filters database.
13974                                 # Check if there is a value in confirm and if there is
13975                                 # then pass it on to the new find and replace words
13976                                 # to add to the filter database.
13978                                 my $http_query_confirm = $query->param('confirm');
13980                                 if ($http_query_confirm){
13982                                         # There is a value in http_query_confirm, so pass on the
13983                                         # new find and replace words so that they can be added
13984                                         # to the filters database.
13986                                         my $http_query_findwords        = $query->param('findword');
13987                                         my $http_query_replacewords     = $query->param('replaceword');
13988                                         my $http_query_priority         = $query->param('priority');
13989                                         my $http_query_notes            = $query->param('notes');
13990                                 
13991                                         my $pagedata = kiriwrite_filter_add($http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
13993                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13994                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
13995                                         exit;                           # End the script.
13997                                 }
13999                                 my $pagedata = kiriwrite_filter_add();
14001                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14002                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14003                                 exit;                           # End the script.
14005                         } elsif ($http_query_action eq "edit"){
14007                                 # The action the user requested is to edit an filter from
14008                                 # the filters database.
14010                                 my $http_query_number = $query->param('filter');
14011                                 my $http_query_confirm = $query->param('confirm');
14013                                 if ($http_query_confirm){
14015                                         # There is a value in http_query_confirm, so pass on the
14016                                         # new find and replace words so that the filters database
14017                                         # can be edited.
14019                                         my $http_query_findwords        = $query->param('filterfind');
14020                                         my $http_query_replacewords     = $query->param('filterreplace');
14021                                         my $http_query_priority         = $query->param('priority');
14022                                         my $http_query_notes            = $query->param('notes');
14024                                         my $pagedata = kiriwrite_filter_edit($http_query_number, $http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
14026                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14027                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter");    # Output the page to browser/console/stdout.
14028                                         exit;                           # End the script.
14030                                 }
14032                                 my $pagedata = kiriwrite_filter_edit($http_query_number);
14034                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14035                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter");    # Output the page to browser/console/stdout.
14036                                 exit;                                   # End the script.
14038                         } elsif ($http_query_action eq "delete"){
14040                                 # The action the user requested is to delete an filter
14041                                 # from the filters database.
14043                                 my $http_query_number = $query->param('filter');
14044                                 my $http_query_confirm = $query->param('confirm');
14046                                 if ($http_query_confirm){
14048                                         my $pagedata = kiriwrite_filter_delete($http_query_number, $http_query_confirm);
14050                                         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14051                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14052                                         exit;                                   # End the script
14054                                 }
14056                                 my $pagedata = kiriwrite_filter_delete($http_query_number);
14058                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14059                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter");  # Output the page to browser/console/stdout.
14060                                 exit;                                   # End the script.
14062                         } else {
14064                                 # Another action was requested that was not one of 
14065                                 # the ones prcedding this catch all, so return
14066                                 # an error saying that an invalid option was
14067                                 # specified.
14069                                 kiriwrite_error("invalidaction");
14071                         }
14073                 } else {
14075                         my $pagedata = kiriwrite_filter_list();
14077                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14078                         kiriwrite_output_page($kiriwrite_lang->{filter}->{viewfilters}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14079                         exit;                           # End the script.
14081                 }
14085         } elsif ($http_query_mode eq "template"){
14087                 # Check if an action has been specified in the HTTP query.
14089                 if ($query->param('action')){
14091                         # An action has been specified in the HTTP query.
14093                         my $http_query_action = $query->param('action');
14095                         if ($http_query_action eq "delete"){
14096                                 # Get the required parameters from the HTTP query.
14098                                 my $http_query_template = $query->param('template');
14099                                 my $http_query_confirm  = $query->param('confirm');
14101                                 # Check if a value for confirm has been specified (it shouldn't)
14102                                 # be blank.
14104                                 if (!$http_query_confirm){
14105                                         # The confirm parameter of the HTTP query is blank, so
14106                                         # write out a form asking the user to confirm the deletion
14107                                         # of the selected template.
14109                                         my $pagedata = kiriwrite_template_delete($http_query_template);
14111                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14112                                         kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template");    # Output the page to browser/console/stdout.
14113                                         exit;                           # End the script.
14115                                 } else {
14117                                         my $pagedata = kiriwrite_template_delete($http_query_template, $http_query_confirm);
14119                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14120                                         kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template");    # Output the page to browser/console/stdout.
14121                                         exit;                           # End the script.
14123                                 }
14125                         } elsif ($http_query_action eq "add") {
14127                                 # Get the variables from the HTTP query in preperation for processing.
14129                                 my $http_query_confirm  = $query->param('confirm');
14130                                 my $http_query_templatelayout   = $query->param('templatelayout');
14131                                 my $http_query_templatename     = $query->param('templatename');
14132                                 my $http_query_templatedescription = $query->param('templatedescription');
14133                                 my $http_query_templatefilename = $query->param('templatefilename');
14135                                 # Check if there is a confirmed value in the http_query_confirm variable.
14137                                 if (!$http_query_confirm){
14139                                         # Since there is no confirm value, print out a form for creating a new
14140                                         # template.
14142                                         my $pagedata = kiriwrite_template_add();
14144                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14145                                         kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template");       # Output the page to browser/console/stdout.
14146                                         exit;                           # End the script.
14148                                 } else {
14150                                         # A value in the http_query_confirm value is specified, so pass the
14151                                         # variables onto the kiriwrite_template_add subroutine.
14153                                         my $pagedata = kiriwrite_template_add($http_query_templatefilename, $http_query_templatename, $http_query_templatedescription, $http_query_templatelayout, $http_query_confirm);
14155                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14156                                         kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template");       # Output the page to browser/console/stdout.
14157                                         exit;                           # End the script.
14159                                 }
14161                         } elsif ($http_query_action eq "edit") {
14163                                 # Get the required parameters from the HTTP query.
14165                                 my $http_query_templatefile     = $query->param('template');
14166                                 my $http_query_confirm          = $query->param('confirm');
14168                                 # Check to see if http_query_confirm has a value of '1' in it and
14169                                 # if it does, edit the template using the settings providied.
14171                                 if (!$http_query_confirm){
14173                                         # Since there is no confirm value, open the template configuration
14174                                         # file and the template file itself then print out the data on to
14175                                         # the form.
14177                                         my $pagedata = kiriwrite_template_edit($http_query_templatefile);
14178                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14179                                         kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template");      # Output the page to browser/console/stdout.
14180                                         exit;                           # End the script.
14182                                 } elsif ($http_query_confirm eq 1) {
14184                                         # Since there is a confirm value of 1, the user has confirm the
14185                                         # action of editing of a template so get the other variables 
14186                                         # that were also sent and pass the variables to the subroutine.
14188                                         my $http_query_newfilename      = $query->param('newfilename');
14189                                         my $http_query_newname          = $query->param('newname');
14190                                         my $http_query_newdescription   = $query->param('newdescription');
14191                                         my $http_query_newlayout        = $query->param('newlayout');
14193                                         my $pagedata = kiriwrite_template_edit($http_query_templatefile, $http_query_newfilename, $http_query_newname, $http_query_newdescription, $http_query_newlayout, $http_query_confirm);
14194                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14195                                         kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template");      # Output the page to browser/console/stdout.
14196                                         exit;                           # End the script.
14198                                 } else {
14200                                         # Another confirm value is there instead of '0' or '1'. Return
14201                                         # an error saying it is invalid.
14203                                         kiriwrite_error("invalidvariable");
14205                                 }
14207                         } else {
14209                                 # Another action was specified and was not one of the ones above, so
14210                                 # return an error.
14212                                 kiriwrite_error("invalidaction");
14214                         }
14216                 } else {
14218                         # If the action option is left blank, then print out a form where the list
14219                         # of templates are available.
14221                         my $pagedata = kiriwrite_template_list;
14223                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14224                         kiriwrite_output_page($kiriwrite_lang->{template}->{viewtemplates}, $pagedata, "template");     # Output the page to browser/console/stdout.
14225                         exit;                           # End the script.
14227                 }
14229         } elsif ($http_query_mode eq "compile"){
14231                 # The mode selected is to compile pages from databases.
14233                 # If the action option is left blank, then print out a form where the list
14234                 # of databases to compile are available.
14236                 if ($query->param('action')){
14238                         my $http_query_action = $query->param('action');
14240                         if ($http_query_action eq "compile"){
14242                                 # The specified action is to compile the pages, check if the
14243                                 # action to compile the page has been confirmed.
14245                                 my $http_query_confirm  = $query->param('confirm');
14246                                 my $http_query_type     = $query->param('type');
14248                                 # If it is blank, set the confirm value to 0.
14250                                 if (!$http_query_confirm){
14252                                         # The http_query_confirm variable is uninitalised, so place a
14253                                         # '0' (meaning an unconfirmed action).
14255                                         $http_query_confirm = 0;
14257                                 }
14259                                 # If the compile type is blank then return an error.
14261                                 if (!$http_query_type){
14263                                         # Compile type is blank so return an error.
14265                                         kiriwrite_error("blankcompiletype");
14267                                 }
14269                                 if ($http_query_type eq "multiple"){
14271                                         if ($http_query_confirm eq 1){
14273                                                 # The action to compile the pages has been confirmed so
14274                                                 # compile the pages.
14276                                                 my @selectedlist = kiriwrite_selectedlist();
14277                                                 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14279                                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14280                                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14281                                                 exit;                           # End the script.
14283                                         } else {
14285                                                 # The action to compile the pages has not been confirmed
14286                                                 # so write a form asking the user to confirm the action
14287                                                 # of compiling the pages.
14289                                                 my @selectedlist = kiriwrite_selectedlist();
14290                                                 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14292                                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14293                                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compileselecteddatabases}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14294                                                 exit;                           # End the script.
14296                                         }
14298                                 } elsif ($http_query_type eq "single"){
14300                                         my $http_query_database = $query->param('database');
14301                                         my @selectedlist;
14302                                         $selectedlist[0] = $http_query_database;
14303                                         my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14305                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14306                                         kiriwrite_output_page($kiriwrite_lang->{compile}->{compiledatabase}, $pagedata, "compile");
14307                                         exit;                           # End the script.
14309                                 } else {
14311                                         kiriwrite_error("invalidcompiletype");
14313                                 }
14315                         } elsif ($http_query_action eq "all"){
14317                                 # The selected action is to compile all of the databases
14318                                 # in the database directory. Check if the action to
14319                                 # compile all of the databases has been confirmed.
14321                                 my $http_query_confirm = $query->param('confirm');
14323                                 if (!$http_query_confirm){
14325                                         # The http_query_confirm variable is uninitalised, so place a
14326                                         # '0' (meaning an unconfirmed action).
14328                                         $http_query_confirm = 0;
14330                                 }
14332                                 if ($http_query_confirm eq 1){
14334                                         # The action to compile all the databases has been confirmed.
14336                                 }
14338                                 my $pagedata = kiriwrite_compile_all();
14340                                 kiriwrite_output_header;                        # Output the header to browser/console/stdout.
14341                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilealldatabases}, $pagedata, "compile");
14342                                 exit;
14344                         } elsif ($http_query_action eq "clean") {
14346                                 # The selected action is to clean the output directory.
14347                                 # Check if the action to clean the output directory
14348                                 # has been confirmed.
14350                                 my $http_query_confirm = $query->param('confirm');
14352                                 if (!$http_query_confirm){
14354                                         # The http_query_confirm variable is uninitalised, so place a
14355                                         # '0' (meaning an unconfirmed action).
14357                                         $http_query_confirm = 0;
14359                                 }
14361                                 if ($http_query_confirm eq 1){
14363                                         # The action to clean the output directory has been confirmed.
14365                                         my $pagedata = kiriwrite_compile_clean($http_query_confirm);
14367                                         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14368                                         kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14369                                         exit;                                   # End the script.
14370                         
14371                                 }
14373                                 # The action to clean the output directory is not
14374                                 # confirmed, so write a page asking the user
14375                                 # to confirm cleaning the output directory.
14377                                 my $pagedata = kiriwrite_compile_clean();
14379                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14380                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14381                                 exit;                                   # End the script.
14383                         } else {
14385                                 # The action specified was something else other than those
14386                                 # above, so return an error.
14388                                 kiriwrite_error("invalidaction");
14390                         }
14391                 }
14393                 my $pagedata = kiriwrite_compile_list;
14395                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14396                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14397                 exit;                                   # End the script.
14399         } elsif ($http_query_mode eq "settings"){
14401                 # The mode selected is view (and change settings).
14403                 # If the action value has been left blank, then view the list of
14404                 # current settings.
14406                 if ($query->param('action')){
14407                         my $http_query_action = $query->param('action');
14409                         if ($http_query_action eq "edit"){
14411                                 # The action specified is to edit the settings. Check if the action
14412                                 # to edit the settings has been confirmed.
14414                                 my $http_query_confirm = $query->param('confirm');
14416                                 if (!$http_query_confirm){
14418                                         # The confirm value is blank, so set it to 0.
14420                                         $http_query_confirm = 0;
14422                                 }
14424                                 if ($http_query_confirm eq 1){
14426                                         # The action to edit the settings has been confirmed. Get the
14427                                         # required settings from the HTTP query.
14429                                         my $http_query_database         = $query->param('databasedir');
14430                                         my $http_query_output           = $query->param('outputdir');
14431                                         my $http_query_imagesuri        = $query->param('imagesuripath');
14432                                         my $http_query_datetimeformat   = $query->param('datetime');
14433                                         my $http_query_systemlanguage   = $query->param('language');
14434                                         my $http_query_presmodule       = $query->param('presmodule');
14435                                         my $http_query_dbmodule         = $query->param('dbmodule');
14437                                         my $http_query_database_server          = $query->param('database_server');
14438                                         my $http_query_database_port            = $query->param('database_port');
14439                                         my $http_query_database_protocol        = $query->param('database_protocol');
14440                                         my $http_query_database_sqldatabase     = $query->param('database_sqldatabase');
14441                                         my $http_query_database_username        = $query->param('database_username');
14442                                         my $http_query_database_passwordkeep    = $query->param('database_password_keep');
14443                                         my $http_query_database_password        = $query->param('database_password');
14444                                         my $http_query_database_tableprefix     = $query->param('database_tableprefix');
14446                                         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 });
14448                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14449                                         kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14450                                         exit;                           # End the script.
14452                                 }
14454                                 # The action to edit the settings has not been confirmed.
14456                                 my $pagedata = kiriwrite_settings_edit;
14458                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14459                                 kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14460                                 exit;                           # End the script.
14462                         } else {
14464                                 # The action specified was something else other than those
14465                                 # above, so return an error.
14467                                 kiriwrite_error("invalidaction");
14469                         }
14471                 }
14473                 # No action has been specified, so print out the list of settings currently being used.
14475                 my $pagedata = kiriwrite_settings_view;
14477                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14478                 kiriwrite_output_page($kiriwrite_lang->{setting}->{viewsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14479                 exit;                                   # End the script.
14481         } else {
14482                 # Another mode has been specified than the ones above, so return an error saying that
14483                 # an invalid option was specified.
14485                 kiriwrite_error("invalidmode");
14486         }
14488 } else {
14490         # No mode has been specified, so print the default "first-run" view of the
14491         # database list.
14493         my $pagedata = kiriwrite_database_list;
14495         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14496         kiriwrite_output_page("", $pagedata, "database");       # Output the page to browser/console/stdout.
14497         exit;                                   # End the script.
14501 __END__
14503 =head1 NAME
14505 Kiriwrite
14507 =head1 DESCRIPTION
14509 Web-based webpage compiler.
14511 =head1 AUTHOR
14513 Steve Brokenshire <sbrokenshire@xestia.co.uk>
14515 =head1 USAGE
14517 This perl script is intended to be used on a web server which has CGI with Perl support or with mod_perl support.
14519 =head1 DOCUMENTATION
14521 For more information on how to use Kiriwrite, please see the documentation that was included with Kiriwrite.
14523 - From the Xestia Documentation website: http://documentation.xestia.co.uk and click on the Kiriwrite link on the page.
14525 - From the Documentation directory from the Kiriwrite source packages (.tar/.tar.gz/.tar.bz2).
14527 - 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