Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
(no commit message)
[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;
9002                                 open($filehandle_page, "> ",  $kiriwrite_config{"directory_data_output"} . '/' . $page_filename) or ($kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pagenotwritten}, $page_filename, $!)), $kiriwrite_presmodule->addlinebreak(), $error_count++, next);
9004                                 if (!$page_final){
9006                                         $page_final = "";
9008                                 }
9010                                 binmode $filehandle_page, ':utf8';
9011                                 print $filehandle_page $page_final;
9012                                 close($filehandle_page);
9014                                 # Write a message saying the page has been compiled. Check
9015                                 # to see if the page name is blank and write a message
9016                                 # saying there's no page name.
9018                                 if (!$page_name){
9019                                         $kiriwrite_presmodule->addtext($information_prefix . ' ');
9020                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
9021                                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledpageblankname}, $page_filename));
9022                                 } else {
9023                                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compiledpage}, $page_name, $page_filename));
9024                                 }
9027                                 $kiriwrite_presmodule->addlinebreak();
9028                                 $pages_count++;
9030                         }
9032                         # Write a message saying that the database has
9033                         # been processed.
9035                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefinish}, $database_name));
9036                         $kiriwrite_presmodule->addlinebreak();
9038                 }
9040                 # Disconnect from the database server.
9042                 $kiriwrite_dbmodule->disconnect();
9044                 $kiriwrite_presmodule->addhorizontalline();
9045                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compileresults}, $pages_count, $error_count, $warning_count));
9046                 $kiriwrite_presmodule->endbox();
9047                 $kiriwrite_presmodule->addlinebreak();
9048                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9050                 return $kiriwrite_presmodule->grab();
9052         } elsif ($confirm eq 0){
9054                 # The action to compile the databases has
9055                 # not been confirmed so check what type
9056                 # is being used.
9058                 if ($type eq "single"){
9060                         # The type is a single database selected so
9061                         # process that database.
9063                         # Define some variables for later.
9065                         my %database_info; 
9066                         my $database_filename_check;
9067                         my $database_maxlength_check;
9068                         my $databasefilename;
9069                         my $database_name;
9071                         # Check that the database name and length are
9072                         # valid and return an error if they aren't.
9074                         $databasefilename = $selectedlist[0];
9076                         # Connect to the database server.
9078                         $kiriwrite_dbmodule->connect();
9080                         # Check if any errors occured while connecting to the database server.
9082                         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9084                                 # A database connection error has occured so return
9085                                 # an error.
9087                                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9089                         }
9091                         # Select the database.
9093                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasefilename });
9095                         # Check if any errors had occured while selecting the database.
9097                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9099                                 # The database does not exist, so return an error.
9101                                 kiriwrite_error("databasemissingfile");
9103                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9105                                 # The database has invalid permissions set, so return
9106                                 # an error.
9108                                 kiriwrite_error("databaseinvalidpermissions");
9110                         }
9112                         # Get information about the database.
9114                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9116                         # Check if any error occured while getting the database information.
9118                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9120                                 # A database error has occured so return an error and
9121                                 # also the extended error information.
9123                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
9125                         };
9127                         $database_name = $database_info{"DatabaseName"};
9129                         # Disconnect from the database server.
9131                         $kiriwrite_dbmodule->disconnect();
9133                         # Write out a form asking the user to confirm if the
9134                         # user wants to compile the selected database.
9136                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabase}, { Style => "pageheader" });
9137                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9138                         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9139                         $kiriwrite_presmodule->addhiddendata("action", "compile");
9140                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9141                         $kiriwrite_presmodule->addhiddendata("id[1]", $databasefilename);
9142                         $kiriwrite_presmodule->addhiddendata("name[1]", "on");
9143                         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9144                         $kiriwrite_presmodule->addlinebreak();
9145                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledatabasemessage}, $database_name));
9146                         $kiriwrite_presmodule->addlinebreak();
9147                         $kiriwrite_presmodule->addlinebreak();
9148                         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compiledatabasebutton});
9149                         $kiriwrite_presmodule->addtext(" | ");
9150                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9152                         return $kiriwrite_presmodule->grab();
9154                 } elsif ($type eq "multiple"){
9156                         # The type is multiple databases selected
9157                         # so process each database.
9159                         # Define some variables for later.
9161                         my %database_list;
9162                         my $databasename;
9163                         my $database;
9164                         my $database_filename_check;
9165                         my $database_maxlength_check;
9166                         my $database_count = 0;
9167                         my $database_info_name;
9169                         # Connect to the database server.
9171                         $kiriwrite_dbmodule->connect();
9173                         # Check if any errors occured while connecting to the database server.
9175                         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9177                                 # A database connection error has occured so return
9178                                 # an error.
9180                                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9182                         }
9184                         foreach $databasename (@selectedlist){
9186                                 # Check if the database is in the database
9187                                 # directory and skip it if it isn't.
9188  
9189                                 $database_filename_check        = kiriwrite_variablecheck($databasename, "filename", "", 1);
9190                                 $database_maxlength_check       = kiriwrite_variablecheck($databasename, "maxlength", 32, 1);
9191  
9192                                 if ($database_filename_check ne 0 || $database_maxlength_check ne 0){
9193  
9194                                         # The database filename given is invalid or
9195                                         # the database filename given is too long
9196                                         # so process the next database.
9197  
9198                                         next;
9199  
9200                                 }
9202                                 # Select the database to add the page to.
9204                                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasename });
9206                                 # Check if any errors had occured while selecting the database.
9208                                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9210                                         # The database does not exist, so process the next database.
9212                                         next;
9214                                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9216                                         # The database has invalid permissions set, so process
9217                                         # the next database.
9219                                         next;
9221                                 }
9223                                 # Get information about the database.
9225                                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9227                                 # Check if any error occured while getting the database information.
9229                                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9231                                         # A database error has occured so process the next
9232                                         # database.
9234                                         next;
9236                                 };
9238                                 $database_list{$database_count}{Name}           = $database_info{"DatabaseName"};
9239                                 $database_list{$database_count}{Filename}       = $databasename;
9241                                 $database_count++;
9243                         }
9245                         # Check if any databases are available to be compiled.
9247                         if ($database_count eq 0){
9249                                 # No databases are available to be compiled.
9251                                 kiriwrite_error("nodatabaseselected");
9253                         }
9255                         # Write out the form for compiling the database.
9257                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabases}, { Style => "pageheader" });
9258                         $kiriwrite_presmodule->addlinebreak();
9259                         $kiriwrite_presmodule->addlinebreak();
9260                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9261                         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9262                         $kiriwrite_presmodule->addhiddendata("action", "compile");
9263                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9264                         $kiriwrite_presmodule->addhiddendata("count", $database_count);
9265                         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9266                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabasesmessage});
9267                         $kiriwrite_presmodule->addlinebreak();
9268                         $kiriwrite_presmodule->addlinebreak();
9269                         $kiriwrite_presmodule->startbox("datalist");
9271                         $database_count = 0;
9273                         # write out the list of databases to compile.
9275                         foreach $database (keys %database_list){
9277                                 $database_count++;
9279                                 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9280                                 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9282                                 # Check if the database name is undefined and if it is
9283                                 # then write a message saying the database name is blank.
9285                                 if (!$database_list{$database}{Name}){
9286                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{compile}->{blankdatabasename});
9287                                 } else {
9288                                         $kiriwrite_presmodule->addtext($database_list{$database}{Name});
9289                                 }
9291                                 $kiriwrite_presmodule->addlinebreak();
9293                         }
9295                         $kiriwrite_presmodule->endbox();
9297                         # Disconnect from the database server.
9299                         $kiriwrite_dbmodule->disconnect();
9301                         $kiriwrite_presmodule->addlinebreak();
9302                         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselecteddatabasesbutton});
9303                         $kiriwrite_presmodule->addtext(" | ");
9304                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9305                         $kiriwrite_presmodule->endform();
9307                         return $kiriwrite_presmodule->grab();
9309                 } else {
9311                         # The type is something else other than
9312                         # single or multiple, so return an error.
9314                         kiriwrite_error("invalidvariable");
9316                 }
9318         } else {
9320                 # The confirm value is neither 0 or 1, so
9321                 # return an error.
9323                 kiriwrite_error("invalidvariable");
9325         }
9329 sub kiriwrite_compile_all{
9330 #################################################################################
9331 # kiriwrite_compile_all: Compile all of the databases in the database           #
9332 # directory.                                                                    #
9333 #                                                                               #
9334 # Usage:                                                                        #
9335 #                                                                               #
9336 # kiriwrite_compile_all();                                                      #
9337 #################################################################################
9339         # Connect to the database server.
9341         $kiriwrite_dbmodule->connect();
9343         # Check if any errors occured while connecting to the database server.
9345         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9347                 # A database connection error has occured so return
9348                 # an error.
9350                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9352         }
9354         # Get the list of available databases.
9356         my @database_list = $kiriwrite_dbmodule->getdblist();
9358         # Check if any errors occured while getting the databases.
9360         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9362                 # The database directory is missing so return an error.
9364                 kiriwrite_error("datadirectorymissing");
9366         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9368                 # The database directory has invalid permissions set so return
9369                 # an error.
9371                 kiriwrite_error("datadirectoryinvalidpermissions");
9373         }
9375         # Define some variables for later.
9377         my $database;
9378         my $database_name_filename_check;
9379         my $database_count              = 0;
9381         # Check the list of databases to compile to see if it is blank,
9382         # if it is then return an error.
9384         if (!@database_list){
9386                 # The list of database is blank so return an error.
9388                 kiriwrite_error("nodatabasesavailable");
9390         }
9392         # Write out a form for confirming the action to compile all of the databases.
9394         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabases}, { Style => "pageheader" });
9395         $kiriwrite_presmodule->addlinebreak();
9396         $kiriwrite_presmodule->addlinebreak();
9398         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9399         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9400         $kiriwrite_presmodule->addhiddendata("action", "compile");
9401         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9403         foreach $database (@database_list){
9405                 # Check if the database filename is blank.
9407                 if ($database eq ""){
9409                         # The database filename is blank so process
9410                         # the next database.
9412                         next;
9414                 }
9416                 # Check if the database filename is valid before
9417                 # using the database.
9419                 $database_name_filename_check   = kiriwrite_variablecheck($database, "filename", 0, 1);
9421                 if ($database_name_filename_check ne 0){
9423                         # The database filename is invalid so process
9424                         # the next database.
9426                         next;
9428                 }
9430                 $database_count++;
9431                 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database);
9432                 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9434         }
9436         $kiriwrite_presmodule->addhiddendata("count", $database_count);
9438         # Disconnect from the database server.
9440         $kiriwrite_dbmodule->disconnect();
9442         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabasesmessage});
9443         $kiriwrite_presmodule->addlinebreak();
9444         $kiriwrite_presmodule->addlinebreak();
9446         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9447         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compilealldatabasesbutton});
9448         $kiriwrite_presmodule->addtext(" | ");
9449         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9451         return $kiriwrite_presmodule->grab();
9455 sub kiriwrite_selectedlist{
9456 #################################################################################
9457 # kiriwrite_page_selectedlist: Get the list of selected pages to use.           #
9458 #                                                                               #
9459 # Usage:                                                                        #
9460 #                                                                               #
9461 # kiriwrite_page_selectedlist();                                                #
9462 #################################################################################
9464         # Load the required Perl modules.
9466         my $query = new CGI;
9468         my $count       = $query->param('count');
9470         # Check if the list of files has a value and if not set it 0.
9472         if (!$count){
9474                 $count = 0;
9476         }
9478         # Define some values for later.
9480         my @filename_list; 
9481         my @selected_list;
9482         my @final_list;
9484         my $filename;
9485         my $selected;
9487         my $final_count = 0;
9488         my $seek = 0;
9490         # Get the list of filenames.
9492         do {
9494                 # Get the values from id[]
9496                 $seek++;
9498                 $filename               = $query->param('id[' . $seek . ']');
9499                 $filename_list[$seek]   = $filename;
9501         } until ($seek eq $count || $count eq 0);
9503         # Get the list of selected filenames.
9505         $seek = 0;
9507         do {
9509                 # Get the values from name[]
9511                 $seek++;
9513                 $selected       = $query->param('name[' . $seek . ']');
9515                 if (!$selected){
9517                         $selected = 'off';
9519                 }
9521                 $selected_list[$seek]   = $selected;
9523         } until ($seek eq $count || $count eq 0);
9525         # Create a final list of filenames to be used for
9526         # processing.
9528         $seek = 0;
9530         do {
9532                 # Check if the selected value is on and include
9533                 # the filename in the final list.
9535                 $seek++;
9537                 $selected       = $selected_list[$seek];
9539                 if ($selected eq "on"){
9541                         $filename       = $filename_list[$seek];
9542                         $final_list[$final_count] = $filename;
9543                         $final_count++;
9545                 }
9547         } until ($seek eq $count || $count eq 0);
9549         return @final_list;
9553 sub kiriwrite_compile_list{
9554 #################################################################################
9555 # kiriwrite_compile_list: Shows a list of databases that can be compiled.       #
9556 #                                                                               #
9557 # Usage:                                                                        #
9558 #                                                                               #
9559 # kiriwrite_compile_list();                                                     #
9560 #################################################################################
9562         # Define the following variables that are going to be used before using 
9563         # the foreach function.
9565         my %database_info;
9566         my %database_list;
9567         my $database_count = 0;
9568         my $database_filename = "";
9569         my $database_filename_friendly = "";
9570         my $database_permissions = "";
9571         my $database_name = "";
9572         my $database_description = "";
9573         my $data_file = "";
9574         my @permissions_list;
9575         my @error_list;
9576         my $table_style = 0;
9577         my $table_style_name = "";
9578         my $database;
9580         tie(%database_list, 'Tie::IxHash');
9582         # Connect to the database server.
9584         $kiriwrite_dbmodule->connect();
9586         # Check if any errors occured while connecting to the database server.
9588         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9590                 # A database connection error has occured so return
9591                 # an error.
9593                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9595         }
9597         # Get the list of available databases and process any errors that
9598         # might have occured.
9600         my @database_list = $kiriwrite_dbmodule->getdblist();
9602         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9604                 # The database directory is missing so return an error.
9606                 kiriwrite_error("datadirectorymissing");
9608         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9610                 # The database directory has invalid permissions set so return
9611                 # an error.
9613                 kiriwrite_error("datadirectoryinvalidpermissions");
9615         }
9617         # Begin creating the table for the list of databases.
9619         foreach $data_file (@database_list){
9621                 # Select the database.
9623                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
9625                 # Check if any error occured while selecting the database.
9627                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9629                         # The database does not exist, so process the next
9630                         # database.
9632                         next;
9634                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
9636                         # The database has invalid permissions settings, so
9637                         # add the database to the list of databases with
9638                         # invalid permissions set and process the next
9639                         # database.
9641                         push(@permissions_list, $data_file);
9642                         next;
9644                 }
9646                 # Get information about the database.
9648                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9650                 # Check if any error occured while getting information from the
9651                 # database.
9653                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9655                         # A database error has occured, add the database and specific
9656                         # error message to the list of databases with errors and
9657                         # process the next database.
9659                         push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
9660                         next;
9662                 }
9664                 $database_name          = $database_info{"DatabaseName"};
9665                 $database_description   = $database_info{"Description"};
9667                 # Create a friendly name for the database.
9669                 $database_filename_friendly = $data_file;
9671                 # Append the database information to the table.
9673                 $database_list{$database_count}{Filename}       = $database_filename_friendly;
9674                 $database_list{$database_count}{Name}           = $database_name;
9675                 $database_list{$database_count}{Description}    = $database_description;
9677                 $database_count++;
9679         }
9681         # Check if there are no valid databases are if there is no
9682         # valid databases then write a message saying that no
9683         # valid databases are available.
9685         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilepages}, { Style => "pageheader" });
9686         $kiriwrite_presmodule->addlinebreak();
9687         $kiriwrite_presmodule->addlinebreak();
9689         if ($database_count eq 0){
9691                 # There are no databases available for compiling so
9692                 # write a message instead.
9694                 $kiriwrite_presmodule->startbox("errorbox");
9695                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{nodatabasesavailable});
9696                 $kiriwrite_presmodule->endbox();
9698         } else {
9700                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9701                 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9702                 $kiriwrite_presmodule->addhiddendata("action", "compile");
9703                 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9705                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
9706                 $kiriwrite_presmodule->addtext(" | ");
9707                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselectedbutton});
9708                 $kiriwrite_presmodule->addlinebreak();
9709                 $kiriwrite_presmodule->addlinebreak();
9710                 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9711                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
9713                 $kiriwrite_presmodule->startheader();
9714                 $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
9715                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
9716                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
9717                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
9718                 $kiriwrite_presmodule->endheader();
9720                 $database_count = 1;
9722                 foreach $database (keys %database_list){
9724                         # Check the style to be used with.
9726                         if ($table_style eq 0){
9728                                 # Use the first style and set the style value
9729                                 # to use the next style, the next time the
9730                                 # if statement is checked.
9732                                 $table_style_name = "tablecell1";
9733                                 $table_style = 1;
9735                         } else {
9737                                 # Use the second style and set the style
9738                                 # value to use the first style, the next
9739                                 # time if statement is checked.
9741                                 $table_style_name = "tablecell2";
9742                                 $table_style = 0;
9743                         }
9745                         # Add the template to the list of available
9746                         # templates to compile.
9748                         $kiriwrite_presmodule->startrow();
9749                         $kiriwrite_presmodule->addcell($table_style_name);
9750                         $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9751                         $kiriwrite_presmodule->addcheckbox("name[" . $database_count . "]");
9752                         $kiriwrite_presmodule->endcell();
9753                         $kiriwrite_presmodule->addcell($table_style_name);
9755                         if (!$database_list{$database}{Name}){
9756                                 $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}) });
9757                         } else {
9758                                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_list{$database}{Filename}, { Text => $database_list{$database}{Name} });
9759                         }
9761                         $kiriwrite_presmodule->endcell();
9762                         $kiriwrite_presmodule->addcell($table_style_name);
9764                         if (!$database_list{$database}{Description}){
9765                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
9766                         } else {
9767                                 $kiriwrite_presmodule->addtext($database_list{$database}{Description});
9768                         }
9770                         $kiriwrite_presmodule->endcell();
9771                         $kiriwrite_presmodule->addcell($table_style_name);
9772                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile&action=compile&type=single&database=" . $database_list{$database}{Filename}, { Text => $kiriwrite_lang->{options}->{compile} });
9773                         $kiriwrite_presmodule->endcell();
9774                         $kiriwrite_presmodule->endrow();
9776                         $database_count++;
9778                 }
9780                 $kiriwrite_presmodule->endtable();
9781                 $kiriwrite_presmodule->endform();
9783         }
9785         # Disconnect from the database server.
9787         $kiriwrite_dbmodule->disconnect();
9789         # Check if any databases with problems have appeared and if they
9790         # have, print out a message saying which databases have problems.
9792         if (@permissions_list){
9794                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
9795                 $kiriwrite_presmodule->addlinebreak();
9796                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
9797                 $kiriwrite_presmodule->addlinebreak();
9798  
9799                 foreach $database (@permissions_list){
9800  
9801                         $kiriwrite_presmodule->addlinebreak();
9802                         $kiriwrite_presmodule->addtext($database);
9803  
9804                 }
9805  
9806                 $kiriwrite_presmodule->addlinebreak();
9807                 $kiriwrite_presmodule->addlinebreak();
9809         }
9811         if (@error_list){
9813                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
9814                 $kiriwrite_presmodule->addlinebreak();
9815                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
9816                 $kiriwrite_presmodule->addlinebreak();
9818                 foreach $database (@error_list){
9820                         $kiriwrite_presmodule->addlinebreak();
9821                         $kiriwrite_presmodule->addtext($database);
9823                 }
9825         }
9827         return $kiriwrite_presmodule->grab();
9831 sub kiriwrite_compile_clean{
9832 #################################################################################
9833 # kiriwrite_compile_clean: Deletes the contents of the output directory.        #
9834 #                                                                               #
9835 # Usage:                                                                        #
9836 #                                                                               #
9837 # kiriwrite_compile_clean(confirm);                                             #
9838 #                                                                               #
9839 # confirm       Confirms the deletion of files from the output directory.       #
9840 #################################################################################
9842         # Get the values passed to the subroutine.
9844         my ($confirm) = @_;
9846         # Define some variables for later.
9848         my $file_permissions;
9849         my $output_directory_exists;
9850         my $output_directory_permissions;
9851         my $warning_message;
9853         # Check if the output directory exists.
9855         $output_directory_exists         = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"});
9857         if ($output_directory_exists eq 1){
9859                 # The output directory does not exist so return
9860                 # an error.
9862                 kiriwrite_error("outputdirectorymissing");
9864         }
9866         # Check if the output directory has invalid
9867         # permissions set.
9869         $output_directory_permissions   = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"});
9871         if ($output_directory_permissions eq 1){
9873                 # The output directory has invalid permissions
9874                 # set, so return an error.
9876                 kiriwrite_error("outputdirectoryinvalidpermissions");
9878         }
9880         if ($confirm) {
9882                 if ($confirm eq 1){
9884                         # The action to clean the output directory has been
9885                         # confirmed.
9887                         # Remove the list of files and directories from the
9888                         # output directory.
9890                         $file_permissions = kiriwrite_compile_clean_helper($kiriwrite_config{"directory_data_output"}, 1);
9892                         if ($file_permissions eq 1){
9894                                 # One of the files or directories has invalid
9895                                 # permissions set so write a warning message.
9897                         }
9899                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9901                         if ($file_permissions eq 1){
9903                                 $kiriwrite_presmodule->addlinebreak();
9904                                 $kiriwrite_presmodule->addlinebreak();
9905                                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{somecontentnotremoved});
9906                                 $kiriwrite_presmodule->addlinebreak();
9907                                 $kiriwrite_presmodule->addlinebreak();
9909                         } else {
9911                                 $kiriwrite_presmodule->addlinebreak();
9912                                 $kiriwrite_presmodule->addlinebreak();
9913                                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{contentremoved});
9914                                 $kiriwrite_presmodule->addlinebreak();
9915                                 $kiriwrite_presmodule->addlinebreak();
9917                         }
9919                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9921                         return $kiriwrite_presmodule->grab();
9923                 } else {
9925                         # A value other than 1 is set for the confirm value
9926                         # (which it shouldn't be) so return an error.
9928                         kiriwrite_error("invalidvariable");
9930                 }
9932         }
9934         # Print out a form for cleaning the output directory.
9936         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9937         $kiriwrite_presmodule->addlinebreak();
9938         $kiriwrite_presmodule->addlinebreak();
9939         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9940         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9941         $kiriwrite_presmodule->addhiddendata("action", "clean");
9942         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9943         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectorymessage});
9944         $kiriwrite_presmodule->addlinebreak();
9945         $kiriwrite_presmodule->addlinebreak();
9946         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{cleanoutputdirectorybutton});
9947         $kiriwrite_presmodule->addtext(" | ");
9948         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist}});
9949         $kiriwrite_presmodule->endform();
9951         return $kiriwrite_presmodule->grab();
9955 sub kiriwrite_compile_clean_helper{
9956 #################################################################################
9957 # kiriwrite_compile_clean_helper: Helper for cleaning out the output directory. #
9958 # This command sometimes is called recursively (when a directory is found).     #
9959 #                                                                               #
9960 # Usage:                                                                        #
9961 #                                                                               #
9962 # kiriwrite_compile_clean_helper(directory, removedirectory, [permissions]);    #
9963 #                                                                               #
9964 # directory             Specifies the directory to remove files (and            #
9965 #                       sub-directories) from.                                  #
9966 # keepdirectory         Keeps the directory itself after all files have been    #
9967 #                       removed.                                                #
9968 # permissions           Used recursively for error checking.                    #
9969 #################################################################################
9971         # Get the values passed to the subroutine.
9973         my ($directory, $directory_keep, $permissions) = @_;
9975         # Check if the directory_keep is only one charater long.
9977         my $directory_file = "";
9978         my @directory_list;
9979         my $file_permissions = 0;
9980         my $debug = 0;
9982         # Check if the file permissions value is blank.
9984         if (!$permissions){
9986                 # The file permissions value is blank.
9988                 $permissions = 0;
9990         }
9992         # Open the directory specified, read the contents of
9993         # the directory and then close the directory.
9995         opendir(DIRECTORY, $directory);
9996         @directory_list = readdir(DIRECTORY);
9997         closedir(DIRECTORY);
9999         # Remove each file and directory.
10001         foreach $directory_file (@directory_list){
10003                 # Check if the filename is '.' or '..' and if it
10004                 # is skip those files.
10006                 if ($directory_file eq "." || $directory_file eq ".."){
10008                         # The filename is '.' or '..' so skip processing
10009                         # these files.
10011                 } else {
10013                         # Check if the permissions on the file or directory has
10014                         # valid permissions set.
10016                         $file_permissions = kiriwrite_filepermissions($directory . '/' . $directory_file, 1, 1);
10018                         if ($file_permissions eq 1){
10020                                 # The file or directory has invalid permissions set.
10022                                 $permissions = 1;
10023                                 next;
10025                         }
10027                         # Check if the filename is a directory.
10029                         if (-d $directory . '/' . $directory_file){
10031                                 # The filename is a directory so send the directory name
10032                                 # and this subroutine again (recursively).
10034                                 kiriwrite_compile_clean_helper($directory . '/' . $directory_file, 0, $permissions);
10036                         } else {
10038                                 # The file is not a directory but an actual file so
10039                                 # remove as normal (in terms of the Perl language).
10041                                 ($directory) = $directory =~ m/^(.*)$/g;
10042                                 ($directory_file) = $directory_file =~ m/^(.*)$/g;
10044                                 # Check if the directory is undefined and if it is then
10045                                 # set it to blank.
10047                                 if (!$directory){
10048                                         $directory = "";
10049                                 }
10051                                 if (!$directory_file){
10052                                         $directory_file = "";
10053                                 }
10055                                 unlink($directory . '/' . $directory_file);
10057                         }
10059                 }
10061         }
10063         # Check if the directory should be kept.
10065         if ($directory_keep eq 1){
10067                 # The directory_keep value is set as 1 so the directory
10068                 # specified should be kept.
10070         } elsif ($directory_keep eq 0) {
10072                 # The directory_keep value is set as 0 so remove the
10073                 # directory specified.
10075                 ($directory) = $directory =~ m/^(.*)$/g;
10076                 rmdir($directory);
10078         } else {
10080                 # A value other than 0 or 1 was specified so return
10081                 # an error,
10083                 kiriwrite_error('invalidvalue');
10085         }
10087         return $permissions;
10091 sub kiriwrite_settings_view{
10092 #################################################################################
10093 # kiriwrite_options_view: Writes out the list of options and variables.         #
10094 #                                                                               #
10095 # Usage:                                                                        #
10096 #                                                                               #
10097 # kiriwrite_settings_view();                                                    #
10098 #################################################################################
10100         # Get the settings.
10102         my $settings_directory_db               = $kiriwrite_config{"directory_data_db"};
10103         my $settings_directory_output           = $kiriwrite_config{"directory_data_output"};
10104         my $settings_noncgi_images              = $kiriwrite_config{"directory_noncgi_images"};
10105         my $settings_system_datetime            = $kiriwrite_config{"system_datetime"};
10106         my $settings_system_language            = $kiriwrite_config{"system_language"};
10107         my $settings_system_presentation        = $kiriwrite_config{"system_presmodule"};
10108         my $settings_system_database            = $kiriwrite_config{"system_dbmodule"};
10110         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{viewsettings}, { Style => "pageheader" });
10111         $kiriwrite_presmodule->addlinebreak();
10112         $kiriwrite_presmodule->addlinebreak();
10113         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{currentsettings});
10114         $kiriwrite_presmodule->addlinebreak();
10115         $kiriwrite_presmodule->addlinebreak();
10116         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10118         $kiriwrite_presmodule->startheader();
10119         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10120         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10121         $kiriwrite_presmodule->endheader();
10123         $kiriwrite_presmodule->startrow();
10124         $kiriwrite_presmodule->addcell("tablecellheader");
10125         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10126         $kiriwrite_presmodule->endcell();
10127         $kiriwrite_presmodule->addcell("tablecellheader");
10128         $kiriwrite_presmodule->endcell();
10129         $kiriwrite_presmodule->endrow();
10131         $kiriwrite_presmodule->startrow();
10132         $kiriwrite_presmodule->addcell("tablecell1");
10133         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10134         $kiriwrite_presmodule->endcell();
10135         $kiriwrite_presmodule->addcell("tablecell2");
10136         $kiriwrite_presmodule->addtext($settings_directory_db);
10137         $kiriwrite_presmodule->endcell();
10138         $kiriwrite_presmodule->endrow();
10140         $kiriwrite_presmodule->startrow();
10141         $kiriwrite_presmodule->addcell("tablecell1");
10142         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
10143         $kiriwrite_presmodule->endcell();
10144         $kiriwrite_presmodule->addcell("tablecell2");
10145         $kiriwrite_presmodule->addtext($settings_directory_output);
10146         $kiriwrite_presmodule->endcell();
10147         $kiriwrite_presmodule->endrow();
10149         $kiriwrite_presmodule->startrow();
10150         $kiriwrite_presmodule->addcell("tablecell1");
10151         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
10152         $kiriwrite_presmodule->endcell();
10153         $kiriwrite_presmodule->addcell("tablecell2");
10154         $kiriwrite_presmodule->addtext($settings_noncgi_images);
10155         $kiriwrite_presmodule->endcell();
10156         $kiriwrite_presmodule->endrow();
10158         $kiriwrite_presmodule->startrow();
10159         $kiriwrite_presmodule->addcell("tablecellheader");
10160         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
10161         $kiriwrite_presmodule->endcell();
10162         $kiriwrite_presmodule->addcell("tablecellheader");
10163         $kiriwrite_presmodule->endcell();
10164         $kiriwrite_presmodule->endrow();
10166         $kiriwrite_presmodule->startrow();
10167         $kiriwrite_presmodule->addcell("tablecell1");
10168         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
10169         $kiriwrite_presmodule->endcell();
10170         $kiriwrite_presmodule->addcell("tablecell2");
10171         $kiriwrite_presmodule->addtext($settings_system_datetime);
10172         $kiriwrite_presmodule->endcell();
10173         $kiriwrite_presmodule->endrow();
10175         $kiriwrite_presmodule->startrow();
10176         $kiriwrite_presmodule->addcell("tablecellheader");
10177         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
10178         $kiriwrite_presmodule->endcell();
10179         $kiriwrite_presmodule->addcell("tablecellheader");
10180         $kiriwrite_presmodule->endcell();
10181         $kiriwrite_presmodule->endrow();
10183         $kiriwrite_presmodule->startrow();
10184         $kiriwrite_presmodule->addcell("tablecell1");
10185         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
10186         $kiriwrite_presmodule->endcell();
10187         $kiriwrite_presmodule->addcell("tablecell2");
10188         $kiriwrite_presmodule->addtext($settings_system_language);
10189         $kiriwrite_presmodule->endcell();
10190         $kiriwrite_presmodule->endrow();
10192         $kiriwrite_presmodule->startrow();
10193         $kiriwrite_presmodule->addcell("tablecellheader");
10194         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
10195         $kiriwrite_presmodule->endcell();
10196         $kiriwrite_presmodule->addcell("tablecellheader");
10197         $kiriwrite_presmodule->endcell();
10198         $kiriwrite_presmodule->endrow();
10200         $kiriwrite_presmodule->startrow();
10201         $kiriwrite_presmodule->addcell("tablecell1");
10202         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
10203         $kiriwrite_presmodule->endcell();
10204         $kiriwrite_presmodule->addcell("tablecell2");
10205         $kiriwrite_presmodule->addtext($settings_system_presentation);
10206         $kiriwrite_presmodule->endcell();
10207         $kiriwrite_presmodule->endrow();
10209         $kiriwrite_presmodule->startrow();
10210         $kiriwrite_presmodule->addcell("tablecell1");
10211         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
10212         $kiriwrite_presmodule->endcell();
10213         $kiriwrite_presmodule->addcell("tablecell2");
10214         $kiriwrite_presmodule->addtext($settings_system_database);
10215         $kiriwrite_presmodule->endcell();
10216         $kiriwrite_presmodule->endrow();
10218         $kiriwrite_presmodule->endtable();
10220         $kiriwrite_presmodule->addlinebreak();
10221         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{altersettings});
10223         return $kiriwrite_presmodule->grab();
10227 sub kiriwrite_settings_edit{
10228 #################################################################################
10229 # kiriwrite_settings_edit: Edits the options.                                   #
10230 #                                                                               #
10231 # Usage:                                                                        #
10232 #                                                                               #
10233 # kiriwrite_settings_edit(options);                                             #
10234 #                                                                               #
10235 # options               Specifies the following options in any order.           #
10236 #                                                                               #
10237 # DatabaseDirectory     Specifies the new database directory to use.            #
10238 # OutputDirectory       Specifies the new output directory to use.              #
10239 # ImagesURIPath         Specifies the new URI path for images.                  #
10240 # DateTimeFormat        Specifies the new date and time format.                 #
10241 # SystemLanguage        Specifies the new language to use for Kiriwrite.        #
10242 # PrsentationModule     Specifies the new presentation module to use for        #
10243 #                       Kiriwrite.                                              #
10244 # DatabaseModule        Specifies the new database module to use for Kiriwrite. #
10245 #                                                                               #
10246 # Options for server-based database modules.                                    #
10247 #                                                                               #
10248 # DatabaseServer        Specifies the database server to use.                   #
10249 # DaravasePort          Specifies the port the database server is running on.   #
10250 # DatabaseProtocol      Specifies the protocol the database server is using.    #
10251 # DatabaseSQLDatabase   Specifies the SQL database name to use.                 #
10252 # DatabaseUsername      Specifies the database server username.                 #
10253 # DatabasePasswordKeep  Keeps the current password in the configuration file.   #
10254 # DatabasePassword      Specifies the password for the database server username.#
10255 # DatabaseTablePrefix   Specifies the prefix used for tables.                   #
10256 #################################################################################
10258         # Get the values that have been passed to the subroutine.
10260         my ($passedoptions) = @_;
10262         # Get the values from the hash.
10264         my $settings_dbdirectory                = $passedoptions->{"DatabaseDirectory"};
10265         my $settings_outputdirectory            = $passedoptions->{"OutputDirectory"};
10266         my $settings_imagesuri                  = $passedoptions->{"ImagesURIPath"};
10267         my $settings_datetimeformat             = $passedoptions->{"DateTimeFormat"};
10268         my $settings_languagesystem             = $passedoptions->{"SystemLanguage"};
10269         my $settings_presmodule                 = $passedoptions->{"PresentationModule"};
10270         my $settings_dbmodule                   = $passedoptions->{"DatabaseModule"};
10272         my $settings_database_server            = $passedoptions->{"DatabaseServer"};
10273         my $settings_database_port              = $passedoptions->{"DatabasePort"};
10274         my $settings_database_protocol          = $passedoptions->{"DatabaseProtocol"};
10275         my $settings_database_sqldatabase       = $passedoptions->{"DatabaseSQLDatabase"};
10276         my $settings_database_username          = $passedoptions->{"DatabaseUsername"};
10277         my $settings_database_passwordkeep      = $passedoptions->{"DatabasePasswordKeep"};
10278         my $settings_database_password          = $passedoptions->{"DatabasePassword"};
10279         my $settings_database_tableprefix       = $passedoptions->{"DatabaseTablePrefix"};
10281         my $confirm                             = $passedoptions->{"Confirm"};
10283         # Load the required Perl modules.
10285         my $xsl = XML::Simple->new();
10287         if (!$confirm){
10289                 # If the confirm value is blank, then set the confirm
10290                 # value to 0.
10292                 $confirm = 0;
10294         }
10296         if ($confirm eq "1"){
10298                 # The action to edit the settings has been confirmed.
10299                 # Start by checking each variable about to be placed
10300                 # in the settings file is valid.
10302                 # Deinfe some variables for later.
10304                 my @kiriwrite_new_settings;
10306                 # Check the length of the directory names.
10308                 kiriwrite_variablecheck($settings_dbdirectory, "maxlength", 64, 0);
10309                 kiriwrite_variablecheck($settings_outputdirectory, "maxlength", 64, 0);
10310                 kiriwrite_variablecheck($settings_imagesuri, "maxlength", 512, 0);
10311                 kiriwrite_variablecheck($settings_datetimeformat, "maxlength", 32, 0);
10313                 kiriwrite_variablecheck($settings_languagesystem, "language_filename", "", 0);
10315                 # Check the module names to see if they're valid.
10317                 my $kiriwrite_presmodule_modulename_check       = kiriwrite_variablecheck($settings_presmodule, "module", 0, 1);
10318                 my $kiriwrite_dbmodule_modulename_check         = kiriwrite_variablecheck($settings_dbmodule, "module", 0, 1);
10320                 if ($kiriwrite_presmodule_modulename_check eq 1){
10322                         # The presentation module name is blank, so return
10323                         # an error.
10325                         kiriwrite_error("presmoduleblank");
10327                 }
10329                 if ($kiriwrite_presmodule_modulename_check eq 2){
10331                         # The presentation module name is invalid, so return
10332                         # an error.
10334                         kiriwrite_error("presmoduleinvalid");
10336                 }
10338                 if ($kiriwrite_dbmodule_modulename_check eq 1){
10340                         # The database module name is blank, so return
10341                         # an error.
10343                         kiriwrite_error("dbmoduleblank");
10345                 }
10347                 if ($kiriwrite_dbmodule_modulename_check eq 2){
10349                         # The database module name is invalid, so return
10350                         # an error.
10352                         kiriwrite_error("dbmoduleinvalid");
10354                 }
10356                 # Check if the directory names only contain letters and numbers and
10357                 # return a specific error if they don't.
10359                 my $kiriwrite_dbdirectory_check         = kiriwrite_variablecheck($settings_dbdirectory, "directory", 0, 1);
10360                 my $kiriwrite_outputdirectory_check     = kiriwrite_variablecheck($settings_outputdirectory, "directory", 0, 1);
10361                 kiriwrite_variablecheck($settings_datetimeformat, "datetime", 0, 0);
10363                 if ($kiriwrite_dbdirectory_check eq 1){
10365                         # The database directory name is blank, so return
10366                         # an error.
10368                         kiriwrite_error("dbdirectoryblank");
10370                 } elsif ($kiriwrite_dbdirectory_check eq 2){
10372                         # The database directory name is invalid, so return
10373                         # an error.
10375                         kiriwrite_error("dbdirectoryinvalid");
10377                 }
10379                 if ($kiriwrite_outputdirectory_check eq 1){
10381                         # The output directory name is blank, so return
10382                         # an error.
10384                         kiriwrite_error("outputdirectoryblank");
10386                 } elsif ($kiriwrite_outputdirectory_check eq 2){
10388                         # The output directory name is invalid, so return
10389                         # an error.
10391                         kiriwrite_error("outputdirectoryinvalid");
10393                 }
10395                 # Check if the presentation module with the filename given exists.
10397                 my $presmodule_exists = kiriwrite_fileexists("Modules/Presentation/" . $settings_presmodule . ".pm");
10399                 if ($presmodule_exists eq 1){
10401                         # The presentation module does not exist so return an error.
10403                         kiriwrite_error("presmodulemissing");
10405                 }
10407                 # Check if the database module with the filename given exists.
10409                 my $dbmodule_exists = kiriwrite_fileexists("Modules/Database/" . $settings_dbmodule . ".pm");
10411                 if ($dbmodule_exists eq 1){
10413                         # The database module does not exist so return an error.
10415                         kiriwrite_error("dbmodulemissing");
10417                 }
10419                 # Check if the language filename given exists.
10421                 my $languagefile_exists = kiriwrite_fileexists("lang/" . $settings_languagesystem . ".xml");
10423                 if ($languagefile_exists eq 1){
10425                         # The language filename given does not exist so return an error.
10427                         kiriwrite_error("languagefilenamemissing");             
10429                 }
10431                 # Check the database server options to see if they are valid.
10433                 my $kiriwrite_databaseserver_length_check               = kiriwrite_variablecheck($settings_database_server, "maxlength", 128, 1);
10434                 my $kiriwrite_databaseserver_lettersnumbers_check       = kiriwrite_variablecheck($settings_database_server, "lettersnumbers", 0, 1);
10435                 my $kiriwrite_databaseport_length_check                 = kiriwrite_variablecheck($settings_database_port, "maxlength", 5, 1);
10436                 my $kiriwrite_databaseport_numbers_check                = kiriwrite_variablecheck($settings_database_port, "numbers", 0, 1);
10437                 my $kiriwrite_databaseport_port_check                   = kiriwrite_variablecheck($settings_database_port, "port", 0, 1);
10438                 my $kiriwrite_databaseprotocol_length_check             = kiriwrite_variablecheck($settings_database_protocol, "maxlength", 5, 1);
10439                 my $kiriwrite_databaseprotocol_protocol_check           = kiriwrite_variablecheck($settings_database_protocol, "serverprotocol", 0, 1);
10440                 my $kiriwrite_databasename_length_check                 = kiriwrite_variablecheck($settings_database_sqldatabase, "maxlength", 32, 1);
10441                 my $kiriwrite_databasename_lettersnumbers_check         = kiriwrite_variablecheck($settings_database_sqldatabase, "lettersnumbers", 0, 1);
10442                 my $kiriwrite_databaseusername_length_check             = kiriwrite_variablecheck($settings_database_username, "maxlength", 16, 1);
10443                 my $kiriwrite_databaseusername_lettersnumbers_check     = kiriwrite_variablecheck($settings_database_username, "lettersnumbers", 0, 1);
10444                 my $kiriwrite_databasepassword_length_check             = kiriwrite_variablecheck($settings_database_password, "maxlength", 64, 1);
10445                 my $kiriwrite_databasetableprefix_length_check          = kiriwrite_variablecheck($settings_database_tableprefix, "maxlength", 16, 1);
10446                 my $kiriwrite_databasetableprefix_lettersnumbers_check  = kiriwrite_variablecheck($settings_database_tableprefix, "lettersnumbers", 0, 1);
10448                 if ($kiriwrite_databaseserver_length_check eq 1){
10450                         # The length of the database server name is too long so
10451                         # return an error.
10453                         kiriwrite_error("servernametoolong");
10455                 }
10457                 if ($kiriwrite_databaseserver_lettersnumbers_check eq 1){
10459                         # The database server name contains characters other
10460                         # than letters and numbers, so return an error.
10462                         kiriwrite_error("servernameinvalid");
10464                 }
10466                 if ($kiriwrite_databaseport_length_check eq 1){
10468                         # The database port number length is too long so return
10469                         # an error.
10471                         kiriwrite_error("serverportnumbertoolong");
10473                 }
10475                 if ($kiriwrite_databaseport_numbers_check eq 1){
10477                         # The database port number contains characters other
10478                         # than numbers so return an error.
10480                         kiriwrite_error("serverportnumberinvalidcharacters");
10482                 }
10484                 if ($kiriwrite_databaseport_port_check eq 1){
10486                         # The database port number given is invalid so return
10487                         # an error.
10489                         kiriwrite_error("serverportnumberinvalid");
10491                 }
10493                 if ($kiriwrite_databaseprotocol_length_check eq 1){
10495                         # The database protocol name given is too long so
10496                         # return an error.
10498                         kiriwrite_error("serverprotocolnametoolong");
10500                 }
10502                 if ($kiriwrite_databaseprotocol_protocol_check eq 1){
10504                         # The server protcol given is invalid so return
10505                         # an error.
10507                         kiriwrite_error("serverprotocolinvalid");
10509                 }
10511                 if ($kiriwrite_databasename_length_check eq 1){
10513                         # The SQL database name is too long so return
10514                         # an error.
10516                         kiriwrite_error("serverdatabasenametoolong");
10518                 }
10520                 if ($kiriwrite_databasename_lettersnumbers_check eq 1){
10522                         # The database name contains invalid characters
10523                         # so return an error.
10525                         kiriwrite_error("serverdatabasenameinvalid");
10527                 }
10529                 if ($kiriwrite_databaseusername_length_check eq 1){
10531                         # The database username given is too long so
10532                         # return an error.
10534                         kiriwrite_error("serverdatabaseusernametoolong");
10536                 }
10538                 if ($kiriwrite_databaseusername_lettersnumbers_check eq 1){
10540                         # The database username contains invalid characters
10541                         # so return an error.
10543                         kiriwrite_error("serverdatabaseusernameinvalid");
10545                 }
10547                 if ($kiriwrite_databasepassword_length_check eq 1){
10549                         # The database password given is too long so return
10550                         # an error.
10552                         kiriwrite_error("serverdatabasepasswordtoolong");
10554                 }
10556                 if ($kiriwrite_databasetableprefix_length_check eq 1){
10558                         # The database table prefix given is too long so
10559                         # return an error.
10561                         kiriwrite_error("serverdatabasetableprefixtoolong");
10563                 }
10565                 if ($kiriwrite_databasetableprefix_lettersnumbers_check eq 1){
10567                         # The database table prefix given contains invalid
10568                         # characters so return an error.
10570                         kiriwrite_error("serverdatabasetableprefixinvalid");
10572                 }
10574                 # Check if the current password should be kept.
10576                 if ($settings_database_passwordkeep eq "on"){
10578                         # The current password in the configuration file should be used.
10580                         $settings_database_password     = $kiriwrite_config{"database_password"};
10582                 }
10584                 # Write the new settings to the XML file.
10586                 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 });
10588                 # Write a confirmation message.
10590                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingsedited}, { Style => "pageheadeR" });
10591                 $kiriwrite_presmodule->addlinebreak();
10592                 $kiriwrite_presmodule->addlinebreak();
10593                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingseditedmessage});
10594                 $kiriwrite_presmodule->addlinebreak();
10595                 $kiriwrite_presmodule->addlinebreak();
10596                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
10598                 return $kiriwrite_presmodule->grab();
10600         }
10602         # Get the list of languages available.
10604         my %language_list;
10605         my @language_directory          = "";
10606         my $language;
10607         my $language_filename           = "";
10608         my $language_file_xml           = "";
10609         my $language_file_systemname    = "";
10610         my $language_file_localname     = "";
10611         my $language_file_seek          = 0;
10612         my $language_flie_dot           = 0;
10613         my $language_file_length        = 0;
10614         my $language_file_count         = 0;
10615         my $language_file_char          = "";
10616         my $language_file_friendly      = "";
10617         my $language_config             = $kiriwrite_config{"system_language"};
10619         tie(%language_list, 'Tie::IxHash');
10621         opendir(LANGUAGEDIR, "lang");
10622         @language_directory = grep /m*\.xml$/, readdir(LANGUAGEDIR);
10623         closedir(LANGUAGEDIR);
10625         # Process each language by loading the XML configuration file
10626         # used for each language and then get the System name and 
10627         # the local name of the language.
10629         foreach $language_filename (@language_directory){
10631                 # Load the language file currently selected.
10633                 $language_file_xml = $xsl->XMLin("lang" . '/' . $language_filename, SuppressEmpty => 1);
10635                 # Get the system name and the local name of the language.
10637                 $language_file_localname = $language_file_xml -> {about} -> {name};
10639                 # Check if either the system name or the local name of the language
10640                 # is blank and if it is, then don't add the language to the list.
10642                 if ($language_file_localname eq ""){
10644                         # The system name or the local name is blank so don't add
10645                         # the language to the list.
10646                 
10647                 } else {
10649                         # Get the 'friendly' name of the language file name (basically
10650                         # remove the .xml part from the filename.
10652                         $language_file_length = length($language_filename);
10654                         do {
10656                                 # Get a character from the language filename and currently
10657                                 # set by the seek counter.
10659                                 $language_file_char = substr($language_filename, $language_file_seek, 1);
10661                                 # Check if the character is a dot and if it is then set the
10662                                 # last dot value to the seek counter value.
10664                                 if ($language_file_char eq "."){
10666                                         # Current chatacter is a dot so set the last dot value 
10667                                         # to what is currently the seek counter.
10669                                         $language_flie_dot = $language_file_seek;
10671                                 } else {
10673                                         # Current character is not a dot, so do nothing.
10675                                 }
10677                                 # Increment the seek counter.
10679                                 $language_file_seek++;
10681                         } until ($language_file_seek eq $language_file_length);
10683                         # Reset the seek counter.
10685                         $language_file_seek = 0;
10687                         # Process the file name again and this time process the file
10688                         # name until it reaches the last dot found.
10690                         do {
10692                                 # Get the character the seek counter is currently set at.
10694                                 $language_file_char = substr($language_filename, $language_file_seek, 1);
10696                                 # Append the character to the friendly file name.
10698                                 $language_file_friendly = $language_file_friendly . $language_file_char;
10700                                 # Increment the seek counter.
10701         
10702                                 $language_file_seek++;
10704                         } until ($language_file_seek eq $language_flie_dot);
10706                         # Append the language to the available languages list.
10708                         $language_list{$language_file_count}{Filename} = $language_file_friendly;
10709                         $language_list{$language_file_count}{Name} = $language_file_localname;
10710                         $language_file_count++;
10712                         # Reset certain counters and values before continuing.
10714                         $language_file_seek     = 0;
10715                         $language_flie_dot      = 0;
10716                         $language_file_length   = 0;
10717                         $language_file_char     = "";
10718                         $language_file_friendly = "";
10720                 }
10722         }
10724         # Get the list of presentation modules available.
10726         my %presmodule_list;
10727         my @presmodule_directory;
10728         my $presmodule;
10729         my $presmodule_file             = "";
10730         my $presmodule_char             = "";
10731         my $presmodule_dot              = 0;
10732         my $presmodule_firstdot         = 0;
10733         my $presmodule_firstdotfound    = "";
10734         my $presmodule_seek             = 0;
10735         my $presmodule_length           = 0;
10736         my $presmodule_count            = 0;
10737         my $presmodule_friendly         = "";
10738         my $presmodule_selectlist       = "";
10739         my $presmodule_config           = $kiriwrite_config{"system_presmodule"};
10741         # Open and get the list of presentation modules (perl modules) by filtering
10742         # out the 
10744         opendir(OUTPUTSYSTEMDIR, "Modules/Presentation");
10745         @presmodule_directory = grep /m*\.pm$/, readdir(OUTPUTSYSTEMDIR);
10746         closedir(OUTPUTSYSTEMDIR);
10748         # Process each presentation module and add them to the list of available
10749         # presentation modules.
10751         foreach $presmodule_file (@presmodule_directory){
10753                 # Get the length of the presentation module (perl module) filename.
10755                 $presmodule_length = length($presmodule_file);
10757                 # Get the friendly name of the Perl module (by getting rid of the
10758                 # .pm part of the filename).
10760                 do {
10762                         $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10764                         # Check if the current character is a dot and if it is then
10765                         # set the last dot found number to the current seek number.
10767                         if ($presmodule_char eq "."){
10769                                 # Put the seek value as the last dot found number.
10771                                 $presmodule_dot = $presmodule_seek;
10773                         }
10775                         # Increment the seek counter.
10777                         $presmodule_seek++;
10779                 } until ($presmodule_seek eq $presmodule_length);
10781                 # Reset the seek counter as it is going to be used again.
10783                 $presmodule_seek = 0;
10785                 # Get the friendly name of the Perl module by the processing the file
10786                 # name to the last dot the previous 'do' tried to find.
10788                 do {
10790                         # Get the character the seek counter is currently set at.
10792                         $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10794                         # Append the character to the friendly name of the presentation module.
10796                         $presmodule_friendly = $presmodule_friendly . $presmodule_char;
10798                         # Increment the seek counter.
10800                         $presmodule_seek++;
10802                 } until ($presmodule_seek eq $presmodule_dot);
10804                 # Append the option to tbe list of available presentation modules.
10806                 $presmodule_list{$presmodule_count}{Filename} = $presmodule_friendly;
10808                 # Reset the following values.
10810                 $presmodule_seek        = 0;
10811                 $presmodule_length      = 0;
10812                 $presmodule_char        = "";
10813                 $presmodule_friendly    = "";
10814                 $presmodule_count++;
10816         }
10818         # Get the list of database modules available.
10820         my %dbmodule_list;
10821         my @dbmodule_directory;
10822         my $dbmodule;
10823         my $dbmodule_file               = "";
10824         my $dbmodule_char               = "";
10825         my $dbmodule_dot                = 0;
10826         my $dbmodule_firstdot           = 0;
10827         my $dbmodule_firstdotfound      = "";
10828         my $dbmodule_seek               = 0;
10829         my $dbmodule_length             = 0;
10830         my $dbmodule_count              = 0;
10831         my $dbmodule_friendly           = "";
10832         my $dbmodule_selectlist         = "";
10833         my $dbmodule_config             = $kiriwrite_config{"system_dbmodule"};
10835         # Open and get the list of presentation modules (perl modules) by filtering
10836         # out the 
10838         opendir(DATABASEDIR, "Modules/Database");
10839         @dbmodule_directory = grep /m*\.pm$/, readdir(DATABASEDIR);
10840         closedir(DATABASEDIR);
10842         # Process each presentation module and add them to the list of available
10843         # presentation modules.
10845         foreach $dbmodule_file (@dbmodule_directory){
10847                 # Get the length of the database module (perl module) filename.
10849                 $dbmodule_length = length($dbmodule_file);
10851                 # Get the friendly name of the Perl module (by getting rid of the
10852                 # .pm part of the filename).
10854                 do {
10856                         $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10858                         # Check if the current character is a dot and if it is then
10859                         # set the last dot found number to the current seek number.
10861                         if ($dbmodule_char eq "."){
10863                                 # Put the seek value as the last dot found number.
10865                                 $dbmodule_dot = $dbmodule_seek;
10867                         }
10869                         # Increment the seek counter.
10871                         $dbmodule_seek++;
10873                 } until ($dbmodule_seek eq $dbmodule_length);
10875                 # Reset the seek counter as it is going to be used again.
10877                 $dbmodule_seek = 0;
10879                 # Get the friendly name of the Perl module by the processing the file
10880                 # name to the last dot the previous 'do' tried to find.
10882                 do {
10884                         # Get the character the seek counter is currently set at.
10886                         $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10888                         # Append the character to the friendly name of the presentation module.
10890                         $dbmodule_friendly = $dbmodule_friendly . $dbmodule_char;
10892                         # Increment the seek counter.
10894                         $dbmodule_seek++;
10896                 } until ($dbmodule_seek eq $dbmodule_dot);
10898                 # Append the option to tbe list of available database modules.
10900                 $dbmodule_list{$dbmodule_count}{Filename} = $dbmodule_friendly;
10902                 # Reset the following values.
10904                 $dbmodule_seek  = 0;
10905                 $dbmodule_length        = 0;
10906                 $dbmodule_char          = "";
10907                 $dbmodule_friendly      = "";
10908                 $dbmodule_count++;
10910         }
10912         # Get the directory settings.
10914         my $directory_settings_database         = $kiriwrite_config{"directory_data_db"};
10915         my $directory_settings_output           = $kiriwrite_config{"directory_data_output"};
10916         my $directory_settings_imagesuri        = $kiriwrite_config{"directory_noncgi_images"};
10917         my $datetime_setting                    = $kiriwrite_config{"system_datetime"};
10919         my $database_server                     = $kiriwrite_config{"database_server"};
10920         my $database_port                       = $kiriwrite_config{"database_port"};
10921         my $database_protocol                   = $kiriwrite_config{"database_protocol"};
10922         my $database_sqldatabase                = $kiriwrite_config{"database_sqldatabase"};
10923         my $database_username                   = $kiriwrite_config{"database_username"};
10924         my $database_passwordhash               = $kiriwrite_config{"database_passwordhash"};
10925         my $database_password                   = $kiriwrite_config{"database_password"};
10926         my $database_prefix                     = $kiriwrite_config{"database_tableprefix"};
10928         # Print out a form for editing the settings.
10930         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{editsettings}, { Style => "pageheader" });
10931         $kiriwrite_presmodule->addlinebreak();
10932         $kiriwrite_presmodule->addlinebreak();
10933         $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{setting}->{warning});
10934         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{warningmessage});
10935         $kiriwrite_presmodule->addlinebreak();
10936         $kiriwrite_presmodule->addlinebreak();
10938         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
10939         $kiriwrite_presmodule->addhiddendata("mode", "settings");
10940         $kiriwrite_presmodule->addhiddendata("action", "edit");
10941         $kiriwrite_presmodule->addhiddendata("confirm", 1);
10943         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10945         $kiriwrite_presmodule->startheader();
10946         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10947         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10948         $kiriwrite_presmodule->endheader();
10950         $kiriwrite_presmodule->startrow();
10951         $kiriwrite_presmodule->addcell("tablecellheader");
10952         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10953         $kiriwrite_presmodule->endcell();
10954         $kiriwrite_presmodule->addcell("tablecellheader");
10955         $kiriwrite_presmodule->endcell();
10956         $kiriwrite_presmodule->endrow();
10958         $kiriwrite_presmodule->startrow();
10959         $kiriwrite_presmodule->addcell("tablecell1");
10960         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10961         $kiriwrite_presmodule->endcell();
10962         $kiriwrite_presmodule->addcell("tablecell2");
10963         $kiriwrite_presmodule->addinputbox("databasedir", { Size => 32, MaxLength => 64, Value => $directory_settings_database });
10964         $kiriwrite_presmodule->endcell();
10965         $kiriwrite_presmodule->endrow();
10967         $kiriwrite_presmodule->startrow();
10968         $kiriwrite_presmodule->addcell("tablecell1");
10969         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
10970         $kiriwrite_presmodule->endcell();
10971         $kiriwrite_presmodule->addcell("tablecell2");
10972         $kiriwrite_presmodule->addinputbox("outputdir", { Size => 32, MaxLength => 64, Value => $directory_settings_output });
10973         $kiriwrite_presmodule->endcell();
10974         $kiriwrite_presmodule->endrow();
10976         $kiriwrite_presmodule->startrow();
10977         $kiriwrite_presmodule->addcell("tablecell1");
10978         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
10979         $kiriwrite_presmodule->endcell();
10980         $kiriwrite_presmodule->addcell("tablecell2");
10981         $kiriwrite_presmodule->addinputbox("imagesuripath", { Size => 32, MaxLength => 64, Value => $directory_settings_imagesuri });
10982         $kiriwrite_presmodule->endcell();
10983         $kiriwrite_presmodule->endrow();
10985         $kiriwrite_presmodule->startrow();
10986         $kiriwrite_presmodule->addcell("tablecellheader");
10987         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
10988         $kiriwrite_presmodule->endcell();
10989         $kiriwrite_presmodule->addcell("tablecellheader");
10990         $kiriwrite_presmodule->endcell();
10991         $kiriwrite_presmodule->endrow();
10993         $kiriwrite_presmodule->startrow();
10994         $kiriwrite_presmodule->addcell("tablecell1");
10995         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
10996         $kiriwrite_presmodule->endcell();
10997         $kiriwrite_presmodule->addcell("tablecell2");
10998         $kiriwrite_presmodule->addinputbox("datetime", { Size => 32, MaxLength => 64, Value => $datetime_setting });
10999         $kiriwrite_presmodule->addlinebreak();
11000         $kiriwrite_presmodule->addlinebreak();
11001         $kiriwrite_presmodule->startbox("datalist");
11003         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleday});
11004         $kiriwrite_presmodule->addlinebreak();
11005         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleday});
11006         $kiriwrite_presmodule->addlinebreak();
11007         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlemonth});
11008         $kiriwrite_presmodule->addlinebreak();
11009         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublemonth});
11010         $kiriwrite_presmodule->addlinebreak();
11011         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleyear});
11012         $kiriwrite_presmodule->addlinebreak();
11013         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleyear});
11014         $kiriwrite_presmodule->addlinebreak();
11015         $kiriwrite_presmodule->addlinebreak();
11016         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlehour});
11017         $kiriwrite_presmodule->addlinebreak();
11018         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublehour});
11019         $kiriwrite_presmodule->addlinebreak();
11020         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleminute});
11021         $kiriwrite_presmodule->addlinebreak();
11022         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleminute});
11023         $kiriwrite_presmodule->addlinebreak();
11024         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlesecond});
11025         $kiriwrite_presmodule->addlinebreak();
11026         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublesecond});
11027         $kiriwrite_presmodule->addlinebreak();
11028         $kiriwrite_presmodule->addlinebreak();
11029         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{othercharacters});
11030         $kiriwrite_presmodule->endbox();
11031         $kiriwrite_presmodule->endcell();
11032         $kiriwrite_presmodule->endrow();
11034         $kiriwrite_presmodule->startrow();
11035         $kiriwrite_presmodule->addcell("tablecellheader");
11036         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
11037         $kiriwrite_presmodule->endcell();
11038         $kiriwrite_presmodule->addcell("tablecellheader");
11039         $kiriwrite_presmodule->endcell();
11040         $kiriwrite_presmodule->endrow();
11042         $kiriwrite_presmodule->startrow();
11043         $kiriwrite_presmodule->addcell("tablecell1");
11044         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
11045         $kiriwrite_presmodule->endcell();
11046         $kiriwrite_presmodule->addcell("tablecell2");
11048         $kiriwrite_presmodule->addselectbox("language");
11050         # Process the list of available languages.
11052         foreach $language (keys %language_list){
11054                 # Check if the language filename matches the filename in the configuration
11055                 # file.
11057                 if ($language_list{$language}{Filename} eq $language_config){
11059                         $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} , Selected => 1 });
11061                 } else {
11063                         $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} });
11065                 }
11067         }
11069         $kiriwrite_presmodule->endselectbox();
11071         $kiriwrite_presmodule->startrow();
11072         $kiriwrite_presmodule->addcell("tablecellheader");
11073         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
11074         $kiriwrite_presmodule->endcell();
11075         $kiriwrite_presmodule->addcell("tablecellheader");
11076         $kiriwrite_presmodule->endcell();
11077         $kiriwrite_presmodule->endrow();
11079         $kiriwrite_presmodule->startrow();
11080         $kiriwrite_presmodule->addcell("tablecell1");
11081         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
11082         $kiriwrite_presmodule->endcell();
11083         $kiriwrite_presmodule->addcell("tablecell2");
11085         $kiriwrite_presmodule->addselectbox("presmodule");
11087         # Process the list of available presentation modules.
11089         foreach $presmodule (keys %presmodule_list){
11091                 # Check if the presentation module fileanme matches the filename in the 
11092                 # configuration file.
11094                 if ($presmodule_list{$presmodule}{Filename} eq $presmodule_config){
11096                         $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} , Selected => 1 });
11098                 } else {
11100                         $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} });
11102                 }
11104         }
11106         $kiriwrite_presmodule->endselectbox();
11108         $kiriwrite_presmodule->endcell();
11109         $kiriwrite_presmodule->endrow();
11111         $kiriwrite_presmodule->startrow();
11112         $kiriwrite_presmodule->addcell("tablecell1");
11113         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
11114         $kiriwrite_presmodule->endcell();
11115         $kiriwrite_presmodule->addcell("tablecell2");
11117         # Process the list of available database modules.
11119         $kiriwrite_presmodule->addselectbox("dbmodule");
11121         foreach $dbmodule (keys %dbmodule_list){
11123                 # Check if the database module fileanme matches the filename in the 
11124                 # configuration file.
11126                 if ($dbmodule_list{$dbmodule}{Filename} eq $dbmodule_config){
11128                         $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} , Selected => 1 });
11130                 } else {
11132                         $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} });
11134                 }
11137         }
11139         $kiriwrite_presmodule->endselectbox();
11141         $kiriwrite_presmodule->endcell();
11142         $kiriwrite_presmodule->endrow();
11144         $kiriwrite_presmodule->startrow();
11145         $kiriwrite_presmodule->addcell("tablecell1");
11146         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseserver});
11147         $kiriwrite_presmodule->endcell();
11148         $kiriwrite_presmodule->addcell("tablecell2");
11149         $kiriwrite_presmodule->addinputbox("database_server", { Size => 32, MaxLength => 128, Value => $database_server });
11150         $kiriwrite_presmodule->endcell();
11151         $kiriwrite_presmodule->endrow();
11153         $kiriwrite_presmodule->startrow();
11154         $kiriwrite_presmodule->addcell("tablecell1");
11155         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseport});
11156         $kiriwrite_presmodule->endcell();
11157         $kiriwrite_presmodule->addcell("tablecell2");
11158         $kiriwrite_presmodule->addinputbox("database_port", { Size => 5, MaxLength => 5, Value => $database_port });
11159         $kiriwrite_presmodule->endcell();
11160         $kiriwrite_presmodule->endrow();
11162         $kiriwrite_presmodule->startrow();
11163         $kiriwrite_presmodule->addcell("tablecell1");
11164         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseprotocol});
11165         $kiriwrite_presmodule->endcell();
11166         $kiriwrite_presmodule->addcell("tablecell2");
11168         # Check if TCP is being used.
11170         $kiriwrite_presmodule->addselectbox("database_protocol");
11172         if ($database_protocol eq "tcp"){
11174                 # The TCP protocol is selected so have the TCP option selected.
11176                 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp", Selected => 1});
11178         } else {
11180                 # The TCP protocol is not selected.
11182                 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp"});
11184         } 
11186         # Check if UDP is being used.
11188         if ($database_protocol eq "udp"){
11190                 # The UDP protocol is selected so have the UDP option selected.
11192                 $kiriwrite_presmodule->addoption("UDP", { Value => "udp", Selected => 1});
11194         } else {
11196                 # The UDP protocol is not selected.
11198                 $kiriwrite_presmodule->addoption("UDP", { Value => "udp"});
11200         }
11202         $kiriwrite_presmodule->endselectbox();
11204         $kiriwrite_presmodule->endcell();
11205         $kiriwrite_presmodule->endrow();
11207         $kiriwrite_presmodule->startrow();
11208         $kiriwrite_presmodule->addcell("tablecell1");
11209         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasename});
11210         $kiriwrite_presmodule->endcell();
11211         $kiriwrite_presmodule->addcell("tablecell2");
11212         $kiriwrite_presmodule->addinputbox("database_sqldatabase", { Size => 32, MaxLength => 32, Value => $database_sqldatabase });
11213         $kiriwrite_presmodule->endcell();
11214         $kiriwrite_presmodule->endrow();
11216         $kiriwrite_presmodule->startrow();
11217         $kiriwrite_presmodule->addcell("tablecell1");
11218         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseusername});
11219         $kiriwrite_presmodule->endcell();
11220         $kiriwrite_presmodule->addcell("tablecell2");
11221         $kiriwrite_presmodule->addinputbox("database_username", { Size => 16, MaxLength => 16, Value => $database_username });
11222         $kiriwrite_presmodule->endcell();
11223         $kiriwrite_presmodule->endrow();
11225         $kiriwrite_presmodule->startrow();
11226         $kiriwrite_presmodule->addcell("tablecell1");
11227         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasepassword});
11228         $kiriwrite_presmodule->endcell();
11229         $kiriwrite_presmodule->addcell("tablecell2");
11230         $kiriwrite_presmodule->addinputbox("database_password", { Size => 16, MaxLength => 64, Password => 1 });
11231         $kiriwrite_presmodule->addtext(" ");
11232         $kiriwrite_presmodule->addcheckbox("database_password_keep", { OptionDescription => "Keep the current password", Checked => 1 });
11233         $kiriwrite_presmodule->endcell();
11234         $kiriwrite_presmodule->endrow();
11236         $kiriwrite_presmodule->startrow();
11237         $kiriwrite_presmodule->addcell("tablecell1");
11238         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{tableprefix});
11239         $kiriwrite_presmodule->endcell();
11240         $kiriwrite_presmodule->addcell("tablecell2");
11241         $kiriwrite_presmodule->addinputbox("database_tableprefix", { Size => 16, MaxLength => 16, Value => $database_prefix });
11242         $kiriwrite_presmodule->endcell();
11243         $kiriwrite_presmodule->endrow();
11245         $kiriwrite_presmodule->endtable();
11247         $kiriwrite_presmodule->addlinebreak();
11248         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{setting}->{changesettingsbutton});
11249         $kiriwrite_presmodule->addtext(" | ");
11250         $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
11251         $kiriwrite_presmodule->addtext(" | ");
11252         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
11254         $kiriwrite_presmodule->endform();
11256         return $kiriwrite_presmodule->grab();
11260 sub kiriwrite_settings_load{
11261 #################################################################################
11262 # kiriwrite_settings_load: Load the configuration settings into the global      #
11263 # variables.                                                                    #
11264 #                                                                               #
11265 # Usage:                                                                        #
11266 #                                                                               #
11267 # kiriwrite_settings_load();                                                    #
11268 #################################################################################
11270         # Load the required Perl modules.
11272         use XML::Simple qw(XMLin);
11273         my $xsl = XML::Simple->new();
11275         # Check if the Kiriwrite configuration file exists before using it and
11276         # return an critical error if it doesn't exist.
11278         my $kiriwrite_conf_exist = kiriwrite_fileexists("kiriwrite.xml");
11280         if ($kiriwrite_conf_exist eq 1){
11282                 # The configuration really does not exist so return an critical error.
11284                 kiriwrite_critical("configfilemissing");
11286         }
11288         # Check if the Kiriwrite configuration file has valid permission settings
11289         # before using it and return an critical error if it doesn't have the
11290         # valid permission settings.
11292         my $kiriwrite_conf_permissions = kiriwrite_filepermissions("kiriwrite.xml", 1, 0);
11294         if ($kiriwrite_conf_permissions eq 1){
11296                 # The permission settings for the Kiriwrite configuration file are
11297                 # invalid, so return an critical error.
11299                 kiriwrite_critical("configfileinvalidpermissions");
11301         }
11303         # Converts the XML file into meaningful data for later on in this subroutine.
11305         my $kiriwrite_conf_file = 'kiriwrite.xml';
11306         my $kiriwrite_conf_data = $xsl->XMLin($kiriwrite_conf_file, SuppressEmpty => 1);
11308         # Go and fetch the settings and place them into a hash (that is global).
11310         %kiriwrite_config = (
11312                 "directory_data_db"             => $kiriwrite_conf_data->{settings}->{directories}->{database},
11313                 "directory_data_output"         => $kiriwrite_conf_data->{settings}->{directories}->{output},
11314                 "directory_noncgi_images"       => $kiriwrite_conf_data->{settings}->{directories}->{images},
11316                 "system_language"               => $kiriwrite_conf_data->{settings}->{language}->{lang},
11317                 "system_presmodule"             => $kiriwrite_conf_data->{settings}->{system}->{presentation},
11318                 "system_dbmodule"               => $kiriwrite_conf_data->{settings}->{system}->{database},
11319                 "system_datetime"               => $kiriwrite_conf_data->{settings}->{system}->{datetime},
11321                 "database_server"               => $kiriwrite_conf_data->{settings}->{database}->{server},
11322                 "database_port"                 => $kiriwrite_conf_data->{settings}->{database}->{port},
11323                 "database_protocol"             => $kiriwrite_conf_data->{settings}->{database}->{protocol},
11324                 "database_sqldatabase"          => $kiriwrite_conf_data->{settings}->{database}->{database},
11325                 "database_username"             => $kiriwrite_conf_data->{settings}->{database}->{username},
11326                 "database_password"             => $kiriwrite_conf_data->{settings}->{database}->{password},
11327                 "database_tableprefix"          => $kiriwrite_conf_data->{settings}->{database}->{prefix}
11329         );
11331         # Do a validation check on all of the variables that were loaded into the global configuration hash.
11333         kiriwrite_variablecheck($kiriwrite_config{"directory_data_db"}, "maxlength", 64, 0);
11334         kiriwrite_variablecheck($kiriwrite_config{"directory_data_output"}, "maxlength", 64, 0);
11335         kiriwrite_variablecheck($kiriwrite_config{"directory_noncgi_images"}, "maxlength", 512, 0);
11336         kiriwrite_variablecheck($kiriwrite_config{"directory_data_template"}, "maxlength", 64, 0);
11338         my $kiriwrite_config_language_filename = kiriwrite_variablecheck($kiriwrite_config{"system_language"}, "language_filename", "", 1);
11339         my $kiriwrite_config_presmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_presmodule"}, "module", 0, 1);
11340         my $kiriwrite_config_dbmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_dbmodule"}, "module", 0, 1);
11342         # Check if the language filename is valid and return an critical error if
11343         # they aren't.
11345         if ($kiriwrite_config_language_filename eq 1){
11347                 # The language filename is blank so return an critical error.
11349                 kiriwrite_critical("languagefilenameblank");
11351         } elsif ($kiriwrite_config_language_filename eq 2){
11353                 # The language filename is invalid so return an critical error.
11355                 kiriwrite_critical("languagefilenameinvalid");
11357         }
11359         # Check if the presentation and database module names are valid and return a critical
11360         # error if they aren't.
11362         if ($kiriwrite_config_presmodule_filename eq 1){
11364                 # The presentation module filename given is blank so return an 
11365                 # critical error.
11367                 kiriwrite_critical("presmoduleblank");
11369         }
11371         if ($kiriwrite_config_presmodule_filename eq 2){
11373                 # The presentation module filename is invalid so return an
11374                 # critical error.
11376                 kiriwrite_critical("presmoduleinvalid");
11378         }
11380         if ($kiriwrite_config_dbmodule_filename eq 1){
11382                 # The database module filename given is blank so return an
11383                 # critical error.
11385                 kiriwrite_critical("dbmoduleblank");
11387         }
11389         if ($kiriwrite_config_dbmodule_filename eq 2){
11391                 # The database module filename given is invalid so return
11392                 # an critical error.
11394                 kiriwrite_critical("dbmoduleinvalid");
11396         }
11398         # Check if the language file does exist before loading it and return an critical error
11399         # if it does not exist.
11401         my $kiriwrite_config_language_fileexists = kiriwrite_fileexists("lang/" . $kiriwrite_config{"system_language"} . ".xml");
11403         if ($kiriwrite_config_language_fileexists eq 1){
11405                 # Language file does not exist so return an critical error.
11407                 kiriwrite_critical("languagefilemissing");
11409         }
11411         # Check if the language file has valid permission settings and return an critical error if
11412         # the language file has invalid permissions settings.
11414         my $kiriwrite_config_language_filepermissions = kiriwrite_filepermissions("lang/" . $kiriwrite_config{"system_language"} . ".xml", 1, 0);
11416         if ($kiriwrite_config_language_filepermissions eq 1){
11418                 # Language file contains invalid permissions so return an critical error.
11420                 kiriwrite_critical("languagefilepermissions");
11422         }
11424         # Load the language file.
11426         $kiriwrite_lang = $xsl->XMLin("lang/" . $kiriwrite_config{"system_language"} . ".xml", SuppressEmpty => 1);
11428         # Check if the presentation module does exist before loading it and return an critical error
11429         # if the presentation module does not exist.
11431         my $kiriwrite_config_presmodule_fileexists = kiriwrite_fileexists("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm");
11433         if ($kiriwrite_config_presmodule_fileexists eq 1){
11435                 # Presentation module does not exist so return an critical error.
11437                 kiriwrite_critical("presmodulemissing");
11439         }
11441         # Check if the presentation module does have the valid permission settings and return a
11442         # critical error if the presentation module contains invalid permission settings.
11444         my $kiriwrite_config_presmodule_permissions = kiriwrite_filepermissions("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm", 1, 0);
11446         if ($kiriwrite_config_presmodule_permissions eq 1){
11448                 # Presentation module contains invalid permissions so return an critical error.
11450                 kiriwrite_critical("presmoduleinvalidpermissions");
11452         }
11454         # Check if the database module does exist before loading it and return an critical error
11455         # if the database module does not exist.
11457         my $kiriwrite_config_dbmodule_fileexists = kiriwrite_fileexists("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm");
11459         if ($kiriwrite_config_dbmodule_fileexists eq 1){
11461                 # Database module does not exist so return an critical error.
11463                 kiriwrite_critical("dbmodulemissing");
11465         }
11467         # Check if the database module does have the valid permission settings and return an
11468         # critical error if the database module contains invalid permission settings.
11470         my $kiriwrite_config_dbmodule_permissions = kiriwrite_filepermissions("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm", 1, 0);
11472         if ($kiriwrite_config_dbmodule_permissions eq 1){
11474                 # Presentation module contains invalid permissions so return an critical error.
11476                 kiriwrite_critical("dbmoduleinvalidpermissions");
11478         }
11480         # Include the Modules directory.
11482         use lib "Modules/";
11484         # Load the presentation module.
11486         my $presmodulename = "Presentation::" . $kiriwrite_config{"system_presmodule"};
11487         ($presmodulename) = $presmodulename =~ m/^(.*)$/g;
11488         eval "use " . $presmodulename;
11489         $presmodulename = "Kiriwrite::Presentation::" . $kiriwrite_config{"system_presmodule"};
11490         $kiriwrite_presmodule = $presmodulename->new();
11492         # Load the database module.
11494         my $dbmodulename = "Database::" . $kiriwrite_config{"system_dbmodule"};
11495         ($dbmodulename) = $dbmodulename =~ m/^(.*)$/g;
11496         eval "use " . $dbmodulename;
11497         $dbmodulename = "Kiriwrite::Database::" . $kiriwrite_config{"system_dbmodule"};
11498         $kiriwrite_dbmodule = $dbmodulename->new();
11500         # Load the following settings to the database module.
11502         $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"} });
11504         return;
11508 sub kiriwrite_variablecheck{
11509 #################################################################################
11510 # kiriwrite_variablecheck: Checks the variables for any invalid characters.     #
11511 #                                                                               #
11512 # Usage:                                                                        #
11513 #                                                                               #
11514 # kiriwrite_variablecheck(variablename, type, length, noerror);                 #
11515 #                                                                               #
11516 # variablename  Specifies the variable to be checked.                           #
11517 # type          Specifies what type the variable is.                            #
11518 # option        Specifies the maximum/minimum length of the variable            #
11519 #               (if minlength/maxlength is used) or if the filename should be   #
11520 #               checked to see if it is blank.                                  #
11521 # noerror       Specifies if Kiriwrite should return an error or not on         #
11522 #               certain values.                                                 #
11523 #################################################################################
11525         # Get the values that were passed to the subroutine.
11527         my ($variable_data, $variable_type, $variable_option, $variable_noerror) = @_;
11529         if ($variable_type eq "numbers"){
11531                 # Check for numbers and return an error if there is anything else than numebrs.
11533                 my $variable_data_validated = $variable_data;   # Copy the variable_data to variable_data_validated.
11534                 $variable_data_validated =~ tr/0-9//d;          # Take away all of the numbers and from the variable. 
11535                                                                 # If it only contains numbers then it should be blank.
11537                 if ($variable_data_validated eq ""){
11538                         # The validated variable is blank. So continue to the end of this section where the return function should be.
11539                 } else {
11540                         # The variable is not blank, so check if the no error value is set
11541                         # to 1 or not.
11543                         if ($variable_noerror eq 1){
11545                                 # The validated variable is not blank and the noerror
11546                                 # value is set to 1. So return an value of 1.
11547                                 # (meaning that the data is invalid).
11549                                 return 1;
11551                         } elsif ($variable_noerror eq 0) {
11553                                 # The validated variable is not blank and the noerror
11554                                 # value is set to 0.
11556                                 kiriwrite_error("invalidvariable");
11558                         } else {
11560                                 # The variable noerror value is something else
11561                                 # pther than 1 or 0. So return an error.
11563                                 kiriwrite_error("invalidvariable");
11565                         }
11567                 }
11569                 return 0;
11571         } elsif ($variable_type eq "lettersnumbers"){
11573                 # Check for letters and numbers and return an error if there is anything else other
11574                 # than letters and numbers.
11576                 my $variable_data_validated = $variable_data;   # Copy the variable_data to variable_data_validated
11577                 $variable_data_validated =~ tr/a-zA-Z0-9.//d;
11578                 $variable_data_validated =~ s/\s//g;
11580                 if ($variable_data_validated eq ""){
11581                         # The validated variable is blank. So continue to the end of this section where the return function should be.
11582                 } else {
11583                         # The variable is not blank, so check if the no error value is set
11584                         # to 1 or not.
11586                         if ($variable_noerror eq 1){
11588                                 # The validated variable is not blank and the noerror
11589                                 # value is set to 1. So return an value of 1.
11590                                 # (meaning that the data is invalid).
11592                                 return 1;
11594                         } elsif ($variable_noerror eq 0) {
11596                                 # The validated variable is not blank and the noerror
11597                                 # value is set to 0.
11599                                 kiriwrite_error("invalidvariable");
11601                         } else {
11603                                 # The variable noerror value is something else
11604                                 # pther than 1 or 0. So return an error.
11606                                 kiriwrite_error("invalidvariable");
11608                         }
11610                 }
11612                 return 0;
11614         } elsif ($variable_type eq "maxlength"){
11615                 # Check for the length of the variable, return an error if it is longer than the length specified.
11617                 # Check if the variable_data string is blank, if it is then set the variable_data_length
11618                 # to '0'.
11620                 my $variable_data_length = 0;
11622                 if (!$variable_data){
11624                         # Set variable_data_length to '0'.
11625                         $variable_data_length = 0;
11627                 } else {
11629                         # Get the length of the variable recieved.
11630                         $variable_data_length = length($variable_data);
11632                 }
11636                 if ($variable_data_length > $variable_option){
11638                         # The variable length is longer than it should be so check if
11639                         # the no error value is set 1.
11641                         if ($variable_noerror eq 1){
11643                                 # The no error value is set to 1, so return an
11644                                 # value of 1 (meaning tha the variable is
11645                                 # too long to be used).
11647                                 return 1;
11649                         } elsif ($variable_noerror eq 0){
11651                                 # The no error value is set to 0, so return
11652                                 # an error.
11654                                 kiriwrite_error("variabletoolong");
11656                         } else {
11658                                 # The no error value is something else other
11659                                 # than 0 or 1, so return an error.
11661                                 kiriwrite_error("variabletoolong");
11663                         }
11665                 } else {
11667                         # The variable length is exactly or shorter than specified, so continue to end of this section where
11668                         # the return function should be.
11670                 }
11672                 return 0;
11674         } elsif ($variable_type eq "blank"){
11675                 # Check if the variable is blank and if it is blank, then return an error.
11677                 if (!$variable_data){
11679                         # The variable data really is blank, so check what
11680                         # the no error value is set.
11682                         if ($variable_noerror eq 1){
11684                                 # The no error value is set to 1, so return
11685                                 # a value of 1 (saying that the variable was
11686                                 # blank).
11688                                 return 1;
11690                         } elsif ($variable_noerror eq 0){
11692                                 # The no error value is set to 0, so return
11693                                 # an error.
11695                                 kiriwrite_error("blankvariable");
11697                         } else {
11699                                 # The no error value is something else other
11700                                 # than 0 or 1, so return an error.
11702                                 kiriwrite_error("invalidvariable");
11704                         }
11706                 }
11708                 return 0;
11710         } elsif ($variable_type eq "filename"){
11711                 # Check for letters and numbers, if anything else than letters and numbers is there (including spaces) return
11712                 # an error.
11714                 # Check if the filename passed is blank, if it is then return with an error.
11716                 if ($variable_data eq ""){
11718                         # The filename specified is blank, so check what the
11719                         # noerror value is set.
11721                         if ($variable_noerror eq 1){
11723                                 # The no error value is set to 1 so return
11724                                 # a value of 1 (meaning that the filename
11725                                 # was blank).
11727                                 return 1;
11729                         } elsif ($variable_noerror eq 0){
11731                                 # The no error value is set to 1 so return
11732                                 # an error.
11734                                 kiriwrite_error("blankfilename");
11736                         } else {
11738                                 # The no error value is something else other
11739                                 # than 0 or 1, so return an error.
11741                                 kiriwrite_error("invalidvariable");
11743                         }
11745                 } else {
11748                 }
11750                 my $variable_data_validated = $variable_data;
11751                 $variable_data_validated =~ tr/a-zA-Z0-9\.//d;
11753                 # Check if the validated data variable is blank, if it is 
11754                 # then continue to the end of this section where the return 
11755                 # function should be, otherwise return an error.
11757                 if ($variable_data_validated eq ""){
11759                         # The validated data variable is blank, meaning that 
11760                         # it only contained letters and numbers.
11762                 } else {
11764                         # The validated data variable is not blank, meaning 
11765                         # that it contains something else, so return an error
11766                         # (or a value).
11768                         if ($variable_noerror eq 1){
11770                                 # The no error value is set to 1 so return
11771                                 # an value of 2. (meaning that the filename
11772                                 # is invalid).
11775                                 return 2;
11777                         } elsif ($variable_noerror eq 0){
11779                                 # The no error value is set to 0 so return
11780                                 # an error.
11782                                 kiriwrite_error("invalidfilename");
11784                         } else {
11786                                 # The no error value is something else other
11787                                 # than 0 or 1 so return an error.
11789                                 kiriwrite_error("invalidvariable");
11791                         }
11793                 }
11795                 return 0;
11797         } elsif ($variable_type eq "filenameindir"){
11798                 # Check if the filename is in the directory and return an
11799                 # error if it isn't.
11801                 if ($variable_data eq ""){
11803                         # The filename specified is blank, so check what the
11804                         # noerror value is set.
11806                         if ($variable_noerror eq 1){
11808                                 # The no error value is set to 1 so return
11809                                 # a value of 1 (meaning that the filename
11810                                 # was blank).
11812                                 return 1;
11814                         } elsif ($variable_noerror eq 0){
11816                                 # The no error value is set to 1 so return
11817                                 # an error.
11819                                 kiriwrite_error("blankfilename");
11821                         } else {
11823                                 # The no error value is something else other
11824                                 # than 0 or 1, so return an error.
11826                                 kiriwrite_error("invalidvariable");
11828                         }
11830                 } else {
11833                 }
11835                 # Set the following variables for later on.
11837                 my $variable_data_length = 0;
11838                 my $variable_data_char = "";
11839                 my $variable_data_validated = "";
11840                 my $variable_data_seek = 0;
11841                 my $variable_database_list = "";
11842                 my $variable_database_listcurrent = "";
11843                 my $variable_data_firstlevel = 1;
11845                 # Get the length of the variable recieved.
11847                 $variable_data_length = length($variable_data);
11849                 # Check if the database filename contains the directory command
11850                 # for up a directory level and if it is, return an error
11851                 # or return with a number.
11853                 do {
11855                         # Get a character from the filename passed to this subroutine.
11857                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
11859                         # Check if the current character is the forward slash character.
11861                         if ($variable_data_char eq "/"){
11863                                 # Check if the current directory is blank (and on the first level), or if the
11864                                 # current directory contains two dots or one dot, if it does return an error.
11866                                 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
11868                                         # Check if the noerror value is set to 1, if it is return an
11869                                         # number, else return an proper error.
11871                                         if ($variable_noerror eq 1){
11873                                                 # Page filename contains invalid characters and
11874                                                 # the no error value is set to 1 so return a 
11875                                                 # value of 2 (meaning that the page filename
11876                                                 # is invalid).
11878                                                 return 2;
11880                                         } elsif ($variable_noerror eq 0) {
11882                                                 # Page filename contains invalid characters and
11883                                                 # the no error value is set to 0 so return an
11884                                                 # error.
11886                                                 kiriwrite_error("invalidfilename");
11888                                         } else {
11890                                                 # The no error value is something else other
11891                                                 # than 0 or 1 so return an error.
11893                                                 kiriwrite_error("invalidvariable");
11895                                         }
11897                                 }
11899                                 # Append the forward slash, clear the current directory name and set
11900                                 # the first directory level value to 0.
11902                                 $variable_database_list = $variable_database_list . $variable_data_char;
11903                                 $variable_database_listcurrent = "";
11904                                 $variable_data_firstlevel = 0;
11906                         } else {
11908                                 # Append the current character to the directory name and to the current
11909                                 # directory name.
11911                                 $variable_database_list = $variable_database_list . $variable_data_char;
11912                                 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
11914                         }
11916                         # Increment the seek counter.
11918                         $variable_data_seek++;
11920                 } until ($variable_data_seek eq $variable_data_length);
11922                 return 0;
11924         } elsif ($variable_type eq "datetime"){
11925                 # Check if the date and time setting format is valid.
11927                 if ($variable_data eq ""){
11929                         if ($variable_noerror eq 1){
11931                                 # The no error value is set to 1 so return
11932                                 # a value of 1 (meaning that the date and
11933                                 # time format was blank).
11935                                 return 1;
11937                         } elsif ($variable_noerror eq 0){
11939                                 # The no error value is set to 1 so return
11940                                 # an error.
11942                                 kiriwrite_error("blankdatetimeformat");
11944                         } else {
11946                                 # The no error value is something else other
11947                                 # than 0 or 1, so return an error.
11949                                 kiriwrite_error("invalidvariable");
11951                         }
11953                 }
11955                 my $variable_data_validated = $variable_data;
11956                 $variable_data_validated =~ tr|dDmMyYhms/():[ ]||d;
11958                 if ($variable_data_validated eq ""){
11960                         # The date and time format is valid. So
11961                         # skip this bit.
11963                 } else {
11965                         # The validated data variable is not blank, meaning 
11966                         # that it contains something else, so return an error
11967                         # (or a value).
11969                         if ($variable_noerror eq 1){
11971                                 # The no error value is set to 1 so return
11972                                 # an value of 2. (meaning that the date and
11973                                 # time format was invalid).
11975                                 return 2;
11977                         } elsif ($variable_noerror eq 0){
11979                                 # The no error value is set to 0 so return
11980                                 # an error.
11982                                 kiriwrite_error("invaliddatetimeformat");
11984                         } else {
11986                                 # The no error value is something else other
11987                                 # than 0 or 1 so return an error.
11989                                 kiriwrite_error("invalidvariable");
11991                         }
11993                 }
11995                 return 0;
11997         } elsif ($variable_type eq "directory"){
11998                 # Check if the directory only contains letters and numbers and
11999                 # return an error if anything else appears.
12001                 my $variable_data_validated = $variable_data;
12002                 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12004                 if ($variable_data eq ""){
12006                         if ($variable_noerror eq 1){
12008                                 # The no error value is set to 1 so return
12009                                 # a value of 1 (meaning that the directory
12010                                 # name was blank).
12012                                 return 1;
12014                         } elsif ($variable_noerror eq 0){
12016                                 # The no error value is set to 1 so return
12017                                 # an error.
12019                                 kiriwrite_error("blankdirectory");
12021                         } else {
12023                                 # The no error value is something else other
12024                                 # than 0 or 1, so return an error.
12026                                 kiriwrite_error("invalidvariable");
12028                         }
12030                 }
12032                 if ($variable_data_validated eq ""){
12034                         # The validated data variable is blank, meaning that
12035                         # it only contains letters and numbers.
12037                 } else {
12039                         # The validated data variable is not blank, meaning 
12040                         # that it contains something else, so return an error
12041                         # (or a value).
12043                         if ($variable_noerror eq 1){
12045                                 # The no error value is set to 1 so return
12046                                 # an value of 2. (meaning that the directory
12047                                 # name is invalid).
12049                                 return 2;
12051                         } elsif ($variable_noerror eq 0){
12053                                 # The no error value is set to 0 so return
12054                                 # an error.
12056                                 kiriwrite_error("invaliddirectory");
12058                         } else {
12060                                 # The no error value is something else other
12061                                 # than 0 or 1 so return an error.
12063                                 kiriwrite_error("invalidvariable");
12065                         }
12067                 }
12069                 return 0;
12071         } elsif ($variable_type eq "language_filename"){
12073                 # The variable type is a language filename type.
12074                 # Check if the language file name is blank and 
12075                 # if it is then return an error (or value).
12077                 if ($variable_data eq ""){
12079                         # The language filename is blank so check the
12080                         # no error value and return an error (or value).
12082                         if ($variable_noerror eq 1){
12084                                 # Language filename is blank and the no error value
12085                                 # is set as 1, so return a value of 1 (saying that
12086                                 # the language filename is blank).
12088                                 return 1;
12090                         } elsif ($variable_noerror eq 0) {
12092                                 # Language filename is blank and the no error value
12093                                 # is not set as 1, so return an error.
12095                                 kiriwrite_critical("languagefilenameblank");
12097                         } else {
12099                                 # The noerror value is something else other
12100                                 # than 0 or 1 so return an error.
12102                                 kiriwrite_error("invalidvariable");
12104                         }
12106                 }
12108                 # Set the following variables for later on.
12110                 my $variable_data_length = 0;
12111                 my $variable_data_char = "";
12112                 my $variable_data_seek = 0;
12114                 # Get the length of the language file name.
12116                 $variable_data_length = length($variable_data);
12118                 do {
12120                         # Get a character from the language filename passed to this 
12121                         # subroutine and the character the seek counter value is set
12122                         # to.
12124                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12126                         # Check if the language filename contains a forward slash or a dot, 
12127                         # if the selected character is a forward slash then return an error
12128                         # (or value).
12130                         if ($variable_data_char eq "/" || $variable_data_char eq "."){
12132                                 # The language filename contains a forward slash or
12133                                 # a dot so depending on the no error value, return
12134                                 # an error or a value.
12136                                 if ($variable_noerror eq 1){
12138                                         # Language filename contains a forward slash or a dot
12139                                         # and the no error value has been set to 1, so return 
12140                                         # an value of 2 (saying that the language file name is 
12141                                         # invalid).
12143                                         return 2;
12145                                 } elsif ($variable_noerror eq 0) {
12147                                         # Language filename contains a forward slash and the no
12148                                         # error value has not been set to 1, so return an error.
12150                                         kiriwrite_critical("languagefilenameinvalid");
12152                                 } else {
12154                                         # The noerror value is something else other than
12155                                         # 1 or 0 so return an error.
12157                                         kiriwrite_error("invalidvariable");
12159                                 }
12161                         }
12163                         # Increment the seek counter.
12165                         $variable_data_seek++;
12167                 } until ($variable_data_seek eq $variable_data_length);
12169                 return 0;
12171         } elsif ($variable_type eq "pagesetting"){
12173                 # The variable type is a page setting, so check if the page
12174                 # setting has one of the valid options.
12176                 if ($variable_data eq 0 || $variable_data eq 1 || $variable_data eq 2 || $variable_data eq 3){
12178                         # The variable is one of the options above, so continue
12179                         # to the end of this section.
12181                 } else {
12183                         # The variable is not one of the options above, so check
12184                         # and see if a error or a value should be returned.
12186                         if ($variable_noerror eq 1){
12188                                 # The page setting is invalid and the no error
12189                                 # value is set 1, so return a value of 1
12190                                 # (saying that the page setting value is
12191                                 # invalid).
12193                                 return 1;
12195                         } elsif ($variable_noerror eq 0) {
12197                                 # Page setting is invalid and the no error value
12198                                 # is not 1, so return an error.
12200                                 kiriwrite_error("invalidvariable");
12202                         } else {
12204                                 # The no error value is something else other
12205                                 # than 0 or 1 so return an error.
12207                                 kiriwrite_error("invalidvariable");
12209                         }
12211                 }
12213                 return 0;
12215         } elsif ($variable_type eq "page_filename"){
12216          
12217                 # The variable type is a page filename type. Check
12218                 # if the data is empty and if it is then return an
12219                 # error (or value).
12221                 if ($variable_data eq ""){
12223                         # The filename is blank so check the no error
12224                         # value and depending on it return an value
12225                         # or an error.
12227                         if ($variable_noerror eq 1){
12229                                 # Page filename is blank and the no error value
12230                                 # is set as 1, so return a value of 1 (saying
12231                                 # the filename is blank).
12233                                 return 1;
12235                         } elsif ($variable_noerror eq 0) {
12237                                 # Page filename is blank and the no error value
12238                                 # is not 1, so return an error.
12240                                 kiriwrite_error("emptypagefilename");
12242                         } else {
12244                                 # The no error value is something else other
12245                                 # than 0 or 1 so return an error.
12247                                 kiriwrite_error("invalidvariable");
12249                         }
12250                 }
12252                 # Set the following variables for later on.
12255                 my $variable_data_length = 0;
12256                 my $variable_data_slash = 0;
12257                 my $variable_data_char = "";
12258                 my $variable_data_validated = "";
12259                 my $variable_data_seek = 0;
12260                 my $variable_database_list = "";
12261                 my $variable_database_listcurrent = "";
12262                 my $variable_data_firstlevel = 1;
12264                 # Get the length of the filename.
12266                 $variable_data_length = length($variable_data);
12268                 # Check that only valid characters should be appearing in
12269                 # the filename.
12271                 $variable_data_validated = $variable_data;
12272                 $variable_data_validated =~ tr|a-zA-Z0-9\.\/\-_||d;
12274                 if ($variable_data_validated ne ""){
12276                         # The validated variable is not blank, meaning the
12277                         # variable contains invalid characters, so return
12278                         # an error.
12280                         if ($variable_noerror eq 1){
12282                                 # Page filename contains invalid characters and
12283                                 # the no error value is set to 1 so return a 
12284                                 # value of 2 (meaning that the page filename
12285                                 # is invalid).
12287                                 return 2;
12289                         } elsif ($variable_noerror eq 0) {
12291                                 # Page filename contains invalid characters and
12292                                 # the no error value is set to 0 so return an
12293                                 # error.
12295                                 kiriwrite_error("invalidfilename");
12297                         } else {
12299                                 # The no error value is something else other
12300                                 # than 0 or 1 so return an error.
12302                                 kiriwrite_error("invalidvariable");
12304                         }
12306                 }
12308                 # Check if the page filename contains the directory command
12309                 # for up a directory level and if it is, return an error
12310                 # or return with a number.
12312                 do {
12314                         # Get a character from the filename passed to this subroutine.
12316                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12318                         # Check if the current character is the forward slash character.
12320                         if ($variable_data_char eq "/"){
12322                                 # Check if the current directory is blank (and on the first level), or if the
12323                                 # current directory contains two dots or one dot, if it does return an error.
12325                                 $variable_data_slash = 1;
12327                                 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
12329                                         # Check if the noerror value is set to 1, if it is return an
12330                                         # number, else return an proper error.
12332                                         if ($variable_noerror eq 1){
12334                                                 # Page filename contains invalid characters and
12335                                                 # the no error value is set to 1 so return a 
12336                                                 # value of 2 (meaning that the page filename
12337                                                 # is invalid).
12339                                                 return 2;
12341                                         } elsif ($variable_noerror eq 0) {
12343                                                 # Page filename contains invalid characters and
12344                                                 # the no error value is set to 0 so return an
12345                                                 # error.
12347                                                 kiriwrite_error("invalidfilename");
12349                                         } else {
12351                                                 # The no error value is something else other
12352                                                 # than 0 or 1 so return an error.
12354                                                 kiriwrite_error("invalidvariable");
12356                                         }
12358                                 }
12360                                 # Append the forward slash, clear the current directory name and set
12361                                 # the first directory level value to 0.
12363                                 $variable_database_list = $variable_database_list . $variable_data_char;
12364                                 $variable_database_listcurrent = "";
12365                                 $variable_data_firstlevel = 0;
12367                         } else {
12369                                 # Append the current character to the directory name and to the current
12370                                 # directory name.
12372                                 $variable_data_slash = 0;
12374                                 $variable_database_list = $variable_database_list . $variable_data_char;
12375                                 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
12377                         }
12379                         # Increment the seek counter.
12381                         $variable_data_seek++;
12383                 } until ($variable_data_seek eq $variable_data_length);
12385                 # Check if the last character is a slash and return an
12386                 # error if it is.
12388                 if ($variable_data_slash eq 1){
12390                         if ($variable_noerror eq 1){
12392                                 # Last character is a slash and the no error 
12393                                 # value is set to 1 so return a value of 2 
12394                                 # (meaning that the page filename is invalid).
12396                                 return 2;
12398                         } elsif ($variable_noerror eq 0) {
12400                                 # Page filename contains a slash for the last
12401                                 # character and the no error value is set to 0 
12402                                 # so return an error.
12404                                 kiriwrite_error("invalidfilename");
12406                         } else {
12408                                 # The no error value is something else other
12409                                 # than 0 or 1 so return an error.
12411                                 kiriwrite_error("invalidvariable");
12413                         }
12415                 }
12417                 return 0;
12419         } elsif ($variable_type eq "module"){
12421                 # The variable type is a presentation module filename.
12423                 # Check if the variable_data is blank and if it is
12424                 # return an error.
12426                 if ($variable_data eq ""){
12428                         # The presentation module is blank so check if an error
12429                         # value should be returned or a number should be
12430                         # returned.
12432                         if ($variable_noerror eq 1){
12434                                 # Module name is blank and the no error value 
12435                                 # is set to 1 so return a value of 2 (meaning 
12436                                 # that the page filename is blank).
12438                                 return 1;
12440                         } elsif ($variable_noerror eq 0) {
12442                                 # Module name contains is blank and the no error 
12443                                 # value is set to 0 so return an error.
12445                                 kiriwrite_critical("moduleblank");
12447                         } else {
12449                                 # The no error value is something else other
12450                                 # than 0 or 1 so return an error.
12452                                 kiriwrite_critical("invalidvalue");
12454                         }
12456                 } else {
12458                 }
12460                 my $variable_data_validated = $variable_data;
12461                 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12463                 if ($variable_data_validated eq ""){
12465                 } else {
12467                         if ($variable_noerror eq 1){
12469                                 # Module name contains invalid characters and
12470                                 # the no error value is set to 1 so return a 
12471                                 # value of 2 (meaning that the page filename
12472                                 # is invalid).
12474                                 return 2;
12476                         } elsif ($variable_noerror eq 0) {
12478                                 # Module name contains invalid characters and
12479                                 # the no error value is set to 0 so return an
12480                                 # error.
12482                                 kiriwrite_critical("moduleinvalid");
12484                         } else {
12486                                 # The no error value is something else other
12487                                 # than 0 or 1 so return an error.
12489                                 kiriwrite_error("invalidvalue");
12491                         }
12493                 }
12495                 return 0;
12497         } elsif ($variable_type eq "utf8"){
12499                 # The variable type is a UTF8 string.
12501                 if (!$variable_data){
12503                         $variable_data = "";
12505                 }
12507                 # Check if the string is a valid UTF8 string.
12509                 if ($variable_data =~ m/^(
12510                         [\x09\x0A\x0D\x20-\x7E]              # ASCII
12511                         | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
12512                         |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
12513                         | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
12514                         |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
12515                         |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
12516                         | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
12517                         |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
12518                 )*$/x){
12520                         # The UTF-8 string is valid.
12522                 } else {
12524                         # The UTF-8 string is not valid, check if the no error
12525                         # value is set to 1 and return an error if it isn't.
12527                         if ($variable_noerror eq 1){
12529                                 # The no error value has been set to 1, so return
12530                                 # a value of 1 (meaning that the UTF-8 string is
12531                                 # invalid).
12533                                 return 1; 
12535                         } elsif ($variable_noerror eq 0) {
12537                                 # The no error value has been set to 0, so return
12538                                 # an error.
12540                                 kiriwrite_error("invalidutf8");
12542                         } else {
12544                                 # The no error value is something else other than 0
12545                                 # or 1, so return an error.
12547                                 kiriwrite_error("invalidoption");
12549                         }
12551                 }
12553                 return 0;
12555         } elsif ($variable_type eq "serverprotocol"){
12557                 # Check if the server protocol is TCP or UDP and return
12558                 # an error if it isn't.
12560                 if ($variable_data ne "tcp" && $variable_data ne "udp"){
12562                         # The protocol given is not valid, check if the no
12563                         # error value is set to 1 and return an error if it isn't.
12565                         if ($variable_noerror eq 1){
12567                                 # The no error value has been set to 1, so return a
12568                                 # value of 1 (meaning that the server protocol is
12569                                 # invalid).
12571                                 return 1;
12573                         } elsif ($variable_noerror eq 0){
12575                                 # The no error value has been set to 0, so return
12576                                 # an error.
12578                                 kiriwrite_error("serverprotocolinvalid");
12580                         } else {
12582                                 # The no error value is something else other than 0
12583                                 # or 1, so return an error.
12585                                 kiriwrite_error("invalidoption");
12587                         }
12589                 }
12591                 return 0;
12593         } elsif ($variable_type eq "port"){
12595                 # Check if the port number given is less than 0 or more than 65535
12596                 # and return an error if it is.
12598                 if ($variable_data < 0 || $variable_data > 65535){
12600                         # The port number is less than 0 and more than 65535 so
12601                         # check if the no error value is set to 1 and return an
12602                         # error if it isn't.
12604                         if ($variable_noerror eq 1){
12606                                 # The no error value has been set to 1, so return a
12607                                 # value of 1 (meaning that the port number is invalid).
12609                                 return 1;
12611                         } elsif ($variable_noerror eq 0){
12613                                 # The no error value has been set to 0, so return
12614                                 # an error.
12616                                 kiriwrite_error("serverportnumberinvalid");
12618                         } else {
12620                                 # The no error value is something else other than 0
12621                                 # or 1, so return an error.
12623                                 kiriwrite_error("invalidoption");
12625                         }
12627                 }
12629                 return 0;
12631         }
12633         # Another type than the valid ones above has been specified so return an error specifying an invalid option.
12634         kiriwrite_error("invalidoption");
12638 sub kiriwrite_output_header{
12639 #################################################################################
12640 # kiriwrite_output_header: Outputs the header to the browser/stdout/console.    #
12641 #                                                                               #
12642 # Usage:                                                                        #
12643 #                                                                               #
12644 # kiriwrite_output_header(mimetype);                                            #
12645 #                                                                               #
12646 # mimetype      Specifies the mime type of the header.                          #
12647 #################################################################################
12649         # Print a header saying that the page expires immediately since the
12650         # date is set in the past.
12652         #print "Expires: Sunday, 01-Jan-06 00:00:00 GMT\n";
12653         #print "Content-Type: text/html; charset=utf-8\n";
12654         #print header();
12655         print header(-Expires=>'Sunday, 01-Jan-06 00:00:00 GMT', -charset=>'utf-8');
12656         return;
12659 sub kiriwrite_processfilename{
12660 #################################################################################
12661 # kiriwrite_processfilename: Processes a name and turns it into a filename that #
12662 # can be used by Kiriwrite.                                                     #
12663 #                                                                               #
12664 # Usage:                                                                        #
12665 #                                                                               #
12666 # kiriwrite_processfilename(text);                                              #
12667 #                                                                               #
12668 # text          Specifies the text to be used in the process for creating a new #
12669 #               filename.                                                       #
12670 #################################################################################
12672         # Get the values that have been passed to the subroutine.
12674         my ($process_text) = @_;
12676         # Define some variables that will be used later on.
12678         my $processed_stageone  = "";
12679         my $processed_stagetwo  = "";
12680         my $processed_length    = "";
12681         my $processed_char      = "";
12682         my $processed_seek      = 0;
12683         my $processed_filename  = "";
12685         # Set the first stage value of the processed filename to the
12686         # process filename and then filter it out to only contain
12687         # numbers and letters (no spaces) and then convert the
12688         # capitals to small letters.
12690         $processed_stageone = $process_text;
12691         $processed_stageone =~ tr#a-zA-Z0-9##cd;
12692         $processed_stageone =~ tr/A-Z/a-z/;
12694         # Now set the second stage value of the processed filename
12695         # to the first stage value of the processed filename and
12696         # then limit the filename down to 32 characters.
12698         $processed_stagetwo = $processed_stageone;
12699         $processed_length = length($processed_stagetwo);
12701         # Process the second stage filename into the final 
12702         # filename and do so until the seek counter is 32
12703         # or reaches the length of the second stage filename.
12705         do {
12707                 # Get the character that is the seek counter
12708                 # is set at.
12710                 $processed_char = substr($processed_stagetwo, $processed_seek, 1);
12712                 # Append to the final processed filename.
12714                 $processed_filename = $processed_filename . $processed_char;
12716                 # Increment the seek counter.
12718                 $processed_seek++;
12720         } until ($processed_seek eq 32 || $processed_seek eq $processed_length);
12722         return $processed_filename;
12726 sub kiriwrite_language{
12727 #################################################################################
12728 # kiriwrite_language: Process language strings that need certain text inserted. #
12729 #                                                                               #
12730 # Usage:                                                                        #
12731 #                                                                               #
12732 # kiriwrite_language(string, [text, text, ...]);                                #
12733 #                                                                               #
12734 # string        Specifies the string to process.                                #
12735 # text          Specifies the text to pass to the string (can be repeated many  #
12736 #               times).                                                         #
12737 #################################################################################
12739         my $string = shift;
12740         my $item;
12742         foreach $item (@_){
12744                 $string =~ s/%s/$item/;
12746         }
12748         return $string;
12752 sub kiriwrite_error{
12753 #################################################################################
12754 # kiriwrite_error: Prints out an error message.                                 #
12755 #                                                                               #
12756 # Usage:                                                                        #
12757 #                                                                               #
12758 # kiriwrite_error(errortype, errorext);                                         #
12759 #                                                                               #
12760 # errortype     Specifies the type of error that occured.                       #
12761 # errorext      Specifies the extended error information.                       #
12762 #################################################################################
12764         # Get the error type from the subroutine.
12766         my ($error_type, $error_extended) = @_;
12768         # Disconnect from the database server.
12770         if ($kiriwrite_dbmodule){
12771                 $kiriwrite_dbmodule->disconnect();
12772         }
12774         # Load the list of error messages.
12776         my ($kiriwrite_error, %kiriwrite_error);
12778         %kiriwrite_error = (
12780                 # Catch all error message.
12781                 "generic"                       => $kiriwrite_lang->{error}->{generic},
12783                 # Standard error messages.
12784                 "blankfilename"                 => $kiriwrite_lang->{error}->{blankfilename},
12785                 "blankvariable"                 => $kiriwrite_lang->{error}->{blankvariable},
12786                 "fileexists"                    => $kiriwrite_lang->{error}->{fileexists},
12787                 "internalerror"                 => $kiriwrite_lang->{error}->{internalerror},
12788                 "invalidoption"                 => $kiriwrite_lang->{error}->{invalidoption},
12789                 "invalidaction"                 => $kiriwrite_lang->{error}->{invalidaction},
12790                 "invalidfilename"               => $kiriwrite_lang->{error}->{invalidfilename},
12791                 "invalidmode"                   => $kiriwrite_lang->{error}->{invalidmode},
12792                 "invalidutf8"                   => $kiriwrite_lang->{error}->{invalidutf8},
12793                 "invalidvariable"               => $kiriwrite_lang->{error}->{invalidvariable},
12794                 "variabletoolong"               => $kiriwrite_lang->{error}->{variabletoolong},
12796                 # Specific error messages.
12797                 "blankcompiletype"              => $kiriwrite_lang->{error}->{blankcompiletype},
12798                 "blankdatabasepageadd"          => $kiriwrite_lang->{error}->{blankdatabasepageadd},
12799                 "blankdirectory"                => $kiriwrite_lang->{error}->{blankdirectory},
12800                 "blankfindfilter"               => $kiriwrite_lang->{error}->{blankfindfilter},
12801                 "blankdatetimeformat"           => $kiriwrite_lang->{error}->{blankdatetimeformat},
12802                 "databaseconnectionerror"       => $kiriwrite_lang->{error}->{databaseconnectionerror},
12803                 "databasecategoriestoolong"     => $kiriwrite_lang->{error}->{databasecategoriestoolong},
12804                 "databasecopysame"              => $kiriwrite_lang->{error}->{databasecopysame},
12805                 "databasealreadyexists"         => $kiriwrite_lang->{error}->{databasealreadyexists},
12806                 "datadirectorymissing"          => $kiriwrite_lang->{error}->{datadirectorymissing},
12807                 "datadirectoryinvalidpermissions"       => $kiriwrite_lang->{error}->{datadirectoryinvalidpermissions},
12808                 "databasedescriptiontoolong"    => $kiriwrite_lang->{error}->{databasedescriptiontoolong},
12809                 "databasefilenameinvalid"       => $kiriwrite_lang->{error}->{databasefilenameinvalid},
12810                 "databasefilenametoolong"       => $kiriwrite_lang->{error}->{databasefilenametoolong},
12811                 "databaseerror" => $kiriwrite_lang->{error}->{databaseerror},
12812                 "databaseinvalidpermissions"    => $kiriwrite_lang->{error}->{databaseinvalidpermissions},
12813                 "databasenameinvalid"           => $kiriwrite_lang->{error}->{databasenameinvalid},
12814                 "databasenametoolong"           => $kiriwrite_lang->{error}->{databasenametoolong},
12815                 "databasenameblank"             => $kiriwrite_lang->{error}->{databasenameblank},
12816                 "databasemissingfile"           => $kiriwrite_lang->{error}->{databasemissingfile},
12817                 "databasemovemissingfile"       => $kiriwrite_lang->{error}->{databasemovemissingfile},
12818                 "databasenorename"              => $kiriwrite_lang->{error}->{databasenorename},
12819                 "databasemovesame"              => $kiriwrite_lang->{error}->{databasemovesame},
12820                 "dbmoduleblank"                 => $kiriwrite_lang->{error}->{dbmoduleblank},
12821                 "dbmoduleinvalid"               => $kiriwrite_lang->{error}->{dbmoduleinvalid},
12822                 "dbdirectoryblank"              => $kiriwrite_lang->{error}->{dbdirectoryblank},
12823                 "dbdirectoryinvalid"            => $kiriwrite_lang->{error}->{dbdirectoryinvalid},
12824                 "dbmodulemissing"               => $kiriwrite_lang->{error}->{dbmodulemissing},
12825                 "filtersdatabasenotcreated"     => $kiriwrite_lang->{error}->{filtersdatabasenotcreated},
12826                 "filtersdbdatabaseerror"        => $kiriwrite_lang->{error}->{filtersdbdatabaseerror},
12827                 "filtersdbpermissions"          => $kiriwrite_lang->{error}->{filtersdbpermissions},
12828                 "filtersdbmissing"              => $kiriwrite_lang->{error}->{filtersdbmissing},
12829                 "filteridblank"                 => $kiriwrite_lang->{error}->{filteridblank},
12830                 "filterdoesnotexist"            => $kiriwrite_lang->{error}->{filterdoesnotexist},
12831                 "filteridinvalid"               => $kiriwrite_lang->{error}->{filteridinvalid},
12832                 "filteridtoolong"               => $kiriwrite_lang->{error}->{filteridtoolong},
12833                 "findfiltertoolong"             => $kiriwrite_lang->{error}->{findfiltertoolong},
12834                 "filterpriorityinvalid"         => $kiriwrite_lang->{error}->{filterpriorityinvalid},
12835                 "filterpriorityinvalidchars"    => $kiriwrite_lang->{error}->{filterpriorityinvalidchars},
12836                 "filterprioritytoolong"         => $kiriwrite_lang->{error}->{filterprioritytoolong},
12837                 "invalidcompiletype"            => $kiriwrite_lang->{error}->{invalidcompiletype},
12838                 "invalidpagenumber"             => $kiriwrite_lang->{error}->{invalidpagenumber},
12839                 "nopagesselected"               => $kiriwrite_lang->{error}->{nopagesselected},
12840                 "invaliddirectory"              => $kiriwrite_lang->{error}->{invaliddirectory},
12841                 "invaliddatetimeformat"         => $kiriwrite_lang->{error}->{invaliddatetimeformat},
12842                 "invalidlanguagefilename"       => $kiriwrite_lang->{error}->{invalidlanguagefilename},
12843                 "languagefilenamemissing"       => $kiriwrite_lang->{error}->{languagefilenamemissing},
12844                 "moduleblank"                   => $kiriwrite_lang->{error}->{moduleblank},
12845                 "moduleinvalid"                 => $kiriwrite_lang->{error}->{moduleinvalid},
12846                 "newcopydatabasedatabaseerror"  => $kiriwrite_lang->{error}->{newcopydatabasedatabaseerror},
12847                 "newcopydatabasedoesnotexist"   => $kiriwrite_lang->{error}->{newcopydatabasedoesnotexist},
12848                 "newcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newcopydatabasefileinvalidpermissions},
12849                 "newmovedatabasedatabaseerror"  => $kiriwrite_lang->{error}->{newmovedatabasedatabaseerror},
12850                 "newmovedatabasedoesnotexist"   => $kiriwrite_lang->{error}->{newmovedatabasedoesnotexist},
12851                 "newmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newmovedatabasefileinvalidpermissions},
12852                 "nodatabasesavailable"          => $kiriwrite_lang->{error}->{nodatabasesavailable},
12853                 "nodatabaseselected"            => $kiriwrite_lang->{error}->{nodatabaseselected},
12854                 "noeditvaluesselected"          => $kiriwrite_lang->{error}->{noeditvaluesselected},
12855                 "oldcopydatabasedatabaseerror"  => $kiriwrite_lang->{error}->{oldcopydatabasedatabaseerror},
12856                 "oldcopydatabasedoesnotexist"   => $kiriwrite_lang->{error}->{oldcopydatabasedoesnotexist},
12857                 "oldcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldcopydatabasefileinvalidpermissions},
12858                 "oldmovedatabasedatabaseerror"  => $kiriwrite_lang->{error}->{oldmovedatabasedatabaseerror},
12859                 "oldmovedatabasedoesnotexist"   => $kiriwrite_lang->{error}->{oldmovedatabasedoesnotexist},
12860                 "oldmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldmovedatabasefileinvalidpermissions},
12861                 "outputdirectoryblank"          => $kiriwrite_lang->{error}->{outputdirectoryblank},
12862                 "outputdirectoryinvalid"        => $kiriwrite_lang->{error}->{outputdirectoryinvalid},
12863                 "outputdirectorymissing"        => $kiriwrite_lang->{error}->{outputdirectorymissing},
12864                 "outputdirectoryinvalidpermissions"     => $kiriwrite_lang->{error}->{outputdirectoryinvalidpermissions},
12865                 "presmoduleblank"               => $kiriwrite_lang->{error}->{presmoduleblank},
12866                 "presmoduleinvalid"             => $kiriwrite_lang->{error}->{presmoduleinvalid},
12867                 "presmodulemissing"             => $kiriwrite_lang->{error}->{presmodulemissing},
12868                 "pagefilenamedoesnotexist"      => $kiriwrite_lang->{error}->{pagefilenamedoesnotexist},
12869                 "pagefilenameexists"            => $kiriwrite_lang->{error}->{pagefilenameexists},
12870                 "pagefilenameinvalid"           => $kiriwrite_lang->{error}->{pagefilenameinvalid},
12871                 "pagefilenametoolong"           => $kiriwrite_lang->{error}->{pagefilenametoolong},
12872                 "pagefilenameblank"             => $kiriwrite_lang->{error}->{pagefilenameblank},
12873                 "pagetitletoolong"              => $kiriwrite_lang->{error}->{pagetitletoolong},
12874                 "pagedescriptiontoolong"        => $kiriwrite_lang->{error}->{pagedescriptiontoolong},
12875                 "pagesectiontoolong"            => $kiriwrite_lang->{error}->{pagesectiontoolong},
12876                 "pagedatabasefilenametoolong"   => $kiriwrite_lang->{error}->{pagedatabasefilenametoolong},
12877                 "pagesettingstoolong"           => $kiriwrite_lang->{error}->{pagesettingstoolong},
12878                 "pagesettingsinvalid"           => $kiriwrite_lang->{error}->{pagesettingsinvalid},
12879                 "pagetemplatefilenametoolong"   => $kiriwrite_lang->{error}->{pagetemplatefilenametoolong},
12880                 "replacefiltertoolong"          => $kiriwrite_lang->{error}->{replacefiltertoolong},
12881                 "servernameinvalid"             => $kiriwrite_lang->{error}->{servernameinvalid},
12882                 "servernametoolong"             => $kiriwrite_lang->{error}->{servernametoolong},
12883                 "serverdatabasenameinvalid"     => $kiriwrite_lang->{error}->{serverdatabasenameinvalid},
12884                 "serverdatabasenametoolong"     => $kiriwrite_lang->{error}->{serverdatabasenametoolong},
12885                 "serverdatabaseusernameinvalid" => $kiriwrite_lang->{error}->{serverdatabaseusernameinvalid},
12886                 "serverdatabaseusernametoolong" => $kiriwrite_lang->{error}->{serverdatabaseusernametoolong},
12887                 "serverdatabasepasswordtoolong" => $kiriwrite_lang->{error}->{serverdatabasepasswordtoolong},
12888                 "serverdatabasetableprefixinvalid"      => $kiriwrite_lang->{error}->{serverdatabasetableprefixinvalid},
12889                 "serverdatabasetableprefixtoolong"      => $kiriwrite_lang->{error}->{serverdatabasetableprefixtoolong},
12890                 "serverportnumberinvalid"       => $kiriwrite_lang->{error}->{serverportnumberinvalid},
12891                 "serverportnumberinvalidcharacters"     => $kiriwrite_lang->{error}->{serverportnumberinvalidcharacters},
12892                 "serverportnumbertoolong"       => $kiriwrite_lang->{error}->{serverportnumbertoolong},
12893                 "serverprotocolnametoolong"     => $kiriwrite_lang->{error}->{serverprotocolnametoolong},
12894                 "serverprotocolinvalid"         => $kiriwrite_lang->{error}->{serverprotocolinvalid},
12895                 "templatenameblank"             => $kiriwrite_lang->{error}->{templatenameblank},
12896                 "templatefilenameexists"        => $kiriwrite_lang->{error}->{templatefilenameexists},
12897                 "templatefilenameinvalid"       => $kiriwrite_lang->{error}->{templatefilenameinvalid},
12898                 "templatedatabaseerror"         => $kiriwrite_lang->{error}->{templatedatabaseerror},
12899                 "templatedatabaseinvalidpermissions"    => $kiriwrite_lang->{error}->{templatedatabaseinvalidpermissions},
12900                 "templatedatabaseinvalidformat" => $kiriwrite_lang->{error}->{templatedatabaseinvalidformat},
12901                 "templatedirectoryblank"        => $kiriwrite_lang->{error}->{templatedirectoryblank},
12902                 "templatedirectoryinvalid"      => $kiriwrite_lang->{error}->{templatedirectoryinvalid},
12903                 "templatedatabasenotcreated"    => $kiriwrite_lang->{error}->{templatedatabasenotcreated},
12904                 "templatefilenametoolong"       => $kiriwrite_lang->{error}->{templatefilenametoolong},
12905                 "templatenametoolong"           => $kiriwrite_lang->{error}->{templatenametoolong},
12906                 "templatedescriptiontoolong"    => $kiriwrite_lang->{error}->{templatedescriptiontoolong},
12907                 "templatedatabasemissing"       => $kiriwrite_lang->{error}->{templatedatabasemissing},
12908                 "templatedoesnotexist"          => $kiriwrite_lang->{error}->{templatedoesnotexist},
12909                 "templatefilenameblank"         => $kiriwrite_lang->{error}->{templatefilenameblank},
12911         );
12913         # Check if the specified error is blank and if it is
12914         # use the generic error messsage.
12916         if (!$kiriwrite_error{$error_type}){
12917                 $error_type = "generic";
12918         }
12920         $kiriwrite_presmodule->clear();
12922         $kiriwrite_presmodule->startbox("errorbox");
12923         $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{error}, { Style => "errorheader" });
12924         $kiriwrite_presmodule->addlinebreak();
12925         $kiriwrite_presmodule->addtext($kiriwrite_error{$error_type}, { Style => "errortext" });
12927         # Check to see if extended error information was passed.
12929         if ($error_extended){
12931                 # Write the extended error information.
12933                 $kiriwrite_presmodule->addlinebreak();
12934                 $kiriwrite_presmodule->addlinebreak();
12935                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{extendederror});
12936                 $kiriwrite_presmodule->addlinebreak();
12937                 $kiriwrite_presmodule->addlinebreak();
12938                 $kiriwrite_presmodule->startbox("datalist");
12939                 $kiriwrite_presmodule->addtext($error_extended);
12940                 $kiriwrite_presmodule->endbox();
12942         }
12944         $kiriwrite_presmodule->endbox();
12946         kiriwrite_output_header;
12947         kiriwrite_output_page($kiriwrite_lang->{error}->{error}, $kiriwrite_presmodule->grab(), "none");
12949         exit;
12953 sub kiriwrite_fileexists{
12954 #################################################################################
12955 # kiriwrite_fileexists: Check if a file exists and returns a value depending on #
12956 # if the file exists or not.                                                    #
12957 #                                                                               # 
12958 # Usage:                                                                        #
12959 #                                                                               #
12960 # kiriwrite_fileexists(filename);                                               #
12961 #                                                                               #
12962 # filename      Specifies the file name to check if it exists or not.           #
12963 #################################################################################
12965         # Get the value that was passed to the subroutine.
12967         my ($filename) = @_;
12969         # Check if the filename exists, if it does, return a value of 0, else
12970         # return a value of 1, meaning that the file was not found.
12972         if (-e $filename){
12974                 # Specified file does exist so return a value of 0.
12976                 return 0;
12978         } else {
12980                 # Specified file does not exist so return a value of 1.
12982                 return 1;
12984         }
12988 sub kiriwrite_filepermissions{
12989 #################################################################################
12990 # kiriwrite_filepermissions: Check if the file permissions of a file and return #
12991 # either a 1 saying that the permissions are valid or return a 0 saying that    #
12992 # the permissions are invalid.                                                  #
12993 #                                                                               #
12994 # Usage:                                                                        #
12995 #                                                                               #
12996 # kiriwrite_filepermissions(filename, [read], [write], [filemissingskip]);      #
12997 #                                                                               #
12998 # filename              Specifies the filename to check for permissions.        #
12999 # read                  Preform check that the file is readable.                #
13000 # write                 Preform check that the file is writeable.               #
13001 # filemissingskip       Skip the check of seeing if it can read or write if the #
13002 #                       file is missing.                                        #
13003 #################################################################################
13005         # Get the values that was passed to the subroutine.
13007         my ($filename, $readpermission, $writepermission, $ignorechecks) = @_;
13009         # Check to make sure that the read permission and write permission values
13010         # are only 1 character long.
13012         kiriwrite_variablecheck($readpermission, "maxlength", 1, 0);
13013         kiriwrite_variablecheck($writepermission, "maxlength", 1, 0);
13014         kiriwrite_variablecheck($ignorechecks, "maxlength", 1, 0);
13016         my $ignorechecks_result = 0;
13018         # Check if the file should be ignored for read and write checking if 
13019         # it doesn't exist.
13021         if ($ignorechecks){
13023                 if (-e $filename){
13025                         # The file exists so the checks are to be done.
13027                         $ignorechecks_result = 0;
13029                 } else {
13031                         # The file does not exist so the checks don't need to
13032                         # be done to prevent false positives.
13034                         $ignorechecks_result = 1;
13036                 }
13038         } else {
13040                 $ignorechecks_result = 0;
13042         }
13044         # Check if the file should be checked to see if it can be read.
13046         if ($readpermission && $ignorechecks_result eq 0){
13048                 # The file should be checked to see if it does contain read permissions
13049                 # and return a 0 if it is invalid.
13051                 if (-r $filename){
13053                         # The file is readable, so do nothing.
13055                 } else {
13057                         # The file is not readable, so return 1.
13059                         return 1;
13061                 }
13063         }
13065         # Check if the file should be checked to see if it can be written.
13067         if ($writepermission && $ignorechecks_result eq 0){
13069                 # The file should be checked to see if it does contain write permissions
13070                 # and return a 0 if it is invalid.
13072                 if (-w $filename){
13074                         # The file is writeable, so do nothing.
13076                 } else {
13078                         # The file is not writeable, so return 1.
13080                         return 1;
13082                 }
13084         }
13086         # No problems have occured, so return 0.
13088         return 0;
13092 sub kiriwrite_utf8convert{
13093 #################################################################################
13094 # kiriwrite_utf8convert: Properly converts values into UTF-8 and make sure      #
13095 # that the size of the string is correct when doing input validation.           #
13096 #                                                                               #
13097 # Usage:                                                                        #
13098 #                                                                               #
13099 # utfstring     # The UTF-8 string to convert.                                  #
13100 #################################################################################
13102         # Get the values passed to the subroutine.
13104         my ($utfstring) = @_;
13106         # Load the Encode perl module.
13108         use Encode qw(decode_utf8);
13110         # Convert the string.
13112         my $finalutf8 = Encode::decode_utf8( $utfstring );
13114         return $finalutf8;
13118 sub kiriwrite_critical{
13119 #################################################################################
13120 # kiriwrite_critical: Displays an critical error message that cannot be         #
13121 # normally by the kiriwrite_error subroutine.                                   #
13122 #                                                                               #
13123 # Usage:                                                                        #
13124 #                                                                               #
13125 # errortype     Specifies the type of critical error that has occured.          #
13126 #################################################################################
13128         # Get the value that was passed to the subroutine.
13130         my ($error_type) = @_;
13132         my %error_list;
13134         # Get the error type from the errortype string.
13136         %error_list = (
13138                 # Generic critical error message.
13140                 "generic"                       => "A critical error has occured but the error is not known to Kiriwrite.",
13142                 # Specific critical error messages.
13144                 "configfilemissing"             => "The Kiriwrite configuration file is missing! Running the installer script for Kiriwrite is recommended.",
13145                 "configfileinvalidpermissions"  => "The Kiriwrite configuration file has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13146                 "dbmodulemissing"               => "The database module is missing! Running the installer script for Kiriwrite is recommended.",
13147                 "dbmoduleinvalidpermissions"    => "The database module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13148                 "dbmoduleinvalid"               => "The database module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13149                 "invalidvalue"                  => "An invalid value was passed.",
13150                 "languagefilenameblank"         => "The language filename given is blank! Running the installer script for Kiriwrite is recommended.",
13151                 "languagefilenameinvalid"       => "The language filename given is invalid! Running the installer script for Kiriwrite is recommended.",
13152                 "languagefilemissing"   => "The language filename given does not exist. Running the installer script for Kiriwrite is recommended.",
13153                 "languagefilenameinvalidpermissions"    => "The language file with the filename given has invalid permissions set. Please set the valid permission settings for the language file.",
13154                 "presmodulemissing"             => "The presentation module is missing! Running the installer script for Kiriwrite is recommended.",
13155                 "presmoduleinvalidpermissions"  => "The presentation module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the presentation module.",
13156                 "presmoduleinvalid"             => "The presentation module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13157         );
13159         if (!$error_list{$error_type}){
13161                 $error_type = "generic";
13163         }
13165         print header();
13166         print "Critical Error: " . $error_list{$error_type};
13167         exit;
13171 sub kiriwrite_output_page{
13172 #################################################################################
13173 # kiriwrite_output_page: Outputs the page to the browser/stdout/console.        #
13174 #                                                                               #
13175 # Usage:                                                                        #
13176 #                                                                               #
13177 # kiriwrite_output_page(pagetitle, pagedata, menutype);                         #
13178 #                                                                               #
13179 # pagetitle     Specifies the page title.                                       #
13180 # pagedata      Specifies the page data.                                        #
13181 # menutype      Prints out which menu to use.                                   #
13182 #################################################################################
13184         my ($pagetitle, $pagedata, $menutype) = @_;
13186         # Open the script page template and load it into the scriptpage variable,
13187         # while declaring the variable.
13189         open (my $filehandle_scriptpage, "<:utf8", 'page.html');
13190         my @scriptpage = <$filehandle_scriptpage>;
13191         binmode $filehandle_scriptpage, ':utf8';
13192         close ($filehandle_scriptpage);
13194         # Define the variables required.
13196         my $scriptpageline = "";
13197         my $pageoutput = "";
13198         my $menuoutput = "";
13200         $kiriwrite_presmodule->clear();
13202         # Print out the main menu for Kiriwrite.
13204         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{menu}->{viewdatabases} });
13205         $kiriwrite_presmodule->addtext(" | ");
13206         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page", { Text => $kiriwrite_lang->{menu}->{viewpages} });
13207         $kiriwrite_presmodule->addtext(" | ");
13208         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{menu}->{viewfilters} });
13209         $kiriwrite_presmodule->addtext(" | ");
13210         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{menu}->{viewtemplates} });
13211         $kiriwrite_presmodule->addtext(" | ");
13212         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{menu}->{compilepages} });
13213         $kiriwrite_presmodule->addtext(" | ");
13214         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{menu}->{viewsettings} });
13215         $kiriwrite_presmodule->addlinebreak();
13217         # Check what menu is going to be printed along with the default 'top' menu.
13219         if ($menutype eq "database"){
13221                 # If the menu type is database then print out the database sub-menu.
13223                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{database}->{submenu}->{viewdatabases} });
13224                 $kiriwrite_presmodule->addtext(" | ");
13225                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=new", { Text => $kiriwrite_lang->{database}->{submenu}->{adddatabase} });
13227         } elsif ($menutype eq "pages"){
13228                 # If the menu type is pages then print out the pages sub-menu.
13230                 # First, fetch the database name from the HTTP query string.
13232                 my $query = new CGI;
13233                 my $db_filename = $query->param('database');
13235                 # Check if a value has been placed in the db_filename string.
13237                 if (!$db_filename){
13239                         # As the database filename is blank, don't add an option to add a page.
13241                 } else {
13243                         # A database file has been specified so add an option to add a page to
13244                         # the selected database.
13246                         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page&action=add&database="  . $db_filename, { Text => $kiriwrite_lang->{pages}->{submenu}->{addpage} });
13248                 }
13250         } elsif ($menutype eq "filter"){
13252                 # If the menu type is filters then print out the filter sub-menu.
13254                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{submenu}->{showfilters} });
13255                 $kiriwrite_presmodule->addtext(" | ");
13256                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter&action=add", { Text => $kiriwrite_lang->{filter}->{submenu}->{addfilter} });
13258         } elsif ($menutype eq "settings"){
13260                 # If the menu type is options then print out the options sub-menu.
13262                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{submenu}->{viewsettings} });
13263                 $kiriwrite_presmodule->addtext(" | ");
13264                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings&action=edit", { Text => $kiriwrite_lang->{setting}->{submenu}->{editsettings} });
13266         } elsif ($menutype eq "template"){
13268                 # If the menu type is template then print out the template sub-menu.
13270                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{template}->{submenu}->{showtemplates} });
13271                 $kiriwrite_presmodule->addtext(" | ");
13272                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template&action=add", { Text => $kiriwrite_lang->{template}->{submenu}->{addtemplate} });
13274         } elsif ($menutype eq "compile"){
13276                 # If the menu type is compile then print out the compile sub-menu.
13278                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{submenu}->{listdatabases} });
13279                 $kiriwrite_presmodule->addtext(" | ");
13280                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=all", { Text => $kiriwrite_lang->{compile}->{submenu}->{compileall} });
13281                 $kiriwrite_presmodule->addtext(" | ");
13282                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=clean", { Text => $kiriwrite_lang->{compile}->{submenu}->{cleanoutputdirectory} });
13284         }
13286         $menuoutput = $kiriwrite_presmodule->grab();
13288         # Find <kiriwrite> tages and replace with the apporiate variables.
13290         foreach $scriptpageline (@scriptpage){
13292                 $scriptpageline =~ s/<kiriwrite:menu>/$menuoutput/g;
13293                 $scriptpageline =~ s/<kiriwrite:imagespath>/$kiriwrite_config{"directory_noncgi_images"}/g;
13294                 $scriptpageline =~ s/<kiriwrite:pagedata>/$pagedata/g;
13296                 # Check if page title specified is blank, otherwise add a page title
13297                 # to the title.
13299                 if ($pagetitle eq ""){
13300                         $scriptpageline =~ s/<kiriwrite:title>//g;
13301                 } else {
13302                         $scriptpageline =~ s/<kiriwrite:title>/ ($pagetitle)/g;
13303                 }
13305                 
13307                 # Append processed line to the pageoutput variable.
13309                 $pageoutput = $pageoutput . $scriptpageline;
13311         }
13313         binmode STDOUT, ':utf8';
13315         print $pageoutput;
13317         return;
13321 sub kiriwrite_output_xml{
13322 #################################################################################
13323 # kiriwrite_output_xml: Outputs several types of data to an XML file            #
13324 #                                                                               #
13325 # Usage:                                                                        #
13326 #                                                                               #
13327 # kiriwrite_output_xml(filename, type, settings);                               #
13328 #                                                                               #
13329 # filename      Specifies the filename of the XML file.                         #
13330 # type          Specifies the type of the XML file to be written.               #
13331 # settings              Specifies the following settings in any order.          #
13332 #                                                                               #
13333 # Settings for Kiriwrite configuration files:                                   #
13334 #                                                                               #
13335 # DatabaseDirectory     Specifies the new database directory to use.            #
13336 # OutputDirectory       Specifies the new output directory to use.              #
13337 # ImagesURIPath         Specifies the new URI path for images.                  #
13338 # DateTimeFormat        Specifies the new date and time format.                 #
13339 # SystemLanguage        Specifies the new language to use for Kiriwrite.        #
13340 # PrsentationModule     Specifies the new presentation module to use for        #
13341 #                       Kiriwrite.                                              #
13342 # DatabaseModule        Specifies the new database module to use for Kiriwrite. #
13343 # DatabaseServer        Specifies the database server to use.                   #
13344 # DaravasePort          Specifies the port the database server is running on.   #
13345 # DatabaseProtocol      Specifies the protocol the database server is using.    #
13346 # DatabaseSQLDatabase   Specifies the SQL database name to use.                 #
13347 # DatabaseUsername      Specifies the database server username.                 #
13348 # DatabasePassword      Specifies the password for the database server username.#
13349 # DatabaseTablePrefix   Specifies the table prefix to use.                      #
13350 #################################################################################
13352         # Get the variables passed from the subroutine.
13354         my $xml_filename        = shift;
13355         my $xml_type            = shift;
13356         my ($passedsettings)    = @_;
13358         # Check if filename is blank, if it is then return an error.
13360         if ($xml_filename eq ""){
13361                 # Filename is blank, return an error.
13362                 kiriwrite_error("blankfilename");
13363         }
13365         # Validate the XML filename to make sure nothing supicious is being passed.
13367         kiriwrite_variablecheck($xml_filename, "maxlength", 64, 0);
13368         kiriwrite_variablecheck($xml_filename, "filename", "", 0);
13370         # Check what type of XML data to output.
13372         if ($xml_type eq "config") {
13374                 # The type of XML data to output is a Kiriwrite configuration file.
13376                 # Get the data from the hash.
13378                 my $settings_databasedir                = $passedsettings->{"DatabaseDirectory"};
13379                 my $settings_outputdir                  = $passedsettings->{"OutputDirectory"};
13380                 my $settings_imagesuri                  = $passedsettings->{"ImagesURIPath"};
13381                 my $settings_datetime                   = $passedsettings->{"DateTimeFormat"};
13382                 my $settings_systemlanguage             = $passedsettings->{"SystemLanguage"};
13383                 my $settings_presmodule                 = $passedsettings->{"PresentationModule"};
13384                 my $settings_dbmodule                   = $passedsettings->{"DatabaseModule"};
13386                 my $settings_database_server            = $passedsettings->{"DatabaseServer"};
13387                 my $settings_database_port              = $passedsettings->{"DatabasePort"};
13388                 my $settings_database_protocol          = $passedsettings->{"DatabaseProtocol"};
13389                 my $settings_database_sqldatabase       = $passedsettings->{"DatabaseSQLDatabase"};
13390                 my $settings_database_username          = $passedsettings->{"DatabaseUsername"};
13391                 my $settings_database_password          = $passedsettings->{"DatabasePassword"};
13392                 my $settings_database_tableprefix       = $passedsettings->{"DatabaseTablePrefix"};
13394                 # Convert the password to make sure it can be read properly.
13396                 $settings_database_password =~ s/\0//g;
13397                 $settings_database_password =~ s/</&lt;/g;
13398                 $settings_database_password =~ s/>/&gt;/g;
13400                 # Convert the less than and greater than characters are there and
13401                 # convert them.
13403                 $settings_imagesuri =~ s/</&lt;/g;
13404                 $settings_imagesuri =~ s/>/&gt;/g;
13406                 # Create the XML data layout.
13408                 my $xmldata = "<?xml version=\"1.0\"?>\r\n\r\n<kiriwrite-config>\r\n";
13410                 $xmldata = $xmldata . "<!-- This file was automatically generated by Kiriwrite, please feel free to edit to your own needs. -->\r\n";
13411                 $xmldata = $xmldata . "\t<settings>\r\n\t\t<directories>\r\n";
13413                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_databasedir . "</database>\r\n";
13414                 $xmldata = $xmldata . "\t\t\t<output>" . $settings_outputdir  . "</output>\r\n";
13415                 $xmldata = $xmldata . "\t\t\t<images>" . $settings_imagesuri . "</images>\r\n";
13416                 $xmldata = $xmldata . "\t\t</directories>\r\n";
13418                 $xmldata = $xmldata . "\t\t<language>\r\n";
13419                 $xmldata = $xmldata . "\t\t\t<lang>" . $settings_systemlanguage . "</lang>\r\n";
13420                 $xmldata = $xmldata . "\t\t</language>\r\n";
13422                 $xmldata = $xmldata . "\t\t<system>\r\n";
13423                 $xmldata = $xmldata . "\t\t\t<presentation>" . $settings_presmodule . "</presentation>\r\n";
13424                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_dbmodule . "</database>\r\n";
13425                 $xmldata = $xmldata . "\t\t\t<datetime>" . $settings_datetime . "</datetime>\r\n";
13426                 $xmldata = $xmldata . "\t\t</system>\r\n";
13428                 $xmldata = $xmldata . "\t\t<database>\r\n";
13429                 $xmldata = $xmldata . "\t\t\t<server>" . $settings_database_server . "</server>\r\n";
13430                 $xmldata = $xmldata . "\t\t\t<port>" . $settings_database_port . "</port>\r\n";
13431                 $xmldata = $xmldata . "\t\t\t<protocol>" . $settings_database_protocol . "</protocol>\r\n";
13432                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_database_sqldatabase . "</database>\r\n";
13433                 $xmldata = $xmldata . "\t\t\t<username>" . $settings_database_username . "</username>\r\n";
13434                 $xmldata = $xmldata . "\t\t\t<password>" . $settings_database_password . "</password>\r\n";
13435                 $xmldata = $xmldata . "\t\t\t<prefix>" . $settings_database_tableprefix . "</prefix>\r\n";
13436                 $xmldata = $xmldata . "\t\t</database>\r\n";
13438                 $xmldata = $xmldata . "\t</settings>\r\n";
13440                 $xmldata = $xmldata . "</kiriwrite-config>";
13442                 # Open the Kiriwrite XML configuration file and write the new settings to the
13443                 # configuration file.
13445                 open(my $filehandle_xmlconfig, "> ", "kiriwrite.xml");
13446                 print $filehandle_xmlconfig $xmldata;
13447                 close($filehandle_xmlconfig);
13449         } else {
13451                 # The type of XML data is something else that is not supported by
13452                 # Kiriwrite, so return an error.
13454                 kiriwrite_error("invalidoption");
13456         }
13458         return;
13462 #################################################################################
13463 # End listing the functions needed.                                             #
13464 #################################################################################
13466 #################################################################################
13467 # Begin proper script execution.                                                #
13468 #################################################################################
13470 kiriwrite_settings_load;        # Load the configuration options.
13472 my $query = new CGI;            # Easily fetch variables from the HTTP string.
13476 # Check if a mode has been specified and if a mode has been specified, continue
13477 # and work out what mode has been specified.
13479 if ($query->param('mode')){
13480         my $http_query_mode = $query->param('mode');
13482         if ($http_query_mode eq "db"){
13484                 # If mode is 'db' (database), then check what action is required.
13486                 if ($query->param('action')){
13487                         # An action has been specified, so find out what action has been specified.
13489                         my $http_query_action = $query->param('action');
13491                         if ($http_query_action eq "edit"){
13492                                 # The edit action (which mean edit the settings for the selected database) has been specified,
13493                                 # get the database name and check if the action to edit an database has been confirmed.
13495                                 if ($query->param('database')){
13496                                         # If there is a value in the database variable check if it is a valid database. Otherwise,
13497                                         # return an error.
13499                                         my $http_query_database = $query->param('database');
13500                                 
13501                                         # Check if a value for confirm has been specified, if there is, check if it is the correct
13502                                         # value, otherwise return an error.
13504                                         if ($query->param('confirm')){
13505                                                 # A value for confirm has been specified, find out what value it is. If the value is correct
13506                                                 # then edit the database settings, otherwise return an error.
13508                                                 my $http_query_confirm = $query->param('confirm');
13510                                                 if ($http_query_confirm eq 1){
13511                                                         # Value is correct, collect the variables to pass onto the database variable.
13512         
13513                                                         # Get the variables from the HTTP query.
13514         
13515                                                         my $newdatabasename             = $query->param('databasename');
13516                                                         my $newdatabasedescription      = $query->param('databasedescription');
13517                                                         my $newdatabasefilename         = $query->param('databasefilename');
13518                                                         my $databasename                = $query->param('olddatabasename');
13519                                                         my $databasedescription         = $query->param('olddatabasedescription');
13520                                                         my $databaseshortname           = $query->param('database');
13521                                                         my $databasenotes               = $query->param('databasenotes');
13522                                                         my $databasecategories          = $query->param('databasecategories');
13524                                                         # Check the permissions of the database configuration file and return
13525                                                         # an error if the database permissions are invalid.
13526         
13527                                                         # Pass the variables to the database editing subroutine.
13529                                                         my $pagedata = kiriwrite_database_edit($databaseshortname, $databasename, $databasedescription, $newdatabasefilename, $newdatabasename, $newdatabasedescription, $databasenotes, $databasecategories, 1);
13530         
13531                                                         kiriwrite_output_header;
13532                                                         kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13533                                                         exit;
13534         
13535                                                 } else {
13536                                                         # Value is incorrect, return and error.
13537                                                         kiriwrite_error("invalidvariable");
13538                                                 } 
13540                                         }
13542                                         # Display the form for editing an database.
13543                                         my $pagedata = kiriwrite_database_edit($http_query_database);
13545                                         kiriwrite_output_header;
13546                                         kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13547                                         exit;
13549                                 } else {
13551                                         # If there is no value in the database variable, then return an error.
13552                                         kiriwrite_error("invalidvariable");
13554                                 }
13556                         } elsif ($http_query_action eq "delete"){
13558                                 # Action equested is to delete a database, find out if the user has already confirmed deletion of the database
13559                                 # and if the deletion of the database has been confirmed, delete the database.
13561                                 if ($query->param('confirm')){
13563                                         # User has confirmed to delete a database, pass the parameters to the kiriwrite_database_delete
13564                                         # subroutine.
13566                                         my $database_filename = $query->param('database');
13567                                         my $database_confirm = $query->param('confirm');
13568                                         my $pagedata = kiriwrite_database_delete($database_filename, $database_confirm);
13570                                         kiriwrite_output_header;
13571                                         kiriwrite_output_page($kiriwrite_lang->{database}->{deleteddatabase}, $pagedata, "database");
13573                                         exit;
13575                                 }
13577                                 # User has clicked on the delete link (thus hasn't confirmed the action to delete a database).
13579                                 my $database_filename = $query->param('database');
13580                                 my $pagedata = kiriwrite_database_delete($database_filename);
13582                                 kiriwrite_output_header;
13583                                 kiriwrite_output_page($kiriwrite_lang->{database}->{deletedatabase}, $pagedata, "database");
13585                                 exit;
13587                         } elsif ($http_query_action eq "new"){
13589                                 # Action requested is to create a new database, find out if the user has already entered the information needed
13590                                 # to create a database and see if the user has confirmed the action, otherwise printout a form for adding a
13591                                 # database.
13593                                 my $http_query_confirm = $query->param('confirm');
13595                                 # Check if the confirm value is correct.
13597                                 if ($http_query_confirm){
13598                                         if ($http_query_confirm eq 1){
13600                                                 # User has confirmed to create a database, pass the parameters to the 
13601                                                 # kiriwrite_database_add subroutine.
13603                                                 my $http_query_confirm = $query->param('confirm');
13605                                                 my $database_name               = $query->param('databasename');
13606                                                 my $database_description        = $query->param('databasedescription');
13607                                                 my $database_filename           = $query->param('databasefilename');
13608                                                 my $database_notes              = $query->param('databasenotes');
13609                                                 my $database_categories         = $query->param('databasecategories');
13611                                                 my $pagedata = kiriwrite_database_add($database_filename, $database_name, $database_description, $database_notes, $database_categories, $http_query_confirm);
13613                                                 kiriwrite_output_header;
13614                                                 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13615                                                 exit;
13617                                         } else {
13619                                                 # The confirm value is something else other than 1 (which it shouldn't be), so
13620                                                 # return an error.
13622                                         }
13623                                 }
13625                                 # User has clicked on the 'Add Database' link.
13627                                 my $pagedata = kiriwrite_database_add;
13629                                 kiriwrite_output_header;
13630                                 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13631                                 exit;
13633                         } else {
13634                                 # Another option has been specified, so return an error.
13636                                 kiriwrite_error("invalidaction");
13637                         }
13638                 }
13640                 # No action has been specified, do the default action of displaying a list
13641                 # of databases.
13643                 my $pagedata = kiriwrite_database_list;
13645                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
13646                 kiriwrite_output_page("", $pagedata, "database");       # Output the page to browser/console/stdout.
13647                 exit;                                   # End the script.
13649         } elsif ($http_query_mode eq "page"){
13651                 # If mode is 'page', then check what action is required.
13653                 if ($query->param('action')){
13654                         my $http_query_action = $query->param('action');
13656                         # Check if the action requested matches with one of the options below. If it does,
13657                         # go to that section, otherwise return an error.
13659                         if ($http_query_action eq "view"){
13661                                 # The action selected was to view pages from a database, 
13663                                 my $database_name       = $query->param('database');
13664                                 my $pagedata            = kiriwrite_page_list($database_name);
13666                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13667                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{viewingdatabase}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13668                                 exit;                   # End the script.
13670                         } elsif ($http_query_action eq "add"){
13672                                 # The action selected was to add a page to the selected database.
13674                                 my $http_query_confirm  = $query->param('confirm');
13676                                 if (!$http_query_confirm){
13678                                         $http_query_confirm = 0;
13680                                 }
13682                                 if ($http_query_confirm eq 1){
13683                 
13684                                         my $http_query_database         = $query->param('database');
13685                                         my $http_query_filename         = $query->param('pagefilename');
13686                                         my $http_query_name             = $query->param('pagename');
13687                                         my $http_query_description      = $query->param('pagedescription');
13688                                         my $http_query_section          = $query->param('pagesection');
13689                                         my $http_query_template         = $query->param('pagetemplate');
13690                                         my $http_query_settings         = $query->param('pagesettings');
13691                                         my $http_query_content          = $query->param('pagecontent');
13692                         
13693                                         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);
13695                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13696                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13697                                         exit;                           # End the script.
13699                                 }
13700                 
13701                                 my $http_query_database = $query->param('database');
13702                                 my $pagedata            = kiriwrite_page_add($http_query_database);
13704                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13705                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13706                                 exit;                           # End the script.
13708                         } elsif ($http_query_action eq "edit"){
13709                          
13710                                 # The action selected was to edit a page from a database.
13712                                 my $http_query_confirm = $query->param('confirm');
13714                                 if (!$http_query_confirm){
13716                                         $http_query_confirm = 0;
13718                                 }
13720                                 if ($http_query_confirm eq 1){
13722                                         # Get the needed values from the HTTP query.
13724                                         my $http_query_database         = $query->param('database');
13725                                         my $http_query_filename         = $query->param('page');
13726                                         my $http_query_newfilename      = $query->param('pagefilename');
13727                                         my $http_query_name             = $query->param('pagename');
13728                                         my $http_query_description      = $query->param('pagedescription');
13729                                         my $http_query_section          = $query->param('pagesection');
13730                                         my $http_query_template         = $query->param('pagetemplate');
13731                                         my $http_query_settings         = $query->param('pagesettings');
13732                                         my $http_query_content          = $query->param('pagecontent');
13734                                         # Pass the values to the editing pages subroutine.
13736                                         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);
13738                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13739                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages");   # Output the page to browser/console/stdout.
13740                                         exit;                           # End the script.
13742                                 }
13744                                 # Get the needed values from the HTTP query.
13746                                 my $http_query_database = $query->param('database');
13747                                 my $http_query_filename = $query->param('page');
13749                                 # Pass the values to the editing pages subroutine.
13751                                 my $pagedata = kiriwrite_page_edit($http_query_database, $http_query_filename);
13753                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13754                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages");   # Output the page to browser/console/stdout.
13755                                 exit;                           # End the script.
13758                         } elsif ($http_query_action eq "delete"){
13760                                 # The action selected was to delete a page from a database.
13762                                 my $http_query_database = $query->param('database');
13763                                 my $http_query_page     = $query->param('page');
13764                                 my $http_query_confirm  = $query->param('confirm');
13766                                 my $pagedata = "";
13767                                 my $selectionlist = "";
13769                                 if ($http_query_confirm){
13771                                         # The action has been confirmed, so try to delete the selected page
13772                                         # from the database.
13774                                         $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page, $http_query_confirm);
13776                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13777                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13778                                         exit;                           # End the script.
13780                                 }
13782                                 $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page);
13784                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13785                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13786                                 exit;                           # End the script.
13789                         } elsif ($http_query_action eq "multidelete"){
13791                                 # The action selected was to delete multiple pages from a
13792                                 # database.
13794                                 my $http_query_database = $query->param('database');
13795                                 my $http_query_confirm  = $query->param('confirm');
13797                                 my @filelist;
13798                                 my $pagedata;
13800                                 if ($http_query_confirm){
13802                                         # The action to delete multiple pages from the selected
13803                                         # database has been confirmed.
13805                                         @filelist       = kiriwrite_selectedlist();
13806                                         $pagedata       = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13808                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13809                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13810                                         exit;                           # End the script.
13812                                 }
13814                                 # Get the list of selected pages and pass them to the
13815                                 # multiple page delete subroutine.
13817                                 @filelist       = kiriwrite_selectedlist();
13818                                 $pagedata       = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13820                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13821                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13822                                 exit;                           # End the script.
13824                         } elsif ($http_query_action eq "multimove"){
13826                                 # The action selected was to move multiple pages from a
13827                                 # database.
13829                                 my $http_query_database         = $query->param('database');
13830                                 my $http_query_newdatabase      = $query->param('newdatabase');
13831                                 my $http_query_confirm          = $query->param('confirm');
13833                                 my @filelist;
13834                                 my $pagedata;
13836                                 if ($http_query_confirm){
13838                                         # The action to move multiple pages from the selected
13839                                         # database has been confirmed.
13841                                         @filelist       = kiriwrite_selectedlist();
13842                                         $pagedata       = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13844                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13845                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13846                                         exit;                           # End the script.
13848                                 }
13850                                 # Get the list of selected pages and pass them to the
13851                                 # multiple page move subroutine.
13853                                 @filelist       = kiriwrite_selectedlist();
13854                                 $pagedata       = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13856                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13857                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13858                                 exit;                           # End the script.
13860                         } elsif ($http_query_action eq "multicopy"){
13862                                 # The action selected was to copy multiple pages from a
13863                                 # database.
13865                                 my $http_query_database         = $query->param('database');
13866                                 my $http_query_newdatabase      = $query->param('newdatabase');
13867                                 my $http_query_confirm          = $query->param('confirm');
13869                                 my @filelist;
13870                                 my $pagedata;
13872                                 if ($http_query_confirm){
13874                                         # The action to copy multiple pages from the selected
13875                                         # database has been confirmed.
13877                                         @filelist       = kiriwrite_selectedlist();
13878                                         $pagedata       = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13880                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13881                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13882                                         exit;                           # End the script.
13884                                 }
13886                                 # Get the list of selected pages and pass them to the
13887                                 # multiple page copy subroutine.
13889                                 @filelist       = kiriwrite_selectedlist();
13890                                 $pagedata       = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13892                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13893                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13894                                 exit;                           # End the script.
13896                         } elsif ($http_query_action eq "multiedit"){
13898                                 # The action selected was to edit multiple pages from a
13899                                 # database.
13901                                 my $http_query_database         = $query->param('database');
13902                                 my $http_query_newsection       = $query->param('newsection');
13903                                 my $http_query_altersection     = $query->param('altersection');
13904                                 my $http_query_newtemplate      = $query->param('newtemplate');
13905                                 my $http_query_altertemplate    = $query->param('altertemplate');
13906                                 my $http_query_newsettings      = $query->param('newsettings');
13907                                 my $http_query_altersettings    = $query->param('altersettings');
13908                                 my $http_query_confirm          = $query->param('confirm');
13910                                 my @filelist;
13911                                 my $pagedata;
13913                                 if (!$http_query_confirm){
13915                                         @filelist       = kiriwrite_selectedlist();
13916                                         $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);
13918                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13919                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13920                                         exit;
13922                                 }
13924                                 # Get the list of selected pages and pass them to the
13925                                 # multiple page edit subroutine.
13927                                 @filelist       = kiriwrite_selectedlist();
13928                                 $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);
13930                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13931                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13932                                 exit;                           # End the script.
13934                         } else {
13935                                 kiriwrite_error("invalidaction");
13936                         }
13938                 } else {
13940                         # If there the action option is left blank, then print out a form where the database
13941                         # can be selected to view pages from.
13943                         my $pagedata = kiriwrite_page_list;
13945                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13946                         kiriwrite_output_page($kiriwrite_lang->{pages}->{databaseselecttitle}, $pagedata, "pages");     # Output the page to browser/console/stdout.
13947                         exit;                           # End the script.
13949                 }
13951                 # No action has been specified, do the default action of listing pages from
13952                 # the first database found in the directory.
13954         } elsif ($http_query_mode eq "filter"){
13956                 # If there's a value for action in the HTTP query, then
13957                 # get that value that is in the HTTP query.
13959                 if ($query->param('action')){
13961                         # There is a value for action in the HTTP query,
13962                         # so get the value from it.
13964                         my $http_query_action = $query->param('action');
13966                         if ($http_query_action eq "add"){
13968                                 # The action the user requested is to add a filter to the
13969                                 # filter database.
13971                                 # Check if there is a value in confirm and if there is
13972                                 # then pass it on to the new find and replace words
13973                                 # to add to the filter database.
13975                                 my $http_query_confirm = $query->param('confirm');
13977                                 if ($http_query_confirm){
13979                                         # There is a value in http_query_confirm, so pass on the
13980                                         # new find and replace words so that they can be added
13981                                         # to the filter database.
13983                                         my $http_query_findwords        = $query->param('findword');
13984                                         my $http_query_replacewords     = $query->param('replaceword');
13985                                         my $http_query_priority         = $query->param('priority');
13986                                         my $http_query_notes            = $query->param('notes');
13987                                 
13988                                         my $pagedata = kiriwrite_filter_add($http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
13990                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13991                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
13992                                         exit;                           # End the script.
13994                                 }
13996                                 my $pagedata = kiriwrite_filter_add();
13998                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13999                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14000                                 exit;                           # End the script.
14002                         } elsif ($http_query_action eq "edit"){
14004                                 # The action the user requested is to edit an filter from
14005                                 # the filter database.
14007                                 my $http_query_number = $query->param('filter');
14008                                 my $http_query_confirm = $query->param('confirm');
14010                                 if ($http_query_confirm){
14012                                         # There is a value in http_query_confirm, so pass on the
14013                                         # new find and replace words so that the filter database
14014                                         # can be edited.
14016                                         my $http_query_findwords        = $query->param('filterfind');
14017                                         my $http_query_replacewords     = $query->param('filterreplace');
14018                                         my $http_query_priority         = $query->param('priority');
14019                                         my $http_query_notes            = $query->param('notes');
14021                                         my $pagedata = kiriwrite_filter_edit($http_query_number, $http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
14023                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14024                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter");    # Output the page to browser/console/stdout.
14025                                         exit;                           # End the script.
14027                                 }
14029                                 my $pagedata = kiriwrite_filter_edit($http_query_number);
14031                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14032                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter");    # Output the page to browser/console/stdout.
14033                                 exit;                                   # End the script.
14035                         } elsif ($http_query_action eq "delete"){
14037                                 # The action the user requested is to delete an filter
14038                                 # from the filter database.
14040                                 my $http_query_number = $query->param('filter');
14041                                 my $http_query_confirm = $query->param('confirm');
14043                                 if ($http_query_confirm){
14045                                         my $pagedata = kiriwrite_filter_delete($http_query_number, $http_query_confirm);
14047                                         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14048                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14049                                         exit;                                   # End the script
14051                                 }
14053                                 my $pagedata = kiriwrite_filter_delete($http_query_number);
14055                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14056                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter");  # Output the page to browser/console/stdout.
14057                                 exit;                                   # End the script.
14059                         } else {
14061                                 # Another action was requested that was not one of 
14062                                 # the ones prcedding this catch all, so return
14063                                 # an error saying that an invalid option was
14064                                 # specified.
14066                                 kiriwrite_error("invalidaction");
14068                         }
14070                 } else {
14072                         my $pagedata = kiriwrite_filter_list();
14074                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14075                         kiriwrite_output_page($kiriwrite_lang->{filter}->{viewfilters}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14076                         exit;                           # End the script.
14078                 }
14082         } elsif ($http_query_mode eq "template"){
14084                 # Check if an action has been specified in the HTTP query.
14086                 if ($query->param('action')){
14088                         # An action has been specified in the HTTP query.
14090                         my $http_query_action = $query->param('action');
14092                         if ($http_query_action eq "delete"){
14093                                 # Get the required parameters from the HTTP query.
14095                                 my $http_query_template = $query->param('template');
14096                                 my $http_query_confirm  = $query->param('confirm');
14098                                 # Check if a value for confirm has been specified (it shouldn't)
14099                                 # be blank.
14101                                 if (!$http_query_confirm){
14102                                         # The confirm parameter of the HTTP query is blank, so
14103                                         # write out a form asking the user to confirm the deletion
14104                                         # of the selected template.
14106                                         my $pagedata = kiriwrite_template_delete($http_query_template);
14108                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14109                                         kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template");    # Output the page to browser/console/stdout.
14110                                         exit;                           # End the script.
14112                                 } else {
14114                                         my $pagedata = kiriwrite_template_delete($http_query_template, $http_query_confirm);
14116                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14117                                         kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template");    # Output the page to browser/console/stdout.
14118                                         exit;                           # End the script.
14120                                 }
14122                         } elsif ($http_query_action eq "add") {
14124                                 # Get the variables from the HTTP query in preperation for processing.
14126                                 my $http_query_confirm  = $query->param('confirm');
14127                                 my $http_query_templatelayout   = $query->param('templatelayout');
14128                                 my $http_query_templatename     = $query->param('templatename');
14129                                 my $http_query_templatedescription = $query->param('templatedescription');
14130                                 my $http_query_templatefilename = $query->param('templatefilename');
14132                                 # Check if there is a confirmed value in the http_query_confirm variable.
14134                                 if (!$http_query_confirm){
14136                                         # Since there is no confirm value, print out a form for creating a new
14137                                         # template.
14139                                         my $pagedata = kiriwrite_template_add();
14141                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14142                                         kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template");       # Output the page to browser/console/stdout.
14143                                         exit;                           # End the script.
14145                                 } else {
14147                                         # A value in the http_query_confirm value is specified, so pass the
14148                                         # variables onto the kiriwrite_template_add subroutine.
14150                                         my $pagedata = kiriwrite_template_add($http_query_templatefilename, $http_query_templatename, $http_query_templatedescription, $http_query_templatelayout, $http_query_confirm);
14152                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14153                                         kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template");       # Output the page to browser/console/stdout.
14154                                         exit;                           # End the script.
14156                                 }
14158                         } elsif ($http_query_action eq "edit") {
14160                                 # Get the required parameters from the HTTP query.
14162                                 my $http_query_templatefile     = $query->param('template');
14163                                 my $http_query_confirm          = $query->param('confirm');
14165                                 # Check to see if http_query_confirm has a value of '1' in it and
14166                                 # if it does, edit the template using the settings providied.
14168                                 if (!$http_query_confirm){
14170                                         # Since there is no confirm value, open the template configuration
14171                                         # file and the template file itself then print out the data on to
14172                                         # the form.
14174                                         my $pagedata = kiriwrite_template_edit($http_query_templatefile);
14175                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14176                                         kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template");      # Output the page to browser/console/stdout.
14177                                         exit;                           # End the script.
14179                                 } elsif ($http_query_confirm eq 1) {
14181                                         # Since there is a confirm value of 1, the user has confirm the
14182                                         # action of editing of a template so get the other variables 
14183                                         # that were also sent and pass the variables to the subroutine.
14185                                         my $http_query_newfilename      = $query->param('newfilename');
14186                                         my $http_query_newname          = $query->param('newname');
14187                                         my $http_query_newdescription   = $query->param('newdescription');
14188                                         my $http_query_newlayout        = $query->param('newlayout');
14190                                         my $pagedata = kiriwrite_template_edit($http_query_templatefile, $http_query_newfilename, $http_query_newname, $http_query_newdescription, $http_query_newlayout, $http_query_confirm);
14191                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14192                                         kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template");      # Output the page to browser/console/stdout.
14193                                         exit;                           # End the script.
14195                                 } else {
14197                                         # Another confirm value is there instead of '0' or '1'. Return
14198                                         # an error saying it is invalid.
14200                                         kiriwrite_error("invalidvariable");
14202                                 }
14204                         } else {
14206                                 # Another action was specified and was not one of the ones above, so
14207                                 # return an error.
14209                                 kiriwrite_error("invalidaction");
14211                         }
14213                 } else {
14215                         # If the action option is left blank, then print out a form where the list
14216                         # of templates are available.
14218                         my $pagedata = kiriwrite_template_list;
14220                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14221                         kiriwrite_output_page($kiriwrite_lang->{template}->{viewtemplates}, $pagedata, "template");     # Output the page to browser/console/stdout.
14222                         exit;                           # End the script.
14224                 }
14226         } elsif ($http_query_mode eq "compile"){
14228                 # The mode selected is to compile pages from databases.
14230                 # If the action option is left blank, then print out a form where the list
14231                 # of databases to compile are available.
14233                 if ($query->param('action')){
14235                         my $http_query_action = $query->param('action');
14237                         if ($http_query_action eq "compile"){
14239                                 # The specified action is to compile the pages, check if the
14240                                 # action to compile the page has been confirmed.
14242                                 my $http_query_confirm  = $query->param('confirm');
14243                                 my $http_query_type     = $query->param('type');
14245                                 # If it is blank, set the confirm value to 0.
14247                                 if (!$http_query_confirm){
14249                                         # The http_query_confirm variable is uninitalised, so place a
14250                                         # '0' (meaning an unconfirmed action).
14252                                         $http_query_confirm = 0;
14254                                 }
14256                                 # If the compile type is blank then return an error.
14258                                 if (!$http_query_type){
14260                                         # Compile type is blank so return an error.
14262                                         kiriwrite_error("blankcompiletype");
14264                                 }
14266                                 if ($http_query_type eq "multiple"){
14268                                         if ($http_query_confirm eq 1){
14270                                                 # The action to compile the pages has been confirmed so
14271                                                 # compile the pages.
14273                                                 my @selectedlist = kiriwrite_selectedlist();
14274                                                 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14276                                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14277                                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14278                                                 exit;                           # End the script.
14280                                         } else {
14282                                                 # The action to compile the pages has not been confirmed
14283                                                 # so write a form asking the user to confirm the action
14284                                                 # of compiling the pages.
14286                                                 my @selectedlist = kiriwrite_selectedlist();
14287                                                 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14289                                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14290                                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compileselecteddatabases}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14291                                                 exit;                           # End the script.
14293                                         }
14295                                 } elsif ($http_query_type eq "single"){
14297                                         my $http_query_database = $query->param('database');
14298                                         my @selectedlist;
14299                                         $selectedlist[0] = $http_query_database;
14300                                         my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14302                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14303                                         kiriwrite_output_page($kiriwrite_lang->{compile}->{compiledatabase}, $pagedata, "compile");
14304                                         exit;                           # End the script.
14306                                 } else {
14308                                         kiriwrite_error("invalidcompiletype");
14310                                 }
14312                         } elsif ($http_query_action eq "all"){
14314                                 # The selected action is to compile all of the databases
14315                                 # in the database directory. Check if the action to
14316                                 # compile all of the databases has been confirmed.
14318                                 my $http_query_confirm = $query->param('confirm');
14320                                 if (!$http_query_confirm){
14322                                         # The http_query_confirm variable is uninitalised, so place a
14323                                         # '0' (meaning an unconfirmed action).
14325                                         $http_query_confirm = 0;
14327                                 }
14329                                 if ($http_query_confirm eq 1){
14331                                         # The action to compile all the databases has been confirmed.
14333                                 }
14335                                 my $pagedata = kiriwrite_compile_all();
14337                                 kiriwrite_output_header;                        # Output the header to browser/console/stdout.
14338                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilealldatabases}, $pagedata, "compile");
14339                                 exit;
14341                         } elsif ($http_query_action eq "clean") {
14343                                 # The selected action is to clean the output directory.
14344                                 # Check if the action to clean the output directory
14345                                 # has been confirmed.
14347                                 my $http_query_confirm = $query->param('confirm');
14349                                 if (!$http_query_confirm){
14351                                         # The http_query_confirm variable is uninitalised, so place a
14352                                         # '0' (meaning an unconfirmed action).
14354                                         $http_query_confirm = 0;
14356                                 }
14358                                 if ($http_query_confirm eq 1){
14360                                         # The action to clean the output directory has been confirmed.
14362                                         my $pagedata = kiriwrite_compile_clean($http_query_confirm);
14364                                         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14365                                         kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14366                                         exit;                                   # End the script.
14367                         
14368                                 }
14370                                 # The action to clean the output directory is not
14371                                 # confirmed, so write a page asking the user
14372                                 # to confirm cleaning the output directory.
14374                                 my $pagedata = kiriwrite_compile_clean();
14376                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14377                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14378                                 exit;                                   # End the script.
14380                         } else {
14382                                 # The action specified was something else other than those
14383                                 # above, so return an error.
14385                                 kiriwrite_error("invalidaction");
14387                         }
14388                 }
14390                 my $pagedata = kiriwrite_compile_list;
14392                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14393                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14394                 exit;                                   # End the script.
14396         } elsif ($http_query_mode eq "settings"){
14398                 # The mode selected is view (and change settings).
14400                 # If the action value has been left blank, then view the list of
14401                 # current settings.
14403                 if ($query->param('action')){
14404                         my $http_query_action = $query->param('action');
14406                         if ($http_query_action eq "edit"){
14408                                 # The action specified is to edit the settings. Check if the action
14409                                 # to edit the settings has been confirmed.
14411                                 my $http_query_confirm = $query->param('confirm');
14413                                 if (!$http_query_confirm){
14415                                         # The confirm value is blank, so set it to 0.
14417                                         $http_query_confirm = 0;
14419                                 }
14421                                 if ($http_query_confirm eq 1){
14423                                         # The action to edit the settings has been confirmed. Get the
14424                                         # required settings from the HTTP query.
14426                                         my $http_query_database         = $query->param('databasedir');
14427                                         my $http_query_output           = $query->param('outputdir');
14428                                         my $http_query_imagesuri        = $query->param('imagesuripath');
14429                                         my $http_query_datetimeformat   = $query->param('datetime');
14430                                         my $http_query_systemlanguage   = $query->param('language');
14431                                         my $http_query_presmodule       = $query->param('presmodule');
14432                                         my $http_query_dbmodule         = $query->param('dbmodule');
14434                                         my $http_query_database_server          = $query->param('database_server');
14435                                         my $http_query_database_port            = $query->param('database_port');
14436                                         my $http_query_database_protocol        = $query->param('database_protocol');
14437                                         my $http_query_database_sqldatabase     = $query->param('database_sqldatabase');
14438                                         my $http_query_database_username        = $query->param('database_username');
14439                                         my $http_query_database_passwordkeep    = $query->param('database_password_keep');
14440                                         my $http_query_database_password        = $query->param('database_password');
14441                                         my $http_query_database_tableprefix     = $query->param('database_tableprefix');
14443                                         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 });
14445                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14446                                         kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14447                                         exit;                           # End the script.
14449                                 }
14451                                 # The action to edit the settings has not been confirmed.
14453                                 my $pagedata = kiriwrite_settings_edit;
14455                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14456                                 kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14457                                 exit;                           # End the script.
14459                         } else {
14461                                 # The action specified was something else other than those
14462                                 # above, so return an error.
14464                                 kiriwrite_error("invalidaction");
14466                         }
14468                 }
14470                 # No action has been specified, so print out the list of settings currently being used.
14472                 my $pagedata = kiriwrite_settings_view;
14474                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14475                 kiriwrite_output_page($kiriwrite_lang->{setting}->{viewsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14476                 exit;                                   # End the script.
14478         } else {
14479                 # Another mode has been specified than the ones above, so return an error saying that
14480                 # an invalid option was specified.
14482                 kiriwrite_error("invalidmode");
14483         }
14485 } else {
14487         # No mode has been specified, so print the default "first-run" view of the
14488         # database list.
14490         my $pagedata = kiriwrite_database_list;
14492         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14493         kiriwrite_output_page("", $pagedata, "database");       # Output the page to browser/console/stdout.
14494         exit;                                   # End the script.
14498 __END__
14500 =head1 NAME
14502 Kiriwrite
14504 =head1 DESCRIPTION
14506 Web-based webpage compiler.
14508 =head1 AUTHOR
14510 Steve Brokenshire <sbrokenshire@xestia.co.uk>
14512 =head1 USAGE
14514 This perl script is intended to be used on a web server which has CGI with Perl support or with mod_perl support.
14516 =head1 DOCUMENTATION
14518 For more information on how to use Kiriwrite, please see the documentation that was included with Kiriwrite.
14520 - From the Xestia Documentation website: http://documentation.xestia.co.uk and click on the Kiriwrite link on the page.
14522 - From the Documentation directory from the Kiriwrite source packages (.tar/.tar.gz/.tar.bz2).
14524 - 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