Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Some more changes made.
[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->addreset($kiriwrite_lang->{common}->{restorecurrent});
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 filter database exists then get the list of filters,
7052         # otherwise write a message saying that the filter 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 filter 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 filter database and
7118                 # write a message if there isn't.
7120                 if ($filter_count eq 0){
7122                         # There are no filters in the filter 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 filter 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 filter 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 filter 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                 # filter 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 #                       filter 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 filter 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 filter 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 filter 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 filter 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 filter 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 filter 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{"TemplateLayout"};
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                                         $page_final = $templatefiles{$page_template}{template};
8811                                         if (!$page_final){
8812                                                 $page_final = "";
8813                                         }
8815                                         $page_final =~ s/<kiriwrite:pagecontent>/$page_content/g;
8817                                 }
8819                                 # Create the combined page title (if needed).
8821                                 if ($page_settings eq 0 || $page_settings > 3){
8823                                         # Don't use page name or section name.
8825                                         $page_final =~ s/<kiriwrite:pagetitle>//g;
8827                                 } elsif ($page_settings eq 1){
8829                                         # Use the page name and section name.
8831                                         $page_autotitle = "(" . $page_section . " - " . $page_name . ")";
8832                                         $page_title = $page_section . " - " . $page_name;
8833                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_title/g;
8835                                 } elsif ($page_settings eq 2){
8837                                         # Use the page name only.
8839                                         $page_autotitle = "(" . $page_name . ")";
8840                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_name/g;
8842                                 } elsif ($page_settings eq 3){
8844                                         # Use the section name only.
8846                                         if ($page_section){
8847                                                 $page_autotitle = "(" . $page_section . ")";
8848                                         }
8849                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_section/g;
8851                                 }
8853                                 # Check if the section name is not blank and
8854                                 # place brackets inbetween if it is.
8856                                 if ($page_section){
8858                                         $page_autosection = "(" . $page_section . ")";
8860                                 }
8862                                 # Replace each <kiriwrite> value with the apporiate page
8863                                 # values.
8865                                 $page_final =~ s/<kiriwrite:pagename>/$page_name/g;
8866                                 $page_final =~ s/<kiriwrite:pagedescription>/$page_description/g;
8867                                 $page_final =~ s/<kiriwrite:pagesection>/$page_section/g;
8868                                 $page_final =~ s/<kiriwrite:autosection>/$page_autosection/g;
8869                                 $page_final =~ s/<kiriwrite:autotitle>/$page_autotitle/g;
8871                                 # Process the filters on the page data.
8873                                 if ($filters_skip eq 0){
8875                                         $filters_count = 0;
8877                                         foreach $filter_find (@findfilter){
8879                                                 # Get the replace filter and process each
8880                                                 # filter on the page.
8882                                                 $filter_replace = $replacefilter[$filters_count];
8883                                                 $page_final =~ s/$filter_find/$filter_replace/g;
8884                                                 $filters_count++;
8886                                         }
8888                                 }
8890                                 # Process the page filename and check what directories
8891                                 # need to be created.
8893                                 $page_filename_length = int(length($page_filename));
8895                                 do {
8897                                         $page_filename_char = substr($page_filename, $page_filename_seek, 1);
8899                                         # Check if a forward slash appears and add it to
8900                                         # the list of directories array.
8902                                         if ($page_filename_char eq '/'){
8904                                                 # Append the directory name to the list of
8905                                                 # directories array.
8907                                                 $pagedirectories[$page_filename_dircount] = $page_filename_directory;
8908                                                 $page_filename_directory        = "";
8909                                                 $page_filename_char             = "";
8910                                                 $page_filename_dircount++;
8912                                         } else {
8914                                                 # Append the character to the directory/filename.
8916                                                 $page_filename_directory = $page_filename_directory . $page_filename_char;
8918                                         }
8920                                         $page_filename_seek++;
8922                                 } until ($page_filename_length eq $page_filename_seek);
8924                                 foreach $page_directory_name (@pagedirectories){
8926                                         # Check if the directory name is undefined and if it
8927                                         # is then set it blank.
8929                                         if (!$page_directory_name){
8930                                                 $page_directory_name = "";
8931                                         }
8933                                         if (!$page_directory_path){
8934                                                 $page_directory_path = "";
8935                                         }
8937                                         # Check if the directory exists and create 
8938                                         # the directory if it doesn't exist.
8940                                         $page_directory_path = $page_directory_path . '/' . $page_directory_name;
8942                                         mkdir($kiriwrite_config{"directory_data_output"} . '/' . $page_directory_path);
8944                                 }
8946                                 # Check if the file already exists and if it does then check
8947                                 # the permissions of the file and return an error if the
8948                                 # permissions set are invalid.
8950                                 $page_filename_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"} . '/' . $page_filename);        
8952                                 if ($page_filename_exists eq 0){
8954                                         # The page filename exists, so check if the permissions given are
8955                                         # valid.
8957                                         $page_filename_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"} . '/' . $page_filename, 1, 1);
8959                                         if ($page_filename_permissions eq 1){
8961                                                 # The file has invalid permissions set.
8963                                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pageinvalidpermissions}, $page_filename));
8964                                                 $kiriwrite_presmodule->addlinebreak();
8965                                                 $error_count++;
8967                                                 # Reset certain values.
8969                                                 $page_autotitle = "";
8970                                                 $page_autosection = "";
8971                                                 $page_filename_seek = 0;
8972                                                 $page_filename_dircount = 0;
8974                                                 $page_filename_directory = "";
8975                                                 $page_directory_path = "";
8976                                                 $page_directory_name = "";
8977                                                 @pagedirectories = ();
8978                                                 
8979                                                 next;
8981                                         }
8983                                 }
8985                                 # Reset certain values.
8987                                 $page_autotitle = "";
8988                                 $page_autosection = "";
8989                                 $page_filename_seek = 0;
8990                                 $page_filename_dircount = 0;
8992                                 $page_filename_directory = "";
8993                                 $page_directory_path = "";
8994                                 $page_directory_name = "";
8995                                 @pagedirectories = ();
8997                                 # Write the file to the output directory.
8999                                 ($page_filename) = $page_filename =~ m/^(.*)$/g;
9000                                 ($kiriwrite_config{"directory_data_output"}) = $kiriwrite_config{"directory_data_output"} =~ m/^(.*)$/g;
9001                                 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);
9003                                 if (!$page_final){
9005                                         $page_final = "";
9007                                 }
9009                                 binmode $filehandle_page, ':utf8';
9010                                 print $filehandle_page $page_final;
9011                                 close($filehandle_page);
9013                                 # Write a message saying the page has been compiled. Check
9014                                 # to see if the page name is blank and write a message
9015                                 # saying there's no page name.
9017                                 if (!$page_name){
9018                                         $kiriwrite_presmodule->addtext($information_prefix . ' ');
9019                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
9020                                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledpageblankname}, $page_filename));
9021                                 } else {
9022                                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compiledpage}, $page_name, $page_filename));
9023                                 }
9026                                 $kiriwrite_presmodule->addlinebreak();
9027                                 $pages_count++;
9029                         }
9031                         # Write a message saying that the database has
9032                         # been processed.
9034                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefinish}, $database_name));
9035                         $kiriwrite_presmodule->addlinebreak();
9037                 }
9039                 # Disconnect from the database server.
9041                 $kiriwrite_dbmodule->disconnect();
9043                 $kiriwrite_presmodule->addhorizontalline();
9044                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compileresults}, $pages_count, $error_count, $warning_count));
9045                 $kiriwrite_presmodule->endbox();
9046                 $kiriwrite_presmodule->addlinebreak();
9047                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9049                 return $kiriwrite_presmodule->grab();
9051         } elsif ($confirm eq 0){
9053                 # The action to compile the databases has
9054                 # not been confirmed so check what type
9055                 # is being used.
9057                 if ($type eq "single"){
9059                         # The type is a single database selected so
9060                         # process that database.
9062                         # Define some variables for later.
9064                         my %database_info; 
9065                         my $database_filename_check;
9066                         my $database_maxlength_check;
9067                         my $databasefilename;
9068                         my $database_name;
9070                         # Check that the database name and length are
9071                         # valid and return an error if they aren't.
9073                         $databasefilename = $selectedlist[0];
9075                         # Connect to the database server.
9077                         $kiriwrite_dbmodule->connect();
9079                         # Check if any errors occured while connecting to the database server.
9081                         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9083                                 # A database connection error has occured so return
9084                                 # an error.
9086                                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9088                         }
9090                         # Select the database.
9092                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasefilename });
9094                         # Check if any errors had occured while selecting the database.
9096                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9098                                 # The database does not exist, so return an error.
9100                                 kiriwrite_error("databasemissingfile");
9102                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9104                                 # The database has invalid permissions set, so return
9105                                 # an error.
9107                                 kiriwrite_error("databaseinvalidpermissions");
9109                         }
9111                         # Get information about the database.
9113                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9115                         # Check if any error occured while getting the database information.
9117                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9119                                 # A database error has occured so return an error and
9120                                 # also the extended error information.
9122                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
9124                         };
9126                         $database_name = $database_info{"DatabaseName"};
9128                         # Disconnect from the database server.
9130                         $kiriwrite_dbmodule->disconnect();
9132                         # Write out a form asking the user to confirm if the
9133                         # user wants to compile the selected database.
9135                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabase}, { Style => "pageheader" });
9136                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9137                         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9138                         $kiriwrite_presmodule->addhiddendata("action", "compile");
9139                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9140                         $kiriwrite_presmodule->addhiddendata("id[1]", $databasefilename);
9141                         $kiriwrite_presmodule->addhiddendata("name[1]", "on");
9142                         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9143                         $kiriwrite_presmodule->addlinebreak();
9144                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledatabasemessage}, $database_name));
9145                         $kiriwrite_presmodule->addlinebreak();
9146                         $kiriwrite_presmodule->addlinebreak();
9147                         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compiledatabasebutton});
9148                         $kiriwrite_presmodule->addtext(" | ");
9149                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9151                         return $kiriwrite_presmodule->grab();
9153                 } elsif ($type eq "multiple"){
9155                         # The type is multiple databases selected
9156                         # so process each database.
9158                         # Define some variables for later.
9160                         my %database_list;
9161                         my $databasename;
9162                         my $database;
9163                         my $database_filename_check;
9164                         my $database_maxlength_check;
9165                         my $database_count = 0;
9166                         my $database_info_name;
9168                         # Connect to the database server.
9170                         $kiriwrite_dbmodule->connect();
9172                         # Check if any errors occured while connecting to the database server.
9174                         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9176                                 # A database connection error has occured so return
9177                                 # an error.
9179                                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9181                         }
9183                         foreach $databasename (@selectedlist){
9185                                 # Check if the database is in the database
9186                                 # directory and skip it if it isn't.
9187  
9188                                 $database_filename_check        = kiriwrite_variablecheck($databasename, "filename", "", 1);
9189                                 $database_maxlength_check       = kiriwrite_variablecheck($databasename, "maxlength", 32, 1);
9190  
9191                                 if ($database_filename_check ne 0 || $database_maxlength_check ne 0){
9192  
9193                                         # The database filename given is invalid or
9194                                         # the database filename given is too long
9195                                         # so process the next database.
9196  
9197                                         next;
9198  
9199                                 }
9201                                 # Select the database to add the page to.
9203                                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasename });
9205                                 # Check if any errors had occured while selecting the database.
9207                                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9209                                         # The database does not exist, so process the next database.
9211                                         next;
9213                                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9215                                         # The database has invalid permissions set, so process
9216                                         # the next database.
9218                                         next;
9220                                 }
9222                                 # Get information about the database.
9224                                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9226                                 # Check if any error occured while getting the database information.
9228                                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9230                                         # A database error has occured so process the next
9231                                         # database.
9233                                         next;
9235                                 };
9237                                 $database_list{$database_count}{Name}           = $database_info{"DatabaseName"};
9238                                 $database_list{$database_count}{Filename}       = $databasename;
9240                                 $database_count++;
9242                         }
9244                         # Check if any databases are available to be compiled.
9246                         if ($database_count eq 0){
9248                                 # No databases are available to be compiled.
9250                                 kiriwrite_error("nodatabaseselected");
9252                         }
9254                         # Write out the form for compiling the database.
9256                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabases}, { Style => "pageheader" });
9257                         $kiriwrite_presmodule->addlinebreak();
9258                         $kiriwrite_presmodule->addlinebreak();
9259                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9260                         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9261                         $kiriwrite_presmodule->addhiddendata("action", "compile");
9262                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9263                         $kiriwrite_presmodule->addhiddendata("count", $database_count);
9264                         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9265                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabasesmessage});
9266                         $kiriwrite_presmodule->addlinebreak();
9267                         $kiriwrite_presmodule->addlinebreak();
9268                         $kiriwrite_presmodule->startbox("datalist");
9270                         $database_count = 0;
9272                         # write out the list of databases to compile.
9274                         foreach $database (keys %database_list){
9276                                 $database_count++;
9278                                 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9279                                 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9281                                 # Check if the database name is undefined and if it is
9282                                 # then write a message saying the database name is blank.
9284                                 if (!$database_list{$database}{Name}){
9285                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{compile}->{blankdatabasename});
9286                                 } else {
9287                                         $kiriwrite_presmodule->addtext($database_list{$database}{Name});
9288                                 }
9290                                 $kiriwrite_presmodule->addlinebreak();
9292                         }
9294                         $kiriwrite_presmodule->endbox();
9296                         # Disconnect from the database server.
9298                         $kiriwrite_dbmodule->disconnect();
9300                         $kiriwrite_presmodule->addlinebreak();
9301                         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselecteddatabasesbutton});
9302                         $kiriwrite_presmodule->addtext(" | ");
9303                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9304                         $kiriwrite_presmodule->endform();
9306                         return $kiriwrite_presmodule->grab();
9308                 } else {
9310                         # The type is something else other than
9311                         # single or multiple, so return an error.
9313                         kiriwrite_error("invalidvariable");
9315                 }
9317         } else {
9319                 # The confirm value is neither 0 or 1, so
9320                 # return an error.
9322                 kiriwrite_error("invalidvariable");
9324         }
9328 sub kiriwrite_compile_all{
9329 #################################################################################
9330 # kiriwrite_compile_all: Compile all of the databases in the database           #
9331 # directory.                                                                    #
9332 #                                                                               #
9333 # Usage:                                                                        #
9334 #                                                                               #
9335 # kiriwrite_compile_all();                                                      #
9336 #################################################################################
9338         # Connect to the database server.
9340         $kiriwrite_dbmodule->connect();
9342         # Check if any errors occured while connecting to the database server.
9344         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9346                 # A database connection error has occured so return
9347                 # an error.
9349                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9351         }
9353         # Get the list of available databases.
9355         my @database_list = $kiriwrite_dbmodule->getdblist();
9357         # Check if any errors occured while getting the databases.
9359         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9361                 # The database directory is missing so return an error.
9363                 kiriwrite_error("datadirectorymissing");
9365         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9367                 # The database directory has invalid permissions set so return
9368                 # an error.
9370                 kiriwrite_error("datadirectoryinvalidpermissions");
9372         }
9374         # Define some variables for later.
9376         my $database;
9377         my $database_name_filename_check;
9378         my $database_count              = 0;
9380         # Check the list of databases to compile to see if it is blank,
9381         # if it is then return an error.
9383         if (!@database_list){
9385                 # The list of database is blank so return an error.
9387                 kiriwrite_error("nodatabasesavailable");
9389         }
9391         # Write out a form for confirming the action to compile all of the databases.
9393         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabases}, { Style => "pageheader" });
9394         $kiriwrite_presmodule->addlinebreak();
9395         $kiriwrite_presmodule->addlinebreak();
9397         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9398         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9399         $kiriwrite_presmodule->addhiddendata("action", "compile");
9400         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9402         foreach $database (@database_list){
9404                 # Check if the database filename is blank.
9406                 if ($database eq ""){
9408                         # The database filename is blank so process
9409                         # the next database.
9411                         next;
9413                 }
9415                 # Check if the database filename is valid before
9416                 # using the database.
9418                 $database_name_filename_check   = kiriwrite_variablecheck($database, "filename", 0, 1);
9420                 if ($database_name_filename_check ne 0){
9422                         # The database filename is invalid so process
9423                         # the next database.
9425                         next;
9427                 }
9429                 $database_count++;
9430                 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database);
9431                 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9433         }
9435         $kiriwrite_presmodule->addhiddendata("count", $database_count);
9437         # Disconnect from the database server.
9439         $kiriwrite_dbmodule->disconnect();
9441         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabasesmessage});
9442         $kiriwrite_presmodule->addlinebreak();
9443         $kiriwrite_presmodule->addlinebreak();
9445         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9446         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compilealldatabasesbutton});
9447         $kiriwrite_presmodule->addtext(" | ");
9448         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9450         return $kiriwrite_presmodule->grab();
9454 sub kiriwrite_selectedlist{
9455 #################################################################################
9456 # kiriwrite_page_selectedlist: Get the list of selected pages to use.           #
9457 #                                                                               #
9458 # Usage:                                                                        #
9459 #                                                                               #
9460 # kiriwrite_page_selectedlist();                                                #
9461 #################################################################################
9463         # Load the required Perl modules.
9465         my $query = new CGI;
9467         my $count       = $query->param('count');
9469         # Check if the list of files has a value and if not set it 0.
9471         if (!$count){
9473                 $count = 0;
9475         }
9477         # Define some values for later.
9479         my @filename_list; 
9480         my @selected_list;
9481         my @final_list;
9483         my $filename;
9484         my $selected;
9486         my $final_count = 0;
9487         my $seek = 0;
9489         # Get the list of filenames.
9491         do {
9493                 # Get the values from id[]
9495                 $seek++;
9497                 $filename               = $query->param('id[' . $seek . ']');
9498                 $filename_list[$seek]   = $filename;
9500         } until ($seek eq $count || $count eq 0);
9502         # Get the list of selected filenames.
9504         $seek = 0;
9506         do {
9508                 # Get the values from name[]
9510                 $seek++;
9512                 $selected       = $query->param('name[' . $seek . ']');
9514                 if (!$selected){
9516                         $selected = 'off';
9518                 }
9520                 $selected_list[$seek]   = $selected;
9522         } until ($seek eq $count || $count eq 0);
9524         # Create a final list of filenames to be used for
9525         # processing.
9527         $seek = 0;
9529         do {
9531                 # Check if the selected value is on and include
9532                 # the filename in the final list.
9534                 $seek++;
9536                 $selected       = $selected_list[$seek];
9538                 if ($selected eq "on"){
9540                         $filename       = $filename_list[$seek];
9541                         $final_list[$final_count] = $filename;
9542                         $final_count++;
9544                 }
9546         } until ($seek eq $count || $count eq 0);
9548         return @final_list;
9552 sub kiriwrite_compile_list{
9553 #################################################################################
9554 # kiriwrite_compile_list: Shows a list of databases that can be compiled.       #
9555 #                                                                               #
9556 # Usage:                                                                        #
9557 #                                                                               #
9558 # kiriwrite_compile_list();                                                     #
9559 #################################################################################
9561         # Define the following variables that are going to be used before using 
9562         # the foreach function.
9564         my %database_info;
9565         my %database_list;
9566         my $database_count = 0;
9567         my $database_filename = "";
9568         my $database_filename_friendly = "";
9569         my $database_permissions = "";
9570         my $database_name = "";
9571         my $database_description = "";
9572         my $data_file = "";
9573         my @permissions_list;
9574         my @error_list;
9575         my $table_style = 0;
9576         my $table_style_name = "";
9577         my $database;
9579         tie(%database_list, 'Tie::IxHash');
9581         # Connect to the database server.
9583         $kiriwrite_dbmodule->connect();
9585         # Check if any errors occured while connecting to the database server.
9587         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9589                 # A database connection error has occured so return
9590                 # an error.
9592                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9594         }
9596         # Get the list of available databases and process any errors that
9597         # might have occured.
9599         my @database_list = $kiriwrite_dbmodule->getdblist();
9601         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9603                 # The database directory is missing so return an error.
9605                 kiriwrite_error("datadirectorymissing");
9607         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9609                 # The database directory has invalid permissions set so return
9610                 # an error.
9612                 kiriwrite_error("datadirectoryinvalidpermissions");
9614         }
9616         # Begin creating the table for the list of databases.
9618         foreach $data_file (@database_list){
9620                 # Select the database.
9622                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
9624                 # Check if any error occured while selecting the database.
9626                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9628                         # The database does not exist, so process the next
9629                         # database.
9631                         next;
9633                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
9635                         # The database has invalid permissions settings, so
9636                         # add the database to the list of databases with
9637                         # invalid permissions set and process the next
9638                         # database.
9640                         push(@permissions_list, $data_file);
9641                         next;
9643                 }
9645                 # Get information about the database.
9647                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9649                 # Check if any error occured while getting information from the
9650                 # database.
9652                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9654                         # A database error has occured, add the database and specific
9655                         # error message to the list of databases with errors and
9656                         # process the next database.
9658                         push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
9659                         next;
9661                 }
9663                 $database_name          = $database_info{"DatabaseName"};
9664                 $database_description   = $database_info{"Description"};
9666                 # Create a friendly name for the database.
9668                 $database_filename_friendly = $data_file;
9670                 # Append the database information to the table.
9672                 $database_list{$database_count}{Filename}       = $database_filename_friendly;
9673                 $database_list{$database_count}{Name}           = $database_name;
9674                 $database_list{$database_count}{Description}    = $database_description;
9676                 $database_count++;
9678         }
9680         # Check if there are no valid databases are if there is no
9681         # valid databases then write a message saying that no
9682         # valid databases are available.
9684         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilepages}, { Style => "pageheader" });
9685         $kiriwrite_presmodule->addlinebreak();
9686         $kiriwrite_presmodule->addlinebreak();
9688         if ($database_count eq 0){
9690                 # There are no databases available for compiling so
9691                 # write a message instead.
9693                 $kiriwrite_presmodule->startbox("errorbox");
9694                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{nodatabasesavailable});
9695                 $kiriwrite_presmodule->endbox();
9697         } else {
9699                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9700                 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9701                 $kiriwrite_presmodule->addhiddendata("action", "compile");
9702                 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9704                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
9705                 $kiriwrite_presmodule->addtext(" | ");
9706                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselectedbutton});
9707                 $kiriwrite_presmodule->addlinebreak();
9708                 $kiriwrite_presmodule->addlinebreak();
9709                 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9710                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
9712                 $kiriwrite_presmodule->startheader();
9713                 $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
9714                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
9715                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
9716                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
9717                 $kiriwrite_presmodule->endheader();
9719                 $database_count = 1;
9721                 foreach $database (keys %database_list){
9723                         # Check the style to be used with.
9725                         if ($table_style eq 0){
9727                                 # Use the first style and set the style value
9728                                 # to use the next style, the next time the
9729                                 # if statement is checked.
9731                                 $table_style_name = "tablecell1";
9732                                 $table_style = 1;
9734                         } else {
9736                                 # Use the second style and set the style
9737                                 # value to use the first style, the next
9738                                 # time if statement is checked.
9740                                 $table_style_name = "tablecell2";
9741                                 $table_style = 0;
9742                         }
9744                         # Add the template to the list of available
9745                         # templates to compile.
9747                         $kiriwrite_presmodule->startrow();
9748                         $kiriwrite_presmodule->addcell($table_style_name);
9749                         $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9750                         $kiriwrite_presmodule->addcheckbox("name[" . $database_count . "]");
9751                         $kiriwrite_presmodule->endcell();
9752                         $kiriwrite_presmodule->addcell($table_style_name);
9754                         if (!$database_list{$database}{Name}){
9755                                 $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}) });
9756                         } else {
9757                                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_list{$database}{Filename}, { Text => $database_list{$database}{Name} });
9758                         }
9760                         $kiriwrite_presmodule->endcell();
9761                         $kiriwrite_presmodule->addcell($table_style_name);
9763                         if (!$database_list{$database}{Description}){
9764                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
9765                         } else {
9766                                 $kiriwrite_presmodule->addtext($database_list{$database}{Description});
9767                         }
9769                         $kiriwrite_presmodule->endcell();
9770                         $kiriwrite_presmodule->addcell($table_style_name);
9771                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile&action=compile&type=single&database=" . $database_list{$database}{Filename}, { Text => $kiriwrite_lang->{options}->{compile} });
9772                         $kiriwrite_presmodule->endcell();
9773                         $kiriwrite_presmodule->endrow();
9775                         $database_count++;
9777                 }
9779                 $kiriwrite_presmodule->endtable();
9780                 $kiriwrite_presmodule->endform();
9782         }
9784         # Disconnect from the database server.
9786         $kiriwrite_dbmodule->disconnect();
9788         # Check if any databases with problems have appeared and if they
9789         # have, print out a message saying which databases have problems.
9791         if (@permissions_list){
9793                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
9794                 $kiriwrite_presmodule->addlinebreak();
9795                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
9796                 $kiriwrite_presmodule->addlinebreak();
9797  
9798                 foreach $database (@permissions_list){
9799  
9800                         $kiriwrite_presmodule->addlinebreak();
9801                         $kiriwrite_presmodule->addtext($database);
9802  
9803                 }
9804  
9805                 $kiriwrite_presmodule->addlinebreak();
9806                 $kiriwrite_presmodule->addlinebreak();
9808         }
9810         if (@error_list){
9812                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
9813                 $kiriwrite_presmodule->addlinebreak();
9814                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
9815                 $kiriwrite_presmodule->addlinebreak();
9817                 foreach $database (@error_list){
9819                         $kiriwrite_presmodule->addlinebreak();
9820                         $kiriwrite_presmodule->addtext($database);
9822                 }
9824         }
9826         return $kiriwrite_presmodule->grab();
9830 sub kiriwrite_compile_clean{
9831 #################################################################################
9832 # kiriwrite_compile_clean: Deletes the contents of the output directory.        #
9833 #                                                                               #
9834 # Usage:                                                                        #
9835 #                                                                               #
9836 # kiriwrite_compile_clean(confirm);                                             #
9837 #                                                                               #
9838 # confirm       Confirms the deletion of files from the output directory.       #
9839 #################################################################################
9841         # Get the values passed to the subroutine.
9843         my ($confirm) = @_;
9845         # Define some variables for later.
9847         my $file_permissions;
9848         my $output_directory_exists;
9849         my $output_directory_permissions;
9850         my $warning_message;
9852         # Check if the output directory exists.
9854         $output_directory_exists         = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"});
9856         if ($output_directory_exists eq 1){
9858                 # The output directory does not exist so return
9859                 # an error.
9861                 kiriwrite_error("outputdirectorymissing");
9863         }
9865         # Check if the output directory has invalid
9866         # permissions set.
9868         $output_directory_permissions   = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"});
9870         if ($output_directory_permissions eq 1){
9872                 # The output directory has invalid permissions
9873                 # set, so return an error.
9875                 kiriwrite_error("outputdirectoryinvalidpermissions");
9877         }
9879         if ($confirm) {
9881                 if ($confirm eq 1){
9883                         # The action to clean the output directory has been
9884                         # confirmed.
9886                         # Remove the list of files and directories from the
9887                         # output directory.
9889                         $file_permissions = kiriwrite_compile_clean_helper($kiriwrite_config{"directory_data_output"}, 1);
9891                         if ($file_permissions eq 1){
9893                                 # One of the files or directories has invalid
9894                                 # permissions set so write a warning message.
9896                         }
9898                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9900                         if ($file_permissions eq 1){
9902                                 $kiriwrite_presmodule->addlinebreak();
9903                                 $kiriwrite_presmodule->addlinebreak();
9904                                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{somecontentnotremoved});
9905                                 $kiriwrite_presmodule->addlinebreak();
9906                                 $kiriwrite_presmodule->addlinebreak();
9908                         } else {
9910                                 $kiriwrite_presmodule->addlinebreak();
9911                                 $kiriwrite_presmodule->addlinebreak();
9912                                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{contentremoved});
9913                                 $kiriwrite_presmodule->addlinebreak();
9914                                 $kiriwrite_presmodule->addlinebreak();
9916                         }
9918                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9920                         return $kiriwrite_presmodule->grab();
9922                 } else {
9924                         # A value other than 1 is set for the confirm value
9925                         # (which it shouldn't be) so return an error.
9927                         kiriwrite_error("invalidvariable");
9929                 }
9931         }
9933         # Print out a form for cleaning the output directory.
9935         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9936         $kiriwrite_presmodule->addlinebreak();
9937         $kiriwrite_presmodule->addlinebreak();
9938         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9939         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9940         $kiriwrite_presmodule->addhiddendata("action", "clean");
9941         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9942         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectorymessage});
9943         $kiriwrite_presmodule->addlinebreak();
9944         $kiriwrite_presmodule->addlinebreak();
9945         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{cleanoutputdirectorybutton});
9946         $kiriwrite_presmodule->addtext(" | ");
9947         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist}});
9948         $kiriwrite_presmodule->endform();
9950         return $kiriwrite_presmodule->grab();
9954 sub kiriwrite_compile_clean_helper{
9955 #################################################################################
9956 # kiriwrite_compile_clean_helper: Helper for cleaning out the output directory. #
9957 # This command sometimes is called recursively (when a directory is found).     #
9958 #                                                                               #
9959 # Usage:                                                                        #
9960 #                                                                               #
9961 # kiriwrite_compile_clean_helper(directory, removedirectory, [permissions]);    #
9962 #                                                                               #
9963 # directory             Specifies the directory to remove files (and            #
9964 #                       sub-directories) from.                                  #
9965 # keepdirectory         Keeps the directory itself after all files have been    #
9966 #                       removed.                                                #
9967 # permissions           Used recursively for error checking.                    #
9968 #################################################################################
9970         # Get the values passed to the subroutine.
9972         my ($directory, $directory_keep, $permissions) = @_;
9974         # Check if the directory_keep is only one charater long.
9976         my $directory_file = "";
9977         my @directory_list;
9978         my $file_permissions = 0;
9979         my $debug = 0;
9981         # Check if the file permissions value is blank.
9983         if (!$permissions){
9985                 # The file permissions value is blank.
9987                 $permissions = 0;
9989         }
9991         # Open the directory specified, read the contents of
9992         # the directory and then close the directory.
9994         opendir(DIRECTORY, $directory);
9995         @directory_list = readdir(DIRECTORY);
9996         closedir(DIRECTORY);
9998         # Remove each file and directory.
10000         foreach $directory_file (@directory_list){
10002                 # Check if the filename is '.' or '..' and if it
10003                 # is skip those files.
10005                 if ($directory_file eq "." || $directory_file eq ".."){
10007                         # The filename is '.' or '..' so skip processing
10008                         # these files.
10010                 } else {
10012                         # Check if the permissions on the file or directory has
10013                         # valid permissions set.
10015                         $file_permissions = kiriwrite_filepermissions($directory . '/' . $directory_file, 1, 1);
10017                         if ($file_permissions eq 1){
10019                                 # The file or directory has invalid permissions set.
10021                                 $permissions = 1;
10022                                 next;
10024                         }
10026                         # Check if the filename is a directory.
10028                         if (-d $directory . '/' . $directory_file){
10030                                 # The filename is a directory so send the directory name
10031                                 # and this subroutine again (recursively).
10033                                 kiriwrite_compile_clean_helper($directory . '/' . $directory_file, 0, $permissions);
10035                         } else {
10037                                 # The file is not a directory but an actual file so
10038                                 # remove as normal (in terms of the Perl language).
10040                                 ($directory) = $directory =~ m/^(.*)$/g;
10041                                 ($directory_file) = $directory_file =~ m/^(.*)$/g;
10043                                 # Check if the directory is undefined and if it is then
10044                                 # set it to blank.
10046                                 if (!$directory){
10047                                         $directory = "";
10048                                 }
10050                                 if (!$directory_file){
10051                                         $directory_file = "";
10052                                 }
10054                                 unlink($directory . '/' . $directory_file);
10056                         }
10058                 }
10060         }
10062         # Check if the directory should be kept.
10064         if ($directory_keep eq 1){
10066                 # The directory_keep value is set as 1 so the directory
10067                 # specified should be kept.
10069         } elsif ($directory_keep eq 0) {
10071                 # The directory_keep value is set as 0 so remove the
10072                 # directory specified.
10074                 ($directory) = $directory =~ m/^(.*)$/g;
10075                 rmdir($directory);
10077         } else {
10079                 # A value other than 0 or 1 was specified so return
10080                 # an error,
10082                 kiriwrite_error('invalidvalue');
10084         }
10086         return $permissions;
10090 sub kiriwrite_settings_view{
10091 #################################################################################
10092 # kiriwrite_options_view: Writes out the list of options and variables.         #
10093 #                                                                               #
10094 # Usage:                                                                        #
10095 #                                                                               #
10096 # kiriwrite_settings_view();                                                    #
10097 #################################################################################
10099         # Get the settings.
10101         my $settings_directory_db               = $kiriwrite_config{"directory_data_db"};
10102         my $settings_directory_output           = $kiriwrite_config{"directory_data_output"};
10103         my $settings_noncgi_images              = $kiriwrite_config{"directory_noncgi_images"};
10104         my $settings_system_datetime            = $kiriwrite_config{"system_datetime"};
10105         my $settings_system_language            = $kiriwrite_config{"system_language"};
10106         my $settings_system_presentation        = $kiriwrite_config{"system_presmodule"};
10107         my $settings_system_database            = $kiriwrite_config{"system_dbmodule"};
10109         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{viewsettings}, { Style => "pageheader" });
10110         $kiriwrite_presmodule->addlinebreak();
10111         $kiriwrite_presmodule->addlinebreak();
10112         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{currentsettings});
10113         $kiriwrite_presmodule->addlinebreak();
10114         $kiriwrite_presmodule->addlinebreak();
10115         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10117         $kiriwrite_presmodule->startheader();
10118         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10119         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10120         $kiriwrite_presmodule->endheader();
10122         $kiriwrite_presmodule->startrow();
10123         $kiriwrite_presmodule->addcell("tablecellheader");
10124         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10125         $kiriwrite_presmodule->endcell();
10126         $kiriwrite_presmodule->addcell("tablecellheader");
10127         $kiriwrite_presmodule->endcell();
10128         $kiriwrite_presmodule->endrow();
10130         $kiriwrite_presmodule->startrow();
10131         $kiriwrite_presmodule->addcell("tablecell1");
10132         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10133         $kiriwrite_presmodule->endcell();
10134         $kiriwrite_presmodule->addcell("tablecell2");
10135         $kiriwrite_presmodule->addtext($settings_directory_db);
10136         $kiriwrite_presmodule->endcell();
10137         $kiriwrite_presmodule->endrow();
10139         $kiriwrite_presmodule->startrow();
10140         $kiriwrite_presmodule->addcell("tablecell1");
10141         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
10142         $kiriwrite_presmodule->endcell();
10143         $kiriwrite_presmodule->addcell("tablecell2");
10144         $kiriwrite_presmodule->addtext($settings_directory_output);
10145         $kiriwrite_presmodule->endcell();
10146         $kiriwrite_presmodule->endrow();
10148         $kiriwrite_presmodule->startrow();
10149         $kiriwrite_presmodule->addcell("tablecell1");
10150         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
10151         $kiriwrite_presmodule->endcell();
10152         $kiriwrite_presmodule->addcell("tablecell2");
10153         $kiriwrite_presmodule->addtext($settings_noncgi_images);
10154         $kiriwrite_presmodule->endcell();
10155         $kiriwrite_presmodule->endrow();
10157         $kiriwrite_presmodule->startrow();
10158         $kiriwrite_presmodule->addcell("tablecellheader");
10159         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
10160         $kiriwrite_presmodule->endcell();
10161         $kiriwrite_presmodule->addcell("tablecellheader");
10162         $kiriwrite_presmodule->endcell();
10163         $kiriwrite_presmodule->endrow();
10165         $kiriwrite_presmodule->startrow();
10166         $kiriwrite_presmodule->addcell("tablecell1");
10167         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
10168         $kiriwrite_presmodule->endcell();
10169         $kiriwrite_presmodule->addcell("tablecell2");
10170         $kiriwrite_presmodule->addtext($settings_system_datetime);
10171         $kiriwrite_presmodule->endcell();
10172         $kiriwrite_presmodule->endrow();
10174         $kiriwrite_presmodule->startrow();
10175         $kiriwrite_presmodule->addcell("tablecellheader");
10176         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
10177         $kiriwrite_presmodule->endcell();
10178         $kiriwrite_presmodule->addcell("tablecellheader");
10179         $kiriwrite_presmodule->endcell();
10180         $kiriwrite_presmodule->endrow();
10182         $kiriwrite_presmodule->startrow();
10183         $kiriwrite_presmodule->addcell("tablecell1");
10184         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
10185         $kiriwrite_presmodule->endcell();
10186         $kiriwrite_presmodule->addcell("tablecell2");
10187         $kiriwrite_presmodule->addtext($settings_system_language);
10188         $kiriwrite_presmodule->endcell();
10189         $kiriwrite_presmodule->endrow();
10191         $kiriwrite_presmodule->startrow();
10192         $kiriwrite_presmodule->addcell("tablecellheader");
10193         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
10194         $kiriwrite_presmodule->endcell();
10195         $kiriwrite_presmodule->addcell("tablecellheader");
10196         $kiriwrite_presmodule->endcell();
10197         $kiriwrite_presmodule->endrow();
10199         $kiriwrite_presmodule->startrow();
10200         $kiriwrite_presmodule->addcell("tablecell1");
10201         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
10202         $kiriwrite_presmodule->endcell();
10203         $kiriwrite_presmodule->addcell("tablecell2");
10204         $kiriwrite_presmodule->addtext($settings_system_presentation);
10205         $kiriwrite_presmodule->endcell();
10206         $kiriwrite_presmodule->endrow();
10208         $kiriwrite_presmodule->startrow();
10209         $kiriwrite_presmodule->addcell("tablecell1");
10210         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
10211         $kiriwrite_presmodule->endcell();
10212         $kiriwrite_presmodule->addcell("tablecell2");
10213         $kiriwrite_presmodule->addtext($settings_system_database);
10214         $kiriwrite_presmodule->endcell();
10215         $kiriwrite_presmodule->endrow();
10217         $kiriwrite_presmodule->endtable();
10219         $kiriwrite_presmodule->addlinebreak();
10220         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{altersettings});
10222         return $kiriwrite_presmodule->grab();
10226 sub kiriwrite_settings_edit{
10227 #################################################################################
10228 # kiriwrite_settings_edit: Edits the options.                                   #
10229 #                                                                               #
10230 # Usage:                                                                        #
10231 #                                                                               #
10232 # kiriwrite_settings_edit(options);                                             #
10233 #                                                                               #
10234 # options               Specifies the following options in any order.           #
10235 #                                                                               #
10236 # DatabaseDirectory     Specifies the new database directory to use.            #
10237 # OutputDirectory       Specifies the new output directory to use.              #
10238 # ImagesURIPath         Specifies the new URI path for images.                  #
10239 # DateTimeFormat        Specifies the new date and time format.                 #
10240 # SystemLanguage        Specifies the new language to use for Kiriwrite.        #
10241 # PrsentationModule     Specifies the new presentation module to use for        #
10242 #                       Kiriwrite.                                              #
10243 # DatabaseModule        Specifies the new database module to use for Kiriwrite. #
10244 #                                                                               #
10245 # Options for server-based database modules.                                    #
10246 #                                                                               #
10247 # DatabaseServer        Specifies the database server to use.                   #
10248 # DaravasePort          Specifies the port the database server is running on.   #
10249 # DatabaseProtocol      Specifies the protocol the database server is using.    #
10250 # DatabaseSQLDatabase   Specifies the SQL database name to use.                 #
10251 # DatabaseUsername      Specifies the database server username.                 #
10252 # DatabasePasswordKeep  Keeps the current password in the configuration file.   #
10253 # DatabasePassword      Specifies the password for the database server username.#
10254 # DatabaseTablePrefix   Specifies the prefix used for tables.                   #
10255 #################################################################################
10257         # Get the values that have been passed to the subroutine.
10259         my ($passedoptions) = @_;
10261         # Get the values from the hash.
10263         my $settings_dbdirectory                = $passedoptions->{"DatabaseDirectory"};
10264         my $settings_outputdirectory            = $passedoptions->{"OutputDirectory"};
10265         my $settings_imagesuri                  = $passedoptions->{"ImagesURIPath"};
10266         my $settings_datetimeformat             = $passedoptions->{"DateTimeFormat"};
10267         my $settings_languagesystem             = $passedoptions->{"SystemLanguage"};
10268         my $settings_presmodule                 = $passedoptions->{"PresentationModule"};
10269         my $settings_dbmodule                   = $passedoptions->{"DatabaseModule"};
10271         my $settings_database_server            = $passedoptions->{"DatabaseServer"};
10272         my $settings_database_port              = $passedoptions->{"DatabasePort"};
10273         my $settings_database_protocol          = $passedoptions->{"DatabaseProtocol"};
10274         my $settings_database_sqldatabase       = $passedoptions->{"DatabaseSQLDatabase"};
10275         my $settings_database_username          = $passedoptions->{"DatabaseUsername"};
10276         my $settings_database_passwordkeep      = $passedoptions->{"DatabasePasswordKeep"};
10277         my $settings_database_password          = $passedoptions->{"DatabasePassword"};
10278         my $settings_database_tableprefix       = $passedoptions->{"DatabaseTablePrefix"};
10280         my $confirm                             = $passedoptions->{"Confirm"};
10282         # Load the required Perl modules.
10284         my $xsl = XML::Simple->new();
10286         if (!$confirm){
10288                 # If the confirm value is blank, then set the confirm
10289                 # value to 0.
10291                 $confirm = 0;
10293         }
10295         if ($confirm eq "1"){
10297                 # The action to edit the settings has been confirmed.
10298                 # Start by checking each variable about to be placed
10299                 # in the settings file is valid.
10301                 # Deinfe some variables for later.
10303                 my @kiriwrite_new_settings;
10305                 # Check the length of the directory names.
10307                 kiriwrite_variablecheck($settings_dbdirectory, "maxlength", 64, 0);
10308                 kiriwrite_variablecheck($settings_outputdirectory, "maxlength", 64, 0);
10309                 kiriwrite_variablecheck($settings_imagesuri, "maxlength", 512, 0);
10310                 kiriwrite_variablecheck($settings_datetimeformat, "maxlength", 32, 0);
10312                 kiriwrite_variablecheck($settings_languagesystem, "language_filename", "", 0);
10314                 # Check the module names to see if they're valid.
10316                 my $kiriwrite_presmodule_modulename_check       = kiriwrite_variablecheck($settings_presmodule, "module", 0, 1);
10317                 my $kiriwrite_dbmodule_modulename_check         = kiriwrite_variablecheck($settings_dbmodule, "module", 0, 1);
10319                 if ($kiriwrite_presmodule_modulename_check eq 1){
10321                         # The presentation module name is blank, so return
10322                         # an error.
10324                         kiriwrite_error("presmoduleblank");
10326                 }
10328                 if ($kiriwrite_presmodule_modulename_check eq 2){
10330                         # The presentation module name is invalid, so return
10331                         # an error.
10333                         kiriwrite_error("presmoduleinvalid");
10335                 }
10337                 if ($kiriwrite_dbmodule_modulename_check eq 1){
10339                         # The database module name is blank, so return
10340                         # an error.
10342                         kiriwrite_error("dbmoduleblank");
10344                 }
10346                 if ($kiriwrite_dbmodule_modulename_check eq 2){
10348                         # The database module name is invalid, so return
10349                         # an error.
10351                         kiriwrite_error("dbmoduleinvalid");
10353                 }
10355                 # Check if the directory names only contain letters and numbers and
10356                 # return a specific error if they don't.
10358                 my $kiriwrite_dbdirectory_check         = kiriwrite_variablecheck($settings_dbdirectory, "directory", 0, 1);
10359                 my $kiriwrite_outputdirectory_check     = kiriwrite_variablecheck($settings_outputdirectory, "directory", 0, 1);
10360                 kiriwrite_variablecheck($settings_datetimeformat, "datetime", 0, 0);
10362                 if ($kiriwrite_dbdirectory_check eq 1){
10364                         # The database directory name is blank, so return
10365                         # an error.
10367                         kiriwrite_error("dbdirectoryblank");
10369                 } elsif ($kiriwrite_dbdirectory_check eq 2){
10371                         # The database directory name is invalid, so return
10372                         # an error.
10374                         kiriwrite_error("dbdirectoryinvalid");
10376                 }
10378                 if ($kiriwrite_outputdirectory_check eq 1){
10380                         # The output directory name is blank, so return
10381                         # an error.
10383                         kiriwrite_error("outputdirectoryblank");
10385                 } elsif ($kiriwrite_outputdirectory_check eq 2){
10387                         # The output directory name is invalid, so return
10388                         # an error.
10390                         kiriwrite_error("outputdirectoryinvalid");
10392                 }
10394                 # Check if the presentation module with the filename given exists.
10396                 my $presmodule_exists = kiriwrite_fileexists("Modules/Presentation/" . $settings_presmodule . ".pm");
10398                 if ($presmodule_exists eq 1){
10400                         # The presentation module does not exist so return an error.
10402                         kiriwrite_error("presmodulemissing");
10404                 }
10406                 # Check if the database module with the filename given exists.
10408                 my $dbmodule_exists = kiriwrite_fileexists("Modules/Database/" . $settings_dbmodule . ".pm");
10410                 if ($dbmodule_exists eq 1){
10412                         # The database module does not exist so return an error.
10414                         kiriwrite_error("dbmodulemissing");
10416                 }
10418                 # Check if the language filename given exists.
10420                 my $languagefile_exists = kiriwrite_fileexists("lang/" . $settings_languagesystem . ".xml");
10422                 if ($languagefile_exists eq 1){
10424                         # The language filename given does not exist so return an error.
10426                         kiriwrite_error("languagefilenamemissing");             
10428                 }
10430                 # Check the database server options to see if they are valid.
10432                 my $kiriwrite_databaseserver_length_check               = kiriwrite_variablecheck($settings_database_server, "maxlength", 128, 1);
10433                 my $kiriwrite_databaseserver_lettersnumbers_check       = kiriwrite_variablecheck($settings_database_server, "lettersnumbers", 0, 1);
10434                 my $kiriwrite_databaseport_length_check                 = kiriwrite_variablecheck($settings_database_port, "maxlength", 5, 1);
10435                 my $kiriwrite_databaseport_numbers_check                = kiriwrite_variablecheck($settings_database_port, "numbers", 0, 1);
10436                 my $kiriwrite_databaseport_port_check                   = kiriwrite_variablecheck($settings_database_port, "port", 0, 1);
10437                 my $kiriwrite_databaseprotocol_length_check             = kiriwrite_variablecheck($settings_database_protocol, "maxlength", 5, 1);
10438                 my $kiriwrite_databaseprotocol_protocol_check           = kiriwrite_variablecheck($settings_database_protocol, "serverprotocol", 0, 1);
10439                 my $kiriwrite_databasename_length_check                 = kiriwrite_variablecheck($settings_database_sqldatabase, "maxlength", 32, 1);
10440                 my $kiriwrite_databasename_lettersnumbers_check         = kiriwrite_variablecheck($settings_database_sqldatabase, "lettersnumbers", 0, 1);
10441                 my $kiriwrite_databaseusername_length_check             = kiriwrite_variablecheck($settings_database_username, "maxlength", 16, 1);
10442                 my $kiriwrite_databaseusername_lettersnumbers_check     = kiriwrite_variablecheck($settings_database_username, "lettersnumbers", 0, 1);
10443                 my $kiriwrite_databasepassword_length_check             = kiriwrite_variablecheck($settings_database_password, "maxlength", 64, 1);
10444                 my $kiriwrite_databasetableprefix_length_check          = kiriwrite_variablecheck($settings_database_tableprefix, "maxlength", 16, 1);
10445                 my $kiriwrite_databasetableprefix_lettersnumbers_check  = kiriwrite_variablecheck($settings_database_tableprefix, "lettersnumbers", 0, 1);
10447                 if ($kiriwrite_databaseserver_length_check eq 1){
10449                         # The length of the database server name is too long so
10450                         # return an error.
10452                         kiriwrite_error("servernametoolong");
10454                 }
10456                 if ($kiriwrite_databaseserver_lettersnumbers_check eq 1){
10458                         # The database server name contains characters other
10459                         # than letters and numbers, so return an error.
10461                         kiriwrite_error("servernameinvalid");
10463                 }
10465                 if ($kiriwrite_databaseport_length_check eq 1){
10467                         # The database port number length is too long so return
10468                         # an error.
10470                         kiriwrite_error("serverportnumbertoolong");
10472                 }
10474                 if ($kiriwrite_databaseport_numbers_check eq 1){
10476                         # The database port number contains characters other
10477                         # than numbers so return an error.
10479                         kiriwrite_error("serverportnumberinvalidcharacters");
10481                 }
10483                 if ($kiriwrite_databaseport_port_check eq 1){
10485                         # The database port number given is invalid so return
10486                         # an error.
10488                         kiriwrite_error("serverportnumberinvalid");
10490                 }
10492                 if ($kiriwrite_databaseprotocol_length_check eq 1){
10494                         # The database protocol name given is too long so
10495                         # return an error.
10497                         kiriwrite_error("serverprotocolnametoolong");
10499                 }
10501                 if ($kiriwrite_databaseprotocol_protocol_check eq 1){
10503                         # The server protcol given is invalid so return
10504                         # an error.
10506                         kiriwrite_error("serverprotocolinvalid");
10508                 }
10510                 if ($kiriwrite_databasename_length_check eq 1){
10512                         # The SQL database name is too long so return
10513                         # an error.
10515                         kiriwrite_error("serverdatabasenametoolong");
10517                 }
10519                 if ($kiriwrite_databasename_lettersnumbers_check eq 1){
10521                         # The database name contains invalid characters
10522                         # so return an error.
10524                         kiriwrite_error("serverdatabasenameinvalid");
10526                 }
10528                 if ($kiriwrite_databaseusername_length_check eq 1){
10530                         # The database username given is too long so
10531                         # return an error.
10533                         kiriwrite_error("serverdatabaseusernametoolong");
10535                 }
10537                 if ($kiriwrite_databaseusername_lettersnumbers_check eq 1){
10539                         # The database username contains invalid characters
10540                         # so return an error.
10542                         kiriwrite_error("serverdatabaseusernameinvalid");
10544                 }
10546                 if ($kiriwrite_databasepassword_length_check eq 1){
10548                         # The database password given is too long so return
10549                         # an error.
10551                         kiriwrite_error("serverdatabasepasswordtoolong");
10553                 }
10555                 if ($kiriwrite_databasetableprefix_length_check eq 1){
10557                         # The database table prefix given is too long so
10558                         # return an error.
10560                         kiriwrite_error("serverdatabasetableprefixtoolong");
10562                 }
10564                 if ($kiriwrite_databasetableprefix_lettersnumbers_check eq 1){
10566                         # The database table prefix given contains invalid
10567                         # characters so return an error.
10569                         kiriwrite_error("serverdatabasetableprefixinvalid");
10571                 }
10573                 # Check if the current password should be kept.
10575                 if ($settings_database_passwordkeep eq "on"){
10577                         # The current password in the configuration file should be used.
10579                         $settings_database_password     = $kiriwrite_config{"database_password"};
10581                 }
10583                 # Write the new settings to the XML file.
10585                 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 });
10587                 # Write a confirmation message.
10589                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingsedited}, { Style => "pageheadeR" });
10590                 $kiriwrite_presmodule->addlinebreak();
10591                 $kiriwrite_presmodule->addlinebreak();
10592                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingseditedmessage});
10593                 $kiriwrite_presmodule->addlinebreak();
10594                 $kiriwrite_presmodule->addlinebreak();
10595                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
10597                 return $kiriwrite_presmodule->grab();
10599         }
10601         # Get the list of languages available.
10603         my %language_list;
10604         my @language_directory          = "";
10605         my $language;
10606         my $language_filename           = "";
10607         my $language_file_xml           = "";
10608         my $language_file_systemname    = "";
10609         my $language_file_localname     = "";
10610         my $language_file_seek          = 0;
10611         my $language_flie_dot           = 0;
10612         my $language_file_length        = 0;
10613         my $language_file_count         = 0;
10614         my $language_file_char          = "";
10615         my $language_file_friendly      = "";
10616         my $language_config             = $kiriwrite_config{"system_language"};
10618         tie(%language_list, 'Tie::IxHash');
10620         opendir(LANGUAGEDIR, "lang");
10621         @language_directory = grep /m*\.xml$/, readdir(LANGUAGEDIR);
10622         closedir(LANGUAGEDIR);
10624         # Process each language by loading the XML configuration file
10625         # used for each language and then get the System name and 
10626         # the local name of the language.
10628         foreach $language_filename (@language_directory){
10630                 # Load the language file currently selected.
10632                 $language_file_xml = $xsl->XMLin("lang" . '/' . $language_filename, SuppressEmpty => 1);
10634                 # Get the system name and the local name of the language.
10636                 $language_file_localname = $language_file_xml -> {about} -> {name};
10638                 # Check if either the system name or the local name of the language
10639                 # is blank and if it is, then don't add the language to the list.
10641                 if ($language_file_localname eq ""){
10643                         # The system name or the local name is blank so don't add
10644                         # the language to the list.
10645                 
10646                 } else {
10648                         # Get the 'friendly' name of the language file name (basically
10649                         # remove the .xml part from the filename.
10651                         $language_file_length = length($language_filename);
10653                         do {
10655                                 # Get a character from the language filename and currently
10656                                 # set by the seek counter.
10658                                 $language_file_char = substr($language_filename, $language_file_seek, 1);
10660                                 # Check if the character is a dot and if it is then set the
10661                                 # last dot value to the seek counter value.
10663                                 if ($language_file_char eq "."){
10665                                         # Current chatacter is a dot so set the last dot value 
10666                                         # to what is currently the seek counter.
10668                                         $language_flie_dot = $language_file_seek;
10670                                 } else {
10672                                         # Current character is not a dot, so do nothing.
10674                                 }
10676                                 # Increment the seek counter.
10678                                 $language_file_seek++;
10680                         } until ($language_file_seek eq $language_file_length);
10682                         # Reset the seek counter.
10684                         $language_file_seek = 0;
10686                         # Process the file name again and this time process the file
10687                         # name until it reaches the last dot found.
10689                         do {
10691                                 # Get the character the seek counter is currently set at.
10693                                 $language_file_char = substr($language_filename, $language_file_seek, 1);
10695                                 # Append the character to the friendly file name.
10697                                 $language_file_friendly = $language_file_friendly . $language_file_char;
10699                                 # Increment the seek counter.
10700         
10701                                 $language_file_seek++;
10703                         } until ($language_file_seek eq $language_flie_dot);
10705                         # Append the language to the available languages list.
10707                         $language_list{$language_file_count}{Filename} = $language_file_friendly;
10708                         $language_list{$language_file_count}{Name} = $language_file_localname;
10709                         $language_file_count++;
10711                         # Reset certain counters and values before continuing.
10713                         $language_file_seek     = 0;
10714                         $language_flie_dot      = 0;
10715                         $language_file_length   = 0;
10716                         $language_file_char     = "";
10717                         $language_file_friendly = "";
10719                 }
10721         }
10723         # Get the list of presentation modules available.
10725         my %presmodule_list;
10726         my @presmodule_directory;
10727         my $presmodule;
10728         my $presmodule_file             = "";
10729         my $presmodule_char             = "";
10730         my $presmodule_dot              = 0;
10731         my $presmodule_firstdot         = 0;
10732         my $presmodule_firstdotfound    = "";
10733         my $presmodule_seek             = 0;
10734         my $presmodule_length           = 0;
10735         my $presmodule_count            = 0;
10736         my $presmodule_friendly         = "";
10737         my $presmodule_selectlist       = "";
10738         my $presmodule_config           = $kiriwrite_config{"system_presmodule"};
10740         # Open and get the list of presentation modules (perl modules) by filtering
10741         # out the 
10743         opendir(OUTPUTSYSTEMDIR, "Modules/Presentation");
10744         @presmodule_directory = grep /m*\.pm$/, readdir(OUTPUTSYSTEMDIR);
10745         closedir(OUTPUTSYSTEMDIR);
10747         # Process each presentation module and add them to the list of available
10748         # presentation modules.
10750         foreach $presmodule_file (@presmodule_directory){
10752                 # Get the length of the presentation module (perl module) filename.
10754                 $presmodule_length = length($presmodule_file);
10756                 # Get the friendly name of the Perl module (by getting rid of the
10757                 # .pm part of the filename).
10759                 do {
10761                         $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10763                         # Check if the current character is a dot and if it is then
10764                         # set the last dot found number to the current seek number.
10766                         if ($presmodule_char eq "."){
10768                                 # Put the seek value as the last dot found number.
10770                                 $presmodule_dot = $presmodule_seek;
10772                         }
10774                         # Increment the seek counter.
10776                         $presmodule_seek++;
10778                 } until ($presmodule_seek eq $presmodule_length);
10780                 # Reset the seek counter as it is going to be used again.
10782                 $presmodule_seek = 0;
10784                 # Get the friendly name of the Perl module by the processing the file
10785                 # name to the last dot the previous 'do' tried to find.
10787                 do {
10789                         # Get the character the seek counter is currently set at.
10791                         $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10793                         # Append the character to the friendly name of the presentation module.
10795                         $presmodule_friendly = $presmodule_friendly . $presmodule_char;
10797                         # Increment the seek counter.
10799                         $presmodule_seek++;
10801                 } until ($presmodule_seek eq $presmodule_dot);
10803                 # Append the option to tbe list of available presentation modules.
10805                 $presmodule_list{$presmodule_count}{Filename} = $presmodule_friendly;
10807                 # Reset the following values.
10809                 $presmodule_seek        = 0;
10810                 $presmodule_length      = 0;
10811                 $presmodule_char        = "";
10812                 $presmodule_friendly    = "";
10813                 $presmodule_count++;
10815         }
10817         # Get the list of database modules available.
10819         my %dbmodule_list;
10820         my @dbmodule_directory;
10821         my $dbmodule;
10822         my $dbmodule_file               = "";
10823         my $dbmodule_char               = "";
10824         my $dbmodule_dot                = 0;
10825         my $dbmodule_firstdot           = 0;
10826         my $dbmodule_firstdotfound      = "";
10827         my $dbmodule_seek               = 0;
10828         my $dbmodule_length             = 0;
10829         my $dbmodule_count              = 0;
10830         my $dbmodule_friendly           = "";
10831         my $dbmodule_selectlist         = "";
10832         my $dbmodule_config             = $kiriwrite_config{"system_dbmodule"};
10834         # Open and get the list of presentation modules (perl modules) by filtering
10835         # out the 
10837         opendir(DATABASEDIR, "Modules/Database");
10838         @dbmodule_directory = grep /m*\.pm$/, readdir(DATABASEDIR);
10839         closedir(DATABASEDIR);
10841         # Process each presentation module and add them to the list of available
10842         # presentation modules.
10844         foreach $dbmodule_file (@dbmodule_directory){
10846                 # Get the length of the database module (perl module) filename.
10848                 $dbmodule_length = length($dbmodule_file);
10850                 # Get the friendly name of the Perl module (by getting rid of the
10851                 # .pm part of the filename).
10853                 do {
10855                         $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10857                         # Check if the current character is a dot and if it is then
10858                         # set the last dot found number to the current seek number.
10860                         if ($dbmodule_char eq "."){
10862                                 # Put the seek value as the last dot found number.
10864                                 $dbmodule_dot = $dbmodule_seek;
10866                         }
10868                         # Increment the seek counter.
10870                         $dbmodule_seek++;
10872                 } until ($dbmodule_seek eq $dbmodule_length);
10874                 # Reset the seek counter as it is going to be used again.
10876                 $dbmodule_seek = 0;
10878                 # Get the friendly name of the Perl module by the processing the file
10879                 # name to the last dot the previous 'do' tried to find.
10881                 do {
10883                         # Get the character the seek counter is currently set at.
10885                         $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10887                         # Append the character to the friendly name of the presentation module.
10889                         $dbmodule_friendly = $dbmodule_friendly . $dbmodule_char;
10891                         # Increment the seek counter.
10893                         $dbmodule_seek++;
10895                 } until ($dbmodule_seek eq $dbmodule_dot);
10897                 # Append the option to tbe list of available database modules.
10899                 $dbmodule_list{$dbmodule_count}{Filename} = $dbmodule_friendly;
10901                 # Reset the following values.
10903                 $dbmodule_seek  = 0;
10904                 $dbmodule_length        = 0;
10905                 $dbmodule_char          = "";
10906                 $dbmodule_friendly      = "";
10907                 $dbmodule_count++;
10909         }
10911         # Get the directory settings.
10913         my $directory_settings_database         = $kiriwrite_config{"directory_data_db"};
10914         my $directory_settings_output           = $kiriwrite_config{"directory_data_output"};
10915         my $directory_settings_imagesuri        = $kiriwrite_config{"directory_noncgi_images"};
10916         my $datetime_setting                    = $kiriwrite_config{"system_datetime"};
10918         my $database_server                     = $kiriwrite_config{"database_server"};
10919         my $database_port                       = $kiriwrite_config{"database_port"};
10920         my $database_protocol                   = $kiriwrite_config{"database_protocol"};
10921         my $database_sqldatabase                = $kiriwrite_config{"database_sqldatabase"};
10922         my $database_username                   = $kiriwrite_config{"database_username"};
10923         my $database_passwordhash               = $kiriwrite_config{"database_passwordhash"};
10924         my $database_password                   = $kiriwrite_config{"database_password"};
10925         my $database_prefix                     = $kiriwrite_config{"database_tableprefix"};
10927         # Print out a form for editing the settings.
10929         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{editsettings}, { Style => "pageheader" });
10930         $kiriwrite_presmodule->addlinebreak();
10931         $kiriwrite_presmodule->addlinebreak();
10932         $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{setting}->{warning});
10933         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{warningmessage});
10934         $kiriwrite_presmodule->addlinebreak();
10935         $kiriwrite_presmodule->addlinebreak();
10937         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
10938         $kiriwrite_presmodule->addhiddendata("mode", "settings");
10939         $kiriwrite_presmodule->addhiddendata("action", "edit");
10940         $kiriwrite_presmodule->addhiddendata("confirm", 1);
10942         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10944         $kiriwrite_presmodule->startheader();
10945         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10946         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10947         $kiriwrite_presmodule->endheader();
10949         $kiriwrite_presmodule->startrow();
10950         $kiriwrite_presmodule->addcell("tablecellheader");
10951         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10952         $kiriwrite_presmodule->endcell();
10953         $kiriwrite_presmodule->addcell("tablecellheader");
10954         $kiriwrite_presmodule->endcell();
10955         $kiriwrite_presmodule->endrow();
10957         $kiriwrite_presmodule->startrow();
10958         $kiriwrite_presmodule->addcell("tablecell1");
10959         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10960         $kiriwrite_presmodule->endcell();
10961         $kiriwrite_presmodule->addcell("tablecell2");
10962         $kiriwrite_presmodule->addinputbox("databasedir", { Size => 32, MaxLength => 64, Value => $directory_settings_database });
10963         $kiriwrite_presmodule->endcell();
10964         $kiriwrite_presmodule->endrow();
10966         $kiriwrite_presmodule->startrow();
10967         $kiriwrite_presmodule->addcell("tablecell1");
10968         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
10969         $kiriwrite_presmodule->endcell();
10970         $kiriwrite_presmodule->addcell("tablecell2");
10971         $kiriwrite_presmodule->addinputbox("outputdir", { Size => 32, MaxLength => 64, Value => $directory_settings_output });
10972         $kiriwrite_presmodule->endcell();
10973         $kiriwrite_presmodule->endrow();
10975         $kiriwrite_presmodule->startrow();
10976         $kiriwrite_presmodule->addcell("tablecell1");
10977         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
10978         $kiriwrite_presmodule->endcell();
10979         $kiriwrite_presmodule->addcell("tablecell2");
10980         $kiriwrite_presmodule->addinputbox("imagesuripath", { Size => 32, MaxLength => 64, Value => $directory_settings_imagesuri });
10981         $kiriwrite_presmodule->endcell();
10982         $kiriwrite_presmodule->endrow();
10984         $kiriwrite_presmodule->startrow();
10985         $kiriwrite_presmodule->addcell("tablecellheader");
10986         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
10987         $kiriwrite_presmodule->endcell();
10988         $kiriwrite_presmodule->addcell("tablecellheader");
10989         $kiriwrite_presmodule->endcell();
10990         $kiriwrite_presmodule->endrow();
10992         $kiriwrite_presmodule->startrow();
10993         $kiriwrite_presmodule->addcell("tablecell1");
10994         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
10995         $kiriwrite_presmodule->endcell();
10996         $kiriwrite_presmodule->addcell("tablecell2");
10997         $kiriwrite_presmodule->addinputbox("datetime", { Size => 32, MaxLength => 64, Value => $datetime_setting });
10998         $kiriwrite_presmodule->addlinebreak();
10999         $kiriwrite_presmodule->addlinebreak();
11000         $kiriwrite_presmodule->startbox("datalist");
11002         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleday});
11003         $kiriwrite_presmodule->addlinebreak();
11004         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleday});
11005         $kiriwrite_presmodule->addlinebreak();
11006         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlemonth});
11007         $kiriwrite_presmodule->addlinebreak();
11008         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublemonth});
11009         $kiriwrite_presmodule->addlinebreak();
11010         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleyear});
11011         $kiriwrite_presmodule->addlinebreak();
11012         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleyear});
11013         $kiriwrite_presmodule->addlinebreak();
11014         $kiriwrite_presmodule->addlinebreak();
11015         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlehour});
11016         $kiriwrite_presmodule->addlinebreak();
11017         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublehour});
11018         $kiriwrite_presmodule->addlinebreak();
11019         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleminute});
11020         $kiriwrite_presmodule->addlinebreak();
11021         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleminute});
11022         $kiriwrite_presmodule->addlinebreak();
11023         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlesecond});
11024         $kiriwrite_presmodule->addlinebreak();
11025         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublesecond});
11026         $kiriwrite_presmodule->addlinebreak();
11027         $kiriwrite_presmodule->addlinebreak();
11028         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{othercharacters});
11029         $kiriwrite_presmodule->endbox();
11030         $kiriwrite_presmodule->endcell();
11031         $kiriwrite_presmodule->endrow();
11033         $kiriwrite_presmodule->startrow();
11034         $kiriwrite_presmodule->addcell("tablecellheader");
11035         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
11036         $kiriwrite_presmodule->endcell();
11037         $kiriwrite_presmodule->addcell("tablecellheader");
11038         $kiriwrite_presmodule->endcell();
11039         $kiriwrite_presmodule->endrow();
11041         $kiriwrite_presmodule->startrow();
11042         $kiriwrite_presmodule->addcell("tablecell1");
11043         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
11044         $kiriwrite_presmodule->endcell();
11045         $kiriwrite_presmodule->addcell("tablecell2");
11047         $kiriwrite_presmodule->addselectbox("language");
11049         # Process the list of available languages.
11051         foreach $language (keys %language_list){
11053                 # Check if the language filename matches the filename in the configuration
11054                 # file.
11056                 if ($language_list{$language}{Filename} eq $language_config){
11058                         $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} , Selected => 1 });
11060                 } else {
11062                         $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} });
11064                 }
11066         }
11068         $kiriwrite_presmodule->endselectbox();
11070         $kiriwrite_presmodule->startrow();
11071         $kiriwrite_presmodule->addcell("tablecellheader");
11072         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
11073         $kiriwrite_presmodule->endcell();
11074         $kiriwrite_presmodule->addcell("tablecellheader");
11075         $kiriwrite_presmodule->endcell();
11076         $kiriwrite_presmodule->endrow();
11078         $kiriwrite_presmodule->startrow();
11079         $kiriwrite_presmodule->addcell("tablecell1");
11080         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
11081         $kiriwrite_presmodule->endcell();
11082         $kiriwrite_presmodule->addcell("tablecell2");
11084         $kiriwrite_presmodule->addselectbox("presmodule");
11086         # Process the list of available presentation modules.
11088         foreach $presmodule (keys %presmodule_list){
11090                 # Check if the presentation module fileanme matches the filename in the 
11091                 # configuration file.
11093                 if ($presmodule_list{$presmodule}{Filename} eq $presmodule_config){
11095                         $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} , Selected => 1 });
11097                 } else {
11099                         $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} });
11101                 }
11103         }
11105         $kiriwrite_presmodule->endselectbox();
11107         $kiriwrite_presmodule->endcell();
11108         $kiriwrite_presmodule->endrow();
11110         $kiriwrite_presmodule->startrow();
11111         $kiriwrite_presmodule->addcell("tablecell1");
11112         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
11113         $kiriwrite_presmodule->endcell();
11114         $kiriwrite_presmodule->addcell("tablecell2");
11116         # Process the list of available database modules.
11118         $kiriwrite_presmodule->addselectbox("dbmodule");
11120         foreach $dbmodule (keys %dbmodule_list){
11122                 # Check if the database module fileanme matches the filename in the 
11123                 # configuration file.
11125                 if ($dbmodule_list{$dbmodule}{Filename} eq $dbmodule_config){
11127                         $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} , Selected => 1 });
11129                 } else {
11131                         $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} });
11133                 }
11136         }
11138         $kiriwrite_presmodule->endselectbox();
11140         $kiriwrite_presmodule->endcell();
11141         $kiriwrite_presmodule->endrow();
11143         $kiriwrite_presmodule->startrow();
11144         $kiriwrite_presmodule->addcell("tablecell1");
11145         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseserver});
11146         $kiriwrite_presmodule->endcell();
11147         $kiriwrite_presmodule->addcell("tablecell2");
11148         $kiriwrite_presmodule->addinputbox("database_server", { Size => 32, MaxLength => 128, Value => $database_server });
11149         $kiriwrite_presmodule->endcell();
11150         $kiriwrite_presmodule->endrow();
11152         $kiriwrite_presmodule->startrow();
11153         $kiriwrite_presmodule->addcell("tablecell1");
11154         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseport});
11155         $kiriwrite_presmodule->endcell();
11156         $kiriwrite_presmodule->addcell("tablecell2");
11157         $kiriwrite_presmodule->addinputbox("database_port", { Size => 5, MaxLength => 5, Value => $database_port });
11158         $kiriwrite_presmodule->endcell();
11159         $kiriwrite_presmodule->endrow();
11161         $kiriwrite_presmodule->startrow();
11162         $kiriwrite_presmodule->addcell("tablecell1");
11163         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseprotocol});
11164         $kiriwrite_presmodule->endcell();
11165         $kiriwrite_presmodule->addcell("tablecell2");
11167         # Check if TCP is being used.
11169         $kiriwrite_presmodule->addselectbox("database_protocol");
11171         if ($database_protocol eq "tcp"){
11173                 # The TCP protocol is selected so have the TCP option selected.
11175                 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp", Selected => 1});
11177         } else {
11179                 # The TCP protocol is not selected.
11181                 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp"});
11183         } 
11185         # Check if UDP is being used.
11187         if ($database_protocol eq "udp"){
11189                 # The UDP protocol is selected so have the UDP option selected.
11191                 $kiriwrite_presmodule->addoption("UDP", { Value => "udp", Selected => 1});
11193         } else {
11195                 # The UDP protocol is not selected.
11197                 $kiriwrite_presmodule->addoption("UDP", { Value => "udp"});
11199         }
11201         $kiriwrite_presmodule->endselectbox();
11203         $kiriwrite_presmodule->endcell();
11204         $kiriwrite_presmodule->endrow();
11206         $kiriwrite_presmodule->startrow();
11207         $kiriwrite_presmodule->addcell("tablecell1");
11208         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasename});
11209         $kiriwrite_presmodule->endcell();
11210         $kiriwrite_presmodule->addcell("tablecell2");
11211         $kiriwrite_presmodule->addinputbox("database_sqldatabase", { Size => 32, MaxLength => 32, Value => $database_sqldatabase });
11212         $kiriwrite_presmodule->endcell();
11213         $kiriwrite_presmodule->endrow();
11215         $kiriwrite_presmodule->startrow();
11216         $kiriwrite_presmodule->addcell("tablecell1");
11217         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseusername});
11218         $kiriwrite_presmodule->endcell();
11219         $kiriwrite_presmodule->addcell("tablecell2");
11220         $kiriwrite_presmodule->addinputbox("database_username", { Size => 16, MaxLength => 16, Value => $database_username });
11221         $kiriwrite_presmodule->endcell();
11222         $kiriwrite_presmodule->endrow();
11224         $kiriwrite_presmodule->startrow();
11225         $kiriwrite_presmodule->addcell("tablecell1");
11226         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasepassword});
11227         $kiriwrite_presmodule->endcell();
11228         $kiriwrite_presmodule->addcell("tablecell2");
11229         $kiriwrite_presmodule->addinputbox("database_password", { Size => 16, MaxLength => 64, Password => 1 });
11230         $kiriwrite_presmodule->addtext(" ");
11231         $kiriwrite_presmodule->addcheckbox("database_password_keep", { OptionDescription => "Keep the current password", Checked => 1 });
11232         $kiriwrite_presmodule->endcell();
11233         $kiriwrite_presmodule->endrow();
11235         $kiriwrite_presmodule->startrow();
11236         $kiriwrite_presmodule->addcell("tablecell1");
11237         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{tableprefix});
11238         $kiriwrite_presmodule->endcell();
11239         $kiriwrite_presmodule->addcell("tablecell2");
11240         $kiriwrite_presmodule->addinputbox("database_tableprefix", { Size => 16, MaxLength => 16, Value => $database_prefix });
11241         $kiriwrite_presmodule->endcell();
11242         $kiriwrite_presmodule->endrow();
11244         $kiriwrite_presmodule->endtable();
11246         $kiriwrite_presmodule->addlinebreak();
11247         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{setting}->{changesettingsbutton});
11248         $kiriwrite_presmodule->addtext(" | ");
11249         $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
11250         $kiriwrite_presmodule->addtext(" | ");
11251         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
11253         $kiriwrite_presmodule->endform();
11255         return $kiriwrite_presmodule->grab();
11259 sub kiriwrite_settings_load{
11260 #################################################################################
11261 # kiriwrite_settings_load: Load the configuration settings into the global      #
11262 # variables.                                                                    #
11263 #                                                                               #
11264 # Usage:                                                                        #
11265 #                                                                               #
11266 # kiriwrite_settings_load();                                                    #
11267 #################################################################################
11269         # Load the required Perl modules.
11271         use XML::Simple qw(XMLin);
11272         my $xsl = XML::Simple->new();
11274         # Check if the Kiriwrite configuration file exists before using it and
11275         # return an critical error if it doesn't exist.
11277         my $kiriwrite_conf_exist = kiriwrite_fileexists("kiriwrite.xml");
11279         if ($kiriwrite_conf_exist eq 1){
11281                 # The configuration really does not exist so return an critical error.
11283                 kiriwrite_critical("configfilemissing");
11285         }
11287         # Check if the Kiriwrite configuration file has valid permission settings
11288         # before using it and return an critical error if it doesn't have the
11289         # valid permission settings.
11291         my $kiriwrite_conf_permissions = kiriwrite_filepermissions("kiriwrite.xml", 1, 0);
11293         if ($kiriwrite_conf_permissions eq 1){
11295                 # The permission settings for the Kiriwrite configuration file are
11296                 # invalid, so return an critical error.
11298                 kiriwrite_critical("configfileinvalidpermissions");
11300         }
11302         # Converts the XML file into meaningful data for later on in this subroutine.
11304         my $kiriwrite_conf_file = 'kiriwrite.xml';
11305         my $kiriwrite_conf_data = $xsl->XMLin($kiriwrite_conf_file, SuppressEmpty => 1);
11307         # Go and fetch the settings and place them into a hash (that is global).
11309         %kiriwrite_config = (
11311                 "directory_data_db"             => $kiriwrite_conf_data->{settings}->{directories}->{database},
11312                 "directory_data_output"         => $kiriwrite_conf_data->{settings}->{directories}->{output},
11313                 "directory_noncgi_images"       => $kiriwrite_conf_data->{settings}->{directories}->{images},
11315                 "system_language"               => $kiriwrite_conf_data->{settings}->{language}->{lang},
11316                 "system_presmodule"             => $kiriwrite_conf_data->{settings}->{system}->{presentation},
11317                 "system_dbmodule"               => $kiriwrite_conf_data->{settings}->{system}->{database},
11318                 "system_datetime"               => $kiriwrite_conf_data->{settings}->{system}->{datetime},
11320                 "database_server"               => $kiriwrite_conf_data->{settings}->{database}->{server},
11321                 "database_port"                 => $kiriwrite_conf_data->{settings}->{database}->{port},
11322                 "database_protocol"             => $kiriwrite_conf_data->{settings}->{database}->{protocol},
11323                 "database_sqldatabase"          => $kiriwrite_conf_data->{settings}->{database}->{database},
11324                 "database_username"             => $kiriwrite_conf_data->{settings}->{database}->{username},
11325                 "database_password"             => $kiriwrite_conf_data->{settings}->{database}->{password},
11326                 "database_tableprefix"          => $kiriwrite_conf_data->{settings}->{database}->{prefix}
11328         );
11330         # Do a validation check on all of the variables that were loaded into the global configuration hash.
11332         kiriwrite_variablecheck($kiriwrite_config{"directory_data_db"}, "maxlength", 64, 0);
11333         kiriwrite_variablecheck($kiriwrite_config{"directory_data_output"}, "maxlength", 64, 0);
11334         kiriwrite_variablecheck($kiriwrite_config{"directory_noncgi_images"}, "maxlength", 512, 0);
11335         kiriwrite_variablecheck($kiriwrite_config{"directory_data_template"}, "maxlength", 64, 0);
11337         my $kiriwrite_config_language_filename = kiriwrite_variablecheck($kiriwrite_config{"system_language"}, "language_filename", "", 1);
11338         my $kiriwrite_config_presmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_presmodule"}, "module", 0, 1);
11339         my $kiriwrite_config_dbmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_dbmodule"}, "module", 0, 1);
11341         # Check if the language filename is valid and return an critical error if
11342         # they aren't.
11344         if ($kiriwrite_config_language_filename eq 1){
11346                 # The language filename is blank so return an critical error.
11348                 kiriwrite_critical("languagefilenameblank");
11350         } elsif ($kiriwrite_config_language_filename eq 2){
11352                 # The language filename is invalid so return an critical error.
11354                 kiriwrite_critical("languagefilenameinvalid");
11356         }
11358         # Check if the presentation and database module names are valid and return a critical
11359         # error if they aren't.
11361         if ($kiriwrite_config_presmodule_filename eq 1){
11363                 # The presentation module filename given is blank so return an 
11364                 # critical error.
11366                 kiriwrite_critical("presmoduleblank");
11368         }
11370         if ($kiriwrite_config_presmodule_filename eq 2){
11372                 # The presentation module filename is invalid so return an
11373                 # critical error.
11375                 kiriwrite_critical("presmoduleinvalid");
11377         }
11379         if ($kiriwrite_config_dbmodule_filename eq 1){
11381                 # The database module filename given is blank so return an
11382                 # critical error.
11384                 kiriwrite_critical("dbmoduleblank");
11386         }
11388         if ($kiriwrite_config_dbmodule_filename eq 2){
11390                 # The database module filename given is invalid so return
11391                 # an critical error.
11393                 kiriwrite_critical("dbmoduleinvalid");
11395         }
11397         # Check if the language file does exist before loading it and return an critical error
11398         # if it does not exist.
11400         my $kiriwrite_config_language_fileexists = kiriwrite_fileexists("lang/" . $kiriwrite_config{"system_language"} . ".xml");
11402         if ($kiriwrite_config_language_fileexists eq 1){
11404                 # Language file does not exist so return an critical error.
11406                 kiriwrite_critical("languagefilemissing");
11408         }
11410         # Check if the language file has valid permission settings and return an critical error if
11411         # the language file has invalid permissions settings.
11413         my $kiriwrite_config_language_filepermissions = kiriwrite_filepermissions("lang/" . $kiriwrite_config{"system_language"} . ".xml", 1, 0);
11415         if ($kiriwrite_config_language_filepermissions eq 1){
11417                 # Language file contains invalid permissions so return an critical error.
11419                 kiriwrite_critical("languagefilepermissions");
11421         }
11423         # Load the language file.
11425         $kiriwrite_lang = $xsl->XMLin("lang/" . $kiriwrite_config{"system_language"} . ".xml", SuppressEmpty => 1);
11427         # Check if the presentation module does exist before loading it and return an critical error
11428         # if the presentation module does not exist.
11430         my $kiriwrite_config_presmodule_fileexists = kiriwrite_fileexists("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm");
11432         if ($kiriwrite_config_presmodule_fileexists eq 1){
11434                 # Presentation module does not exist so return an critical error.
11436                 kiriwrite_critical("presmodulemissing");
11438         }
11440         # Check if the presentation module does have the valid permission settings and return a
11441         # critical error if the presentation module contains invalid permission settings.
11443         my $kiriwrite_config_presmodule_permissions = kiriwrite_filepermissions("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm", 1, 0);
11445         if ($kiriwrite_config_presmodule_permissions eq 1){
11447                 # Presentation module contains invalid permissions so return an critical error.
11449                 kiriwrite_critical("presmoduleinvalidpermissions");
11451         }
11453         # Check if the database module does exist before loading it and return an critical error
11454         # if the database module does not exist.
11456         my $kiriwrite_config_dbmodule_fileexists = kiriwrite_fileexists("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm");
11458         if ($kiriwrite_config_dbmodule_fileexists eq 1){
11460                 # Database module does not exist so return an critical error.
11462                 kiriwrite_critical("dbmodulemissing");
11464         }
11466         # Check if the database module does have the valid permission settings and return an
11467         # critical error if the database module contains invalid permission settings.
11469         my $kiriwrite_config_dbmodule_permissions = kiriwrite_filepermissions("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm", 1, 0);
11471         if ($kiriwrite_config_dbmodule_permissions eq 1){
11473                 # Presentation module contains invalid permissions so return an critical error.
11475                 kiriwrite_critical("dbmoduleinvalidpermissions");
11477         }
11479         # Include the Modules directory.
11481         use lib "Modules/";
11483         # Load the presentation module.
11485         my $presmodulename = "Presentation::" . $kiriwrite_config{"system_presmodule"};
11486         ($presmodulename) = $presmodulename =~ m/^(.*)$/g;
11487         eval "use " . $presmodulename;
11488         $presmodulename = "Kiriwrite::Presentation::" . $kiriwrite_config{"system_presmodule"};
11489         $kiriwrite_presmodule = $presmodulename->new();
11491         # Load the database module.
11493         my $dbmodulename = "Database::" . $kiriwrite_config{"system_dbmodule"};
11494         ($dbmodulename) = $dbmodulename =~ m/^(.*)$/g;
11495         eval "use " . $dbmodulename;
11496         $dbmodulename = "Kiriwrite::Database::" . $kiriwrite_config{"system_dbmodule"};
11497         $kiriwrite_dbmodule = $dbmodulename->new();
11499         # Load the following settings to the database module.
11501         $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"} });
11503         return;
11507 sub kiriwrite_variablecheck{
11508 #################################################################################
11509 # kiriwrite_variablecheck: Checks the variables for any invalid characters.     #
11510 #                                                                               #
11511 # Usage:                                                                        #
11512 #                                                                               #
11513 # kiriwrite_variablecheck(variablename, type, length, noerror);                 #
11514 #                                                                               #
11515 # variablename  Specifies the variable to be checked.                           #
11516 # type          Specifies what type the variable is.                            #
11517 # option        Specifies the maximum/minimum length of the variable            #
11518 #               (if minlength/maxlength is used) or if the filename should be   #
11519 #               checked to see if it is blank.                                  #
11520 # noerror       Specifies if Kiriwrite should return an error or not on         #
11521 #               certain values.                                                 #
11522 #################################################################################
11524         # Get the values that were passed to the subroutine.
11526         my ($variable_data, $variable_type, $variable_option, $variable_noerror) = @_;
11528         if ($variable_type eq "numbers"){
11530                 # Check for numbers and return an error if there is anything else than numebrs.
11532                 my $variable_data_validated = $variable_data;   # Copy the variable_data to variable_data_validated.
11533                 $variable_data_validated =~ tr/0-9//d;          # Take away all of the numbers and from the variable. 
11534                                                                 # If it only contains numbers then it should be blank.
11536                 if ($variable_data_validated eq ""){
11537                         # The validated variable is blank. So continue to the end of this section where the return function should be.
11538                 } else {
11539                         # The variable is not blank, so check if the no error value is set
11540                         # to 1 or not.
11542                         if ($variable_noerror eq 1){
11544                                 # The validated variable is not blank and the noerror
11545                                 # value is set to 1. So return an value of 1.
11546                                 # (meaning that the data is invalid).
11548                                 return 1;
11550                         } elsif ($variable_noerror eq 0) {
11552                                 # The validated variable is not blank and the noerror
11553                                 # value is set to 0.
11555                                 kiriwrite_error("invalidvariable");
11557                         } else {
11559                                 # The variable noerror value is something else
11560                                 # pther than 1 or 0. So return an error.
11562                                 kiriwrite_error("invalidvariable");
11564                         }
11566                 }
11568                 return 0;
11570         } elsif ($variable_type eq "lettersnumbers"){
11572                 # Check for letters and numbers and return an error if there is anything else other
11573                 # than letters and numbers.
11575                 my $variable_data_validated = $variable_data;   # Copy the variable_data to variable_data_validated
11576                 $variable_data_validated =~ tr/a-zA-Z0-9.//d;
11577                 $variable_data_validated =~ s/\s//g;
11579                 if ($variable_data_validated eq ""){
11580                         # The validated variable is blank. So continue to the end of this section where the return function should be.
11581                 } else {
11582                         # The variable is not blank, so check if the no error value is set
11583                         # to 1 or not.
11585                         if ($variable_noerror eq 1){
11587                                 # The validated variable is not blank and the noerror
11588                                 # value is set to 1. So return an value of 1.
11589                                 # (meaning that the data is invalid).
11591                                 return 1;
11593                         } elsif ($variable_noerror eq 0) {
11595                                 # The validated variable is not blank and the noerror
11596                                 # value is set to 0.
11598                                 kiriwrite_error("invalidvariable");
11600                         } else {
11602                                 # The variable noerror value is something else
11603                                 # pther than 1 or 0. So return an error.
11605                                 kiriwrite_error("invalidvariable");
11607                         }
11609                 }
11611                 return 0;
11613         } elsif ($variable_type eq "maxlength"){
11614                 # Check for the length of the variable, return an error if it is longer than the length specified.
11616                 # Check if the variable_data string is blank, if it is then set the variable_data_length
11617                 # to '0'.
11619                 my $variable_data_length = 0;
11621                 if (!$variable_data){
11623                         # Set variable_data_length to '0'.
11624                         $variable_data_length = 0;
11626                 } else {
11628                         # Get the length of the variable recieved.
11629                         $variable_data_length = length($variable_data);
11631                 }
11635                 if ($variable_data_length > $variable_option){
11637                         # The variable length is longer than it should be so check if
11638                         # the no error value is set 1.
11640                         if ($variable_noerror eq 1){
11642                                 # The no error value is set to 1, so return an
11643                                 # value of 1 (meaning tha the variable is
11644                                 # too long to be used).
11646                                 return 1;
11648                         } elsif ($variable_noerror eq 0){
11650                                 # The no error value is set to 0, so return
11651                                 # an error.
11653                                 kiriwrite_error("variabletoolong");
11655                         } else {
11657                                 # The no error value is something else other
11658                                 # than 0 or 1, so return an error.
11660                                 kiriwrite_error("variabletoolong");
11662                         }
11664                 } else {
11666                         # The variable length is exactly or shorter than specified, so continue to end of this section where
11667                         # the return function should be.
11669                 }
11671                 return 0;
11673         } elsif ($variable_type eq "blank"){
11674                 # Check if the variable is blank and if it is blank, then return an error.
11676                 if (!$variable_data){
11678                         # The variable data really is blank, so check what
11679                         # the no error value is set.
11681                         if ($variable_noerror eq 1){
11683                                 # The no error value is set to 1, so return
11684                                 # a value of 1 (saying that the variable was
11685                                 # blank).
11687                                 return 1;
11689                         } elsif ($variable_noerror eq 0){
11691                                 # The no error value is set to 0, so return
11692                                 # an error.
11694                                 kiriwrite_error("blankvariable");
11696                         } else {
11698                                 # The no error value is something else other
11699                                 # than 0 or 1, so return an error.
11701                                 kiriwrite_error("invalidvariable");
11703                         }
11705                 }
11707                 return 0;
11709         } elsif ($variable_type eq "filename"){
11710                 # Check for letters and numbers, if anything else than letters and numbers is there (including spaces) return
11711                 # an error.
11713                 # Check if the filename passed is blank, if it is then return with an error.
11715                 if ($variable_data eq ""){
11717                         # The filename specified is blank, so check what the
11718                         # noerror value is set.
11720                         if ($variable_noerror eq 1){
11722                                 # The no error value is set to 1 so return
11723                                 # a value of 1 (meaning that the filename
11724                                 # was blank).
11726                                 return 1;
11728                         } elsif ($variable_noerror eq 0){
11730                                 # The no error value is set to 1 so return
11731                                 # an error.
11733                                 kiriwrite_error("blankfilename");
11735                         } else {
11737                                 # The no error value is something else other
11738                                 # than 0 or 1, so return an error.
11740                                 kiriwrite_error("invalidvariable");
11742                         }
11744                 } else {
11747                 }
11749                 my $variable_data_validated = $variable_data;
11750                 $variable_data_validated =~ tr/a-zA-Z0-9\.//d;
11752                 # Check if the validated data variable is blank, if it is 
11753                 # then continue to the end of this section where the return 
11754                 # function should be, otherwise return an error.
11756                 if ($variable_data_validated eq ""){
11758                         # The validated data variable is blank, meaning that 
11759                         # it only contained letters and numbers.
11761                 } else {
11763                         # The validated data variable is not blank, meaning 
11764                         # that it contains something else, so return an error
11765                         # (or a value).
11767                         if ($variable_noerror eq 1){
11769                                 # The no error value is set to 1 so return
11770                                 # an value of 2. (meaning that the filename
11771                                 # is invalid).
11774                                 return 2;
11776                         } elsif ($variable_noerror eq 0){
11778                                 # The no error value is set to 0 so return
11779                                 # an error.
11781                                 kiriwrite_error("invalidfilename");
11783                         } else {
11785                                 # The no error value is something else other
11786                                 # than 0 or 1 so return an error.
11788                                 kiriwrite_error("invalidvariable");
11790                         }
11792                 }
11794                 return 0;
11796         } elsif ($variable_type eq "filenameindir"){
11797                 # Check if the filename is in the directory and return an
11798                 # error if it isn't.
11800                 if ($variable_data eq ""){
11802                         # The filename specified is blank, so check what the
11803                         # noerror value is set.
11805                         if ($variable_noerror eq 1){
11807                                 # The no error value is set to 1 so return
11808                                 # a value of 1 (meaning that the filename
11809                                 # was blank).
11811                                 return 1;
11813                         } elsif ($variable_noerror eq 0){
11815                                 # The no error value is set to 1 so return
11816                                 # an error.
11818                                 kiriwrite_error("blankfilename");
11820                         } else {
11822                                 # The no error value is something else other
11823                                 # than 0 or 1, so return an error.
11825                                 kiriwrite_error("invalidvariable");
11827                         }
11829                 } else {
11832                 }
11834                 # Set the following variables for later on.
11836                 my $variable_data_length = 0;
11837                 my $variable_data_char = "";
11838                 my $variable_data_validated = "";
11839                 my $variable_data_seek = 0;
11840                 my $variable_database_list = "";
11841                 my $variable_database_listcurrent = "";
11842                 my $variable_data_firstlevel = 1;
11844                 # Get the length of the variable recieved.
11846                 $variable_data_length = length($variable_data);
11848                 # Check if the database filename contains the directory command
11849                 # for up a directory level and if it is, return an error
11850                 # or return with a number.
11852                 do {
11854                         # Get a character from the filename passed to this subroutine.
11856                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
11858                         # Check if the current character is the forward slash character.
11860                         if ($variable_data_char eq "/"){
11862                                 # Check if the current directory is blank (and on the first level), or if the
11863                                 # current directory contains two dots or one dot, if it does return an error.
11865                                 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
11867                                         # Check if the noerror value is set to 1, if it is return an
11868                                         # number, else return an proper error.
11870                                         if ($variable_noerror eq 1){
11872                                                 # Page filename contains invalid characters and
11873                                                 # the no error value is set to 1 so return a 
11874                                                 # value of 2 (meaning that the page filename
11875                                                 # is invalid).
11877                                                 return 2;
11879                                         } elsif ($variable_noerror eq 0) {
11881                                                 # Page filename contains invalid characters and
11882                                                 # the no error value is set to 0 so return an
11883                                                 # error.
11885                                                 kiriwrite_error("invalidfilename");
11887                                         } else {
11889                                                 # The no error value is something else other
11890                                                 # than 0 or 1 so return an error.
11892                                                 kiriwrite_error("invalidvariable");
11894                                         }
11896                                 }
11898                                 # Append the forward slash, clear the current directory name and set
11899                                 # the first directory level value to 0.
11901                                 $variable_database_list = $variable_database_list . $variable_data_char;
11902                                 $variable_database_listcurrent = "";
11903                                 $variable_data_firstlevel = 0;
11905                         } else {
11907                                 # Append the current character to the directory name and to the current
11908                                 # directory name.
11910                                 $variable_database_list = $variable_database_list . $variable_data_char;
11911                                 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
11913                         }
11915                         # Increment the seek counter.
11917                         $variable_data_seek++;
11919                 } until ($variable_data_seek eq $variable_data_length);
11921                 return 0;
11923         } elsif ($variable_type eq "datetime"){
11924                 # Check if the date and time setting format is valid.
11926                 if ($variable_data eq ""){
11928                         if ($variable_noerror eq 1){
11930                                 # The no error value is set to 1 so return
11931                                 # a value of 1 (meaning that the date and
11932                                 # time format was blank).
11934                                 return 1;
11936                         } elsif ($variable_noerror eq 0){
11938                                 # The no error value is set to 1 so return
11939                                 # an error.
11941                                 kiriwrite_error("blankdatetimeformat");
11943                         } else {
11945                                 # The no error value is something else other
11946                                 # than 0 or 1, so return an error.
11948                                 kiriwrite_error("invalidvariable");
11950                         }
11952                 }
11954                 my $variable_data_validated = $variable_data;
11955                 $variable_data_validated =~ tr|dDmMyYhms/():[ ]||d;
11957                 if ($variable_data_validated eq ""){
11959                         # The date and time format is valid. So
11960                         # skip this bit.
11962                 } else {
11964                         # The validated data variable is not blank, meaning 
11965                         # that it contains something else, so return an error
11966                         # (or a value).
11968                         if ($variable_noerror eq 1){
11970                                 # The no error value is set to 1 so return
11971                                 # an value of 2. (meaning that the date and
11972                                 # time format was invalid).
11974                                 return 2;
11976                         } elsif ($variable_noerror eq 0){
11978                                 # The no error value is set to 0 so return
11979                                 # an error.
11981                                 kiriwrite_error("invaliddatetimeformat");
11983                         } else {
11985                                 # The no error value is something else other
11986                                 # than 0 or 1 so return an error.
11988                                 kiriwrite_error("invalidvariable");
11990                         }
11992                 }
11994                 return 0;
11996         } elsif ($variable_type eq "directory"){
11997                 # Check if the directory only contains letters and numbers and
11998                 # return an error if anything else appears.
12000                 my $variable_data_validated = $variable_data;
12001                 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12003                 if ($variable_data eq ""){
12005                         if ($variable_noerror eq 1){
12007                                 # The no error value is set to 1 so return
12008                                 # a value of 1 (meaning that the directory
12009                                 # name was blank).
12011                                 return 1;
12013                         } elsif ($variable_noerror eq 0){
12015                                 # The no error value is set to 1 so return
12016                                 # an error.
12018                                 kiriwrite_error("blankdirectory");
12020                         } else {
12022                                 # The no error value is something else other
12023                                 # than 0 or 1, so return an error.
12025                                 kiriwrite_error("invalidvariable");
12027                         }
12029                 }
12031                 if ($variable_data_validated eq ""){
12033                         # The validated data variable is blank, meaning that
12034                         # it only contains letters and numbers.
12036                 } else {
12038                         # The validated data variable is not blank, meaning 
12039                         # that it contains something else, so return an error
12040                         # (or a value).
12042                         if ($variable_noerror eq 1){
12044                                 # The no error value is set to 1 so return
12045                                 # an value of 2. (meaning that the directory
12046                                 # name is invalid).
12048                                 return 2;
12050                         } elsif ($variable_noerror eq 0){
12052                                 # The no error value is set to 0 so return
12053                                 # an error.
12055                                 kiriwrite_error("invaliddirectory");
12057                         } else {
12059                                 # The no error value is something else other
12060                                 # than 0 or 1 so return an error.
12062                                 kiriwrite_error("invalidvariable");
12064                         }
12066                 }
12068                 return 0;
12070         } elsif ($variable_type eq "language_filename"){
12072                 # The variable type is a language filename type.
12073                 # Check if the language file name is blank and 
12074                 # if it is then return an error (or value).
12076                 if ($variable_data eq ""){
12078                         # The language filename is blank so check the
12079                         # no error value and return an error (or value).
12081                         if ($variable_noerror eq 1){
12083                                 # Language filename is blank and the no error value
12084                                 # is set as 1, so return a value of 1 (saying that
12085                                 # the language filename is blank).
12087                                 return 1;
12089                         } elsif ($variable_noerror eq 0) {
12091                                 # Language filename is blank and the no error value
12092                                 # is not set as 1, so return an error.
12094                                 kiriwrite_critical("languagefilenameblank");
12096                         } else {
12098                                 # The noerror value is something else other
12099                                 # than 0 or 1 so return an error.
12101                                 kiriwrite_error("invalidvariable");
12103                         }
12105                 }
12107                 # Set the following variables for later on.
12109                 my $variable_data_length = 0;
12110                 my $variable_data_char = "";
12111                 my $variable_data_seek = 0;
12113                 # Get the length of the language file name.
12115                 $variable_data_length = length($variable_data);
12117                 do {
12119                         # Get a character from the language filename passed to this 
12120                         # subroutine and the character the seek counter value is set
12121                         # to.
12123                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12125                         # Check if the language filename contains a forward slash or a dot, 
12126                         # if the selected character is a forward slash then return an error
12127                         # (or value).
12129                         if ($variable_data_char eq "/" || $variable_data_char eq "."){
12131                                 # The language filename contains a forward slash or
12132                                 # a dot so depending on the no error value, return
12133                                 # an error or a value.
12135                                 if ($variable_noerror eq 1){
12137                                         # Language filename contains a forward slash or a dot
12138                                         # and the no error value has been set to 1, so return 
12139                                         # an value of 2 (saying that the language file name is 
12140                                         # invalid).
12142                                         return 2;
12144                                 } elsif ($variable_noerror eq 0) {
12146                                         # Language filename contains a forward slash and the no
12147                                         # error value has not been set to 1, so return an error.
12149                                         kiriwrite_critical("languagefilenameinvalid");
12151                                 } else {
12153                                         # The noerror value is something else other than
12154                                         # 1 or 0 so return an error.
12156                                         kiriwrite_error("invalidvariable");
12158                                 }
12160                         }
12162                         # Increment the seek counter.
12164                         $variable_data_seek++;
12166                 } until ($variable_data_seek eq $variable_data_length);
12168                 return 0;
12170         } elsif ($variable_type eq "pagesetting"){
12172                 # The variable type is a page setting, so check if the page
12173                 # setting has one of the valid options.
12175                 if ($variable_data eq 0 || $variable_data eq 1 || $variable_data eq 2 || $variable_data eq 3){
12177                         # The variable is one of the options above, so continue
12178                         # to the end of this section.
12180                 } else {
12182                         # The variable is not one of the options above, so check
12183                         # and see if a error or a value should be returned.
12185                         if ($variable_noerror eq 1){
12187                                 # The page setting is invalid and the no error
12188                                 # value is set 1, so return a value of 1
12189                                 # (saying that the page setting value is
12190                                 # invalid).
12192                                 return 1;
12194                         } elsif ($variable_noerror eq 0) {
12196                                 # Page setting is invalid and the no error value
12197                                 # is not 1, so return an error.
12199                                 kiriwrite_error("invalidvariable");
12201                         } else {
12203                                 # The no error value is something else other
12204                                 # than 0 or 1 so return an error.
12206                                 kiriwrite_error("invalidvariable");
12208                         }
12210                 }
12212                 return 0;
12214         } elsif ($variable_type eq "page_filename"){
12215          
12216                 # The variable type is a page filename type. Check
12217                 # if the data is empty and if it is then return an
12218                 # error (or value).
12220                 if ($variable_data eq ""){
12222                         # The filename is blank so check the no error
12223                         # value and depending on it return an value
12224                         # or an error.
12226                         if ($variable_noerror eq 1){
12228                                 # Page filename is blank and the no error value
12229                                 # is set as 1, so return a value of 1 (saying
12230                                 # the filename is blank).
12232                                 return 1;
12234                         } elsif ($variable_noerror eq 0) {
12236                                 # Page filename is blank and the no error value
12237                                 # is not 1, so return an error.
12239                                 kiriwrite_error("emptypagefilename");
12241                         } else {
12243                                 # The no error value is something else other
12244                                 # than 0 or 1 so return an error.
12246                                 kiriwrite_error("invalidvariable");
12248                         }
12249                 }
12251                 # Set the following variables for later on.
12254                 my $variable_data_length = 0;
12255                 my $variable_data_slash = 0;
12256                 my $variable_data_char = "";
12257                 my $variable_data_validated = "";
12258                 my $variable_data_seek = 0;
12259                 my $variable_database_list = "";
12260                 my $variable_database_listcurrent = "";
12261                 my $variable_data_firstlevel = 1;
12263                 # Get the length of the filename.
12265                 $variable_data_length = length($variable_data);
12267                 # Check that only valid characters should be appearing in
12268                 # the filename.
12270                 $variable_data_validated = $variable_data;
12271                 $variable_data_validated =~ tr|a-zA-Z0-9\.\/\-_||d;
12273                 if ($variable_data_validated ne ""){
12275                         # The validated variable is not blank, meaning the
12276                         # variable contains invalid characters, so return
12277                         # an error.
12279                         if ($variable_noerror eq 1){
12281                                 # Page filename contains invalid characters and
12282                                 # the no error value is set to 1 so return a 
12283                                 # value of 2 (meaning that the page filename
12284                                 # is invalid).
12286                                 return 2;
12288                         } elsif ($variable_noerror eq 0) {
12290                                 # Page filename contains invalid characters and
12291                                 # the no error value is set to 0 so return an
12292                                 # error.
12294                                 kiriwrite_error("invalidfilename");
12296                         } else {
12298                                 # The no error value is something else other
12299                                 # than 0 or 1 so return an error.
12301                                 kiriwrite_error("invalidvariable");
12303                         }
12305                 }
12307                 # Check if the page filename contains the directory command
12308                 # for up a directory level and if it is, return an error
12309                 # or return with a number.
12311                 do {
12313                         # Get a character from the filename passed to this subroutine.
12315                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12317                         # Check if the current character is the forward slash character.
12319                         if ($variable_data_char eq "/"){
12321                                 # Check if the current directory is blank (and on the first level), or if the
12322                                 # current directory contains two dots or one dot, if it does return an error.
12324                                 $variable_data_slash = 1;
12326                                 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
12328                                         # Check if the noerror value is set to 1, if it is return an
12329                                         # number, else return an proper error.
12331                                         if ($variable_noerror eq 1){
12333                                                 # Page filename contains invalid characters and
12334                                                 # the no error value is set to 1 so return a 
12335                                                 # value of 2 (meaning that the page filename
12336                                                 # is invalid).
12338                                                 return 2;
12340                                         } elsif ($variable_noerror eq 0) {
12342                                                 # Page filename contains invalid characters and
12343                                                 # the no error value is set to 0 so return an
12344                                                 # error.
12346                                                 kiriwrite_error("invalidfilename");
12348                                         } else {
12350                                                 # The no error value is something else other
12351                                                 # than 0 or 1 so return an error.
12353                                                 kiriwrite_error("invalidvariable");
12355                                         }
12357                                 }
12359                                 # Append the forward slash, clear the current directory name and set
12360                                 # the first directory level value to 0.
12362                                 $variable_database_list = $variable_database_list . $variable_data_char;
12363                                 $variable_database_listcurrent = "";
12364                                 $variable_data_firstlevel = 0;
12366                         } else {
12368                                 # Append the current character to the directory name and to the current
12369                                 # directory name.
12371                                 $variable_data_slash = 0;
12373                                 $variable_database_list = $variable_database_list . $variable_data_char;
12374                                 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
12376                         }
12378                         # Increment the seek counter.
12380                         $variable_data_seek++;
12382                 } until ($variable_data_seek eq $variable_data_length);
12384                 # Check if the last character is a slash and return an
12385                 # error if it is.
12387                 if ($variable_data_slash eq 1){
12389                         if ($variable_noerror eq 1){
12391                                 # Last character is a slash and the no error 
12392                                 # value is set to 1 so return a value of 2 
12393                                 # (meaning that the page filename is invalid).
12395                                 return 2;
12397                         } elsif ($variable_noerror eq 0) {
12399                                 # Page filename contains a slash for the last
12400                                 # character and the no error value is set to 0 
12401                                 # so return an error.
12403                                 kiriwrite_error("invalidfilename");
12405                         } else {
12407                                 # The no error value is something else other
12408                                 # than 0 or 1 so return an error.
12410                                 kiriwrite_error("invalidvariable");
12412                         }
12414                 }
12416                 return 0;
12418         } elsif ($variable_type eq "module"){
12420                 # The variable type is a presentation module filename.
12422                 # Check if the variable_data is blank and if it is
12423                 # return an error.
12425                 if ($variable_data eq ""){
12427                         # The presentation module is blank so check if an error
12428                         # value should be returned or a number should be
12429                         # returned.
12431                         if ($variable_noerror eq 1){
12433                                 # Module name is blank and the no error value 
12434                                 # is set to 1 so return a value of 2 (meaning 
12435                                 # that the page filename is blank).
12437                                 return 1;
12439                         } elsif ($variable_noerror eq 0) {
12441                                 # Module name contains is blank and the no error 
12442                                 # value is set to 0 so return an error.
12444                                 kiriwrite_critical("moduleblank");
12446                         } else {
12448                                 # The no error value is something else other
12449                                 # than 0 or 1 so return an error.
12451                                 kiriwrite_critical("invalidvalue");
12453                         }
12455                 } else {
12457                 }
12459                 my $variable_data_validated = $variable_data;
12460                 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12462                 if ($variable_data_validated eq ""){
12464                 } else {
12466                         if ($variable_noerror eq 1){
12468                                 # Module name contains invalid characters and
12469                                 # the no error value is set to 1 so return a 
12470                                 # value of 2 (meaning that the page filename
12471                                 # is invalid).
12473                                 return 2;
12475                         } elsif ($variable_noerror eq 0) {
12477                                 # Module name contains invalid characters and
12478                                 # the no error value is set to 0 so return an
12479                                 # error.
12481                                 kiriwrite_critical("moduleinvalid");
12483                         } else {
12485                                 # The no error value is something else other
12486                                 # than 0 or 1 so return an error.
12488                                 kiriwrite_error("invalidvalue");
12490                         }
12492                 }
12494                 return 0;
12496         } elsif ($variable_type eq "utf8"){
12498                 # The variable type is a UTF8 string.
12500                 if (!$variable_data){
12502                         $variable_data = "";
12504                 }
12506                 # Check if the string is a valid UTF8 string.
12508                 if ($variable_data =~ m/^(
12509                         [\x09\x0A\x0D\x20-\x7E]              # ASCII
12510                         | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
12511                         |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
12512                         | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
12513                         |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
12514                         |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
12515                         | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
12516                         |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
12517                 )*$/x){
12519                         # The UTF-8 string is valid.
12521                 } else {
12523                         # The UTF-8 string is not valid, check if the no error
12524                         # value is set to 1 and return an error if it isn't.
12526                         if ($variable_noerror eq 1){
12528                                 # The no error value has been set to 1, so return
12529                                 # a value of 1 (meaning that the UTF-8 string is
12530                                 # invalid).
12532                                 return 1; 
12534                         } elsif ($variable_noerror eq 0) {
12536                                 # The no error value has been set to 0, so return
12537                                 # an error.
12539                                 kiriwrite_error("invalidutf8");
12541                         } else {
12543                                 # The no error value is something else other than 0
12544                                 # or 1, so return an error.
12546                                 kiriwrite_error("invalidoption");
12548                         }
12550                 }
12552                 return 0;
12554         } elsif ($variable_type eq "serverprotocol"){
12556                 # Check if the server protocol is TCP or UDP and return
12557                 # an error if it isn't.
12559                 if ($variable_data ne "tcp" && $variable_data ne "udp"){
12561                         # The protocol given is not valid, check if the no
12562                         # error value is set to 1 and return an error if it isn't.
12564                         if ($variable_noerror eq 1){
12566                                 # The no error value has been set to 1, so return a
12567                                 # value of 1 (meaning that the server protocol is
12568                                 # invalid).
12570                                 return 1;
12572                         } elsif ($variable_noerror eq 0){
12574                                 # The no error value has been set to 0, so return
12575                                 # an error.
12577                                 kiriwrite_error("serverprotocolinvalid");
12579                         } else {
12581                                 # The no error value is something else other than 0
12582                                 # or 1, so return an error.
12584                                 kiriwrite_error("invalidoption");
12586                         }
12588                 }
12590                 return 0;
12592         } elsif ($variable_type eq "port"){
12594                 # Check if the port number given is less than 0 or more than 65535
12595                 # and return an error if it is.
12597                 if ($variable_data < 0 || $variable_data > 65535){
12599                         # The port number is less than 0 and more than 65535 so
12600                         # check if the no error value is set to 1 and return an
12601                         # error if it isn't.
12603                         if ($variable_noerror eq 1){
12605                                 # The no error value has been set to 1, so return a
12606                                 # value of 1 (meaning that the port number is invalid).
12608                                 return 1;
12610                         } elsif ($variable_noerror eq 0){
12612                                 # The no error value has been set to 0, so return
12613                                 # an error.
12615                                 kiriwrite_error("serverportnumberinvalid");
12617                         } else {
12619                                 # The no error value is something else other than 0
12620                                 # or 1, so return an error.
12622                                 kiriwrite_error("invalidoption");
12624                         }
12626                 }
12628                 return 0;
12630         }
12632         # Another type than the valid ones above has been specified so return an error specifying an invalid option.
12633         kiriwrite_error("invalidoption");
12637 sub kiriwrite_output_header{
12638 #################################################################################
12639 # kiriwrite_output_header: Outputs the header to the browser/stdout/console.    #
12640 #                                                                               #
12641 # Usage:                                                                        #
12642 #                                                                               #
12643 # kiriwrite_output_header(mimetype);                                            #
12644 #                                                                               #
12645 # mimetype      Specifies the mime type of the header.                          #
12646 #################################################################################
12648         # Print a header saying that the page expires immediately since the
12649         # date is set in the past.
12651         #print "Expires: Sunday, 01-Jan-06 00:00:00 GMT\n";
12652         #print "Content-Type: text/html; charset=utf-8\n";
12653         #print header();
12654         print header(-Expires=>'Sunday, 01-Jan-06 00:00:00 GMT', -charset=>'utf-8');
12655         return;
12658 sub kiriwrite_processfilename{
12659 #################################################################################
12660 # kiriwrite_processfilename: Processes a name and turns it into a filename that #
12661 # can be used by Kiriwrite.                                                     #
12662 #                                                                               #
12663 # Usage:                                                                        #
12664 #                                                                               #
12665 # kiriwrite_processfilename(text);                                              #
12666 #                                                                               #
12667 # text          Specifies the text to be used in the process for creating a new #
12668 #               filename.                                                       #
12669 #################################################################################
12671         # Get the values that have been passed to the subroutine.
12673         my ($process_text) = @_;
12675         # Define some variables that will be used later on.
12677         my $processed_stageone  = "";
12678         my $processed_stagetwo  = "";
12679         my $processed_length    = "";
12680         my $processed_char      = "";
12681         my $processed_seek      = 0;
12682         my $processed_filename  = "";
12684         # Set the first stage value of the processed filename to the
12685         # process filename and then filter it out to only contain
12686         # numbers and letters (no spaces) and then convert the
12687         # capitals to small letters.
12689         $processed_stageone = $process_text;
12690         $processed_stageone =~ tr#a-zA-Z0-9##cd;
12691         $processed_stageone =~ tr/A-Z/a-z/;
12693         # Now set the second stage value of the processed filename
12694         # to the first stage value of the processed filename and
12695         # then limit the filename down to 32 characters.
12697         $processed_stagetwo = $processed_stageone;
12698         $processed_length = length($processed_stagetwo);
12700         # Process the second stage filename into the final 
12701         # filename and do so until the seek counter is 32
12702         # or reaches the length of the second stage filename.
12704         do {
12706                 # Get the character that is the seek counter
12707                 # is set at.
12709                 $processed_char = substr($processed_stagetwo, $processed_seek, 1);
12711                 # Append to the final processed filename.
12713                 $processed_filename = $processed_filename . $processed_char;
12715                 # Increment the seek counter.
12717                 $processed_seek++;
12719         } until ($processed_seek eq 32 || $processed_seek eq $processed_length);
12721         return $processed_filename;
12725 sub kiriwrite_language{
12726 #################################################################################
12727 # kiriwrite_language: Process language strings that need certain text inserted. #
12728 #                                                                               #
12729 # Usage:                                                                        #
12730 #                                                                               #
12731 # kiriwrite_language(string, [text, text, ...]);                                #
12732 #                                                                               #
12733 # string        Specifies the string to process.                                #
12734 # text          Specifies the text to pass to the string (can be repeated many  #
12735 #               times).                                                         #
12736 #################################################################################
12738         my $string = shift;
12739         my $item;
12741         foreach $item (@_){
12743                 $string =~ s/%s/$item/;
12745         }
12747         return $string;
12751 sub kiriwrite_error{
12752 #################################################################################
12753 # kiriwrite_error: Prints out an error message.                                 #
12754 #                                                                               #
12755 # Usage:                                                                        #
12756 #                                                                               #
12757 # kiriwrite_error(errortype, errorext);                                         #
12758 #                                                                               #
12759 # errortype     Specifies the type of error that occured.                       #
12760 # errorext      Specifies the extended error information.                       #
12761 #################################################################################
12763         # Get the error type from the subroutine.
12765         my ($error_type, $error_extended) = @_;
12767         # Disconnect from the database server.
12769         if ($kiriwrite_dbmodule){
12770                 $kiriwrite_dbmodule->disconnect();
12771         }
12773         # Load the list of error messages.
12775         my ($kiriwrite_error, %kiriwrite_error);
12777         %kiriwrite_error = (
12779                 # Catch all error message.
12780                 "generic"                       => $kiriwrite_lang->{error}->{generic},
12782                 # Standard error messages.
12783                 "blankfilename"                 => $kiriwrite_lang->{error}->{blankfilename},
12784                 "blankvariable"                 => $kiriwrite_lang->{error}->{blankvariable},
12785                 "fileexists"                    => $kiriwrite_lang->{error}->{fileexists},
12786                 "internalerror"                 => $kiriwrite_lang->{error}->{internalerror},
12787                 "invalidoption"                 => $kiriwrite_lang->{error}->{invalidoption},
12788                 "invalidaction"                 => $kiriwrite_lang->{error}->{invalidaction},
12789                 "invalidfilename"               => $kiriwrite_lang->{error}->{invalidfilename},
12790                 "invalidmode"                   => $kiriwrite_lang->{error}->{invalidmode},
12791                 "invalidutf8"                   => $kiriwrite_lang->{error}->{invalidutf8},
12792                 "invalidvariable"               => $kiriwrite_lang->{error}->{invalidvariable},
12793                 "variabletoolong"               => $kiriwrite_lang->{error}->{variabletoolong},
12795                 # Specific error messages.
12796                 "blankcompiletype"              => $kiriwrite_lang->{error}->{blankcompiletype},
12797                 "blankdatabasepageadd"          => $kiriwrite_lang->{error}->{blankdatabasepageadd},
12798                 "blankdirectory"                => $kiriwrite_lang->{error}->{blankdirectory},
12799                 "blankfindfilter"               => $kiriwrite_lang->{error}->{blankfindfilter},
12800                 "blankdatetimeformat"           => $kiriwrite_lang->{error}->{blankdatetimeformat},
12801                 "databaseconnectionerror"       => $kiriwrite_lang->{error}->{databaseconnectionerror},
12802                 "databasecategoriestoolong"     => $kiriwrite_lang->{error}->{databasecategoriestoolong},
12803                 "databasecopysame"              => $kiriwrite_lang->{error}->{databasecopysame},
12804                 "databasealreadyexists"         => $kiriwrite_lang->{error}->{databasealreadyexists},
12805                 "datadirectorymissing"          => $kiriwrite_lang->{error}->{datadirectorymissing},
12806                 "datadirectoryinvalidpermissions"       => $kiriwrite_lang->{error}->{datadirectoryinvalidpermissions},
12807                 "databasedescriptiontoolong"    => $kiriwrite_lang->{error}->{databasedescriptiontoolong},
12808                 "databasefilenameinvalid"       => $kiriwrite_lang->{error}->{databasefilenameinvalid},
12809                 "databasefilenametoolong"       => $kiriwrite_lang->{error}->{databasefilenametoolong},
12810                 "databaseerror" => $kiriwrite_lang->{error}->{databaseerror},
12811                 "databaseinvalidpermissions"    => $kiriwrite_lang->{error}->{databaseinvalidpermissions},
12812                 "databasenameinvalid"           => $kiriwrite_lang->{error}->{databasenameinvalid},
12813                 "databasenametoolong"           => $kiriwrite_lang->{error}->{databasenametoolong},
12814                 "databasenameblank"             => $kiriwrite_lang->{error}->{databasenameblank},
12815                 "databasemissingfile"           => $kiriwrite_lang->{error}->{databasemissingfile},
12816                 "databasemovemissingfile"       => $kiriwrite_lang->{error}->{databasemovemissingfile},
12817                 "databasenorename"              => $kiriwrite_lang->{error}->{databasenorename},
12818                 "databasemovesame"              => $kiriwrite_lang->{error}->{databasemovesame},
12819                 "dbmoduleblank"                 => $kiriwrite_lang->{error}->{dbmoduleblank},
12820                 "dbmoduleinvalid"               => $kiriwrite_lang->{error}->{dbmoduleinvalid},
12821                 "dbdirectoryblank"              => $kiriwrite_lang->{error}->{dbdirectoryblank},
12822                 "dbdirectoryinvalid"            => $kiriwrite_lang->{error}->{dbdirectoryinvalid},
12823                 "dbmodulemissing"               => $kiriwrite_lang->{error}->{dbmodulemissing},
12824                 "filtersdatabasenotcreated"     => $kiriwrite_lang->{error}->{filtersdatabasenotcreated},
12825                 "filtersdbdatabaseerror"        => $kiriwrite_lang->{error}->{filtersdbdatabaseerror},
12826                 "filtersdbpermissions"          => $kiriwrite_lang->{error}->{filtersdbpermissions},
12827                 "filtersdbmissing"              => $kiriwrite_lang->{error}->{filtersdbmissing},
12828                 "filteridblank"                 => $kiriwrite_lang->{error}->{filteridblank},
12829                 "filterdoesnotexist"            => $kiriwrite_lang->{error}->{filterdoesnotexist},
12830                 "filteridinvalid"               => $kiriwrite_lang->{error}->{filteridinvalid},
12831                 "filteridtoolong"               => $kiriwrite_lang->{error}->{filteridtoolong},
12832                 "findfiltertoolong"             => $kiriwrite_lang->{error}->{findfiltertoolong},
12833                 "filterpriorityinvalid"         => $kiriwrite_lang->{error}->{filterpriorityinvalid},
12834                 "filterpriorityinvalidchars"    => $kiriwrite_lang->{error}->{filterpriorityinvalidchars},
12835                 "filterprioritytoolong"         => $kiriwrite_lang->{error}->{filterprioritytoolong},
12836                 "invalidcompiletype"            => $kiriwrite_lang->{error}->{invalidcompiletype},
12837                 "invalidpagenumber"             => $kiriwrite_lang->{error}->{invalidpagenumber},
12838                 "nopagesselected"               => $kiriwrite_lang->{error}->{nopagesselected},
12839                 "invaliddirectory"              => $kiriwrite_lang->{error}->{invaliddirectory},
12840                 "invaliddatetimeformat"         => $kiriwrite_lang->{error}->{invaliddatetimeformat},
12841                 "invalidlanguagefilename"       => $kiriwrite_lang->{error}->{invalidlanguagefilename},
12842                 "languagefilenamemissing"       => $kiriwrite_lang->{error}->{languagefilenamemissing},
12843                 "moduleblank"                   => $kiriwrite_lang->{error}->{moduleblank},
12844                 "moduleinvalid"                 => $kiriwrite_lang->{error}->{moduleinvalid},
12845                 "newcopydatabasedatabaseerror"  => $kiriwrite_lang->{error}->{newcopydatabasedatabaseerror},
12846                 "newcopydatabasedoesnotexist"   => $kiriwrite_lang->{error}->{newcopydatabasedoesnotexist},
12847                 "newcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newcopydatabasefileinvalidpermissions},
12848                 "newmovedatabasedatabaseerror"  => $kiriwrite_lang->{error}->{newmovedatabasedatabaseerror},
12849                 "newmovedatabasedoesnotexist"   => $kiriwrite_lang->{error}->{newmovedatabasedoesnotexist},
12850                 "newmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newmovedatabasefileinvalidpermissions},
12851                 "nodatabasesavailable"          => $kiriwrite_lang->{error}->{nodatabasesavailable},
12852                 "nodatabaseselected"            => $kiriwrite_lang->{error}->{nodatabaseselected},
12853                 "noeditvaluesselected"          => $kiriwrite_lang->{error}->{noeditvaluesselected},
12854                 "oldcopydatabasedatabaseerror"  => $kiriwrite_lang->{error}->{oldcopydatabasedatabaseerror},
12855                 "oldcopydatabasedoesnotexist"   => $kiriwrite_lang->{error}->{oldcopydatabasedoesnotexist},
12856                 "oldcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldcopydatabasefileinvalidpermissions},
12857                 "oldmovedatabasedatabaseerror"  => $kiriwrite_lang->{error}->{oldmovedatabasedatabaseerror},
12858                 "oldmovedatabasedoesnotexist"   => $kiriwrite_lang->{error}->{oldmovedatabasedoesnotexist},
12859                 "oldmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldmovedatabasefileinvalidpermissions},
12860                 "outputdirectoryblank"          => $kiriwrite_lang->{error}->{outputdirectoryblank},
12861                 "outputdirectoryinvalid"        => $kiriwrite_lang->{error}->{outputdirectoryinvalid},
12862                 "outputdirectorymissing"        => $kiriwrite_lang->{error}->{outputdirectorymissing},
12863                 "outputdirectoryinvalidpermissions"     => $kiriwrite_lang->{error}->{outputdirectoryinvalidpermissions},
12864                 "presmoduleblank"               => $kiriwrite_lang->{error}->{presmoduleblank},
12865                 "presmoduleinvalid"             => $kiriwrite_lang->{error}->{presmoduleinvalid},
12866                 "presmodulemissing"             => $kiriwrite_lang->{error}->{presmodulemissing},
12867                 "pagefilenamedoesnotexist"      => $kiriwrite_lang->{error}->{pagefilenamedoesnotexist},
12868                 "pagefilenameexists"            => $kiriwrite_lang->{error}->{pagefilenameexists},
12869                 "pagefilenameinvalid"           => $kiriwrite_lang->{error}->{pagefilenameinvalid},
12870                 "pagefilenametoolong"           => $kiriwrite_lang->{error}->{pagefilenametoolong},
12871                 "pagefilenameblank"             => $kiriwrite_lang->{error}->{pagefilenameblank},
12872                 "pagetitletoolong"              => $kiriwrite_lang->{error}->{pagetitletoolong},
12873                 "pagedescriptiontoolong"        => $kiriwrite_lang->{error}->{pagedescriptiontoolong},
12874                 "pagesectiontoolong"            => $kiriwrite_lang->{error}->{pagesectiontoolong},
12875                 "pagedatabasefilenametoolong"   => $kiriwrite_lang->{error}->{pagedatabasefilenametoolong},
12876                 "pagesettingstoolong"           => $kiriwrite_lang->{error}->{pagesettingstoolong},
12877                 "pagesettingsinvalid"           => $kiriwrite_lang->{error}->{pagesettingsinvalid},
12878                 "pagetemplatefilenametoolong"   => $kiriwrite_lang->{error}->{pagetemplatefilenametoolong},
12879                 "replacefiltertoolong"          => $kiriwrite_lang->{error}->{replacefiltertoolong},
12880                 "servernameinvalid"             => $kiriwrite_lang->{error}->{servernameinvalid},
12881                 "servernametoolong"             => $kiriwrite_lang->{error}->{servernametoolong},
12882                 "serverdatabasenameinvalid"     => $kiriwrite_lang->{error}->{serverdatabasenameinvalid},
12883                 "serverdatabasenametoolong"     => $kiriwrite_lang->{error}->{serverdatabasenametoolong},
12884                 "serverdatabaseusernameinvalid" => $kiriwrite_lang->{error}->{serverdatabaseusernameinvalid},
12885                 "serverdatabaseusernametoolong" => $kiriwrite_lang->{error}->{serverdatabaseusernametoolong},
12886                 "serverdatabasepasswordtoolong" => $kiriwrite_lang->{error}->{serverdatabasepasswordtoolong},
12887                 "serverdatabasetableprefixinvalid"      => $kiriwrite_lang->{error}->{serverdatabasetableprefixinvalid},
12888                 "serverdatabasetableprefixtoolong"      => $kiriwrite_lang->{error}->{serverdatabasetableprefixtoolong},
12889                 "serverportnumberinvalid"       => $kiriwrite_lang->{error}->{serverportnumberinvalid},
12890                 "serverportnumberinvalidcharacters"     => $kiriwrite_lang->{error}->{serverportnumberinvalidcharacters},
12891                 "serverportnumbertoolong"       => $kiriwrite_lang->{error}->{serverportnumbertoolong},
12892                 "serverprotocolnametoolong"     => $kiriwrite_lang->{error}->{serverprotocolnametoolong},
12893                 "serverprotocolinvalid"         => $kiriwrite_lang->{error}->{serverprotocolinvalid},
12894                 "templatenameblank"             => $kiriwrite_lang->{error}->{templatenameblank},
12895                 "templatefilenameexists"        => $kiriwrite_lang->{error}->{templatefilenameexists},
12896                 "templatefilenameinvalid"       => $kiriwrite_lang->{error}->{templatefilenameinvalid},
12897                 "templatedatabaseerror"         => $kiriwrite_lang->{error}->{templatedatabaseerror},
12898                 "templatedatabaseinvalidpermissions"    => $kiriwrite_lang->{error}->{templatedatabaseinvalidpermissions},
12899                 "templatedatabaseinvalidformat" => $kiriwrite_lang->{error}->{templatedatabaseinvalidformat},
12900                 "templatedirectoryblank"        => $kiriwrite_lang->{error}->{templatedirectoryblank},
12901                 "templatedirectoryinvalid"      => $kiriwrite_lang->{error}->{templatedirectoryinvalid},
12902                 "templatedatabasenotcreated"    => $kiriwrite_lang->{error}->{templatedatabasenotcreated},
12903                 "templatefilenametoolong"       => $kiriwrite_lang->{error}->{templatefilenametoolong},
12904                 "templatenametoolong"           => $kiriwrite_lang->{error}->{templatenametoolong},
12905                 "templatedescriptiontoolong"    => $kiriwrite_lang->{error}->{templatedescriptiontoolong},
12906                 "templatedatabasemissing"       => $kiriwrite_lang->{error}->{templatedatabasemissing},
12907                 "templatedoesnotexist"          => $kiriwrite_lang->{error}->{templatedoesnotexist},
12908                 "templatefilenameblank"         => $kiriwrite_lang->{error}->{templatefilenameblank},
12910         );
12912         # Check if the specified error is blank and if it is
12913         # use the generic error messsage.
12915         if (!$kiriwrite_error{$error_type}){
12916                 $error_type = "generic";
12917         }
12919         $kiriwrite_presmodule->clear();
12921         $kiriwrite_presmodule->startbox("errorbox");
12922         $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{error}, { Style => "errorheader" });
12923         $kiriwrite_presmodule->addlinebreak();
12924         $kiriwrite_presmodule->addtext($kiriwrite_error{$error_type}, { Style => "errortext" });
12926         # Check to see if extended error information was passed.
12928         if ($error_extended){
12930                 # Write the extended error information.
12932                 $kiriwrite_presmodule->addlinebreak();
12933                 $kiriwrite_presmodule->addlinebreak();
12934                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{extendederror});
12935                 $kiriwrite_presmodule->addlinebreak();
12936                 $kiriwrite_presmodule->addlinebreak();
12937                 $kiriwrite_presmodule->startbox("datalist");
12938                 $kiriwrite_presmodule->addtext($error_extended);
12939                 $kiriwrite_presmodule->endbox();
12941         }
12943         $kiriwrite_presmodule->endbox();
12945         kiriwrite_output_header;
12946         kiriwrite_output_page($kiriwrite_lang->{error}->{error}, $kiriwrite_presmodule->grab(), "none");
12948         exit;
12952 sub kiriwrite_fileexists{
12953 #################################################################################
12954 # kiriwrite_fileexists: Check if a file exists and returns a value depending on #
12955 # if the file exists or not.                                                    #
12956 #                                                                               # 
12957 # Usage:                                                                        #
12958 #                                                                               #
12959 # kiriwrite_fileexists(filename);                                               #
12960 #                                                                               #
12961 # filename      Specifies the file name to check if it exists or not.           #
12962 #################################################################################
12964         # Get the value that was passed to the subroutine.
12966         my ($filename) = @_;
12968         # Check if the filename exists, if it does, return a value of 0, else
12969         # return a value of 1, meaning that the file was not found.
12971         if (-e $filename){
12973                 # Specified file does exist so return a value of 0.
12975                 return 0;
12977         } else {
12979                 # Specified file does not exist so return a value of 1.
12981                 return 1;
12983         }
12987 sub kiriwrite_filepermissions{
12988 #################################################################################
12989 # kiriwrite_filepermissions: Check if the file permissions of a file and return #
12990 # either a 1 saying that the permissions are valid or return a 0 saying that    #
12991 # the permissions are invalid.                                                  #
12992 #                                                                               #
12993 # Usage:                                                                        #
12994 #                                                                               #
12995 # kiriwrite_filepermissions(filename, [read], [write], [filemissingskip]);      #
12996 #                                                                               #
12997 # filename              Specifies the filename to check for permissions.        #
12998 # read                  Preform check that the file is readable.                #
12999 # write                 Preform check that the file is writeable.               #
13000 # filemissingskip       Skip the check of seeing if it can read or write if the #
13001 #                       file is missing.                                        #
13002 #################################################################################
13004         # Get the values that was passed to the subroutine.
13006         my ($filename, $readpermission, $writepermission, $ignorechecks) = @_;
13008         # Check to make sure that the read permission and write permission values
13009         # are only 1 character long.
13011         kiriwrite_variablecheck($readpermission, "maxlength", 1, 0);
13012         kiriwrite_variablecheck($writepermission, "maxlength", 1, 0);
13013         kiriwrite_variablecheck($ignorechecks, "maxlength", 1, 0);
13015         my $ignorechecks_result = 0;
13017         # Check if the file should be ignored for read and write checking if 
13018         # it doesn't exist.
13020         if ($ignorechecks){
13022                 if (-e $filename){
13024                         # The file exists so the checks are to be done.
13026                         $ignorechecks_result = 0;
13028                 } else {
13030                         # The file does not exist so the checks don't need to
13031                         # be done to prevent false positives.
13033                         $ignorechecks_result = 1;
13035                 }
13037         } else {
13039                 $ignorechecks_result = 0;
13041         }
13043         # Check if the file should be checked to see if it can be read.
13045         if ($readpermission && $ignorechecks_result eq 0){
13047                 # The file should be checked to see if it does contain read permissions
13048                 # and return a 0 if it is invalid.
13050                 if (-r $filename){
13052                         # The file is readable, so do nothing.
13054                 } else {
13056                         # The file is not readable, so return 1.
13058                         return 1;
13060                 }
13062         }
13064         # Check if the file should be checked to see if it can be written.
13066         if ($writepermission && $ignorechecks_result eq 0){
13068                 # The file should be checked to see if it does contain write permissions
13069                 # and return a 0 if it is invalid.
13071                 if (-w $filename){
13073                         # The file is writeable, so do nothing.
13075                 } else {
13077                         # The file is not writeable, so return 1.
13079                         return 1;
13081                 }
13083         }
13085         # No problems have occured, so return 0.
13087         return 0;
13091 sub kiriwrite_utf8convert{
13092 #################################################################################
13093 # kiriwrite_utf8convert: Properly converts values into UTF-8 and make sure      #
13094 # that the size of the string is correct when doing input validation.           #
13095 #                                                                               #
13096 # Usage:                                                                        #
13097 #                                                                               #
13098 # utfstring     # The UTF-8 string to convert.                                  #
13099 #################################################################################
13101         # Get the values passed to the subroutine.
13103         my ($utfstring) = @_;
13105         # Load the Encode perl module.
13107         use Encode qw(decode_utf8);
13109         # Convert the string.
13111         my $finalutf8 = Encode::decode_utf8( $utfstring );
13113         return $finalutf8;
13117 sub kiriwrite_critical{
13118 #################################################################################
13119 # kiriwrite_critical: Displays an critical error message that cannot be         #
13120 # normally by the kiriwrite_error subroutine.                                   #
13121 #                                                                               #
13122 # Usage:                                                                        #
13123 #                                                                               #
13124 # errortype     Specifies the type of critical error that has occured.          #
13125 #################################################################################
13127         # Get the value that was passed to the subroutine.
13129         my ($error_type) = @_;
13131         my %error_list;
13133         # Get the error type from the errortype string.
13135         %error_list = (
13137                 # Generic critical error message.
13139                 "generic"                       => "A critical error has occured but the error is not known to Kiriwrite.",
13141                 # Specific critical error messages.
13143                 "configfilemissing"             => "The Kiriwrite configuration file is missing! Running the installer script for Kiriwrite is recommended.",
13144                 "configfileinvalidpermissions"  => "The Kiriwrite configuration file has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13145                 "dbmodulemissing"               => "The database module is missing! Running the installer script for Kiriwrite is recommended.",
13146                 "dbmoduleinvalidpermissions"    => "The database module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13147                 "dbmoduleinvalid"               => "The database module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13148                 "invalidvalue"                  => "An invalid value was passed.",
13149                 "languagefilenameblank"         => "The language filename given is blank! Running the installer script for Kiriwrite is recommended.",
13150                 "languagefilenameinvalid"       => "The language filename given is invalid! Running the installer script for Kiriwrite is recommended.",
13151                 "languagefilemissing"   => "The language filename given does not exist. Running the installer script for Kiriwrite is recommended.",
13152                 "languagefilenameinvalidpermissions"    => "The language file with the filename given has invalid permissions set. Please set the valid permission settings for the language file.",
13153                 "presmodulemissing"             => "The presentation module is missing! Running the installer script for Kiriwrite is recommended.",
13154                 "presmoduleinvalidpermissions"  => "The presentation module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the presentation module.",
13155                 "presmoduleinvalid"             => "The presentation module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13156         );
13158         if (!$error_list{$error_type}){
13160                 $error_type = "generic";
13162         }
13164         print header();
13165         print "Critical Error: " . $error_list{$error_type};
13166         exit;
13170 sub kiriwrite_output_page{
13171 #################################################################################
13172 # kiriwrite_output_page: Outputs the page to the browser/stdout/console.        #
13173 #                                                                               #
13174 # Usage:                                                                        #
13175 #                                                                               #
13176 # kiriwrite_output_page(pagetitle, pagedata, menutype);                         #
13177 #                                                                               #
13178 # pagetitle     Specifies the page title.                                       #
13179 # pagedata      Specifies the page data.                                        #
13180 # menutype      Prints out which menu to use.                                   #
13181 #################################################################################
13183         my ($pagetitle, $pagedata, $menutype) = @_;
13185         # Open the script page template and load it into the scriptpage variable,
13186         # while declaring the variable.
13188         open (my $filehandle_scriptpage, "<:utf8", 'page.html');
13189         my @scriptpage = <$filehandle_scriptpage>;
13190         binmode $filehandle_scriptpage, ':utf8';
13191         close ($filehandle_scriptpage);
13193         # Define the variables required.
13195         my $scriptpageline = "";
13196         my $pageoutput = "";
13197         my $menuoutput = "";
13199         $kiriwrite_presmodule->clear();
13201         # Print out the main menu for Kiriwrite.
13203         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{menu}->{viewdatabases} });
13204         $kiriwrite_presmodule->addtext(" | ");
13205         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page", { Text => $kiriwrite_lang->{menu}->{viewpages} });
13206         $kiriwrite_presmodule->addtext(" | ");
13207         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{menu}->{viewfilters} });
13208         $kiriwrite_presmodule->addtext(" | ");
13209         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{menu}->{viewtemplates} });
13210         $kiriwrite_presmodule->addtext(" | ");
13211         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{menu}->{compilepages} });
13212         $kiriwrite_presmodule->addtext(" | ");
13213         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{menu}->{viewsettings} });
13214         $kiriwrite_presmodule->addlinebreak();
13216         # Check what menu is going to be printed along with the default 'top' menu.
13218         if ($menutype eq "database"){
13220                 # If the menu type is database then print out the database sub-menu.
13222                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{database}->{submenu}->{viewdatabases} });
13223                 $kiriwrite_presmodule->addtext(" | ");
13224                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=new", { Text => $kiriwrite_lang->{database}->{submenu}->{adddatabase} });
13226         } elsif ($menutype eq "pages"){
13227                 # If the menu type is pages then print out the pages sub-menu.
13229                 # First, fetch the database name from the HTTP query string.
13231                 my $query = new CGI;
13232                 my $db_filename = $query->param('database');
13234                 # Check if a value has been placed in the db_filename string.
13236                 if (!$db_filename){
13238                         # As the database filename is blank, don't add an option to add a page.
13240                 } else {
13242                         # A database file has been specified so add an option to add a page to
13243                         # the selected database.
13245                         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page&action=add&database="  . $db_filename, { Text => $kiriwrite_lang->{pages}->{submenu}->{addpage} });
13247                 }
13249         } elsif ($menutype eq "filter"){
13251                 # If the menu type is filters then print out the filter sub-menu.
13253                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{submenu}->{showfilters} });
13254                 $kiriwrite_presmodule->addtext(" | ");
13255                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter&action=add", { Text => $kiriwrite_lang->{filter}->{submenu}->{addfilter} });
13257         } elsif ($menutype eq "settings"){
13259                 # If the menu type is options then print out the options sub-menu.
13261                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{submenu}->{viewsettings} });
13262                 $kiriwrite_presmodule->addtext(" | ");
13263                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings&action=edit", { Text => $kiriwrite_lang->{setting}->{submenu}->{editsettings} });
13265         } elsif ($menutype eq "template"){
13267                 # If the menu type is template then print out the template sub-menu.
13269                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{template}->{submenu}->{showtemplates} });
13270                 $kiriwrite_presmodule->addtext(" | ");
13271                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template&action=add", { Text => $kiriwrite_lang->{template}->{submenu}->{addtemplate} });
13273         } elsif ($menutype eq "compile"){
13275                 # If the menu type is compile then print out the compile sub-menu.
13277                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{submenu}->{listdatabases} });
13278                 $kiriwrite_presmodule->addtext(" | ");
13279                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=all", { Text => $kiriwrite_lang->{compile}->{submenu}->{compileall} });
13280                 $kiriwrite_presmodule->addtext(" | ");
13281                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=clean", { Text => $kiriwrite_lang->{compile}->{submenu}->{cleanoutputdirectory} });
13283         }
13285         $menuoutput = $kiriwrite_presmodule->grab();
13287         # Find <kiriwrite> tages and replace with the apporiate variables.
13289         foreach $scriptpageline (@scriptpage){
13291                 $scriptpageline =~ s/<kiriwrite:menu>/$menuoutput/g;
13292                 $scriptpageline =~ s/<kiriwrite:imagespath>/$kiriwrite_config{"directory_noncgi_images"}/g;
13293                 $scriptpageline =~ s/<kiriwrite:pagedata>/$pagedata/g;
13295                 # Check if page title specified is blank, otherwise add a page title
13296                 # to the title.
13298                 if ($pagetitle eq ""){
13299                         $scriptpageline =~ s/<kiriwrite:title>//g;
13300                 } else {
13301                         $scriptpageline =~ s/<kiriwrite:title>/ ($pagetitle)/g;
13302                 }
13304                 
13306                 # Append processed line to the pageoutput variable.
13308                 $pageoutput = $pageoutput . $scriptpageline;
13310         }
13312         binmode STDOUT, ':utf8';
13314         print $pageoutput;
13316         return;
13320 sub kiriwrite_output_xml{
13321 #################################################################################
13322 # kiriwrite_output_xml: Outputs several types of data to an XML file            #
13323 #                                                                               #
13324 # Usage:                                                                        #
13325 #                                                                               #
13326 # kiriwrite_output_xml(filename, type, settings);                               #
13327 #                                                                               #
13328 # filename      Specifies the filename of the XML file.                         #
13329 # type          Specifies the type of the XML file to be written.               #
13330 # settings              Specifies the following settings in any order.          #
13331 #                                                                               #
13332 # Settings for Kiriwrite configuration files:                                   #
13333 #                                                                               #
13334 # DatabaseDirectory     Specifies the new database directory to use.            #
13335 # OutputDirectory       Specifies the new output directory to use.              #
13336 # ImagesURIPath         Specifies the new URI path for images.                  #
13337 # DateTimeFormat        Specifies the new date and time format.                 #
13338 # SystemLanguage        Specifies the new language to use for Kiriwrite.        #
13339 # PrsentationModule     Specifies the new presentation module to use for        #
13340 #                       Kiriwrite.                                              #
13341 # DatabaseModule        Specifies the new database module to use for Kiriwrite. #
13342 # DatabaseServer        Specifies the database server to use.                   #
13343 # DaravasePort          Specifies the port the database server is running on.   #
13344 # DatabaseProtocol      Specifies the protocol the database server is using.    #
13345 # DatabaseSQLDatabase   Specifies the SQL database name to use.                 #
13346 # DatabaseUsername      Specifies the database server username.                 #
13347 # DatabasePassword      Specifies the password for the database server username.#
13348 # DatabaseTablePrefix   Specifies the table prefix to use.                      #
13349 #################################################################################
13351         # Get the variables passed from the subroutine.
13353         my $xml_filename        = shift;
13354         my $xml_type            = shift;
13355         my ($passedsettings)    = @_;
13357         # Check if filename is blank, if it is then return an error.
13359         if ($xml_filename eq ""){
13360                 # Filename is blank, return an error.
13361                 kiriwrite_error("blankfilename");
13362         }
13364         # Validate the XML filename to make sure nothing supicious is being passed.
13366         kiriwrite_variablecheck($xml_filename, "maxlength", 64, 0);
13367         kiriwrite_variablecheck($xml_filename, "filename", "", 0);
13369         # Check what type of XML data to output.
13371         if ($xml_type eq "config") {
13373                 # The type of XML data to output is a Kiriwrite configuration file.
13375                 # Get the data from the hash.
13377                 my $settings_databasedir                = $passedsettings->{"DatabaseDirectory"};
13378                 my $settings_outputdir                  = $passedsettings->{"OutputDirectory"};
13379                 my $settings_imagesuri                  = $passedsettings->{"ImagesURIPath"};
13380                 my $settings_datetime                   = $passedsettings->{"DateTimeFormat"};
13381                 my $settings_systemlanguage             = $passedsettings->{"SystemLanguage"};
13382                 my $settings_presmodule                 = $passedsettings->{"PresentationModule"};
13383                 my $settings_dbmodule                   = $passedsettings->{"DatabaseModule"};
13385                 my $settings_database_server            = $passedsettings->{"DatabaseServer"};
13386                 my $settings_database_port              = $passedsettings->{"DatabasePort"};
13387                 my $settings_database_protocol          = $passedsettings->{"DatabaseProtocol"};
13388                 my $settings_database_sqldatabase       = $passedsettings->{"DatabaseSQLDatabase"};
13389                 my $settings_database_username          = $passedsettings->{"DatabaseUsername"};
13390                 my $settings_database_password          = $passedsettings->{"DatabasePassword"};
13391                 my $settings_database_tableprefix       = $passedsettings->{"DatabaseTablePrefix"};
13393                 # Convert the password to make sure it can be read properly.
13395                 $settings_database_password =~ s/\0//g;
13396                 $settings_database_password =~ s/</&lt;/g;
13397                 $settings_database_password =~ s/>/&gt;/g;
13399                 # Convert the less than and greater than characters are there and
13400                 # convert them.
13402                 $settings_imagesuri =~ s/</&lt;/g;
13403                 $settings_imagesuri =~ s/>/&gt;/g;
13405                 # Create the XML data layout.
13407                 my $xmldata = "<?xml version=\"1.0\"?>\r\n\r\n<kiriwrite-config>\r\n";
13409                 $xmldata = $xmldata . "<!-- This file was automatically generated by Kiriwrite, please feel free to edit to your own needs. -->\r\n";
13410                 $xmldata = $xmldata . "\t<settings>\r\n\t\t<directories>\r\n";
13412                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_databasedir . "</database>\r\n";
13413                 $xmldata = $xmldata . "\t\t\t<output>" . $settings_outputdir  . "</output>\r\n";
13414                 $xmldata = $xmldata . "\t\t\t<images>" . $settings_imagesuri . "</images>\r\n";
13415                 $xmldata = $xmldata . "\t\t</directories>\r\n";
13417                 $xmldata = $xmldata . "\t\t<language>\r\n";
13418                 $xmldata = $xmldata . "\t\t\t<lang>" . $settings_systemlanguage . "</lang>\r\n";
13419                 $xmldata = $xmldata . "\t\t</language>\r\n";
13421                 $xmldata = $xmldata . "\t\t<system>\r\n";
13422                 $xmldata = $xmldata . "\t\t\t<presentation>" . $settings_presmodule . "</presentation>\r\n";
13423                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_dbmodule . "</database>\r\n";
13424                 $xmldata = $xmldata . "\t\t\t<datetime>" . $settings_datetime . "</datetime>\r\n";
13425                 $xmldata = $xmldata . "\t\t</system>\r\n";
13427                 $xmldata = $xmldata . "\t\t<database>\r\n";
13428                 $xmldata = $xmldata . "\t\t\t<server>" . $settings_database_server . "</server>\r\n";
13429                 $xmldata = $xmldata . "\t\t\t<port>" . $settings_database_port . "</port>\r\n";
13430                 $xmldata = $xmldata . "\t\t\t<protocol>" . $settings_database_protocol . "</protocol>\r\n";
13431                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_database_sqldatabase . "</database>\r\n";
13432                 $xmldata = $xmldata . "\t\t\t<username>" . $settings_database_username . "</username>\r\n";
13433                 $xmldata = $xmldata . "\t\t\t<password>" . $settings_database_password . "</password>\r\n";
13434                 $xmldata = $xmldata . "\t\t\t<prefix>" . $settings_database_tableprefix . "</prefix>\r\n";
13435                 $xmldata = $xmldata . "\t\t</database>\r\n";
13437                 $xmldata = $xmldata . "\t</settings>\r\n";
13439                 $xmldata = $xmldata . "</kiriwrite-config>";
13441                 # Open the Kiriwrite XML configuration file and write the new settings to the
13442                 # configuration file.
13444                 open(my $filehandle_xmlconfig, "> ", "kiriwrite.xml");
13445                 print $filehandle_xmlconfig $xmldata;
13446                 close($filehandle_xmlconfig);
13448         } else {
13450                 # The type of XML data is something else that is not supported by
13451                 # Kiriwrite, so return an error.
13453                 kiriwrite_error("invalidoption");
13455         }
13457         return;
13461 #################################################################################
13462 # End listing the functions needed.                                             #
13463 #################################################################################
13465 #################################################################################
13466 # Begin proper script execution.                                                #
13467 #################################################################################
13469 kiriwrite_settings_load;        # Load the configuration options.
13471 my $query = new CGI;            # Easily fetch variables from the HTTP string.
13475 # Check if a mode has been specified and if a mode has been specified, continue
13476 # and work out what mode has been specified.
13478 if ($query->param('mode')){
13479         my $http_query_mode = $query->param('mode');
13481         if ($http_query_mode eq "db"){
13483                 # If mode is 'db' (database), then check what action is required.
13485                 if ($query->param('action')){
13486                         # An action has been specified, so find out what action has been specified.
13488                         my $http_query_action = $query->param('action');
13490                         if ($http_query_action eq "edit"){
13491                                 # The edit action (which mean edit the settings for the selected database) has been specified,
13492                                 # get the database name and check if the action to edit an database has been confirmed.
13494                                 if ($query->param('database')){
13495                                         # If there is a value in the database variable check if it is a valid database. Otherwise,
13496                                         # return an error.
13498                                         my $http_query_database = $query->param('database');
13499                                 
13500                                         # Check if a value for confirm has been specified, if there is, check if it is the correct
13501                                         # value, otherwise return an error.
13503                                         if ($query->param('confirm')){
13504                                                 # A value for confirm has been specified, find out what value it is. If the value is correct
13505                                                 # then edit the database settings, otherwise return an error.
13507                                                 my $http_query_confirm = $query->param('confirm');
13509                                                 if ($http_query_confirm eq 1){
13510                                                         # Value is correct, collect the variables to pass onto the database variable.
13511         
13512                                                         # Get the variables from the HTTP query.
13513         
13514                                                         my $newdatabasename             = $query->param('databasename');
13515                                                         my $newdatabasedescription      = $query->param('databasedescription');
13516                                                         my $newdatabasefilename         = $query->param('databasefilename');
13517                                                         my $databasename                = $query->param('olddatabasename');
13518                                                         my $databasedescription         = $query->param('olddatabasedescription');
13519                                                         my $databaseshortname           = $query->param('database');
13520                                                         my $databasenotes               = $query->param('databasenotes');
13521                                                         my $databasecategories          = $query->param('databasecategories');
13523                                                         # Check the permissions of the database configuration file and return
13524                                                         # an error if the database permissions are invalid.
13525         
13526                                                         # Pass the variables to the database editing subroutine.
13528                                                         my $pagedata = kiriwrite_database_edit($databaseshortname, $databasename, $databasedescription, $newdatabasefilename, $newdatabasename, $newdatabasedescription, $databasenotes, $databasecategories, 1);
13529         
13530                                                         kiriwrite_output_header;
13531                                                         kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13532                                                         exit;
13533         
13534                                                 } else {
13535                                                         # Value is incorrect, return and error.
13536                                                         kiriwrite_error("invalidvariable");
13537                                                 } 
13539                                         }
13541                                         # Display the form for editing an database.
13542                                         my $pagedata = kiriwrite_database_edit($http_query_database);
13544                                         kiriwrite_output_header;
13545                                         kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13546                                         exit;
13548                                 } else {
13550                                         # If there is no value in the database variable, then return an error.
13551                                         kiriwrite_error("invalidvariable");
13553                                 }
13555                         } elsif ($http_query_action eq "delete"){
13557                                 # Action equested is to delete a database, find out if the user has already confirmed deletion of the database
13558                                 # and if the deletion of the database has been confirmed, delete the database.
13560                                 if ($query->param('confirm')){
13562                                         # User has confirmed to delete a database, pass the parameters to the kiriwrite_database_delete
13563                                         # subroutine.
13565                                         my $database_filename = $query->param('database');
13566                                         my $database_confirm = $query->param('confirm');
13567                                         my $pagedata = kiriwrite_database_delete($database_filename, $database_confirm);
13569                                         kiriwrite_output_header;
13570                                         kiriwrite_output_page($kiriwrite_lang->{database}->{deleteddatabase}, $pagedata, "database");
13572                                         exit;
13574                                 }
13576                                 # User has clicked on the delete link (thus hasn't confirmed the action to delete a database).
13578                                 my $database_filename = $query->param('database');
13579                                 my $pagedata = kiriwrite_database_delete($database_filename);
13581                                 kiriwrite_output_header;
13582                                 kiriwrite_output_page($kiriwrite_lang->{database}->{deletedatabase}, $pagedata, "database");
13584                                 exit;
13586                         } elsif ($http_query_action eq "new"){
13588                                 # Action requested is to create a new database, find out if the user has already entered the information needed
13589                                 # to create a database and see if the user has confirmed the action, otherwise printout a form for adding a
13590                                 # database.
13592                                 my $http_query_confirm = $query->param('confirm');
13594                                 # Check if the confirm value is correct.
13596                                 if ($http_query_confirm){
13597                                         if ($http_query_confirm eq 1){
13599                                                 # User has confirmed to create a database, pass the parameters to the 
13600                                                 # kiriwrite_database_add subroutine.
13602                                                 my $http_query_confirm = $query->param('confirm');
13604                                                 my $database_name               = $query->param('databasename');
13605                                                 my $database_description        = $query->param('databasedescription');
13606                                                 my $database_filename           = $query->param('databasefilename');
13607                                                 my $database_notes              = $query->param('databasenotes');
13608                                                 my $database_categories         = $query->param('databasecategories');
13610                                                 my $pagedata = kiriwrite_database_add($database_filename, $database_name, $database_description, $database_notes, $database_categories, $http_query_confirm);
13612                                                 kiriwrite_output_header;
13613                                                 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13614                                                 exit;
13616                                         } else {
13618                                                 # The confirm value is something else other than 1 (which it shouldn't be), so
13619                                                 # return an error.
13621                                         }
13622                                 }
13624                                 # User has clicked on the 'Add Database' link.
13626                                 my $pagedata = kiriwrite_database_add;
13628                                 kiriwrite_output_header;
13629                                 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13630                                 exit;
13632                         } else {
13633                                 # Another option has been specified, so return an error.
13635                                 kiriwrite_error("invalidaction");
13636                         }
13637                 }
13639                 # No action has been specified, do the default action of displaying a list
13640                 # of databases.
13642                 my $pagedata = kiriwrite_database_list;
13644                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
13645                 kiriwrite_output_page("", $pagedata, "database");       # Output the page to browser/console/stdout.
13646                 exit;                                   # End the script.
13648         } elsif ($http_query_mode eq "page"){
13650                 # If mode is 'page', then check what action is required.
13652                 if ($query->param('action')){
13653                         my $http_query_action = $query->param('action');
13655                         # Check if the action requested matches with one of the options below. If it does,
13656                         # go to that section, otherwise return an error.
13658                         if ($http_query_action eq "view"){
13660                                 # The action selected was to view pages from a database, 
13662                                 my $database_name       = $query->param('database');
13663                                 my $pagedata            = kiriwrite_page_list($database_name);
13665                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13666                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{viewingdatabase}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13667                                 exit;                   # End the script.
13669                         } elsif ($http_query_action eq "add"){
13671                                 # The action selected was to add a page to the selected database.
13673                                 my $http_query_confirm  = $query->param('confirm');
13675                                 if (!$http_query_confirm){
13677                                         $http_query_confirm = 0;
13679                                 }
13681                                 if ($http_query_confirm eq 1){
13682                 
13683                                         my $http_query_database         = $query->param('database');
13684                                         my $http_query_filename         = $query->param('pagefilename');
13685                                         my $http_query_name             = $query->param('pagename');
13686                                         my $http_query_description      = $query->param('pagedescription');
13687                                         my $http_query_section          = $query->param('pagesection');
13688                                         my $http_query_template         = $query->param('pagetemplate');
13689                                         my $http_query_settings         = $query->param('pagesettings');
13690                                         my $http_query_content          = $query->param('pagecontent');
13691                         
13692                                         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);
13694                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13695                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13696                                         exit;                           # End the script.
13698                                 }
13699                 
13700                                 my $http_query_database = $query->param('database');
13701                                 my $pagedata            = kiriwrite_page_add($http_query_database);
13703                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13704                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13705                                 exit;                           # End the script.
13707                         } elsif ($http_query_action eq "edit"){
13708                          
13709                                 # The action selected was to edit a page from a database.
13711                                 my $http_query_confirm = $query->param('confirm');
13713                                 if (!$http_query_confirm){
13715                                         $http_query_confirm = 0;
13717                                 }
13719                                 if ($http_query_confirm eq 1){
13721                                         # Get the needed values from the HTTP query.
13723                                         my $http_query_database         = $query->param('database');
13724                                         my $http_query_filename         = $query->param('page');
13725                                         my $http_query_newfilename      = $query->param('pagefilename');
13726                                         my $http_query_name             = $query->param('pagename');
13727                                         my $http_query_description      = $query->param('pagedescription');
13728                                         my $http_query_section          = $query->param('pagesection');
13729                                         my $http_query_template         = $query->param('pagetemplate');
13730                                         my $http_query_settings         = $query->param('pagesettings');
13731                                         my $http_query_content          = $query->param('pagecontent');
13733                                         # Pass the values to the editing pages subroutine.
13735                                         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);
13737                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13738                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages");   # Output the page to browser/console/stdout.
13739                                         exit;                           # End the script.
13741                                 }
13743                                 # Get the needed values from the HTTP query.
13745                                 my $http_query_database = $query->param('database');
13746                                 my $http_query_filename = $query->param('page');
13748                                 # Pass the values to the editing pages subroutine.
13750                                 my $pagedata = kiriwrite_page_edit($http_query_database, $http_query_filename);
13752                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13753                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages");   # Output the page to browser/console/stdout.
13754                                 exit;                           # End the script.
13757                         } elsif ($http_query_action eq "delete"){
13759                                 # The action selected was to delete a page from a database.
13761                                 my $http_query_database = $query->param('database');
13762                                 my $http_query_page     = $query->param('page');
13763                                 my $http_query_confirm  = $query->param('confirm');
13765                                 my $pagedata = "";
13766                                 my $selectionlist = "";
13768                                 if ($http_query_confirm){
13770                                         # The action has been confirmed, so try to delete the selected page
13771                                         # from the database.
13773                                         $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page, $http_query_confirm);
13775                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13776                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13777                                         exit;                           # End the script.
13779                                 }
13781                                 $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page);
13783                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13784                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13785                                 exit;                           # End the script.
13788                         } elsif ($http_query_action eq "multidelete"){
13790                                 # The action selected was to delete multiple pages from a
13791                                 # database.
13793                                 my $http_query_database = $query->param('database');
13794                                 my $http_query_confirm  = $query->param('confirm');
13796                                 my @filelist;
13797                                 my $pagedata;
13799                                 if ($http_query_confirm){
13801                                         # The action to delete multiple pages from the selected
13802                                         # database has been confirmed.
13804                                         @filelist       = kiriwrite_selectedlist();
13805                                         $pagedata       = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13807                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13808                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13809                                         exit;                           # End the script.
13811                                 }
13813                                 # Get the list of selected pages and pass them to the
13814                                 # multiple page delete subroutine.
13816                                 @filelist       = kiriwrite_selectedlist();
13817                                 $pagedata       = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13819                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13820                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13821                                 exit;                           # End the script.
13823                         } elsif ($http_query_action eq "multimove"){
13825                                 # The action selected was to move multiple pages from a
13826                                 # database.
13828                                 my $http_query_database         = $query->param('database');
13829                                 my $http_query_newdatabase      = $query->param('newdatabase');
13830                                 my $http_query_confirm          = $query->param('confirm');
13832                                 my @filelist;
13833                                 my $pagedata;
13835                                 if ($http_query_confirm){
13837                                         # The action to move multiple pages from the selected
13838                                         # database has been confirmed.
13840                                         @filelist       = kiriwrite_selectedlist();
13841                                         $pagedata       = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13843                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13844                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13845                                         exit;                           # End the script.
13847                                 }
13849                                 # Get the list of selected pages and pass them to the
13850                                 # multiple page move subroutine.
13852                                 @filelist       = kiriwrite_selectedlist();
13853                                 $pagedata       = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13855                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13856                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13857                                 exit;                           # End the script.
13859                         } elsif ($http_query_action eq "multicopy"){
13861                                 # The action selected was to copy multiple pages from a
13862                                 # database.
13864                                 my $http_query_database         = $query->param('database');
13865                                 my $http_query_newdatabase      = $query->param('newdatabase');
13866                                 my $http_query_confirm          = $query->param('confirm');
13868                                 my @filelist;
13869                                 my $pagedata;
13871                                 if ($http_query_confirm){
13873                                         # The action to copy multiple pages from the selected
13874                                         # database has been confirmed.
13876                                         @filelist       = kiriwrite_selectedlist();
13877                                         $pagedata       = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13879                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13880                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13881                                         exit;                           # End the script.
13883                                 }
13885                                 # Get the list of selected pages and pass them to the
13886                                 # multiple page copy subroutine.
13888                                 @filelist       = kiriwrite_selectedlist();
13889                                 $pagedata       = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13891                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13892                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13893                                 exit;                           # End the script.
13895                         } elsif ($http_query_action eq "multiedit"){
13897                                 # The action selected was to edit multiple pages from a
13898                                 # database.
13900                                 my $http_query_database         = $query->param('database');
13901                                 my $http_query_newsection       = $query->param('newsection');
13902                                 my $http_query_altersection     = $query->param('altersection');
13903                                 my $http_query_newtemplate      = $query->param('newtemplate');
13904                                 my $http_query_altertemplate    = $query->param('altertemplate');
13905                                 my $http_query_newsettings      = $query->param('newsettings');
13906                                 my $http_query_altersettings    = $query->param('altersettings');
13907                                 my $http_query_confirm          = $query->param('confirm');
13909                                 my @filelist;
13910                                 my $pagedata;
13912                                 if (!$http_query_confirm){
13914                                         @filelist       = kiriwrite_selectedlist();
13915                                         $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);
13917                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13918                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13919                                         exit;
13921                                 }
13923                                 # Get the list of selected pages and pass them to the
13924                                 # multiple page edit subroutine.
13926                                 @filelist       = kiriwrite_selectedlist();
13927                                 $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);
13929                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13930                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13931                                 exit;                           # End the script.
13933                         } else {
13934                                 kiriwrite_error("invalidaction");
13935                         }
13937                 } else {
13939                         # If there the action option is left blank, then print out a form where the database
13940                         # can be selected to view pages from.
13942                         my $pagedata = kiriwrite_page_list;
13944                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13945                         kiriwrite_output_page($kiriwrite_lang->{pages}->{databaseselecttitle}, $pagedata, "pages");     # Output the page to browser/console/stdout.
13946                         exit;                           # End the script.
13948                 }
13950                 # No action has been specified, do the default action of listing pages from
13951                 # the first database found in the directory.
13953         } elsif ($http_query_mode eq "filter"){
13955                 # If there's a value for action in the HTTP query, then
13956                 # get that value that is in the HTTP query.
13958                 if ($query->param('action')){
13960                         # There is a value for action in the HTTP query,
13961                         # so get the value from it.
13963                         my $http_query_action = $query->param('action');
13965                         if ($http_query_action eq "add"){
13967                                 # The action the user requested is to add a filter to the
13968                                 # filter database.
13970                                 # Check if there is a value in confirm and if there is
13971                                 # then pass it on to the new find and replace words
13972                                 # to add to the filter database.
13974                                 my $http_query_confirm = $query->param('confirm');
13976                                 if ($http_query_confirm){
13978                                         # There is a value in http_query_confirm, so pass on the
13979                                         # new find and replace words so that they can be added
13980                                         # to the filter database.
13982                                         my $http_query_findwords        = $query->param('findword');
13983                                         my $http_query_replacewords     = $query->param('replaceword');
13984                                         my $http_query_priority         = $query->param('priority');
13985                                         my $http_query_notes            = $query->param('notes');
13986                                 
13987                                         my $pagedata = kiriwrite_filter_add($http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
13989                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13990                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
13991                                         exit;                           # End the script.
13993                                 }
13995                                 my $pagedata = kiriwrite_filter_add();
13997                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13998                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
13999                                 exit;                           # End the script.
14001                         } elsif ($http_query_action eq "edit"){
14003                                 # The action the user requested is to edit an filter from
14004                                 # the filter database.
14006                                 my $http_query_number = $query->param('filter');
14007                                 my $http_query_confirm = $query->param('confirm');
14009                                 if ($http_query_confirm){
14011                                         # There is a value in http_query_confirm, so pass on the
14012                                         # new find and replace words so that the filter database
14013                                         # can be edited.
14015                                         my $http_query_findwords        = $query->param('filterfind');
14016                                         my $http_query_replacewords     = $query->param('filterreplace');
14017                                         my $http_query_priority         = $query->param('priority');
14018                                         my $http_query_notes            = $query->param('notes');
14020                                         my $pagedata = kiriwrite_filter_edit($http_query_number, $http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
14022                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14023                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter");    # Output the page to browser/console/stdout.
14024                                         exit;                           # End the script.
14026                                 }
14028                                 my $pagedata = kiriwrite_filter_edit($http_query_number);
14030                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14031                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter");    # Output the page to browser/console/stdout.
14032                                 exit;                                   # End the script.
14034                         } elsif ($http_query_action eq "delete"){
14036                                 # The action the user requested is to delete an filter
14037                                 # from the filter database.
14039                                 my $http_query_number = $query->param('filter');
14040                                 my $http_query_confirm = $query->param('confirm');
14042                                 if ($http_query_confirm){
14044                                         my $pagedata = kiriwrite_filter_delete($http_query_number, $http_query_confirm);
14046                                         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14047                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14048                                         exit;                                   # End the script
14050                                 }
14052                                 my $pagedata = kiriwrite_filter_delete($http_query_number);
14054                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14055                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter");  # Output the page to browser/console/stdout.
14056                                 exit;                                   # End the script.
14058                         } else {
14060                                 # Another action was requested that was not one of 
14061                                 # the ones prcedding this catch all, so return
14062                                 # an error saying that an invalid option was
14063                                 # specified.
14065                                 kiriwrite_error("invalidaction");
14067                         }
14069                 } else {
14071                         my $pagedata = kiriwrite_filter_list();
14073                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14074                         kiriwrite_output_page($kiriwrite_lang->{filter}->{viewfilters}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14075                         exit;                           # End the script.
14077                 }
14081         } elsif ($http_query_mode eq "template"){
14083                 # Check if an action has been specified in the HTTP query.
14085                 if ($query->param('action')){
14087                         # An action has been specified in the HTTP query.
14089                         my $http_query_action = $query->param('action');
14091                         if ($http_query_action eq "delete"){
14092                                 # Get the required parameters from the HTTP query.
14094                                 my $http_query_template = $query->param('template');
14095                                 my $http_query_confirm  = $query->param('confirm');
14097                                 # Check if a value for confirm has been specified (it shouldn't)
14098                                 # be blank.
14100                                 if (!$http_query_confirm){
14101                                         # The confirm parameter of the HTTP query is blank, so
14102                                         # write out a form asking the user to confirm the deletion
14103                                         # of the selected template.
14105                                         my $pagedata = kiriwrite_template_delete($http_query_template);
14107                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14108                                         kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template");    # Output the page to browser/console/stdout.
14109                                         exit;                           # End the script.
14111                                 } else {
14113                                         my $pagedata = kiriwrite_template_delete($http_query_template, $http_query_confirm);
14115                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14116                                         kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template");    # Output the page to browser/console/stdout.
14117                                         exit;                           # End the script.
14119                                 }
14121                         } elsif ($http_query_action eq "add") {
14123                                 # Get the variables from the HTTP query in preperation for processing.
14125                                 my $http_query_confirm  = $query->param('confirm');
14126                                 my $http_query_templatelayout   = $query->param('templatelayout');
14127                                 my $http_query_templatename     = $query->param('templatename');
14128                                 my $http_query_templatedescription = $query->param('templatedescription');
14129                                 my $http_query_templatefilename = $query->param('templatefilename');
14131                                 # Check if there is a confirmed value in the http_query_confirm variable.
14133                                 if (!$http_query_confirm){
14135                                         # Since there is no confirm value, print out a form for creating a new
14136                                         # template.
14138                                         my $pagedata = kiriwrite_template_add();
14140                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14141                                         kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template");       # Output the page to browser/console/stdout.
14142                                         exit;                           # End the script.
14144                                 } else {
14146                                         # A value in the http_query_confirm value is specified, so pass the
14147                                         # variables onto the kiriwrite_template_add subroutine.
14149                                         my $pagedata = kiriwrite_template_add($http_query_templatefilename, $http_query_templatename, $http_query_templatedescription, $http_query_templatelayout, $http_query_confirm);
14151                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14152                                         kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template");       # Output the page to browser/console/stdout.
14153                                         exit;                           # End the script.
14155                                 }
14157                         } elsif ($http_query_action eq "edit") {
14159                                 # Get the required parameters from the HTTP query.
14161                                 my $http_query_templatefile     = $query->param('template');
14162                                 my $http_query_confirm          = $query->param('confirm');
14164                                 # Check to see if http_query_confirm has a value of '1' in it and
14165                                 # if it does, edit the template using the settings providied.
14167                                 if (!$http_query_confirm){
14169                                         # Since there is no confirm value, open the template configuration
14170                                         # file and the template file itself then print out the data on to
14171                                         # the form.
14173                                         my $pagedata = kiriwrite_template_edit($http_query_templatefile);
14174                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14175                                         kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template");      # Output the page to browser/console/stdout.
14176                                         exit;                           # End the script.
14178                                 } elsif ($http_query_confirm eq 1) {
14180                                         # Since there is a confirm value of 1, the user has confirm the
14181                                         # action of editing of a template so get the other variables 
14182                                         # that were also sent and pass the variables to the subroutine.
14184                                         my $http_query_newfilename      = $query->param('newfilename');
14185                                         my $http_query_newname          = $query->param('newname');
14186                                         my $http_query_newdescription   = $query->param('newdescription');
14187                                         my $http_query_newlayout        = $query->param('newlayout');
14189                                         my $pagedata = kiriwrite_template_edit($http_query_templatefile, $http_query_newfilename, $http_query_newname, $http_query_newdescription, $http_query_newlayout, $http_query_confirm);
14190                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14191                                         kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template");      # Output the page to browser/console/stdout.
14192                                         exit;                           # End the script.
14194                                 } else {
14196                                         # Another confirm value is there instead of '0' or '1'. Return
14197                                         # an error saying it is invalid.
14199                                         kiriwrite_error("invalidvariable");
14201                                 }
14203                         } else {
14205                                 # Another action was specified and was not one of the ones above, so
14206                                 # return an error.
14208                                 kiriwrite_error("invalidaction");
14210                         }
14212                 } else {
14214                         # If the action option is left blank, then print out a form where the list
14215                         # of templates are available.
14217                         my $pagedata = kiriwrite_template_list;
14219                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14220                         kiriwrite_output_page($kiriwrite_lang->{template}->{viewtemplates}, $pagedata, "template");     # Output the page to browser/console/stdout.
14221                         exit;                           # End the script.
14223                 }
14225         } elsif ($http_query_mode eq "compile"){
14227                 # The mode selected is to compile pages from databases.
14229                 # If the action option is left blank, then print out a form where the list
14230                 # of databases to compile are available.
14232                 if ($query->param('action')){
14234                         my $http_query_action = $query->param('action');
14236                         if ($http_query_action eq "compile"){
14238                                 # The specified action is to compile the pages, check if the
14239                                 # action to compile the page has been confirmed.
14241                                 my $http_query_confirm  = $query->param('confirm');
14242                                 my $http_query_type     = $query->param('type');
14244                                 # If it is blank, set the confirm value to 0.
14246                                 if (!$http_query_confirm){
14248                                         # The http_query_confirm variable is uninitalised, so place a
14249                                         # '0' (meaning an unconfirmed action).
14251                                         $http_query_confirm = 0;
14253                                 }
14255                                 # If the compile type is blank then return an error.
14257                                 if (!$http_query_type){
14259                                         # Compile type is blank so return an error.
14261                                         kiriwrite_error("blankcompiletype");
14263                                 }
14265                                 if ($http_query_type eq "multiple"){
14267                                         if ($http_query_confirm eq 1){
14269                                                 # The action to compile the pages has been confirmed so
14270                                                 # compile the pages.
14272                                                 my @selectedlist = kiriwrite_selectedlist();
14273                                                 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14275                                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14276                                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14277                                                 exit;                           # End the script.
14279                                         } else {
14281                                                 # The action to compile the pages has not been confirmed
14282                                                 # so write a form asking the user to confirm the action
14283                                                 # of compiling the pages.
14285                                                 my @selectedlist = kiriwrite_selectedlist();
14286                                                 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14288                                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14289                                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compileselecteddatabases}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14290                                                 exit;                           # End the script.
14292                                         }
14294                                 } elsif ($http_query_type eq "single"){
14296                                         my $http_query_database = $query->param('database');
14297                                         my @selectedlist;
14298                                         $selectedlist[0] = $http_query_database;
14299                                         my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14301                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14302                                         kiriwrite_output_page($kiriwrite_lang->{compile}->{compiledatabase}, $pagedata, "compile");
14303                                         exit;                           # End the script.
14305                                 } else {
14307                                         kiriwrite_error("invalidcompiletype");
14309                                 }
14311                         } elsif ($http_query_action eq "all"){
14313                                 # The selected action is to compile all of the databases
14314                                 # in the database directory. Check if the action to
14315                                 # compile all of the databases has been confirmed.
14317                                 my $http_query_confirm = $query->param('confirm');
14319                                 if (!$http_query_confirm){
14321                                         # The http_query_confirm variable is uninitalised, so place a
14322                                         # '0' (meaning an unconfirmed action).
14324                                         $http_query_confirm = 0;
14326                                 }
14328                                 if ($http_query_confirm eq 1){
14330                                         # The action to compile all the databases has been confirmed.
14332                                 }
14334                                 my $pagedata = kiriwrite_compile_all();
14336                                 kiriwrite_output_header;                        # Output the header to browser/console/stdout.
14337                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilealldatabases}, $pagedata, "compile");
14338                                 exit;
14340                         } elsif ($http_query_action eq "clean") {
14342                                 # The selected action is to clean the output directory.
14343                                 # Check if the action to clean the output directory
14344                                 # has been confirmed.
14346                                 my $http_query_confirm = $query->param('confirm');
14348                                 if (!$http_query_confirm){
14350                                         # The http_query_confirm variable is uninitalised, so place a
14351                                         # '0' (meaning an unconfirmed action).
14353                                         $http_query_confirm = 0;
14355                                 }
14357                                 if ($http_query_confirm eq 1){
14359                                         # The action to clean the output directory has been confirmed.
14361                                         my $pagedata = kiriwrite_compile_clean($http_query_confirm);
14363                                         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14364                                         kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14365                                         exit;                                   # End the script.
14366                         
14367                                 }
14369                                 # The action to clean the output directory is not
14370                                 # confirmed, so write a page asking the user
14371                                 # to confirm cleaning the output directory.
14373                                 my $pagedata = kiriwrite_compile_clean();
14375                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14376                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14377                                 exit;                                   # End the script.
14379                         } else {
14381                                 # The action specified was something else other than those
14382                                 # above, so return an error.
14384                                 kiriwrite_error("invalidaction");
14386                         }
14387                 }
14389                 my $pagedata = kiriwrite_compile_list;
14391                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14392                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14393                 exit;                                   # End the script.
14395         } elsif ($http_query_mode eq "settings"){
14397                 # The mode selected is view (and change settings).
14399                 # If the action value has been left blank, then view the list of
14400                 # current settings.
14402                 if ($query->param('action')){
14403                         my $http_query_action = $query->param('action');
14405                         if ($http_query_action eq "edit"){
14407                                 # The action specified is to edit the settings. Check if the action
14408                                 # to edit the settings has been confirmed.
14410                                 my $http_query_confirm = $query->param('confirm');
14412                                 if (!$http_query_confirm){
14414                                         # The confirm value is blank, so set it to 0.
14416                                         $http_query_confirm = 0;
14418                                 }
14420                                 if ($http_query_confirm eq 1){
14422                                         # The action to edit the settings has been confirmed. Get the
14423                                         # required settings from the HTTP query.
14425                                         my $http_query_database         = $query->param('databasedir');
14426                                         my $http_query_output           = $query->param('outputdir');
14427                                         my $http_query_imagesuri        = $query->param('imagesuripath');
14428                                         my $http_query_datetimeformat   = $query->param('datetime');
14429                                         my $http_query_systemlanguage   = $query->param('language');
14430                                         my $http_query_presmodule       = $query->param('presmodule');
14431                                         my $http_query_dbmodule         = $query->param('dbmodule');
14433                                         my $http_query_database_server          = $query->param('database_server');
14434                                         my $http_query_database_port            = $query->param('database_port');
14435                                         my $http_query_database_protocol        = $query->param('database_protocol');
14436                                         my $http_query_database_sqldatabase     = $query->param('database_sqldatabase');
14437                                         my $http_query_database_username        = $query->param('database_username');
14438                                         my $http_query_database_passwordkeep    = $query->param('database_password_keep');
14439                                         my $http_query_database_password        = $query->param('database_password');
14440                                         my $http_query_database_tableprefix     = $query->param('database_tableprefix');
14442                                         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 });
14444                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14445                                         kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14446                                         exit;                           # End the script.
14448                                 }
14450                                 # The action to edit the settings has not been confirmed.
14452                                 my $pagedata = kiriwrite_settings_edit;
14454                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14455                                 kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14456                                 exit;                           # End the script.
14458                         } else {
14460                                 # The action specified was something else other than those
14461                                 # above, so return an error.
14463                                 kiriwrite_error("invalidaction");
14465                         }
14467                 }
14469                 # No action has been specified, so print out the list of settings currently being used.
14471                 my $pagedata = kiriwrite_settings_view;
14473                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14474                 kiriwrite_output_page($kiriwrite_lang->{setting}->{viewsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14475                 exit;                                   # End the script.
14477         } else {
14478                 # Another mode has been specified than the ones above, so return an error saying that
14479                 # an invalid option was specified.
14481                 kiriwrite_error("invalidmode");
14482         }
14484 } else {
14486         # No mode has been specified, so print the default "first-run" view of the
14487         # database list.
14489         my $pagedata = kiriwrite_database_list;
14491         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14492         kiriwrite_output_page("", $pagedata, "database");       # Output the page to browser/console/stdout.
14493         exit;                                   # End the script.
14497 __END__
14499 =head1 NAME
14501 Kiriwrite
14503 =head1 DESCRIPTION
14505 Web-based webpage compiler.
14507 =head1 AUTHOR
14509 Steve Brokenshire <sbrokenshire@xestia.co.uk>
14511 =head1 USAGE
14513 This perl script is intended to be used on a web server which has CGI with Perl support or with mod_perl support.
14515 =head1 DOCUMENTATION
14517 For more information on how to use Kiriwrite, please see the documentation that was included with Kiriwrite.
14519 - From the Xestia Documentation website: http://documentation.xestia.co.uk and click on the Kiriwrite link on the page.
14521 - From the Documentation directory from the Kiriwrite source packages (.tar/.tar.gz/.tar.bz2).
14523 - 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