Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Fixed some minor bugs.
[kiriwrite/.git] / cgi-files / kiriwrite.cgi
1 #!/usr/bin/perl -Tw
3 #################################################################################
4 # Kiriwrite (kiriwrite.cgi)                                                     #
5 # Main program script                                                           #
6 #                                                                               #
7 # Version: 0.1.0                                                                #
8 #                                                                               #
9 # Copyright (C) 2005-2007 Steve Brokenshire <sbrokenshire@xestia.co.uk>         #
10 #                                                                               #
11 # This program is free software; you can redistribute it and/or modify it under #
12 # the terms of the GNU General Public License as published by the Free          #
13 # Software Foundation; as version 2 of the License.                             #
14 #                                                                               #
15 # This program is distributed in the hope that it will be useful, but WITHOUT   #
16 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
17 # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.#
18 #                                                                               #
19 # You should have received a copy of the GNU General Public License along with  #
20 # this program; if not, write to the Free Software Foundation, Inc., 51         #
21 # Franklin St, Fifth Floor, Boston, MA 02110-1301 USA                           #
22 #################################################################################
24 use strict;                             # Throw errors if there's something wrong.
25 use warnings;                           # Write warnings to the HTTP Server Log file.
27 use utf8;
28 use CGI qw(header);
29 use Tie::IxHash;
31 # This is commented out because it uses a fair bit of CPU usage.
33 #use CGI::Carp('fatalsToBrowser');      # Output errors to the browser.
35 # Declare global variables for Kiriwrite settings and languages.
37 my ($kiriwrite_config, %kiriwrite_config, $kiriwrite_lang, $kiriwrite_version, %kiriwrite_version, $kiriwrite_env, %kiriwrite_env, $kiriwrite_presmodule, $kiriwrite_dbmodule, $xsl);
39 # Setup the version information for Kiriwrite.
41 %kiriwrite_version = (
42         "major"         => 0,
43         "minor"         => 1,
44         "revision"      => 0
45 );
47 sub BEGIN{
48 #################################################################################
49 # BEGIN: Get the enviroment stuff                                               #
50 #################################################################################
52         # Get the script filename.
54         my $env_script_name = $ENV{'SCRIPT_NAME'};
56         # Process the script filename until there is only the
57         # filename itself.
59         my $env_script_name_length = length($env_script_name);
60         my $filename_seek = 0;
61         my $filename_char = "";
62         my $filename_last = 0;
64         do {
65                 $filename_char = substr($env_script_name, $filename_seek, 1);
66                 if ($filename_char eq "/"){
67                         $filename_last = $filename_seek + 1;
68                 }
69                 $filename_seek++;
70         } until ($filename_seek eq $env_script_name_length || $env_script_name_length eq 0);
72         my $env_script_name_finallength = $env_script_name_length - $filename_last;
73         my $script_filename = substr($env_script_name, $filename_last, $env_script_name_finallength);
75         # Setup the needed enviroment variables for Kiriwrite.
77         %kiriwrite_env = (
78                 "script_filename" => $script_filename,
79         );
81         $ENV{XML_SIMPLE_PREFERRED_PARSER} = "XML::Parser";
83 }
85 #################################################################################
86 # Begin listing the functions needed.                                           #
87 #################################################################################
89 sub kiriwrite_page_add{
90 #################################################################################
91 # kiriwrite_page_add: Adds a page to a database                                 #
92 #                                                                               #
93 # Usage:                                                                        #
94 #                                                                               #
95 # kiriwrite_page_add(database, pagefilename, title, description, section,       #
96 #                       template, settings, info, confirm);                     #
97 #                                                                               #
98 # database      Specifies the database name.                                    #
99 # pagefilename  Specifies the page filename.                                    #
100 # title         Specifies the page title to be used.                            #
101 # description   Specifies the short description of the page.                    #
102 # section       Specifies the section assigned to the page.                     #
103 # template      Specifies the template to use.                                  #
104 # settings      Specifies the settings to be used on the page.                  #
105 # data          Specifies the data which consists the page.                     #
106 # confirm       Confirms action to add an page.                                 #
107 #################################################################################
109         # Fetch the required variables that have been passed to the subroutine.
111         my ($pagedatabase, $pagefilename, $pagetitle, $pagedescription, $pagesection, $pagetemplate, $pagesettings, $pagefiledata, $confirm) = @_;
113         # Check if the action to add a new page has been confirmed (or not).
115         if (!$confirm){
117                 $confirm = 0;
119         }
121         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
123         # Check if the database filename is valid and return an error if
124         # it isn't.
126         my $pagedatabase_filename_check = kiriwrite_variablecheck($pagedatabase, "filename", 0, 1);
128         if ($pagedatabase_filename_check eq 1){
130                 # The database filename is blank, so return an error.
132                 kiriwrite_error("blankdatabasepageadd");
134         } elsif ($pagedatabase_filename_check eq 2){
136                 # The database filename is invalid, so return an error.
138                 kiriwrite_error("databasefilenameinvalid");
140         }
142         # Check the length the database name and return an error if it's
143         # too long.
145         my $pagedatabase_length_check   = kiriwrite_variablecheck($pagedatabase, "maxlength", 32, 1);
147         if ($pagedatabase_length_check eq 1){
149                 # The database name is too long, so return an error.
151                 kiriwrite_error("databasefilenametoolong");
153         }
155         if ($confirm eq "1"){
157                 # Check all the variables to see if they UTF8 valid.
159                 kiriwrite_variablecheck($pagefilename, "utf8", 0, 0);
160                 kiriwrite_variablecheck($pagetitle, "utf8", 0, 0);
161                 kiriwrite_variablecheck($pagedescription, "utf8", 0, 0);
162                 kiriwrite_variablecheck($pagesection, "utf8", 0, 0);
163                 kiriwrite_variablecheck($pagedatabase, "utf8", 0, 0);
164                 kiriwrite_variablecheck($pagesettings, "utf8", 0, 0);
165                 kiriwrite_variablecheck($pagetemplate, "utf8", 0, 0);
166                 kiriwrite_variablecheck($pagefiledata, "utf8", 0, 0);
168                 # Convert the values into proper UTF8 values.
170                 $pagefilename           = kiriwrite_utf8convert($pagefilename);
171                 $pagetitle              = kiriwrite_utf8convert($pagetitle);
172                 $pagedescription        = kiriwrite_utf8convert($pagedescription);
173                 $pagesection            = kiriwrite_utf8convert($pagesection);
174                 $pagedatabase           = kiriwrite_utf8convert($pagedatabase);
175                 $pagesettings           = kiriwrite_utf8convert($pagesettings);
176                 $pagetemplate           = kiriwrite_utf8convert($pagetemplate);
177                 $pagefiledata           = kiriwrite_utf8convert($pagefiledata);
179                 # Check all the variables (except for the page data, filename and settings 
180                 # will be checked more specifically later if needed) that were passed to 
181                 # the subroutine.
183                 my $pagefilename_maxlength_check                = kiriwrite_variablecheck($pagefilename, "maxlength", 256, 1);
184                 my $pagetitle_maxlength_check                   = kiriwrite_variablecheck($pagetitle, "maxlength", 512, 1);
185                 my $pagedescription_maxlength_check             = kiriwrite_variablecheck($pagedescription, "maxlength", 512, 1);
186                 my $pagesection_maxlength_check                 = kiriwrite_variablecheck($pagesection, "maxlength", 256, 1);
187                 my $pagedatabase_maxlength_check                = kiriwrite_variablecheck($pagedatabase, "maxlength", 32, 1);
188                 my $pagesettings_maxlength_check                = kiriwrite_variablecheck($pagesettings, "maxlength", 1, 1);
189                 my $pagetemplate_maxlength_check                = kiriwrite_variablecheck($pagetemplate, "maxlength", 64, 1);
191                 # Check if an value returned is something else other than 0.
193                 if ($pagefilename_maxlength_check eq 1){
195                         # The page filename given is too long, so return an error.
197                         kiriwrite_error("pagefilenametoolong");
199                 }
201                 if ($pagetitle_maxlength_check eq 1){
203                         # The page title given is too long, so return an error.
205                         kiriwrite_error("pagetitletoolong");
207                 }
209                 if ($pagedescription_maxlength_check eq 1){
211                         # The page description given is too long, so return an error.
213                         kiriwrite_error("pagedescriptiontoolong");
215                 }
217                 if ($pagesection_maxlength_check eq 1){
219                         # The page section given is too long, so return an error.
221                         kiriwrite_error("pagesectiontoolong");
223                 }
225                 if ($pagedatabase_maxlength_check eq 1){
227                         # The page database given is too long, so return an error.
229                         kiriwrite_error("pagedatabasefilenametoolong");
231                 }
233                 if ($pagesettings_maxlength_check eq 1){
235                         # The page settings given is too long, so return an error.
237                         kiriwrite_error("pagesettingstoolong");
239                 }
241                 if ($pagetemplate_maxlength_check eq 1){
243                         # The page template given is too long, so return an error.
245                         kiriwrite_error("pagetemplatefilenametoolong");
247                 }
249                 # The action to create a new page has been confirmed, so add the page to the
250                 # selected database.
252                 if (!$pagefilename){
253                         kiriwrite_error("pagefilenameblank");
254                 }
256                 # Check the page filename and page settings.
258                 my $pagefilename_filename_check = kiriwrite_variablecheck($pagefilename, "page_filename", 0, 1);
259                 my $pagesettings_setting_check  = kiriwrite_variablecheck($pagesettings, "pagesetting", 0, 1);
260                 my $pagetemplate_filename_check = 0;
262                 if ($pagetemplate ne "!none"){
264                         # A template is being used so check the filename of the
265                         # template.
267                         $pagetemplate_filename_check    = kiriwrite_variablecheck($pagetemplate, "page_filename", 0, 1);
269                 }
271                 if ($pagefilename_filename_check ne 0){
273                         # The page filename given is invalid, so return an error.
275                         kiriwrite_error("pagefilenameinvalid");
277                 }
279                 if ($pagesettings_setting_check eq 1){
281                         # The page settings given is invalid, so return an error.
283                         kiriwrite_error("pagesettingsinvalid");
285                 }
287                 if ($pagetemplate_filename_check eq 1){
289                         # The template filename given is invalid, so return an error
291                         kiriwrite_error("templatefilenameinvalid");
293                 }
295                 # Check if the database has write permissions.
297                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($pagedatabase, 1, 1);
299                 if ($database_permissions eq 1){
301                         # The database permissions are invalid so return an error.
303                         kiriwrite_error("databaseinvalidpermissions");
305                 }
307                 # Connect to the database server.
309                 $kiriwrite_dbmodule->connect();
311                 # Check if any errors occured while connecting to the database server.
313                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
315                         # A database connection error has occured so return
316                         # an error.
318                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
320                 }
322                 # Select the database to add the page to.
324                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $pagedatabase });
326                 # Check if any errors had occured while selecting the database.
328                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
330                         # The database does not exist, so return an error.
332                         kiriwrite_error("databasemissingfile");
334                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
336                         # The database has invalid permissions set, so return
337                         # an error.
339                         kiriwrite_error("databaseinvalidpermissions");
341                 }
343                 # Get information about the database.
345                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
347                 # Check if any error occured while getting the database information.
349                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
351                         # A database error has occured so return an error and
352                         # also the extended error information.
354                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
356                 };
358                 # Add the page to the selected database.
360                 $kiriwrite_dbmodule->addpage({ PageFilename => $pagefilename, PageName => $pagetitle, PageDescription => $pagedescription, PageSection => $pagesection, PageTemplate => $pagetemplate, PageContent => $pagefiledata, PageSettings => $pagesettings });
362                 # Check if any errors occured while adding the page.
364                 if ($kiriwrite_dbmodule->geterror eq "PageExists"){
366                         # A page with the filename given already exists so
367                         # return an error.
369                         kiriwrite_error("pagefilenameexists");
371                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
373                         # A database error has occured so return an error
374                         # with extended error information.
376                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
378                 }
380                 my $database_name = $database_info{"DatabaseName"};
382                 # Disconnect from the database server.
384                 $kiriwrite_dbmodule->disconnect();
386                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{addpage}, { Style => "pageheader" });
387                 $kiriwrite_presmodule->addlinebreak();
388                 $kiriwrite_presmodule->addlinebreak();
389                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pageaddedmessage}, $pagetitle, $database_name));
390                 $kiriwrite_presmodule->addlinebreak();
391                 $kiriwrite_presmodule->addlinebreak();
392                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $pagedatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
394                 return $kiriwrite_presmodule->grab();
396         } elsif ($confirm eq 0) {
398                 # The action to create a new page has not been confirmed, so print out a form
399                 # for adding a page to a database.
401                 my %template_list;
402                 my %template_info;
403                 my @templates_list;
404                 my %database_info;
405                 my $template_filename;
406                 my $template_name;
407                 my $template_data = "";
408                 my $template_warningmessage;
409                 my $template_warning = 0;
410                 my $template_count = 0;
411                 my $template;
413                 tie(%template_list, 'Tie::IxHash');
415                 # Connect to the database server.
417                 $kiriwrite_dbmodule->connect();
419                 # Check if any errors occured while connecting to the database server.
421                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
423                         # A database connection error has occured so return
424                         # an error.
426                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
428                 }
430                 # Select the database.
432                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $pagedatabase });
434                 # Check if any errors had occured while selecting the database.
436                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
438                         # The database does not exist, so return an error.
440                         kiriwrite_error("databasemissingfile");
442                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
444                         # The database has invalid permissions set, so return
445                         # an error.
447                         kiriwrite_error("databaseinvalidpermissions");
449                 }
451                 # Check if the database has write permissions.
453                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($pagedatabase, 1, 1);
455                 if ($database_permissions eq 1){
457                         # The database permissions are invalid so return an error.
459                         kiriwrite_error("databaseinvalidpermissions");
461                 }
463                 # Get information about the database.
465                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
467                 # Check if any error occured while getting the database information.
469                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
471                         # A database error has occured so return an error and
472                         # also the extended error information.
474                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
476                 };
478                 # Connect to the template database.
480                 $kiriwrite_dbmodule->connecttemplate();
482                 # Check if any errors occured while connecting to the template database.
484                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
486                         # The template database does not exist so set the template
487                         # warning message.
489                         $template_warningmessage = $kiriwrite_lang->{pages}->{notemplatedatabase};
490                         $template_warning = 1;
492                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
494                         # The template database has invalid permissions set so write
495                         # the template warning message.
497                         $template_warningmessage = $kiriwrite_lang->{pages}->{templatepermissionserror};
498                         $template_warning = 1;
500                 }
502                 if ($template_warning eq 0){
504                         # Get the list of templates available.
506                         @templates_list = $kiriwrite_dbmodule->gettemplatelist();
508                         # Check if any errors had occured.
510                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
512                                 # A database error occured while getting the list
513                                 # of templates so return a warning message with the 
514                                 # extended error information.
516                                 $template_warningmessage = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1));
517                                 $template_warning = 1;
519                         }
521                         if ($template_warning eq 0){
523                                 # Check to see if there are any templates in the templates
524                                 # list array.
526                                 my $template_filename = "";
527                                 my $template_name = "";
529                                 foreach $template (@templates_list){
531                                         # Get information about the template.
533                                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
535                                         # Check if any error occured while getting the template information.
537                                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
539                                                 # A database error has occured, so return an error.
541                                                 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
543                                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
545                                                 # The template does not exist, so process the next template.
547                                                 next;
549                                         }
551                                         # Get the template filename and name.
553                                         $template_filename = $template_info{"TemplateFilename"};
554                                         $template_name = $template_info{"TemplateName"};
556                                         $template_list{$template_count}{Filename} = $template_filename;
557                                         $template_list{$template_count}{Name} = $template_name;
559                                         $template_count++;
561                                 }
563                                 # Check if the final template list is blank.
565                                 if (!%template_list){
567                                         # The template list is blank so write the template
568                                         # warning message.
570                                         $template_warningmessage = $kiriwrite_lang->{pages}->{notemplatesavailable};
572                                 }
574                         }
576                 }
578                 my $database_name       = $database_info{"DatabaseName"};
580                 # Disconnect from the template database.
582                 $kiriwrite_dbmodule->disconnecttemplate();
584                 # Disconnect from the database server.
586                 $kiriwrite_dbmodule->disconnect();
588                 # write out the form for adding a page.
590                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{addpage}, { Style => "pageheader" });
591                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");#
592                 $kiriwrite_presmodule->startbox();
593                 $kiriwrite_presmodule->addhiddendata("mode", "page");
594                 $kiriwrite_presmodule->addhiddendata("action", "add");
595                 $kiriwrite_presmodule->addhiddendata("database", $pagedatabase);
596                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
597                 $kiriwrite_presmodule->addlinebreak();
598                 $kiriwrite_presmodule->endbox();
599                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
601                 $kiriwrite_presmodule->startheader();
602                 $kiriwrite_presmodule->addcell("tablecellheader");
603                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{setting});
604                 $kiriwrite_presmodule->endcell();
605                 $kiriwrite_presmodule->addcell("tablecellheader");
606                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{value});
607                 $kiriwrite_presmodule->endcell();
608                 $kiriwrite_presmodule->endheader();
610                 $kiriwrite_presmodule->startrow();
611                 $kiriwrite_presmodule->addcell("tablecell1");
612                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{database});
613                 $kiriwrite_presmodule->endcell();
614                 $kiriwrite_presmodule->addcell("tablecell2");
615                 $kiriwrite_presmodule->addtext($database_name);
616                 $kiriwrite_presmodule->endcell();
617                 $kiriwrite_presmodule->endrow();
619                 $kiriwrite_presmodule->startrow();
620                 $kiriwrite_presmodule->addcell("tablecell1");
621                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagename});
622                 $kiriwrite_presmodule->endcell();
623                 $kiriwrite_presmodule->addcell("tablecell2");
624                 $kiriwrite_presmodule->addinputbox("pagename", { Size => 64, MaxLength => 512 });
625                 $kiriwrite_presmodule->endcell();
626                 $kiriwrite_presmodule->endrow();
628                 $kiriwrite_presmodule->startrow();
629                 $kiriwrite_presmodule->addcell("tablecell1");
630                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedescription});
631                 $kiriwrite_presmodule->endcell();
632                 $kiriwrite_presmodule->addcell("tablecell2");
633                 $kiriwrite_presmodule->addinputbox("pagedescription", { Size => 64, MaxLength => 512 });
634                 $kiriwrite_presmodule->endcell();
635                 $kiriwrite_presmodule->endrow();
637                 $kiriwrite_presmodule->startrow();
638                 $kiriwrite_presmodule->addcell("tablecell1");
639                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
640                 $kiriwrite_presmodule->endcell();
641                 $kiriwrite_presmodule->addcell("tablecell2");
642                 $kiriwrite_presmodule->addinputbox("pagesection", { Size => 64, MaxLength => 256 });
643                 $kiriwrite_presmodule->endcell();
644                 $kiriwrite_presmodule->endrow();
646                 $kiriwrite_presmodule->startrow();
647                 $kiriwrite_presmodule->addcell("tablecell1");
648                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
649                 $kiriwrite_presmodule->endcell();
650                 $kiriwrite_presmodule->addcell("tablecell2");
652                 # Check if the template warning value has been set
653                 # and write the error message in place of the templates
654                 # list if it is.
656                 if ($template_warning eq 1){
658                         $kiriwrite_presmodule->addhiddendata("pagetemplate", "!none");
659                         $kiriwrite_presmodule->addtext($template_warningmessage);
661                 } else {
663                         my $template_file;
664                         my $page_filename;
665                         my $page_name;
667                         $kiriwrite_presmodule->addselectbox("pagetemplate");
669                         foreach $template_file (keys %template_list){
671                                 $page_filename  = $template_list{$template_file}{Filename};
672                                 $page_name      = $template_list{$template_file}{Name};
673                                 $kiriwrite_presmodule->addoption($page_name . " (" . $page_filename . ")", { Value => $page_filename });
674                                 $template_count++;
676                                 $template_count = 0;
677                         }
679                         $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
680                         $kiriwrite_presmodule->endselectbox();
682                 }
684                 $kiriwrite_presmodule->endcell();
685                 $kiriwrite_presmodule->endrow();
687                 $kiriwrite_presmodule->startrow();
688                 $kiriwrite_presmodule->addcell("tablecell1");
689                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagefilename});
690                 $kiriwrite_presmodule->endcell();
691                 $kiriwrite_presmodule->addcell("tablecell2");
692                 $kiriwrite_presmodule->addinputbox("pagefilename", { Size => 64, MaxLength => 256 });
693                 $kiriwrite_presmodule->endcell();
694                 $kiriwrite_presmodule->endrow();
696                 $kiriwrite_presmodule->startrow();
697                 $kiriwrite_presmodule->addcell("tablecell1");
698                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagecontent});
699                 $kiriwrite_presmodule->endcell();
700                 $kiriwrite_presmodule->addcell("tablecell2");
701                 $kiriwrite_presmodule->addtextbox("pagecontent", { Columns => 50, Rows => 10 });
702                 $kiriwrite_presmodule->addlinebreak();
703                 $kiriwrite_presmodule->addlinebreak();
704                 $kiriwrite_presmodule->startbox("datalist");
705                 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
706                 $kiriwrite_presmodule->addlinebreak();
707                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
708                 $kiriwrite_presmodule->addlinebreak();
709                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
710                 $kiriwrite_presmodule->addlinebreak();
711                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
712                 $kiriwrite_presmodule->addlinebreak();
713                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
714                 $kiriwrite_presmodule->addlinebreak();
715                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
716                 $kiriwrite_presmodule->addlinebreak();
717                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
718                 $kiriwrite_presmodule->addlinebreak();
719                 $kiriwrite_presmodule->endbox();
720                 $kiriwrite_presmodule->endcell();
721                 $kiriwrite_presmodule->endrow();
723                 $kiriwrite_presmodule->startrow();
724                 $kiriwrite_presmodule->addcell("tablecell1");
725                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
726                 $kiriwrite_presmodule->endcell();
727                 $kiriwrite_presmodule->addcell("tablecell2");
728                 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", Selected => 1, LineBreak => 1});
729                 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", Selected => 0, LineBreak => 1});
730                 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", Selected => 0, LineBreak => 1});
731                 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", Selected => 0, LineBreak => 1});
732                 $kiriwrite_presmodule->endcell();
733                 $kiriwrite_presmodule->endrow();
735                 $kiriwrite_presmodule->endtable();
737                 $kiriwrite_presmodule->startbox();
738                 $kiriwrite_presmodule->addlinebreak();
739                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{addpagebutton});
740                 $kiriwrite_presmodule->addtext(" | ");
741                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
742                 $kiriwrite_presmodule->addtext(" | ");
743                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $pagedatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
744                 $kiriwrite_presmodule->endbox();
745                 $kiriwrite_presmodule->endform();
748                 return $kiriwrite_presmodule->grab();
750         } else {
752                 # The confirm value is something else than '1' or '0' so
753                 # return an error.
755                 kiriwrite_error("invalidvalue");
757         }
763 sub kiriwrite_page_delete{
764 #################################################################################
765 # kiriwrite_page_delete: Deletes a (single) page from a database.               #
766 #                                                                               #
767 # Usage:                                                                        #
768 #                                                                               #
769 # kiriwrite_page_delete(database, page, [confirm]);                             #
770 #                                                                               #
771 # database      Specifies the database to delete from.                          #
772 # page          Specifies the page to delete.                                   #
773 # confirm       Confirms the action to delete the page.                         #
774 #################################################################################
776         my ($database, $page, $confirm) = @_;
778         # Check if the database filename is valid and return an error if
779         # it isn't.
781         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
783         if ($pagedatabase_filename_check eq 1){
785                 # The database filename is blank, so return an error.
787                 kiriwrite_error("blankdatabasepageadd");
789         } elsif ($pagedatabase_filename_check eq 2){
791                 # The database filename is invalid, so return an error.
793                 kiriwrite_error("databasefilenameinvalid");
795         }
797         # Check the length the database name and return an error if it's
798         # too long.
800         my $pagedatabase_length_check   = kiriwrite_variablecheck($database, "maxlength", 32, 1);
802         if ($pagedatabase_length_check eq 1){
804                 # The database name is too long, so return an error.
806                 kiriwrite_error("databasefilenametoolong");
808         }
810         # Check if the page name is specified is blank and return an error if
811         # it is.
813         if (!$page){
815                 # The page name is blank, so return an error.
817                 kiriwrite_error("blankfilename");
819         }
821         # If the confirm value is blank, then set the confirm value to 0.
823         if (!$confirm){
825                 $confirm = 0;
827         }
829         if ($confirm eq 1){
831                 # The action to delete the selected page from the database
832                 # has been confirmed.
834                 # Connect to the database server.
836                 $kiriwrite_dbmodule->connect();
838                 # Check if any errors occured while connecting to the database server.
840                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
842                         # A database connection error has occured so return
843                         # an error.
845                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
847                 }
849                 # Select the database to delete the page from.
851                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
853                 # Check if any errors had occured while selecting the database.
855                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
857                         # The database does not exist, so return an error.
859                         kiriwrite_error("databasemissingfile");
861                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
863                         # The database has invalid permissions set, so return
864                         # an error.
866                         kiriwrite_error("databaseinvalidpermissions");
868                 }
870                 # Check if the database has write permissions.
872                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
874                 if ($database_permissions eq 1){
876                         # The database permissions are invalid so return an error.
878                         kiriwrite_error("databaseinvalidpermissions");
880                 }
882                 # Get the information about the database.
884                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
886                 # Check if any error occured while getting the database information.
888                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
890                         # A database error has occured so return an error and
891                         # also the extended error information.
893                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
895                 }
897                 # Get the information about the page that is going to be deleted.
899                 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
901                 # Check if any errors occured while getting the page information.
903                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
905                         # A database error has occured so return an error and
906                         # also the extended error information.
908                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
910                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
912                         # The page does not exist, so return an error.
914                         kiriwrite_error("pagefilenamedoesnotexist");
916                 }
918                 # Delete the page from the database.
920                 $kiriwrite_dbmodule->deletepage({ PageFilename => $page });
922                 # Check if any errors occured while deleting the page from the database.
924                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
926                         # A database error has occured so return an error and
927                         # also the extended error information.
929                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
931                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
933                         # The page does not exist, so return an error.
935                         kiriwrite_error("pagefilenamedoesnotexist");
937                 }
939                 # Get the database name and page name.
941                 my $database_name       = $database_info{"DatabaseName"};
942                 my $page_name           = $page_info{"PageName"};
944                 # Disconnect from the database server.
946                 $kiriwrite_dbmodule->disconnect();
948                 # Write out a message saying that the selected page from
949                 # the database has been deleted.
951                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedeleted}, { Style => "pageheader" });
952                 $kiriwrite_presmodule->addlinebreak();
953                 $kiriwrite_presmodule->addlinebreak();
954                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagedeletedmessage}, $page_name, $database_name));
955                 $kiriwrite_presmodule->addlinebreak();
956                 $kiriwrite_presmodule->addlinebreak();
957                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
959                 return $kiriwrite_presmodule->grab();
961         } elsif ($confirm eq 0){
963                 # Connect to the database server.
965                 $kiriwrite_dbmodule->connect();
967                 # Check if any errors occured while connecting to the database server.
969                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
971                         # A database connection error has occured so return
972                         # an error.
974                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
976                 }
978                 # Select the database.
980                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
982                 # Check if any errors had occured while selecting the database.
984                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
986                         # The database does not exist, so return an error.
988                         kiriwrite_error("databasemissingfile");
990                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
992                         # The database has invalid permissions set, so return
993                         # an error.
995                         kiriwrite_error("databaseinvalidpermissions");
997                 }
999                 # Get information about the database.
1001                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1003                 # Check if any errors occured while getting the database information.
1005                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1007                         # A database error has occured so return an error and
1008                         # also the extended error information.
1010                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1012                 }
1014                 # Get information about the page that is going to be deleted.
1016                 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
1018                 # Check if any errors occured while getting the page information.
1020                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1022                         # A database error has occured so return an error and
1023                         # also the extended error information.
1025                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1027                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1029                         # The page does not exist, so return an error.
1031                         kiriwrite_error("pagefilenamedoesnotexist");
1033                 }
1035                 my $database_name       = $database_info{"DatabaseName"};
1036                 my $page_name           = $page_info{"PageName"};
1038                 # Disconnect from the database server.
1040                 $kiriwrite_dbmodule->disconnect();
1042                 # Write a message asking the user to confirm the deletion of the
1043                 # page.
1045                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletepage}, $page_name), { Style => "pageheader" });
1046                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1047                 $kiriwrite_presmodule->startbox();
1048                 $kiriwrite_presmodule->addhiddendata("mode", "page");
1049                 $kiriwrite_presmodule->addhiddendata("action", "delete");
1050                 $kiriwrite_presmodule->addhiddendata("database", $database);
1051                 $kiriwrite_presmodule->addhiddendata("page", $page);
1052                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
1053                 $kiriwrite_presmodule->addlinebreak();
1054                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletepagemessage}, $page_name, $database_name));
1055                 $kiriwrite_presmodule->addlinebreak();
1056                 $kiriwrite_presmodule->addlinebreak();
1057                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{deletepagebutton});
1058                 $kiriwrite_presmodule->addtext(" | ");
1059                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{deletepagesreturnlink}, $database_name)});
1060                 $kiriwrite_presmodule->endbox();
1061                 $kiriwrite_presmodule->endform();
1063                 return $kiriwrite_presmodule->grab();
1065         } else {
1067                 # Another page deletion type was specified, so return an error.
1069                 kiriwrite_error("invalidoption");
1071         }
1075 sub kiriwrite_page_edit{
1076 #################################################################################
1077 # kiriwrite_page_edit: Edits a page from a database.                            #
1078 #                                                                               #
1079 # Usage:                                                                        #
1080 #                                                                               #
1081 # kiriwrite_page_edit(database, filename, newfilename, newname, newdescription, #
1082 #                       newsection, newtemplate,  newsettings, newpagecontent   #
1083 #                       confirm);                                               #
1084 #                                                                               #
1085 # database       Specifies the database to edit from.                           #
1086 # filename       Specifies the filename to use.                                 #
1087 # newfilename    Specifies the new page filename to use.                        #
1088 # newname        Specifies the new page name to use.                            #
1089 # newdescription Specifies the new description for the page.                    #
1090 # newsection     Specifies the new section name to use.                         #
1091 # newtemplate    Specifies the new template filename to use.                    #
1092 # newsettings    Specifies the new page settings to use.                        #
1093 # newpagecontent Specifies the new page content to use.                         #
1094 # confirm        Confirms the action to edit the page.                          #
1095 #################################################################################
1097         # Get the values that have been passed to the subroutine.
1099         my ($database, $pagefilename, $pagenewfilename, $pagenewtitle, $pagenewdescription, $pagenewsection, $pagenewtemplate, $pagenewsettings, $pagenewcontent, $confirm) = @_;
1101         # Check if the confirm value is blank and if it is, then set it to '0'.
1103         if (!$confirm){
1105                 $confirm = 0;
1107         }
1109         # Check if the confirm value is more than one character long and if it
1110         # is then return an error.
1112         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
1114         # Check if the database filename is valid and return an error if
1115         # it isn't.
1117         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
1119         if ($pagedatabase_filename_check eq 1){
1121                 # The database filename is blank, so return an error.
1123                 kiriwrite_error("blankdatabasepageadd");
1125         } elsif ($pagedatabase_filename_check eq 2){
1127                 # The database filename is invalid, so return an error.
1129                 kiriwrite_error("databasefilenameinvalid");
1131         }
1133         # Check the length the database name and return an error if it's
1134         # too long.
1136         my $pagedatabase_length_check   = kiriwrite_variablecheck($database, "maxlength", 32, 1);
1138         if ($pagedatabase_length_check eq 1){
1140                 # The database name is too long, so return an error.
1142                 kiriwrite_error("databasefilenametoolong");
1144         }
1146         # Check if the page identification number is blank (which it shouldn't
1147         # be) and if it is, then return an error.
1149         if (!$pagefilename){
1151                 kiriwrite_error("blankfilename");
1153         }
1155         # Check if the confirm value is '1' and if it is, edit the specified
1156         # page in the database.
1158         if ($confirm eq 1){
1160                 # Check if the new page filename is blank.
1162                 if (!$pagenewfilename){
1164                         # The page filename is blank so return an error.
1166                         kiriwrite_error("pagefilenameblank");
1168                 }
1170                 # The action to edit a page has been confirmed so check the
1171                 # variables recieved are UTF8 compiliant before converting.
1173                 kiriwrite_variablecheck($database, "utf8", 0, 0);
1174                 kiriwrite_variablecheck($pagefilename, "utf8", 0, 0);
1175                 kiriwrite_variablecheck($pagenewfilename, "utf8", 0, 0);
1176                 kiriwrite_variablecheck($pagenewtitle, "utf8", 0, 0);
1177                 kiriwrite_variablecheck($pagenewdescription, "utf8", 0, 0);
1178                 kiriwrite_variablecheck($pagenewsection, "utf8", 0, 0);
1179                 kiriwrite_variablecheck($pagenewsettings, "utf8", 0, 0);
1180                 kiriwrite_variablecheck($pagenewtemplate, "utf8", 0, 0);
1181                 kiriwrite_variablecheck($pagenewcontent, "utf8", 0, 0);
1183                 # Convert the variables into proper UTF8 variables.
1185                 $database               = kiriwrite_utf8convert($database);
1186                 $pagefilename           = kiriwrite_utf8convert($pagefilename);
1187                 $pagenewfilename        = kiriwrite_utf8convert($pagenewfilename);
1188                 $pagenewtitle           = kiriwrite_utf8convert($pagenewtitle);
1189                 $pagenewdescription     = kiriwrite_utf8convert($pagenewdescription);
1190                 $pagenewsection         = kiriwrite_utf8convert($pagenewsection);
1191                 $pagenewsettings        = kiriwrite_utf8convert($pagenewsettings);
1192                 $pagenewtemplate        = kiriwrite_utf8convert($pagenewtemplate);
1193                 $pagenewcontent         = kiriwrite_utf8convert($pagenewcontent);
1195                 # Check the lengths of the variables.
1197                 my $pagenewfilename_maxlength_check     = kiriwrite_variablecheck($pagenewfilename, "maxlength", 256, 1);
1198                 my $pagenewtitle_maxlength_check        = kiriwrite_variablecheck($pagenewtitle, "maxlength", 512, 1);
1199                 my $pagenewdescription_maxlength_check  = kiriwrite_variablecheck($pagenewdescription, "maxlength", 512, 1);
1200                 my $pagenewsection_maxlength_check      = kiriwrite_variablecheck($pagenewsection, "maxlength", 256, 1);
1201                 my $pagenewsettings_maxlength_check     = kiriwrite_variablecheck($pagenewsettings, "maxlength", 1, 1);
1202                 my $pagenewtemplate_maxlength_check     = kiriwrite_variablecheck($pagenewtemplate, "maxlength", 64, 1);
1204                 # Check each result to see if the length of the variable
1205                 # is valid and return an error if it isn't.
1207                 if ($pagenewfilename_maxlength_check eq 1){
1209                         # The new page filename given is too long, so return an error.
1211                         kiriwrite_error("pagefilenametoolong");
1213                 }
1215                 if ($pagenewtitle_maxlength_check eq 1){
1217                         # The new page title given is too long, so return an error.
1219                         kiriwrite_error("pagetitletoolong");
1221                 }
1223                 if ($pagenewdescription_maxlength_check eq 1){
1225                         # The new page description given is too long, so return an error.
1227                         kiriwrite_error("pagedescriptiontoolong");
1229                 }
1231                 if ($pagenewsection_maxlength_check eq 1){
1233                         # The new page section given is too long, so return an error.
1235                         kiriwrite_error("pagesectiontoolong");
1237                 }
1239                 if ($pagenewsettings_maxlength_check eq 1){
1241                         # The new page settings given is too long, so return an error.
1243                         kiriwrite_error("pagesettingstoolong");
1245                 }
1247                 if ($pagenewtemplate_maxlength_check eq 1){
1249                         # The new page template given is too long, so return an error.
1251                         kiriwrite_error("pagetemplatefilenametoolong");
1253                 }
1255                 # Check if the new page filename and new page settings
1256                 # are valid.
1258                 my $pagenewfilename_filename_check      = kiriwrite_variablecheck($pagenewfilename, "page_filename", 0, 1);
1259                 my $pagenewsettings_settings_check      = kiriwrite_variablecheck($pagenewsettings, "pagesetting", 0, 1);
1260                 my $pagetemplate_filename_check = 0;
1262                 if ($pagenewtemplate ne "!none"){
1264                         # A template is being used so check the filename of the
1265                         # template.
1267                         $pagetemplate_filename_check    = kiriwrite_variablecheck($pagenewtemplate, "page_filename", 0, 1);
1269                 }
1271                 # Check each result to see if the variables have passed
1272                 # their tests and return an error if they haven't.
1274                 if ($pagenewfilename_filename_check ne 0){
1276                         # The new page filename is invalid, so return an error.
1278                         kiriwrite_error("pagefilenameinvalid");
1280                 }
1282                 if ($pagenewsettings_settings_check eq 1){
1284                         # The new page settings is invalid, so return an error.
1286                         kiriwrite_error("pagesettingsinvalid");
1288                 }
1290                 if ($pagetemplate_filename_check eq 1){
1292                         # The template filename given is invalid, so return an error
1294                         kiriwrite_error("templatefilenameinvalid");
1296                 }
1298                 # Connect to the database server.
1300                 $kiriwrite_dbmodule->connect();
1302                 # Check if any errors occured while connecting to the database server.
1304                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1306                         # A database connection error has occured so return
1307                         # an error.
1309                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1311                 }
1313                 # Select the database.
1315                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1317                 # Check if any errors had occured while selecting the database.
1319                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1321                         # The database does not exist, so return an error.
1323                         kiriwrite_error("databasemissingfile");
1325                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1327                         # The database has invalid permissions set, so return
1328                         # an error.
1330                         kiriwrite_error("databaseinvalidpermissions");
1332                 }
1334                 # Check if the database has write permissions.
1336                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
1338                 if ($database_permissions eq 1){
1340                         # The database permissions are invalid so return an error.
1342                         kiriwrite_error("databaseinvalidpermissions");
1344                 }
1346                 # Get the database information.
1348                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1350                 # Check if any errors had occured while getting the database information.
1352                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1354                         # A database error has occured so return an error and
1355                         # also the extended error information.
1357                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1359                 };
1361                 my $database_name = $database_info{"DatabaseName"};
1363                 # Edit the selected page.
1365                 $kiriwrite_dbmodule->editpage({ PageFilename => $pagefilename, PageNewFilename => $pagenewfilename, PageNewName => $pagenewtitle, PageNewDescription => $pagenewdescription, PageNewSection => $pagenewsection, PageNewTemplate => $pagenewtemplate, PageNewContent => $pagenewcontent, PageNewSettings => $pagenewsettings });
1367                 # Check if any errors occured while editing the page.
1369                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1371                         # A database error has occured so return an error and
1372                         # also the extended error information.
1374                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1376                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1378                         # The pages does not exist in the database.
1380                         kiriwrite_error("pagefilenamedoesnotexist");
1382                 } elsif ($kiriwrite_dbmodule->geterror eq "PageExists"){
1384                         # A page already exists with the new filename.
1386                         kiriwrite_error("pagefilenameexists");
1388                 }
1390                 # Disconnect from the database server.
1392                 $kiriwrite_dbmodule->disconnect();
1394                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{editedpage}, { Style => "pageheader" });
1395                 $kiriwrite_presmodule->addlinebreak();
1396                 $kiriwrite_presmodule->addlinebreak();
1397                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{editedpagemessage}, $pagenewtitle));
1398                 $kiriwrite_presmodule->addlinebreak();
1399                 $kiriwrite_presmodule->addlinebreak();
1400                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
1402                 return $kiriwrite_presmodule->grab();
1404         } elsif ($confirm eq 0) {
1406                 # Connect to the database server.
1408                 $kiriwrite_dbmodule->connect();
1410                 # Check if any errors occured while connecting to the database server.
1412                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1414                         # A database connection error has occured so return
1415                         # an error.
1417                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1419                 }
1421                 # Select the database.
1423                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1425                 # Check if any errors had occured while selecting the database.
1427                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1429                         # The database does not exist, so return an error.
1431                         kiriwrite_error("databasemissingfile");
1433                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1435                         # The database has invalid permissions set, so return
1436                         # an error.
1438                         kiriwrite_error("databaseinvalidpermissions");
1440                 }
1442                 # Get the information about the database.
1444                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1446                 # Check if any errors had occured while getting the database information.
1448                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1450                         # A database error has occured so return an error and
1451                         # also the extended error information.
1453                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1455                 };
1457                 my $database_name = $database_info{"DatabaseName"};
1459                 # Get the page info.
1461                 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $pagefilename });
1463                 # Check if any errors occured while getting the page information.
1465                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1467                         # A database error has occured so return an error and
1468                         # also the extended error information.
1470                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1472                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1474                         # The page does not exist, so return an error.
1476                         kiriwrite_error("pagefilenamedoesnotexist");
1478                 }
1480                 # Get the values from the hash.
1482                 my $data_filename               = $page_info{"PageFilename"};
1483                 my $data_name                   = $page_info{"PageName"};
1484                 my $data_description            = $page_info{"PageDescription"};
1485                 my $data_section                = $page_info{"PageSection"};
1486                 my $data_template               = $page_info{"PageTemplate"};
1487                 my $data_content                = $page_info{"PageContent"};
1488                 my $data_settings               = $page_info{"PageSettings"};
1489                 my $data_lastmodified           = $page_info{"PageLastModified"};
1491                 my $template_warning;
1492                 my $page_count = 0;
1493                 my %template_list;
1494                 my %template_info;
1495                 my @database_pages;
1496                 my @database_info;
1497                 my @database_templates;
1498                 my @template_filenames;
1499                 my $template_file;
1500                 my $template_filename;
1501                 my $template_name;
1502                 my $template_count = 0;
1503                 my $template_found = 0;
1505                 tie(%template_list, 'Tie::IxHash');
1507                 # Connect to the template database.
1509                 $kiriwrite_dbmodule->connecttemplate();
1511                 # Check if any errors occured while connecting to the template database.
1513                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
1515                         # The template database does not exist so set the template
1516                         # warning message.
1518                         $template_warning = $kiriwrite_lang->{pages}->{notemplatedatabasekeep};
1520                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
1522                         # The template database has invalid permissions set so write
1523                         # the template warning message.
1525                         $template_warning = $kiriwrite_lang->{pages}->{templatepermissionserrorkeep};
1527                 }
1529                 if (!$template_warning){
1531                         # Get the list of available templates.
1533                         @template_filenames = $kiriwrite_dbmodule->gettemplatelist();
1535                         # Check if any errors had occured.
1537                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1539                                 # A database error occured while getting the list
1540                                 # of templates so return an error with the 
1541                                 # extended error information.
1543                                 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrorkeep} , $kiriwrite_dbmodule->geterror(1));
1545                         }
1547                         if (!$template_warning){
1549                                 foreach $template_filename (@template_filenames){
1551                                         # Get the information about each template.
1553                                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
1555                                         # Check if any errors occured while getting the template information.
1557                                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1559                                                 # A template database error has occured so return a warning message
1560                                                 # with the extended error information.
1562                                                 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrorkeep} , $kiriwrite_dbmodule->geterror(1));
1563                                                 last;
1565                                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
1567                                                 # The template does not exist so process the next template.
1569                                                 next;
1571                                         }
1573                                         # Append the template name and filename to the list of available templates.
1575                                         $template_list{$template_count}{Filename} = $template_info{"TemplateFilename"};
1576                                         $template_list{$template_count}{Name}     = $template_info{"TemplateName"};
1578                                         # Append the template filename and name and make it the selected
1579                                         # template if that is the template the page is using.
1581                                         if ($data_template eq $template_filename && !$template_found){
1583                                                 $template_list{$template_count}{Selected}       = 1;
1584                                                 $template_found = 1;
1586                                         } else {
1588                                                 $template_list{$template_count}{Selected}       = 0;
1590                                         }
1592                                         $template_count++;
1594                                 }
1596                         }
1598                 }
1600                 # Check if certain values are undefined and if they
1601                 # are then set them blank (defined).
1603                 if (!$data_name){
1604                         $data_name = "";
1605                 }
1607                 if (!$data_description){
1608                         $data_description = "";
1609                 }
1611                 if (!$data_section){
1612                         $data_section = "";
1613                 }
1615                 if (!$data_template){
1616                         $data_template = "";
1618                 }
1620                 if (!$data_content){
1621                         $data_content = "";
1622                 }
1624                 if (!$data_settings){
1625                         $data_settings = "";
1626                 }
1628                 if (!$data_lastmodified){
1629                         $data_lastmodified = "";
1630                 }
1632                 # Begin writing out the form for editing the selected page.
1634                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{editpage}, $data_name), { Style => "pageheader" });
1635                 $kiriwrite_presmodule->addlinebreak();
1636                 $kiriwrite_presmodule->addlinebreak();
1638                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1639                 $kiriwrite_presmodule->startbox();
1640                 $kiriwrite_presmodule->addhiddendata("mode", "page");
1641                 $kiriwrite_presmodule->addhiddendata("action", "edit");
1642                 $kiriwrite_presmodule->addhiddendata("database", $database);
1643                 $kiriwrite_presmodule->addhiddendata("page", $pagefilename);
1644                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
1645                 $kiriwrite_presmodule->endbox();
1647                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
1649                 $kiriwrite_presmodule->startheader();
1650                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
1651                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
1652                 $kiriwrite_presmodule->endheader();
1654                 $kiriwrite_presmodule->startrow();
1655                 $kiriwrite_presmodule->addcell("tablecell1");
1656                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{database});
1657                 $kiriwrite_presmodule->endcell();
1658                 $kiriwrite_presmodule->addcell("tablecell2");
1659                 $kiriwrite_presmodule->addtext($database_name);
1660                 $kiriwrite_presmodule->endcell();
1661                 $kiriwrite_presmodule->endrow();
1663                 $kiriwrite_presmodule->startrow();
1664                 $kiriwrite_presmodule->addcell("tablecell1");
1665                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagename});
1666                 $kiriwrite_presmodule->endcell();
1667                 $kiriwrite_presmodule->addcell("tablecell2");
1668                 $kiriwrite_presmodule->addinputbox("pagename", { Size => 64, MaxLength => 256, Value => $data_name });
1669                 $kiriwrite_presmodule->endcell();
1670                 $kiriwrite_presmodule->endrow();
1672                 $kiriwrite_presmodule->startrow();
1673                 $kiriwrite_presmodule->addcell("tablecell1");
1674                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedescription});
1675                 $kiriwrite_presmodule->endcell();
1676                 $kiriwrite_presmodule->addcell("tablecell2");
1677                 $kiriwrite_presmodule->addinputbox("pagedescription", { Size => 64, MaxLength => 256, Value => $data_description });
1678                 $kiriwrite_presmodule->endcell();
1679                 $kiriwrite_presmodule->endrow();
1681                 $kiriwrite_presmodule->startrow();
1682                 $kiriwrite_presmodule->addcell("tablecell1");
1683                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
1684                 $kiriwrite_presmodule->endcell();
1685                 $kiriwrite_presmodule->addcell("tablecell2");
1686                 $kiriwrite_presmodule->addinputbox("pagesection", { Size => 64, MaxLength => 256, Value => $data_section });
1687                 $kiriwrite_presmodule->endcell();
1688                 $kiriwrite_presmodule->endrow();
1690                 $kiriwrite_presmodule->startrow();
1691                 $kiriwrite_presmodule->addcell("tablecell1");
1692                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
1693                 $kiriwrite_presmodule->endcell();
1694                 $kiriwrite_presmodule->addcell("tablecell2");
1696                 # Check if any template warnings have occured.
1698                 if ($template_warning){
1700                         $kiriwrite_presmodule->addtext($template_warning);
1701                         $kiriwrite_presmodule->addlinebreak();
1703                 }
1705                 $kiriwrite_presmodule->addselectbox("pagetemplate");
1707                 # Process the list of templates, select one if the
1708                 # template filename for the page matches, else give
1709                 # an option for the user to keep the current template
1710                 # filename.
1712                 $template_count = 0;
1714                 foreach $template_file (keys %template_list){
1716                         if ($template_list{$template_count}{Selected}){
1718                                 $kiriwrite_presmodule->addoption($template_list{$template_count}{Name} . " (" . $template_list{$template_count}{Filename} . ")", { Value => $template_list{$template_count}{Filename}, Selected => 1 });
1720                         } else {
1722                                 $kiriwrite_presmodule->addoption($template_list{$template_count}{Name} . " (" . $template_list{$template_count}{Filename} . ")", { Value => $template_list{$template_count}{Filename} });
1724                         }
1726                         $template_count++;
1728                 }
1730                 if ($data_template eq "!none"){
1732                         $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
1733                         $template_found = 1;
1735                 } else {
1737                         $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none" });
1739                 }
1741                 if ($template_found eq 0 && $data_template ne "!none"){
1743                         # The template with the filename given was not found.
1745                         $kiriwrite_presmodule->addoption(kiriwrite_language($kiriwrite_lang->{pages}->{keeptemplatefilename}, $data_template), { Value => $data_template, Selected => 1, Style => "warningoption" });
1747                 }
1749                 # Disconnect from the template database.
1751                 $kiriwrite_dbmodule->disconnecttemplate();
1753                 # Disconnect from the database server.
1755                 $kiriwrite_dbmodule->disconnect();
1757                 $kiriwrite_presmodule->endselectbox();
1759                 $kiriwrite_presmodule->endcell();
1760                 $kiriwrite_presmodule->endrow();
1762                 $kiriwrite_presmodule->startrow();
1763                 $kiriwrite_presmodule->addcell("tablecell1");
1764                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagefilename});
1765                 $kiriwrite_presmodule->endcell();
1766                 $kiriwrite_presmodule->addcell("tablecell2");
1767                 $kiriwrite_presmodule->addinputbox("pagefilename", { Size => 64, MaxLength => 256, Value => $data_filename });
1768                 $kiriwrite_presmodule->endcell();
1769                 $kiriwrite_presmodule->endrow();
1771                 $kiriwrite_presmodule->startrow();
1772                 $kiriwrite_presmodule->addcell("tablecell1");
1773                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagecontent});
1774                 $kiriwrite_presmodule->endcell();
1775                 $kiriwrite_presmodule->addcell("tablecell2");
1776                 $kiriwrite_presmodule->addtextbox("pagecontent", { Columns => 50, Rows => 10, Value => $data_content });
1777                 $kiriwrite_presmodule->addlinebreak();
1778                 $kiriwrite_presmodule->addlinebreak();
1779                 $kiriwrite_presmodule->startbox("datalist");
1780                 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
1781                 $kiriwrite_presmodule->addlinebreak();
1782                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
1783                 $kiriwrite_presmodule->addlinebreak();
1784                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
1785                 $kiriwrite_presmodule->addlinebreak();
1786                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
1787                 $kiriwrite_presmodule->addlinebreak();
1788                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
1789                 $kiriwrite_presmodule->addlinebreak();
1790                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
1791                 $kiriwrite_presmodule->addlinebreak();
1792                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
1793                 $kiriwrite_presmodule->addlinebreak();
1794                 $kiriwrite_presmodule->endbox();
1795                 $kiriwrite_presmodule->endcell();
1796                 $kiriwrite_presmodule->endrow();
1798                 $kiriwrite_presmodule->startrow();
1799                 $kiriwrite_presmodule->addcell("tablecell1");
1800                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
1801                 $kiriwrite_presmodule->endcell();
1802                 $kiriwrite_presmodule->addcell("tablecell2");
1804                 # Check if the page settings value is set to a 
1805                 # certain number and select that option based
1806                 # on the number else set the value to 0.
1808                 if ($data_settings eq 1){
1809                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", Selected => 1, LineBreak => 1});
1810                 } else {
1811                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", LineBreak => 1});
1812                 }
1814                 if ($data_settings eq 2){
1815                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", Selected => 1, LineBreak => 1});
1816                 } else {
1817                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", LineBreak => 1});
1818                 }
1820                 if ($data_settings eq 3){
1821                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", Selected => 1, LineBreak => 1});
1822                 } else {
1823                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", LineBreak => 1});
1824                 }
1826                 if ($data_settings eq 0 || ($data_settings ne 1 && $data_settings ne 2 && $data_settings ne 3)){
1827                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", Selected => 1, LineBreak => 1});
1828                 } else {
1829                         $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", LineBreak => 1});
1830                 }
1832                 $kiriwrite_presmodule->endcell();
1833                 $kiriwrite_presmodule->endrow();
1834                 $kiriwrite_presmodule->endtable();
1836                 $kiriwrite_presmodule->startbox();
1837                 $kiriwrite_presmodule->addlinebreak();
1838                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{editpagebutton});
1839                 $kiriwrite_presmodule->addtext(" | ");
1840                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
1841                 $kiriwrite_presmodule->addtext(" | ");
1842                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) } );
1843                 $kiriwrite_presmodule->endbox();
1845                 $kiriwrite_presmodule->endform();
1847                 return $kiriwrite_presmodule->grab();
1849         } else {
1851                 # The confirm value is a value other than '0' and '1' so
1852                 # return an error.
1854                 kiriwrite_error("invalidvalue");
1856         }
1860 sub kiriwrite_page_multidelete{
1861 #################################################################################
1862 # kiriwrite_page_multidelete: Delete mulitple pages from the database.          #
1863 #                                                                               #
1864 # Usage:                                                                        #
1865 #                                                                               #
1866 # kiriwrite_page_multidelete(database, confirm, filelist);                      #
1867 #                                                                               #
1868 # database      Specifies the database to delete multiple pages from.           #
1869 # confirm       Confirms the action to delete the selected pages from the       #
1870 #               database.                                                       #
1871 # filelist      The list of files to delete from the selected database.         #
1872 #################################################################################
1874         # Get the information passed to the subroutine.
1876         my ($database, $confirm, @filelist) = @_;
1878         # Check if the database name is blank and return an error if
1879         # it is.
1881         if (!$database){
1883                 # The database name is blank so return an error.
1885                 kiriwrite_error("databasenameblank");
1887         }
1889         # Check if the file list array has any values and return
1890         # an error if it doesn't.
1892         if (!@filelist){
1894                 # The page list really is blank so return
1895                 # an error.
1897                 kiriwrite_error("nopagesselected");
1898         }
1900         # Check if the database filename is valid and return an error if
1901         # it isn't.
1903         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
1905         if ($pagedatabase_filename_check eq 1){
1907                 # The database filename is blank, so return an error.
1909                 kiriwrite_error("blankdatabasepageadd");
1911         } elsif ($pagedatabase_filename_check eq 2){
1913                 # The database filename is invalid, so return an error.
1915                 kiriwrite_error("databasefilenameinvalid");
1917         }
1919         # Check the length the database name and return an error if it's
1920         # too long.
1922         my $pagedatabase_length_check   = kiriwrite_variablecheck($database, "maxlength", 32, 1);
1924         if ($pagedatabase_length_check eq 1){
1926                 # The database name is too long, so return an error.
1928                 kiriwrite_error("databasefilenametoolong");
1930         }
1932         # Check if the confirm value is blank and if it is, then
1933         # set it to 0.
1935         if (!$confirm){
1937                 # The confirm value is blank so set the confirm value
1938                 # to 0.
1940                 $confirm = 0;
1942         }
1944         if ($confirm eq 1){
1946                 # The action to delete multiple pages from the database has
1947                 # been confirmed.
1949                 # Connect to the database server.
1951                 $kiriwrite_dbmodule->connect();
1953                 # Check if any errors occured while connecting to the database server.
1955                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1957                         # A database connection error has occured so return
1958                         # an error.
1960                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1962                 }
1964                 # Select the database.
1966                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1968                 # Check if any errors occured while selecting the database.
1970                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1972                         # The database does not exist, so return an error.
1974                         kiriwrite_error("databasemissingfile");
1976                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1978                         # The database has invalid permissions set, so return
1979                         # an error.
1981                         kiriwrite_error("databaseinvalidpermissions");
1983                 }
1985                 # Check if the database has read and write permissions.
1987                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
1989                 if ($database_permissions eq 1){
1991                         # The database permissions are invalid so return an error.
1993                         kiriwrite_error("databaseinvalidpermissions");
1995                 }
1997                 # Get information about the database.
1999                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2001                 # Check if any errors had occured while getting the database
2002                 # information.
2004                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2006                         # A database error has occured so return an error and
2007                         # also the extended error information.
2009                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2011                 };
2013                 my $database_name       = $database_info{"DatabaseName"};
2015                 # Define some variables for later.
2017                 my @database_page;
2018                 my %page_info;
2019                 my $filelist_filename;
2020                 my %deleted_list;
2021                 my $page;
2022                 my $page_name;
2023                 my $page_found = 0;
2024                 my $page_count = 0;
2026                 tie (%deleted_list, 'Tie::IxHash');
2028                 my $deleted_list = "";
2030                 foreach $filelist_filename (@filelist){
2032                         # Get the page information.
2034                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2036                         # Check if any errors occured.
2038                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2040                                 # A database error has occured so return an error and
2041                                 # also the extended error information.
2043                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2045                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2047                                 # The page does not exist, so process the next page.
2049                                 next;
2051                         }
2053                         # Add the page to the list of deleted pages.
2055                         $deleted_list{$page_count}{Filename}    = $page_info{"PageFilename"};
2056                         $deleted_list{$page_count}{Name}        = $page_info{"PageName"};
2058                         # Delete the page.
2060                         $kiriwrite_dbmodule->deletepage({ PageFilename => $filelist_filename });
2062                         # Check if any errors occured while deleting the page from the database.
2064                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2066                                 # A database error has occured so return an error and
2067                                 # also the extended error information.
2069                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2071                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2073                                 # The page does not exist, so process the next page.
2075                                 next;
2077                         }
2079                         $page_found = 0;
2080                         $page_count++;
2082                 }
2084                 # Disconnect from the database server.
2086                 $kiriwrite_dbmodule->disconnect();
2088                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{selectedpagesdeleted}, { Style => "pageheader" });
2089                 $kiriwrite_presmodule->addlinebreak();
2090                 $kiriwrite_presmodule->addlinebreak();
2091                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{selectedpagesdeletedmessage}, $database_name));
2092                 $kiriwrite_presmodule->addlinebreak();
2093                 $kiriwrite_presmodule->addlinebreak();
2094                 $kiriwrite_presmodule->startbox("datalist");
2096                 foreach $page (keys %deleted_list){
2098                         if (!$deleted_list{$page}{Name}){
2099                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2100                                 $kiriwrite_presmodule->addtext(" (" . $deleted_list{$page}{Filename} . ")");
2102                         } else {
2103                                 $kiriwrite_presmodule->addtext($deleted_list{$page}{Name} . " (" . $deleted_list{$page}{Filename} . ")");
2104                         }
2106                         $kiriwrite_presmodule->addlinebreak();
2107                 }
2109                 $kiriwrite_presmodule->endbox();
2110                 $kiriwrite_presmodule->addlinebreak();
2111                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
2113                 return $kiriwrite_presmodule->grab();
2115         } elsif ($confirm eq 0){
2117                 # The action to delete multiple pages from the database has
2118                 # not been confirmed, so write a form asking the user to confirm
2119                 # the deletion of those pages.
2121                 # Connect to the database server.
2123                 $kiriwrite_dbmodule->connect();
2125                 # Check if any errors occured while connecting to the database server.
2127                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2129                         # A database connection error has occured so return
2130                         # an error.
2132                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2134                 }
2136                 # Select the database.
2138                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2140                 # Check if any errors occured while selecting the database.
2142                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2144                         # The database does not exist, so return an error.
2146                         kiriwrite_error("databasemissingfile");
2148                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2150                         # The database has invalid permissions set, so return
2151                         # an error.
2153                         kiriwrite_error("databaseinvalidpermissions");
2155                 }
2157                 # Check if the database has read and write permissions.
2159                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2161                 if ($database_permissions eq 1){
2163                         # The database permissions are invalid so return an error.
2165                         kiriwrite_error("databaseinvalidpermissions");
2167                 }
2169                 # Get information about the database.
2171                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2173                 # Check if any errors had occured while getting the database
2174                 # information.
2176                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2178                         # A database error has occured so return an error and
2179                         # also the extended error information.
2181                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2183                 };
2185                 my $database_name       = $database_info{"DatabaseName"};
2187                 # Define some variables for later.
2189                 my %page_info;
2190                 my %delete_list;
2191                 my $pagename;
2192                 my $page = "";
2193                 my $filelist_filename;
2194                 my $filelist_filename_sql;
2195                 my $pageseek = 0;
2197                 tie(%delete_list, 'Tie::IxHash');
2199                 # Process each filename given.
2201                 foreach $filelist_filename (@filelist){
2203                         # Get the page information.
2205                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2207                         # Check if any errors occured.
2209                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2211                                 # A database error has occured so return an error and
2212                                 # also the extended error information.
2214                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2216                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2218                                 # The page does not exist, so process the next page.
2220                                 next;
2222                         }
2224                         # Add the page file name and name to the list
2225                         # of pages to delete.
2227                         $delete_list{$pageseek}{Filename}       = $page_info{"PageFilename"};
2228                         $delete_list{$pageseek}{Name}           = $page_info{"PageName"};
2230                         # Increment the page seek counter and reset the
2231                         # page found value.
2233                         $pageseek++;
2235                 }
2237                 # Disconnect from the database server.
2239                 $kiriwrite_dbmodule->disconnect();
2241                 # Check if any files were selected and return
2242                 # an error if there wasn't.
2244                 if ($pageseek eq 0){
2246                         # No pages were selected so return an error.
2248                         kiriwrite_error("nopagesselected");
2250                 }
2252                 # Write the form for displaying pages.
2254                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{deletemultiplepages}, { Style => "pageheader" });
2255                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
2256                 $kiriwrite_presmodule->startbox();
2257                 $kiriwrite_presmodule->addhiddendata("mode", "page");
2258                 $kiriwrite_presmodule->addhiddendata("action", "multidelete");
2259                 $kiriwrite_presmodule->addhiddendata("database", $database);
2260                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
2261                 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
2263                 $pageseek = 1;
2265                 foreach $page (keys %delete_list){
2267                         $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
2268                         $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $delete_list{$page}{Filename});
2270                         $pageseek++;
2272                 }
2274                 $kiriwrite_presmodule->addlinebreak();
2275                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletemultiplemessage}, $database_name));
2276                 $kiriwrite_presmodule->addlinebreak();
2277                 $kiriwrite_presmodule->addlinebreak();
2278                 $kiriwrite_presmodule->startbox("datalist");
2280                 foreach $page (keys %delete_list){
2282                         if (!$delete_list{$page}{Name}){
2283                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2284                                 $kiriwrite_presmodule->addtext(" (" . $delete_list{$page}{Filename} . ")");
2285                         } else {
2286                                 $kiriwrite_presmodule->addtext($delete_list{$page}{Name} . " (" . $delete_list{$page}{Filename} . ")");
2287                         }
2288                         $kiriwrite_presmodule->addlinebreak();
2290                 }
2292                 $kiriwrite_presmodule->endbox();
2293                 $kiriwrite_presmodule->addlinebreak();
2294                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{deletepagesbutton});
2295                 $kiriwrite_presmodule->addtext(" | ");
2296                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{deletepagesreturnlink}, $database_name)});
2297                 $kiriwrite_presmodule->endbox();
2298                 $kiriwrite_presmodule->endform();
2300                 return $kiriwrite_presmodule->grab();
2302         } else {
2304                 # A confirm value other than 0 or 1 is given, so
2305                 # return an error.
2307                 kiriwrite_error("invaildvalue");
2309         }
2313 sub kiriwrite_page_multimove{
2314 #################################################################################
2315 # kiriwrite_page_multimove: Move several pages from one database to another     #
2316 # database.                                                                     #
2317 #                                                                               #
2318 # Usage:                                                                        #
2319 #                                                                               #
2320 # kiriwrite_page_multimove(database, newdatabase, confirm, filelist);           #
2321 #                                                                               #
2322 # database      Specifies the database to move the selected pages from.         #
2323 # newdatabase   Specifies the database to move the selected pages to.           #
2324 # confirm       Confirms the action to move the pages from one database to      #
2325 #               another.                                                        #
2326 # filelist      Specifies the list of pages to move.                            #
2327 #################################################################################
2329         # Get the values that were passed to the subroutine.
2331         my ($database, $newdatabase, $confirm, @filelist) = @_;
2333         # Check if the database filename is valid and return
2334         # an error if it isn't.
2336         my $newpagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
2338         if ($newpagedatabase_filename_check eq 1){
2340                 # The database filename is blank, so return an error.
2342                 kiriwrite_error("blankdatabasepageadd");
2344         } elsif ($newpagedatabase_filename_check eq 2){
2346                 # The database filename is invalid, so return an error.
2348                 kiriwrite_error("databasefilenameinvalid");
2350         }
2352         # Check if the file list is blank and return an error
2353         # if it is.
2355         if (!@filelist){
2357                 # The file list really is blank so return
2358                 # an error.
2360                 kiriwrite_error("nopagesselected");
2362         }
2364         # Check if the confirm value is blank and if it is then
2365         # set the confirm value to 0.
2367         if (!$confirm){
2369                 $confirm = 0;
2371         }
2373         if ($confirm eq 1){
2375                 # The action to move several pages from one database
2376                 # to another has been confirmed.
2378                 # Check if the database that the pages are moving from 
2379                 # is the same as the database the pages are moving to.
2380                 # Return an error if it is.
2382                 if ($database eq $newdatabase){
2384                         # The database that the pages are moving from
2385                         # and the database the pages are moving to
2386                         # is the same, so return an error.
2388                         kiriwrite_error("databasemovesame");
2390                 }
2392                 # Check if the new database filename is valid and return an error if
2393                 # it isn't.
2395                 my $newpagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
2397                 if ($newpagedatabase_filename_check eq 1){
2399                         # The database filename is blank, so return an error.
2401                         kiriwrite_error("blankdatabasepageadd");
2403                 } elsif ($newpagedatabase_filename_check eq 2){
2405                         # The database filename is invalid, so return an error.
2407                         kiriwrite_error("databasefilenameinvalid");
2409                 }
2411                 # Connect to the database server.
2413                 $kiriwrite_dbmodule->connect();
2415                 # Check if any errors occured while connecting to the database server.
2417                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2419                         # A database connection error has occured so return
2420                         # an error.
2422                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2424                 }
2426                 # Select the database the pages are going to be moved from.
2428                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2430                 # Check if any errors had occured while selecting the database.
2432                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2434                         # The database does not exist, so return an error.
2436                         kiriwrite_error("oldmovedatabasedoesnotexist");
2438                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2440                         # The database has invalid permissions set, so return
2441                         # an error.
2443                         kiriwrite_error("oldmovedatabasefileinvalidpermissions");
2445                 }
2447                 # Check if the database has read and write permissions.
2449                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2451                 if ($database_permissions eq 1){
2453                         # The database permissions are invalid so return an error.
2455                         kiriwrite_error("databaseinvalidpermissions");
2457                 }
2459                 # Select the database the pages are going to be moved to.
2461                 $kiriwrite_dbmodule->selectseconddb({ DatabaseName => $newdatabase });
2463                 # Check if any errors had occured while selecting the database.
2465                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2467                         # The database does not exist, so return an error.
2469                         kiriwrite_error("newmovedatabasedoesnotexist");
2471                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2473                         # The database has invalid permissions set, so return
2474                         # an error.
2476                         kiriwrite_error("newmovedatabasefileinvalidpermissions");
2478                 }
2480                 # Check if the database has read and write permissions.
2482                 $database_permissions = $kiriwrite_dbmodule->dbpermissions($newdatabase, 1, 1);
2484                 if ($database_permissions eq 1){
2486                         # The database permissions are invalid so return an error.
2488                         kiriwrite_error("databaseinvalidpermissions");
2490                 }
2492                 # Define some values for later.
2494                 my %moved_list;
2495                 my %warning_list;
2496                 my %page_info;
2498                 my $filename;
2500                 my $olddatabase_name;
2501                 my $newdatabase_name;
2503                 my $page;
2504                 my $warning;
2506                 my $page_found = 0;
2507                 my $move_count = 0;
2508                 my $warning_count = 0;
2510                 tie(%moved_list, 'Tie::IxHash');
2511                 tie(%warning_list, 'Tie::IxHash');
2513                 # Get information about the database that the selected pages are moving from.
2515                 my %olddatabase_info = $kiriwrite_dbmodule->getdatabaseinfo();
2517                 # Check if any errors had occured while getting the database
2518                 # information.
2520                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2522                         # A database error has occured so return an error and
2523                         # also the extended error information.
2525                         kiriwrite_error("oldmovedatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
2527                 };
2529                 $olddatabase_name = $olddatabase_info{"DatabaseName"};
2531                 # Get information about the database that the selected pages are moving to.
2533                 my %newdatabase_info = $kiriwrite_dbmodule->getseconddatabaseinfo();
2535                 # Check if any errors had occured while getting the database
2536                 # information.
2538                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2540                         # A database error has occured so return an error and
2541                         # also the extended error information.
2543                         kiriwrite_error("newmovedatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
2545                 };
2547                 $newdatabase_name = $newdatabase_info{"DatabaseName"};
2549                 # Get each file in the old database, get the page values,
2550                 # put them into the new database and delete the pages
2551                 # from the old database.
2553                 foreach $filename (@filelist){
2555                         # Get the page information.
2557                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
2559                         # Check if any errors occured.
2561                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2563                                 # A database error has occured so write a warning message and
2564                                 # also the extended error information.
2566                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2567                                 $warning_count++;
2568                                 next;
2570                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2572                                 # The page does not exist, so process the next page.
2574                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{pagedoesnotexist}, $filename);
2575                                 $warning_count++;
2576                                 next;
2578                         }
2580                         # Move the selected page.
2582                         $kiriwrite_dbmodule->movepage({ PageFilename => $filename });
2584                         # Check if any errors occured while moving the page.
2586                         if ($kiriwrite_dbmodule->geterror eq "OldDatabaseError"){
2588                                 # A database error has occured while moving the pages from
2589                                 # the old database, so write a warning message.
2591                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovefrompageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2592                                 $warning_count++;
2593                                 next;
2595                         } elsif ($kiriwrite_dbmodule->geterror eq "NewDatabaseError"){
2597                                 # A database error has occured while moving the pages to
2598                                 # the new database, so write a warning message.
2600                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovetopageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2601                                 $warning_count++;
2602                                 next;
2604                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2606                                 # The page with the filename given in the database that
2607                                 # the page is to be moved from doesn't exist so write
2608                                 # a warning message.
2610                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovefrompagenotexist}, $filename);
2611                                 $warning_count++;
2612                                 next;
2614                         } elsif ($kiriwrite_dbmodule->geterror eq "PageAlreadyExists"){
2616                                 # The page with the filename given in the database that
2617                                 # the page is to be moved to already exists so write a
2618                                 # warning message.
2620                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovetopageexists}, $filename);
2621                                 $warning_count++;
2622                                 next;
2624                         }
2626                         $moved_list{$move_count}{Filename}      = $page_info{"PageFilename"};
2627                         $moved_list{$move_count}{Name}          = $page_info{"PageName"};
2629                         $move_count++;
2631                 }
2633                 # Disconnect from the database server.
2635                 $kiriwrite_dbmodule->disconnect();
2637                 # Write out a message saying that the pages were moved (if any)
2638                 # to the new database (and any warnings given).
2640                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepages}, { Style => "pageheader" });
2641                 $kiriwrite_presmodule->addlinebreak();
2642                 $kiriwrite_presmodule->addlinebreak();
2644                 if (%moved_list){
2646                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{movedpagesmessage}, $olddatabase_name, $newdatabase_name));
2647                         $kiriwrite_presmodule->addlinebreak();
2648                         $kiriwrite_presmodule->addlinebreak();
2650                         $kiriwrite_presmodule->startbox("datalist");
2651                         foreach $page (keys %moved_list){
2652                                 if (!$moved_list{$page}{Name}){
2653                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2654                                         $kiriwrite_presmodule->addtext(" (" . $moved_list{$page}{Filename} . ")");
2655                                 } else {
2656                                         $kiriwrite_presmodule->addtext($moved_list{$page}{Name} . " (" . $moved_list{$page}{Filename} . ")");
2657                                 }
2659                                 $kiriwrite_presmodule->addlinebreak();
2660                         }
2661                         $kiriwrite_presmodule->endbox();
2663                 } else {
2665                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagesmoved}, $olddatabase_name, $newdatabase_name));
2666                         $kiriwrite_presmodule->addlinebreak();
2667                         $kiriwrite_presmodule->addlinebreak();
2669                 }
2671                 if (%warning_list){
2673                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{errormessages});
2674                         $kiriwrite_presmodule->addlinebreak();
2675                         $kiriwrite_presmodule->addlinebreak();
2676                         $kiriwrite_presmodule->startbox("datalist");
2677                         foreach $warning (keys %warning_list){
2678                                 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
2679                                 $kiriwrite_presmodule->addlinebreak();
2680                         }
2681                         $kiriwrite_presmodule->endbox();
2683                 }
2685                 $kiriwrite_presmodule->addlinebreak();
2686                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $olddatabase_name)}); 
2687                 $kiriwrite_presmodule->addtext(" | ");
2688                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $newdatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{viewpagelist}, $newdatabase_name)});
2690                 return $kiriwrite_presmodule->grab();
2692         } elsif ($confirm eq 0) {
2694                 # The action to move several pages from one database
2695                 # to another has not been confirmed so write a form.
2697                 # Connect to the database server.
2699                 $kiriwrite_dbmodule->connect();
2701                 # Check if any errors occured while connecting to the database server.
2703                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2705                         # A database connection error has occured so return
2706                         # an error.
2708                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2710                 }
2712                 # Select the database.
2714                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2716                 # Check if any errors occured while selecting the database.
2718                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2720                         # The database does not exist, so return an error.
2722                         kiriwrite_error("databasemissingfile");
2724                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2726                         # The database has invalid permissions set, so return
2727                         # an error.
2729                         kiriwrite_error("databaseinvalidpermissions");
2731                 }
2733                 # Check if the database has read and write permissions.
2735                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2737                 if ($database_permissions eq 1){
2739                         # The database permissions are invalid so return an error.
2741                         kiriwrite_error("databaseinvalidpermissions");
2743                 }
2745                 # Get information about the database.
2747                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2749                 # Check if any errors had occured while getting the database
2750                 # information.
2752                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2754                         # A database error has occured so return an error and
2755                         # also the extended error information.
2757                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2759                 };
2761                 my $database_name       = $database_info{"DatabaseName"};
2763                 # Define some values for later.
2765                 my %db_list;
2766                 my %move_list;
2767                 my %page_info;
2768                 my $page;
2769                 my $data_file;
2770                 my $db_name;
2771                 my $filename;
2772                 my $filelist_filename;
2773                 my $pagename;
2774                 my $pageseek    = 0;
2775                 my $dbseek      = 0;
2777                 # Process each filename given.
2779                 tie (%move_list, 'Tie::IxHash');
2780                 tie (%db_list, 'Tie::IxHash');
2782                 foreach $filelist_filename (@filelist){
2784                         # Get the page information.
2786                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2788                         # Check if any errors occured.
2790                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2792                                 # A database error has occured so return an error and
2793                                 # also the extended error information.
2795                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2797                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2799                                 # The page does not exist, so process the next page.
2801                                 next;
2803                         }
2805                         # Add the page name and file name to the list of
2806                         # pages to move.
2808                         $move_list{$pageseek}{Filename} = $page_info{"PageFilename"};
2809                         $move_list{$pageseek}{Name}     = $page_info{"PageName"};
2811                         # Increment the page seek counter and reset the
2812                         # page found value.
2814                         $pageseek++;
2816                 }
2818                 # Check if any pages exust and return an error if
2819                 # there wasn't.
2821                 if ($pageseek eq 0){
2823                         # None of the selected pages exist, so return
2824                         # an error.
2826                         kiriwrite_error("nopagesselected");
2828                 }
2830                 # Get the list of databases.
2832                 my @database_list       = $kiriwrite_dbmodule->getdblist();
2834                 # Check if any errors occured while trying to get the list of databases.
2836                 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
2838                         # The database directory is missing so return an error.
2840                         kiriwrite_error("datadirectorymissing");
2842                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
2844                         # The database directory has invalid permissions set so return
2845                         # an error.
2847                         kiriwrite_error("datadirectoryinvalidpermissions");
2849                 }
2851                 # Get the information about each database (the short name and friendly name).
2853                 foreach $data_file (@database_list){
2855                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
2857                         # Check if any errors occured while selecting the database.
2859                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2861                                 # The database does not exist, so process the next
2862                                 # database.
2864                                 next;
2866                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2868                                 # The database has invalid permissions set, so process
2869                                 # the next database.
2871                                 next;
2873                         }
2875                         # Get the database information.
2877                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2879                         # Check if any errors had occured while getting the database
2880                         # information.
2882                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2884                                 # A database error has occured so process the next
2885                                 # database.
2887                                 next;
2889                         };
2891                         # Check if the database name is undefined and if it is
2892                         # then set it blank.
2894                         if (!$database_name){
2895                                 $database_name = "";
2896                         }
2898                         # Append the database to the list of databases available.
2900                         $db_list{$dbseek}{Filename}     = $data_file;
2901                         $db_list{$dbseek}{Name}         = $database_info{"DatabaseName"};
2903                         $dbseek++;
2905                 }
2907                 # Disconnect from the database server.
2909                 $kiriwrite_dbmodule->disconnect();
2911                 # Write out the form.
2913                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepages}, { Style => "pageheader" });
2914                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
2915                 $kiriwrite_presmodule->startbox();
2916                 $kiriwrite_presmodule->addhiddendata("mode", "page");
2917                 $kiriwrite_presmodule->addhiddendata("action", "multimove");
2918                 $kiriwrite_presmodule->addhiddendata("database", $database);
2919                 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
2920                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
2922                 # Write the page form data.
2924                 $pageseek = 1;
2926                 foreach $page (keys %move_list){
2927                         $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
2928                         $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $move_list{$page}{Filename});
2929                         $pageseek++;
2930                 }
2932                 $kiriwrite_presmodule->addlinebreak();
2933                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{movepagesmessage}, $database_name));
2934                 $kiriwrite_presmodule->addlinebreak();
2935                 $kiriwrite_presmodule->addlinebreak();
2936                 $kiriwrite_presmodule->startbox("datalist");
2938                 foreach $page (keys %move_list){
2939                         if (!$move_list{$page}{Name}){
2940                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2941                                 $kiriwrite_presmodule->addtext(" (" . $move_list{$page}{Filename} . ")");
2942                         } else {
2943                                 $kiriwrite_presmodule->addtext($move_list{$page}{Name} . " (" . $move_list{$page}{Filename} . ")");
2944                         }
2945                         $kiriwrite_presmodule->addlinebreak();
2946                 }
2948                 $kiriwrite_presmodule->endbox();
2949                 $kiriwrite_presmodule->addlinebreak();
2950                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepagesto});
2952                 $kiriwrite_presmodule->addselectbox("newdatabase");
2954                 foreach $db_name (keys %db_list){
2955                         $kiriwrite_presmodule->addoption($db_list{$db_name}{Name} . " (" . $db_list{$db_name}{Filename} . ")", { Value => $db_list{$db_name}{Filename}});
2956                 }
2958                 $kiriwrite_presmodule->endselectbox();
2959                 $kiriwrite_presmodule->addlinebreak();
2960                 $kiriwrite_presmodule->addlinebreak();
2961                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{movepagesbutton});
2962                 $kiriwrite_presmodule->addtext(" | ");
2963                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
2964                 $kiriwrite_presmodule->endbox();
2965                 $kiriwrite_presmodule->endform();
2967                 return $kiriwrite_presmodule->grab();
2969         } else {
2971                 # The confirm value is other than 0 or 1, so return
2972                 # an error.
2974                 kiriwrite_error("invalidvariable");
2976         }
2982 sub kiriwrite_page_multicopy{
2983 #################################################################################
2984 # kiriwrite_page_multicopy: Copy several pages from one database to another     #
2985 # database.                                                                     #
2986 #                                                                               #
2987 # Usage:                                                                        #
2988 #                                                                               #
2989 # kiriwrite_page_multicopy(database, newdatabase, confirm, filelist);           #
2990 #                                                                               #
2991 # database      Specifies the database to copy the selected pages from.         #
2992 # newdatabase   Specifies the database to copy the selected page to.            #
2993 # confirm       Confirms the action to copy the pages.                          #
2994 # filelist      A list of filenames to copy in an array.                        #
2995 #################################################################################
2997         # Get the values that were passed to the subroutine.
2999         my ($database, $newdatabase, $confirm, @filelist) = @_;
3001         # Check if the file list is blank and return an error
3002         # if it is.
3004         if (!@filelist){
3006                 # The file list really is blank so return
3007                 # an error.
3009                 kiriwrite_error("nopagesselected");
3011         }
3013         # Check if the confirm value is blank and if it is then
3014         # set the confirm value to 0.
3016         if (!$confirm){
3018                 $confirm = 0;
3020         }
3022         # Check if the database filename is valid and return an error if
3023         # it isn't.
3025         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
3027         if ($pagedatabase_filename_check eq 1){
3029                 # The database filename is blank, so return an error.
3031                 kiriwrite_error("blankdatabasepageadd");
3033         } elsif ($pagedatabase_filename_check eq 2){
3035                 # The database filename is invalid, so return an error.
3037                 kiriwrite_error("databasefilenameinvalid");
3039         }
3041         if ($confirm eq 1){
3043                 # The action to copy several pages from one database
3044                 # to another has been confirmed.
3046                 # Check if the database that the pages are copied from 
3047                 # is the same as the database the pages are copied to.
3048                 # Return an error if it is.
3050                 if ($database eq $newdatabase){
3052                         # The database that the pages are being copied from
3053                         # and the database that the pages are copied to
3054                         # is the same, so return an error.
3056                         kiriwrite_error("databasecopysame");
3058                 }
3060                 # Check if the new database filename is valid and return an error if
3061                 # it isn't.
3063                 my $pagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
3065                 if ($pagedatabase_filename_check eq 1){
3067                         # The database filename is blank, so return an error.
3069                         kiriwrite_error("blankdatabasepageadd");
3071                 } elsif ($pagedatabase_filename_check eq 2){
3073                         # The database filename is invalid, so return an error.
3075                         kiriwrite_error("databasefilenameinvalid");
3077                 }
3079                 # Connect to the database server.
3081                 $kiriwrite_dbmodule->connect();
3083                 # Check if any errors occured while connecting to the database server.
3085                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3087                         # A database connection error has occured so return
3088                         # an error.
3090                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3092                 }
3094                 # Select the database the pages are going to be copied from.
3096                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3098                 # Check if any errors had occured while selecting the database.
3100                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3102                         # The database does not exist, so return an error.
3104                         kiriwrite_error("oldcopydatabasedoesnotexist");
3106                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3108                         # The database has invalid permissions set, so return
3109                         # an error.
3111                         kiriwrite_error("oldcopydatabasefileinvalidpermissions");
3113                 }
3115                 # Select the database the pages are going to be copied to.
3117                 $kiriwrite_dbmodule->selectseconddb({ DatabaseName => $newdatabase });
3119                 # Check if any errors had occured while selecting the database.
3121                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3123                         # The database does not exist, so return an error.
3125                         kiriwrite_error("newcopydatabasedoesnotexist");
3127                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3129                         # The database has invalid permissions set, so return
3130                         # an error.
3132                         kiriwrite_error("newcopydatabasefileinvalidpermissions");
3134                 }
3136                 # Check if the database has read and write permissions.
3138                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($newdatabase, 1, 1);
3140                 if ($database_permissions eq 1){
3142                         # The database permissions are invalid so return an error.
3144                         kiriwrite_error("databaseinvalidpermissions");
3146                 }
3148                 # Define some values for later.
3150                 my %copied_list;
3151                 my %warning_list;
3152                 my %page_info;
3154                 my @olddatabase_info;
3155                 my @olddatabase_page;
3156                 my @newdatabase_info;
3157                 my @newdatabase_page;
3159                 my $filename;
3160                 my $filename_sql;
3161                 my $filename_out;
3163                 my $olddatabase_database_handle;
3164                 my $olddatabase_string_handle;
3165                 my $olddatabase_name;
3166                 my $newdatabase_database_handle;
3167                 my $newdatabase_string_handle;
3168                 my $newdatabase_name;
3170                 my $page;
3171                 my $warning;
3172                 my $page_filename;
3173                 my $page_filename_sql;
3174                 my $page_name;
3175                 my $page_name_sql;
3176                 my $page_description;
3177                 my $page_description_sql;
3178                 my $page_section;
3179                 my $page_section_sql;
3180                 my $page_template;
3181                 my $page_template_sql;
3182                 my $page_data;
3183                 my $page_data_sql;
3184                 my $page_settings;
3185                 my $page_settings_sql;
3186                 my $page_lastmodified;
3187                 my $page_lastmodified_sql;
3189                 my $page_seek = 0;
3190                 my $warning_count = 0;
3192                 my $page_found = 0;
3194                 tie(%copied_list, 'Tie::IxHash');
3195                 tie(%warning_list, 'Tie::IxHash');
3197                 # Get information about the database that the selected pages are moving from.
3199                 my %olddatabase_info = $kiriwrite_dbmodule->getdatabaseinfo();
3201                 # Check if any errors had occured while getting the database
3202                 # information.
3204                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3206                         # A database error has occured so return an error and
3207                         # also the extended error information.
3209                         kiriwrite_error("oldcopydatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
3211                 };
3213                 $olddatabase_name = $olddatabase_info{"DatabaseName"};
3215                 # Get information about the database that the selected pages are moving to.
3217                 my %newdatabase_info = $kiriwrite_dbmodule->getseconddatabaseinfo();
3219                 # Check if any errors had occured while getting the database
3220                 # information.
3222                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3224                         # A database error has occured so return an error and
3225                         # also the extended error information.
3227                         kiriwrite_error("newcopydatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
3229                 };
3231                 $newdatabase_name = $newdatabase_info{"DatabaseName"};
3233                 # Check if the database filename is valid and return an error if
3234                 # it isn't.
3236                 my $newpagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
3238                 if ($newpagedatabase_filename_check eq 1){
3240                         # The database filename is blank, so return an error.
3242                         kiriwrite_error("blankdatabasepageadd");
3244                 } elsif ($newpagedatabase_filename_check eq 2){
3246                         # The database filename is invalid, so return an error.
3248                         kiriwrite_error("databasefilenameinvalid");
3250                 }
3252                 foreach $filename (@filelist){
3254                         # Get the page information.
3256                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3258                         # Check if any errors occured.
3260                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3262                                 # A database error has occured so return an error and
3263                                 # also the extended error information.
3265                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3266                                 $warning_count++;
3267                                 next;
3269                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3271                                 # The page does not exist, so process the next page.
3273                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfrompageerror}, $filename);
3274                                 $warning_count++;
3275                                 next;
3277                         }
3279                         $kiriwrite_dbmodule->copypage({ PageFilename => $filename });
3281                         # Check if any errors occured while copying the page.
3283                         if ($kiriwrite_dbmodule->geterror eq "OldDatabaseError"){
3285                                 # A database error has occured while copying the pages from
3286                                 # the old database, so write a warning message.
3288                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfromdatabaseerror}, $filename,  $kiriwrite_dbmodule->geterror(1));
3289                                 $warning_count++;
3290                                 next;
3292                         } elsif ($kiriwrite_dbmodule->geterror eq "NewDatabaseError"){
3294                                 # A database error has occured while copying the pages to
3295                                 # the new database, so write a warning message.
3297                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopytodatabaseerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3298                                 $warning_count++;
3299                                 next;
3301                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3303                                 # The page with the filename given in the database that
3304                                 # the page is to be copied from doesn't exist so write
3305                                 # a warning message.
3307                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfrompagenotexist}, $filename);
3308                                 $warning_count++;
3309                                 next;
3311                         } elsif ($kiriwrite_dbmodule->geterror eq "PageAlreadyExists"){
3313                                 # The page with the filename given in the database that
3314                                 # the page is to be copied to already exists so write a
3315                                 # warning message.
3317                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopytopageexists}, $filename);
3318                                 $warning_count++;
3319                                 next;
3321                         }
3323                         # Append the copied page (filename and name) to the list of
3324                         # copied pages.
3326                         $copied_list{$page_seek}{Filename}      = $filename;
3327                         $copied_list{$page_seek}{Name}          = $page_info{"PageName"};
3328                         $page_seek++;
3330                 }
3332                 # Disconnect from the database server.
3334                 $kiriwrite_dbmodule->disconnect();
3336                 # Write out a message saying that the pages were moved (if any)
3337                 # to the new database (and any warnings given).
3339                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypages}, { Style => "pageheader" });
3340                 $kiriwrite_presmodule->addlinebreak();
3341                 $kiriwrite_presmodule->addlinebreak();
3343                 if (%copied_list){
3345                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{copypagesresultmessage}, $olddatabase_name, $newdatabase_name));
3346                         $kiriwrite_presmodule->addlinebreak();
3347                         $kiriwrite_presmodule->addlinebreak();
3348                         $kiriwrite_presmodule->startbox("datalist");
3349                         foreach $page (keys %copied_list){
3350                                 if (!$copied_list{$page}{Name}){
3351                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
3352                                         $kiriwrite_presmodule->addtext(" (" . $copied_list{$page}{Filename} . ")");
3353                                 } else {
3354                                         $kiriwrite_presmodule->addtext($copied_list{$page}{Name} . " (" . $copied_list{$page}{Filename} . ")");
3355                                 }
3356                                 $kiriwrite_presmodule->addlinebreak();
3357                         }
3358                         $kiriwrite_presmodule->endbox();
3360                 } else {
3362                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagescopied}, $olddatabase_name, $newdatabase_name));
3364                 }
3366                 if (%warning_list){
3368                         $kiriwrite_presmodule->addlinebreak();
3369                         $kiriwrite_presmodule->addlinebreak();
3370                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypageswarnings});
3371                         $kiriwrite_presmodule->addlinebreak();
3372                         $kiriwrite_presmodule->addlinebreak();
3373                         $kiriwrite_presmodule->startbox("datalist");
3374                         foreach $warning (keys %warning_list){
3375                                 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
3376                                                         $kiriwrite_presmodule->addlinebreak();
3377                         }
3378                         $kiriwrite_presmodule->endbox();
3380                 }
3382                 $kiriwrite_presmodule->addlinebreak();
3383                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $olddatabase_name)});
3384                 $kiriwrite_presmodule->addtext(" | ");
3385                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $newdatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{viewpagelist}, $newdatabase_name)});
3387                 return $kiriwrite_presmodule->grab();
3389         } elsif ($confirm eq 0) {
3391                 # The action to copy several pages from one database
3392                 # to another has not been confirmed so write a form.
3394                 # Connect to the database server.
3396                 $kiriwrite_dbmodule->connect();
3398                 # Check if any errors occured while connecting to the database server.
3400                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3402                         # A database connection error has occured so return
3403                         # an error.
3405                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3407                 }
3409                 # Select the database to copy the pages from.
3411                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3413                 # Check if any errors occured while selecting the database.
3415                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3417                         # The database does not exist, so return an error.
3419                         kiriwrite_error("databasemissingfile");
3421                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3423                         # The database has invalid permissions set, so return
3424                         # an error.
3426                         kiriwrite_error("databaseinvalidpermissions");
3428                 }
3430                 # Get information about the database.
3432                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3434                 # Check if any errors had occured while getting the database
3435                 # information.
3437                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3439                         # A database error has occured so return an error and
3440                         # also the extended error information.
3442                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3444                 };
3446                 my $database_name       = $database_info{"DatabaseName"};
3448                 # Define some values for later.
3450                 my %page_info;
3451                 my %copy_list;
3452                 my %db_list;
3453                 my @page_info;
3454                 my $page;
3455                 my $data_file;
3456                 my $dbname;
3457                 my $filename;
3458                 my $pageseek    = 0;
3459                 my $dbseek      = 0;
3460                 my $pagefound   = 0;
3462                 tie(%copy_list, 'Tie::IxHash');
3463                 tie(%db_list, 'Tie::IxHash');
3465                 # Process each filename given.
3467                 foreach $filename (@filelist){
3469                         # Get the page information.
3471                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3473                         # Check if any errors occured.
3475                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3477                                 # A database error has occured so return an error and
3478                                 # also the extended error information.
3480                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3482                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3484                                 # The page does not exist, so process the next page.
3486                                 next;
3488                         }
3490                         # Add the page name and file name to the list of
3491                         # pages to move.
3493                         $copy_list{$pageseek}{Filename} = $page_info{"PageFilename"};
3494                         $copy_list{$pageseek}{Name}     = $page_info{"PageName"};
3496                         # Increment the page seek counter.
3498                         $pageseek++;
3500                 }
3502                 # Check if any pages exust and return an error if
3503                 # there wasn't.
3505                 if ($pageseek eq 0){
3507                         # None of the selected pages exist, so return
3508                         # an error.
3510                         kiriwrite_error("nopagesselected");
3512                 }
3514                 # Get the database filenames and names.
3516                 my @database_list       = $kiriwrite_dbmodule->getdblist();
3518                 # Check if any errors occured while trying to get the list of databases.
3520                 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
3522                         # The database directory is missing so return an error.
3524                         kiriwrite_error("datadirectorymissing");
3526                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
3528                         # The database directory has invalid permissions set so return
3529                         # an error.
3531                         kiriwrite_error("datadirectoryinvalidpermissions");
3533                 }
3535                 # Process each database to get the database name.
3537                 foreach $data_file (@database_list){
3539                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
3541                         # Check if any errors occured while selecting the database.
3543                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3545                                 # The database does not exist, so process the next
3546                                 # database.
3548                                 next;
3550                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3552                                 # The database has invalid permissions set, so process
3553                                 # the next database.
3555                                 next;
3557                         }
3559                         # Get the database information.
3561                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3563                         # Check if any errors had occured while getting the database
3564                         # information.
3566                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3568                                 # A database error has occured so process the next
3569                                 # database.
3571                                 next;
3573                         };
3575                         # Check if the database name is undefined and if it is
3576                         # then set it blank.
3578                         if (!$database_name){
3579                                 $database_name = "";
3580                         }
3582                         # Append the database filename and name to the list of databases
3583                         # to move the pages to.
3585                         $db_list{$dbseek}{Filename}     = $data_file;
3586                         $db_list{$dbseek}{Name}         = $database_info{"DatabaseName"};
3588                         $dbseek++;
3590                 }
3592                 # Disconnect from the database server.
3594                 $kiriwrite_dbmodule->disconnect();
3596                 # Write out the form.
3598                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypages}, { Style => "pageheader" });
3599                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
3600                 $kiriwrite_presmodule->startbox();
3601                 $kiriwrite_presmodule->addhiddendata("mode", "page");
3602                 $kiriwrite_presmodule->addhiddendata("action", "multicopy");
3603                 $kiriwrite_presmodule->addhiddendata("database", $database);
3604                 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
3605                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
3607                 $pageseek = 1;
3609                 foreach $page (keys %copy_list){
3610                         $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
3611                         $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $copy_list{$page}{Filename});
3612                         $pageseek++;
3613                 }
3615                 $kiriwrite_presmodule->addlinebreak();
3616                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{copypagesmessage}, $database_name));
3618                 $kiriwrite_presmodule->addlinebreak();
3619                 $kiriwrite_presmodule->addlinebreak();
3621                 $kiriwrite_presmodule->startbox("datalist");
3623                 foreach $page (keys %copy_list){
3624                         if (!$copy_list{$page}{Name}){
3625                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
3626                                 $kiriwrite_presmodule->addtext(" (" . $copy_list{$page}{Filename} . ")");
3627                         } else {
3628                                 $kiriwrite_presmodule->addtext($copy_list{$page}{Name} . " (" . $copy_list{$page}{Filename} . ")");
3629                         }
3630                         $kiriwrite_presmodule->addlinebreak();
3631                 }
3633                 $kiriwrite_presmodule->endbox();
3635                 $kiriwrite_presmodule->addlinebreak();
3637                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypagesto});
3638                 $kiriwrite_presmodule->addselectbox("newdatabase");
3640                 foreach $dbname (keys %db_list){
3641                         $kiriwrite_presmodule->addoption($db_list{$dbname}{Name} . " (" . $db_list{$dbname}{Filename} . ")", { Value => $db_list{$dbname}{Filename}});
3642                 }
3644                 $kiriwrite_presmodule->endselectbox();
3646                 $kiriwrite_presmodule->addlinebreak();
3647                 $kiriwrite_presmodule->addlinebreak();
3648                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{copypagesbutton});
3649                 $kiriwrite_presmodule->addtext(" | ");
3650                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
3652                 $kiriwrite_presmodule->endbox();                
3653                 $kiriwrite_presmodule->endform();
3655                 return $kiriwrite_presmodule->grab();
3657         } else {
3659                 # The confirm value is other than 0 or 1, so return
3660                 # an error.
3662                 kiriwrite_error("invalidvariable");
3664         }
3668 sub kiriwrite_page_multiedit{
3669 #################################################################################
3670 # kiriwrite_page_multiedit: Edit several pages from a database.                 #
3671 #                                                                               #
3672 # Usage:                                                                        #
3673 #                                                                               #
3674 # kiriwrite_page_multiedit(database, newsection, altersection, newtemplate,     #
3675 #                               altertemplate, newsettings, altersettings       #
3676 #                               confirm, filelist);                             #
3677 #                                                                               #
3678 # database      Specifies the database to edit the pages from.                  #
3679 # newsection    Specifies the new section name to use on the selected pages.    #
3680 # altersection  Specifies if the section name should be altered.                #
3681 # newtemplate   Specifies the new template filename to use on the selected      #
3682 #               pages.                                                          #
3683 # altertemplate Specifies if the template filename should be altered.           #
3684 # newsettings   Specifies the new settings to use on the selected pages.        #
3685 # altersettings Specifies if the settings should be altered.                    #
3686 # confirm       Confirms the action to edit the selected pages.                 #
3687 # filelist      The list of file names to edit.                                 #
3688 #################################################################################
3690         # Get the values that were passed to the subroutine.
3692         my ($database, $newsection, $altersection, $newtemplate, $altertemplate, $newsettings, $altersettings, $confirm, @filelist) = @_;
3694         # Check if the file list is blank and return an error
3695         # if it is.
3697         if (!@filelist){
3699                 # The file list really is blank so return
3700                 # an error.
3702                 kiriwrite_error("nopagesselected");
3704         }
3706         # Check if certain values are undefined and define them if
3707         # they are.
3709         if (!$altersection){
3711                 # The alter section value is blank, so set it to
3712                 # off.
3714                 $altersection   = "off";
3716         }
3718         if (!$altertemplate){
3720                 # The alter template value is blank, so set it to
3721                 # off.
3723                 $altertemplate  = "off";
3725         }
3727         if (!$altersettings){
3729                 # The alter settings value is blank, so set it to
3730                 # off.
3732                 $altersettings  = "off";
3734         }
3736         # Check if the database filename is valid and return an error if
3737         # it isn't.
3739         my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
3741         if ($pagedatabase_filename_check eq 1){
3743                 # The database filename is blank, so return an error.
3745                 kiriwrite_error("blankdatabasepageadd");
3747         } elsif ($pagedatabase_filename_check eq 2){
3749                 # The database filename is invalid, so return an error.
3751                 kiriwrite_error("databasefilenameinvalid");
3753         }
3755         # Check if the confirm value is blank and if it is then
3756         # set the confirm value to 0.
3758         if (!$confirm){
3760                 $confirm = 0;
3762         }
3764         if ($confirm eq 1){
3766                 # The action to edit the template has been confirmed so
3767                 # edit the selected pages.
3769                 # Check the values recieved at UTF8 compliant before
3770                 # converting.
3772                 kiriwrite_variablecheck($newsection, "utf8", 0, 0);
3773                 kiriwrite_variablecheck($newtemplate, "utf8", 0, 0);
3774                 kiriwrite_variablecheck($newsettings, "utf8", 0, 0);
3776                 # Convert the values into proper UTF8 values.
3778                 $newsection     = kiriwrite_utf8convert($newsection);
3779                 $newtemplate    = kiriwrite_utf8convert($newtemplate);
3780                 $newsettings    = kiriwrite_utf8convert($newsettings);
3782                 # Check the length of the variables.
3784                 kiriwrite_variablecheck($altersection, "maxlength", 3, 0);
3785                 kiriwrite_variablecheck($altertemplate, "maxlength", 3, 0);
3786                 kiriwrite_variablecheck($altersettings, "maxlength", 3, 0);
3787                 my $newsection_maxlength_check  = kiriwrite_variablecheck($newsection, "maxlength", 256, 1);
3788                 my $newtemplate_maxlength_check = kiriwrite_variablecheck($newtemplate, "maxlength", 256, 1);
3789                 my $newtemplate_filename_check  = kiriwrite_variablecheck($newtemplate, "filename", 0, 1);
3790                 my $newsettings_maxlength_check = kiriwrite_variablecheck($newsettings, "maxlength", 1, 1);
3791                 my $newsettings_settings_check  = kiriwrite_variablecheck($newsettings, "pagesetting", 0, 1);
3793                 # Check the values and return an error if needed.
3795                 if ($newsection_maxlength_check eq 1 && $altersection eq "on"){
3797                         # The new section name is too long, so return an
3798                         # error.
3800                         kiriwrite_error("pagesectiontoolong");
3802                 }
3804                 if ($newtemplate_maxlength_check eq 1 && $altertemplate eq "on"){
3806                         # The new template name is too long, so return an
3807                         # error.
3809                         kiriwrite_error("templatefilenametoolong");
3811                 }
3813                 # Check if the template filename is set to !skip or !none
3814                 # and skip this check if it is.
3816                 if ($newtemplate eq "!skip" || $newtemplate eq "!none"){
3818                         # Skip this check as the template filename is 
3819                         # !skip or !none.
3821                 } else {
3822                         if ($newtemplate_filename_check eq 1 && $altertemplate eq "on" || $newtemplate_filename_check eq 2 && $altertemplate eq "on"){
3824                                 # The new template filename is invalid, so return
3825                                 # an error.
3827                                 kiriwrite_error("templatefilenameinvalid");
3829                         }
3830                 }
3832                 if ($newsettings_maxlength_check eq 1 && $altertemplate eq "on"){
3834                         # The new settings value is too long, so return
3835                         # an error.
3837                         kiriwrite_error("pagesettingstoolong");
3839                 }
3841                 if ($newsettings_settings_check eq 1 && $altersettings eq "on"){
3843                         # The new settings value is invalid, so return
3844                         # an error.
3846                         kiriwrite_error("pagesettingsinvalid");
3848                 }
3850                 # Define some values for later.
3852                 my %database_info;
3853                 my %edited_list;
3854                 my %warning_list;
3855                 my %page_info;
3856                 my $page;
3857                 my $warning;
3858                 my $filename;
3859                 my $page_name;
3860                 my $pagefound = 0;
3861                 my $pageedited = 0;
3862                 my $warning_count = 0;
3864                 tie(%edited_list, 'Tie::IxHash');
3865                 tie(%warning_list, 'Tie::IxHash');
3867                 # Check if the template filename is !skip and
3868                 # set the alter template value to off if it
3869                 # is.
3871                 if ($newtemplate eq "!skip"){
3873                         $altertemplate = "off";
3875                 }
3877                 # Check if all values are not selected and return
3878                 # an error if they are.
3880                 if ($altersection ne "on" && $altertemplate ne "on" && $altersettings ne "on"){
3882                         # All values are not selected so return 
3883                         # an error.
3885                         kiriwrite_error("noeditvaluesselected");
3887                 }
3889                 # Connect to the database server.
3891                 $kiriwrite_dbmodule->connect();
3893                 # Check if any errors occured while connecting to the database server.
3895                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3897                         # A database connection error has occured so return
3898                         # an error.
3900                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3902                 }
3904                 # Select the database.
3906                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3908                 # Check if any errors occured while selecting the database.
3910                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3912                         # The database does not exist, so return an error.
3914                         kiriwrite_error("databasemissingfile");
3916                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3918                         # The database has invalid permissions set, so return
3919                         # an error.
3921                         kiriwrite_error("databaseinvalidpermissions");
3923                 }
3925                 # Check if the database has read and write permissions.
3927                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
3929                 if ($database_permissions eq 1){
3931                         # The database permissions are invalid so return an error.
3933                         kiriwrite_error("databaseinvalidpermissions");
3935                 }
3937                 # Get information about the database.
3939                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3941                 # Check if any errors had occured while getting the database
3942                 # information.
3944                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3946                         # A database error has occured so return an error and
3947                         # also the extended error information.
3949                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3951                 };
3953                 my $database_name = $database_info{"DatabaseName"};
3955                 # Edit the selected pages.
3957                 foreach $filename (@filelist){
3959                         # Get the page information.
3961                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3963                         # Check if any errors occured.
3965                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3967                                 # A database error has occured so write a warning message.
3969                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3971                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3973                                 # The page does not exist, so write a warning message.
3975                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepagedoesnotexist}, $filename);
3976                                 $warning_count++;
3977                                 next;
3979                         }
3981                         # Check if the page section should be altered.
3983                         if ($altersection eq "on"){
3985                                 # Change the section name.
3987                                 $page_info{"PageSection"} = $newsection;
3989                         }
3991                         # Check if the page template should be altered.
3993                         if ($altertemplate eq "on"){
3995                                 # Change the page template filename.
3997                                 $page_info{"PageTemplate"} = $newtemplate;
3999                         }
4001                         # Check if the page settings should be altered.
4003                         if ($altersettings eq "on"){
4005                                 # Change the page settings value.
4007                                 $page_info{"PageSettings"} = $newsettings;
4009                         }
4011                         # Edit the selected page.
4013                         $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"} });
4015                         # Check if any errors occured while editing the page.
4017                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4019                                 # A database error has occured so write a warning message
4020                                 # with the extended error information.
4022                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
4023                                 $warning_count++;
4024                                 next;
4026                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4028                                 # The pages does not exist in the database.
4030                                 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepagedoesnotexist}, $filename);
4031                                 $warning_count++;
4032                                 next;
4034                         } elsif ($kiriwrite_dbmodule->geterror eq "PageExists"){
4036                                 # A page already exists with the new filename.
4038                                 kiriwrite_error("pagefilenameexists");
4040                         }
4042                         # The page has been edited so write a message saying that the page
4043                         # has been edited.
4045                         $edited_list{$pageedited}{Filename}     = $page_info{"PageFilename"};
4046                         $edited_list{$pageedited}{Name}         = $page_info{"PageName"};
4047  
4048                         # Increment the counter of edited pages.
4049  
4050                         $pageedited++;
4052                 }
4054                 # Disconnect from the database server.
4056                 $kiriwrite_dbmodule->disconnect();
4058                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multiedit}, { Style => "pageheader" });
4059                 $kiriwrite_presmodule->addlinebreak();
4060                 $kiriwrite_presmodule->addlinebreak();
4062                 # Check if the counter of edited pages is 0 and if it is
4063                 # then write a message saying that no pages were edited
4064                 # else write a message listing all of the pages edited.
4066                 if ($pageedited eq 0){
4068                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagesedited}, $database_name));
4070                 } else {
4072                         # Write out the message saying that the selected pages
4073                         # were edited.
4075                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagesedited}, $database_name));
4076                         $kiriwrite_presmodule->addlinebreak();
4077                         $kiriwrite_presmodule->addlinebreak();
4078                         $kiriwrite_presmodule->startbox("datalist");
4080                         foreach $page (keys %edited_list){
4082                                 # Check if the page name is not blank.
4084                                 if (!$edited_list{$page}{Name}){
4086                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
4087                                         $kiriwrite_presmodule->addtext(" (" . $edited_list{$page}{Filename} . ")");
4089                                 } else {
4091                                         $kiriwrite_presmodule->addtext($edited_list{$page}{Name});
4092                                         $kiriwrite_presmodule->addtext(" (" . $edited_list{$page}{Filename} . ")");
4094                                 }
4096                                 $kiriwrite_presmodule->addlinebreak();
4097                         }
4099                         $kiriwrite_presmodule->endbox();
4101                 }
4103                 # Check if any warnings have occured and write a message
4104                 # if any warnings did occur.
4106                 if (%warning_list){
4108                         # One or several warnings have occured so 
4109                         # write a message.
4111                         $kiriwrite_presmodule->addlinebreak();
4112                         $kiriwrite_presmodule->addlinebreak();
4113                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{editedpageswarnings});
4114                         $kiriwrite_presmodule->addlinebreak();
4115                         $kiriwrite_presmodule->addlinebreak();
4116                         $kiriwrite_presmodule->startbox("datalist");
4117                         foreach $warning (keys %warning_list) {
4118                                 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
4119                                 $kiriwrite_presmodule->addlinebreak();
4120                         }
4121                         $kiriwrite_presmodule->endbox();
4123                 }
4125                 # Write a link going back to the page list for
4126                 # the selected database.
4128                 $kiriwrite_presmodule->addlinebreak();
4129                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
4131                 return $kiriwrite_presmodule->grab();
4133         } elsif ($confirm eq 0){
4135                 # The action to edit the template has not been confirmed
4136                 # so write a form out instead.
4138                 # Connect to the database server.
4140                 $kiriwrite_dbmodule->connect();
4142                 # Check if any errors occured while connecting to the database server.
4144                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4146                         # A database connection error has occured so return
4147                         # an error.
4149                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4151                 }
4153                 # Select the database.
4155                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
4157                 # Check if any errors occured while selecting the database.
4159                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4161                         # The database does not exist, so return an error.
4163                         kiriwrite_error("databasemissingfile");
4165                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4167                         # The database has invalid permissions set, so return
4168                         # an error.
4170                         kiriwrite_error("databaseinvalidpermissions");
4172                 }
4174                 # Check if the database has read and write permissions.
4176                 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
4178                 if ($database_permissions eq 1){
4180                         # The database permissions are invalid so return an error.
4182                         kiriwrite_error("databaseinvalidpermissions");
4184                 }
4186                 # Get information about the database.
4188                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4190                 # Check if any errors had occured while getting the database
4191                 # information.
4193                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4195                         # A database error has occured so return an error and
4196                         # also the extended error information.
4198                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4200                 };
4202                 my $database_name       = $database_info{"DatabaseName"};
4204                 # Define some variables for later.
4206                 my %edit_list;
4207                 my %template_list;
4208                 my %template_info;
4209                 my %page_info;
4210                 my @templates_list;
4211                 my @filenames;
4212                 my $filelist_filename;
4213                 my $filename;
4214                 my $page;
4215                 my $pageseek = 0;
4216                 my $page_name;
4217                 my $page_filename;
4218                 my $template;
4219                 my $template_filename;
4220                 my $template_warning;
4221                 my $templateseek = 0;
4223                 tie(%edit_list, 'Tie::IxHash');
4224                 tie(%template_list, 'Tie::IxHash');
4226                 # Get the information about each page that is going
4227                 # to be edited.
4229                 foreach $filelist_filename (@filelist){
4231                         %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
4233                         # Check if any errors occured.
4235                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4237                                 # A database error has occured so return an error and
4238                                 # also the extended error information.
4240                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4242                         } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4244                                 # The page does not exist, so process the next page.
4246                                 next;
4248                         }
4250                         # Add the page name and file name to the list of
4251                         # pages to edit.
4253                         $edit_list{$pageseek}{Filename} = $page_info{"PageFilename"};
4254                         $edit_list{$pageseek}{Name}     = $page_info{"PageName"};
4256                         # Increment the page seek counter and reset the
4257                         # page found value.
4259                         $pageseek++;
4261                 }
4263                 # Check if any pages were found in the database and return
4264                 # an error if not.
4266                 if ($pageseek eq 0){
4268                         # No pages were found so return an error.
4270                         kiriwrite_error("nopagesselected");
4272                 }
4274                 # Connect to the template database.
4276                 $kiriwrite_dbmodule->connecttemplate();
4278                 # Check if any errors had occured.
4280                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
4282                         # The template database does not exist so write a warning
4283                         # message.
4285                         $template_warning = $kiriwrite_lang->{pages}->{templatedatabasenotexistmultieditkeep};
4287                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
4289                         # The template database has invalid permissions set so
4290                         # return an error.
4292                         $template_warning = $kiriwrite_lang->{pages}->{templatedatabasepermissionsinvalidmultieditkeep};
4294                 }
4296                 if (!$template_warning){
4298                         # Get the list of templates available.
4300                         @templates_list = $kiriwrite_dbmodule->gettemplatelist();
4302                         # Check if any errors had occured.
4304                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
4306                                 # A database error occured while getting the list
4307                                 # of templates so write a warning message with the 
4308                                 # extended error information.
4310                                 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrormultieditkeep}, $kiriwrite_dbmodule->geterror(1));
4312                         }
4314                         if (!$template_warning){
4316                                 foreach $template_filename (@templates_list){
4318                                         # Get the template data.
4320                                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
4322                                         # Check if any error occured while getting the template information.
4324                                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
4326                                                 # A database error has occured, so write a warning message with
4327                                                 # the extended error information.
4329                                                 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrormultieditkeep}, $kiriwrite_dbmodule->geterror(1));
4331                                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
4333                                                 # The template does not exist, so process the next page.
4335                                                 next;
4337                                         }
4339                                         # Add the template to the list of templates.
4341                                         $template_list{$templateseek}{Filename} = $template_info{"TemplateFilename"};
4342                                         $template_list{$templateseek}{Name}     = $template_info{"TemplateName"};
4344                                         $templateseek++;
4346                                 }
4348                         }
4350                 }
4352                 # Disconnect from the template database.
4354                 $kiriwrite_dbmodule->disconnecttemplate();
4356                 # Disconnect from the database server.
4358                 $kiriwrite_dbmodule->disconnect();
4360                 # Write a form for editing the selected pages.
4362                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multiedit}, { Style => "pageheader" });
4363                 $kiriwrite_presmodule->addlinebreak();
4364                 $kiriwrite_presmodule->addlinebreak();
4365                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
4366                 $kiriwrite_presmodule->startbox();
4367                 $kiriwrite_presmodule->addhiddendata("mode", "page");
4368                 $kiriwrite_presmodule->addhiddendata("action", "multiedit");
4369                 $kiriwrite_presmodule->addhiddendata("database", $database);
4370                 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
4371                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
4373                 $pageseek = 1;
4375                 foreach $page (keys %edit_list){
4376                         $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
4377                         $kiriwrite_presmodule->addhiddendata("id[" . $pageseek  . "]", $edit_list{$page}{Filename});
4378                         $pageseek++;
4379                 }
4381                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{multieditmessage}, $database_name));
4382                 $kiriwrite_presmodule->addlinebreak();
4383                 $kiriwrite_presmodule->addlinebreak();
4384                 $kiriwrite_presmodule->startbox("datalist");
4386                 foreach $page (keys %edit_list){
4387                         if (!$edit_list{$page}{Name}){
4388                                 $kiriwrite_presmodule->additalictext("No Name");
4389                                 $kiriwrite_presmodule->addtext(" (" . $edit_list{$page}{Filename} . ")");
4390                         } else {
4391                                 $kiriwrite_presmodule->addtext($edit_list{$page}{Name} . " (" . $edit_list{$page}{Filename} . ")");
4392                         }
4394                         $kiriwrite_presmodule->addlinebreak();
4395                 }
4397                 $kiriwrite_presmodule->endbox();
4398                 $kiriwrite_presmodule->addlinebreak();
4399                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multieditmessagevalues});
4400                 $kiriwrite_presmodule->addlinebreak();
4401                 $kiriwrite_presmodule->addlinebreak();
4402                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
4404                 $kiriwrite_presmodule->startheader();
4405                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{alter}, { Style => "tablecellheader" });
4406                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
4407                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
4408                 $kiriwrite_presmodule->endheader();
4410                 $kiriwrite_presmodule->startrow();
4411                 $kiriwrite_presmodule->addcell("tablecell1");
4412                 $kiriwrite_presmodule->addcheckbox("altersection");
4413                 $kiriwrite_presmodule->endcell();
4414                 $kiriwrite_presmodule->addcell("tablecell1");
4415                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
4416                 $kiriwrite_presmodule->endcell();
4417                 $kiriwrite_presmodule->addcell("tablecell1");
4418                 $kiriwrite_presmodule->addinputbox("newsection", { Size => 64, MaxLength => 256 });
4419                 $kiriwrite_presmodule->endcell();
4420                 $kiriwrite_presmodule->endrow();
4422                 $kiriwrite_presmodule->startrow();
4423                 $kiriwrite_presmodule->addcell("tablecell2");
4424                 $kiriwrite_presmodule->addcheckbox("altertemplate");
4425                 $kiriwrite_presmodule->endcell();
4426                 $kiriwrite_presmodule->addcell("tablecell2");
4427                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
4428                 $kiriwrite_presmodule->endcell();
4430                 $kiriwrite_presmodule->addcell("tablecell2");
4432                 if ($template_warning){
4434                         $kiriwrite_presmodule->addhiddendata("newtemplate", "!skip");
4435                         $kiriwrite_presmodule->addtext($template_warning);
4437                 } else {
4439                         $kiriwrite_presmodule->addselectbox("newtemplate");
4441                         foreach $template (keys %template_list){
4443                                 $kiriwrite_presmodule->addoption($template_list{$template}{Name} . " (" . $template_list{$template}{Filename} . ")", { Value => $template_list{$template}{Filename}});
4445                         }
4447                         $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
4448                         $kiriwrite_presmodule->endselectbox();
4449                 }
4451                 $kiriwrite_presmodule->endcell();
4452                 $kiriwrite_presmodule->endrow();
4454                 $kiriwrite_presmodule->startrow();
4455                 $kiriwrite_presmodule->addcell("tablecell1");
4456                 $kiriwrite_presmodule->addcheckbox("altersettings");
4457                 $kiriwrite_presmodule->endcell();
4458                 $kiriwrite_presmodule->addcell("tablecell1");
4459                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
4460                 $kiriwrite_presmodule->endcell();
4461                 $kiriwrite_presmodule->addcell("tablecell1");
4462                 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => 1 , Selected => 1});
4463                 $kiriwrite_presmodule->addlinebreak();
4464                 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => 2 });
4465                 $kiriwrite_presmodule->addlinebreak();
4466                 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => 3 });
4467                 $kiriwrite_presmodule->addlinebreak();
4468                 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => 0 });
4469                 $kiriwrite_presmodule->endcell();
4470                 $kiriwrite_presmodule->endrow();
4472                 $kiriwrite_presmodule->endtable();
4473                 $kiriwrite_presmodule->addlinebreak();
4474                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{editpagesbutton});
4475                 $kiriwrite_presmodule->addtext(" | ");
4476                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
4477                 $kiriwrite_presmodule->addtext(" | ");
4478                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
4479                 $kiriwrite_presmodule->endbox();
4480                 $kiriwrite_presmodule->endform();
4482                 return $kiriwrite_presmodule->grab();
4484         } else {
4486                 # The confirm value is something else other than
4487                 # 1 or 0, so return an error.
4489                 kiriwrite_error("invalidvariable");
4491         }
4495 sub kiriwrite_page_list{
4496 #################################################################################
4497 # kiriwrite_page_list: Lists pages from an database.                            #
4498 #                                                                               #
4499 # Usage:                                                                        #
4500 #                                                                               #
4501 # kiriwrite_page_list([database]);                                              #
4502 #                                                                               #
4503 # database      Specifies the database to retrieve the pages from.              #
4504 #################################################################################
4506         # Get the database file name from what was passed to the subroutine.
4508         my ($database_file) = @_;
4510         # Check if the database_file variable is empty, if it is then print out a
4511         # select box asking the user to select a database from the list.
4513         if (!$database_file) {
4515                 # Define the variables required for this section.
4517                 my %database_info;
4518                 my @database_list;
4519                 my @databasefilenames;
4520                 my @databasenames;
4521                 my $dbseek              = 0;
4522                 my $dbfilename          = "";
4523                 my $dbname              = "";
4524                 my $data_file           = "";
4525                 my $data_file_length    = 0;
4526                 my $data_file_friendly  = "";
4527                 my $database_name       = "";
4528                 my $file_permissions    = "";
4530                 # Connect to the database server.
4532                 $kiriwrite_dbmodule->connect();
4534                 # Check if any errors occured while connecting to the database server.
4536                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4538                         # A database connection error has occured so return
4539                         # an error.
4541                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4543                 }
4545                 # Open the data directory and get all of the databases.
4547                 @database_list  = $kiriwrite_dbmodule->getdblist();
4549                 # Check if any errors occured while trying to get the list of databases.
4551                 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
4553                         # The database directory is missing so return an error.
4555                         kiriwrite_error("datadirectorymissing");
4557                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
4559                         # The database directory has invalid permissions set so return
4560                         # an error.
4562                         kiriwrite_error("datadirectoryinvalidpermissions");
4564                 }
4566                 # Get the information about each database (the short name and friendly name).
4568                 foreach $data_file (@database_list){
4570                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
4572                         # Check if any errors occured while selecting the database.
4574                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4576                                 # The database does not exist, so process the next
4577                                 # database.
4579                                 next;
4581                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4583                                 # The database has invalid permissions set, so process
4584                                 # the next database.
4586                                 next;
4588                         }
4590                         # Get the database information.
4592                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4594                         # Check if any errors had occured while getting the database
4595                         # information.
4597                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4599                                 # A database error has occured, so process the next 
4600                                 # database.
4602                                 next;
4604                         };
4606                         # Set the database name.
4608                         $database_name          = $database_info{"DatabaseName"};
4610                         # Check if the database name is undefined and if it is
4611                         # then set it blank.
4613                         if (!$database_name){
4614                                 $database_name = "";
4615                         }
4617                         # Append the database to the list of databases available.
4619                         push(@databasefilenames, $data_file);
4620                         push(@databasenames, $database_name);
4622                 }
4624                 # Disconnect from the database server.
4626                 $kiriwrite_dbmodule->disconnect();
4628                 # Write the page data.
4630                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{viewpages}, { Style => "pageheader" });
4631                 $kiriwrite_presmodule->addlinebreak();
4632                 $kiriwrite_presmodule->addlinebreak();
4633                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{nodatabaseselected});
4634                 $kiriwrite_presmodule->addlinebreak();
4635                 $kiriwrite_presmodule->addlinebreak();
4636                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"});
4637                 $kiriwrite_presmodule->startbox();
4638                 $kiriwrite_presmodule->addhiddendata("mode", "page");
4639                 $kiriwrite_presmodule->addhiddendata("action", "view");
4640                 $kiriwrite_presmodule->addselectbox("database");
4641                 foreach $dbfilename (@databasefilenames){
4642                         $dbname = $databasenames[$dbseek];
4643                         $dbseek++;
4644                         $kiriwrite_presmodule->addoption($dbname . " (" . $dbfilename . ")", { Value => $dbfilename });
4645                 }
4646                 $kiriwrite_presmodule->endselectbox();
4647                 $kiriwrite_presmodule->addtext(" | ");
4648                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{viewbutton});
4649                 $kiriwrite_presmodule->endbox();
4650                 $kiriwrite_presmodule->endform();
4652                 return $kiriwrite_presmodule->grab();
4654         } else {
4656                 my %database_info;
4657                 my %page_info;
4658                 my @database_pages;
4659                 my $pagemultioptions    = "";
4660                 my $db_name             = "";
4661                 my $tablestyle          = "";
4663                 my $page_filename       = "";
4664                 my $page_name           = "";
4665                 my $page_description    = "";
4666                 my $page_modified       = "";
4668                 my $tablestyletype      = 0;
4669                 my $page_count          = 0;
4670                 my $db_file_notblank    = 0;
4672                 tie(%database_info, 'Tie::IxHash');
4673                 tie(%page_info, 'Tie::IxHash');
4675                 # The database_file variable is not blank, so print out a list of pages from
4676                 # the selected database.
4678                 # Preform a variable check on the database filename to make sure that it is
4679                 # valid before using it.
4681                 kiriwrite_variablecheck($database_file, "filename", "", 0);
4682                 kiriwrite_variablecheck($database_file, "maxlength", 32, 0);
4684                 # Connect to the database server.
4686                 $kiriwrite_dbmodule->connect();
4688                 # Check if any errors occured while connecting to the database server.
4690                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4692                         # A database connection error has occured so return
4693                         # an error.
4695                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4697                 }
4699                 # Select the database.
4701                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_file });
4703                 # Check if any errors had occured while selecting the database.
4705                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4707                         # The database does not exist, so return an error.
4709                         kiriwrite_error("databasemissingfile");
4711                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4713                         # The database has invalid permissions set, so return
4714                         # an error.
4716                         kiriwrite_error("databaseinvalidpermissions");
4718                 }
4720                 # Get information about the database.
4722                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4724                 $db_name = $database_info{"DatabaseName"};
4726                 # Check if any errors had occured while getting the database
4727                 # information.
4729                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4731                         # A database error has occured so return an error and
4732                         # also the extended error information.
4734                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4736                 }
4738                 # Get the list of pages.
4740                 @database_pages = $kiriwrite_dbmodule->getpagelist();
4742                 # Check if any errors had occured while getting the list of pages.
4744                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4746                         # A database error has occured so return an error and
4747                         # also the extended error information.
4749                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4751                 }
4753                 # Check if there are any page names in the database array.
4755                 if (@database_pages){
4757                         # Write the start of the page.
4759                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagelist}, $db_name), { Style => "pageheader" });
4760                         $kiriwrite_presmodule->addlinebreak();
4761                         $kiriwrite_presmodule->addlinebreak();
4762                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
4763                         $kiriwrite_presmodule->startbox();
4764                         $kiriwrite_presmodule->addhiddendata("mode", "page");
4765                         $kiriwrite_presmodule->addhiddendata("database", $database_file);
4766                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
4768                         # Write the list of multiple selection options.
4770                         $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
4771                         $kiriwrite_presmodule->addtext(" | ");
4772                         $kiriwrite_presmodule->addbutton("action", { Value => "multidelete", Description => $kiriwrite_lang->{pages}->{deleteselectedbutton} });
4773                         $kiriwrite_presmodule->addtext(" | ");
4774                         $kiriwrite_presmodule->addbutton("action", { Value => "multimove", Description => $kiriwrite_lang->{pages}->{moveselectedbutton} });
4775                         $kiriwrite_presmodule->addtext(" | ");
4776                         $kiriwrite_presmodule->addbutton("action", { Value => "multicopy", Description => $kiriwrite_lang->{pages}->{copyselectedbutton} });
4777                         $kiriwrite_presmodule->addtext(" | ");
4778                         $kiriwrite_presmodule->addbutton("action", { Value => "multiedit", Description => $kiriwrite_lang->{pages}->{editselectedbutton} });
4780                         $kiriwrite_presmodule->addlinebreak();
4781                         $kiriwrite_presmodule->addlinebreak();
4782                         $kiriwrite_presmodule->endbox();
4784                         # Write the table header.
4786                         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
4787                         $kiriwrite_presmodule->startheader();
4788                         $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
4789                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagefilename}, { Style => "tablecellheader" });
4790                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagename}, { Style => "tablecellheader" });
4791                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagedescription}, { Style => "tablecellheader" });
4792                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{lastmodified}, { Style => "tablecellheader" });
4793                         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
4794                         $kiriwrite_presmodule->endheader();
4796                         # Process each page filename and get the page information.
4798                         foreach $page_filename (@database_pages){
4800                                 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page_filename, Reduced => 1 });
4802                                 # Check if any errors have occured.
4804                                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4806                                         # A database error has occured so return an error and
4807                                         # also the extended error information.
4809                                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4811                                 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4813                                         # The page does not exist, so process the next page.
4815                                         next;
4817                                 }
4819                                 $page_count++;
4821                                 $page_filename          = $page_info{"PageFilename"};
4822                                 $page_name              = $page_info{"PageName"};
4823                                 $page_description       = $page_info{"PageDescription"};
4824                                 $page_modified          = $page_info{"PageLastModified"};
4826                                 # Set the table cell style.
4828                                 if ($tablestyletype eq 0){
4830                                         $tablestyle = "tablecell1";
4831                                         $tablestyletype = 1;
4833                                 } else {
4835                                         $tablestyle = "tablecell2";
4836                                         $tablestyletype = 0;
4838                                 }
4840                                 # Write out the row of data.
4842                                 $kiriwrite_presmodule->startrow();
4843                                 $kiriwrite_presmodule->addcell($tablestyle);
4844                                 $kiriwrite_presmodule->addhiddendata("id[" . $page_count . "]", $page_filename);
4845                                 $kiriwrite_presmodule->addcheckbox("name[" . $page_count . "]");
4846                                 $kiriwrite_presmodule->endcell();
4847                                 $kiriwrite_presmodule->addcell($tablestyle);
4848                                 $kiriwrite_presmodule->addtext($page_filename);
4849                                 $kiriwrite_presmodule->endcell();
4850                                 $kiriwrite_presmodule->addcell($tablestyle);
4852                                 if (!$page_name){
4854                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
4856                                 } else {
4858                                         $kiriwrite_presmodule->addtext($page_name);
4860                                 }
4862                                 $kiriwrite_presmodule->endcell();
4863                                 $kiriwrite_presmodule->addcell($tablestyle);
4865                                 if (!$page_description){
4867                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
4869                                 } else {
4871                                         $kiriwrite_presmodule->addtext($page_description);
4873                                 }
4875                                 $kiriwrite_presmodule->endcell();
4876                                 $kiriwrite_presmodule->addcell($tablestyle);
4878                                 if (!$page_modified){
4880                                         $kiriwrite_presmodule->additalictext("No Date");
4882                                 } else {
4884                                         $kiriwrite_presmodule->addtext($page_modified);
4886                                 }
4888                                 $kiriwrite_presmodule->endcell();
4889                                 $kiriwrite_presmodule->addcell($tablestyle);
4890                                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"}  . "?mode=page&action=edit&database=" . $database_file . "&page=" . $page_filename, { Text => $kiriwrite_lang->{options}->{edit} });
4891                                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"}  . "?mode=page&action=delete&database=" . $database_file . "&page=" . $page_filename, { Text => $kiriwrite_lang->{options}->{delete} });
4892                                 $kiriwrite_presmodule->endcell();
4893                                 $kiriwrite_presmodule->endrow();
4895                                 # Increment the counter.
4897                         }
4899                 }
4901                 # Disconnect from the database server.
4903                 $kiriwrite_dbmodule->disconnect();
4905                 $kiriwrite_presmodule->endtable();
4906                 $kiriwrite_presmodule->startbox();
4907                 $kiriwrite_presmodule->addhiddendata("count", $page_count);
4908                 $kiriwrite_presmodule->endbox();
4909                 $kiriwrite_presmodule->endform();
4911                 if (!@database_pages || !$page_count){
4913                         # There were no values in the database pages array and 
4914                         # the page count had not been incremented so write a
4915                         # message saying that there were no pages in the
4916                         # database.
4918                         $kiriwrite_presmodule->clear();
4919                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagelist}, $db_name), { Style => "pageheader" });
4920                         $kiriwrite_presmodule->addlinebreak();
4921                         $kiriwrite_presmodule->addlinebreak();
4922                         $kiriwrite_presmodule->startbox("errorbox");
4923                         $kiriwrite_presmodule->enterdata($kiriwrite_lang->{pages}->{nopagesindatabase});
4924                         $kiriwrite_presmodule->endbox();
4926                 }
4928                 return $kiriwrite_presmodule->grab();
4930         }
4934 sub kiriwrite_template_add{
4935 #################################################################################
4936 # kiriwrite_template_add: Add a template to the template folder                 #
4937 #                                                                               #
4938 # Usage:                                                                        #
4939 #                                                                               #
4940 # kiriwrite_template_add(filename, name, description, layout, confirm);         #
4941 #                                                                               #
4942 # filename      The filename of the new template.                               #
4943 # name          The name of the template.                                       #
4944 # description   The description of the template.                                #
4945 # layout        The layout of the new template.                                 #
4946 # confirm       Confirm the action of creating a new template.                  #
4947 #################################################################################
4949         # Get the variables that were passed to the subroutine.
4951         my ($templatefilename, $templatename, $templatedescription, $templatelayout, $confirm) = @_;
4953         # Check if the confirm value is blank and if it is then set confirm to 0.
4955         if (!$confirm){
4957                 # The confirm value is blank, so set the value of confirm to 0.
4959                 $confirm = 0;
4961         }
4963         if ($confirm eq 1){
4965                 # Check (validate) each of the values.
4967                 kiriwrite_variablecheck($templatename, "utf8", 0, 0);
4968                 kiriwrite_variablecheck($templatedescription, "utf8", 0, 0);
4969                 kiriwrite_variablecheck($templatelayout, "utf8", 0, 0);
4971                 # Convert the values into proper UTF8 strings that can be used.
4973                 $templatename           = kiriwrite_utf8convert($templatename);
4974                 $templatedescription    = kiriwrite_utf8convert($templatedescription);
4975                 $templatelayout         = kiriwrite_utf8convert($templatelayout);
4977                 # Check the length of the converted UTF8 strings.
4979                 my $templatefilename_length_check       = kiriwrite_variablecheck($templatefilename, "maxlength", 64, 1);
4980                 my $templatename_length_check           = kiriwrite_variablecheck($templatename, "maxlength", 512, 1);
4981                 my $templatedescription_length_check    = kiriwrite_variablecheck($templatedescription, "maxlength", 512, 1);
4982                 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
4984                 if ($templatefilename_length_check eq 1){
4986                         # The template filename length is too long, so return an error.
4988                         kiriwrite_error("templatefilenametoolong");
4990                 }
4992                 if ($templatename_length_check eq 1){
4994                         # The template name length is too long, so return an error.
4996                         kiriwrite_error("templatenametoolong");
4998                 }
5001                 if ($templatedescription_length_check eq 1){
5003                         # The template description length is too long, so return an error.
5005                         kiriwrite_error("templatedescriptiontoolong");
5007                 }
5009                 # Check if the filename specified is a valid filename.
5011                 kiriwrite_variablecheck($templatefilename, "filename", "", 0);
5013                 # Connect to the template server.
5015                 $kiriwrite_dbmodule->connect();
5017                 # Connect to the template database.
5019                 $kiriwrite_dbmodule->connecttemplate(1);
5021                 # Check if any errors had occured.
5023                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5025                         # The template database has invalid permissions set so
5026                         # return an error.
5028                         kiriwrite_error("templatedatabaseinvalidpermissions");
5030                 }
5032                 $kiriwrite_dbmodule->addtemplate({ TemplateFilename => $templatefilename, TemplateName => $templatename, TemplateDescription => $templatedescription, TemplateLayout => $templatelayout });
5034                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5036                         # A database error has occured so return an error along
5037                         # with the extended error information.
5039                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5041                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5043                         # The template database has invalid permissions set so return
5044                         # an error.
5046                         kiriwrite_error("templatedatabaseinvalidpermissions");
5048                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplatePageExists"){
5050                         # The template page already exists so return an error.
5052                         kiriwrite_error("templatefilenameexists");
5054                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseUncreateable"){
5056                         # The template databases is uncreatable so return an error.
5058                         kiriwrite_error("templatedatabasenotcreated");
5060                 }
5062                 $kiriwrite_dbmodule->disconnecttemplate();
5064                 # Disconnect from the template server.
5066                 $kiriwrite_dbmodule->disconnect();
5068                 # Print out the confirmation message.
5070                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{addedtemplate}, { Style => "pageheader" });
5071                 $kiriwrite_presmodule->addlinebreak();
5072                 $kiriwrite_presmodule->addlinebreak();
5073                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{addedtemplatemessage}, $templatename));
5074                 $kiriwrite_presmodule->addlinebreak();
5075                 $kiriwrite_presmodule->addlinebreak();
5076                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5077                 return $kiriwrite_presmodule->grab();
5079         } else {
5080                 # No confirmation was made, so print out a form for adding a template.
5082                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{addtemplate}, { Style => "pageheader" });
5083                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5084                 $kiriwrite_presmodule->startbox();
5085                 $kiriwrite_presmodule->addhiddendata("mode", "template");
5086                 $kiriwrite_presmodule->addhiddendata("action", "add");
5087                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5088                 $kiriwrite_presmodule->addlinebreak();
5089                 $kiriwrite_presmodule->starttable("", { CellSpacing => 0, CellPadding => 5 });
5091                 $kiriwrite_presmodule->startheader();
5092                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
5093                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
5094                 $kiriwrite_presmodule->endheader();
5096                 $kiriwrite_presmodule->startrow();
5097                 $kiriwrite_presmodule->addcell("tablecell1");
5098                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatename});
5099                 $kiriwrite_presmodule->endcell();
5100                 $kiriwrite_presmodule->addcell("tablecell2");
5101                 $kiriwrite_presmodule->addinputbox("templatename", { Size => 64, MaxLength => 512 });
5102                 $kiriwrite_presmodule->endcell();
5103                 $kiriwrite_presmodule->endrow();
5105                 $kiriwrite_presmodule->startrow();
5106                 $kiriwrite_presmodule->addcell("tablecell1");
5107                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatedescription});
5108                 $kiriwrite_presmodule->endcell();
5109                 $kiriwrite_presmodule->addcell("tablecell2");
5110                 $kiriwrite_presmodule->addinputbox("templatedescription", { Size => 64, MaxLength => 512 });
5111                 $kiriwrite_presmodule->endcell();
5112                 $kiriwrite_presmodule->endrow();
5114                 $kiriwrite_presmodule->startrow();
5115                 $kiriwrite_presmodule->addcell("tablecell1");
5116                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatefilename});
5117                 $kiriwrite_presmodule->endcell();
5118                 $kiriwrite_presmodule->addcell("tablecell2");
5119                 $kiriwrite_presmodule->addinputbox("templatefilename", { Size => 32, MaxLength => 64 });
5120                 $kiriwrite_presmodule->endcell();
5121                 $kiriwrite_presmodule->endrow();
5123                 $kiriwrite_presmodule->startrow();
5124                 $kiriwrite_presmodule->addcell("tablecell1");
5125                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatelayout});
5126                 $kiriwrite_presmodule->endcell();
5127                 $kiriwrite_presmodule->addcell("tablecell2");
5128                 $kiriwrite_presmodule->addtextbox("templatelayout", { Columns => 50, Rows => 10 });
5129                 $kiriwrite_presmodule->addlinebreak();
5130                 $kiriwrite_presmodule->addlinebreak();
5131                 $kiriwrite_presmodule->startbox("datalist");
5132                 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
5133                 $kiriwrite_presmodule->addlinebreak();
5134                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagecontent});
5135                 $kiriwrite_presmodule->addlinebreak();
5136                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
5137                 $kiriwrite_presmodule->addlinebreak();
5138                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
5139                 $kiriwrite_presmodule->addlinebreak();
5140                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
5141                 $kiriwrite_presmodule->addlinebreak();
5142                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
5143                 $kiriwrite_presmodule->addlinebreak();
5144                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
5145                 $kiriwrite_presmodule->addlinebreak();
5146                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
5147                 $kiriwrite_presmodule->addlinebreak();
5148                 $kiriwrite_presmodule->endbox();
5149                 $kiriwrite_presmodule->endcell();
5150                 $kiriwrite_presmodule->endrow();
5151                 $kiriwrite_presmodule->endtable();
5153                 $kiriwrite_presmodule->addlinebreak();
5154                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{addtemplatebutton});
5155                 $kiriwrite_presmodule->addtext(" | ");
5156                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
5157                 $kiriwrite_presmodule->addtext(" | ");
5158                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template" , { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5160                 $kiriwrite_presmodule->endbox();
5161                 $kiriwrite_presmodule->endform();
5163                 return $kiriwrite_presmodule->grab();
5165         }
5170 sub kiriwrite_template_edit{
5171 #################################################################################
5172 # kiriwrite_template_edit: Edit a template from the template folder.            #
5173 #                                                                               #
5174 # Usage:                                                                        #
5175 #                                                                               #
5176 # kiriwrite_template_edit(filename, [newfilename], [newname], [newdescription], #
5177 #                               [templatelayout], [confirm]);                   #
5178 #                                                                               #
5179 # filename              The current filename of the template to edit.           #
5180 # newfilename           The new filename of the template to edit.               #
5181 # newname               The new name of the template being edited.              #
5182 # newdescription        The new description of the template being edited.       #
5183 # templatelayout        The modified/altered template layout.                   #
5184 # confirm               Confirms the action to edit a template and its          #
5185 #                       settings.                                               #
5186 #################################################################################
5188         # Get all the variables that have been passed to the subroutine.
5190         my ($templatefilename, $templatenewfilename, $templatenewname, $templatenewdescription, $templatelayout, $confirm) = @_;
5192         # Check if the confirm variable is blank, if it is then
5193         # set confirm to '0'
5195         if (!$confirm){
5197                 # confirm is uninitalised/blank, so set the value of confirm
5198                 # to '0'
5200                 $confirm = 0;
5202         }
5204         # Check if the template filename is blank and if it is, then return
5205         # an error.
5207         if (!$templatefilename){
5209                 kiriwrite_error("templatefilenameblank");
5211         }
5213         # Connect to the database server.
5215         $kiriwrite_dbmodule->connect();
5217         # Check if any errors occured while connecting to the database server.
5219         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5221                 # A database connection error has occured so return
5222                 # an error.
5224                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5226         }
5228         if ($confirm eq 1){
5230                 # Check certain strings to see if they UTF8 compiliant.
5232                 kiriwrite_variablecheck($templatenewname, "utf8", 0, 0);
5233                 kiriwrite_variablecheck($templatenewdescription, "utf8", 0, 0);
5234                 kiriwrite_variablecheck($templatelayout, "utf8", 0, 0);
5236                 # Convert the values into proper UTF8 strings.
5238                 $templatenewname        = kiriwrite_utf8convert($templatenewname);
5239                 $templatenewdescription = kiriwrite_utf8convert($templatenewdescription);
5240                 $templatelayout         = kiriwrite_utf8convert($templatelayout);
5242                 # Check if the filenames recieved are valid filenames.
5244                 kiriwrite_variablecheck($templatenewfilename, "maxlength", 64, 0);
5245                 kiriwrite_variablecheck($templatenewdescription, "maxlength", 512, 0);
5246                 kiriwrite_variablecheck($templatenewname, "maxlength", 512, 0);
5247                 kiriwrite_variablecheck($templatefilename, "maxlength", 64, 0);
5248                 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
5250                 kiriwrite_variablecheck($templatefilename, "filename", "", 0);
5251                 kiriwrite_variablecheck($templatenewfilename, "filename", "", 0);
5253                 # Connect to the template database.
5255                 $kiriwrite_dbmodule->connecttemplate();
5257                 # Check if any errors had occured.
5259                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5261                         # The template database has invalid permissions set so
5262                         # return an error.
5264                         kiriwrite_error("templatedatabaseinvalidpermissions");
5266                 }
5268                 # Edit the template.
5270                 $kiriwrite_dbmodule->edittemplate({ TemplateFilename => $templatefilename, NewTemplateFilename => $templatenewfilename, NewTemplateName => $templatenewname, NewTemplateDescription => $templatenewdescription, NewTemplateLayout => $templatelayout });
5272                 # Check if any error occured while editing the template.
5274                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5276                         # A database error has occured, so return an error.
5278                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5280                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5282                         # The template database has invalid permissions set so return
5283                         # an error.
5285                         kiriwrite_error("templatedatabaseinvalidpermissions");
5287                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5289                         # The template does not exist, so process the next template.
5291                         kiriwrite_error("templatedoesnotexist");
5293                 }
5295                 # Disconnect from the database server.
5297                 $kiriwrite_dbmodule->disconnect();
5299                 # Disconnect from the template database.
5301                 $kiriwrite_dbmodule->disconnecttemplate();
5303                 # Append a link so that the user can return to the templates list.
5305                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{editedtemplate}, { Style => "pageheader" });
5306                 $kiriwrite_presmodule->addlinebreak();
5307                 $kiriwrite_presmodule->addlinebreak();
5308                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{editedtemplatemessage}, $templatenewname));
5309                 $kiriwrite_presmodule->addlinebreak();
5310                 $kiriwrite_presmodule->addlinebreak();
5311                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5313         } else {
5315                 # Connect to the template database.
5317                 $kiriwrite_dbmodule->connecttemplate();
5319                 # Check if any errors had occured.
5321                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5323                         # The template database has invalid permissions set so
5324                         # return an error.
5326                         kiriwrite_error("templatedatabaseinvalidpermissions");
5328                 }
5330                 # Get the template information.
5332                 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $templatefilename });
5334                 # Check if any error occured while getting the template information.
5336                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5338                         # A database error has occured, so return an error.
5340                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5342                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5344                         # The template does not exist, so return an error.
5346                         kiriwrite_error("templatedoesnotexist");
5348                 }
5350                 # Disconnect from the template database.
5352                 $kiriwrite_dbmodule->disconnecttemplate();
5354                 # Get the values from the query results.
5356                 my $template_filename           = $template_info{"TemplateFilename"};
5357                 my $template_name               = $template_info{"TemplateName"};
5358                 my $template_description        = $template_info{"TemplateDescription"};
5359                 my $template_layout             = $template_info{"TemplateLayout"};
5360                 my $template_modified           = $template_info{"TemplateLastModified"};
5362                 # Check if the values are undefined and set them blank
5363                 # if they are.
5365                 if (!$template_name){
5366                         $template_name = "";
5367                 }
5369                 if (!$template_description){
5370                         $template_description = "";
5371                 }
5373                 if (!$template_layout){
5374                         $template_layout = "";
5375                 }
5377                 # Write out the form for editing an template with the current template 
5378                 # settings put into the correct place.
5380                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{edittemplate}, { Style => "pageheader" });
5381                 $kiriwrite_presmodule->addlinebreak();
5382                 $kiriwrite_presmodule->addlinebreak();
5383                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5384                 $kiriwrite_presmodule->startbox();
5385                 $kiriwrite_presmodule->addhiddendata("mode", "template");
5386                 $kiriwrite_presmodule->addhiddendata("action", "edit");
5387                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5388                 $kiriwrite_presmodule->addhiddendata("template", $template_filename);
5389                 $kiriwrite_presmodule->starttable("", { CellSpacing => 0, CellPadding => 5});
5391                 $kiriwrite_presmodule->startheader();
5392                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
5393                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
5394                 $kiriwrite_presmodule->endheader();
5396                 $kiriwrite_presmodule->startrow();
5397                 $kiriwrite_presmodule->addcell("tablecell1");
5398                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatename});
5399                 $kiriwrite_presmodule->endcell();
5400                 $kiriwrite_presmodule->addcell("tablecell2");
5401                 $kiriwrite_presmodule->addinputbox("newname", { Size => 64, MaxLength => 512, Value => $template_name });
5402                 $kiriwrite_presmodule->endcell();
5403                 $kiriwrite_presmodule->endrow();
5405                 $kiriwrite_presmodule->startrow();
5406                 $kiriwrite_presmodule->addcell("tablecell1");
5407                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatedescription});
5408                 $kiriwrite_presmodule->endcell();
5409                 $kiriwrite_presmodule->addcell("tablecell2");
5410                 $kiriwrite_presmodule->addinputbox("newdescription", { Size => 64, MaxLength => 512, Value => $template_description });
5411                 $kiriwrite_presmodule->endcell();
5412                 $kiriwrite_presmodule->endrow();
5414                 $kiriwrite_presmodule->startrow();
5415                 $kiriwrite_presmodule->addcell("tablecell1");
5416                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatefilename});
5417                 $kiriwrite_presmodule->endcell();
5418                 $kiriwrite_presmodule->addcell("tablecell2");
5419                 $kiriwrite_presmodule->addinputbox("newfilename", { Size => 32, MaxLength => 64, Value => $template_filename });
5420                 $kiriwrite_presmodule->endcell();
5421                 $kiriwrite_presmodule->endrow();
5423                 $kiriwrite_presmodule->startrow();
5424                 $kiriwrite_presmodule->addcell("tablecell1");
5425                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatelayout});
5426                 $kiriwrite_presmodule->endcell();
5427                 $kiriwrite_presmodule->addcell("tablecell2");
5428                 $kiriwrite_presmodule->addtextbox("newlayout", { Rows => 10, Columns => 50, Value => $template_layout});
5429                 $kiriwrite_presmodule->addlinebreak();
5430                 $kiriwrite_presmodule->addlinebreak();
5431                 $kiriwrite_presmodule->startbox("datalist");
5432                 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
5433                 $kiriwrite_presmodule->addlinebreak();
5434                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagecontent});
5435                 $kiriwrite_presmodule->addlinebreak();
5436                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
5437                 $kiriwrite_presmodule->addlinebreak();
5438                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
5439                 $kiriwrite_presmodule->addlinebreak();
5440                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
5441                 $kiriwrite_presmodule->addlinebreak();
5442                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
5443                 $kiriwrite_presmodule->addlinebreak();
5444                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
5445                 $kiriwrite_presmodule->addlinebreak();
5446                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
5447                 $kiriwrite_presmodule->addlinebreak();
5448                 $kiriwrite_presmodule->endbox();
5449                 $kiriwrite_presmodule->endcell();
5450                 $kiriwrite_presmodule->endrow();
5452                 $kiriwrite_presmodule->endtable();
5454                 $kiriwrite_presmodule->addlinebreak();
5456                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{edittemplatebutton});
5457                 $kiriwrite_presmodule->addtext(" | ");
5458                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
5459                 $kiriwrite_presmodule->addtext(" | ");
5460                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5462                 $kiriwrite_presmodule->endbox();
5463                 $kiriwrite_presmodule->endform();
5465         }
5467         # Disconnect from the database server.
5469         $kiriwrite_dbmodule->disconnect();
5471         return $kiriwrite_presmodule->grab();
5475 sub kiriwrite_template_delete{
5476 #################################################################################
5477 # kiriwrite_template_delete: Delete a template from the template folder.        #
5478 #                                                                               #
5479 # Usage:                                                                        #
5480 #                                                                               #
5481 # kiriwrite_template_delete(filename, confirm);                                 #
5482 #                                                                               #
5483 # filename      Specifies the filename of the database to delete.               #
5484 # confirm       Confirms the action to delete a template.                       #
5485 #################################################################################
5487         # Get the parameters that were passed to the subroutine.
5489         my ($template_filename, $template_confirm) = @_;
5491         if (!$template_confirm){
5492                 $template_confirm = 0;
5493         }
5495         # Check the length of the variables.
5496         kiriwrite_variablecheck($template_filename, "maxlength", 64, 0);
5497         kiriwrite_variablecheck($template_confirm, "maxlength", 1, 0);
5499         # Check if the template_name string is blank and if it is then
5500         # return an error (as the template_name string should not be
5501         # blank.
5503         if (!$template_filename){
5505                 # The template_filename string really is blank, 
5506                 # so return an error saying that an empty
5507                 # filename was passed (to the subroutine).
5509                 kiriwrite_error("templatefilenameblank");
5511         }
5513         # Check if the template_confirm string is blank and if it is, write
5514         # out a form asking the user to confirm the deletion.
5516         if ($template_confirm eq 1){
5518                 # The action to delete the template from the template database has
5519                 # been confirmed so delete the template.
5521                 # Connect to the database server.
5523                 $kiriwrite_dbmodule->connect();
5525                 # Check if any errors occured while connecting to the database server.
5527                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5529                         # A database connection error has occured so return
5530                         # an error.
5532                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5534                 }
5536                 # Check if the template database exists and the file permissions
5537                 # are valid and return an error if they aren't.
5539                 $kiriwrite_dbmodule->connecttemplate();
5541                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5543                         # The template database does not exist so write a warning
5544                         # message.
5546                         kiriwrite_error("templatedatabasemissing");
5548                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5550                         # The template database has invalid permissions set so
5551                         # return an error.
5553                         kiriwrite_error("templatedatabaseinvalidpermissions");
5555                 }
5557                 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
5559                 # Check if any error occured while getting the template information.
5561                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5563                         # A database error has occured, so return an error.
5565                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5567                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5569                         # The template does not exist, so return an error.
5571                         kiriwrite_error("templatedoesnotexist");
5573                 }
5575                 # Delete the selected template.
5577                 $kiriwrite_dbmodule->deletetemplate({ TemplateFilename => $template_filename });
5579                 # Check if any error occured while deleting the template.
5581                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5583                         # A database error has occured, so return an error.
5585                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5587                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5589                         # The template does not exist, so process the next template.
5591                         kiriwrite_error("templatedoesnotexist");
5593                 }
5595                 $kiriwrite_dbmodule->disconnecttemplate();
5597                 # Get the deleted database name.
5599                 my $database_template_name = $template_info{"TemplateName"};
5601                 # Disconnect from the database server.
5603                 $kiriwrite_dbmodule->disconnect();
5605                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{deletedtemplate}, { Style => "pageheader" });
5606                 $kiriwrite_presmodule->addlinebreak();
5607                 $kiriwrite_presmodule->addlinebreak();
5608                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{deletedtemplatemessage}, $database_template_name) );
5609                 $kiriwrite_presmodule->addlinebreak();
5610                 $kiriwrite_presmodule->addlinebreak();
5611                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5613                 return $kiriwrite_presmodule->grab();
5615         } elsif ($template_confirm eq 0) {
5617                 # The template confirm value is 0 (previously blank and then set to 0), so
5618                 # write out a form asking the user to confirm the deletion of the template.
5620                 # Connect to the database server.
5622                 $kiriwrite_dbmodule->connect();
5624                 # Check if any errors occured while connecting to the database server.
5626                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5628                         # A database connection error has occured so return
5629                         # an error.
5631                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5633                 }
5635                 # Connect to the template database.
5637                 $kiriwrite_dbmodule->connecttemplate();
5639                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5641                         # The template database does not exist so write a warning
5642                         # message.
5644                         kiriwrite_error("templatedatabasemissing");
5646                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5648                         # The template database has invalid permissions set so
5649                         # return an error.
5651                         kiriwrite_error("templatedatabaseinvalidpermissions");
5653                 }
5655                 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
5657                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5659                         # A database error has occured, so return an error.
5661                         kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5663                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5665                         # The template does not exist, so return an error.
5667                         kiriwrite_error("templatedoesnotexist");
5669                 }
5671                 my $template_data_filename      = $template_info{"TemplateFilename"};
5672                 my $template_data_name          = $template_info{"TemplateName"};
5674                 $kiriwrite_dbmodule->disconnecttemplate();
5676                 # Disconnect from the database server.
5678                 $kiriwrite_dbmodule->disconnect();
5680                 # Write out the confirmation form.
5682                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{deletetemplate}, { Style => "pageheader" });
5683                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5684                 $kiriwrite_presmodule->startbox();
5685                 $kiriwrite_presmodule->addhiddendata("mode", "template");
5686                 $kiriwrite_presmodule->addhiddendata("template", $template_filename);
5687                 $kiriwrite_presmodule->addhiddendata("action", "delete");
5688                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5689                 $kiriwrite_presmodule->addlinebreak();
5690                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{deletetemplatemessage}, $template_data_name, $template_data_filename));
5691                 $kiriwrite_presmodule->addlinebreak();
5692                 $kiriwrite_presmodule->addlinebreak();
5693                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{deletetemplatebutton});
5694                 $kiriwrite_presmodule->addtext(" | ");
5695                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{deletetemplatereturntolist} });
5696                 $kiriwrite_presmodule->endbox();
5697                 $kiriwrite_presmodule->endform();
5699                 return $kiriwrite_presmodule->grab();
5701         } else {
5703                         kiriwrite_error("invalidvariable");
5705         }
5709 sub kiriwrite_template_list{
5710 #################################################################################
5711 # kiriwrite_template_list: List the templates in the template folder.           #
5712 #                                                                               #
5713 # Usage:                                                                        #
5714 #                                                                               #
5715 # kiriwrite_template_list();                                                    #
5716 #################################################################################
5718         # Define certain values for later.
5720         my %template_info;
5722         my @templates_list;
5724         my $template;
5725         my $template_filename           = "";
5726         my $template_filename_list      = "";
5727         my $template_name               = "";
5728         my $template_description        = "";
5729         my $template_data               = "";
5731         my $template_count = 0;
5733         my $template_style = 0;
5734         my $template_stylename = "";
5736         my $templatewarning = "";
5738         # Connect to the database server.
5740         $kiriwrite_dbmodule->connect();
5742         # Check if any errors occured while connecting to the database server.
5744         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5746                 # A database connection error has occured so return
5747                 # an error.
5749                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5751         }
5753         # Connect to the template database.
5755         $kiriwrite_dbmodule->connecttemplate();
5757         # Check if any errors had occured.
5759         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5761                 # The template database does not exist so write a warning
5762                 # message.
5764                 $templatewarning = $kiriwrite_lang->{template}->{templatedatabasedoesnotexist};
5766         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5768                 # The template database has invalid permissions set so
5769                 # return an error.
5771                 kiriwrite_error("templatedatabaseinvalidpermissions");
5773         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5775                 # A database error occured while getting the list of
5776                 # templates so return an error with the extended
5777                 # error information.
5779                 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5781         }
5783         # Get the list of template databases.
5785         if (!$templatewarning){
5787                 @templates_list = $kiriwrite_dbmodule->gettemplatelist();
5789         }
5791         # Check if any errors had occured.
5793         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5795                 # A database error occured while getting the list
5796                 # of templates so return an error with the 
5797                 # extended error information.
5799                 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5801         }
5803         # Check if any templates are in the database and if there isn't
5804         # then write a message saying that there are no templates in the
5805         # database.
5807         if (!@templates_list && !$templatewarning){
5808                 $templatewarning = $kiriwrite_lang->{template}->{notemplatesavailable};
5809         }
5811         # Process the templates into a template list.
5813         $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{viewtemplates}, { Style => "pageheader" });
5814         $kiriwrite_presmodule->addlinebreak();
5815         $kiriwrite_presmodule->addlinebreak();
5817         if ($templatewarning){
5819                 $kiriwrite_presmodule->startbox("errorbox");
5820                 $kiriwrite_presmodule->addtext($templatewarning);
5821                 $kiriwrite_presmodule->endbox();
5823         } else {
5825                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
5826                 $kiriwrite_presmodule->startheader();
5827                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatefilename}, { Style => "tablecellheader" });
5828                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatename}, { Style => "tablecellheader" });
5829                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatedescription}, { Style => "tablecellheader" });
5830                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
5831                 $kiriwrite_presmodule->endheader();
5833                 foreach $template (@templates_list){
5835                         # Get the template data.
5837                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
5839                         # Check if any errors occured while trying to get the template
5840                         # data.
5842                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5844                                 # A database error has occured, so return an error.
5846                                 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5848                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5850                                 # The template does not exist, so process the next template.
5852                                 next;
5854                         }
5856                         $template_filename      = $template_info{"TemplateFileName"};
5857                         $template_name          = $template_info{"TemplateName"};
5858                         $template_description   = $template_info{"TemplateDescription"};
5860                         # Check what style the row of table cells should be.
5861  
5862                         if ($template_style eq 0){
5863  
5864                                 $template_stylename = "tablecell1";
5865                                 $template_style = 1;
5866  
5867                         } else {
5868  
5869                                 $template_stylename = "tablecell2";
5870                                 $template_style = 0;
5871  
5872                         }
5874                         $kiriwrite_presmodule->startrow();
5875                         $kiriwrite_presmodule->addcell($template_stylename);
5876                         $kiriwrite_presmodule->addtext($template_info{"TemplateFilename"});
5878                         # Check if the blank template value was set.
5880                         if (!$template_info{"TemplateLayout"}){
5881                                 $kiriwrite_presmodule->additalictext(" " . "[Blank Template]");
5882                         }
5884                         $kiriwrite_presmodule->endcell();
5885                         $kiriwrite_presmodule->addcell($template_stylename);
5887                         # Check if the template name is blank and if it is
5888                         # write a message to say there's no name for the
5889                         # template.
5891                         if (!$template_info{"TemplateName"}){
5892                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
5893                         } else {
5894                                 $kiriwrite_presmodule->addtext($template_info{"TemplateName"});
5895                         }
5897                         $kiriwrite_presmodule->endcell();
5898                         $kiriwrite_presmodule->addcell($template_stylename);
5900                         # Check if the template description is blank and if
5901                         # it is then write a message to say there's no
5902                         # description for the template.
5904                         if (!$template_info{"TemplateDescription"}){
5905                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
5906                         } else {
5907                                 $kiriwrite_presmodule->addtext($template_info{"TemplateDescription"});
5908                         }
5910                         $kiriwrite_presmodule->endcell();
5911                         $kiriwrite_presmodule->addcell($template_stylename);
5912                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template&action=edit&template=" . $template_info{"TemplateFilename"}, { Text => $kiriwrite_lang->{options}->{edit} });
5913                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template&action=delete&template=" . $template_info{"TemplateFilename"}, { Text => $kiriwrite_lang->{options}->{delete} });
5914                         $kiriwrite_presmodule->endcell();
5915                         $kiriwrite_presmodule->endrow();
5917                 }
5919                 $kiriwrite_presmodule->endtable();
5921         }
5923         # Disconnect from the database server.
5925         $kiriwrite_dbmodule->disconnect();
5927         $kiriwrite_dbmodule->disconnecttemplate();
5928         return $kiriwrite_presmodule->grab();
5933 sub kiriwrite_database_add{
5934 #################################################################################
5935 # kiriwrite_database_add: Creates a new database.                               #
5936 #                                                                               #
5937 # Usage:                                                                        #
5938 #                                                                               #
5939 # kiriwrite_database_add(filename, name, description, notes, categories,        #
5940 #                               [confirm]);                                     #
5941 #                                                                               #
5942 # filename      Specifies the filename for the database.                        #
5943 # name          Specifies a (friendly) name for the database.                   #
5944 # description   Specifies a description for the database.                       #
5945 # notes         Specifies the notes for the database.                           #
5946 # categories    Specifies the categories for the database.                      #
5947 # confirm       Confirms the action to create a database.                       #
5948 #################################################################################
5950         # Get the variables passed from the subroutine.
5952         my ($database_filename, $database_name, $database_description, $database_notes, $database_categories, $database_confirm) = @_;
5954         # Check if the confirm value is blank and if it is then
5955         # set the confirm value to 0.
5957         if (!$database_confirm){
5959                 # The confirm value was blank so set the value to 0.
5961                 $database_confirm = 0;
5963         }
5965         if ($database_confirm eq 1){
5967                 # The action to create a new database is confirmed.
5969                 # Validate the database name and database descriptions.
5971                 my $database_name_check_utf8            = kiriwrite_variablecheck($database_name, "utf8", 0, 0);
5972                 my $database_description_check_utf8     = kiriwrite_variablecheck($database_description, "utf8", 0, 0);
5973                 my $database_notes_check_utf8           = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
5974                 my $database_categories_check_utf8      = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
5976                 # Convert the UTF8 strings before checking the length of the strings.
5978                 $database_name                  = kiriwrite_utf8convert($database_name);
5979                 $database_description           = kiriwrite_utf8convert($database_description);
5980                 $database_notes                 = kiriwrite_utf8convert($database_notes);
5981                 $database_categories            = kiriwrite_utf8convert($database_categories);
5983                 my $database_name_check_blank           = kiriwrite_variablecheck($database_name, "blank", 0, 1);
5984                 my $database_name_check_length          = kiriwrite_variablecheck($database_name, "maxlength", 256, 1);
5985                 my $database_description_check_length   = kiriwrite_variablecheck($database_description, "maxlength", 512, 1);
5986                 my $database_filename_check_length      = kiriwrite_variablecheck($database_filename, "maxlength", 32, 1);
5987                 my $database_categories_check_length    = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
5989                 # Check if values returned contains any values that would
5990                 # result in a specific error message being returned.
5992                 if ($database_name_check_length eq 1){
5994                         # The length of the database name is too long, so return an error.
5995                         kiriwrite_error("databasenametoolong");
5997                 }
5999                 if ($database_description_check_length eq 1){
6001                         # The database description length is too long, so return an error.
6002                         kiriwrite_error("databasedescriptiontoolong");
6004                 }
6006                 if ($database_name_check_blank eq 1){
6008                         # The database name is blank, so return an error.
6009                         kiriwrite_error("databasenameblank");
6011                 }
6013                 if ($database_filename_check_length eq 1){
6015                         # The database filename is to long, so return an error.
6016                         kiriwrite_error("databasefilenametoolong");
6018                 }
6020                 if ($database_categories_check_length eq 1){
6022                         # The database categories is too long, so return an error.
6023                         kiriwrite_error("databasecategoriestoolong");
6025                 }
6027                 # Check if the database filename is blank and if it is then
6028                 # generate a filename.
6030                 if ($database_filename eq ""){
6032                         # Filename is blank so generate a file name from
6033                         # the database name.
6035                         $database_filename = kiriwrite_processfilename($database_name);
6037                 } else {
6039                         # Filename is not blank so don't generate a filename.
6041                 }
6043                 kiriwrite_variablecheck($database_filename, "filename", "", 0);
6044                 kiriwrite_variablecheck($database_filename, "maxlength", 32, 0);
6046                 # Connect to the database server.
6048                 $kiriwrite_dbmodule->connect();
6050                 # Check if any errors occured while connecting to the database server.
6052                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6054                         # A database connection error has occured so return
6055                         # an error.
6057                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6059                 }
6061                 my $database_name_final = $database_name;
6063                 # Create the database.
6065                 $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"} });
6067                 # Check if any errors have occured.
6069                 if ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
6071                         # A database with the filename given already exists, so
6072                         # return an error.
6074                         kiriwrite_error("fileexists");
6076                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6078                         # A database error has occured so return an error with
6079                         # the extended error information.
6081                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6083                 }
6085                 # Disconnect from the database server.
6087                 $kiriwrite_dbmodule->disconnect();
6089                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
6090                 $kiriwrite_presmodule->addlinebreak();
6091                 $kiriwrite_presmodule->addlinebreak();
6092                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseadded} , $database_name_final));
6093                 $kiriwrite_presmodule->addlinebreak();
6094                 $kiriwrite_presmodule->addlinebreak();
6095                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6097                 return $kiriwrite_presmodule->grab();
6099         }
6101         # There is confirm value is not 1, so write a form for creating a database to
6102         # store pages in.
6104         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
6105         $kiriwrite_presmodule->addlinebreak();
6106         $kiriwrite_presmodule->addlinebreak();
6107         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6108         $kiriwrite_presmodule->startbox();      
6109         $kiriwrite_presmodule->addhiddendata("mode", "db");
6110         $kiriwrite_presmodule->addhiddendata("action", "new");
6111         $kiriwrite_presmodule->addhiddendata("confirm", "1");
6112         $kiriwrite_presmodule->endbox();
6113         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
6115         $kiriwrite_presmodule->startheader();
6116         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader"});
6117         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader"});
6118         $kiriwrite_presmodule->endheader();
6120         $kiriwrite_presmodule->startrow();
6121         $kiriwrite_presmodule->addcell("tablecell1");
6122         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
6123         $kiriwrite_presmodule->endcell();
6124         $kiriwrite_presmodule->addcell("tablecell2");
6125         $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256 });
6126         $kiriwrite_presmodule->endcell();
6127         $kiriwrite_presmodule->endrow();
6129         $kiriwrite_presmodule->startrow();
6130         $kiriwrite_presmodule->addcell("tablecell1");
6131         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
6132         $kiriwrite_presmodule->endcell();
6133         $kiriwrite_presmodule->addcell("tablecell2");
6134         $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512 });
6135         $kiriwrite_presmodule->endcell();
6136         $kiriwrite_presmodule->endrow();
6138         $kiriwrite_presmodule->startrow();
6139         $kiriwrite_presmodule->addcell("tablecell1");
6140         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
6141         $kiriwrite_presmodule->endcell();
6142         $kiriwrite_presmodule->addcell("tablecell2");
6143         $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512 });
6144         $kiriwrite_presmodule->endcell();
6145         $kiriwrite_presmodule->endrow();
6147         $kiriwrite_presmodule->startrow();
6148         $kiriwrite_presmodule->addcell("tablecell1");
6149         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
6150         $kiriwrite_presmodule->endcell();
6151         $kiriwrite_presmodule->addcell("tablecell2");
6152         $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => 50, Rows => 10, WordWrap => 0 });
6153         $kiriwrite_presmodule->endcell();
6154         $kiriwrite_presmodule->endrow();
6156         $kiriwrite_presmodule->startrow();
6157         $kiriwrite_presmodule->addcell("tablecell1");
6158         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
6159         $kiriwrite_presmodule->endcell();
6160         $kiriwrite_presmodule->addcell("tablecell2");
6161         $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32 });
6162         $kiriwrite_presmodule->startlist();
6163         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabaseautogenerate});
6164         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasenoextensions});
6165         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacterlength});
6166         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacters});
6167         $kiriwrite_presmodule->endlist();
6168         $kiriwrite_presmodule->endcell();
6169         $kiriwrite_presmodule->endrow();
6171         $kiriwrite_presmodule->endtable();
6172         $kiriwrite_presmodule->startbox();
6173         $kiriwrite_presmodule->addlinebreak();
6174         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{adddatabasebutton});
6175         $kiriwrite_presmodule->addtext("|");
6176         $kiriwrite_presmodule->addreset($kiriwrite_lang->{database}->{clearvaluesbutton});
6177         $kiriwrite_presmodule->addtext("| ");
6178         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6179         $kiriwrite_presmodule->endbox();
6180         $kiriwrite_presmodule->endform();
6182         # Exit the subroutine taking the data in the pagadata variable with it.
6184         return $kiriwrite_presmodule->grab();
6188 sub kiriwrite_database_edit{
6189 #################################################################################
6190 # kiriwrite_database_edit: Edits an database.                                   #
6191 #                                                                               #
6192 # Usage:                                                                        #
6193 #                                                                               #
6194 # kiriwrite_database_edit(filename, newfilename, newname, newdescription,       #
6195 #                               notes, categories, [confirm]);                  #
6196 #                                                                               #
6197 # filename              Specifies the filename of the database.                 #
6198 # newfilename           Specifies the new filename of the database.             #
6199 # newname               Specifies the new name of the database.                 #
6200 # newdescription        Specifies the new description of the database.          #
6201 # notes                 Specifies the new notes of the database.                #
6202 # categories            Specifies the new categories of the database.           #
6203 # confirm               Confirms the action to edit a database.                 #
6204 #################################################################################
6206         # First, get all the variables passed to the subroutine.
6208         my ($database_shortname, $database_newfilename, $database_newname, $database_newdescription, $database_notes, $database_categories, $database_confirm) = @_;
6210         # Check if the database confirm value is blank and if it is
6211         # set the confirm value to 0.
6213         if (!$database_confirm){
6215                 $database_confirm = 0;
6217         }
6219         # Check if the database filename given is valid and return an error
6220         # if it isn't.
6222         kiriwrite_variablecheck($database_shortname, "filename", "", 0);
6224         # 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
6225         # if $database_confirm was used directly).
6227         if ($database_confirm eq 1){
6229                 # Check if the new data passes the validation tests below. First, check the length of the variables.
6231                 my $database_name_check_utf8            = kiriwrite_variablecheck($database_newname, "utf8", 0, 0);
6232                 my $database_description_check_utf8     = kiriwrite_variablecheck($database_newdescription, "utf8", 0, 0);
6233                 my $database_notes_check_utf8           = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
6234                 my $database_categories_check_utf8      = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
6236                 # Convert the UTF8 strings to make sure their length is accurate.
6238                 $database_newname               = kiriwrite_utf8convert($database_newname);
6239                 $database_newdescription        = kiriwrite_utf8convert($database_newdescription);
6240                 $database_notes                 = kiriwrite_utf8convert($database_notes);
6241                 $database_categories            = kiriwrite_utf8convert($database_categories);
6243                 # Preform the following tests.
6245                 my $database_filename_check_length      = kiriwrite_variablecheck($database_newfilename, "maxlength", 32, 1);
6246                 my $database_filename_letnum            = kiriwrite_variablecheck($database_newfilename, "filename", 0, 0);
6247                 my $database_name_check_length          = kiriwrite_variablecheck($database_newname, "maxlength", 256, 1);
6248                 my $database_description_check_length   = kiriwrite_variablecheck($database_newdescription, "maxlength", 512, 1);
6249                 my $database_categories_check_length    = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
6250                 my $database_name_check_blank           = kiriwrite_variablecheck($database_newname, "blank", 0, 1);
6252                 # Check if the data is valid and return a specific error if it doesn't.
6254                 if ($database_name_check_length eq 1){
6256                         # The length of the database name is too long, so return an error.
6257                         kiriwrite_error("databasenametoolong");
6259                 }
6261                 if ($database_description_check_length eq 1){
6263                         # The database description length is too long, so return an error.
6264                         kiriwrite_error("databasedescriptiontoolong");
6266                 }
6268                 if ($database_name_check_blank eq 1){
6270                         # The database name is blank, so return an error.
6271                         kiriwrite_error("databasenameblank");
6273                 }
6275                 if ($database_filename_check_length eq 1){
6277                         # The database filename is too long, so return an error.
6278                         kiriwrite_error("databasefilenametoolong");
6280                 }
6282                 if ($database_categories_check_length eq 1){
6284                         # The database categories is too long, so return an error.
6285                         kiriwrite_error("databasecategoriestoolong");
6287                 }
6289                 # Connect to the database server.
6291                 $kiriwrite_dbmodule->connect();
6293                 # Check if any errors occured while connecting to the database server.
6295                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6297                         # A database connection error has occured so return
6298                         # an error.
6300                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6302                 }
6304                 # Get the database.
6306                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
6308                 # Check if any errors had occured while selecting the database.
6310                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6312                         # The database does not exist, so return an error.
6314                         kiriwrite_error("databasemissingfile");
6316                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6318                         # The database has invalid permissions set, so return
6319                         # an error.
6321                         kiriwrite_error("databaseinvalidpermissions");
6323                 }
6325                 # FIX THIS!! >O
6327                 $kiriwrite_dbmodule->editdatabase({ DatabaseNewFilename => $database_newfilename, DatabaseName => $database_newname , DatabaseDescription => $database_newdescription , DatabaseNotes => $database_notes, DatabaseCategories => $database_categories });
6329                 # Check if any errors had occured while using the database.
6331                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6333                         # The database does not exist, so return an error.
6335                         kiriwrite_error("databasemissingfile");
6337                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6339                         # The database has invalid permissions set, so return
6340                         # an error.
6342                         kiriwrite_error("databaseinvalidpermissions");
6344                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
6346                         # The database directory has invalid permissions set, so
6347                         # return an error.
6349                         kiriwrite_error("datadirectoryinvalidpermissions");
6351                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
6353                         # A database already exists with the new filename, so
6354                         # return an error.
6356                         kiriwrite_error("databasealreadyexists");
6358                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6360                         # A database error has occured so return an error with
6361                         # the extended error information.
6363                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6365                 }
6367                 # Disconnect from the server.
6369                 $kiriwrite_dbmodule->disconnect();
6371                 # Write out a message saying that the database has been updated.
6373                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{editeddatabase}, { Style => "pageheader" } );
6374                 $kiriwrite_presmodule->addlinebreak();
6375                 $kiriwrite_presmodule->addlinebreak();
6376                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseupdated}, $database_newname));
6377                 $kiriwrite_presmodule->addlinebreak();
6378                 $kiriwrite_presmodule->addlinebreak();
6379                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6381                 return $kiriwrite_presmodule->grab();
6383         } else {
6385                 my (%database_info);
6387                 # Check if the database filename given is valid and return an error
6388                 # if it isn't.
6390                 # Connect to the database server.
6392                 $kiriwrite_dbmodule->connect();
6394                 # Check if any errors occured while connecting to the database server.
6396                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6398                         # A database connection error has occured so return
6399                         # an error.
6401                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6403                 }
6405                 # Select the database.
6407                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
6409                 # Check if any errors had occured while setting the database.
6411                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6413                         # The database does not exist, so return an error.
6415                         kiriwrite_error("databasemissingfile");
6417                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6419                         # The database has invalid permissions set, so return
6420                         # an error.
6422                         kiriwrite_error("databaseinvalidpermissions");
6424                 }
6426                 # Get the database information.
6428                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6430                 # Check if any errors had occured while getting the database
6431                 # information.
6433                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6435                         # A database error has occured so return an error and
6436                         # also the extended error information.
6438                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6440                 }
6442                 # Get the values needed from the kiriwrite_database_info table.
6444                 my $database_oldname            = $database_info{"DatabaseName"};
6445                 my $database_olddescription     = $database_info{"Description"};
6446                 my $database_notes              = $database_info{"Notes"};
6447                 my $database_categories         = $database_info{"Categories"};
6449                 # Disconnect from the database server.
6451                 $kiriwrite_dbmodule->disconnect();
6453                 # Print out the form for editing a database's settings.
6455                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{editdatabase}, $database_oldname), { Style => "pageheader" });
6456                 $kiriwrite_presmodule->addlinebreak();
6457                 $kiriwrite_presmodule->addlinebreak();
6458                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6459                 $kiriwrite_presmodule->startbox();
6460                 $kiriwrite_presmodule->addhiddendata("mode", "db");
6461                 $kiriwrite_presmodule->addhiddendata("action", "edit");
6462                 $kiriwrite_presmodule->addhiddendata("database", $database_shortname);
6463                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
6464                 $kiriwrite_presmodule->endbox();
6466                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
6467                 $kiriwrite_presmodule->startheader();
6468                 $kiriwrite_presmodule->addheader("Setting", { Style => "tablecellheader" });
6469                 $kiriwrite_presmodule->addheader("Value", { Style => "tablecellheader" });
6470                 $kiriwrite_presmodule->endheader();
6472                 $kiriwrite_presmodule->startrow();
6473                 $kiriwrite_presmodule->addcell("tablecell1");
6474                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
6475                 $kiriwrite_presmodule->endcell();
6476                 $kiriwrite_presmodule->addcell("tablecell2");
6477                 $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256, Value => $database_oldname } );
6478                 $kiriwrite_presmodule->endcell();
6479                 $kiriwrite_presmodule->endrow();
6481                 $kiriwrite_presmodule->startrow();
6482                 $kiriwrite_presmodule->addcell("tablecell1");
6483                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
6484                 $kiriwrite_presmodule->endcell();
6485                 $kiriwrite_presmodule->addcell("tablecell2");
6486                 $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512, Value => $database_olddescription } );
6487                 $kiriwrite_presmodule->endcell();
6488                 $kiriwrite_presmodule->endrow();
6490                 $kiriwrite_presmodule->startrow();
6491                 $kiriwrite_presmodule->addcell("tablecell1");
6492                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
6493                 $kiriwrite_presmodule->endcell();
6494                 $kiriwrite_presmodule->addcell("tablecell2");
6495                 $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512, Value => $database_categories } );
6496                 $kiriwrite_presmodule->endcell();
6497                 $kiriwrite_presmodule->endrow();
6499                 $kiriwrite_presmodule->startrow();
6500                 $kiriwrite_presmodule->addcell("tablecell1");
6501                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
6502                 $kiriwrite_presmodule->endcell();
6503                 $kiriwrite_presmodule->addcell("tablecell2");
6504                 $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => 50, Rows => 10, Value => $database_notes } );
6505                 $kiriwrite_presmodule->endcell();
6506                 $kiriwrite_presmodule->endrow();
6508                 $kiriwrite_presmodule->startrow();
6509                 $kiriwrite_presmodule->addcell("tablecell1");
6510                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
6511                 $kiriwrite_presmodule->endcell();
6512                 $kiriwrite_presmodule->addcell("tablecell2");
6513                 $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32, Value => $database_shortname } );
6514                 $kiriwrite_presmodule->endcell();
6515                 $kiriwrite_presmodule->endrow();
6517                 $kiriwrite_presmodule->endtable();
6519                 $kiriwrite_presmodule->startbox();
6520                 $kiriwrite_presmodule->addlinebreak();
6521                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{editdatabasebutton});
6522                 $kiriwrite_presmodule->addtext(" | ");
6523                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
6524                 $kiriwrite_presmodule->addtext(" | ");
6525                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6526                 $kiriwrite_presmodule->endbox();
6527                 $kiriwrite_presmodule->endform();
6529                 return $kiriwrite_presmodule->grab();
6531         }
6533         # The interpreter should not be here. So return an error saying invalid variable.
6535         kiriwrite_error("invalidvariable");
6539 sub kiriwrite_database_delete{
6540 #################################################################################
6541 # kiriwrite_database_delete: Deletes an database.                               #
6542 #                                                                               #
6543 # Usage:                                                                        #
6544 #                                                                               #
6545 # kiriwrite_database_delete(filename, [confirm]);                               #
6546 #                                                                               #
6547 # filename      Specifies the filename for the database to be deleted.          #
6548 # confirm       Confirms the action to delete a database.                       #
6549 #################################################################################
6551         my ($database_filename, $database_confirm) = @_;
6553         # Check if the confirm value is blank and if it is then set the
6554         # confirm value to 0.
6556         if (!$database_confirm){
6558                 $database_confirm = 0;
6560         }
6562         # Connect to the database server.
6564         $kiriwrite_dbmodule->connect();
6566         # Check if any errors occured while connecting to the database server.
6568         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6570                 # A database connection error has occured so return
6571                 # an error.
6573                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6575         }
6577         # Check if the database filename given is valid and return an error
6578         # if it isn't.
6580         kiriwrite_variablecheck($database_filename, "filename", "", 0);
6582         # Check if the request to delete a database has been confirmed. If it has, 
6583         # then delete the database itself.
6585         if ($database_confirm eq 1){
6586                 # There is a value in the confirm variable of the HTTP query.
6588                 # Select the database to delete and get the database name.
6590                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
6592                 # Check if any error occured while selecting the database.
6594                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6596                         # The database does not exist so return an error.
6598                         kiriwrite_error("databasemissingfile");
6600                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6602                         # The database has invalid permissions set so return
6603                         # an error.
6605                         kiriwrite_error("databaseinvalidpermissions");
6607                 }
6609                 my %database_info       = $kiriwrite_dbmodule->getdatabaseinfo();
6611                 # Check if any errors have occured while getting the database
6612                 # name.
6614                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6616                         # A database error has occured so return an error with
6617                         # the extended error information.
6619                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6621                 }
6623                 my $database_name = $database_info{"DatabaseName"};
6625                 # Delete the selected database.
6627                 $kiriwrite_dbmodule->deletedatabase({ DatabaseName => $database_filename });
6629                 # Check if any error occured while deleting the database.
6631                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6633                         # The database does not exist so return an error.
6635                         kiriwrite_error("databasemissingfile");
6637                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6639                         # The database has invalid permissions set so return
6640                         # an error.
6642                         kiriwrite_error("databaseinvalidpermissions");
6644                 }
6646                 # Disconnect from the database server.
6648                 $kiriwrite_dbmodule->disconnect();
6650                 # Write a message saying that the database has been deleted.
6652                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deleteddatabase}, { Style => "pageheader" });
6653                 $kiriwrite_presmodule->addlinebreak();
6654                 $kiriwrite_presmodule->addlinebreak();
6655                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deleteddatabasemessage}, $database_name));
6656                 $kiriwrite_presmodule->addlinebreak();
6657                 $kiriwrite_presmodule->addlinebreak();
6658                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} }); 
6660                 return $kiriwrite_presmodule->grab();
6662         }
6664         # The action has not been confirmed, so write out a form asking the 
6665         # user to confirm.
6667         # Get the database name.
6669         $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
6671         # Check if any error occured while selecting the database.
6673         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6675                 # The database does not exist so return an error.
6677                 kiriwrite_error("databasemissingfile");
6679         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6681                 # The database has invalid permissions set so return
6682                 # an error.
6684                 kiriwrite_error("databaseinvalidpermissions");
6687         }
6689         # Check if any errors have occured.
6691         my %database_info       = $kiriwrite_dbmodule->getdatabaseinfo();
6693         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6695                 # A database error has occured so return an error with
6696                 # the extended error information.
6698                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6700         }
6702         my $database_name = $database_info{"DatabaseName"};
6704         # Disconnect from the database server.
6706         $kiriwrite_dbmodule->disconnect();
6708         # Write out the form to ask the user to confirm the deletion of the 
6709         # selected database.
6711         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deletedatabase}, { Style => "pageheader" });
6712         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6713         $kiriwrite_presmodule->startbox();
6714         $kiriwrite_presmodule->addhiddendata("mode", "db");
6715         $kiriwrite_presmodule->addhiddendata("action", "delete");
6716         $kiriwrite_presmodule->addhiddendata("database", $database_filename);
6717         $kiriwrite_presmodule->addhiddendata("confirm", "1");
6718         $kiriwrite_presmodule->addlinebreak();
6719         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deletedatabasemessage}, $database_name));
6720         $kiriwrite_presmodule->addlinebreak();
6721         $kiriwrite_presmodule->addlinebreak();
6722         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{deletedatabasebutton});
6723         $kiriwrite_presmodule->addtext(" | ");
6724         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{deletedatabasereturn} });
6725         $kiriwrite_presmodule->endbox();
6726         $kiriwrite_presmodule->endform();
6728         return $kiriwrite_presmodule->grab();
6732 sub kiriwrite_database_list{
6733 #################################################################################
6734 # kiriwrite_database_list: Lists the databases available.                       #
6735 #                                                                               #
6736 # Usage:                                                                        #
6737 #                                                                               #
6738 # kiriwrite_database_list();                                                    #
6739 #################################################################################
6741         # Connect to the database server.
6743         $kiriwrite_dbmodule->connect();
6745         # Check if any errors occured while connecting to the database server.
6747         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6749                 # A database connection error has occured so return
6750                 # an error.
6752                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6754         }
6756         # Get the list of available databases and process any errors that
6757         # might have occured.
6759         my @database_list = $kiriwrite_dbmodule->getdblist();
6761         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
6763                 # The database directory is missing so return an error.
6765                 kiriwrite_error("datadirectorymissing");
6767         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
6769                 # The database directory has invalid permissions set so return
6770                 # an error.
6772                 kiriwrite_error("datadirectoryinvalidpermissions");
6774         }
6776         # Declare the following variables that are going to be used before using 
6777         # the foreach function.
6779         my ($database_info, %database_info);
6780         my @error_list;
6781         my @permissions_list;
6782         my $database_count = 0;
6783         my $database_filename = "";
6784         my $database_filename_friendly = "";
6785         my $database_filename_length = 0;
6786         my $database_name = "";
6787         my $database_description = "";
6788         my $database_permissions = "";
6789         my $nodescription = 0;
6790         my $noname = 0;
6791         my $data_file = "";
6792         my $table_style = 0;
6793         my $table_style_name = "";
6795         # Begin creating the table for the list of databases.
6797         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
6798         $kiriwrite_presmodule->addlinebreak();
6799         $kiriwrite_presmodule->addlinebreak();
6800         $kiriwrite_presmodule->starttable("", { CellPadding => "5", CellSpacing => "0" });
6801         $kiriwrite_presmodule->startheader();
6802         $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
6803         $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
6804         $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databaseoptions}, { Style => "tablecellheader" });
6805         $kiriwrite_presmodule->endheader();
6807         foreach $data_file (@database_list){
6809                 # Select the database.
6811                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
6813                 # Check if any error occured while selecting the database.
6815                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6817                         # The database does not exist, so process the next
6818                         # database.
6820                         next;
6822                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6824                         # The database has invalid permissions settings, so
6825                         # add the database to the list of databases with
6826                         # invalid permissions set and process the next
6827                         # database.
6829                         push(@permissions_list, $data_file);
6830                         next;
6832                 }
6834                 # Get information about the database.
6836                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6838                 # Check if any error occured while getting information from the
6839                 # database.
6841                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6843                         # A database error has occured, add the database and specific
6844                         # error message to the list of databases with errors and
6845                         # process the next database.
6847                         push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
6848                         next;
6850                 }
6852                 $database_name          = $database_info{"DatabaseName"};
6853                 $database_description   = $database_info{"Description"};
6855                 # Check the style to be used with.
6857                 if ($table_style eq 0){
6859                         # Use the first style and set the style value
6860                         # to use the next style, the next time the
6861                         # if statement is checked.
6863                         $table_style_name = "tablecell1";
6864                         $table_style = 1;
6865                 } else {
6867                         # Use the second style and set the style
6868                         # value to use the first style, the next
6869                         # time if statement is checked.
6871                         $table_style_name = "tablecell2";
6872                         $table_style = 0;
6873                 }
6875                 # Create a friendly name for the database.
6877                 $database_filename_friendly = $data_file;
6879                 # Append the database information to the table.
6881                 $kiriwrite_presmodule->startrow();
6882                 $kiriwrite_presmodule->addcell($table_style_name);
6884                 if (!$database_name){
6885                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
6886                 } else {
6887                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_filename_friendly, { Text => $database_name });
6888                 }
6890                 $kiriwrite_presmodule->endcell();
6891                 $kiriwrite_presmodule->addcell($table_style_name);
6893                 if (!$database_description){
6894                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
6895                 } else {
6896                         $kiriwrite_presmodule->addtext($database_description);
6897                 }
6899                 $kiriwrite_presmodule->endcell();
6900                 $kiriwrite_presmodule->addcell($table_style_name);
6901                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=edit&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{edit} });
6902                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=compile&type=single&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{compile} });
6903                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=delete&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{delete} });
6904                 $kiriwrite_presmodule->endrow();
6906                 $database_count++;
6907                 $nodescription = 0;
6908                 $noname = 0;
6910         }
6912         $kiriwrite_presmodule->endtable();
6914         # Disconnect from the database server.
6916         $kiriwrite_dbmodule->disconnect();
6918         # Check if there are no valid databases are if there is no
6919         # valid databases then write a message saying that no
6920         # valid databases are available.
6922         if ($database_count eq 0){
6924                 $kiriwrite_presmodule->clear();
6925                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
6926                 $kiriwrite_presmodule->addlinebreak();
6927                 $kiriwrite_presmodule->addlinebreak();
6928                 $kiriwrite_presmodule->startbox("errorbox");
6929                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{nodatabasesavailable});
6930                 $kiriwrite_presmodule->endbox();
6932         }
6934         # Check if any databases with problems have appeared and if they
6935         # have, print out a message saying which databases have problems.
6937         if (@permissions_list){
6939                 $kiriwrite_presmodule->addlinebreak();
6940                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
6941                 $kiriwrite_presmodule->addlinebreak();
6942                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
6943                 $kiriwrite_presmodule->addlinebreak();
6945                 foreach $data_file (@permissions_list){
6946                         $kiriwrite_presmodule->addlinebreak();
6947                         $kiriwrite_presmodule->addtext($data_file);
6948                 }
6950                 $kiriwrite_presmodule->addlinebreak();
6952         }
6954         if (@error_list){
6956                 $kiriwrite_presmodule->addlinebreak();
6957                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
6958                 $kiriwrite_presmodule->addlinebreak();
6959                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
6960                 $kiriwrite_presmodule->addlinebreak();
6962                 foreach $data_file (@error_list){
6963                         $kiriwrite_presmodule->addlinebreak();
6964                         $kiriwrite_presmodule->addtext($data_file);
6965                 }
6967                 $kiriwrite_presmodule->addlinebreak();
6969         }
6971         return $kiriwrite_presmodule->grab();   # Return to the main part of the script with the processed information.
6976 sub kiriwrite_filter_list{
6977 #################################################################################
6978 # kiriwrite_filter_list: Lists the filters that will be used when compiling a   #
6979 # webpage.                                                                      #
6980 #                                                                               #
6981 # Usage:                                                                        #
6982 #                                                                               #
6983 # kiriwrite_filter_list();                                                      #
6984 #################################################################################
6986         my $filtersdb_notexist = 0;
6988         # Connect to the database server.
6990         $kiriwrite_dbmodule->connect();
6992         # Check if any errors occured while connecting to the database server.
6994         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6996                 # A database connection error has occured so return
6997                 # an error.
6999                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7001         }
7003         # Connect to the filter database.
7005         $kiriwrite_dbmodule->connectfilter();
7007         # Check if any error has occured while connecting to the filter
7008         # database.
7010         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7012                 # The filter database does not exist.
7014                 $filtersdb_notexist = 1;
7016         } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7018                 # The filter database has invalid permissions set so return
7019                 # an error.
7021                 kiriwrite_error("filtersdbpermissions");
7023         } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7025                 # A database error has occured with the filter database.
7027                 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7029         }
7031         # Define some variables required for processing the filters list.
7033         my %filter_list;
7034         my %filter_info;
7035         my @database_filters;
7036         my $blankfindfilter = 0;
7037         my $filterswarning = "";
7038         my $filter;
7039         my $filter_count = 0;
7040         my $filter_style = 0;
7041         my $filter_style_name = "";
7043         tie(%filter_list, 'Tie::IxHash');
7045         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{viewfilters}, { Style => "pageheader" });
7046         $kiriwrite_presmodule->addlinebreak();
7047         $kiriwrite_presmodule->addlinebreak();
7049         # If the filter database exists then get the list of filters,
7050         # otherwise write a message saying that the filter database
7051         # does not exist and will be created when a filter is added.
7053         if ($filtersdb_notexist eq 0){
7055                 # Get the list of available filters.
7057                 @database_filters       = $kiriwrite_dbmodule->getfilterlist();
7059                 # Check if any errors occured while getting the list of filters.
7061                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7063                         # A database error has occured with the filter database.
7065                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7067                 }
7069                 # Process each filter getting the priority, find setting and
7070                 # replace setting.
7072                 foreach $filter (@database_filters){
7074                         # Get the information about the filter.
7076                         %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
7078                         # Check if any errors occured while getting the filter information.
7080                         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7082                                 # A database error occured while using the filter database.
7084                                 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7086                         } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7088                                 # The filter does not exist so process the next filter.
7090                                 next;
7092                         }
7094                         # Check if the find filter is blank.
7096                         if (!$filter_info{"FilterFind"}){
7098                                 # The find filter is blank, so set the value to write a warning
7099                                 # message saying that a find filter given is blank.
7101                                 $blankfindfilter = 1;
7103                         }
7105                         $filter_list{$filter_count}{ID}         = $filter_info{"FilterID"};
7106                         $filter_list{$filter_count}{Priority}   = $filter_info{"FilterPriority"};
7107                         $filter_list{$filter_count}{Find}       = $filter_info{"FilterFind"};
7108                         $filter_list{$filter_count}{Replace}    = $filter_info{"FilterReplace"};
7109                         $filter_list{$filter_count}{Notes}      = $filter_info{"FilterNotes"};
7111                         $filter_count++;
7113                 }
7115                 # Check if there are filters in the filter database and
7116                 # write a message if there isn't.
7118                 if ($filter_count eq 0){
7120                         # There are no filters in the filter database.
7122                         $filterswarning = $kiriwrite_lang->{filter}->{nofiltersavailable};
7124                 }
7126         }
7128         # Check if the database wasn't found and if it
7129         # wasn't then write a message saying that the
7130         # database will be created when a filter is
7131         # added.
7133         if ($filtersdb_notexist eq 1){
7135                 # The filter database doesn't exist so write
7136                 # a message.
7138                 $filterswarning = $kiriwrite_lang->{filter}->{filterdatabasedoesnotexist};
7141         }
7143         # Check if there is a warning message and if
7144         # there is then write that warning message
7145         # else write the list of filters.
7147         if ($filterswarning){
7149                 $kiriwrite_presmodule->startbox("errorbox");
7150                 $kiriwrite_presmodule->addtext($filterswarning);
7151                 $kiriwrite_presmodule->endbox();
7153         } else {
7155                 # The filter database exists so write out the
7156                 # list of filters.
7158                 if ($blankfindfilter eq 1){
7160                         $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{filter}->{warningtitle});
7161                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{blankfindfilters});
7162                         $kiriwrite_presmodule->addtext();
7163                         $kiriwrite_presmodule->addlinebreak();
7164                         $kiriwrite_presmodule->addlinebreak();
7166                 }
7168                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7170                 $kiriwrite_presmodule->startheader();
7171                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{priority}, { Style => "tablecellheader" });
7172                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{findsetting}, { Style => "tablecellheader" });
7173                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{replacesetting}, { Style => "tablecellheader" });
7174                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
7175                 $kiriwrite_presmodule->endheader();
7177                 foreach $filter (keys %filter_list){
7179                         # Check which style should be used.
7181                         if ($filter_style eq 0){
7183                                 $filter_style_name = "tablecell1";
7184                                 $filter_style = 1;
7186                         } else {
7188                                 $filter_style_name = "tablecell2";
7189                                 $filter_style = 0;
7191                         }
7193                         $kiriwrite_presmodule->startrow();
7194                         $kiriwrite_presmodule->addcell($filter_style_name);
7195                         $kiriwrite_presmodule->addtext($filter_list{$filter}{Priority});
7196                         $kiriwrite_presmodule->endcell();
7197                         $kiriwrite_presmodule->addcell($filter_style_name);
7199                         # Check if the find filter is blank.
7201                         if (!$filter_list{$filter}{Find}){
7203                                 # The find filter is blank.
7205                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{filter}->{blankfindsetting});
7207                         } else {
7209                                 # The find filter is not blank.
7211                                 $kiriwrite_presmodule->addtext($filter_list{$filter}{Find});
7213                         }
7215                         $kiriwrite_presmodule->endcell();
7216                         $kiriwrite_presmodule->addcell($filter_style_name);
7218                         # Check if the replace filter is blank.
7220                         if (!$filter_list{$filter}{Replace}){
7222                                 # The replace filter is blank.
7224                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{filter}->{blankreplacesetting});
7226                         } else {
7228                                 # The replace filter is not blank.
7230                                 $kiriwrite_presmodule->addtext($filter_list{$filter}{Replace});
7232                         }
7234                         $kiriwrite_presmodule->endcell();
7235                         $kiriwrite_presmodule->addcell($filter_style_name);
7236                         $kiriwrite_presmodule->addlink("?mode=filter&action=edit&filter=" . $filter_list{$filter}{ID}, { Text => $kiriwrite_lang->{options}->{edit} });
7237                         $kiriwrite_presmodule->addlink("?mode=filter&action=delete&filter=" . $filter_list{$filter}{ID}, { Text => $kiriwrite_lang->{options}->{delete} });
7238                         $kiriwrite_presmodule->endcell();
7239                         $kiriwrite_presmodule->endrow();
7241                 }
7243                 $kiriwrite_presmodule->endtable();
7245         }
7247         # Disconnect from the filter database.
7249         $kiriwrite_dbmodule->disconnectfilter();
7251         # Disconnect from the database server.
7253         $kiriwrite_dbmodule->disconnect();
7255         return $kiriwrite_presmodule->grab();
7259 sub kiriwrite_filter_add{
7260 #################################################################################
7261 # kiriwrite_filter_add: Adds a filter to the filter list.                       #
7262 #                                                                               #
7263 # Usage:                                                                        #
7264 #                                                                               #
7265 # kiriwrite_filter_add(filterfind, filterreplace, filterpriority,               #
7266 #                       filternotes, [confirm]);                                #
7267 #                                                                               #
7268 # filterfind            Specifies the new word(s) to find.                      #
7269 # filterreplace         Specifies the new word(s) to replace.                   #
7270 # filterpriority        Specifies the new priority to use.                      #
7271 # filternotes           Specifies the new notes to use.                         #
7272 # confirm               Confirms the action to add a filter.                    #
7273 #################################################################################
7275         # Get the values that have been passed to the subroutine.
7277         my ($filter_new_find, $filter_new_replace, $filter_new_priority, $filter_new_notes, $confirm) = @_;
7279         # Check the confirm value to make sure it is no more than
7280         # one character long.
7282         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
7284         if (!$confirm){
7286                 # The confirm value is undefined, so set the
7287                 # value of the confirm integer to '0'.
7289                 $confirm = 0;
7291         }
7293         if ($confirm eq 1){
7295                 # The confirm integer is '1', so add the word
7296                 # to the filter list.
7298                 # First, check the variables recieved are UTF8
7299                 # copliant.
7301                 kiriwrite_variablecheck($filter_new_find, "utf8", 0, 0);
7302                 kiriwrite_variablecheck($filter_new_replace, "utf8", 0, 0);
7303                 kiriwrite_variablecheck($filter_new_priority, "utf8", 0, 0);
7304                 kiriwrite_variablecheck($filter_new_notes, "utf8", 0, 0);
7306                 # Convert the UTF8 values so that the length can
7307                 # checked properly.
7309                 $filter_new_find        = kiriwrite_utf8convert($filter_new_find);
7310                 $filter_new_replace     = kiriwrite_utf8convert($filter_new_replace);
7311                 $filter_new_priority    = kiriwrite_utf8convert($filter_new_priority);
7312                 $filter_new_notes       = kiriwrite_utf8convert($filter_new_notes);
7314                 # Check if the find filter is blank and return an error
7315                 # if it is.
7317                 if (!$filter_new_find){
7319                         # The find filter given is blank so return an
7320                         # error.
7322                         kiriwrite_error("blankfindfilter");
7324                 }
7326                 if (!$filter_new_priority){
7328                         # The filter priority is blank so set it
7329                         # to 1.
7331                         $filter_new_priority = 1;
7333                 }
7335                 # Check the length and contents of the values given
7336                 # to make sure they are valid.
7338                 my $filterfind_maxlength_check          = kiriwrite_variablecheck($filter_new_find, "maxlength", 1024, 1);
7339                 my $filterreplace_maxlength_check       = kiriwrite_variablecheck($filter_new_replace, "maxlength", 1024, 1);
7340                 my $filterpriority_maxlength_check      = kiriwrite_variablecheck($filter_new_priority, "maxlength", 5, 1);
7341                 my $filterpriority_numbers_check        = kiriwrite_variablecheck($filter_new_priority, "numbers", 0, 1);
7343                 # Check if the result of the tests to see if they
7344                 # are valid.
7346                 if ($filterfind_maxlength_check eq 1){
7348                         # The find filter is too long, so return
7349                         # an error.
7351                         kiriwrite_error("findfiltertoolong");
7353                 }
7355                 if ($filterreplace_maxlength_check eq 1){
7357                         # The replace filter is too long, so
7358                         # return an error.
7360                         kiriwrite_error("replacefiltertoolong");
7362                 }
7364                 if ($filterpriority_maxlength_check eq 1){
7366                         # The length of the filter priority
7367                         # given is too long, so return an
7368                         # error.
7370                         kiriwrite_error("filterprioritytoolong");
7372                 }
7374                 if ($filterpriority_numbers_check eq 1){
7376                         # The priority of the filter given
7377                         # contains characters other than
7378                         # numbers.
7380                         kiriwrite_error("filterpriorityinvalidchars");
7382                 }
7384                 # Check if the filter priority is less than 1
7385                 # and more than 10000 and return an error
7386                 # if it is.
7388                 if ($filter_new_priority < 1 || $filter_new_priority > 50000){
7390                         # The filter priority is less than 1 and
7391                         # more than 10000, so return an error.
7393                         kiriwrite_error("filterpriorityinvalid");
7395                 }
7397                 # Connect to the database server.
7399                 $kiriwrite_dbmodule->connect();
7401                 # Check if any errors occured while connecting to the database server.
7403                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7405                         # A database connection error has occured so return
7406                         # an error.
7408                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7410                 }
7412                 # Connect to the filter database.
7414                 $kiriwrite_dbmodule->connectfilter(1);
7416                 # Check if any error has occured while connecting to the filter
7417                 # database.
7419                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7421                         # The filter database does not exist.
7423                         kiriwrite_error("filtersdbmissing");
7425                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7427                         # The filter database has invalid permissions set so return
7428                         # an error.
7430                         kiriwrite_error("filtersdbpermissions");
7432                 }
7434                 # Add the filter to the filter database.
7436                 $kiriwrite_dbmodule->addfilter({ FindFilter => $filter_new_find, ReplaceFilter => $filter_new_replace, Priority => $filter_new_priority, Notes => $filter_new_notes});
7438                 # Check if any errors have occured while adding the filter.
7440                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7442                         # The filter database has invalid permissions set so return
7443                         # an error.
7445                         kiriwrite_error("filtersdbpermissions");
7447                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseUncreatable"){
7449                         # The filter database is uncreatable so return an error.
7451                         kiriwrite_error("filterdatabase");
7453                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7455                         # A database error with the filter database has occured so return
7456                         # an error with the extended error information.
7458                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7460                 }
7462                 # Disconnect from the filter database.
7464                 $kiriwrite_dbmodule->disconnectfilter();
7466                 # Disconnect from the database server.
7468                 $kiriwrite_dbmodule->disconnect();
7470                 # Write out a message saying that the filter was added to the
7471                 # filter database.
7473                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{filteradded}, { Style => "pageheader" });
7474                 $kiriwrite_presmodule->addlinebreak();
7475                 $kiriwrite_presmodule->addlinebreak();
7476                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{filteraddedmessage});
7477                 $kiriwrite_presmodule->addlinebreak();
7478                 $kiriwrite_presmodule->addlinebreak();
7479                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7481                 return $kiriwrite_presmodule->grab();
7483         } elsif ($confirm ne 0) {
7485                 # The confirm integer is another value (which
7486                 # it shouldn't be) so return an error.
7488                 kiriwrite_error("invalidvalue");
7490         }
7492         # The confirm integer was blank so print out a form
7493         # for adding a new filter.
7495         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{addfilter}, { Style => "pageheader" });
7496         $kiriwrite_presmodule->addlinebreak();
7497         $kiriwrite_presmodule->addlinebreak();
7498         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
7499         $kiriwrite_presmodule->startbox();
7500         $kiriwrite_presmodule->addhiddendata("mode", "filter");
7501         $kiriwrite_presmodule->addhiddendata("action", "add");
7502         $kiriwrite_presmodule->addhiddendata("confirm", 1);
7503         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7505         $kiriwrite_presmodule->startheader();
7506         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
7507         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
7508         $kiriwrite_presmodule->endheader();
7510         $kiriwrite_presmodule->startrow();
7511         $kiriwrite_presmodule->addcell("tablecell1");
7512         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
7513         $kiriwrite_presmodule->endcell();
7514         $kiriwrite_presmodule->addcell("tablecell2");
7515         $kiriwrite_presmodule->addinputbox("findword", { Size => 64, MaxLength => 1024 });
7516         $kiriwrite_presmodule->endcell();
7517         $kiriwrite_presmodule->endrow();
7519         $kiriwrite_presmodule->startrow();
7520         $kiriwrite_presmodule->addcell("tablecell1");
7521         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{replacefilter});
7522         $kiriwrite_presmodule->endcell();
7523         $kiriwrite_presmodule->addcell("tablecell2");
7524         $kiriwrite_presmodule->addinputbox("replaceword", { Size => 64, MaxLength => 1024 });
7525         $kiriwrite_presmodule->endcell();
7526         $kiriwrite_presmodule->endrow();
7528         $kiriwrite_presmodule->startrow();
7529         $kiriwrite_presmodule->addcell("tablecell1");
7530         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
7531         $kiriwrite_presmodule->endcell();
7532         $kiriwrite_presmodule->addcell("tablecell2");
7533         $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5 });
7534         $kiriwrite_presmodule->startlist();
7535         $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
7536         $kiriwrite_presmodule->endlist();
7537         $kiriwrite_presmodule->endcell();
7538         $kiriwrite_presmodule->endrow();
7540         $kiriwrite_presmodule->startrow();
7541         $kiriwrite_presmodule->addcell("tablecell1");
7542         $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
7543         $kiriwrite_presmodule->endcell();
7544         $kiriwrite_presmodule->addcell("tablecell2");
7545         $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10 });
7546         $kiriwrite_presmodule->endcell();
7547         $kiriwrite_presmodule->endrow();
7549         $kiriwrite_presmodule->endtable();
7551         $kiriwrite_presmodule->addlinebreak();
7552         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{addfilterbutton});
7553         $kiriwrite_presmodule->addtext(" | ");
7554         $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
7555         $kiriwrite_presmodule->addtext(" | ");
7556         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7558         $kiriwrite_presmodule->endbox();
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                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7790                         # A database error has occured with the filter database.
7792                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7794                 }
7796                 # Edit the selected filter in the filter database.
7798                 $kiriwrite_dbmodule->editfilter({ FilterID => $filter_id, NewFindFilter => $filter_new_find, NewReplaceFilter => $filter_new_replace, NewFilterPriority => $filter_new_priority, NewFilterNotes => $filter_new_notes });
7800                 # Check if any errors occured while editing the filter.
7802                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7804                         # The filter database has invalid permissions set so return
7805                         # an error.
7807                         kiriwrite_error("filtersdbpermissions");
7809                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7811                         # A database error has occured while using the filter database
7812                         # so return an error.
7814                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7816                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7818                         # The specified filter does not exist so return an error.
7820                         kiriwrite_error("filterdoesnotexist");
7822                 }
7824                 # Disconnect from the filter database.
7826                 $kiriwrite_dbmodule->disconnectfilter();
7828                 # Disconnect from the database server.
7830                 $kiriwrite_dbmodule->disconnect();
7832                 # Write a message saying that the filter was edited.
7834                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfilter}, { Style => "pageheader" });
7835                 $kiriwrite_presmodule->addlinebreak();
7836                 $kiriwrite_presmodule->addlinebreak();
7837                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfiltermessage});
7838                 $kiriwrite_presmodule->addlinebreak();
7839                 $kiriwrite_presmodule->addlinebreak();
7840                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist}});
7842                 return $kiriwrite_presmodule->grab();
7844         } elsif ($confirm eq 0){
7846                 # The action to edit a filter has not been confirmed
7847                 # so write a form for editing the filter with.
7849                 # Connect to the database server.
7851                 $kiriwrite_dbmodule->connect();
7853                 # Check if any errors occured while connecting to the database server.
7855                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7857                         # A database connection error has occured so return
7858                         # an error.
7860                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7862                 }
7864                 # Connect to the database server.
7866                 $kiriwrite_dbmodule->connect();
7868                 # Check if any errors occured while connecting to the database server.
7870                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7872                         # A database connection error has occured so return
7873                         # an error.
7875                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7877                 }
7879                 # Connect to the filter database.
7881                 $kiriwrite_dbmodule->connectfilter();
7883                 # Check if any error has occured while connecting to the filter
7884                 # database.
7886                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7888                         # The filter database does not exist.
7890                         kiriwrite_error("filtersdbmissing");
7892                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7894                         # The filter database has invalid permissions set so return
7895                         # an error.
7897                         kiriwrite_error("filtersdbpermissions");
7899                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7901                         # A database error has occured with the filter database.
7903                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7905                 }
7907                 # Get information about the filter.
7909                 my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
7911                 # Check if any errors occured while getting information about the filter.
7913                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7915                         # A database error occured while using the filter database so
7916                         # return an error.
7918                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7920                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7922                         # The filter does not exist so return an error.
7924                         kiriwrite_error("filterdoesnotexist");
7926                 }
7928                 # Get the required information.
7930                 $filter_priority        = $filter_info{"FilterPriority"};
7931                 $filter_find            = $filter_info{"FilterFind"};
7932                 $filter_replace         = $filter_info{"FilterReplace"};
7933                 $filter_notes           = $filter_info{"FilterNotes"};
7935                 # Disconnect from the filter database.
7937                 $kiriwrite_dbmodule->disconnectfilter();
7939                 # Disconnect from the database server.
7941                 $kiriwrite_dbmodule->disconnect();
7943                 # Write out the form.
7945                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editfilter}, { Style => "pageheader" });
7946                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
7947                 $kiriwrite_presmodule->startbox();
7948                 $kiriwrite_presmodule->addhiddendata("mode", "filter");
7949                 $kiriwrite_presmodule->addhiddendata("action", "edit");
7950                 $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
7951                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
7953                 $kiriwrite_presmodule->addlinebreak();
7954                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7956                 $kiriwrite_presmodule->startheader();
7957                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
7958                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
7959                 $kiriwrite_presmodule->endheader();
7961                 $kiriwrite_presmodule->startrow();
7962                 $kiriwrite_presmodule->addcell("tablecell1");
7963                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
7964                 $kiriwrite_presmodule->endcell();
7965                 $kiriwrite_presmodule->addcell("tablecell2");
7966                 $kiriwrite_presmodule->addinputbox("filterfind", { Size => 64, MaxLength => 1024, Value => $filter_find });
7967                 $kiriwrite_presmodule->endcell();
7968                 $kiriwrite_presmodule->endrow();
7970                 $kiriwrite_presmodule->startrow();
7971                 $kiriwrite_presmodule->addcell("tablecell1");
7972                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{replacefilter});
7973                 $kiriwrite_presmodule->endcell();
7974                 $kiriwrite_presmodule->addcell("tablecell2");
7975                 $kiriwrite_presmodule->addinputbox("filterreplace", { Size => 64, MaxLength => 1024, Value => $filter_replace });
7976                 $kiriwrite_presmodule->endcell();
7977                 $kiriwrite_presmodule->endrow();
7979                 $kiriwrite_presmodule->startrow();
7980                 $kiriwrite_presmodule->addcell("tablecell1");
7981                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
7982                 $kiriwrite_presmodule->endcell();
7983                 $kiriwrite_presmodule->addcell("tablecell2");
7984                 $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5, Value => $filter_priority });
7985                 $kiriwrite_presmodule->startlist();
7986                 $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
7987                 $kiriwrite_presmodule->endlist();
7988                 $kiriwrite_presmodule->endcell();
7989                 $kiriwrite_presmodule->endrow();
7991                 $kiriwrite_presmodule->startrow();
7992                 $kiriwrite_presmodule->addcell("tablecell1");
7993                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
7994                 $kiriwrite_presmodule->endcell();
7995                 $kiriwrite_presmodule->addcell("tablecell2");
7996                 $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10});
7997                 $kiriwrite_presmodule->endcell();
7998                 $kiriwrite_presmodule->endrow();
8000                 $kiriwrite_presmodule->endtable();
8002                 $kiriwrite_presmodule->addlinebreak();
8003                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{editfilterbutton});
8004                 $kiriwrite_presmodule->addtext(" | ");
8005                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
8006                 $kiriwrite_presmodule->addtext(" | ");
8007                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
8008                 $kiriwrite_presmodule->endbox();
8009                 $kiriwrite_presmodule->endform();
8011                 return $kiriwrite_presmodule->grab(); 
8013         } else {
8015                 # A confirm value other than 0 or 1 has been
8016                 # specified, so return an error.
8018                 kiriwrite_error("invalidvalue");
8020         }
8024 sub kiriwrite_filter_delete{
8025 #################################################################################
8026 # kiriwrite_filter_delete: Deletes a filter from the filter list.               #
8027 #                                                                               #
8028 # Usage:                                                                        #
8029 #                                                                               #
8030 # kiriwrite_filter_delete(filterid, confirm);                                   #
8031 #                                                                               #
8032 # filterid      Specifies the filter line number to delete.                     #
8033 # confirm       Confirms the deletion of the selected filter.                   #
8034 #################################################################################
8036         # Get the values that were passed to this subroutine.
8038         my ($filter_id, $confirm) = @_;
8040         # Check the confirm value to make sure it is no more than
8041         # one character long.
8043         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
8045         # Check if the confirm value is blank and if it is
8046         # srt the confirm value to 0.
8048         if (!$confirm){
8050                 # The confirm value does not have any value
8051                 # set so set it to 0.
8053                 $confirm = 0;
8055         }
8057         # Check if the filter identification number is blank,
8058         # contains characters other than numbers and is more
8059         # than seven characters long.
8061         if (!$filter_id){
8063                 # The filter identification number is blank,
8064                 # so return an error.
8066                 kiriwrite_error("filteridblank");
8068         }
8070         my $filter_id_numbers_check     = kiriwrite_variablecheck($filter_id, "numbers", 0, 1);
8072         if ($filter_id_numbers_check eq 1){
8074                 # The filter identification number contains
8075                 # characters other than numbers, so return
8076                 # an error.
8078                 kiriwrite_error("filteridinvalid");
8080         }
8082         my $filter_id_maxlength_check   = kiriwrite_variablecheck($filter_id, "maxlength", 7, 1);
8084         if ($filter_id_maxlength_check eq 1){
8086                 # The filter identification number given
8087                 # is more than seven characters long, so
8088                 # return an error.
8090                 kiriwrite_error("filteridtoolong");
8092         }
8094         # Define some values for later.
8096         my @database_filter;
8097         my $filter_exists = 0;
8099         # Check if the confirm integer has a value of '1'.
8101         if ($confirm eq 1){
8103                 # The action to delete a filter has been confirmed.
8105                 # Connect to the database server.
8107                 $kiriwrite_dbmodule->connect();
8109                 # Check if any errors occured while connecting to the database server.
8111                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8113                         # A database connection error has occured so return
8114                         # an error.
8116                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8118                 }
8120                 # Connect to the filter database.
8122                 $kiriwrite_dbmodule->connectfilter();
8124                 # Check if any error has occured while connecting to the filter
8125                 # database.
8127                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8129                         # The filter database does not exist.
8131                         kiriwrite_error("filtersdbmissing");
8133                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8135                         # The filter database has invalid permissions set so return
8136                         # an error.
8138                         kiriwrite_error("filtersdbpermissions");
8140                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8142                         # A database error has occured with the filter database.
8144                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8146                 }
8148                 # Delete the filter from the filter database.
8150                 $kiriwrite_dbmodule->deletefilter({ FilterID => $filter_id });
8152                 # Check if any errors occured while deleting the filter.
8154                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8156                         # A database error has occured while trying to delete a filter so
8157                         # return an error.
8159                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8161                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8163                         # The filter does not exist so return an error.
8164  
8165                         kiriwrite_error("filterdoesnotexist");
8167                 }
8169                 # Disconnect from the filter database.
8171                 $kiriwrite_dbmodule->disconnectfilter();
8173                 # Disconnect from the database server.
8175                 $kiriwrite_dbmodule->disconnect();
8177                 # Write a message saying that the filter was deleted
8178                 # from the filter database.
8180                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfilter}, { Style => "pageheader" });
8181                 $kiriwrite_presmodule->addlinebreak();
8182                 $kiriwrite_presmodule->addlinebreak();
8183                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfiltermessage});
8184                 $kiriwrite_presmodule->addlinebreak();
8185                 $kiriwrite_presmodule->addlinebreak();
8186                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
8188         } elsif ($confirm eq 0) {
8190                 # Connect to the database server.
8192                 $kiriwrite_dbmodule->connect();
8194                 # Check if any errors occured while connecting to the database server.
8196                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8198                         # A database connection error has occured so return
8199                         # an error.
8201                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8203                 }
8205                 # Connect to the filter database.
8207                 $kiriwrite_dbmodule->connectfilter();
8209                 # Check if any error has occured while connecting to the filter
8210                 # database.
8212                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8214                         # The filter database does not exist.
8216                         kiriwrite_error("filtersdbmissing");
8218                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8220                         # The filter database has invalid permissions set so return
8221                         # an error.
8223                         kiriwrite_error("filtersdbpermissions");
8225                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8227                         # A database error has occured with the filter database.
8229                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8231                 }
8233                 # Get information about the filter (to check if it exists).
8235                 my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
8237                 # Check if any errors occured while getting information about the filter.
8239                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8241                         # A database error occured while using the filter database so
8242                         # return an error.
8244                         kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8246                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8248                         # The filter does not exist so return an error.
8250                         kiriwrite_error("filterdoesnotexist");
8252                 }
8254                 # Disconnect from the filter database.
8256                 $kiriwrite_dbmodule->disconnectfilter();
8258                 # Disconnect from the database
8260                 # The confirm integer is '0', so continue write out
8261                 # a form asking the user to confirm the deletion
8262                 # pf the filter.
8264                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefilter}, { Style => "pageheader" });
8265                 $kiriwrite_presmodule->addlinebreak();
8266                 $kiriwrite_presmodule->addlinebreak();
8267                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefiltermessage});
8268                 $kiriwrite_presmodule->addlinebreak();
8269                 $kiriwrite_presmodule->addlinebreak();
8270                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
8271                 $kiriwrite_presmodule->startbox();
8272                 $kiriwrite_presmodule->addhiddendata("mode", "filter");
8273                 $kiriwrite_presmodule->addhiddendata("action", "delete");
8274                 $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
8275                 $kiriwrite_presmodule->addhiddendata("confirm", 1);
8276                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{deletefilterbutton});
8277                 $kiriwrite_presmodule->addtext(" | ");
8278                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{deletefilterreturn} });
8279                 $kiriwrite_presmodule->endbox();
8280                 $kiriwrite_presmodule->endform();
8282         } else {
8284                 kiriwrite_error("invalidvalue");
8286         }
8288         return $kiriwrite_presmodule->grab();
8292 sub kiriwrite_compile_makepages{
8293 #################################################################################
8294 # kiriwrite_compile_makepages: Compile the selected pages and place them in the #
8295 # specified output directory.                                                   #
8296 #                                                                               #
8297 # Usage:                                                                        #
8298 #                                                                               #
8299 # kiriwrite_compile_makepages(type, selectedlist, confirm);                     #
8300 #                                                                               #
8301 # type          Specifies if single or multiple databases are to be compiled.   #
8302 # confirm       Specifies if the action to compile the databases should really  #
8303 #               be done.                                                        #
8304 # selectedlist  Specifies the databases to compile from as an array.            #
8305 #################################################################################
8307         # Get the values that have been passed to the subroutine.
8309         my ($type, $confirm, @selectedlist) = @_;
8311         # Check if the confirm value is more than one
8312         # character long.
8314         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
8316         # Check if the confirm value is blank and if it
8317         # is then set the confirm value to 0.
8319         if (!$confirm){
8321                 # The confirm value is blank, so set the
8322                 # confirm value to 0.
8324                 $confirm = 0;
8326         }
8328         # Check if there are any databases selected
8329         # and return an error if there isn't.
8331         if (!@selectedlist){
8333                 # There are no databases in the array
8334                 # so return an error.
8336                 kiriwrite_error("nodatabaseselected");
8338         }
8340         # Check if the type given is no more than
8341         # 7 characters long.
8343         my $type_maxlength_check = kiriwrite_variablecheck($type, "maxlength", 8, 1);
8345         if ($type_maxlength_check eq 1){
8347                 # The type length given is too long so
8348                 # return an error.
8350                 kiriwrite_error("variabletoolong");
8352         }
8354         # Check if the action to compile the databases
8355         # has been confirmed.
8357         if ($confirm eq 1){
8359                 # The action to compile the datavases has
8360                 # been confirmed.
8362                 # Define some variables for later.
8364                 my %database_info;
8365                 my %filter_info;
8366                 my %template_info;
8367                 my %page_info;
8368                 my %templatefiles;
8369                 my @page_filenames;
8370                 my @databaseinfo;
8371                 my @databasepages;
8372                 my @filterslist;
8373                 my @findfilter;
8374                 my @replacefilter;
8375                 my @templateslist;
8376                 my @pagedirectories;
8377                 my @database_filters;
8378                 my $warning_count               = 0;
8379                 my $error_count                 = 0;
8380                 my $pages_count                 = 0;
8381                 my $filter;
8382                 my $filters_count               = 0;
8383                 my $filters_find_blank_warning  = 0;
8384                 my $filter_find;
8385                 my $filter_replace;
8386                 my $database;
8387                 my $database_name;
8388                 my $page_filename;
8389                 my $page_filename_check;
8390                 my $page_filename_char          = "";
8391                 my $page_filename_directory;
8392                 my $page_filename_length        = 0;
8393                 my $page_filename_seek          = 0;
8394                 my $page_filename_dircount      = 0;
8395                 my $page_filename_exists        = 0;
8396                 my $page_filename_permissions   = 0;
8397                 my $page_directory_name;
8398                 my $page_directory_path;
8399                 my $page_name;
8400                 my $page_description;
8401                 my $page_section;
8402                 my $page_template;
8403                 my $page_content;
8404                 my $page_settings;
8405                 my $page_lastmodified;
8406                 my $page_title;
8407                 my $page_final;
8408                 my $page_autosection;
8409                 my $page_autotitle;
8410                 my $page;
8411                 my $database_filename_check     = 0;
8412                 my $database_maxlength_check    = 0;
8413                 my $output_exists               = 0;
8414                 my $output_permissions          = 0;
8415                 my $filters_exists              = 0;
8416                 my $filters_permissions         = 0;
8417                 my $filters_skip                = 0;
8418                 my $template;
8419                 my $templates_skip              = 0;
8420                 my $information_prefix          = $kiriwrite_lang->{compile}->{informationprefix};
8421                 my $error_prefix                = $kiriwrite_lang->{compile}->{errorprefix};
8422                 my $warning_prefix              = $kiriwrite_lang->{compile}->{warningprefix};
8423                 my $filehandle_page;
8425                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabases}, { Style => "pageheader" });
8426                 $kiriwrite_presmodule->addlinebreak();
8427                 $kiriwrite_presmodule->addlinebreak();
8428                 $kiriwrite_presmodule->startbox("datalist");
8430                 # Check if the output directory exists and has
8431                 # valid permissions set.
8433                 $output_exists          = kiriwrite_fileexists($kiriwrite_config{'directory_data_output'});
8435                 if ($output_exists ne 0){
8437                         # The output directory does not exist so
8438                         # return an error.
8440                         kiriwrite_error("outputdirectorymissing");
8442                 }
8444                 $output_permissions     = kiriwrite_filepermissions($kiriwrite_config{'directory_data_output'}, 1, 1);
8446                 if ($output_permissions ne 0){
8448                         # The output directory has invalid
8449                         # permissions set so return an error.
8451                         kiriwrite_error("outputdirectoryinvalidpermissions");
8453                 }
8455                 # Connect to the database server.
8457                 $kiriwrite_dbmodule->connect();
8459                 # Check if any errors occured while connecting to the database server.
8461                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8463                         # A database connection error has occured so return
8464                         # an error.
8466                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8468                 }
8470                 # Connect to the filter database.
8472                 $kiriwrite_dbmodule->connectfilter();
8474                 # Check if any error has occured while connecting to the filter
8475                 # database.
8477                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8479                         # The filter database does not exist so write a warning message.
8481                         $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{filterdatabasemissing});
8482                         $kiriwrite_presmodule->addlinebreak();
8483                         $filters_skip = 1;
8484                         $warning_count++;
8486                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8488                         # The filter database has invalid permissions set so write a
8489                         # an error message.
8491                         $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{filterdatabasepermissions});
8492                         $kiriwrite_presmodule->addlinebreak();
8493                         $filters_skip = 1;
8494                         $error_count++;
8496                 }
8498                 # Load the filter database (if the filters skip
8499                 # value isn't set to 1).
8501                 if ($filters_skip eq 0){
8503                         # Get the list of available filters.
8505                         @database_filters       = $kiriwrite_dbmodule->getfilterlist();
8507                         # Check if any errors occured while getting the list of filters.
8509                         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8511                                 # A database error has occured with the filter database.
8513                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8514                                 $kiriwrite_presmodule->addlinebreak();
8515                                 $error_count++;
8517                         }
8519                         # Check if the filters skip value is set to 0
8520                         # before executing the query.
8522                         if ($filters_skip eq 0){
8524                                 foreach $filter (@database_filters){
8526                                         # Get the filter information.
8528                                         %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
8530                                         # Check if any errors occured while getting the filter information.
8532                                         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8534                                                 # A database error occured while using the filter database.
8536                                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8537                                                 $kiriwrite_presmodule->addlinebreak();
8538                                                 $error_count++;
8539                                                 next;
8541                                         } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8543                                                 # The filter does not exist so process the next filter.
8545                                                 next;
8547                                         }
8549                                         # Check if the find filter is blank and
8550                                         # if it is then write a warning message.
8552                                         if (!$filter_info{"FilterFind"}){
8554                                                 if ($filters_find_blank_warning ne 1){
8556                                                         $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{findfilterblank});
8557                                                         $kiriwrite_presmodule->addlinebreak();
8558                                                         $filters_find_blank_warning = 1;
8559                                                 }
8560                                                 next;
8562                                         } else {
8564                                                 # Add each find and replace filter.
8566                                                 $findfilter[$filters_count]     = $filter_info{"FilterFind"};
8567                                                 $replacefilter[$filters_count]  = $filter_info{"FilterReplace"};
8569                                         }
8571                                         $filters_count++;
8573                                 }
8575                                 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishfilterdatabase});
8576                                 $kiriwrite_presmodule->addlinebreak();
8578                         }
8580                 }
8582                 # Disconnect from the filter database.
8584                 $kiriwrite_dbmodule->disconnectfilter();
8586                 # Connect to the template database.
8588                 $kiriwrite_dbmodule->connecttemplate();
8590                 # Check if any errors occured while connecting to the template database.
8592                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
8594                         # The template database does not exist so set the template
8595                         # warning message.
8597                         $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{templatedatabasemissing});
8598                         $kiriwrite_presmodule->addlinebreak();
8599                         $templates_skip = 1;
8600                         $warning_count++;
8602                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
8604                         # The template database has invalid permissions set so write
8605                         # the template warning message.
8606  
8607                         $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{templatedatabasepermissions});
8608                         $kiriwrite_presmodule->addlinebreak();
8609                         $templates_skip = 1;
8610                         $error_count++;
8612                 }
8614                 # Check if the template skip value isn't set and if it isn't
8615                 # then get the list of templates.
8617                 if (!$templates_skip){
8619                         @templateslist = $kiriwrite_dbmodule->gettemplatelist();
8621                         # Check if any errors had occured.
8623                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
8625                                 # A database error occured while getting the list
8626                                 # of templates so return a warning message with the 
8627                                 # extended error information.
8629                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8630                                 $templates_skip = 1;
8631                                 $error_count++;
8633                         }
8635                         # Check if the template skip value isn't set and if it isn't
8636                         # then process each template.
8638                         if (!$templates_skip){
8640                                 # Process each template.
8642                                 foreach $template (@templateslist){
8644                                         # Get information about the template.
8646                                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
8648                                         # Check if any error occured while getting the template information.
8650                                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
8652                                                 # A database error has occured, so return an error.
8654                                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8655                                                 $error_count++;
8657                                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
8659                                                 # The template does not exist, so process the next template.
8661                                                 next;
8663                                         }
8665                                         # Place each template file into the hash.
8667                                         $templatefiles{$template_info{"TemplateFilename"}}{template}    = $template_info{"TemplateLayout"};
8668                                         $templatefiles{$template_info{"TemplateFilename"}}{valid}       = 1;
8670                                 }
8672                                 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishtemplatedatabase});
8673                                 $kiriwrite_presmodule->addlinebreak();
8675                         }
8677                 }
8679                 # Disconnect from the template database.
8681                 $kiriwrite_dbmodule->disconnecttemplate();
8683                 # Process each database.
8685                 foreach $database (@selectedlist){
8687                         # Check if the database filename and length
8688                         # are valid.
8690                         $kiriwrite_presmodule->addhorizontalline();
8692                         $database_filename_check        = kiriwrite_variablecheck($database, "page_filename", "", 1);
8693                         $database_maxlength_check       = kiriwrite_variablecheck($database, "maxlength", 32, 1);
8695                         if ($database_filename_check ne 0){
8697                                 # The database filename is invalid, so process
8698                                 # the next database.
8700                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenameinvalidcharacters}, $database));
8701                                 $kiriwrite_presmodule->addlinebreak();
8702                                 $error_count++;
8703                                 next;
8705                         }
8707                         if ($database_maxlength_check ne 0){
8709                                 # The database file is too long, so process the
8710                                 # next database.
8712                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenametoolong}, $database));
8713                                 $kiriwrite_presmodule->addlinebreak();
8714                                 $error_count++;
8715                                 next;
8717                         }
8719                         # Select the database.
8721                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
8723                         # Check if any errors had occured while selecting the database.
8725                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
8727                                 # The database does not exist, so write a warning message.
8729                                 $kiriwrite_presmodule->addtext($warning_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasemissing}, $database));
8730                                 $kiriwrite_presmodule->addlinebreak();
8731                                 $warning_count++;
8732                                 next;
8734                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
8736                                 # The database has invalid permissions set, so write
8737                                 # an error message.
8739                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseinvalidpermissions}, $database));
8740                                 $kiriwrite_presmodule->addlinebreak();
8741                                 $error_count++;
8742                                 next;
8744                         }
8746                         # Get information about the database.
8748                         my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
8750                         # Check if any error occured while getting the database information.
8752                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
8754                                 # A database error has occured so write an error.
8756                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseerror}, $database, $kiriwrite_dbmodule->geterror(1)));
8757                                 $kiriwrite_presmodule->addlinebreak();
8758                                 $error_count++;
8759                                 next;
8761                         };
8763                         # Get the database name.
8765                         $database_name = $database_info{"DatabaseName"};
8767                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compilingpages}, $database_name));
8768                         $kiriwrite_presmodule->addlinebreak();
8770                         # Get the list of pages in the database.
8772                         @databasepages = $kiriwrite_dbmodule->getpagelist();
8774                         # Check if any errors occured while getting the list of pages.
8776                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
8778                                 # A database error has occured so return an error and
8779                                 # also the extended error information.
8781                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasepageerror}, $database, $kiriwrite_dbmodule->geterror(1)));
8782                                 $kiriwrite_presmodule->addlinebreak();
8783                                 $error_count++;
8784                                 next;
8786                         }
8788                         foreach $page (@databasepages) {
8790                                 # Get information about the page.
8792                                 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
8794                                 $page_filename          = $page_info{"PageFilename"};
8795                                 $page_name              = $page_info{"PageName"};
8796                                 $page_description       = $page_info{"PageDescription"};
8797                                 $page_section           = $page_info{"PageSection"};
8798                                 $page_template          = $page_info{"PageTemplate"};
8799                                 $page_content           = $page_info{"PageContent"};
8800                                 $page_settings          = $page_info{"PageSettings"};
8801                                 $page_lastmodified      = $page_info{"PageLastModified"};
8803                                 # Check if the filename is valid.
8805                                 $page_filename_check = kiriwrite_variablecheck($page_filename, "page_filename", 0, 1);
8807                                 if ($page_filename_check ne 0){
8809                                         # The file name is not valid so write a
8810                                         # error and process the next page.
8812                                         $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{invalidpagefilename}, $page_name));
8813                                         $kiriwrite_presmodule->addlinebreak();
8814                                         $error_count++;
8815                                         next;
8817                                 }
8819                                 # Check if the template with the filename does not exist
8820                                 # in the template files hash and write a message and
8821                                 # process the next page.
8823                                 if (!$templatefiles{$page_template}{valid} && $page_template ne "!none" && $templates_skip eq 0){
8825                                         $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatefilemissing}, $page_template, $page_name, $page_filename));
8826                                         $kiriwrite_presmodule->addlinebreak();
8827                                         $error_count++;
8828                                         next;
8830                                         $page_final = $page_content;
8832                                 } elsif ($page_template eq "!none"){
8834                                         $page_final = $page_content;
8836                                 } else {
8838                                         $page_final = $templatefiles{$page_template}{template};
8840                                         if (!$page_final){
8841                                                 $page_final = "";
8842                                         }
8844                                         $page_final =~ s/<kiriwrite:pagecontent>/$page_content/g;
8846                                 }
8848                                 # Create the combined page title (if needed).
8850                                 if ($page_settings eq 0 || $page_settings > 3){
8852                                         # Don't use page name or section name.
8854                                         $page_final =~ s/<kiriwrite:pagetitle>//g;
8856                                 } elsif ($page_settings eq 1){
8858                                         # Use the page name and section name.
8860                                         $page_autotitle = "(" . $page_section . " - " . $page_name . ")";
8861                                         $page_title = $page_section . " - " . $page_name;
8862                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_title/g;
8864                                 } elsif ($page_settings eq 2){
8866                                         # Use the page name only.
8868                                         $page_autotitle = "(" . $page_name . ")";
8869                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_name/g;
8871                                 } elsif ($page_settings eq 3){
8873                                         # Use the section name only.
8875                                         if ($page_section){
8876                                                 $page_autotitle = "(" . $page_section . ")";
8877                                         }
8878                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_section/g;
8880                                 }
8882                                 # Check if the section name is not blank and
8883                                 # place brackets inbetween if it is.
8885                                 if ($page_section){
8887                                         $page_autosection = "(" . $page_section . ")";
8889                                 }
8891                                 # Replace each <kiriwrite> value with the apporiate page
8892                                 # values.
8894                                 $page_final =~ s/<kiriwrite:pagename>/$page_name/g;
8895                                 $page_final =~ s/<kiriwrite:pagedescription>/$page_description/g;
8896                                 $page_final =~ s/<kiriwrite:pagesection>/$page_section/g;
8897                                 $page_final =~ s/<kiriwrite:autosection>/$page_autosection/g;
8898                                 $page_final =~ s/<kiriwrite:autotitle>/$page_autotitle/g;
8900                                 # Process the filters on the page data.
8902                                 if ($filters_skip eq 0){
8904                                         $filters_count = 0;
8906                                         foreach $filter_find (@findfilter){
8908                                                 # Get the replace filter and process each
8909                                                 # filter on the page.
8911                                                 $filter_replace = $replacefilter[$filters_count];
8912                                                 $page_final =~ s/$filter_find/$filter_replace/g;
8913                                                 $filters_count++;
8915                                         }
8917                                 }
8919                                 # Process the page filename and check what directories
8920                                 # need to be created.
8922                                 $page_filename_length = int(length($page_filename));
8924                                 do {
8926                                         $page_filename_char = substr($page_filename, $page_filename_seek, 1);
8928                                         # Check if a forward slash appears and add it to
8929                                         # the list of directories array.
8931                                         if ($page_filename_char eq '/'){
8933                                                 # Append the directory name to the list of
8934                                                 # directories array.
8936                                                 $pagedirectories[$page_filename_dircount] = $page_filename_directory;
8937                                                 $page_filename_directory        = "";
8938                                                 $page_filename_char             = "";
8939                                                 $page_filename_dircount++;
8941                                         } else {
8943                                                 # Append the character to the directory/filename.
8945                                                 $page_filename_directory = $page_filename_directory . $page_filename_char;
8947                                         }
8949                                         $page_filename_seek++;
8951                                 } until ($page_filename_length eq $page_filename_seek);
8953                                 foreach $page_directory_name (@pagedirectories){
8955                                         # Check if the directory name is undefined and if it
8956                                         # is then set it blank.
8958                                         if (!$page_directory_name){
8959                                                 $page_directory_name = "";
8960                                         }
8962                                         if (!$page_directory_path){
8963                                                 $page_directory_path = "";
8964                                         }
8966                                         # Check if the directory exists and create 
8967                                         # the directory if it doesn't exist.
8969                                         $page_directory_path = $page_directory_path . '/' . $page_directory_name;
8971                                         mkdir($kiriwrite_config{"directory_data_output"} . '/' . $page_directory_path);
8973                                 }
8975                                 # Check if the file already exists and if it does then check
8976                                 # the permissions of the file and return an error if the
8977                                 # permissions set are invalid.
8979                                 $page_filename_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"} . '/' . $page_filename);        
8981                                 if ($page_filename_exists eq 0){
8983                                         # The page filename exists, so check if the permissions given are
8984                                         # valid.
8986                                         $page_filename_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"} . '/' . $page_filename, 1, 1);
8988                                         if ($page_filename_permissions eq 1){
8990                                                 # The file has invalid permissions set.
8992                                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pageinvalidpermissions}, $page_filename));
8993                                                 $kiriwrite_presmodule->addlinebreak();
8994                                                 $error_count++;
8996                                                 # Reset certain values.
8998                                                 $page_autotitle = "";
8999                                                 $page_autosection = "";
9000                                                 $page_filename_seek = 0;
9001                                                 $page_filename_dircount = 0;
9003                                                 $page_filename_directory = "";
9004                                                 $page_directory_path = "";
9005                                                 $page_directory_name = "";
9006                                                 @pagedirectories = ();
9007                                                 
9008                                                 next;
9010                                         }
9012                                 }
9014                                 # Reset certain values.
9016                                 $page_autotitle = "";
9017                                 $page_autosection = "";
9018                                 $page_filename_seek = 0;
9019                                 $page_filename_dircount = 0;
9021                                 $page_filename_directory = "";
9022                                 $page_directory_path = "";
9023                                 $page_directory_name = "";
9024                                 @pagedirectories = ();
9026                                 # Write the file to the output directory.
9028                                 ($page_filename) = $page_filename =~ m/^(.*)$/g;
9029                                 ($kiriwrite_config{"directory_data_output"}) = $kiriwrite_config{"directory_data_output"} =~ m/^(.*)$/g;
9031                                 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);
9033                                 if (!$page_final){
9035                                         $page_final = "";
9037                                 }
9039                                 binmode $filehandle_page, ':utf8';
9040                                 print $filehandle_page $page_final;
9041                                 close($filehandle_page);
9043                                 # Write a message saying the page has been compiled. Check
9044                                 # to see if the page name is blank and write a message
9045                                 # saying there's no page name.
9047                                 if (!$page_name){
9048                                         $kiriwrite_presmodule->addtext($information_prefix . ' ');
9049                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
9050                                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledpageblankname}, $page_filename));
9051                                 } else {
9052                                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compiledpage}, $page_name, $page_filename));
9053                                 }
9056                                 $kiriwrite_presmodule->addlinebreak();
9057                                 $pages_count++;
9059                         }
9061                         # Write a message saying that the database has
9062                         # been processed.
9064                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefinish}, $database_name));
9065                         $kiriwrite_presmodule->addlinebreak();
9067                 }
9069                 # Disconnect from the database server.
9071                 $kiriwrite_dbmodule->disconnect();
9073                 $kiriwrite_presmodule->addhorizontalline();
9074                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compileresults}, $pages_count, $error_count, $warning_count));
9075                 $kiriwrite_presmodule->endbox();
9076                 $kiriwrite_presmodule->addlinebreak();
9077                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9079                 return $kiriwrite_presmodule->grab();
9081         } elsif ($confirm eq 0){
9083                 # The action to compile the databases has
9084                 # not been confirmed so check what type
9085                 # is being used.
9087                 if ($type eq "single"){
9089                         # The type is a single database selected so
9090                         # process that database.
9092                         # Define some variables for later.
9094                         my %database_info; 
9095                         my $database_filename_check;
9096                         my $database_maxlength_check;
9097                         my $databasefilename;
9098                         my $database_name;
9100                         # Check that the database name and length are
9101                         # valid and return an error if they aren't.
9103                         $databasefilename = $selectedlist[0];
9105                         # Connect to the database server.
9107                         $kiriwrite_dbmodule->connect();
9109                         # Check if any errors occured while connecting to the database server.
9111                         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9113                                 # A database connection error has occured so return
9114                                 # an error.
9116                                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9118                         }
9120                         # Select the database.
9122                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasefilename });
9124                         # Check if any errors had occured while selecting the database.
9126                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9128                                 # The database does not exist, so return an error.
9130                                 kiriwrite_error("databasemissingfile");
9132                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9134                                 # The database has invalid permissions set, so return
9135                                 # an error.
9137                                 kiriwrite_error("databaseinvalidpermissions");
9139                         }
9141                         # Get information about the database.
9143                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9145                         # Check if any error occured while getting the database information.
9147                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9149                                 # A database error has occured so return an error and
9150                                 # also the extended error information.
9152                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
9154                         };
9156                         $database_name = $database_info{"DatabaseName"};
9158                         # Disconnect from the database server.
9160                         $kiriwrite_dbmodule->disconnect();
9162                         # Write out a form asking the user to confirm if the
9163                         # user wants to compile the selected database.
9165                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabase}, { Style => "pageheader" });
9166                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9167                         $kiriwrite_presmodule->startbox();
9168                         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9169                         $kiriwrite_presmodule->addhiddendata("action", "compile");
9170                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9171                         $kiriwrite_presmodule->addhiddendata("id[1]", $databasefilename);
9172                         $kiriwrite_presmodule->addhiddendata("name[1]", "on");
9173                         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9174                         $kiriwrite_presmodule->addlinebreak();
9175                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledatabasemessage}, $database_name));
9176                         $kiriwrite_presmodule->addlinebreak();
9177                         $kiriwrite_presmodule->addlinebreak();
9178                         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compiledatabasebutton});
9179                         $kiriwrite_presmodule->addtext(" | ");
9180                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9181                         $kiriwrite_presmodule->endbox();
9182                         $kiriwrite_presmodule->endform();
9184                         return $kiriwrite_presmodule->grab();
9186                 } elsif ($type eq "multiple"){
9188                         # The type is multiple databases selected
9189                         # so process each database.
9191                         # Define some variables for later.
9193                         my %database_list;
9194                         my $databasename;
9195                         my $database;
9196                         my $database_filename_check;
9197                         my $database_maxlength_check;
9198                         my $database_count = 0;
9199                         my $database_info_name;
9201                         # Connect to the database server.
9203                         $kiriwrite_dbmodule->connect();
9205                         # Check if any errors occured while connecting to the database server.
9207                         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9209                                 # A database connection error has occured so return
9210                                 # an error.
9212                                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9214                         }
9216                         foreach $databasename (@selectedlist){
9218                                 # Check if the database is in the database
9219                                 # directory and skip it if it isn't.
9220  
9221                                 $database_filename_check        = kiriwrite_variablecheck($databasename, "filename", "", 1);
9222                                 $database_maxlength_check       = kiriwrite_variablecheck($databasename, "maxlength", 32, 1);
9223  
9224                                 if ($database_filename_check ne 0 || $database_maxlength_check ne 0){
9225  
9226                                         # The database filename given is invalid or
9227                                         # the database filename given is too long
9228                                         # so process the next database.
9229  
9230                                         next;
9231  
9232                                 }
9234                                 # Select the database to add the page to.
9236                                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasename });
9238                                 # Check if any errors had occured while selecting the database.
9240                                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9242                                         # The database does not exist, so process the next database.
9244                                         next;
9246                                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9248                                         # The database has invalid permissions set, so process
9249                                         # the next database.
9251                                         next;
9253                                 }
9255                                 # Get information about the database.
9257                                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9259                                 # Check if any error occured while getting the database information.
9261                                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9263                                         # A database error has occured so process the next
9264                                         # database.
9266                                         next;
9268                                 };
9270                                 $database_list{$database_count}{Name}           = $database_info{"DatabaseName"};
9271                                 $database_list{$database_count}{Filename}       = $databasename;
9273                                 $database_count++;
9275                         }
9277                         # Check if any databases are available to be compiled.
9279                         if ($database_count eq 0){
9281                                 # No databases are available to be compiled.
9283                                 kiriwrite_error("nodatabaseselected");
9285                         }
9287                         # Write out the form for compiling the database.
9289                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabases}, { Style => "pageheader" });
9290                         $kiriwrite_presmodule->addlinebreak();
9291                         $kiriwrite_presmodule->addlinebreak();
9292                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9293                         $kiriwrite_presmodule->startbox();
9294                         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9295                         $kiriwrite_presmodule->addhiddendata("action", "compile");
9296                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9297                         $kiriwrite_presmodule->addhiddendata("count", $database_count);
9298                         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9299                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabasesmessage});
9300                         $kiriwrite_presmodule->addlinebreak();
9301                         $kiriwrite_presmodule->addlinebreak();
9302                         $kiriwrite_presmodule->startbox("datalist");
9304                         $database_count = 0;
9306                         # write out the list of databases to compile.
9308                         foreach $database (keys %database_list){
9310                                 $database_count++;
9312                                 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9313                                 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9315                                 # Check if the database name is undefined and if it is
9316                                 # then write a message saying the database name is blank.
9318                                 if (!$database_list{$database}{Name}){
9319                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{compile}->{blankdatabasename});
9320                                 } else {
9321                                         $kiriwrite_presmodule->addtext($database_list{$database}{Name});
9322                                 }
9324                                 $kiriwrite_presmodule->addlinebreak();
9326                         }
9328                         $kiriwrite_presmodule->endbox();
9330                         # Disconnect from the database server.
9332                         $kiriwrite_dbmodule->disconnect();
9334                         $kiriwrite_presmodule->addlinebreak();
9335                         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselecteddatabasesbutton});
9336                         $kiriwrite_presmodule->addtext(" | ");
9337                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9338                         $kiriwrite_presmodule->endbox();
9339                         $kiriwrite_presmodule->endform();
9341                         return $kiriwrite_presmodule->grab();
9343                 } else {
9345                         # The type is something else other than
9346                         # single or multiple, so return an error.
9348                         kiriwrite_error("invalidvariable");
9350                 }
9352         } else {
9354                 # The confirm value is neither 0 or 1, so
9355                 # return an error.
9357                 kiriwrite_error("invalidvariable");
9359         }
9363 sub kiriwrite_compile_all{
9364 #################################################################################
9365 # kiriwrite_compile_all: Compile all of the databases in the database           #
9366 # directory.                                                                    #
9367 #                                                                               #
9368 # Usage:                                                                        #
9369 #                                                                               #
9370 # kiriwrite_compile_all();                                                      #
9371 #################################################################################
9373         # Connect to the database server.
9375         $kiriwrite_dbmodule->connect();
9377         # Check if any errors occured while connecting to the database server.
9379         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9381                 # A database connection error has occured so return
9382                 # an error.
9384                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9386         }
9388         # Get the list of available databases.
9390         my @database_list = $kiriwrite_dbmodule->getdblist();
9392         # Check if any errors occured while getting the databases.
9394         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9396                 # The database directory is missing so return an error.
9398                 kiriwrite_error("datadirectorymissing");
9400         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9402                 # The database directory has invalid permissions set so return
9403                 # an error.
9405                 kiriwrite_error("datadirectoryinvalidpermissions");
9407         }
9409         # Define some variables for later.
9411         my $database;
9412         my $database_name_filename_check;
9413         my $database_count              = 0;
9415         # Check the list of databases to compile to see if it is blank,
9416         # if it is then return an error.
9418         if (!@database_list){
9420                 # The list of database is blank so return an error.
9422                 kiriwrite_error("nodatabasesavailable");
9424         }
9426         # Write out a form for confirming the action to compile all of the databases.
9428         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabases}, { Style => "pageheader" });
9429         $kiriwrite_presmodule->addlinebreak();
9430         $kiriwrite_presmodule->addlinebreak();
9432         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9433         $kiriwrite_presmodule->startbox();
9434         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9435         $kiriwrite_presmodule->addhiddendata("action", "compile");
9436         $kiriwrite_presmodule->addhiddendata("type", "multiple");
9438         foreach $database (@database_list){
9440                 # Check if the database filename is blank.
9442                 if ($database eq ""){
9444                         # The database filename is blank so process
9445                         # the next database.
9447                         next;
9449                 }
9451                 # Check if the database filename is valid before
9452                 # using the database.
9454                 $database_name_filename_check   = kiriwrite_variablecheck($database, "filename", 0, 1);
9456                 if ($database_name_filename_check ne 0){
9458                         # The database filename is invalid so process
9459                         # the next database.
9461                         next;
9463                 }
9465                 $database_count++;
9466                 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database);
9467                 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9469         }
9471         $kiriwrite_presmodule->addhiddendata("count", $database_count);
9473         # Disconnect from the database server.
9475         $kiriwrite_dbmodule->disconnect();
9477         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabasesmessage});
9478         $kiriwrite_presmodule->addlinebreak();
9479         $kiriwrite_presmodule->addlinebreak();
9481         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9482         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compilealldatabasesbutton});
9483         $kiriwrite_presmodule->addtext(" | ");
9484         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9485         $kiriwrite_presmodule->endbox();
9486         $kiriwrite_presmodule->endform();
9488         return $kiriwrite_presmodule->grab();
9492 sub kiriwrite_selectedlist{
9493 #################################################################################
9494 # kiriwrite_page_selectedlist: Get the list of selected pages to use.           #
9495 #                                                                               #
9496 # Usage:                                                                        #
9497 #                                                                               #
9498 # kiriwrite_page_selectedlist();                                                #
9499 #################################################################################
9501         # Load the required Perl modules.
9503         my $query = new CGI;
9505         my $count       = $query->param('count');
9507         # Check if the list of files has a value and if not set it 0.
9509         if (!$count){
9511                 $count = 0;
9513         }
9515         # Define some values for later.
9517         my @filename_list; 
9518         my @selected_list;
9519         my @final_list;
9521         my $filename;
9522         my $selected;
9524         my $final_count = 0;
9525         my $seek = 0;
9527         # Get the list of filenames.
9529         do {
9531                 # Get the values from id[]
9533                 $seek++;
9535                 $filename               = $query->param('id[' . $seek . ']');
9536                 $filename_list[$seek]   = $filename;
9538         } until ($seek eq $count || $count eq 0);
9540         # Get the list of selected filenames.
9542         $seek = 0;
9544         do {
9546                 # Get the values from name[]
9548                 $seek++;
9550                 $selected       = $query->param('name[' . $seek . ']');
9552                 if (!$selected){
9554                         $selected = 'off';
9556                 }
9558                 $selected_list[$seek]   = $selected;
9560         } until ($seek eq $count || $count eq 0);
9562         # Create a final list of filenames to be used for
9563         # processing.
9565         $seek = 0;
9567         do {
9569                 # Check if the selected value is on and include
9570                 # the filename in the final list.
9572                 $seek++;
9574                 $selected       = $selected_list[$seek];
9576                 if ($selected eq "on"){
9578                         $filename       = $filename_list[$seek];
9579                         $final_list[$final_count] = $filename;
9580                         $final_count++;
9582                 }
9584         } until ($seek eq $count || $count eq 0);
9586         return @final_list;
9590 sub kiriwrite_compile_list{
9591 #################################################################################
9592 # kiriwrite_compile_list: Shows a list of databases that can be compiled.       #
9593 #                                                                               #
9594 # Usage:                                                                        #
9595 #                                                                               #
9596 # kiriwrite_compile_list();                                                     #
9597 #################################################################################
9599         # Define the following variables that are going to be used before using 
9600         # the foreach function.
9602         my %database_info;
9603         my %database_list;
9604         my $database_count = 0;
9605         my $database_filename = "";
9606         my $database_filename_friendly = "";
9607         my $database_permissions = "";
9608         my $database_name = "";
9609         my $database_description = "";
9610         my $data_file = "";
9611         my @permissions_list;
9612         my @error_list;
9613         my $table_style = 0;
9614         my $table_style_name = "";
9615         my $database;
9617         tie(%database_list, 'Tie::IxHash');
9619         # Connect to the database server.
9621         $kiriwrite_dbmodule->connect();
9623         # Check if any errors occured while connecting to the database server.
9625         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9627                 # A database connection error has occured so return
9628                 # an error.
9630                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9632         }
9634         # Get the list of available databases and process any errors that
9635         # might have occured.
9637         my @database_list = $kiriwrite_dbmodule->getdblist();
9639         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9641                 # The database directory is missing so return an error.
9643                 kiriwrite_error("datadirectorymissing");
9645         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9647                 # The database directory has invalid permissions set so return
9648                 # an error.
9650                 kiriwrite_error("datadirectoryinvalidpermissions");
9652         }
9654         # Begin creating the table for the list of databases.
9656         foreach $data_file (@database_list){
9658                 # Select the database.
9660                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
9662                 # Check if any error occured while selecting the database.
9664                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9666                         # The database does not exist, so process the next
9667                         # database.
9669                         next;
9671                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
9673                         # The database has invalid permissions settings, so
9674                         # add the database to the list of databases with
9675                         # invalid permissions set and process the next
9676                         # database.
9678                         push(@permissions_list, $data_file);
9679                         next;
9681                 }
9683                 # Get information about the database.
9685                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9687                 # Check if any error occured while getting information from the
9688                 # database.
9690                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9692                         # A database error has occured, add the database and specific
9693                         # error message to the list of databases with errors and
9694                         # process the next database.
9696                         push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
9697                         next;
9699                 }
9701                 $database_name          = $database_info{"DatabaseName"};
9702                 $database_description   = $database_info{"Description"};
9704                 # Create a friendly name for the database.
9706                 $database_filename_friendly = $data_file;
9708                 # Append the database information to the table.
9710                 $database_list{$database_count}{Filename}       = $database_filename_friendly;
9711                 $database_list{$database_count}{Name}           = $database_name;
9712                 $database_list{$database_count}{Description}    = $database_description;
9714                 $database_count++;
9716         }
9718         # Check if there are no valid databases are if there is no
9719         # valid databases then write a message saying that no
9720         # valid databases are available.
9722         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilepages}, { Style => "pageheader" });
9723         $kiriwrite_presmodule->addlinebreak();
9724         $kiriwrite_presmodule->addlinebreak();
9726         if ($database_count eq 0){
9728                 # There are no databases available for compiling so
9729                 # write a message instead.
9731                 $kiriwrite_presmodule->startbox("errorbox");
9732                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{nodatabasesavailable});
9733                 $kiriwrite_presmodule->endbox();
9735         } else {
9737                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9738                 $kiriwrite_presmodule->startbox();
9739                 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9740                 $kiriwrite_presmodule->addhiddendata("action", "compile");
9741                 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9743                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
9744                 $kiriwrite_presmodule->addtext(" | ");
9745                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselectedbutton});
9746                 $kiriwrite_presmodule->addlinebreak();
9747                 $kiriwrite_presmodule->addlinebreak();
9748                 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9749                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
9751                 $kiriwrite_presmodule->startheader();
9752                 $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
9753                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
9754                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
9755                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
9756                 $kiriwrite_presmodule->endheader();
9758                 $database_count = 1;
9760                 foreach $database (keys %database_list){
9762                         # Check the style to be used with.
9764                         if ($table_style eq 0){
9766                                 # Use the first style and set the style value
9767                                 # to use the next style, the next time the
9768                                 # if statement is checked.
9770                                 $table_style_name = "tablecell1";
9771                                 $table_style = 1;
9773                         } else {
9775                                 # Use the second style and set the style
9776                                 # value to use the first style, the next
9777                                 # time if statement is checked.
9779                                 $table_style_name = "tablecell2";
9780                                 $table_style = 0;
9781                         }
9783                         # Add the template to the list of available
9784                         # templates to compile.
9786                         $kiriwrite_presmodule->startrow();
9787                         $kiriwrite_presmodule->addcell($table_style_name);
9788                         $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9789                         $kiriwrite_presmodule->addcheckbox("name[" . $database_count . "]");
9790                         $kiriwrite_presmodule->endcell();
9791                         $kiriwrite_presmodule->addcell($table_style_name);
9793                         if (!$database_list{$database}{Name}){
9794                                 $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}) });
9795                         } else {
9796                                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_list{$database}{Filename}, { Text => $database_list{$database}{Name} });
9797                         }
9799                         $kiriwrite_presmodule->endcell();
9800                         $kiriwrite_presmodule->addcell($table_style_name);
9802                         if (!$database_list{$database}{Description}){
9803                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
9804                         } else {
9805                                 $kiriwrite_presmodule->addtext($database_list{$database}{Description});
9806                         }
9808                         $kiriwrite_presmodule->endcell();
9809                         $kiriwrite_presmodule->addcell($table_style_name);
9810                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile&action=compile&type=single&database=" . $database_list{$database}{Filename}, { Text => $kiriwrite_lang->{options}->{compile} });
9811                         $kiriwrite_presmodule->endcell();
9812                         $kiriwrite_presmodule->endrow();
9814                         $database_count++;
9816                 }
9818                 $kiriwrite_presmodule->endtable();
9819                 $kiriwrite_presmodule->endbox();
9820                 $kiriwrite_presmodule->endform();
9822         }
9824         # Disconnect from the database server.
9826         $kiriwrite_dbmodule->disconnect();
9828         # Check if any databases with problems have appeared and if they
9829         # have, print out a message saying which databases have problems.
9831         if (@permissions_list){
9833                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
9834                 $kiriwrite_presmodule->addlinebreak();
9835                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
9836                 $kiriwrite_presmodule->addlinebreak();
9837  
9838                 foreach $database (@permissions_list){
9839  
9840                         $kiriwrite_presmodule->addlinebreak();
9841                         $kiriwrite_presmodule->addtext($database);
9842  
9843                 }
9844  
9845                 $kiriwrite_presmodule->addlinebreak();
9846                 $kiriwrite_presmodule->addlinebreak();
9848         }
9850         if (@error_list){
9852                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
9853                 $kiriwrite_presmodule->addlinebreak();
9854                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
9855                 $kiriwrite_presmodule->addlinebreak();
9857                 foreach $database (@error_list){
9859                         $kiriwrite_presmodule->addlinebreak();
9860                         $kiriwrite_presmodule->addtext($database);
9862                 }
9864         }
9866         return $kiriwrite_presmodule->grab();
9870 sub kiriwrite_compile_clean{
9871 #################################################################################
9872 # kiriwrite_compile_clean: Deletes the contents of the output directory.        #
9873 #                                                                               #
9874 # Usage:                                                                        #
9875 #                                                                               #
9876 # kiriwrite_compile_clean(confirm);                                             #
9877 #                                                                               #
9878 # confirm       Confirms the deletion of files from the output directory.       #
9879 #################################################################################
9881         # Get the values passed to the subroutine.
9883         my ($confirm) = @_;
9885         # Define some variables for later.
9887         my $file_permissions;
9888         my $output_directory_exists;
9889         my $output_directory_permissions;
9890         my $warning_message;
9892         # Check if the output directory exists.
9894         $output_directory_exists         = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"});
9896         if ($output_directory_exists eq 1){
9898                 # The output directory does not exist so return
9899                 # an error.
9901                 kiriwrite_error("outputdirectorymissing");
9903         }
9905         # Check if the output directory has invalid
9906         # permissions set.
9908         $output_directory_permissions   = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"});
9910         if ($output_directory_permissions eq 1){
9912                 # The output directory has invalid permissions
9913                 # set, so return an error.
9915                 kiriwrite_error("outputdirectoryinvalidpermissions");
9917         }
9919         if ($confirm) {
9921                 if ($confirm eq 1){
9923                         # The action to clean the output directory has been
9924                         # confirmed.
9926                         # Remove the list of files and directories from the
9927                         # output directory.
9929                         $file_permissions = kiriwrite_compile_clean_helper($kiriwrite_config{"directory_data_output"}, 1);
9931                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9933                         if ($file_permissions eq 1){
9935                                 $kiriwrite_presmodule->addlinebreak();
9936                                 $kiriwrite_presmodule->addlinebreak();
9937                                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{somecontentnotremoved});
9938                                 $kiriwrite_presmodule->addlinebreak();
9939                                 $kiriwrite_presmodule->addlinebreak();
9941                         } else {
9943                                 $kiriwrite_presmodule->addlinebreak();
9944                                 $kiriwrite_presmodule->addlinebreak();
9945                                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{contentremoved});
9946                                 $kiriwrite_presmodule->addlinebreak();
9947                                 $kiriwrite_presmodule->addlinebreak();
9949                         }
9951                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9953                         return $kiriwrite_presmodule->grab();
9955                 } else {
9957                         # A value other than 1 is set for the confirm value
9958                         # (which it shouldn't be) so return an error.
9960                         kiriwrite_error("invalidvariable");
9962                 }
9964         }
9966         # Print out a form for cleaning the output directory.
9968         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9969         $kiriwrite_presmodule->addlinebreak();
9970         $kiriwrite_presmodule->addlinebreak();
9971         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9972         $kiriwrite_presmodule->startbox();
9973         $kiriwrite_presmodule->addhiddendata("mode", "compile");
9974         $kiriwrite_presmodule->addhiddendata("action", "clean");
9975         $kiriwrite_presmodule->addhiddendata("confirm", 1);
9976         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectorymessage});
9977         $kiriwrite_presmodule->addlinebreak();
9978         $kiriwrite_presmodule->addlinebreak();
9979         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{cleanoutputdirectorybutton});
9980         $kiriwrite_presmodule->addtext(" | ");
9981         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist}});
9982         $kiriwrite_presmodule->endbox();
9983         $kiriwrite_presmodule->endform();
9985         return $kiriwrite_presmodule->grab();
9989 sub kiriwrite_compile_clean_helper{
9990 #################################################################################
9991 # kiriwrite_compile_clean_helper: Helper for cleaning out the output directory. #
9992 # This command sometimes is called recursively (when a directory is found).     #
9993 #                                                                               #
9994 # Usage:                                                                        #
9995 #                                                                               #
9996 # kiriwrite_compile_clean_helper(directory, removedirectory, [permissions]);    #
9997 #                                                                               #
9998 # directory             Specifies the directory to remove files (and            #
9999 #                       sub-directories) from.                                  #
10000 # keepdirectory         Keeps the directory itself after all files have been    #
10001 #                       removed.                                                #
10002 # permissions           Used recursively for error checking.                    #
10003 #################################################################################
10005         # Get the values passed to the subroutine.
10007         my ($directory, $directory_keep, $permissions) = @_;
10009         # Check if the directory_keep is only one charater long.
10011         my $directory_file = "";
10012         my @directory_list;
10013         my $file_permissions = 0;
10014         my $debug = 0;
10016         # Check if the file permissions value is blank.
10018         if (!$permissions){
10020                 # The file permissions value is blank.
10022                 $permissions = 0;
10024         }
10026         # Open the directory specified, read the contents of
10027         # the directory and then close the directory.
10029         opendir(DIRECTORY, $directory);
10030         @directory_list = readdir(DIRECTORY);
10031         closedir(DIRECTORY);
10033         # Remove each file and directory.
10035         foreach $directory_file (@directory_list){
10037                 # Check if the filename is '.' or '..' and if it
10038                 # is skip those files.
10040                 if ($directory_file eq "." || $directory_file eq ".."){
10042                         # The filename is '.' or '..' so skip processing
10043                         # these files.
10045                 } else {
10047                         # Check if the permissions on the file or directory has
10048                         # valid permissions set.
10050                         $file_permissions = kiriwrite_filepermissions($directory . '/' . $directory_file, 1, 1);
10052                         if ($file_permissions eq 1){
10054                                 # The file or directory has invalid permissions set.
10056                                 $permissions = 1;
10057                                 next;
10059                         }
10061                         # Check if the filename is a directory.
10063                         if (-d $directory . '/' . $directory_file){
10065                                 # The filename is a directory so send the directory name
10066                                 # and this subroutine again (recursively).
10068                                 kiriwrite_compile_clean_helper($directory . '/' . $directory_file, 0, $permissions);
10070                         } else {
10072                                 # The file is not a directory but an actual file so
10073                                 # remove as normal (in terms of the Perl language).
10075                                 ($directory) = $directory =~ m/^(.*)$/g;
10076                                 ($directory_file) = $directory_file =~ m/^(.*)$/g;
10078                                 # Check if the directory is undefined and if it is then
10079                                 # set it to blank.
10081                                 if (!$directory){
10082                                         $directory = "";
10083                                 }
10085                                 if (!$directory_file){
10086                                         $directory_file = "";
10087                                 }
10089                                 unlink($directory . '/' . $directory_file);
10091                         }
10093                 }
10095         }
10097         # Check if the directory should be kept.
10099         if ($directory_keep eq 1){
10101                 # The directory_keep value is set as 1 so the directory
10102                 # specified should be kept.
10104         } elsif ($directory_keep eq 0) {
10106                 # The directory_keep value is set as 0 so remove the
10107                 # directory specified.
10109                 ($directory) = $directory =~ m/^(.*)$/g;
10110                 rmdir($directory);
10112         } else {
10114                 # A value other than 0 or 1 was specified so return
10115                 # an error,
10117                 kiriwrite_error('invalidvalue');
10119         }
10121         return $permissions;
10125 sub kiriwrite_settings_view{
10126 #################################################################################
10127 # kiriwrite_options_view: Writes out the list of options and variables.         #
10128 #                                                                               #
10129 # Usage:                                                                        #
10130 #                                                                               #
10131 # kiriwrite_settings_view();                                                    #
10132 #################################################################################
10134         # Get the settings.
10136         my $settings_directory_db               = $kiriwrite_config{"directory_data_db"};
10137         my $settings_directory_output           = $kiriwrite_config{"directory_data_output"};
10138         my $settings_noncgi_images              = $kiriwrite_config{"directory_noncgi_images"};
10139         my $settings_system_datetime            = $kiriwrite_config{"system_datetime"};
10140         my $settings_system_language            = $kiriwrite_config{"system_language"};
10141         my $settings_system_presentation        = $kiriwrite_config{"system_presmodule"};
10142         my $settings_system_database            = $kiriwrite_config{"system_dbmodule"};
10144         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{viewsettings}, { Style => "pageheader" });
10145         $kiriwrite_presmodule->addlinebreak();
10146         $kiriwrite_presmodule->addlinebreak();
10147         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{currentsettings});
10148         $kiriwrite_presmodule->addlinebreak();
10149         $kiriwrite_presmodule->addlinebreak();
10150         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10152         $kiriwrite_presmodule->startheader();
10153         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10154         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10155         $kiriwrite_presmodule->endheader();
10157         $kiriwrite_presmodule->startrow();
10158         $kiriwrite_presmodule->addcell("tablecellheader");
10159         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10160         $kiriwrite_presmodule->endcell();
10161         $kiriwrite_presmodule->addcell("tablecellheader");
10162         $kiriwrite_presmodule->endcell();
10163         $kiriwrite_presmodule->endrow();
10165         $kiriwrite_presmodule->startrow();
10166         $kiriwrite_presmodule->addcell("tablecell1");
10167         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10168         $kiriwrite_presmodule->endcell();
10169         $kiriwrite_presmodule->addcell("tablecell2");
10170         $kiriwrite_presmodule->addtext($settings_directory_db);
10171         $kiriwrite_presmodule->endcell();
10172         $kiriwrite_presmodule->endrow();
10174         $kiriwrite_presmodule->startrow();
10175         $kiriwrite_presmodule->addcell("tablecell1");
10176         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
10177         $kiriwrite_presmodule->endcell();
10178         $kiriwrite_presmodule->addcell("tablecell2");
10179         $kiriwrite_presmodule->addtext($settings_directory_output);
10180         $kiriwrite_presmodule->endcell();
10181         $kiriwrite_presmodule->endrow();
10183         $kiriwrite_presmodule->startrow();
10184         $kiriwrite_presmodule->addcell("tablecell1");
10185         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
10186         $kiriwrite_presmodule->endcell();
10187         $kiriwrite_presmodule->addcell("tablecell2");
10188         $kiriwrite_presmodule->addtext($settings_noncgi_images);
10189         $kiriwrite_presmodule->endcell();
10190         $kiriwrite_presmodule->endrow();
10192         $kiriwrite_presmodule->startrow();
10193         $kiriwrite_presmodule->addcell("tablecellheader");
10194         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
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}->{dateformat});
10203         $kiriwrite_presmodule->endcell();
10204         $kiriwrite_presmodule->addcell("tablecell2");
10205         $kiriwrite_presmodule->addtext($settings_system_datetime);
10206         $kiriwrite_presmodule->endcell();
10207         $kiriwrite_presmodule->endrow();
10209         $kiriwrite_presmodule->startrow();
10210         $kiriwrite_presmodule->addcell("tablecellheader");
10211         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
10212         $kiriwrite_presmodule->endcell();
10213         $kiriwrite_presmodule->addcell("tablecellheader");
10214         $kiriwrite_presmodule->endcell();
10215         $kiriwrite_presmodule->endrow();
10217         $kiriwrite_presmodule->startrow();
10218         $kiriwrite_presmodule->addcell("tablecell1");
10219         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
10220         $kiriwrite_presmodule->endcell();
10221         $kiriwrite_presmodule->addcell("tablecell2");
10222         $kiriwrite_presmodule->addtext($settings_system_language);
10223         $kiriwrite_presmodule->endcell();
10224         $kiriwrite_presmodule->endrow();
10226         $kiriwrite_presmodule->startrow();
10227         $kiriwrite_presmodule->addcell("tablecellheader");
10228         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
10229         $kiriwrite_presmodule->endcell();
10230         $kiriwrite_presmodule->addcell("tablecellheader");
10231         $kiriwrite_presmodule->endcell();
10232         $kiriwrite_presmodule->endrow();
10234         $kiriwrite_presmodule->startrow();
10235         $kiriwrite_presmodule->addcell("tablecell1");
10236         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
10237         $kiriwrite_presmodule->endcell();
10238         $kiriwrite_presmodule->addcell("tablecell2");
10239         $kiriwrite_presmodule->addtext($settings_system_presentation);
10240         $kiriwrite_presmodule->endcell();
10241         $kiriwrite_presmodule->endrow();
10243         $kiriwrite_presmodule->startrow();
10244         $kiriwrite_presmodule->addcell("tablecell1");
10245         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
10246         $kiriwrite_presmodule->endcell();
10247         $kiriwrite_presmodule->addcell("tablecell2");
10248         $kiriwrite_presmodule->addtext($settings_system_database);
10249         $kiriwrite_presmodule->endcell();
10250         $kiriwrite_presmodule->endrow();
10252         $kiriwrite_presmodule->endtable();
10254         $kiriwrite_presmodule->addlinebreak();
10255         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{altersettings});
10257         return $kiriwrite_presmodule->grab();
10261 sub kiriwrite_settings_edit{
10262 #################################################################################
10263 # kiriwrite_settings_edit: Edits the options.                                   #
10264 #                                                                               #
10265 # Usage:                                                                        #
10266 #                                                                               #
10267 # kiriwrite_settings_edit(options);                                             #
10268 #                                                                               #
10269 # options               Specifies the following options in any order.           #
10270 #                                                                               #
10271 # DatabaseDirectory     Specifies the new database directory to use.            #
10272 # OutputDirectory       Specifies the new output directory to use.              #
10273 # ImagesURIPath         Specifies the new URI path for images.                  #
10274 # DateTimeFormat        Specifies the new date and time format.                 #
10275 # SystemLanguage        Specifies the new language to use for Kiriwrite.        #
10276 # PrsentationModule     Specifies the new presentation module to use for        #
10277 #                       Kiriwrite.                                              #
10278 # DatabaseModule        Specifies the new database module to use for Kiriwrite. #
10279 #                                                                               #
10280 # Options for server-based database modules.                                    #
10281 #                                                                               #
10282 # DatabaseServer        Specifies the database server to use.                   #
10283 # DaravasePort          Specifies the port the database server is running on.   #
10284 # DatabaseProtocol      Specifies the protocol the database server is using.    #
10285 # DatabaseSQLDatabase   Specifies the SQL database name to use.                 #
10286 # DatabaseUsername      Specifies the database server username.                 #
10287 # DatabasePasswordKeep  Keeps the current password in the configuration file.   #
10288 # DatabasePassword      Specifies the password for the database server username.#
10289 # DatabaseTablePrefix   Specifies the prefix used for tables.                   #
10290 #################################################################################
10292         # Get the values that have been passed to the subroutine.
10294         my ($passedoptions) = @_;
10296         # Get the values from the hash.
10298         my $settings_dbdirectory                = $passedoptions->{"DatabaseDirectory"};
10299         my $settings_outputdirectory            = $passedoptions->{"OutputDirectory"};
10300         my $settings_imagesuri                  = $passedoptions->{"ImagesURIPath"};
10301         my $settings_datetimeformat             = $passedoptions->{"DateTimeFormat"};
10302         my $settings_languagesystem             = $passedoptions->{"SystemLanguage"};
10303         my $settings_presmodule                 = $passedoptions->{"PresentationModule"};
10304         my $settings_dbmodule                   = $passedoptions->{"DatabaseModule"};
10306         my $settings_database_server            = $passedoptions->{"DatabaseServer"};
10307         my $settings_database_port              = $passedoptions->{"DatabasePort"};
10308         my $settings_database_protocol          = $passedoptions->{"DatabaseProtocol"};
10309         my $settings_database_sqldatabase       = $passedoptions->{"DatabaseSQLDatabase"};
10310         my $settings_database_username          = $passedoptions->{"DatabaseUsername"};
10311         my $settings_database_passwordkeep      = $passedoptions->{"DatabasePasswordKeep"};
10312         my $settings_database_password          = $passedoptions->{"DatabasePassword"};
10313         my $settings_database_tableprefix       = $passedoptions->{"DatabaseTablePrefix"};
10315         my $confirm                             = $passedoptions->{"Confirm"};
10317         if (!$confirm){
10319                 # If the confirm value is blank, then set the confirm
10320                 # value to 0.
10322                 $confirm = 0;
10324         }
10326         if ($confirm eq "1"){
10328                 # The action to edit the settings has been confirmed.
10329                 # Start by checking each variable about to be placed
10330                 # in the settings file is valid.
10332                 # Deinfe some variables for later.
10334                 my @kiriwrite_new_settings;
10336                 # Check the length of the directory names.
10338                 kiriwrite_variablecheck($settings_dbdirectory, "maxlength", 64, 0);
10339                 kiriwrite_variablecheck($settings_outputdirectory, "maxlength", 64, 0);
10340                 kiriwrite_variablecheck($settings_imagesuri, "maxlength", 512, 0);
10341                 kiriwrite_variablecheck($settings_datetimeformat, "maxlength", 32, 0);
10343                 kiriwrite_variablecheck($settings_languagesystem, "language_filename", "", 0);
10345                 # Check the module names to see if they're valid.
10347                 my $kiriwrite_presmodule_modulename_check       = kiriwrite_variablecheck($settings_presmodule, "module", 0, 1);
10348                 my $kiriwrite_dbmodule_modulename_check         = kiriwrite_variablecheck($settings_dbmodule, "module", 0, 1);
10350                 if ($kiriwrite_presmodule_modulename_check eq 1){
10352                         # The presentation module name is blank, so return
10353                         # an error.
10355                         kiriwrite_error("presmoduleblank");
10357                 }
10359                 if ($kiriwrite_presmodule_modulename_check eq 2){
10361                         # The presentation module name is invalid, so return
10362                         # an error.
10364                         kiriwrite_error("presmoduleinvalid");
10366                 }
10368                 if ($kiriwrite_dbmodule_modulename_check eq 1){
10370                         # The database module name is blank, so return
10371                         # an error.
10373                         kiriwrite_error("dbmoduleblank");
10375                 }
10377                 if ($kiriwrite_dbmodule_modulename_check eq 2){
10379                         # The database module name is invalid, so return
10380                         # an error.
10382                         kiriwrite_error("dbmoduleinvalid");
10384                 }
10386                 # Check if the directory names only contain letters and numbers and
10387                 # return a specific error if they don't.
10389                 my $kiriwrite_dbdirectory_check         = kiriwrite_variablecheck($settings_dbdirectory, "directory", 0, 1);
10390                 my $kiriwrite_outputdirectory_check     = kiriwrite_variablecheck($settings_outputdirectory, "directory", 0, 1);
10391                 kiriwrite_variablecheck($settings_datetimeformat, "datetime", 0, 0);
10393                 if ($kiriwrite_dbdirectory_check eq 1){
10395                         # The database directory name is blank, so return
10396                         # an error.
10398                         kiriwrite_error("dbdirectoryblank");
10400                 } elsif ($kiriwrite_dbdirectory_check eq 2){
10402                         # The database directory name is invalid, so return
10403                         # an error.
10405                         kiriwrite_error("dbdirectoryinvalid");
10407                 }
10409                 if ($kiriwrite_outputdirectory_check eq 1){
10411                         # The output directory name is blank, so return
10412                         # an error.
10414                         kiriwrite_error("outputdirectoryblank");
10416                 } elsif ($kiriwrite_outputdirectory_check eq 2){
10418                         # The output directory name is invalid, so return
10419                         # an error.
10421                         kiriwrite_error("outputdirectoryinvalid");
10423                 }
10425                 # Check if the presentation module with the filename given exists.
10427                 my $presmodule_exists = kiriwrite_fileexists("Modules/Presentation/" . $settings_presmodule . ".pm");
10429                 if ($presmodule_exists eq 1){
10431                         # The presentation module does not exist so return an error.
10433                         kiriwrite_error("presmodulemissing");
10435                 }
10437                 # Check if the database module with the filename given exists.
10439                 my $dbmodule_exists = kiriwrite_fileexists("Modules/Database/" . $settings_dbmodule . ".pm");
10441                 if ($dbmodule_exists eq 1){
10443                         # The database module does not exist so return an error.
10445                         kiriwrite_error("dbmodulemissing");
10447                 }
10449                 # Check if the language filename given exists.
10451                 my $languagefile_exists = kiriwrite_fileexists("lang/" . $settings_languagesystem . ".xml");
10453                 if ($languagefile_exists eq 1){
10455                         # The language filename given does not exist so return an error.
10457                         kiriwrite_error("languagefilenamemissing");             
10459                 }
10461                 # Check the database server options to see if they are valid.
10463                 my $kiriwrite_databaseserver_length_check               = kiriwrite_variablecheck($settings_database_server, "maxlength", 128, 1);
10464                 my $kiriwrite_databaseserver_lettersnumbers_check       = kiriwrite_variablecheck($settings_database_server, "lettersnumbers", 0, 1);
10465                 my $kiriwrite_databaseport_length_check                 = kiriwrite_variablecheck($settings_database_port, "maxlength", 5, 1);
10466                 my $kiriwrite_databaseport_numbers_check                = kiriwrite_variablecheck($settings_database_port, "numbers", 0, 1);
10467                 my $kiriwrite_databaseport_port_check                   = kiriwrite_variablecheck($settings_database_port, "port", 0, 1);
10468                 my $kiriwrite_databaseprotocol_length_check             = kiriwrite_variablecheck($settings_database_protocol, "maxlength", 5, 1);
10469                 my $kiriwrite_databaseprotocol_protocol_check           = kiriwrite_variablecheck($settings_database_protocol, "serverprotocol", 0, 1);
10470                 my $kiriwrite_databasename_length_check                 = kiriwrite_variablecheck($settings_database_sqldatabase, "maxlength", 32, 1);
10471                 my $kiriwrite_databasename_lettersnumbers_check         = kiriwrite_variablecheck($settings_database_sqldatabase, "lettersnumbers", 0, 1);
10472                 my $kiriwrite_databaseusername_length_check             = kiriwrite_variablecheck($settings_database_username, "maxlength", 16, 1);
10473                 my $kiriwrite_databaseusername_lettersnumbers_check     = kiriwrite_variablecheck($settings_database_username, "lettersnumbers", 0, 1);
10474                 my $kiriwrite_databasepassword_length_check             = kiriwrite_variablecheck($settings_database_password, "maxlength", 64, 1);
10475                 my $kiriwrite_databasetableprefix_length_check          = kiriwrite_variablecheck($settings_database_tableprefix, "maxlength", 16, 1);
10476                 my $kiriwrite_databasetableprefix_lettersnumbers_check  = kiriwrite_variablecheck($settings_database_tableprefix, "lettersnumbers", 0, 1);
10478                 if ($kiriwrite_databaseserver_length_check eq 1){
10480                         # The length of the database server name is too long so
10481                         # return an error.
10483                         kiriwrite_error("servernametoolong");
10485                 }
10487                 if ($kiriwrite_databaseserver_lettersnumbers_check eq 1){
10489                         # The database server name contains characters other
10490                         # than letters and numbers, so return an error.
10492                         kiriwrite_error("servernameinvalid");
10494                 }
10496                 if ($kiriwrite_databaseport_length_check eq 1){
10498                         # The database port number length is too long so return
10499                         # an error.
10501                         kiriwrite_error("serverportnumbertoolong");
10503                 }
10505                 if ($kiriwrite_databaseport_numbers_check eq 1){
10507                         # The database port number contains characters other
10508                         # than numbers so return an error.
10510                         kiriwrite_error("serverportnumberinvalidcharacters");
10512                 }
10514                 if ($kiriwrite_databaseport_port_check eq 1){
10516                         # The database port number given is invalid so return
10517                         # an error.
10519                         kiriwrite_error("serverportnumberinvalid");
10521                 }
10523                 if ($kiriwrite_databaseprotocol_length_check eq 1){
10525                         # The database protocol name given is too long so
10526                         # return an error.
10528                         kiriwrite_error("serverprotocolnametoolong");
10530                 }
10532                 if ($kiriwrite_databaseprotocol_protocol_check eq 1){
10534                         # The server protcol given is invalid so return
10535                         # an error.
10537                         kiriwrite_error("serverprotocolinvalid");
10539                 }
10541                 if ($kiriwrite_databasename_length_check eq 1){
10543                         # The SQL database name is too long so return
10544                         # an error.
10546                         kiriwrite_error("serverdatabasenametoolong");
10548                 }
10550                 if ($kiriwrite_databasename_lettersnumbers_check eq 1){
10552                         # The database name contains invalid characters
10553                         # so return an error.
10555                         kiriwrite_error("serverdatabasenameinvalid");
10557                 }
10559                 if ($kiriwrite_databaseusername_length_check eq 1){
10561                         # The database username given is too long so
10562                         # return an error.
10564                         kiriwrite_error("serverdatabaseusernametoolong");
10566                 }
10568                 if ($kiriwrite_databaseusername_lettersnumbers_check eq 1){
10570                         # The database username contains invalid characters
10571                         # so return an error.
10573                         kiriwrite_error("serverdatabaseusernameinvalid");
10575                 }
10577                 if ($kiriwrite_databasepassword_length_check eq 1){
10579                         # The database password given is too long so return
10580                         # an error.
10582                         kiriwrite_error("serverdatabasepasswordtoolong");
10584                 }
10586                 if ($kiriwrite_databasetableprefix_length_check eq 1){
10588                         # The database table prefix given is too long so
10589                         # return an error.
10591                         kiriwrite_error("serverdatabasetableprefixtoolong");
10593                 }
10595                 if ($kiriwrite_databasetableprefix_lettersnumbers_check eq 1){
10597                         # The database table prefix given contains invalid
10598                         # characters so return an error.
10600                         kiriwrite_error("serverdatabasetableprefixinvalid");
10602                 }
10604                 # Check if the current password should be kept.
10606                 if ($settings_database_passwordkeep eq "on"){
10608                         # The current password in the configuration file should be used.
10610                         $settings_database_password     = $kiriwrite_config{"database_password"};
10612                 }
10614                 # Write the new settings to the XML file.
10616                 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 });
10618                 # Write a confirmation message.
10620                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingsedited}, { Style => "pageheader" });
10621                 $kiriwrite_presmodule->addlinebreak();
10622                 $kiriwrite_presmodule->addlinebreak();
10623                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingseditedmessage});
10624                 $kiriwrite_presmodule->addlinebreak();
10625                 $kiriwrite_presmodule->addlinebreak();
10626                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
10628                 return $kiriwrite_presmodule->grab();
10630         }
10632         # Get the list of languages available.
10634         my %language_list;
10635         my @language_directory          = "";
10636         my $language;
10637         my $language_filename           = "";
10638         my $language_file_xml           = "";
10639         my $language_file_systemname    = "";
10640         my $language_file_localname     = "";
10641         my $language_file_seek          = 0;
10642         my $language_flie_dot           = 0;
10643         my $language_file_length        = 0;
10644         my $language_file_count         = 0;
10645         my $language_file_char          = "";
10646         my $language_file_friendly      = "";
10647         my $language_config             = $kiriwrite_config{"system_language"};
10649         tie(%language_list, 'Tie::IxHash');
10651         opendir(LANGUAGEDIR, "lang");
10652         @language_directory = grep /m*\.xml$/, readdir(LANGUAGEDIR);
10653         closedir(LANGUAGEDIR);
10655         # Process each language by loading the XML configuration file
10656         # used for each language and then get the System name and 
10657         # the local name of the language.
10659         foreach $language_filename (@language_directory){
10661                 # Load the language file currently selected.
10663                 $language_file_xml = $xsl->XMLin("lang" . '/' . $language_filename, SuppressEmpty => 1);
10665                 # Get the system name and the local name of the language.
10667                 $language_file_localname = $language_file_xml -> {about} -> {name};
10669                 # Check if either the system name or the local name of the language
10670                 # is blank and if it is, then don't add the language to the list.
10672                 if ($language_file_localname eq ""){
10674                         # The system name or the local name is blank so don't add
10675                         # the language to the list.
10676                 
10677                 } else {
10679                         # Get the 'friendly' name of the language file name (basically
10680                         # remove the .xml part from the filename.
10682                         $language_file_length = length($language_filename);
10684                         do {
10686                                 # Get a character from the language filename and currently
10687                                 # set by the seek counter.
10689                                 $language_file_char = substr($language_filename, $language_file_seek, 1);
10691                                 # Check if the character is a dot and if it is then set the
10692                                 # last dot value to the seek counter value.
10694                                 if ($language_file_char eq "."){
10696                                         # Current chatacter is a dot so set the last dot value 
10697                                         # to what is currently the seek counter.
10699                                         $language_flie_dot = $language_file_seek;
10701                                 } else {
10703                                         # Current character is not a dot, so do nothing.
10705                                 }
10707                                 # Increment the seek counter.
10709                                 $language_file_seek++;
10711                         } until ($language_file_seek eq $language_file_length);
10713                         # Reset the seek counter.
10715                         $language_file_seek = 0;
10717                         # Process the file name again and this time process the file
10718                         # name until it reaches the last dot found.
10720                         do {
10722                                 # Get the character the seek counter is currently set at.
10724                                 $language_file_char = substr($language_filename, $language_file_seek, 1);
10726                                 # Append the character to the friendly file name.
10728                                 $language_file_friendly = $language_file_friendly . $language_file_char;
10730                                 # Increment the seek counter.
10731         
10732                                 $language_file_seek++;
10734                         } until ($language_file_seek eq $language_flie_dot);
10736                         # Append the language to the available languages list.
10738                         $language_list{$language_file_count}{Filename} = $language_file_friendly;
10739                         $language_list{$language_file_count}{Name} = $language_file_localname;
10740                         $language_file_count++;
10742                         # Reset certain counters and values before continuing.
10744                         $language_file_seek     = 0;
10745                         $language_flie_dot      = 0;
10746                         $language_file_length   = 0;
10747                         $language_file_char     = "";
10748                         $language_file_friendly = "";
10750                 }
10752         }
10754         # Get the list of presentation modules available.
10756         my %presmodule_list;
10757         my @presmodule_directory;
10758         my $presmodule;
10759         my $presmodule_file             = "";
10760         my $presmodule_char             = "";
10761         my $presmodule_dot              = 0;
10762         my $presmodule_firstdot         = 0;
10763         my $presmodule_firstdotfound    = "";
10764         my $presmodule_seek             = 0;
10765         my $presmodule_length           = 0;
10766         my $presmodule_count            = 0;
10767         my $presmodule_friendly         = "";
10768         my $presmodule_selectlist       = "";
10769         my $presmodule_config           = $kiriwrite_config{"system_presmodule"};
10771         # Open and get the list of presentation modules (perl modules) by filtering
10772         # out the 
10774         opendir(OUTPUTSYSTEMDIR, "Modules/Presentation");
10775         @presmodule_directory = grep /m*\.pm$/, readdir(OUTPUTSYSTEMDIR);
10776         closedir(OUTPUTSYSTEMDIR);
10778         # Process each presentation module and add them to the list of available
10779         # presentation modules.
10781         foreach $presmodule_file (@presmodule_directory){
10783                 # Get the length of the presentation module (perl module) filename.
10785                 $presmodule_length = length($presmodule_file);
10787                 # Get the friendly name of the Perl module (by getting rid of the
10788                 # .pm part of the filename).
10790                 do {
10792                         $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10794                         # Check if the current character is a dot and if it is then
10795                         # set the last dot found number to the current seek number.
10797                         if ($presmodule_char eq "."){
10799                                 # Put the seek value as the last dot found number.
10801                                 $presmodule_dot = $presmodule_seek;
10803                         }
10805                         # Increment the seek counter.
10807                         $presmodule_seek++;
10809                 } until ($presmodule_seek eq $presmodule_length);
10811                 # Reset the seek counter as it is going to be used again.
10813                 $presmodule_seek = 0;
10815                 # Get the friendly name of the Perl module by the processing the file
10816                 # name to the last dot the previous 'do' tried to find.
10818                 do {
10820                         # Get the character the seek counter is currently set at.
10822                         $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10824                         # Append the character to the friendly name of the presentation module.
10826                         $presmodule_friendly = $presmodule_friendly . $presmodule_char;
10828                         # Increment the seek counter.
10830                         $presmodule_seek++;
10832                 } until ($presmodule_seek eq $presmodule_dot);
10834                 # Append the option to tbe list of available presentation modules.
10836                 $presmodule_list{$presmodule_count}{Filename} = $presmodule_friendly;
10838                 # Reset the following values.
10840                 $presmodule_seek        = 0;
10841                 $presmodule_length      = 0;
10842                 $presmodule_char        = "";
10843                 $presmodule_friendly    = "";
10844                 $presmodule_count++;
10846         }
10848         # Get the list of database modules available.
10850         my %dbmodule_list;
10851         my @dbmodule_directory;
10852         my $dbmodule;
10853         my $dbmodule_file               = "";
10854         my $dbmodule_char               = "";
10855         my $dbmodule_dot                = 0;
10856         my $dbmodule_firstdot           = 0;
10857         my $dbmodule_firstdotfound      = "";
10858         my $dbmodule_seek               = 0;
10859         my $dbmodule_length             = 0;
10860         my $dbmodule_count              = 0;
10861         my $dbmodule_friendly           = "";
10862         my $dbmodule_selectlist         = "";
10863         my $dbmodule_config             = $kiriwrite_config{"system_dbmodule"};
10865         # Open and get the list of presentation modules (perl modules) by filtering
10866         # out the 
10868         opendir(DATABASEDIR, "Modules/Database");
10869         @dbmodule_directory = grep /m*\.pm$/, readdir(DATABASEDIR);
10870         closedir(DATABASEDIR);
10872         # Process each presentation module and add them to the list of available
10873         # presentation modules.
10875         foreach $dbmodule_file (@dbmodule_directory){
10877                 # Get the length of the database module (perl module) filename.
10879                 $dbmodule_length = length($dbmodule_file);
10881                 # Get the friendly name of the Perl module (by getting rid of the
10882                 # .pm part of the filename).
10884                 do {
10886                         $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10888                         # Check if the current character is a dot and if it is then
10889                         # set the last dot found number to the current seek number.
10891                         if ($dbmodule_char eq "."){
10893                                 # Put the seek value as the last dot found number.
10895                                 $dbmodule_dot = $dbmodule_seek;
10897                         }
10899                         # Increment the seek counter.
10901                         $dbmodule_seek++;
10903                 } until ($dbmodule_seek eq $dbmodule_length);
10905                 # Reset the seek counter as it is going to be used again.
10907                 $dbmodule_seek = 0;
10909                 # Get the friendly name of the Perl module by the processing the file
10910                 # name to the last dot the previous 'do' tried to find.
10912                 do {
10914                         # Get the character the seek counter is currently set at.
10916                         $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10918                         # Append the character to the friendly name of the presentation module.
10920                         $dbmodule_friendly = $dbmodule_friendly . $dbmodule_char;
10922                         # Increment the seek counter.
10924                         $dbmodule_seek++;
10926                 } until ($dbmodule_seek eq $dbmodule_dot);
10928                 # Append the option to tbe list of available database modules.
10930                 $dbmodule_list{$dbmodule_count}{Filename} = $dbmodule_friendly;
10932                 # Reset the following values.
10934                 $dbmodule_seek  = 0;
10935                 $dbmodule_length        = 0;
10936                 $dbmodule_char          = "";
10937                 $dbmodule_friendly      = "";
10938                 $dbmodule_count++;
10940         }
10942         # Get the directory settings.
10944         my $directory_settings_database         = $kiriwrite_config{"directory_data_db"};
10945         my $directory_settings_output           = $kiriwrite_config{"directory_data_output"};
10946         my $directory_settings_imagesuri        = $kiriwrite_config{"directory_noncgi_images"};
10947         my $datetime_setting                    = $kiriwrite_config{"system_datetime"};
10949         my $database_server                     = $kiriwrite_config{"database_server"};
10950         my $database_port                       = $kiriwrite_config{"database_port"};
10951         my $database_protocol                   = $kiriwrite_config{"database_protocol"};
10952         my $database_sqldatabase                = $kiriwrite_config{"database_sqldatabase"};
10953         my $database_username                   = $kiriwrite_config{"database_username"};
10954         my $database_passwordhash               = $kiriwrite_config{"database_passwordhash"};
10955         my $database_password                   = $kiriwrite_config{"database_password"};
10956         my $database_prefix                     = $kiriwrite_config{"database_tableprefix"};
10958         # Print out a form for editing the settings.
10960         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{editsettings}, { Style => "pageheader" });
10961         $kiriwrite_presmodule->addlinebreak();
10962         $kiriwrite_presmodule->addlinebreak();
10963         $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{setting}->{warning});
10964         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{warningmessage});
10965         $kiriwrite_presmodule->addlinebreak();
10966         $kiriwrite_presmodule->addlinebreak();
10968         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
10969         $kiriwrite_presmodule->startbox();
10970         $kiriwrite_presmodule->addhiddendata("mode", "settings");
10971         $kiriwrite_presmodule->addhiddendata("action", "edit");
10972         $kiriwrite_presmodule->addhiddendata("confirm", 1);
10974         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10976         $kiriwrite_presmodule->startheader();
10977         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10978         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10979         $kiriwrite_presmodule->endheader();
10981         $kiriwrite_presmodule->startrow();
10982         $kiriwrite_presmodule->addcell("tablecellheader");
10983         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10984         $kiriwrite_presmodule->endcell();
10985         $kiriwrite_presmodule->addcell("tablecellheader");
10986         $kiriwrite_presmodule->endcell();
10987         $kiriwrite_presmodule->endrow();
10989         $kiriwrite_presmodule->startrow();
10990         $kiriwrite_presmodule->addcell("tablecell1");
10991         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10992         $kiriwrite_presmodule->endcell();
10993         $kiriwrite_presmodule->addcell("tablecell2");
10994         $kiriwrite_presmodule->addinputbox("databasedir", { Size => 32, MaxLength => 64, Value => $directory_settings_database });
10995         $kiriwrite_presmodule->endcell();
10996         $kiriwrite_presmodule->endrow();
10998         $kiriwrite_presmodule->startrow();
10999         $kiriwrite_presmodule->addcell("tablecell1");
11000         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
11001         $kiriwrite_presmodule->endcell();
11002         $kiriwrite_presmodule->addcell("tablecell2");
11003         $kiriwrite_presmodule->addinputbox("outputdir", { Size => 32, MaxLength => 64, Value => $directory_settings_output });
11004         $kiriwrite_presmodule->endcell();
11005         $kiriwrite_presmodule->endrow();
11007         $kiriwrite_presmodule->startrow();
11008         $kiriwrite_presmodule->addcell("tablecell1");
11009         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
11010         $kiriwrite_presmodule->endcell();
11011         $kiriwrite_presmodule->addcell("tablecell2");
11012         $kiriwrite_presmodule->addinputbox("imagesuripath", { Size => 32, MaxLength => 64, Value => $directory_settings_imagesuri });
11013         $kiriwrite_presmodule->endcell();
11014         $kiriwrite_presmodule->endrow();
11016         $kiriwrite_presmodule->startrow();
11017         $kiriwrite_presmodule->addcell("tablecellheader");
11018         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
11019         $kiriwrite_presmodule->endcell();
11020         $kiriwrite_presmodule->addcell("tablecellheader");
11021         $kiriwrite_presmodule->endcell();
11022         $kiriwrite_presmodule->endrow();
11024         $kiriwrite_presmodule->startrow();
11025         $kiriwrite_presmodule->addcell("tablecell1");
11026         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
11027         $kiriwrite_presmodule->endcell();
11028         $kiriwrite_presmodule->addcell("tablecell2");
11029         $kiriwrite_presmodule->addinputbox("datetime", { Size => 32, MaxLength => 64, Value => $datetime_setting });
11030         $kiriwrite_presmodule->addlinebreak();
11031         $kiriwrite_presmodule->addlinebreak();
11032         $kiriwrite_presmodule->startbox("datalist");
11034         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleday});
11035         $kiriwrite_presmodule->addlinebreak();
11036         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleday});
11037         $kiriwrite_presmodule->addlinebreak();
11038         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlemonth});
11039         $kiriwrite_presmodule->addlinebreak();
11040         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublemonth});
11041         $kiriwrite_presmodule->addlinebreak();
11042         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleyear});
11043         $kiriwrite_presmodule->addlinebreak();
11044         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleyear});
11045         $kiriwrite_presmodule->addlinebreak();
11046         $kiriwrite_presmodule->addlinebreak();
11047         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlehour});
11048         $kiriwrite_presmodule->addlinebreak();
11049         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublehour});
11050         $kiriwrite_presmodule->addlinebreak();
11051         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleminute});
11052         $kiriwrite_presmodule->addlinebreak();
11053         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleminute});
11054         $kiriwrite_presmodule->addlinebreak();
11055         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlesecond});
11056         $kiriwrite_presmodule->addlinebreak();
11057         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublesecond});
11058         $kiriwrite_presmodule->addlinebreak();
11059         $kiriwrite_presmodule->addlinebreak();
11060         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{othercharacters});
11061         $kiriwrite_presmodule->endbox();
11062         $kiriwrite_presmodule->endcell();
11063         $kiriwrite_presmodule->endrow();
11065         $kiriwrite_presmodule->startrow();
11066         $kiriwrite_presmodule->addcell("tablecellheader");
11067         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
11068         $kiriwrite_presmodule->endcell();
11069         $kiriwrite_presmodule->addcell("tablecellheader");
11070         $kiriwrite_presmodule->endcell();
11071         $kiriwrite_presmodule->endrow();
11073         $kiriwrite_presmodule->startrow();
11074         $kiriwrite_presmodule->addcell("tablecell1");
11075         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
11076         $kiriwrite_presmodule->endcell();
11077         $kiriwrite_presmodule->addcell("tablecell2");
11079         $kiriwrite_presmodule->addselectbox("language");
11081         # Process the list of available languages.
11083         foreach $language (keys %language_list){
11085                 # Check if the language filename matches the filename in the configuration
11086                 # file.
11088                 if ($language_list{$language}{Filename} eq $language_config){
11090                         $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} , Selected => 1 });
11092                 } else {
11094                         $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} });
11096                 }
11098         }
11100         $kiriwrite_presmodule->endselectbox();
11102         $kiriwrite_presmodule->startrow();
11103         $kiriwrite_presmodule->addcell("tablecellheader");
11104         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
11105         $kiriwrite_presmodule->endcell();
11106         $kiriwrite_presmodule->addcell("tablecellheader");
11107         $kiriwrite_presmodule->endcell();
11108         $kiriwrite_presmodule->endrow();
11110         $kiriwrite_presmodule->startrow();
11111         $kiriwrite_presmodule->addcell("tablecell1");
11112         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
11113         $kiriwrite_presmodule->endcell();
11114         $kiriwrite_presmodule->addcell("tablecell2");
11116         $kiriwrite_presmodule->addselectbox("presmodule");
11118         # Process the list of available presentation modules.
11120         foreach $presmodule (keys %presmodule_list){
11122                 # Check if the presentation module fileanme matches the filename in the 
11123                 # configuration file.
11125                 if ($presmodule_list{$presmodule}{Filename} eq $presmodule_config){
11127                         $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} , Selected => 1 });
11129                 } else {
11131                         $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} });
11133                 }
11135         }
11137         $kiriwrite_presmodule->endselectbox();
11139         $kiriwrite_presmodule->endcell();
11140         $kiriwrite_presmodule->endrow();
11142         $kiriwrite_presmodule->startrow();
11143         $kiriwrite_presmodule->addcell("tablecell1");
11144         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
11145         $kiriwrite_presmodule->endcell();
11146         $kiriwrite_presmodule->addcell("tablecell2");
11148         # Process the list of available database modules.
11150         $kiriwrite_presmodule->addselectbox("dbmodule");
11152         foreach $dbmodule (keys %dbmodule_list){
11154                 # Check if the database module fileanme matches the filename in the 
11155                 # configuration file.
11157                 if ($dbmodule_list{$dbmodule}{Filename} eq $dbmodule_config){
11159                         $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} , Selected => 1 });
11161                 } else {
11163                         $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} });
11165                 }
11168         }
11170         $kiriwrite_presmodule->endselectbox();
11172         $kiriwrite_presmodule->endcell();
11173         $kiriwrite_presmodule->endrow();
11175         $kiriwrite_presmodule->startrow();
11176         $kiriwrite_presmodule->addcell("tablecell1");
11177         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseserver});
11178         $kiriwrite_presmodule->endcell();
11179         $kiriwrite_presmodule->addcell("tablecell2");
11180         $kiriwrite_presmodule->addinputbox("database_server", { Size => 32, MaxLength => 128, Value => $database_server });
11181         $kiriwrite_presmodule->endcell();
11182         $kiriwrite_presmodule->endrow();
11184         $kiriwrite_presmodule->startrow();
11185         $kiriwrite_presmodule->addcell("tablecell1");
11186         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseport});
11187         $kiriwrite_presmodule->endcell();
11188         $kiriwrite_presmodule->addcell("tablecell2");
11189         $kiriwrite_presmodule->addinputbox("database_port", { Size => 5, MaxLength => 5, Value => $database_port });
11190         $kiriwrite_presmodule->endcell();
11191         $kiriwrite_presmodule->endrow();
11193         $kiriwrite_presmodule->startrow();
11194         $kiriwrite_presmodule->addcell("tablecell1");
11195         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseprotocol});
11196         $kiriwrite_presmodule->endcell();
11197         $kiriwrite_presmodule->addcell("tablecell2");
11199         # Check if TCP is being used.
11201         $kiriwrite_presmodule->addselectbox("database_protocol");
11203         if ($database_protocol eq "tcp"){
11205                 # The TCP protocol is selected so have the TCP option selected.
11207                 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp", Selected => 1});
11209         } else {
11211                 # The TCP protocol is not selected.
11213                 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp"});
11215         } 
11217         # Check if UDP is being used.
11219         if ($database_protocol eq "udp"){
11221                 # The UDP protocol is selected so have the UDP option selected.
11223                 $kiriwrite_presmodule->addoption("UDP", { Value => "udp", Selected => 1});
11225         } else {
11227                 # The UDP protocol is not selected.
11229                 $kiriwrite_presmodule->addoption("UDP", { Value => "udp"});
11231         }
11233         $kiriwrite_presmodule->endselectbox();
11235         $kiriwrite_presmodule->endcell();
11236         $kiriwrite_presmodule->endrow();
11238         $kiriwrite_presmodule->startrow();
11239         $kiriwrite_presmodule->addcell("tablecell1");
11240         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasename});
11241         $kiriwrite_presmodule->endcell();
11242         $kiriwrite_presmodule->addcell("tablecell2");
11243         $kiriwrite_presmodule->addinputbox("database_sqldatabase", { Size => 32, MaxLength => 32, Value => $database_sqldatabase });
11244         $kiriwrite_presmodule->endcell();
11245         $kiriwrite_presmodule->endrow();
11247         $kiriwrite_presmodule->startrow();
11248         $kiriwrite_presmodule->addcell("tablecell1");
11249         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseusername});
11250         $kiriwrite_presmodule->endcell();
11251         $kiriwrite_presmodule->addcell("tablecell2");
11252         $kiriwrite_presmodule->addinputbox("database_username", { Size => 16, MaxLength => 16, Value => $database_username });
11253         $kiriwrite_presmodule->endcell();
11254         $kiriwrite_presmodule->endrow();
11256         $kiriwrite_presmodule->startrow();
11257         $kiriwrite_presmodule->addcell("tablecell1");
11258         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasepassword});
11259         $kiriwrite_presmodule->endcell();
11260         $kiriwrite_presmodule->addcell("tablecell2");
11261         $kiriwrite_presmodule->addinputbox("database_password", { Size => 16, MaxLength => 64, Password => 1 });
11262         $kiriwrite_presmodule->addtext(" ");
11263         $kiriwrite_presmodule->addcheckbox("database_password_keep", { OptionDescription => "Keep the current password", Checked => 1 });
11264         $kiriwrite_presmodule->endcell();
11265         $kiriwrite_presmodule->endrow();
11267         $kiriwrite_presmodule->startrow();
11268         $kiriwrite_presmodule->addcell("tablecell1");
11269         $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{tableprefix});
11270         $kiriwrite_presmodule->endcell();
11271         $kiriwrite_presmodule->addcell("tablecell2");
11272         $kiriwrite_presmodule->addinputbox("database_tableprefix", { Size => 16, MaxLength => 16, Value => $database_prefix });
11273         $kiriwrite_presmodule->endcell();
11274         $kiriwrite_presmodule->endrow();
11276         $kiriwrite_presmodule->endtable();
11278         $kiriwrite_presmodule->addlinebreak();
11279         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{setting}->{changesettingsbutton});
11280         $kiriwrite_presmodule->addtext(" | ");
11281         $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
11282         $kiriwrite_presmodule->addtext(" | ");
11283         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
11284         $kiriwrite_presmodule->endbox();
11285         $kiriwrite_presmodule->endform();
11287         return $kiriwrite_presmodule->grab();
11291 sub kiriwrite_settings_load{
11292 #################################################################################
11293 # kiriwrite_settings_load: Load the configuration settings into the global      #
11294 # variables.                                                                    #
11295 #                                                                               #
11296 # Usage:                                                                        #
11297 #                                                                               #
11298 # kiriwrite_settings_load();                                                    #
11299 #################################################################################
11301         # Load the required Perl modules.
11303         use XML::Simple qw(XMLin);
11304         $xsl = XML::Simple->new();
11306         # Check if the Kiriwrite configuration file exists before using it and
11307         # return an critical error if it doesn't exist.
11309         my $kiriwrite_conf_exist = kiriwrite_fileexists("kiriwrite.xml");
11311         if ($kiriwrite_conf_exist eq 1){
11313                 # The configuration really does not exist so return an critical error.
11315                 kiriwrite_critical("configfilemissing");
11317         }
11319         # Check if the Kiriwrite configuration file has valid permission settings
11320         # before using it and return an critical error if it doesn't have the
11321         # valid permission settings.
11323         my $kiriwrite_conf_permissions = kiriwrite_filepermissions("kiriwrite.xml", 1, 0);
11325         if ($kiriwrite_conf_permissions eq 1){
11327                 # The permission settings for the Kiriwrite configuration file are
11328                 # invalid, so return an critical error.
11330                 kiriwrite_critical("configfileinvalidpermissions");
11332         }
11334         # Converts the XML file into meaningful data for later on in this subroutine.
11336         my $kiriwrite_conf_file = 'kiriwrite.xml';
11337         my $kiriwrite_conf_data = $xsl->XMLin($kiriwrite_conf_file, SuppressEmpty => 1);
11339         # Go and fetch the settings and place them into a hash (that is global).
11341         %kiriwrite_config = (
11343                 "directory_data_db"             => $kiriwrite_conf_data->{settings}->{directories}->{database},
11344                 "directory_data_output"         => $kiriwrite_conf_data->{settings}->{directories}->{output},
11345                 "directory_noncgi_images"       => $kiriwrite_conf_data->{settings}->{directories}->{images},
11347                 "system_language"               => $kiriwrite_conf_data->{settings}->{language}->{lang},
11348                 "system_presmodule"             => $kiriwrite_conf_data->{settings}->{system}->{presentation},
11349                 "system_dbmodule"               => $kiriwrite_conf_data->{settings}->{system}->{database},
11350                 "system_datetime"               => $kiriwrite_conf_data->{settings}->{system}->{datetime},
11352                 "database_server"               => $kiriwrite_conf_data->{settings}->{database}->{server},
11353                 "database_port"                 => $kiriwrite_conf_data->{settings}->{database}->{port},
11354                 "database_protocol"             => $kiriwrite_conf_data->{settings}->{database}->{protocol},
11355                 "database_sqldatabase"          => $kiriwrite_conf_data->{settings}->{database}->{database},
11356                 "database_username"             => $kiriwrite_conf_data->{settings}->{database}->{username},
11357                 "database_password"             => $kiriwrite_conf_data->{settings}->{database}->{password},
11358                 "database_tableprefix"          => $kiriwrite_conf_data->{settings}->{database}->{prefix}
11360         );
11362         # Do a validation check on all of the variables that were loaded into the global configuration hash.
11364         kiriwrite_variablecheck($kiriwrite_config{"directory_data_db"}, "maxlength", 64, 0);
11365         kiriwrite_variablecheck($kiriwrite_config{"directory_data_output"}, "maxlength", 64, 0);
11366         kiriwrite_variablecheck($kiriwrite_config{"directory_noncgi_images"}, "maxlength", 512, 0);
11367         kiriwrite_variablecheck($kiriwrite_config{"directory_data_template"}, "maxlength", 64, 0);
11369         my $kiriwrite_config_language_filename = kiriwrite_variablecheck($kiriwrite_config{"system_language"}, "language_filename", "", 1);
11370         my $kiriwrite_config_presmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_presmodule"}, "module", 0, 1);
11371         my $kiriwrite_config_dbmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_dbmodule"}, "module", 0, 1);
11373         # Check if the language filename is valid and return an critical error if
11374         # they aren't.
11376         if ($kiriwrite_config_language_filename eq 1){
11378                 # The language filename is blank so return an critical error.
11380                 kiriwrite_critical("languagefilenameblank");
11382         } elsif ($kiriwrite_config_language_filename eq 2){
11384                 # The language filename is invalid so return an critical error.
11386                 kiriwrite_critical("languagefilenameinvalid");
11388         }
11390         # Check if the presentation and database module names are valid and return a critical
11391         # error if they aren't.
11393         if ($kiriwrite_config_presmodule_filename eq 1){
11395                 # The presentation module filename given is blank so return an 
11396                 # critical error.
11398                 kiriwrite_critical("presmoduleblank");
11400         }
11402         if ($kiriwrite_config_presmodule_filename eq 2){
11404                 # The presentation module filename is invalid so return an
11405                 # critical error.
11407                 kiriwrite_critical("presmoduleinvalid");
11409         }
11411         if ($kiriwrite_config_dbmodule_filename eq 1){
11413                 # The database module filename given is blank so return an
11414                 # critical error.
11416                 kiriwrite_critical("dbmoduleblank");
11418         }
11420         if ($kiriwrite_config_dbmodule_filename eq 2){
11422                 # The database module filename given is invalid so return
11423                 # an critical error.
11425                 kiriwrite_critical("dbmoduleinvalid");
11427         }
11429         # Check if the language file does exist before loading it and return an critical error
11430         # if it does not exist.
11432         my $kiriwrite_config_language_fileexists = kiriwrite_fileexists("lang/" . $kiriwrite_config{"system_language"} . ".xml");
11434         if ($kiriwrite_config_language_fileexists eq 1){
11436                 # Language file does not exist so return an critical error.
11438                 kiriwrite_critical("languagefilemissing");
11440         }
11442         # Check if the language file has valid permission settings and return an critical error if
11443         # the language file has invalid permissions settings.
11445         my $kiriwrite_config_language_filepermissions = kiriwrite_filepermissions("lang/" . $kiriwrite_config{"system_language"} . ".xml", 1, 0);
11447         if ($kiriwrite_config_language_filepermissions eq 1){
11449                 # Language file contains invalid permissions so return an critical error.
11451                 kiriwrite_critical("languagefilepermissions");
11453         }
11455         # Load the language file.
11457         $kiriwrite_lang = $xsl->XMLin("lang/" . $kiriwrite_config{"system_language"} . ".xml", SuppressEmpty => 1);
11459         # Check if the presentation module does exist before loading it and return an critical error
11460         # if the presentation module does not exist.
11462         my $kiriwrite_config_presmodule_fileexists = kiriwrite_fileexists("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm");
11464         if ($kiriwrite_config_presmodule_fileexists eq 1){
11466                 # Presentation module does not exist so return an critical error.
11468                 kiriwrite_critical("presmodulemissing");
11470         }
11472         # Check if the presentation module does have the valid permission settings and return a
11473         # critical error if the presentation module contains invalid permission settings.
11475         my $kiriwrite_config_presmodule_permissions = kiriwrite_filepermissions("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm", 1, 0);
11477         if ($kiriwrite_config_presmodule_permissions eq 1){
11479                 # Presentation module contains invalid permissions so return an critical error.
11481                 kiriwrite_critical("presmoduleinvalidpermissions");
11483         }
11485         # Check if the database module does exist before loading it and return an critical error
11486         # if the database module does not exist.
11488         my $kiriwrite_config_dbmodule_fileexists = kiriwrite_fileexists("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm");
11490         if ($kiriwrite_config_dbmodule_fileexists eq 1){
11492                 # Database module does not exist so return an critical error.
11494                 kiriwrite_critical("dbmodulemissing");
11496         }
11498         # Check if the database module does have the valid permission settings and return an
11499         # critical error if the database module contains invalid permission settings.
11501         my $kiriwrite_config_dbmodule_permissions = kiriwrite_filepermissions("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm", 1, 0);
11503         if ($kiriwrite_config_dbmodule_permissions eq 1){
11505                 # Presentation module contains invalid permissions so return an critical error.
11507                 kiriwrite_critical("dbmoduleinvalidpermissions");
11509         }
11511         # Include the Modules directory.
11513         use lib "Modules/";
11515         # Load the presentation module.
11517         my $presmodulename = "Presentation::" . $kiriwrite_config{"system_presmodule"};
11518         ($presmodulename) = $presmodulename =~ m/^(.*)$/g;
11519         eval "use " . $presmodulename;
11520         $presmodulename = "Kiriwrite::Presentation::" . $kiriwrite_config{"system_presmodule"};
11521         $kiriwrite_presmodule = $presmodulename->new();
11523         # Load the database module.
11525         my $dbmodulename = "Database::" . $kiriwrite_config{"system_dbmodule"};
11526         ($dbmodulename) = $dbmodulename =~ m/^(.*)$/g;
11527         eval "use " . $dbmodulename;
11528         $dbmodulename = "Kiriwrite::Database::" . $kiriwrite_config{"system_dbmodule"};
11529         $kiriwrite_dbmodule = $dbmodulename->new();
11531         # Load the following settings to the database module.
11533         $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"} });
11535         return;
11539 sub kiriwrite_variablecheck{
11540 #################################################################################
11541 # kiriwrite_variablecheck: Checks the variables for any invalid characters.     #
11542 #                                                                               #
11543 # Usage:                                                                        #
11544 #                                                                               #
11545 # kiriwrite_variablecheck(variable, type, length, noerror);                     #
11546 #                                                                               #
11547 # variable      Specifies the variable to be checked.                           #
11548 # type          Specifies what type the variable is.                            #
11549 # option        Specifies the maximum/minimum length of the variable            #
11550 #               (if minlength/maxlength is used) or if the filename should be   #
11551 #               checked to see if it is blank.                                  #
11552 # noerror       Specifies if Kiriwrite should return an error or not on         #
11553 #               certain values.                                                 #
11554 #################################################################################
11556         # Get the values that were passed to the subroutine.
11558         my ($variable_data, $variable_type, $variable_option, $variable_noerror) = @_;
11560         if ($variable_type eq "numbers"){
11562                 # Check for numbers and return an error if there is anything else than numebrs.
11564                 my $variable_data_validated = $variable_data;   # Copy the variable_data to variable_data_validated.
11565                 $variable_data_validated =~ tr/0-9//d;          # Take away all of the numbers and from the variable. 
11566                                                                 # If it only contains numbers then it should be blank.
11568                 if ($variable_data_validated eq ""){
11569                         # The validated variable is blank. So continue to the end of this section where the return function should be.
11570                 } else {
11571                         # The variable is not blank, so check if the no error value is set
11572                         # to 1 or not.
11574                         if ($variable_noerror eq 1){
11576                                 # The validated variable is not blank and the noerror
11577                                 # value is set to 1. So return an value of 1.
11578                                 # (meaning that the data is invalid).
11580                                 return 1;
11582                         } elsif ($variable_noerror eq 0) {
11584                                 # The validated variable is not blank and the noerror
11585                                 # value is set to 0.
11587                                 kiriwrite_error("invalidvariable");
11589                         } else {
11591                                 # The variable noerror value is something else
11592                                 # pther than 1 or 0. So return an error.
11594                                 kiriwrite_error("invalidvariable");
11596                         }
11598                 }
11600                 return 0;
11602         } elsif ($variable_type eq "lettersnumbers"){
11604                 # Check for letters and numbers and return an error if there is anything else other
11605                 # than letters and numbers.
11607                 my $variable_data_validated = $variable_data;   # Copy the variable_data to variable_data_validated
11608                 $variable_data_validated =~ tr/a-zA-Z0-9.//d;
11609                 $variable_data_validated =~ s/\s//g;
11611                 if ($variable_data_validated eq ""){
11612                         # The validated variable is blank. So continue to the end of this section where the return function should be.
11613                 } else {
11614                         # The variable is not blank, so check if the no error value is set
11615                         # to 1 or not.
11617                         if ($variable_noerror eq 1){
11619                                 # The validated variable is not blank and the noerror
11620                                 # value is set to 1. So return an value of 1.
11621                                 # (meaning that the data is invalid).
11623                                 return 1;
11625                         } elsif ($variable_noerror eq 0) {
11627                                 # The validated variable is not blank and the noerror
11628                                 # value is set to 0.
11630                                 kiriwrite_error("invalidvariable");
11632                         } else {
11634                                 # The variable noerror value is something else
11635                                 # pther than 1 or 0. So return an error.
11637                                 kiriwrite_error("invalidvariable");
11639                         }
11641                 }
11643                 return 0;
11645         } elsif ($variable_type eq "maxlength"){
11646                 # Check for the length of the variable, return an error if it is longer than the length specified.
11648                 # Check if the variable_data string is blank, if it is then set the variable_data_length
11649                 # to '0'.
11651                 my $variable_data_length = 0;
11653                 if (!$variable_data){
11655                         # Set variable_data_length to '0'.
11656                         $variable_data_length = 0;
11658                 } else {
11660                         # Get the length of the variable recieved.
11661                         $variable_data_length = length($variable_data);
11663                 }
11667                 if ($variable_data_length > $variable_option){
11669                         # The variable length is longer than it should be so check if
11670                         # the no error value is set 1.
11672                         if ($variable_noerror eq 1){
11674                                 # The no error value is set to 1, so return an
11675                                 # value of 1 (meaning tha the variable is
11676                                 # too long to be used).
11678                                 return 1;
11680                         } elsif ($variable_noerror eq 0){
11682                                 # The no error value is set to 0, so return
11683                                 # an error.
11685                                 kiriwrite_error("variabletoolong");
11687                         } else {
11689                                 # The no error value is something else other
11690                                 # than 0 or 1, so return an error.
11692                                 kiriwrite_error("variabletoolong");
11694                         }
11696                 } else {
11698                         # The variable length is exactly or shorter than specified, so continue to end of this section where
11699                         # the return function should be.
11701                 }
11703                 return 0;
11705         } elsif ($variable_type eq "blank"){
11706                 # Check if the variable is blank and if it is blank, then return an error.
11708                 if (!$variable_data){
11710                         # The variable data really is blank, so check what
11711                         # the no error value is set.
11713                         if ($variable_noerror eq 1){
11715                                 # The no error value is set to 1, so return
11716                                 # a value of 1 (saying that the variable was
11717                                 # blank).
11719                                 return 1;
11721                         } elsif ($variable_noerror eq 0){
11723                                 # The no error value is set to 0, so return
11724                                 # an error.
11726                                 kiriwrite_error("blankvariable");
11728                         } else {
11730                                 # The no error value is something else other
11731                                 # than 0 or 1, so return an error.
11733                                 kiriwrite_error("invalidvariable");
11735                         }
11737                 }
11739                 return 0;
11741         } elsif ($variable_type eq "filename"){
11742                 # Check for letters and numbers, if anything else than letters and numbers is there (including spaces) return
11743                 # an error.
11745                 # Check if the filename passed is blank, if it is then return with an error.
11747                 if ($variable_data eq ""){
11749                         # The filename specified is blank, so check what the
11750                         # noerror value is set.
11752                         if ($variable_noerror eq 1){
11754                                 # The no error value is set to 1 so return
11755                                 # a value of 1 (meaning that the filename
11756                                 # was blank).
11758                                 return 1;
11760                         } elsif ($variable_noerror eq 0){
11762                                 # The no error value is set to 1 so return
11763                                 # an error.
11765                                 kiriwrite_error("blankfilename");
11767                         } else {
11769                                 # The no error value is something else other
11770                                 # than 0 or 1, so return an error.
11772                                 kiriwrite_error("invalidvariable");
11774                         }
11776                 } else {
11779                 }
11781                 my $variable_data_validated = $variable_data;
11782                 $variable_data_validated =~ tr/a-zA-Z0-9\.//d;
11784                 # Check if the validated data variable is blank, if it is 
11785                 # then continue to the end of this section where the return 
11786                 # function should be, otherwise return an error.
11788                 if ($variable_data_validated eq ""){
11790                         # The validated data variable is blank, meaning that 
11791                         # it only contained letters and numbers.
11793                 } else {
11795                         # The validated data variable is not blank, meaning 
11796                         # that it contains something else, so return an error
11797                         # (or a value).
11799                         if ($variable_noerror eq 1){
11801                                 # The no error value is set to 1 so return
11802                                 # an value of 2. (meaning that the filename
11803                                 # is invalid).
11806                                 return 2;
11808                         } elsif ($variable_noerror eq 0){
11810                                 # The no error value is set to 0 so return
11811                                 # an error.
11813                                 kiriwrite_error("invalidfilename");
11815                         } else {
11817                                 # The no error value is something else other
11818                                 # than 0 or 1 so return an error.
11820                                 kiriwrite_error("invalidvariable");
11822                         }
11824                 }
11826                 return 0;
11828         } elsif ($variable_type eq "filenameindir"){
11829                 # Check if the filename is in the directory and return an
11830                 # error if it isn't.
11832                 if ($variable_data eq ""){
11834                         # The filename specified is blank, so check what the
11835                         # noerror value is set.
11837                         if ($variable_noerror eq 1){
11839                                 # The no error value is set to 1 so return
11840                                 # a value of 1 (meaning that the filename
11841                                 # was blank).
11843                                 return 1;
11845                         } elsif ($variable_noerror eq 0){
11847                                 # The no error value is set to 1 so return
11848                                 # an error.
11850                                 kiriwrite_error("blankfilename");
11852                         } else {
11854                                 # The no error value is something else other
11855                                 # than 0 or 1, so return an error.
11857                                 kiriwrite_error("invalidvariable");
11859                         }
11861                 } else {
11864                 }
11866                 # Set the following variables for later on.
11868                 my $variable_data_length = 0;
11869                 my $variable_data_char = "";
11870                 my $variable_data_validated = "";
11871                 my $variable_data_seek = 0;
11872                 my $variable_database_list = "";
11873                 my $variable_database_listcurrent = "";
11874                 my $variable_data_firstlevel = 1;
11876                 # Get the length of the variable recieved.
11878                 $variable_data_length = length($variable_data);
11880                 # Check if the database filename contains the directory command
11881                 # for up a directory level and if it is, return an error
11882                 # or return with a number.
11884                 do {
11886                         # Get a character from the filename passed to this subroutine.
11888                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
11890                         # Check if the current character is the forward slash character.
11892                         if ($variable_data_char eq "/"){
11894                                 # Check if the current directory is blank (and on the first level), or if the
11895                                 # current directory contains two dots or one dot, if it does return an error.
11897                                 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
11899                                         # Check if the noerror value is set to 1, if it is return an
11900                                         # number, else return an proper error.
11902                                         if ($variable_noerror eq 1){
11904                                                 # Page filename contains invalid characters and
11905                                                 # the no error value is set to 1 so return a 
11906                                                 # value of 2 (meaning that the page filename
11907                                                 # is invalid).
11909                                                 return 2;
11911                                         } elsif ($variable_noerror eq 0) {
11913                                                 # Page filename contains invalid characters and
11914                                                 # the no error value is set to 0 so return an
11915                                                 # error.
11917                                                 kiriwrite_error("invalidfilename");
11919                                         } else {
11921                                                 # The no error value is something else other
11922                                                 # than 0 or 1 so return an error.
11924                                                 kiriwrite_error("invalidvariable");
11926                                         }
11928                                 }
11930                                 # Append the forward slash, clear the current directory name and set
11931                                 # the first directory level value to 0.
11933                                 $variable_database_list = $variable_database_list . $variable_data_char;
11934                                 $variable_database_listcurrent = "";
11935                                 $variable_data_firstlevel = 0;
11937                         } else {
11939                                 # Append the current character to the directory name and to the current
11940                                 # directory name.
11942                                 $variable_database_list = $variable_database_list . $variable_data_char;
11943                                 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
11945                         }
11947                         # Increment the seek counter.
11949                         $variable_data_seek++;
11951                 } until ($variable_data_seek eq $variable_data_length);
11953                 return 0;
11955         } elsif ($variable_type eq "datetime"){
11956                 # Check if the date and time setting format is valid.
11958                 if ($variable_data eq ""){
11960                         if ($variable_noerror eq 1){
11962                                 # The no error value is set to 1 so return
11963                                 # a value of 1 (meaning that the date and
11964                                 # time format was blank).
11966                                 return 1;
11968                         } elsif ($variable_noerror eq 0){
11970                                 # The no error value is set to 1 so return
11971                                 # an error.
11973                                 kiriwrite_error("blankdatetimeformat");
11975                         } else {
11977                                 # The no error value is something else other
11978                                 # than 0 or 1, so return an error.
11980                                 kiriwrite_error("invalidvariable");
11982                         }
11984                 }
11986                 my $variable_data_validated = $variable_data;
11987                 $variable_data_validated =~ tr|dDmMyYhms/():[ ]||d;
11989                 if ($variable_data_validated eq ""){
11991                         # The date and time format is valid. So
11992                         # skip this bit.
11994                 } else {
11996                         # The validated data variable is not blank, meaning 
11997                         # that it contains something else, so return an error
11998                         # (or a value).
12000                         if ($variable_noerror eq 1){
12002                                 # The no error value is set to 1 so return
12003                                 # an value of 2. (meaning that the date and
12004                                 # time format was invalid).
12006                                 return 2;
12008                         } elsif ($variable_noerror eq 0){
12010                                 # The no error value is set to 0 so return
12011                                 # an error.
12013                                 kiriwrite_error("invaliddatetimeformat");
12015                         } else {
12017                                 # The no error value is something else other
12018                                 # than 0 or 1 so return an error.
12020                                 kiriwrite_error("invalidvariable");
12022                         }
12024                 }
12026                 return 0;
12028         } elsif ($variable_type eq "directory"){
12029                 # Check if the directory only contains letters and numbers and
12030                 # return an error if anything else appears.
12032                 my $variable_data_validated = $variable_data;
12033                 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12035                 if ($variable_data eq ""){
12037                         if ($variable_noerror eq 1){
12039                                 # The no error value is set to 1 so return
12040                                 # a value of 1 (meaning that the directory
12041                                 # name was blank).
12043                                 return 1;
12045                         } elsif ($variable_noerror eq 0){
12047                                 # The no error value is set to 1 so return
12048                                 # an error.
12050                                 kiriwrite_error("blankdirectory");
12052                         } else {
12054                                 # The no error value is something else other
12055                                 # than 0 or 1, so return an error.
12057                                 kiriwrite_error("invalidvariable");
12059                         }
12061                 }
12063                 if ($variable_data_validated eq ""){
12065                         # The validated data variable is blank, meaning that
12066                         # it only contains letters and numbers.
12068                 } else {
12070                         # The validated data variable is not blank, meaning 
12071                         # that it contains something else, so return an error
12072                         # (or a value).
12074                         if ($variable_noerror eq 1){
12076                                 # The no error value is set to 1 so return
12077                                 # an value of 2. (meaning that the directory
12078                                 # name is invalid).
12080                                 return 2;
12082                         } elsif ($variable_noerror eq 0){
12084                                 # The no error value is set to 0 so return
12085                                 # an error.
12087                                 kiriwrite_error("invaliddirectory");
12089                         } else {
12091                                 # The no error value is something else other
12092                                 # than 0 or 1 so return an error.
12094                                 kiriwrite_error("invalidvariable");
12096                         }
12098                 }
12100                 return 0;
12102         } elsif ($variable_type eq "language_filename"){
12104                 # The variable type is a language filename type.
12105                 # Check if the language file name is blank and 
12106                 # if it is then return an error (or value).
12108                 if ($variable_data eq ""){
12110                         # The language filename is blank so check the
12111                         # no error value and return an error (or value).
12113                         if ($variable_noerror eq 1){
12115                                 # Language filename is blank and the no error value
12116                                 # is set as 1, so return a value of 1 (saying that
12117                                 # the language filename is blank).
12119                                 return 1;
12121                         } elsif ($variable_noerror eq 0) {
12123                                 # Language filename is blank and the no error value
12124                                 # is not set as 1, so return an error.
12126                                 kiriwrite_critical("languagefilenameblank");
12128                         } else {
12130                                 # The noerror value is something else other
12131                                 # than 0 or 1 so return an error.
12133                                 kiriwrite_error("invalidvariable");
12135                         }
12137                 }
12139                 # Set the following variables for later on.
12141                 my $variable_data_length = 0;
12142                 my $variable_data_char = "";
12143                 my $variable_data_seek = 0;
12145                 # Get the length of the language file name.
12147                 $variable_data_length = length($variable_data);
12149                 do {
12151                         # Get a character from the language filename passed to this 
12152                         # subroutine and the character the seek counter value is set
12153                         # to.
12155                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12157                         # Check if the language filename contains a forward slash or a dot, 
12158                         # if the selected character is a forward slash then return an error
12159                         # (or value).
12161                         if ($variable_data_char eq "/" || $variable_data_char eq "."){
12163                                 # The language filename contains a forward slash or
12164                                 # a dot so depending on the no error value, return
12165                                 # an error or a value.
12167                                 if ($variable_noerror eq 1){
12169                                         # Language filename contains a forward slash or a dot
12170                                         # and the no error value has been set to 1, so return 
12171                                         # an value of 2 (saying that the language file name is 
12172                                         # invalid).
12174                                         return 2;
12176                                 } elsif ($variable_noerror eq 0) {
12178                                         # Language filename contains a forward slash and the no
12179                                         # error value has not been set to 1, so return an error.
12181                                         kiriwrite_critical("languagefilenameinvalid");
12183                                 } else {
12185                                         # The noerror value is something else other than
12186                                         # 1 or 0 so return an error.
12188                                         kiriwrite_error("invalidvariable");
12190                                 }
12192                         }
12194                         # Increment the seek counter.
12196                         $variable_data_seek++;
12198                 } until ($variable_data_seek eq $variable_data_length);
12200                 return 0;
12202         } elsif ($variable_type eq "pagesetting"){
12204                 # The variable type is a page setting, so check if the page
12205                 # setting has one of the valid options.
12207                 if ($variable_data eq 0 || $variable_data eq 1 || $variable_data eq 2 || $variable_data eq 3){
12209                         # The variable is one of the options above, so continue
12210                         # to the end of this section.
12212                 } else {
12214                         # The variable is not one of the options above, so check
12215                         # and see if a error or a value should be returned.
12217                         if ($variable_noerror eq 1){
12219                                 # The page setting is invalid and the no error
12220                                 # value is set 1, so return a value of 1
12221                                 # (saying that the page setting value is
12222                                 # invalid).
12224                                 return 1;
12226                         } elsif ($variable_noerror eq 0) {
12228                                 # Page setting is invalid and the no error value
12229                                 # is not 1, so return an error.
12231                                 kiriwrite_error("invalidvariable");
12233                         } else {
12235                                 # The no error value is something else other
12236                                 # than 0 or 1 so return an error.
12238                                 kiriwrite_error("invalidvariable");
12240                         }
12242                 }
12244                 return 0;
12246         } elsif ($variable_type eq "page_filename"){
12247          
12248                 # The variable type is a page filename type. Check
12249                 # if the data is empty and if it is then return an
12250                 # error (or value).
12252                 if ($variable_data eq ""){
12254                         # The filename is blank so check the no error
12255                         # value and depending on it return an value
12256                         # or an error.
12258                         if ($variable_noerror eq 1){
12260                                 # Page filename is blank and the no error value
12261                                 # is set as 1, so return a value of 1 (saying
12262                                 # the filename is blank).
12264                                 return 1;
12266                         } elsif ($variable_noerror eq 0) {
12268                                 # Page filename is blank and the no error value
12269                                 # is not 1, so return an error.
12271                                 kiriwrite_error("emptypagefilename");
12273                         } else {
12275                                 # The no error value is something else other
12276                                 # than 0 or 1 so return an error.
12278                                 kiriwrite_error("invalidvariable");
12280                         }
12281                 }
12283                 # Set the following variables for later on.
12286                 my $variable_data_length = 0;
12287                 my $variable_data_slash = 0;
12288                 my $variable_data_char = "";
12289                 my $variable_data_validated = "";
12290                 my $variable_data_seek = 0;
12291                 my $variable_database_list = "";
12292                 my $variable_database_listcurrent = "";
12293                 my $variable_data_firstlevel = 1;
12295                 # Get the length of the filename.
12297                 $variable_data_length = length($variable_data);
12299                 # Check that only valid characters should be appearing in
12300                 # the filename.
12302                 $variable_data_validated = $variable_data;
12303                 $variable_data_validated =~ tr|a-zA-Z0-9\.\/\-_||d;
12305                 if ($variable_data_validated ne ""){
12307                         # The validated variable is not blank, meaning the
12308                         # variable contains invalid characters, so return
12309                         # an error.
12311                         if ($variable_noerror eq 1){
12313                                 # Page filename contains invalid characters and
12314                                 # the no error value is set to 1 so return a 
12315                                 # value of 2 (meaning that the page filename
12316                                 # is invalid).
12318                                 return 2;
12320                         } elsif ($variable_noerror eq 0) {
12322                                 # Page filename contains invalid characters and
12323                                 # the no error value is set to 0 so return an
12324                                 # error.
12326                                 kiriwrite_error("invalidfilename");
12328                         } else {
12330                                 # The no error value is something else other
12331                                 # than 0 or 1 so return an error.
12333                                 kiriwrite_error("invalidvariable");
12335                         }
12337                 }
12339                 # Check if the page filename contains the directory command
12340                 # for up a directory level and if it is, return an error
12341                 # or return with a number.
12343                 do {
12345                         # Get a character from the filename passed to this subroutine.
12347                         $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12349                         # Check if the current character is the forward slash character.
12351                         if ($variable_data_char eq "/"){
12353                                 # Check if the current directory is blank (and on the first level), or if the
12354                                 # current directory contains two dots or one dot, if it does return an error.
12356                                 $variable_data_slash = 1;
12358                                 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
12360                                         # Check if the noerror value is set to 1, if it is return an
12361                                         # number, else return an proper error.
12363                                         if ($variable_noerror eq 1){
12365                                                 # Page filename contains invalid characters and
12366                                                 # the no error value is set to 1 so return a 
12367                                                 # value of 2 (meaning that the page filename
12368                                                 # is invalid).
12370                                                 return 2;
12372                                         } elsif ($variable_noerror eq 0) {
12374                                                 # Page filename contains invalid characters and
12375                                                 # the no error value is set to 0 so return an
12376                                                 # error.
12378                                                 kiriwrite_error("invalidfilename");
12380                                         } else {
12382                                                 # The no error value is something else other
12383                                                 # than 0 or 1 so return an error.
12385                                                 kiriwrite_error("invalidvariable");
12387                                         }
12389                                 }
12391                                 # Append the forward slash, clear the current directory name and set
12392                                 # the first directory level value to 0.
12394                                 $variable_database_list = $variable_database_list . $variable_data_char;
12395                                 $variable_database_listcurrent = "";
12396                                 $variable_data_firstlevel = 0;
12398                         } else {
12400                                 # Append the current character to the directory name and to the current
12401                                 # directory name.
12403                                 $variable_data_slash = 0;
12405                                 $variable_database_list = $variable_database_list . $variable_data_char;
12406                                 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
12408                         }
12410                         # Increment the seek counter.
12412                         $variable_data_seek++;
12414                 } until ($variable_data_seek eq $variable_data_length);
12416                 # Check if the last character is a slash and return an
12417                 # error if it is.
12419                 if ($variable_data_slash eq 1){
12421                         if ($variable_noerror eq 1){
12423                                 # Last character is a slash and the no error 
12424                                 # value is set to 1 so return a value of 2 
12425                                 # (meaning that the page filename is invalid).
12427                                 return 2;
12429                         } elsif ($variable_noerror eq 0) {
12431                                 # Page filename contains a slash for the last
12432                                 # character and the no error value is set to 0 
12433                                 # so return an error.
12435                                 kiriwrite_error("invalidfilename");
12437                         } else {
12439                                 # The no error value is something else other
12440                                 # than 0 or 1 so return an error.
12442                                 kiriwrite_error("invalidvariable");
12444                         }
12446                 }
12448                 return 0;
12450         } elsif ($variable_type eq "module"){
12452                 # The variable type is a presentation module filename.
12454                 # Check if the variable_data is blank and if it is
12455                 # return an error.
12457                 if ($variable_data eq ""){
12459                         # The presentation module is blank so check if an error
12460                         # value should be returned or a number should be
12461                         # returned.
12463                         if ($variable_noerror eq 1){
12465                                 # Module name is blank and the no error value 
12466                                 # is set to 1 so return a value of 2 (meaning 
12467                                 # that the page filename is blank).
12469                                 return 1;
12471                         } elsif ($variable_noerror eq 0) {
12473                                 # Module name contains is blank and the no error 
12474                                 # value is set to 0 so return an error.
12476                                 kiriwrite_critical("moduleblank");
12478                         } else {
12480                                 # The no error value is something else other
12481                                 # than 0 or 1 so return an error.
12483                                 kiriwrite_critical("invalidvalue");
12485                         }
12487                 } else {
12489                 }
12491                 my $variable_data_validated = $variable_data;
12492                 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12494                 if ($variable_data_validated eq ""){
12496                 } else {
12498                         if ($variable_noerror eq 1){
12500                                 # Module name contains invalid characters and
12501                                 # the no error value is set to 1 so return a 
12502                                 # value of 2 (meaning that the page filename
12503                                 # is invalid).
12505                                 return 2;
12507                         } elsif ($variable_noerror eq 0) {
12509                                 # Module name contains invalid characters and
12510                                 # the no error value is set to 0 so return an
12511                                 # error.
12513                                 kiriwrite_critical("moduleinvalid");
12515                         } else {
12517                                 # The no error value is something else other
12518                                 # than 0 or 1 so return an error.
12520                                 kiriwrite_error("invalidvalue");
12522                         }
12524                 }
12526                 return 0;
12528         } elsif ($variable_type eq "utf8"){
12530                 # The variable type is a UTF8 string.
12532                 if (!$variable_data){
12534                         $variable_data = "";
12536                 }
12538                 # Check if the string is a valid UTF8 string.
12540                 if ($variable_data =~ m/^(
12541                         [\x09\x0A\x0D\x20-\x7E]              # ASCII
12542                         | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
12543                         |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
12544                         | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
12545                         |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
12546                         |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
12547                         | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
12548                         |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
12549                 )*$/x){
12551                         # The UTF-8 string is valid.
12553                 } else {
12555                         # The UTF-8 string is not valid, check if the no error
12556                         # value is set to 1 and return an error if it isn't.
12558                         if ($variable_noerror eq 1){
12560                                 # The no error value has been set to 1, so return
12561                                 # a value of 1 (meaning that the UTF-8 string is
12562                                 # invalid).
12564                                 return 1; 
12566                         } elsif ($variable_noerror eq 0) {
12568                                 # The no error value has been set to 0, so return
12569                                 # an error.
12571                                 kiriwrite_error("invalidutf8");
12573                         } else {
12575                                 # The no error value is something else other than 0
12576                                 # or 1, so return an error.
12578                                 kiriwrite_error("invalidoption");
12580                         }
12582                 }
12584                 return 0;
12586         } elsif ($variable_type eq "serverprotocol"){
12588                 # Check if the server protocol is TCP or UDP and return
12589                 # an error if it isn't.
12591                 if ($variable_data ne "tcp" && $variable_data ne "udp"){
12593                         # The protocol given is not valid, check if the no
12594                         # error value is set to 1 and return an error if it isn't.
12596                         if ($variable_noerror eq 1){
12598                                 # The no error value has been set to 1, so return a
12599                                 # value of 1 (meaning that the server protocol is
12600                                 # invalid).
12602                                 return 1;
12604                         } elsif ($variable_noerror eq 0){
12606                                 # The no error value has been set to 0, so return
12607                                 # an error.
12609                                 kiriwrite_error("serverprotocolinvalid");
12611                         } else {
12613                                 # The no error value is something else other than 0
12614                                 # or 1, so return an error.
12616                                 kiriwrite_error("invalidoption");
12618                         }
12620                 }
12622                 return 0;
12624         } elsif ($variable_type eq "port"){
12626                 # Check if the port number given is less than 0 or more than 65535
12627                 # and return an error if it is.
12629                 if ($variable_data < 0 || $variable_data > 65535){
12631                         # The port number is less than 0 and more than 65535 so
12632                         # check if the no error value is set to 1 and return an
12633                         # error if it isn't.
12635                         if ($variable_noerror eq 1){
12637                                 # The no error value has been set to 1, so return a
12638                                 # value of 1 (meaning that the port number is invalid).
12640                                 return 1;
12642                         } elsif ($variable_noerror eq 0){
12644                                 # The no error value has been set to 0, so return
12645                                 # an error.
12647                                 kiriwrite_error("serverportnumberinvalid");
12649                         } else {
12651                                 # The no error value is something else other than 0
12652                                 # or 1, so return an error.
12654                                 kiriwrite_error("invalidoption");
12656                         }
12658                 }
12660                 return 0;
12662         }
12664         # Another type than the valid ones above has been specified so return an error specifying an invalid option.
12665         kiriwrite_error("invalidoption");
12669 sub kiriwrite_output_header{
12670 #################################################################################
12671 # kiriwrite_output_header: Outputs the header to the browser/stdout/console.    #
12672 #                                                                               #
12673 # Usage:                                                                        #
12674 #                                                                               #
12675 # kiriwrite_output_header();                                                    #
12676 #################################################################################
12678         # Print a header saying that the page expires immediately since the
12679         # date is set in the past.
12681         print header(-Expires=>'Sunday, 01-Jan-06 00:00:00 GMT', -charset=>'utf-8');
12682         return;
12685 sub kiriwrite_processfilename{
12686 #################################################################################
12687 # kiriwrite_processfilename: Processes a name and turns it into a filename that #
12688 # can be used by Kiriwrite.                                                     #
12689 #                                                                               #
12690 # Usage:                                                                        #
12691 #                                                                               #
12692 # kiriwrite_processfilename(text);                                              #
12693 #                                                                               #
12694 # text          Specifies the text to be used in the process for creating a new #
12695 #               filename.                                                       #
12696 #################################################################################
12698         # Get the values that have been passed to the subroutine.
12700         my ($process_text) = @_;
12702         # Define some variables that will be used later on.
12704         my $processed_stageone  = "";
12705         my $processed_stagetwo  = "";
12706         my $processed_length    = "";
12707         my $processed_char      = "";
12708         my $processed_seek      = 0;
12709         my $processed_filename  = "";
12711         # Set the first stage value of the processed filename to the
12712         # process filename and then filter it out to only contain
12713         # numbers and letters (no spaces) and then convert the
12714         # capitals to small letters.
12716         $processed_stageone = $process_text;
12717         $processed_stageone =~ tr#a-zA-Z0-9##cd;
12718         $processed_stageone =~ tr/A-Z/a-z/;
12720         # Now set the second stage value of the processed filename
12721         # to the first stage value of the processed filename and
12722         # then limit the filename down to 32 characters.
12724         $processed_stagetwo = $processed_stageone;
12725         $processed_length = length($processed_stagetwo);
12727         # Process the second stage filename into the final 
12728         # filename and do so until the seek counter is 32
12729         # or reaches the length of the second stage filename.
12731         do {
12733                 # Get the character that is the seek counter
12734                 # is set at.
12736                 $processed_char = substr($processed_stagetwo, $processed_seek, 1);
12738                 # Append to the final processed filename.
12740                 $processed_filename = $processed_filename . $processed_char;
12742                 # Increment the seek counter.
12744                 $processed_seek++;
12746         } until ($processed_seek eq 32 || $processed_seek eq $processed_length);
12748         return $processed_filename;
12752 sub kiriwrite_language{
12753 #################################################################################
12754 # kiriwrite_language: Process language strings that needs certain text inserted.#
12755 #                                                                               #
12756 # Usage:                                                                        #
12757 #                                                                               #
12758 # kiriwrite_language(string, [text, text, ...]);                                #
12759 #                                                                               #
12760 # string        Specifies the string to process.                                #
12761 # text          Specifies the text to pass to the string (can be repeated many  #
12762 #               times).                                                         #
12763 #################################################################################
12765         my $string = shift;
12766         my $item;
12768         foreach $item (@_){
12770                 $string =~ s/%s/$item/;
12772         }
12774         return $string;
12778 sub kiriwrite_error{
12779 #################################################################################
12780 # kiriwrite_error: Prints out an error message.                                 #
12781 #                                                                               #
12782 # Usage:                                                                        #
12783 #                                                                               #
12784 # kiriwrite_error(errortype, errorext);                                         #
12785 #                                                                               #
12786 # errortype     Specifies the type of error that occured.                       #
12787 # errorext      Specifies the extended error information.                       #
12788 #################################################################################
12790         # Get the error type from the subroutine.
12792         my ($error_type, $error_extended) = @_;
12794         # Disconnect from the database server.
12796         if ($kiriwrite_dbmodule){
12797                 $kiriwrite_dbmodule->disconnect();
12798         }
12800         # Load the list of error messages.
12802         my ($kiriwrite_error, %kiriwrite_error);
12804         %kiriwrite_error = (
12806                 # Catch all error message.
12807                 "generic"                       => $kiriwrite_lang->{error}->{generic},
12809                 # Standard error messages.
12810                 "blankfilename"                 => $kiriwrite_lang->{error}->{blankfilename},
12811                 "blankvariable"                 => $kiriwrite_lang->{error}->{blankvariable},
12812                 "fileexists"                    => $kiriwrite_lang->{error}->{fileexists},
12813                 "internalerror"                 => $kiriwrite_lang->{error}->{internalerror},
12814                 "invalidoption"                 => $kiriwrite_lang->{error}->{invalidoption},
12815                 "invalidaction"                 => $kiriwrite_lang->{error}->{invalidaction},
12816                 "invalidfilename"               => $kiriwrite_lang->{error}->{invalidfilename},
12817                 "invalidmode"                   => $kiriwrite_lang->{error}->{invalidmode},
12818                 "invalidutf8"                   => $kiriwrite_lang->{error}->{invalidutf8},
12819                 "invalidvariable"               => $kiriwrite_lang->{error}->{invalidvariable},
12820                 "variabletoolong"               => $kiriwrite_lang->{error}->{variabletoolong},
12822                 # Specific error messages.
12823                 "blankcompiletype"              => $kiriwrite_lang->{error}->{blankcompiletype},
12824                 "blankdatabasepageadd"          => $kiriwrite_lang->{error}->{blankdatabasepageadd},
12825                 "blankdirectory"                => $kiriwrite_lang->{error}->{blankdirectory},
12826                 "blankfindfilter"               => $kiriwrite_lang->{error}->{blankfindfilter},
12827                 "blankdatetimeformat"           => $kiriwrite_lang->{error}->{blankdatetimeformat},
12828                 "databaseconnectionerror"       => $kiriwrite_lang->{error}->{databaseconnectionerror},
12829                 "databasecategoriestoolong"     => $kiriwrite_lang->{error}->{databasecategoriestoolong},
12830                 "databasecopysame"              => $kiriwrite_lang->{error}->{databasecopysame},
12831                 "databasealreadyexists"         => $kiriwrite_lang->{error}->{databasealreadyexists},
12832                 "datadirectorymissing"          => $kiriwrite_lang->{error}->{datadirectorymissing},
12833                 "datadirectoryinvalidpermissions"       => $kiriwrite_lang->{error}->{datadirectoryinvalidpermissions},
12834                 "databasedescriptiontoolong"    => $kiriwrite_lang->{error}->{databasedescriptiontoolong},
12835                 "databasefilenameinvalid"       => $kiriwrite_lang->{error}->{databasefilenameinvalid},
12836                 "databasefilenametoolong"       => $kiriwrite_lang->{error}->{databasefilenametoolong},
12837                 "databaseerror" => $kiriwrite_lang->{error}->{databaseerror},
12838                 "databaseinvalidpermissions"    => $kiriwrite_lang->{error}->{databaseinvalidpermissions},
12839                 "databasenameinvalid"           => $kiriwrite_lang->{error}->{databasenameinvalid},
12840                 "databasenametoolong"           => $kiriwrite_lang->{error}->{databasenametoolong},
12841                 "databasenameblank"             => $kiriwrite_lang->{error}->{databasenameblank},
12842                 "databasemissingfile"           => $kiriwrite_lang->{error}->{databasemissingfile},
12843                 "databasemovemissingfile"       => $kiriwrite_lang->{error}->{databasemovemissingfile},
12844                 "databasenorename"              => $kiriwrite_lang->{error}->{databasenorename},
12845                 "databasemovesame"              => $kiriwrite_lang->{error}->{databasemovesame},
12846                 "dbmoduleblank"                 => $kiriwrite_lang->{error}->{dbmoduleblank},
12847                 "dbmoduleinvalid"               => $kiriwrite_lang->{error}->{dbmoduleinvalid},
12848                 "dbdirectoryblank"              => $kiriwrite_lang->{error}->{dbdirectoryblank},
12849                 "dbdirectoryinvalid"            => $kiriwrite_lang->{error}->{dbdirectoryinvalid},
12850                 "dbmodulemissing"               => $kiriwrite_lang->{error}->{dbmodulemissing},
12851                 "filtersdatabasenotcreated"     => $kiriwrite_lang->{error}->{filtersdatabasenotcreated},
12852                 "filtersdbdatabaseerror"        => $kiriwrite_lang->{error}->{filtersdbdatabaseerror},
12853                 "filtersdbpermissions"          => $kiriwrite_lang->{error}->{filtersdbpermissions},
12854                 "filtersdbmissing"              => $kiriwrite_lang->{error}->{filtersdbmissing},
12855                 "filteridblank"                 => $kiriwrite_lang->{error}->{filteridblank},
12856                 "filterdoesnotexist"            => $kiriwrite_lang->{error}->{filterdoesnotexist},
12857                 "filteridinvalid"               => $kiriwrite_lang->{error}->{filteridinvalid},
12858                 "filteridtoolong"               => $kiriwrite_lang->{error}->{filteridtoolong},
12859                 "findfiltertoolong"             => $kiriwrite_lang->{error}->{findfiltertoolong},
12860                 "filterpriorityinvalid"         => $kiriwrite_lang->{error}->{filterpriorityinvalid},
12861                 "filterpriorityinvalidchars"    => $kiriwrite_lang->{error}->{filterpriorityinvalidchars},
12862                 "filterprioritytoolong"         => $kiriwrite_lang->{error}->{filterprioritytoolong},
12863                 "invalidcompiletype"            => $kiriwrite_lang->{error}->{invalidcompiletype},
12864                 "invalidpagenumber"             => $kiriwrite_lang->{error}->{invalidpagenumber},
12865                 "nopagesselected"               => $kiriwrite_lang->{error}->{nopagesselected},
12866                 "invaliddirectory"              => $kiriwrite_lang->{error}->{invaliddirectory},
12867                 "invaliddatetimeformat"         => $kiriwrite_lang->{error}->{invaliddatetimeformat},
12868                 "invalidlanguagefilename"       => $kiriwrite_lang->{error}->{invalidlanguagefilename},
12869                 "languagefilenamemissing"       => $kiriwrite_lang->{error}->{languagefilenamemissing},
12870                 "moduleblank"                   => $kiriwrite_lang->{error}->{moduleblank},
12871                 "moduleinvalid"                 => $kiriwrite_lang->{error}->{moduleinvalid},
12872                 "newcopydatabasedatabaseerror"  => $kiriwrite_lang->{error}->{newcopydatabasedatabaseerror},
12873                 "newcopydatabasedoesnotexist"   => $kiriwrite_lang->{error}->{newcopydatabasedoesnotexist},
12874                 "newcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newcopydatabasefileinvalidpermissions},
12875                 "newmovedatabasedatabaseerror"  => $kiriwrite_lang->{error}->{newmovedatabasedatabaseerror},
12876                 "newmovedatabasedoesnotexist"   => $kiriwrite_lang->{error}->{newmovedatabasedoesnotexist},
12877                 "newmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newmovedatabasefileinvalidpermissions},
12878                 "nodatabasesavailable"          => $kiriwrite_lang->{error}->{nodatabasesavailable},
12879                 "nodatabaseselected"            => $kiriwrite_lang->{error}->{nodatabaseselected},
12880                 "noeditvaluesselected"          => $kiriwrite_lang->{error}->{noeditvaluesselected},
12881                 "oldcopydatabasedatabaseerror"  => $kiriwrite_lang->{error}->{oldcopydatabasedatabaseerror},
12882                 "oldcopydatabasedoesnotexist"   => $kiriwrite_lang->{error}->{oldcopydatabasedoesnotexist},
12883                 "oldcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldcopydatabasefileinvalidpermissions},
12884                 "oldmovedatabasedatabaseerror"  => $kiriwrite_lang->{error}->{oldmovedatabasedatabaseerror},
12885                 "oldmovedatabasedoesnotexist"   => $kiriwrite_lang->{error}->{oldmovedatabasedoesnotexist},
12886                 "oldmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldmovedatabasefileinvalidpermissions},
12887                 "outputdirectoryblank"          => $kiriwrite_lang->{error}->{outputdirectoryblank},
12888                 "outputdirectoryinvalid"        => $kiriwrite_lang->{error}->{outputdirectoryinvalid},
12889                 "outputdirectorymissing"        => $kiriwrite_lang->{error}->{outputdirectorymissing},
12890                 "outputdirectoryinvalidpermissions"     => $kiriwrite_lang->{error}->{outputdirectoryinvalidpermissions},
12891                 "presmoduleblank"               => $kiriwrite_lang->{error}->{presmoduleblank},
12892                 "presmoduleinvalid"             => $kiriwrite_lang->{error}->{presmoduleinvalid},
12893                 "presmodulemissing"             => $kiriwrite_lang->{error}->{presmodulemissing},
12894                 "pagefilenamedoesnotexist"      => $kiriwrite_lang->{error}->{pagefilenamedoesnotexist},
12895                 "pagefilenameexists"            => $kiriwrite_lang->{error}->{pagefilenameexists},
12896                 "pagefilenameinvalid"           => $kiriwrite_lang->{error}->{pagefilenameinvalid},
12897                 "pagefilenametoolong"           => $kiriwrite_lang->{error}->{pagefilenametoolong},
12898                 "pagefilenameblank"             => $kiriwrite_lang->{error}->{pagefilenameblank},
12899                 "pagetitletoolong"              => $kiriwrite_lang->{error}->{pagetitletoolong},
12900                 "pagedescriptiontoolong"        => $kiriwrite_lang->{error}->{pagedescriptiontoolong},
12901                 "pagesectiontoolong"            => $kiriwrite_lang->{error}->{pagesectiontoolong},
12902                 "pagedatabasefilenametoolong"   => $kiriwrite_lang->{error}->{pagedatabasefilenametoolong},
12903                 "pagesettingstoolong"           => $kiriwrite_lang->{error}->{pagesettingstoolong},
12904                 "pagesettingsinvalid"           => $kiriwrite_lang->{error}->{pagesettingsinvalid},
12905                 "pagetemplatefilenametoolong"   => $kiriwrite_lang->{error}->{pagetemplatefilenametoolong},
12906                 "replacefiltertoolong"          => $kiriwrite_lang->{error}->{replacefiltertoolong},
12907                 "servernameinvalid"             => $kiriwrite_lang->{error}->{servernameinvalid},
12908                 "servernametoolong"             => $kiriwrite_lang->{error}->{servernametoolong},
12909                 "serverdatabasenameinvalid"     => $kiriwrite_lang->{error}->{serverdatabasenameinvalid},
12910                 "serverdatabasenametoolong"     => $kiriwrite_lang->{error}->{serverdatabasenametoolong},
12911                 "serverdatabaseusernameinvalid" => $kiriwrite_lang->{error}->{serverdatabaseusernameinvalid},
12912                 "serverdatabaseusernametoolong" => $kiriwrite_lang->{error}->{serverdatabaseusernametoolong},
12913                 "serverdatabasepasswordtoolong" => $kiriwrite_lang->{error}->{serverdatabasepasswordtoolong},
12914                 "serverdatabasetableprefixinvalid"      => $kiriwrite_lang->{error}->{serverdatabasetableprefixinvalid},
12915                 "serverdatabasetableprefixtoolong"      => $kiriwrite_lang->{error}->{serverdatabasetableprefixtoolong},
12916                 "serverportnumberinvalid"       => $kiriwrite_lang->{error}->{serverportnumberinvalid},
12917                 "serverportnumberinvalidcharacters"     => $kiriwrite_lang->{error}->{serverportnumberinvalidcharacters},
12918                 "serverportnumbertoolong"       => $kiriwrite_lang->{error}->{serverportnumbertoolong},
12919                 "serverprotocolnametoolong"     => $kiriwrite_lang->{error}->{serverprotocolnametoolong},
12920                 "serverprotocolinvalid"         => $kiriwrite_lang->{error}->{serverprotocolinvalid},
12921                 "templatenameblank"             => $kiriwrite_lang->{error}->{templatenameblank},
12922                 "templatefilenameexists"        => $kiriwrite_lang->{error}->{templatefilenameexists},
12923                 "templatefilenameinvalid"       => $kiriwrite_lang->{error}->{templatefilenameinvalid},
12924                 "templatedatabaseerror"         => $kiriwrite_lang->{error}->{templatedatabaseerror},
12925                 "templatedatabaseinvalidpermissions"    => $kiriwrite_lang->{error}->{templatedatabaseinvalidpermissions},
12926                 "templatedatabaseinvalidformat" => $kiriwrite_lang->{error}->{templatedatabaseinvalidformat},
12927                 "templatedirectoryblank"        => $kiriwrite_lang->{error}->{templatedirectoryblank},
12928                 "templatedirectoryinvalid"      => $kiriwrite_lang->{error}->{templatedirectoryinvalid},
12929                 "templatedatabasenotcreated"    => $kiriwrite_lang->{error}->{templatedatabasenotcreated},
12930                 "templatefilenametoolong"       => $kiriwrite_lang->{error}->{templatefilenametoolong},
12931                 "templatenametoolong"           => $kiriwrite_lang->{error}->{templatenametoolong},
12932                 "templatedescriptiontoolong"    => $kiriwrite_lang->{error}->{templatedescriptiontoolong},
12933                 "templatedatabasemissing"       => $kiriwrite_lang->{error}->{templatedatabasemissing},
12934                 "templatedoesnotexist"          => $kiriwrite_lang->{error}->{templatedoesnotexist},
12935                 "templatefilenameblank"         => $kiriwrite_lang->{error}->{templatefilenameblank},
12937         );
12939         # Check if the specified error is blank and if it is
12940         # use the generic error messsage.
12942         if (!$kiriwrite_error{$error_type}){
12943                 $error_type = "generic";
12944         }
12946         $kiriwrite_presmodule->clear();
12948         $kiriwrite_presmodule->startbox("errorbox");
12949         $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{error}, { Style => "errorheader" });
12950         $kiriwrite_presmodule->addlinebreak();
12951         $kiriwrite_presmodule->addtext($kiriwrite_error{$error_type}, { Style => "errortext" });
12953         # Check to see if extended error information was passed.
12955         if ($error_extended){
12957                 # Write the extended error information.
12959                 $kiriwrite_presmodule->addlinebreak();
12960                 $kiriwrite_presmodule->addlinebreak();
12961                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{extendederror});
12962                 $kiriwrite_presmodule->addlinebreak();
12963                 $kiriwrite_presmodule->addlinebreak();
12964                 $kiriwrite_presmodule->startbox("datalist");
12965                 $kiriwrite_presmodule->addtext($error_extended);
12966                 $kiriwrite_presmodule->endbox();
12968         }
12970         $kiriwrite_presmodule->endbox();
12972         kiriwrite_output_header;
12973         kiriwrite_output_page($kiriwrite_lang->{error}->{error}, $kiriwrite_presmodule->grab(), "none");
12975         exit;
12979 sub kiriwrite_fileexists{
12980 #################################################################################
12981 # kiriwrite_fileexists: Check if a file exists and returns a value depending on #
12982 # if the file exists or not.                                                    #
12983 #                                                                               # 
12984 # Usage:                                                                        #
12985 #                                                                               #
12986 # kiriwrite_fileexists(filename);                                               #
12987 #                                                                               #
12988 # filename      Specifies the file name to check if it exists or not.           #
12989 #################################################################################
12991         # Get the value that was passed to the subroutine.
12993         my ($filename) = @_;
12995         # Check if the filename exists, if it does, return a value of 0, else
12996         # return a value of 1, meaning that the file was not found.
12998         if (-e $filename){
13000                 # Specified file does exist so return a value of 0.
13002                 return 0;
13004         } else {
13006                 # Specified file does not exist so return a value of 1.
13008                 return 1;
13010         }
13014 sub kiriwrite_filepermissions{
13015 #################################################################################
13016 # kiriwrite_filepermissions: Check if the file permissions of a file and return #
13017 # either a 1 saying that the permissions are valid or return a 0 saying that    #
13018 # the permissions are invalid.                                                  #
13019 #                                                                               #
13020 # Usage:                                                                        #
13021 #                                                                               #
13022 # kiriwrite_filepermissions(filename, [read], [write], [filemissingskip]);      #
13023 #                                                                               #
13024 # filename              Specifies the filename to check for permissions.        #
13025 # read                  Preform check that the file is readable.                #
13026 # write                 Preform check that the file is writeable.               #
13027 # filemissingskip       Skip the check of seeing if it can read or write if the #
13028 #                       file is missing.                                        #
13029 #################################################################################
13031         # Get the values that was passed to the subroutine.
13033         my ($filename, $readpermission, $writepermission, $ignorechecks) = @_;
13035         # Check to make sure that the read permission and write permission values
13036         # are only 1 character long.
13038         kiriwrite_variablecheck($readpermission, "maxlength", 1, 0);
13039         kiriwrite_variablecheck($writepermission, "maxlength", 1, 0);
13040         kiriwrite_variablecheck($ignorechecks, "maxlength", 1, 0);
13042         my $ignorechecks_result = 0;
13044         # Check if the file should be ignored for read and write checking if 
13045         # it doesn't exist.
13047         if ($ignorechecks){
13049                 if (-e $filename){
13051                         # The file exists so the checks are to be done.
13053                         $ignorechecks_result = 0;
13055                 } else {
13057                         # The file does not exist so the checks don't need to
13058                         # be done to prevent false positives.
13060                         $ignorechecks_result = 1;
13062                 }
13064         } else {
13066                 $ignorechecks_result = 0;
13068         }
13070         # Check if the file should be checked to see if it can be read.
13072         if ($readpermission && $ignorechecks_result eq 0){
13074                 # The file should be checked to see if it does contain read permissions
13075                 # and return a 0 if it is invalid.
13077                 if (-r $filename){
13079                         # The file is readable, so do nothing.
13081                 } else {
13083                         # The file is not readable, so return 1.
13085                         return 1;
13087                 }
13089         }
13091         # Check if the file should be checked to see if it can be written.
13093         if ($writepermission && $ignorechecks_result eq 0){
13095                 # The file should be checked to see if it does contain write permissions
13096                 # and return a 0 if it is invalid.
13098                 if (-w $filename){
13100                         # The file is writeable, so do nothing.
13102                 } else {
13104                         # The file is not writeable, so return 1.
13106                         return 1;
13108                 }
13110         }
13112         # No problems have occured, so return 0.
13114         return 0;
13118 sub kiriwrite_utf8convert{
13119 #################################################################################
13120 # kiriwrite_utf8convert: Properly converts values into UTF-8 values.            #
13121 #                                                                               #
13122 # Usage:                                                                        #
13123 #                                                                               #
13124 # utfstring     # The UTF-8 string to convert.                                  #
13125 #################################################################################
13127         # Get the values passed to the subroutine.
13129         my ($utfstring) = @_;
13131         # Load the Encode perl module.
13133         use Encode qw(decode_utf8);
13135         # Convert the string.
13137         my $finalutf8 = Encode::decode_utf8( $utfstring );
13139         return $finalutf8;
13143 sub kiriwrite_critical{
13144 #################################################################################
13145 # kiriwrite_critical: Displays an critical error message that cannot be         #
13146 # normally by the kiriwrite_error subroutine.                                   #
13147 #                                                                               #
13148 # Usage:                                                                        #
13149 #                                                                               #
13150 # errortype     Specifies the type of critical error that has occured.          #
13151 #################################################################################
13153         # Get the value that was passed to the subroutine.
13155         my ($error_type) = @_;
13157         my %error_list;
13159         # Get the error type from the errortype string.
13161         %error_list = (
13163                 # Generic critical error message.
13165                 "generic"                       => "A critical error has occured but the error is not known to Kiriwrite.",
13167                 # Specific critical error messages.
13169                 "configfilemissing"             => "The Kiriwrite configuration file is missing! Running the installer script for Kiriwrite is recommended.",
13170                 "configfileinvalidpermissions"  => "The Kiriwrite configuration file has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13171                 "dbmodulemissing"               => "The database module is missing! Running the installer script for Kiriwrite is recommended.",
13172                 "dbmoduleinvalidpermissions"    => "The database module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13173                 "dbmoduleinvalid"               => "The database module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13174                 "invalidvalue"                  => "An invalid value was passed.",
13175                 "languagefilenameblank"         => "The language filename given is blank! Running the installer script for Kiriwrite is recommended.",
13176                 "languagefilenameinvalid"       => "The language filename given is invalid! Running the installer script for Kiriwrite is recommended.",
13177                 "languagefilemissing"   => "The language filename given does not exist. Running the installer script for Kiriwrite is recommended.",
13178                 "languagefilenameinvalidpermissions"    => "The language file with the filename given has invalid permissions set. Please set the valid permission settings for the language file.",
13179                 "presmodulemissing"             => "The presentation module is missing! Running the installer script for Kiriwrite is recommended.",
13180                 "presmoduleinvalidpermissions"  => "The presentation module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the presentation module.",
13181                 "presmoduleinvalid"             => "The presentation module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13182         );
13184         if (!$error_list{$error_type}){
13186                 $error_type = "generic";
13188         }
13190         print header();
13191         print "Critical Error: " . $error_list{$error_type};
13192         exit;
13196 sub kiriwrite_output_page{
13197 #################################################################################
13198 # kiriwrite_output_page: Outputs the page to the browser/stdout/console.        #
13199 #                                                                               #
13200 # Usage:                                                                        #
13201 #                                                                               #
13202 # kiriwrite_output_page(pagetitle, pagedata, menutype);                         #
13203 #                                                                               #
13204 # pagetitle     Specifies the page title.                                       #
13205 # pagedata      Specifies the page data.                                        #
13206 # menutype      Prints out which menu to use.                                   #
13207 #################################################################################
13209         my ($pagetitle, $pagedata, $menutype) = @_;
13211         # Open the script page template and load it into the scriptpage variable,
13212         # while declaring the variable.
13214         open (my $filehandle_scriptpage, "<:utf8", 'page.html');
13215         my @scriptpage = <$filehandle_scriptpage>;
13216         binmode $filehandle_scriptpage, ':utf8';
13217         close ($filehandle_scriptpage);
13219         # Define the variables required.
13221         my $scriptpageline = "";
13222         my $pageoutput = "";
13223         my $menuoutput = "";
13225         $kiriwrite_presmodule->clear();
13227         # Print out the main menu for Kiriwrite.
13229         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{menu}->{viewdatabases} });
13230         $kiriwrite_presmodule->addtext(" | ");
13231         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page", { Text => $kiriwrite_lang->{menu}->{viewpages} });
13232         $kiriwrite_presmodule->addtext(" | ");
13233         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{menu}->{viewfilters} });
13234         $kiriwrite_presmodule->addtext(" | ");
13235         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{menu}->{viewtemplates} });
13236         $kiriwrite_presmodule->addtext(" | ");
13237         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{menu}->{compilepages} });
13238         $kiriwrite_presmodule->addtext(" | ");
13239         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{menu}->{viewsettings} });
13240         $kiriwrite_presmodule->addlinebreak();
13242         # Check what menu is going to be printed along with the default 'top' menu.
13244         if ($menutype eq "database"){
13246                 # If the menu type is database then print out the database sub-menu.
13248                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{database}->{submenu}->{viewdatabases} });
13249                 $kiriwrite_presmodule->addtext(" | ");
13250                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=new", { Text => $kiriwrite_lang->{database}->{submenu}->{adddatabase} });
13252         } elsif ($menutype eq "pages"){
13253                 # If the menu type is pages then print out the pages sub-menu.
13255                 # First, fetch the database name from the HTTP query string.
13257                 my $query = new CGI;
13258                 my $db_filename = $query->param('database');
13260                 # Check if a value has been placed in the db_filename string.
13262                 if (!$db_filename){
13264                         # As the database filename is blank, don't add an option to add a page.
13266                 } else {
13268                         # A database file has been specified so add an option to add a page to
13269                         # the selected database.
13271                         $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page&action=add&database="  . $db_filename, { Text => $kiriwrite_lang->{pages}->{submenu}->{addpage} });
13273                 }
13275         } elsif ($menutype eq "filter"){
13277                 # If the menu type is filters then print out the filter sub-menu.
13279                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{submenu}->{showfilters} });
13280                 $kiriwrite_presmodule->addtext(" | ");
13281                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter&action=add", { Text => $kiriwrite_lang->{filter}->{submenu}->{addfilter} });
13283         } elsif ($menutype eq "settings"){
13285                 # If the menu type is options then print out the options sub-menu.
13287                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{submenu}->{viewsettings} });
13288                 $kiriwrite_presmodule->addtext(" | ");
13289                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings&action=edit", { Text => $kiriwrite_lang->{setting}->{submenu}->{editsettings} });
13291         } elsif ($menutype eq "template"){
13293                 # If the menu type is template then print out the template sub-menu.
13295                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{template}->{submenu}->{showtemplates} });
13296                 $kiriwrite_presmodule->addtext(" | ");
13297                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template&action=add", { Text => $kiriwrite_lang->{template}->{submenu}->{addtemplate} });
13299         } elsif ($menutype eq "compile"){
13301                 # If the menu type is compile then print out the compile sub-menu.
13303                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{submenu}->{listdatabases} });
13304                 $kiriwrite_presmodule->addtext(" | ");
13305                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=all", { Text => $kiriwrite_lang->{compile}->{submenu}->{compileall} });
13306                 $kiriwrite_presmodule->addtext(" | ");
13307                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=clean", { Text => $kiriwrite_lang->{compile}->{submenu}->{cleanoutputdirectory} });
13309         }
13311         $menuoutput = $kiriwrite_presmodule->grab();
13313         # Find <kiriwrite> tages and replace with the apporiate variables.
13315         foreach $scriptpageline (@scriptpage){
13317                 $scriptpageline =~ s/<kiriwrite:menu>/$menuoutput/g;
13318                 $scriptpageline =~ s/<kiriwrite:imagespath>/$kiriwrite_config{"directory_noncgi_images"}/g;
13319                 $scriptpageline =~ s/<kiriwrite:pagedata>/$pagedata/g;
13321                 # Check if page title specified is blank, otherwise add a page title
13322                 # to the title.
13324                 if ($pagetitle eq ""){
13325                         $scriptpageline =~ s/<kiriwrite:title>//g;
13326                 } else {
13327                         $scriptpageline =~ s/<kiriwrite:title>/ ($pagetitle)/g;
13328                 }
13330                 
13332                 # Append processed line to the pageoutput variable.
13334                 $pageoutput = $pageoutput . $scriptpageline;
13336         }
13338         binmode STDOUT, ':utf8';
13340         print $pageoutput;
13342         return;
13346 sub kiriwrite_output_xml{
13347 #################################################################################
13348 # kiriwrite_output_xml: Outputs several types of data to an XML file            #
13349 #                                                                               #
13350 # Usage:                                                                        #
13351 #                                                                               #
13352 # kiriwrite_output_xml(filename, type, settings);                               #
13353 #                                                                               #
13354 # filename      Specifies the filename of the XML file.                         #
13355 # type          Specifies the type of the XML file to be written.               #
13356 # settings              Specifies the following settings in any order.          #
13357 #                                                                               #
13358 # Settings for Kiriwrite configuration files:                                   #
13359 #                                                                               #
13360 # DatabaseDirectory     Specifies the new database directory to use.            #
13361 # OutputDirectory       Specifies the new output directory to use.              #
13362 # ImagesURIPath         Specifies the new URI path for images.                  #
13363 # DateTimeFormat        Specifies the new date and time format.                 #
13364 # SystemLanguage        Specifies the new language to use for Kiriwrite.        #
13365 # PrsentationModule     Specifies the new presentation module to use for        #
13366 #                       Kiriwrite.                                              #
13367 # DatabaseModule        Specifies the new database module to use for Kiriwrite. #
13368 # DatabaseServer        Specifies the database server to use.                   #
13369 # DaravasePort          Specifies the port the database server is running on.   #
13370 # DatabaseProtocol      Specifies the protocol the database server is using.    #
13371 # DatabaseSQLDatabase   Specifies the SQL database name to use.                 #
13372 # DatabaseUsername      Specifies the database server username.                 #
13373 # DatabasePassword      Specifies the password for the database server username.#
13374 # DatabaseTablePrefix   Specifies the table prefix to use.                      #
13375 #################################################################################
13377         # Get the variables passed from the subroutine.
13379         my $xml_filename        = shift;
13380         my $xml_type            = shift;
13381         my ($passedsettings)    = @_;
13383         # Check if filename is blank, if it is then return an error.
13385         if ($xml_filename eq ""){
13386                 # Filename is blank, return an error.
13387                 kiriwrite_error("blankfilename");
13388         }
13390         # Validate the XML filename to make sure nothing supicious is being passed.
13392         kiriwrite_variablecheck($xml_filename, "maxlength", 64, 0);
13393         kiriwrite_variablecheck($xml_filename, "filename", "", 0);
13395         # Check what type of XML data to output.
13397         if ($xml_type eq "config") {
13399                 # The type of XML data to output is a Kiriwrite configuration file.
13401                 # Get the data from the hash.
13403                 my $settings_databasedir                = $passedsettings->{"DatabaseDirectory"};
13404                 my $settings_outputdir                  = $passedsettings->{"OutputDirectory"};
13405                 my $settings_imagesuri                  = $passedsettings->{"ImagesURIPath"};
13406                 my $settings_datetime                   = $passedsettings->{"DateTimeFormat"};
13407                 my $settings_systemlanguage             = $passedsettings->{"SystemLanguage"};
13408                 my $settings_presmodule                 = $passedsettings->{"PresentationModule"};
13409                 my $settings_dbmodule                   = $passedsettings->{"DatabaseModule"};
13411                 my $settings_database_server            = $passedsettings->{"DatabaseServer"};
13412                 my $settings_database_port              = $passedsettings->{"DatabasePort"};
13413                 my $settings_database_protocol          = $passedsettings->{"DatabaseProtocol"};
13414                 my $settings_database_sqldatabase       = $passedsettings->{"DatabaseSQLDatabase"};
13415                 my $settings_database_username          = $passedsettings->{"DatabaseUsername"};
13416                 my $settings_database_password          = $passedsettings->{"DatabasePassword"};
13417                 my $settings_database_tableprefix       = $passedsettings->{"DatabaseTablePrefix"};
13419                 # Convert the password to make sure it can be read properly.
13421                 if ($settings_database_password){
13423                         $settings_database_password =~ s/\0//g;
13424                         $settings_database_password =~ s/</&lt;/g;
13425                         $settings_database_password =~ s/>/&gt;/g;
13427                 }
13429                 # Convert the less than and greater than characters are there and
13430                 # convert them.
13432                 if ($settings_imagesuri){
13434                         $settings_imagesuri =~ s/</&lt;/g;
13435                         $settings_imagesuri =~ s/>/&gt;/g;
13437                 }
13439                 # Check if the database password value is undefined and if it is then
13440                 # set it blank.
13442                 if (!$settings_database_password){
13444                         $settings_database_password = "";
13446                 }
13448                 # Create the XML data layout.
13450                 my $xmldata = "<?xml version=\"1.0\"?>\r\n\r\n<kiriwrite-config>\r\n";
13452                 $xmldata = $xmldata . "<!-- This file was automatically generated by Kiriwrite, please feel free to edit to your own needs. -->\r\n";
13453                 $xmldata = $xmldata . "\t<settings>\r\n\t\t<directories>\r\n";
13455                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_databasedir . "</database>\r\n";
13456                 $xmldata = $xmldata . "\t\t\t<output>" . $settings_outputdir  . "</output>\r\n";
13457                 $xmldata = $xmldata . "\t\t\t<images>" . $settings_imagesuri . "</images>\r\n";
13458                 $xmldata = $xmldata . "\t\t</directories>\r\n";
13460                 $xmldata = $xmldata . "\t\t<language>\r\n";
13461                 $xmldata = $xmldata . "\t\t\t<lang>" . $settings_systemlanguage . "</lang>\r\n";
13462                 $xmldata = $xmldata . "\t\t</language>\r\n";
13464                 $xmldata = $xmldata . "\t\t<system>\r\n";
13465                 $xmldata = $xmldata . "\t\t\t<presentation>" . $settings_presmodule . "</presentation>\r\n";
13466                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_dbmodule . "</database>\r\n";
13467                 $xmldata = $xmldata . "\t\t\t<datetime>" . $settings_datetime . "</datetime>\r\n";
13468                 $xmldata = $xmldata . "\t\t</system>\r\n";
13470                 $xmldata = $xmldata . "\t\t<database>\r\n";
13471                 $xmldata = $xmldata . "\t\t\t<server>" . $settings_database_server . "</server>\r\n";
13472                 $xmldata = $xmldata . "\t\t\t<port>" . $settings_database_port . "</port>\r\n";
13473                 $xmldata = $xmldata . "\t\t\t<protocol>" . $settings_database_protocol . "</protocol>\r\n";
13474                 $xmldata = $xmldata . "\t\t\t<database>" . $settings_database_sqldatabase . "</database>\r\n";
13475                 $xmldata = $xmldata . "\t\t\t<username>" . $settings_database_username . "</username>\r\n";
13476                 $xmldata = $xmldata . "\t\t\t<password>" . $settings_database_password . "</password>\r\n";
13477                 $xmldata = $xmldata . "\t\t\t<prefix>" . $settings_database_tableprefix . "</prefix>\r\n";
13478                 $xmldata = $xmldata . "\t\t</database>\r\n";
13480                 $xmldata = $xmldata . "\t</settings>\r\n";
13482                 $xmldata = $xmldata . "</kiriwrite-config>";
13484                 # Open the Kiriwrite XML configuration file and write the new settings to the
13485                 # configuration file.
13487                 open(my $filehandle_xmlconfig, "> ", "kiriwrite.xml");
13488                 print $filehandle_xmlconfig $xmldata;
13489                 close($filehandle_xmlconfig);
13491         } else {
13493                 # The type of XML data is something else that is not supported by
13494                 # Kiriwrite, so return an error.
13496                 kiriwrite_error("invalidoption");
13498         }
13500         return;
13504 #################################################################################
13505 # End listing the functions needed.                                             #
13506 #################################################################################
13508 #################################################################################
13509 # Begin proper script execution.                                                #
13510 #################################################################################
13512 kiriwrite_settings_load;        # Load the configuration options.
13514 my $query = new CGI;            # Easily fetch variables from the HTTP string.
13518 # Check if a mode has been specified and if a mode has been specified, continue
13519 # and work out what mode has been specified.
13521 if ($query->param('mode')){
13522         my $http_query_mode = $query->param('mode');
13524         if ($http_query_mode eq "db"){
13526                 # If mode is 'db' (database), then check what action is required.
13528                 if ($query->param('action')){
13529                         # An action has been specified, so find out what action has been specified.
13531                         my $http_query_action = $query->param('action');
13533                         if ($http_query_action eq "edit"){
13534                                 # The edit action (which mean edit the settings for the selected database) has been specified,
13535                                 # get the database name and check if the action to edit an database has been confirmed.
13537                                 if ($query->param('database')){
13538                                         # If there is a value in the database variable check if it is a valid database. Otherwise,
13539                                         # return an error.
13541                                         my $http_query_database = $query->param('database');
13542                                 
13543                                         # Check if a value for confirm has been specified, if there is, check if it is the correct
13544                                         # value, otherwise return an error.
13546                                         if ($query->param('confirm')){
13547                                                 # A value for confirm has been specified, find out what value it is. If the value is correct
13548                                                 # then edit the database settings, otherwise return an error.
13550                                                 my $http_query_confirm = $query->param('confirm');
13552                                                 if ($http_query_confirm eq 1){
13553                                                         # Value is correct, collect the variables to pass onto the database variable.
13554         
13555                                                         # Get the variables from the HTTP query.
13556         
13557                                                         my $newdatabasename             = $query->param('databasename');
13558                                                         my $newdatabasedescription      = $query->param('databasedescription');
13559                                                         my $newdatabasefilename         = $query->param('databasefilename');
13560                                                         my $databaseshortname           = $query->param('database');
13561                                                         my $databasenotes               = $query->param('databasenotes');
13562                                                         my $databasecategories          = $query->param('databasecategories');
13564                                                         # Check the permissions of the database configuration file and return
13565                                                         # an error if the database permissions are invalid.
13566         
13567                                                         # Pass the variables to the database editing subroutine.
13569                                                         my $pagedata = kiriwrite_database_edit($databaseshortname, $newdatabasefilename, $newdatabasename, $newdatabasedescription, $databasenotes, $databasecategories, 1);
13570         
13571                                                         kiriwrite_output_header;
13572                                                         kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13573                                                         exit;
13574         
13575                                                 } else {
13576                                                         # Value is incorrect, return and error.
13577                                                         kiriwrite_error("invalidvariable");
13578                                                 } 
13580                                         }
13582                                         # Display the form for editing an database.
13583                                         my $pagedata = kiriwrite_database_edit($http_query_database);
13585                                         kiriwrite_output_header;
13586                                         kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13587                                         exit;
13589                                 } else {
13591                                         # If there is no value in the database variable, then return an error.
13592                                         kiriwrite_error("invalidvariable");
13594                                 }
13596                         } elsif ($http_query_action eq "delete"){
13598                                 # Action equested is to delete a database, find out if the user has already confirmed deletion of the database
13599                                 # and if the deletion of the database has been confirmed, delete the database.
13601                                 if ($query->param('confirm')){
13603                                         # User has confirmed to delete a database, pass the parameters to the kiriwrite_database_delete
13604                                         # subroutine.
13606                                         my $database_filename = $query->param('database');
13607                                         my $database_confirm = $query->param('confirm');
13608                                         my $pagedata = kiriwrite_database_delete($database_filename, $database_confirm);
13610                                         kiriwrite_output_header;
13611                                         kiriwrite_output_page($kiriwrite_lang->{database}->{deleteddatabase}, $pagedata, "database");
13613                                         exit;
13615                                 }
13617                                 # User has clicked on the delete link (thus hasn't confirmed the action to delete a database).
13619                                 my $database_filename = $query->param('database');
13620                                 my $pagedata = kiriwrite_database_delete($database_filename);
13622                                 kiriwrite_output_header;
13623                                 kiriwrite_output_page($kiriwrite_lang->{database}->{deletedatabase}, $pagedata, "database");
13625                                 exit;
13627                         } elsif ($http_query_action eq "new"){
13629                                 # Action requested is to create a new database, find out if the user has already entered the information needed
13630                                 # to create a database and see if the user has confirmed the action, otherwise printout a form for adding a
13631                                 # database.
13633                                 my $http_query_confirm = $query->param('confirm');
13635                                 # Check if the confirm value is correct.
13637                                 if ($http_query_confirm){
13638                                         if ($http_query_confirm eq 1){
13640                                                 # User has confirmed to create a database, pass the parameters to the 
13641                                                 # kiriwrite_database_add subroutine.
13643                                                 my $http_query_confirm = $query->param('confirm');
13645                                                 my $database_name               = $query->param('databasename');
13646                                                 my $database_description        = $query->param('databasedescription');
13647                                                 my $database_filename           = $query->param('databasefilename');
13648                                                 my $database_notes              = $query->param('databasenotes');
13649                                                 my $database_categories         = $query->param('databasecategories');
13651                                                 my $pagedata = kiriwrite_database_add($database_filename, $database_name, $database_description, $database_notes, $database_categories, $http_query_confirm);
13653                                                 kiriwrite_output_header;
13654                                                 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13655                                                 exit;
13657                                         } else {
13659                                                 # The confirm value is something else other than 1 (which it shouldn't be), so
13660                                                 # return an error.
13662                                         }
13663                                 }
13665                                 # User has clicked on the 'Add Database' link.
13667                                 my $pagedata = kiriwrite_database_add;
13669                                 kiriwrite_output_header;
13670                                 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13671                                 exit;
13673                         } else {
13674                                 # Another option has been specified, so return an error.
13676                                 kiriwrite_error("invalidaction");
13677                         }
13678                 }
13680                 # No action has been specified, do the default action of displaying a list
13681                 # of databases.
13683                 my $pagedata = kiriwrite_database_list;
13685                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
13686                 kiriwrite_output_page("", $pagedata, "database");       # Output the page to browser/console/stdout.
13687                 exit;                                   # End the script.
13689         } elsif ($http_query_mode eq "page"){
13691                 # If mode is 'page', then check what action is required.
13693                 if ($query->param('action')){
13694                         my $http_query_action = $query->param('action');
13696                         # Check if the action requested matches with one of the options below. If it does,
13697                         # go to that section, otherwise return an error.
13699                         if ($http_query_action eq "view"){
13701                                 # The action selected was to view pages from a database, 
13703                                 my $database_name       = $query->param('database');
13704                                 my $pagedata            = kiriwrite_page_list($database_name);
13706                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13707                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{viewingdatabase}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13708                                 exit;                   # End the script.
13710                         } elsif ($http_query_action eq "add"){
13712                                 # The action selected was to add a page to the selected database.
13714                                 my $http_query_confirm  = $query->param('confirm');
13716                                 if (!$http_query_confirm){
13718                                         $http_query_confirm = 0;
13720                                 }
13722                                 if ($http_query_confirm eq 1){
13723                 
13724                                         my $http_query_database         = $query->param('database');
13725                                         my $http_query_filename         = $query->param('pagefilename');
13726                                         my $http_query_name             = $query->param('pagename');
13727                                         my $http_query_description      = $query->param('pagedescription');
13728                                         my $http_query_section          = $query->param('pagesection');
13729                                         my $http_query_template         = $query->param('pagetemplate');
13730                                         my $http_query_settings         = $query->param('pagesettings');
13731                                         my $http_query_content          = $query->param('pagecontent');
13732                         
13733                                         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);
13735                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13736                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13737                                         exit;                           # End the script.
13739                                 }
13740                 
13741                                 my $http_query_database = $query->param('database');
13742                                 my $pagedata            = kiriwrite_page_add($http_query_database);
13744                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13745                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13746                                 exit;                           # End the script.
13748                         } elsif ($http_query_action eq "edit"){
13749                          
13750                                 # The action selected was to edit a page from a database.
13752                                 my $http_query_confirm = $query->param('confirm');
13754                                 if (!$http_query_confirm){
13756                                         $http_query_confirm = 0;
13758                                 }
13760                                 if ($http_query_confirm eq 1){
13762                                         # Get the needed values from the HTTP query.
13764                                         my $http_query_database         = $query->param('database');
13765                                         my $http_query_filename         = $query->param('page');
13766                                         my $http_query_newfilename      = $query->param('pagefilename');
13767                                         my $http_query_name             = $query->param('pagename');
13768                                         my $http_query_description      = $query->param('pagedescription');
13769                                         my $http_query_section          = $query->param('pagesection');
13770                                         my $http_query_template         = $query->param('pagetemplate');
13771                                         my $http_query_settings         = $query->param('pagesettings');
13772                                         my $http_query_content          = $query->param('pagecontent');
13774                                         # Pass the values to the editing pages subroutine.
13776                                         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);
13778                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13779                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages");   # Output the page to browser/console/stdout.
13780                                         exit;                           # End the script.
13782                                 }
13784                                 # Get the needed values from the HTTP query.
13786                                 my $http_query_database = $query->param('database');
13787                                 my $http_query_filename = $query->param('page');
13789                                 # Pass the values to the editing pages subroutine.
13791                                 my $pagedata = kiriwrite_page_edit($http_query_database, $http_query_filename);
13793                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13794                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages");   # Output the page to browser/console/stdout.
13795                                 exit;                           # End the script.
13798                         } elsif ($http_query_action eq "delete"){
13800                                 # The action selected was to delete a page from a database.
13802                                 my $http_query_database = $query->param('database');
13803                                 my $http_query_page     = $query->param('page');
13804                                 my $http_query_confirm  = $query->param('confirm');
13806                                 my $pagedata = "";
13807                                 my $selectionlist = "";
13809                                 if ($http_query_confirm){
13811                                         # The action has been confirmed, so try to delete the selected page
13812                                         # from the database.
13814                                         $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page, $http_query_confirm);
13816                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13817                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13818                                         exit;                           # End the script.
13820                                 }
13822                                 $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page);
13824                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13825                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13826                                 exit;                           # End the script.
13829                         } elsif ($http_query_action eq "multidelete"){
13831                                 # The action selected was to delete multiple pages from a
13832                                 # database.
13834                                 my $http_query_database = $query->param('database');
13835                                 my $http_query_confirm  = $query->param('confirm');
13837                                 my @filelist;
13838                                 my $pagedata;
13840                                 if ($http_query_confirm){
13842                                         # The action to delete multiple pages from the selected
13843                                         # database has been confirmed.
13845                                         @filelist       = kiriwrite_selectedlist();
13846                                         $pagedata       = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13848                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13849                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13850                                         exit;                           # End the script.
13852                                 }
13854                                 # Get the list of selected pages and pass them to the
13855                                 # multiple page delete subroutine.
13857                                 @filelist       = kiriwrite_selectedlist();
13858                                 $pagedata       = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13860                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13861                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13862                                 exit;                           # End the script.
13864                         } elsif ($http_query_action eq "multimove"){
13866                                 # The action selected was to move multiple pages from a
13867                                 # database.
13869                                 my $http_query_database         = $query->param('database');
13870                                 my $http_query_newdatabase      = $query->param('newdatabase');
13871                                 my $http_query_confirm          = $query->param('confirm');
13873                                 my @filelist;
13874                                 my $pagedata;
13876                                 if ($http_query_confirm){
13878                                         # The action to move multiple pages from the selected
13879                                         # database has been confirmed.
13881                                         @filelist       = kiriwrite_selectedlist();
13882                                         $pagedata       = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13884                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13885                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13886                                         exit;                           # End the script.
13888                                 }
13890                                 # Get the list of selected pages and pass them to the
13891                                 # multiple page move subroutine.
13893                                 @filelist       = kiriwrite_selectedlist();
13894                                 $pagedata       = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13896                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13897                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13898                                 exit;                           # End the script.
13900                         } elsif ($http_query_action eq "multicopy"){
13902                                 # The action selected was to copy multiple pages from a
13903                                 # database.
13905                                 my $http_query_database         = $query->param('database');
13906                                 my $http_query_newdatabase      = $query->param('newdatabase');
13907                                 my $http_query_confirm          = $query->param('confirm');
13909                                 my @filelist;
13910                                 my $pagedata;
13912                                 if ($http_query_confirm){
13914                                         # The action to copy multiple pages from the selected
13915                                         # database has been confirmed.
13917                                         @filelist       = kiriwrite_selectedlist();
13918                                         $pagedata       = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13920                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13921                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13922                                         exit;                           # End the script.
13924                                 }
13926                                 # Get the list of selected pages and pass them to the
13927                                 # multiple page copy subroutine.
13929                                 @filelist       = kiriwrite_selectedlist();
13930                                 $pagedata       = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13932                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13933                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13934                                 exit;                           # End the script.
13936                         } elsif ($http_query_action eq "multiedit"){
13938                                 # The action selected was to edit multiple pages from a
13939                                 # database.
13941                                 my $http_query_database         = $query->param('database');
13942                                 my $http_query_newsection       = $query->param('newsection');
13943                                 my $http_query_altersection     = $query->param('altersection');
13944                                 my $http_query_newtemplate      = $query->param('newtemplate');
13945                                 my $http_query_altertemplate    = $query->param('altertemplate');
13946                                 my $http_query_newsettings      = $query->param('newsettings');
13947                                 my $http_query_altersettings    = $query->param('altersettings');
13948                                 my $http_query_confirm          = $query->param('confirm');
13950                                 my @filelist;
13951                                 my $pagedata;
13953                                 if (!$http_query_confirm){
13955                                         @filelist       = kiriwrite_selectedlist();
13956                                         $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);
13958                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13959                                         kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13960                                         exit;
13962                                 }
13964                                 # Get the list of selected pages and pass them to the
13965                                 # multiple page edit subroutine.
13967                                 @filelist       = kiriwrite_selectedlist();
13968                                 $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);
13970                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
13971                                 kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13972                                 exit;                           # End the script.
13974                         } else {
13975                                 kiriwrite_error("invalidaction");
13976                         }
13978                 } else {
13980                         # If there the action option is left blank, then print out a form where the database
13981                         # can be selected to view pages from.
13983                         my $pagedata = kiriwrite_page_list;
13985                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
13986                         kiriwrite_output_page($kiriwrite_lang->{pages}->{databaseselecttitle}, $pagedata, "pages");     # Output the page to browser/console/stdout.
13987                         exit;                           # End the script.
13989                 }
13991                 # No action has been specified, do the default action of listing pages from
13992                 # the first database found in the directory.
13994         } elsif ($http_query_mode eq "filter"){
13996                 # If there's a value for action in the HTTP query, then
13997                 # get that value that is in the HTTP query.
13999                 if ($query->param('action')){
14001                         # There is a value for action in the HTTP query,
14002                         # so get the value from it.
14004                         my $http_query_action = $query->param('action');
14006                         if ($http_query_action eq "add"){
14008                                 # The action the user requested is to add a filter to the
14009                                 # filter database.
14011                                 # Check if there is a value in confirm and if there is
14012                                 # then pass it on to the new find and replace words
14013                                 # to add to the filter database.
14015                                 my $http_query_confirm = $query->param('confirm');
14017                                 if ($http_query_confirm){
14019                                         # There is a value in http_query_confirm, so pass on the
14020                                         # new find and replace words so that they can be added
14021                                         # to the filter database.
14023                                         my $http_query_findwords        = $query->param('findword');
14024                                         my $http_query_replacewords     = $query->param('replaceword');
14025                                         my $http_query_priority         = $query->param('priority');
14026                                         my $http_query_notes            = $query->param('notes');
14027                                 
14028                                         my $pagedata = kiriwrite_filter_add($http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
14030                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14031                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14032                                         exit;                           # End the script.
14034                                 }
14036                                 my $pagedata = kiriwrite_filter_add();
14038                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14039                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14040                                 exit;                           # End the script.
14042                         } elsif ($http_query_action eq "edit"){
14044                                 # The action the user requested is to edit an filter from
14045                                 # the filter database.
14047                                 my $http_query_number = $query->param('filter');
14048                                 my $http_query_confirm = $query->param('confirm');
14050                                 if ($http_query_confirm){
14052                                         # There is a value in http_query_confirm, so pass on the
14053                                         # new find and replace words so that the filter database
14054                                         # can be edited.
14056                                         my $http_query_findwords        = $query->param('filterfind');
14057                                         my $http_query_replacewords     = $query->param('filterreplace');
14058                                         my $http_query_priority         = $query->param('priority');
14059                                         my $http_query_notes            = $query->param('notes');
14061                                         my $pagedata = kiriwrite_filter_edit($http_query_number, $http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
14063                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14064                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter");    # Output the page to browser/console/stdout.
14065                                         exit;                           # End the script.
14067                                 }
14069                                 my $pagedata = kiriwrite_filter_edit($http_query_number);
14071                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14072                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter");    # Output the page to browser/console/stdout.
14073                                 exit;                                   # End the script.
14075                         } elsif ($http_query_action eq "delete"){
14077                                 # The action the user requested is to delete an filter
14078                                 # from the filter database.
14080                                 my $http_query_number = $query->param('filter');
14081                                 my $http_query_confirm = $query->param('confirm');
14083                                 if ($http_query_confirm){
14085                                         my $pagedata = kiriwrite_filter_delete($http_query_number, $http_query_confirm);
14087                                         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14088                                         kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14089                                         exit;                                   # End the script
14091                                 }
14093                                 my $pagedata = kiriwrite_filter_delete($http_query_number);
14095                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14096                                 kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter");  # Output the page to browser/console/stdout.
14097                                 exit;                                   # End the script.
14099                         } else {
14101                                 # Another action was requested that was not one of 
14102                                 # the ones prcedding this catch all, so return
14103                                 # an error saying that an invalid option was
14104                                 # specified.
14106                                 kiriwrite_error("invalidaction");
14108                         }
14110                 } else {
14112                         my $pagedata = kiriwrite_filter_list();
14114                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14115                         kiriwrite_output_page($kiriwrite_lang->{filter}->{viewfilters}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14116                         exit;                           # End the script.
14118                 }
14122         } elsif ($http_query_mode eq "template"){
14124                 # Check if an action has been specified in the HTTP query.
14126                 if ($query->param('action')){
14128                         # An action has been specified in the HTTP query.
14130                         my $http_query_action = $query->param('action');
14132                         if ($http_query_action eq "delete"){
14133                                 # Get the required parameters from the HTTP query.
14135                                 my $http_query_template = $query->param('template');
14136                                 my $http_query_confirm  = $query->param('confirm');
14138                                 # Check if a value for confirm has been specified (it shouldn't)
14139                                 # be blank.
14141                                 if (!$http_query_confirm){
14142                                         # The confirm parameter of the HTTP query is blank, so
14143                                         # write out a form asking the user to confirm the deletion
14144                                         # of the selected template.
14146                                         my $pagedata = kiriwrite_template_delete($http_query_template);
14148                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14149                                         kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template");    # Output the page to browser/console/stdout.
14150                                         exit;                           # End the script.
14152                                 } else {
14154                                         my $pagedata = kiriwrite_template_delete($http_query_template, $http_query_confirm);
14156                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14157                                         kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template");    # Output the page to browser/console/stdout.
14158                                         exit;                           # End the script.
14160                                 }
14162                         } elsif ($http_query_action eq "add") {
14164                                 # Get the variables from the HTTP query in preperation for processing.
14166                                 my $http_query_confirm  = $query->param('confirm');
14167                                 my $http_query_templatelayout   = $query->param('templatelayout');
14168                                 my $http_query_templatename     = $query->param('templatename');
14169                                 my $http_query_templatedescription = $query->param('templatedescription');
14170                                 my $http_query_templatefilename = $query->param('templatefilename');
14172                                 # Check if there is a confirmed value in the http_query_confirm variable.
14174                                 if (!$http_query_confirm){
14176                                         # Since there is no confirm value, print out a form for creating a new
14177                                         # template.
14179                                         my $pagedata = kiriwrite_template_add();
14181                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14182                                         kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template");       # Output the page to browser/console/stdout.
14183                                         exit;                           # End the script.
14185                                 } else {
14187                                         # A value in the http_query_confirm value is specified, so pass the
14188                                         # variables onto the kiriwrite_template_add subroutine.
14190                                         my $pagedata = kiriwrite_template_add($http_query_templatefilename, $http_query_templatename, $http_query_templatedescription, $http_query_templatelayout, $http_query_confirm);
14192                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14193                                         kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template");       # Output the page to browser/console/stdout.
14194                                         exit;                           # End the script.
14196                                 }
14198                         } elsif ($http_query_action eq "edit") {
14200                                 # Get the required parameters from the HTTP query.
14202                                 my $http_query_templatefile     = $query->param('template');
14203                                 my $http_query_confirm          = $query->param('confirm');
14205                                 # Check to see if http_query_confirm has a value of '1' in it and
14206                                 # if it does, edit the template using the settings providied.
14208                                 if (!$http_query_confirm){
14210                                         # Since there is no confirm value, open the template configuration
14211                                         # file and the template file itself then print out the data on to
14212                                         # the form.
14214                                         my $pagedata = kiriwrite_template_edit($http_query_templatefile);
14215                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14216                                         kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template");      # Output the page to browser/console/stdout.
14217                                         exit;                           # End the script.
14219                                 } elsif ($http_query_confirm eq 1) {
14221                                         # Since there is a confirm value of 1, the user has confirm the
14222                                         # action of editing of a template so get the other variables 
14223                                         # that were also sent and pass the variables to the subroutine.
14225                                         my $http_query_newfilename      = $query->param('newfilename');
14226                                         my $http_query_newname          = $query->param('newname');
14227                                         my $http_query_newdescription   = $query->param('newdescription');
14228                                         my $http_query_newlayout        = $query->param('newlayout');
14230                                         my $pagedata = kiriwrite_template_edit($http_query_templatefile, $http_query_newfilename, $http_query_newname, $http_query_newdescription, $http_query_newlayout, $http_query_confirm);
14231                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14232                                         kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template");      # Output the page to browser/console/stdout.
14233                                         exit;                           # End the script.
14235                                 } else {
14237                                         # Another confirm value is there instead of '0' or '1'. Return
14238                                         # an error saying it is invalid.
14240                                         kiriwrite_error("invalidvariable");
14242                                 }
14244                         } else {
14246                                 # Another action was specified and was not one of the ones above, so
14247                                 # return an error.
14249                                 kiriwrite_error("invalidaction");
14251                         }
14253                 } else {
14255                         # If the action option is left blank, then print out a form where the list
14256                         # of templates are available.
14258                         my $pagedata = kiriwrite_template_list;
14260                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14261                         kiriwrite_output_page($kiriwrite_lang->{template}->{viewtemplates}, $pagedata, "template");     # Output the page to browser/console/stdout.
14262                         exit;                           # End the script.
14264                 }
14266         } elsif ($http_query_mode eq "compile"){
14268                 # The mode selected is to compile pages from databases.
14270                 # If the action option is left blank, then print out a form where the list
14271                 # of databases to compile are available.
14273                 if ($query->param('action')){
14275                         my $http_query_action = $query->param('action');
14277                         if ($http_query_action eq "compile"){
14279                                 # The specified action is to compile the pages, check if the
14280                                 # action to compile the page has been confirmed.
14282                                 my $http_query_confirm  = $query->param('confirm');
14283                                 my $http_query_type     = $query->param('type');
14285                                 # If it is blank, set the confirm value to 0.
14287                                 if (!$http_query_confirm){
14289                                         # The http_query_confirm variable is uninitalised, so place a
14290                                         # '0' (meaning an unconfirmed action).
14292                                         $http_query_confirm = 0;
14294                                 }
14296                                 # If the compile type is blank then return an error.
14298                                 if (!$http_query_type){
14300                                         # Compile type is blank so return an error.
14302                                         kiriwrite_error("blankcompiletype");
14304                                 }
14306                                 if ($http_query_type eq "multiple"){
14308                                         if ($http_query_confirm eq 1){
14310                                                 # The action to compile the pages has been confirmed so
14311                                                 # compile the pages.
14313                                                 my @selectedlist = kiriwrite_selectedlist();
14314                                                 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14316                                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14317                                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14318                                                 exit;                           # End the script.
14320                                         } else {
14322                                                 # The action to compile the pages has not been confirmed
14323                                                 # so write a form asking the user to confirm the action
14324                                                 # of compiling the pages.
14326                                                 my @selectedlist = kiriwrite_selectedlist();
14327                                                 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14329                                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14330                                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compileselecteddatabases}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14331                                                 exit;                           # End the script.
14333                                         }
14335                                 } elsif ($http_query_type eq "single"){
14337                                         my $http_query_database = $query->param('database');
14338                                         my @selectedlist;
14339                                         $selectedlist[0] = $http_query_database;
14340                                         my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14342                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14343                                         kiriwrite_output_page($kiriwrite_lang->{compile}->{compiledatabase}, $pagedata, "compile");
14344                                         exit;                           # End the script.
14346                                 } else {
14348                                         kiriwrite_error("invalidcompiletype");
14350                                 }
14352                         } elsif ($http_query_action eq "all"){
14354                                 # The selected action is to compile all of the databases
14355                                 # in the database directory. Check if the action to
14356                                 # compile all of the databases has been confirmed.
14358                                 my $http_query_confirm = $query->param('confirm');
14360                                 if (!$http_query_confirm){
14362                                         # The http_query_confirm variable is uninitalised, so place a
14363                                         # '0' (meaning an unconfirmed action).
14365                                         $http_query_confirm = 0;
14367                                 }
14369                                 if ($http_query_confirm eq 1){
14371                                         # The action to compile all the databases has been confirmed.
14373                                 }
14375                                 my $pagedata = kiriwrite_compile_all();
14377                                 kiriwrite_output_header;                        # Output the header to browser/console/stdout.
14378                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilealldatabases}, $pagedata, "compile");
14379                                 exit;
14381                         } elsif ($http_query_action eq "clean") {
14383                                 # The selected action is to clean the output directory.
14384                                 # Check if the action to clean the output directory
14385                                 # has been confirmed.
14387                                 my $http_query_confirm = $query->param('confirm');
14389                                 if (!$http_query_confirm){
14391                                         # The http_query_confirm variable is uninitalised, so place a
14392                                         # '0' (meaning an unconfirmed action).
14394                                         $http_query_confirm = 0;
14396                                 }
14398                                 if ($http_query_confirm eq 1){
14400                                         # The action to clean the output directory has been confirmed.
14402                                         my $pagedata = kiriwrite_compile_clean($http_query_confirm);
14404                                         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14405                                         kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14406                                         exit;                                   # End the script.
14407                         
14408                                 }
14410                                 # The action to clean the output directory is not
14411                                 # confirmed, so write a page asking the user
14412                                 # to confirm cleaning the output directory.
14414                                 my $pagedata = kiriwrite_compile_clean();
14416                                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14417                                 kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14418                                 exit;                                   # End the script.
14420                         } else {
14422                                 # The action specified was something else other than those
14423                                 # above, so return an error.
14425                                 kiriwrite_error("invalidaction");
14427                         }
14428                 }
14430                 my $pagedata = kiriwrite_compile_list;
14432                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14433                 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile");        # Output the page to browser/console/stdout.
14434                 exit;                                   # End the script.
14436         } elsif ($http_query_mode eq "settings"){
14438                 # The mode selected is view (and change settings).
14440                 # If the action value has been left blank, then view the list of
14441                 # current settings.
14443                 if ($query->param('action')){
14444                         my $http_query_action = $query->param('action');
14446                         if ($http_query_action eq "edit"){
14448                                 # The action specified is to edit the settings. Check if the action
14449                                 # to edit the settings has been confirmed.
14451                                 my $http_query_confirm = $query->param('confirm');
14453                                 if (!$http_query_confirm){
14455                                         # The confirm value is blank, so set it to 0.
14457                                         $http_query_confirm = 0;
14459                                 }
14461                                 if ($http_query_confirm eq 1){
14463                                         # The action to edit the settings has been confirmed. Get the
14464                                         # required settings from the HTTP query.
14466                                         my $http_query_database         = $query->param('databasedir');
14467                                         my $http_query_output           = $query->param('outputdir');
14468                                         my $http_query_imagesuri        = $query->param('imagesuripath');
14469                                         my $http_query_datetimeformat   = $query->param('datetime');
14470                                         my $http_query_systemlanguage   = $query->param('language');
14471                                         my $http_query_presmodule       = $query->param('presmodule');
14472                                         my $http_query_dbmodule         = $query->param('dbmodule');
14474                                         my $http_query_database_server          = $query->param('database_server');
14475                                         my $http_query_database_port            = $query->param('database_port');
14476                                         my $http_query_database_protocol        = $query->param('database_protocol');
14477                                         my $http_query_database_sqldatabase     = $query->param('database_sqldatabase');
14478                                         my $http_query_database_username        = $query->param('database_username');
14479                                         my $http_query_database_passwordkeep    = $query->param('database_password_keep');
14480                                         my $http_query_database_password        = $query->param('database_password');
14481                                         my $http_query_database_tableprefix     = $query->param('database_tableprefix');
14483                                         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 });
14485                                         kiriwrite_output_header;        # Output the header to browser/console/stdout.
14486                                         kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14487                                         exit;                           # End the script.
14489                                 }
14491                                 # The action to edit the settings has not been confirmed.
14493                                 my $pagedata = kiriwrite_settings_edit;
14495                                 kiriwrite_output_header;        # Output the header to browser/console/stdout.
14496                                 kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14497                                 exit;                           # End the script.
14499                         } else {
14501                                 # The action specified was something else other than those
14502                                 # above, so return an error.
14504                                 kiriwrite_error("invalidaction");
14506                         }
14508                 }
14510                 # No action has been specified, so print out the list of settings currently being used.
14512                 my $pagedata = kiriwrite_settings_view;
14514                 kiriwrite_output_header;                # Output the header to browser/console/stdout.
14515                 kiriwrite_output_page($kiriwrite_lang->{setting}->{viewsettings}, $pagedata, "settings");       # Output the page to browser/console/stdout.
14516                 exit;                                   # End the script.
14518         } else {
14519                 # Another mode has been specified than the ones above, so return an error saying that
14520                 # an invalid option was specified.
14522                 kiriwrite_error("invalidmode");
14523         }
14525 } else {
14527         # No mode has been specified, so print the default "first-run" view of the
14528         # database list.
14530         my $pagedata = kiriwrite_database_list;
14532         kiriwrite_output_header;                # Output the header to browser/console/stdout.
14533         kiriwrite_output_page("", $pagedata, "database");       # Output the page to browser/console/stdout.
14534         exit;                                   # End the script.
14538 __END__
14540 =head1 NAME
14542 Kiriwrite
14544 =head1 DESCRIPTION
14546 Web-based webpage compiler.
14548 =head1 AUTHOR
14550 Steve Brokenshire <sbrokenshire@xestia.co.uk>
14552 =head1 USAGE
14554 This perl script is intended to be used on a web server which has CGI with Perl support or with mod_perl support.
14556 =head1 DOCUMENTATION
14558 For more information on how to use Kiriwrite, please see the documentation that was included with Kiriwrite.
14560 - From the Xestia Documentation website: http://documentation.xestia.co.uk and click on the Kiriwrite link on the page.
14562 - From the Documentation directory from the Kiriwrite source packages (.tar/.tar.gz/.tar.bz2).
14564 - 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