3 #################################################################################
4 # Kiriwrite (kiriwrite.cgi) #
5 # Main program script #
9 # Copyright (C) 2005-2007 Steve Brokenshire <sbrokenshire@xestia.co.uk> #
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. #
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.#
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.
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 = (
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
59 my $env_script_name_length = length($env_script_name);
60 my $filename_seek = 0;
61 my $filename_char = "";
62 my $filename_last = 0;
65 $filename_char = substr($env_script_name, $filename_seek, 1);
66 if ($filename_char eq "/"){
67 $filename_last = $filename_seek + 1;
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.
78 "script_filename" => $script_filename,
81 $ENV{XML_SIMPLE_PREFERRED_PARSER} = "XML::Parser";
85 #################################################################################
86 # Begin listing the functions needed. #
87 #################################################################################
89 sub kiriwrite_page_add{
90 #################################################################################
91 # kiriwrite_page_add: Adds a page to a database #
95 # kiriwrite_page_add(database, pagefilename, title, description, section, #
96 # template, settings, info, confirm); #
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).
121 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
123 # Check if the database filename is valid and return an error if
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");
142 # Check the length the database name and return an error if it's
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");
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
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");
201 if ($pagetitle_maxlength_check eq 1){
203 # The page title given is too long, so return an error.
205 kiriwrite_error("pagetitletoolong");
209 if ($pagedescription_maxlength_check eq 1){
211 # The page description given is too long, so return an error.
213 kiriwrite_error("pagedescriptiontoolong");
217 if ($pagesection_maxlength_check eq 1){
219 # The page section given is too long, so return an error.
221 kiriwrite_error("pagesectiontoolong");
225 if ($pagedatabase_maxlength_check eq 1){
227 # The page database given is too long, so return an error.
229 kiriwrite_error("pagedatabasefilenametoolong");
233 if ($pagesettings_maxlength_check eq 1){
235 # The page settings given is too long, so return an error.
237 kiriwrite_error("pagesettingstoolong");
241 if ($pagetemplate_maxlength_check eq 1){
243 # The page template given is too long, so return an error.
245 kiriwrite_error("pagetemplatefilenametoolong");
249 # The action to create a new page has been confirmed, so add the page to the
253 kiriwrite_error("pagefilenameblank");
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
267 $pagetemplate_filename_check = kiriwrite_variablecheck($pagetemplate, "page_filename", 0, 1);
271 if ($pagefilename_filename_check ne 0){
273 # The page filename given is invalid, so return an error.
275 kiriwrite_error("pagefilenameinvalid");
279 if ($pagesettings_setting_check eq 1){
281 # The page settings given is invalid, so return an error.
283 kiriwrite_error("pagesettingsinvalid");
287 if ($pagetemplate_filename_check eq 1){
289 # The template filename given is invalid, so return an error
291 kiriwrite_error("templatefilenameinvalid");
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");
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
318 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
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
339 kiriwrite_error("databaseinvalidpermissions");
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));
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
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));
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.
405 my $template_filename;
407 my $template_data = "";
408 my $template_warningmessage;
409 my $template_warning = 0;
410 my $template_count = 0;
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
426 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
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
447 kiriwrite_error("databaseinvalidpermissions");
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");
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));
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
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;
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;
521 if ($template_warning eq 0){
523 # Check to see if there are any templates in the templates
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.
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;
563 # Check if the final template list is blank.
565 if (!%template_list){
567 # The template list is blank so write the template
570 $template_warningmessage = $kiriwrite_lang->{pages}->{notemplatesavailable};
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
656 if ($template_warning eq 1){
658 $kiriwrite_presmodule->addhiddendata("pagetemplate", "!none");
659 $kiriwrite_presmodule->addtext($template_warningmessage);
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 });
679 $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
680 $kiriwrite_presmodule->endselectbox();
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();
752 # The confirm value is something else than '1' or '0' so
755 kiriwrite_error("invalidvalue");
763 sub kiriwrite_page_delete{
764 #################################################################################
765 # kiriwrite_page_delete: Deletes a (single) page from a database. #
769 # kiriwrite_page_delete(database, page, [confirm]); #
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
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");
797 # Check the length the database name and return an error if it's
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");
810 # Check if the page name is specified is blank and return an error if
815 # The page name is blank, so return an error.
817 kiriwrite_error("blankfilename");
821 # If the confirm value is blank, then set the confirm value to 0.
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
845 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
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
866 kiriwrite_error("databaseinvalidpermissions");
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");
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));
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");
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");
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
974 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
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
995 kiriwrite_error("databaseinvalidpermissions");
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));
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");
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
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();
1067 # Another page deletion type was specified, so return an error.
1069 kiriwrite_error("invalidoption");
1075 sub kiriwrite_page_edit{
1076 #################################################################################
1077 # kiriwrite_page_edit: Edits a page from a database. #
1081 # kiriwrite_page_edit(database, filename, newfilename, newname, newdescription, #
1082 # newsection, newtemplate, newsettings, newpagecontent #
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'.
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
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");
1133 # Check the length the database name and return an error if it's
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");
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");
1155 # Check if the confirm value is '1' and if it is, edit the specified
1156 # page in the database.
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");
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");
1215 if ($pagenewtitle_maxlength_check eq 1){
1217 # The new page title given is too long, so return an error.
1219 kiriwrite_error("pagetitletoolong");
1223 if ($pagenewdescription_maxlength_check eq 1){
1225 # The new page description given is too long, so return an error.
1227 kiriwrite_error("pagedescriptiontoolong");
1231 if ($pagenewsection_maxlength_check eq 1){
1233 # The new page section given is too long, so return an error.
1235 kiriwrite_error("pagesectiontoolong");
1239 if ($pagenewsettings_maxlength_check eq 1){
1241 # The new page settings given is too long, so return an error.
1243 kiriwrite_error("pagesettingstoolong");
1247 if ($pagenewtemplate_maxlength_check eq 1){
1249 # The new page template given is too long, so return an error.
1251 kiriwrite_error("pagetemplatefilenametoolong");
1255 # Check if the new page filename and new page settings
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
1267 $pagetemplate_filename_check = kiriwrite_variablecheck($pagenewtemplate, "page_filename", 0, 1);
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");
1282 if ($pagenewsettings_settings_check eq 1){
1284 # The new page settings is invalid, so return an error.
1286 kiriwrite_error("pagesettingsinvalid");
1290 if ($pagetemplate_filename_check eq 1){
1292 # The template filename given is invalid, so return an error
1294 kiriwrite_error("templatefilenameinvalid");
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
1309 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
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
1330 kiriwrite_error("databaseinvalidpermissions");
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");
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));
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");
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
1417 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
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
1438 kiriwrite_error("databaseinvalidpermissions");
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));
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");
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;
1497 my @database_templates;
1498 my @template_filenames;
1500 my $template_filename;
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
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};
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));
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));
1565 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
1567 # The template does not exist so process the next template.
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;
1588 $template_list{$template_count}{Selected} = 0;
1600 # Check if certain values are undefined and if they
1601 # are then set them blank (defined).
1607 if (!$data_description){
1608 $data_description = "";
1611 if (!$data_section){
1615 if (!$data_template){
1616 $data_template = "";
1620 if (!$data_content){
1624 if (!$data_settings){
1625 $data_settings = "";
1628 if (!$data_lastmodified){
1629 $data_lastmodified = "";
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();
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
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 });
1722 $kiriwrite_presmodule->addoption($template_list{$template_count}{Name} . " (" . $template_list{$template_count}{Filename} . ")", { Value => $template_list{$template_count}{Filename} });
1730 if ($data_template eq "!none"){
1732 $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
1733 $template_found = 1;
1737 $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none" });
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" });
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});
1811 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", LineBreak => 1});
1814 if ($data_settings eq 2){
1815 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", Selected => 1, LineBreak => 1});
1817 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", LineBreak => 1});
1820 if ($data_settings eq 3){
1821 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", Selected => 1, LineBreak => 1});
1823 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", LineBreak => 1});
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});
1829 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", LineBreak => 1});
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();
1851 # The confirm value is a value other than '0' and '1' so
1854 kiriwrite_error("invalidvalue");
1860 sub kiriwrite_page_multidelete{
1861 #################################################################################
1862 # kiriwrite_page_multidelete: Delete mulitple pages from the database. #
1866 # kiriwrite_page_multidelete(database, confirm, filelist); #
1868 # database Specifies the database to delete multiple pages from. #
1869 # confirm Confirms the action to delete the selected pages from the #
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
1883 # The database name is blank so return an error.
1885 kiriwrite_error("databasenameblank");
1889 # Check if the file list array has any values and return
1890 # an error if it doesn't.
1894 # The page list really is blank so return
1897 kiriwrite_error("nopagesselected");
1900 # Check if the database filename is valid and return an error if
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");
1919 # Check the length the database name and return an error if it's
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");
1932 # Check if the confirm value is blank and if it is, then
1937 # The confirm value is blank so set the confirm value
1946 # The action to delete multiple pages from the database has
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
1960 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
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
1981 kiriwrite_error("databaseinvalidpermissions");
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");
1997 # Get information about the database.
1999 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2001 # Check if any errors had occured while getting the database
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));
2013 my $database_name = $database_info{"DatabaseName"};
2015 # Define some variables for later.
2019 my $filelist_filename;
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.
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"};
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.
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} . ")");
2103 $kiriwrite_presmodule->addtext($deleted_list{$page}{Name} . " (" . $deleted_list{$page}{Filename} . ")");
2106 $kiriwrite_presmodule->addlinebreak();
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
2132 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
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
2153 kiriwrite_error("databaseinvalidpermissions");
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");
2169 # Get information about the database.
2171 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2173 # Check if any errors had occured while getting the database
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));
2185 my $database_name = $database_info{"DatabaseName"};
2187 # Define some variables for later.
2193 my $filelist_filename;
2194 my $filelist_filename_sql;
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.
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
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");
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);
2265 foreach $page (keys %delete_list){
2267 $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
2268 $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $delete_list{$page}{Filename});
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} . ")");
2286 $kiriwrite_presmodule->addtext($delete_list{$page}{Name} . " (" . $delete_list{$page}{Filename} . ")");
2288 $kiriwrite_presmodule->addlinebreak();
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();
2304 # A confirm value other than 0 or 1 is given, so
2307 kiriwrite_error("invaildvalue");
2313 sub kiriwrite_page_multimove{
2314 #################################################################################
2315 # kiriwrite_page_multimove: Move several pages from one database to another #
2320 # kiriwrite_page_multimove(database, newdatabase, confirm, filelist); #
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 #
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");
2352 # Check if the file list is blank and return an error
2357 # The file list really is blank so return
2360 kiriwrite_error("nopagesselected");
2364 # Check if the confirm value is blank and if it is then
2365 # set the confirm value to 0.
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");
2392 # Check if the new database filename is valid and return an error if
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");
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
2422 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
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
2443 kiriwrite_error("oldmovedatabasefileinvalidpermissions");
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");
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
2476 kiriwrite_error("newmovedatabasefileinvalidpermissions");
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");
2492 # Define some values for later.
2500 my $olddatabase_name;
2501 my $newdatabase_name;
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
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));
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
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));
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));
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);
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));
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));
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);
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
2620 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovetopageexists}, $filename);
2626 $moved_list{$move_count}{Filename} = $page_info{"PageFilename"};
2627 $moved_list{$move_count}{Name} = $page_info{"PageName"};
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();
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} . ")");
2656 $kiriwrite_presmodule->addtext($moved_list{$page}{Name} . " (" . $moved_list{$page}{Filename} . ")");
2659 $kiriwrite_presmodule->addlinebreak();
2661 $kiriwrite_presmodule->endbox();
2665 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagesmoved}, $olddatabase_name, $newdatabase_name));
2666 $kiriwrite_presmodule->addlinebreak();
2667 $kiriwrite_presmodule->addlinebreak();
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();
2681 $kiriwrite_presmodule->endbox();
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
2708 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
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
2729 kiriwrite_error("databaseinvalidpermissions");
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");
2745 # Get information about the database.
2747 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2749 # Check if any errors had occured while getting the database
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));
2761 my $database_name = $database_info{"DatabaseName"};
2763 # Define some values for later.
2772 my $filelist_filename;
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.
2805 # Add the page name and file name to the list of
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
2818 # Check if any pages exust and return an error if
2821 if ($pageseek eq 0){
2823 # None of the selected pages exist, so return
2826 kiriwrite_error("nopagesselected");
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
2847 kiriwrite_error("datadirectoryinvalidpermissions");
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
2866 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2868 # The database has invalid permissions set, so process
2869 # the next database.
2875 # Get the database information.
2877 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2879 # Check if any errors had occured while getting the database
2882 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2884 # A database error has occured so process the next
2891 # Check if the database name is undefined and if it is
2892 # then set it blank.
2894 if (!$database_name){
2895 $database_name = "";
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"};
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.
2926 foreach $page (keys %move_list){
2927 $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
2928 $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $move_list{$page}{Filename});
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} . ")");
2943 $kiriwrite_presmodule->addtext($move_list{$page}{Name} . " (" . $move_list{$page}{Filename} . ")");
2945 $kiriwrite_presmodule->addlinebreak();
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}});
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();
2971 # The confirm value is other than 0 or 1, so return
2974 kiriwrite_error("invalidvariable");
2982 sub kiriwrite_page_multicopy{
2983 #################################################################################
2984 # kiriwrite_page_multicopy: Copy several pages from one database to another #
2989 # kiriwrite_page_multicopy(database, newdatabase, confirm, filelist); #
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
3006 # The file list really is blank so return
3009 kiriwrite_error("nopagesselected");
3013 # Check if the confirm value is blank and if it is then
3014 # set the confirm value to 0.
3022 # Check if the database filename is valid and return an error if
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");
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");
3060 # Check if the new database filename is valid and return an error if
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");
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
3090 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
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
3111 kiriwrite_error("oldcopydatabasefileinvalidpermissions");
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
3132 kiriwrite_error("newcopydatabasefileinvalidpermissions");
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");
3148 # Define some values for later.
3154 my @olddatabase_info;
3155 my @olddatabase_page;
3156 my @newdatabase_info;
3157 my @newdatabase_page;
3161 my $olddatabase_name;
3162 my $newdatabase_name;
3168 my $page_description;
3173 my $page_lastmodified;
3176 my $warning_count = 0;
3180 tie(%copied_list, 'Tie::IxHash');
3181 tie(%warning_list, 'Tie::IxHash');
3183 # Get information about the database that the selected pages are moving from.
3185 my %olddatabase_info = $kiriwrite_dbmodule->getdatabaseinfo();
3187 # Check if any errors had occured while getting the database
3190 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3192 # A database error has occured so return an error and
3193 # also the extended error information.
3195 kiriwrite_error("oldcopydatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
3199 $olddatabase_name = $olddatabase_info{"DatabaseName"};
3201 # Get information about the database that the selected pages are moving to.
3203 my %newdatabase_info = $kiriwrite_dbmodule->getseconddatabaseinfo();
3205 # Check if any errors had occured while getting the database
3208 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3210 # A database error has occured so return an error and
3211 # also the extended error information.
3213 kiriwrite_error("newcopydatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
3217 $newdatabase_name = $newdatabase_info{"DatabaseName"};
3219 # Check if the database filename is valid and return an error if
3222 my $newpagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
3224 if ($newpagedatabase_filename_check eq 1){
3226 # The database filename is blank, so return an error.
3228 kiriwrite_error("blankdatabasepageadd");
3230 } elsif ($newpagedatabase_filename_check eq 2){
3232 # The database filename is invalid, so return an error.
3234 kiriwrite_error("databasefilenameinvalid");
3238 foreach $filename (@filelist){
3240 # Get the page information.
3242 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3244 # Check if any errors occured.
3246 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3248 # A database error has occured so return an error and
3249 # also the extended error information.
3251 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3255 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3257 # The page does not exist, so process the next page.
3259 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfrompageerror}, $filename);
3265 $kiriwrite_dbmodule->copypage({ PageFilename => $filename });
3267 # Check if any errors occured while copying the page.
3269 if ($kiriwrite_dbmodule->geterror eq "OldDatabaseError"){
3271 # A database error has occured while copying the pages from
3272 # the old database, so write a warning message.
3274 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfromdatabaseerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3278 } elsif ($kiriwrite_dbmodule->geterror eq "NewDatabaseError"){
3280 # A database error has occured while copying the pages to
3281 # the new database, so write a warning message.
3283 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopytodatabaseerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3287 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3289 # The page with the filename given in the database that
3290 # the page is to be copied from doesn't exist so write
3291 # a warning message.
3293 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfrompagenotexist}, $filename);
3297 } elsif ($kiriwrite_dbmodule->geterror eq "PageAlreadyExists"){
3299 # The page with the filename given in the database that
3300 # the page is to be copied to already exists so write a
3303 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopytopageexists}, $filename);
3309 # Append the copied page (filename and name) to the list of
3312 $copied_list{$page_seek}{Filename} = $filename;
3313 $copied_list{$page_seek}{Name} = $page_info{"PageName"};
3318 # Disconnect from the database server.
3320 $kiriwrite_dbmodule->disconnect();
3322 # Write out a message saying that the pages were moved (if any)
3323 # to the new database (and any warnings given).
3325 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypages}, { Style => "pageheader" });
3326 $kiriwrite_presmodule->addlinebreak();
3327 $kiriwrite_presmodule->addlinebreak();
3331 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{copypagesresultmessage}, $olddatabase_name, $newdatabase_name));
3332 $kiriwrite_presmodule->addlinebreak();
3333 $kiriwrite_presmodule->addlinebreak();
3334 $kiriwrite_presmodule->startbox("datalist");
3335 foreach $page (keys %copied_list){
3336 if (!$copied_list{$page}{Name}){
3337 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
3338 $kiriwrite_presmodule->addtext(" (" . $copied_list{$page}{Filename} . ")");
3340 $kiriwrite_presmodule->addtext($copied_list{$page}{Name} . " (" . $copied_list{$page}{Filename} . ")");
3342 $kiriwrite_presmodule->addlinebreak();
3344 $kiriwrite_presmodule->endbox();
3348 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagescopied}, $olddatabase_name, $newdatabase_name));
3354 $kiriwrite_presmodule->addlinebreak();
3355 $kiriwrite_presmodule->addlinebreak();
3356 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypageswarnings});
3357 $kiriwrite_presmodule->addlinebreak();
3358 $kiriwrite_presmodule->addlinebreak();
3359 $kiriwrite_presmodule->startbox("datalist");
3360 foreach $warning (keys %warning_list){
3361 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
3362 $kiriwrite_presmodule->addlinebreak();
3364 $kiriwrite_presmodule->endbox();
3368 $kiriwrite_presmodule->addlinebreak();
3369 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $olddatabase_name)});
3370 $kiriwrite_presmodule->addtext(" | ");
3371 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $newdatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{viewpagelist}, $newdatabase_name)});
3373 return $kiriwrite_presmodule->grab();
3375 } elsif ($confirm eq 0) {
3377 # The action to copy several pages from one database
3378 # to another has not been confirmed so write a form.
3380 # Connect to the database server.
3382 $kiriwrite_dbmodule->connect();
3384 # Check if any errors occured while connecting to the database server.
3386 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3388 # A database connection error has occured so return
3391 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3395 # Select the database to copy the pages from.
3397 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3399 # Check if any errors occured while selecting the database.
3401 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3403 # The database does not exist, so return an error.
3405 kiriwrite_error("databasemissingfile");
3407 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3409 # The database has invalid permissions set, so return
3412 kiriwrite_error("databaseinvalidpermissions");
3416 # Get information about the database.
3418 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3420 # Check if any errors had occured while getting the database
3423 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3425 # A database error has occured so return an error and
3426 # also the extended error information.
3428 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3432 my $database_name = $database_info{"DatabaseName"};
3434 # Define some values for later.
3448 tie(%copy_list, 'Tie::IxHash');
3449 tie(%db_list, 'Tie::IxHash');
3451 # Process each filename given.
3453 foreach $filename (@filelist){
3455 # Get the page information.
3457 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3459 # Check if any errors occured.
3461 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3463 # A database error has occured so return an error and
3464 # also the extended error information.
3466 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3468 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3470 # The page does not exist, so process the next page.
3476 # Add the page name and file name to the list of
3479 $copy_list{$pageseek}{Filename} = $page_info{"PageFilename"};
3480 $copy_list{$pageseek}{Name} = $page_info{"PageName"};
3482 # Increment the page seek counter.
3488 # Check if any pages exust and return an error if
3491 if ($pageseek eq 0){
3493 # None of the selected pages exist, so return
3496 kiriwrite_error("nopagesselected");
3500 # Get the database filenames and names.
3502 my @database_list = $kiriwrite_dbmodule->getdblist();
3504 # Check if any errors occured while trying to get the list of databases.
3506 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
3508 # The database directory is missing so return an error.
3510 kiriwrite_error("datadirectorymissing");
3512 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
3514 # The database directory has invalid permissions set so return
3517 kiriwrite_error("datadirectoryinvalidpermissions");
3521 # Process each database to get the database name.
3523 foreach $data_file (@database_list){
3525 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
3527 # Check if any errors occured while selecting the database.
3529 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3531 # The database does not exist, so process the next
3536 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3538 # The database has invalid permissions set, so process
3539 # the next database.
3545 # Get the database information.
3547 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3549 # Check if any errors had occured while getting the database
3552 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3554 # A database error has occured so process the next
3561 # Check if the database name is undefined and if it is
3562 # then set it blank.
3564 if (!$database_name){
3565 $database_name = "";
3568 # Append the database filename and name to the list of databases
3569 # to move the pages to.
3571 $db_list{$dbseek}{Filename} = $data_file;
3572 $db_list{$dbseek}{Name} = $database_info{"DatabaseName"};
3578 # Disconnect from the database server.
3580 $kiriwrite_dbmodule->disconnect();
3582 # Write out the form.
3584 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypages}, { Style => "pageheader" });
3585 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
3586 $kiriwrite_presmodule->startbox();
3587 $kiriwrite_presmodule->addhiddendata("mode", "page");
3588 $kiriwrite_presmodule->addhiddendata("action", "multicopy");
3589 $kiriwrite_presmodule->addhiddendata("database", $database);
3590 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
3591 $kiriwrite_presmodule->addhiddendata("confirm", 1);
3595 foreach $page (keys %copy_list){
3596 $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
3597 $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $copy_list{$page}{Filename});
3601 $kiriwrite_presmodule->addlinebreak();
3602 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{copypagesmessage}, $database_name));
3604 $kiriwrite_presmodule->addlinebreak();
3605 $kiriwrite_presmodule->addlinebreak();
3607 $kiriwrite_presmodule->startbox("datalist");
3609 foreach $page (keys %copy_list){
3610 if (!$copy_list{$page}{Name}){
3611 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
3612 $kiriwrite_presmodule->addtext(" (" . $copy_list{$page}{Filename} . ")");
3614 $kiriwrite_presmodule->addtext($copy_list{$page}{Name} . " (" . $copy_list{$page}{Filename} . ")");
3616 $kiriwrite_presmodule->addlinebreak();
3619 $kiriwrite_presmodule->endbox();
3621 $kiriwrite_presmodule->addlinebreak();
3623 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypagesto});
3624 $kiriwrite_presmodule->addselectbox("newdatabase");
3626 foreach $dbname (keys %db_list){
3627 $kiriwrite_presmodule->addoption($db_list{$dbname}{Name} . " (" . $db_list{$dbname}{Filename} . ")", { Value => $db_list{$dbname}{Filename}});
3630 $kiriwrite_presmodule->endselectbox();
3632 $kiriwrite_presmodule->addlinebreak();
3633 $kiriwrite_presmodule->addlinebreak();
3634 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{copypagesbutton});
3635 $kiriwrite_presmodule->addtext(" | ");
3636 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
3638 $kiriwrite_presmodule->endbox();
3639 $kiriwrite_presmodule->endform();
3641 return $kiriwrite_presmodule->grab();
3645 # The confirm value is other than 0 or 1, so return
3648 kiriwrite_error("invalidvariable");
3654 sub kiriwrite_page_multiedit{
3655 #################################################################################
3656 # kiriwrite_page_multiedit: Edit several pages from a database. #
3660 # kiriwrite_page_multiedit(database, newsection, altersection, newtemplate, #
3661 # altertemplate, newsettings, altersettings #
3662 # confirm, filelist); #
3664 # database Specifies the database to edit the pages from. #
3665 # newsection Specifies the new section name to use on the selected pages. #
3666 # altersection Specifies if the section name should be altered. #
3667 # newtemplate Specifies the new template filename to use on the selected #
3669 # altertemplate Specifies if the template filename should be altered. #
3670 # newsettings Specifies the new settings to use on the selected pages. #
3671 # altersettings Specifies if the settings should be altered. #
3672 # confirm Confirms the action to edit the selected pages. #
3673 # filelist The list of file names to edit. #
3674 #################################################################################
3676 # Get the values that were passed to the subroutine.
3678 my ($database, $newsection, $altersection, $newtemplate, $altertemplate, $newsettings, $altersettings, $confirm, @filelist) = @_;
3680 # Check if the file list is blank and return an error
3685 # The file list really is blank so return
3688 kiriwrite_error("nopagesselected");
3692 # Check if certain values are undefined and define them if
3695 if (!$altersection){
3697 # The alter section value is blank, so set it to
3700 $altersection = "off";
3704 if (!$altertemplate){
3706 # The alter template value is blank, so set it to
3709 $altertemplate = "off";
3713 if (!$altersettings){
3715 # The alter settings value is blank, so set it to
3718 $altersettings = "off";
3722 # Check if the database filename is valid and return an error if
3725 my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
3727 if ($pagedatabase_filename_check eq 1){
3729 # The database filename is blank, so return an error.
3731 kiriwrite_error("blankdatabasepageadd");
3733 } elsif ($pagedatabase_filename_check eq 2){
3735 # The database filename is invalid, so return an error.
3737 kiriwrite_error("databasefilenameinvalid");
3741 # Check if the confirm value is blank and if it is then
3742 # set the confirm value to 0.
3752 # The action to edit the template has been confirmed so
3753 # edit the selected pages.
3755 # Check the values recieved at UTF8 compliant before
3758 kiriwrite_variablecheck($newsection, "utf8", 0, 0);
3759 kiriwrite_variablecheck($newtemplate, "utf8", 0, 0);
3760 kiriwrite_variablecheck($newsettings, "utf8", 0, 0);
3762 # Convert the values into proper UTF8 values.
3764 $newsection = kiriwrite_utf8convert($newsection);
3765 $newtemplate = kiriwrite_utf8convert($newtemplate);
3766 $newsettings = kiriwrite_utf8convert($newsettings);
3768 # Check the length of the variables.
3770 kiriwrite_variablecheck($altersection, "maxlength", 3, 0);
3771 kiriwrite_variablecheck($altertemplate, "maxlength", 3, 0);
3772 kiriwrite_variablecheck($altersettings, "maxlength", 3, 0);
3773 my $newsection_maxlength_check = kiriwrite_variablecheck($newsection, "maxlength", 256, 1);
3774 my $newtemplate_maxlength_check = kiriwrite_variablecheck($newtemplate, "maxlength", 256, 1);
3775 my $newtemplate_filename_check = kiriwrite_variablecheck($newtemplate, "filename", 0, 1);
3776 my $newsettings_maxlength_check = kiriwrite_variablecheck($newsettings, "maxlength", 1, 1);
3777 my $newsettings_settings_check = kiriwrite_variablecheck($newsettings, "pagesetting", 0, 1);
3779 # Check the values and return an error if needed.
3781 if ($newsection_maxlength_check eq 1 && $altersection eq "on"){
3783 # The new section name is too long, so return an
3786 kiriwrite_error("pagesectiontoolong");
3790 if ($newtemplate_maxlength_check eq 1 && $altertemplate eq "on"){
3792 # The new template name is too long, so return an
3795 kiriwrite_error("templatefilenametoolong");
3799 # Check if the template filename is set to !skip or !none
3800 # and skip this check if it is.
3802 if ($newtemplate eq "!skip" || $newtemplate eq "!none"){
3804 # Skip this check as the template filename is
3808 if ($newtemplate_filename_check eq 1 && $altertemplate eq "on" || $newtemplate_filename_check eq 2 && $altertemplate eq "on"){
3810 # The new template filename is invalid, so return
3813 kiriwrite_error("templatefilenameinvalid");
3818 if ($newsettings_maxlength_check eq 1 && $altertemplate eq "on"){
3820 # The new settings value is too long, so return
3823 kiriwrite_error("pagesettingstoolong");
3827 if ($newsettings_settings_check eq 1 && $altersettings eq "on"){
3829 # The new settings value is invalid, so return
3832 kiriwrite_error("pagesettingsinvalid");
3836 # Define some values for later.
3848 my $warning_count = 0;
3850 tie(%edited_list, 'Tie::IxHash');
3851 tie(%warning_list, 'Tie::IxHash');
3853 # Check if the template filename is !skip and
3854 # set the alter template value to off if it
3857 if ($newtemplate eq "!skip"){
3859 $altertemplate = "off";
3863 # Check if all values are not selected and return
3864 # an error if they are.
3866 if ($altersection ne "on" && $altertemplate ne "on" && $altersettings ne "on"){
3868 # All values are not selected so return
3871 kiriwrite_error("noeditvaluesselected");
3875 # Connect to the database server.
3877 $kiriwrite_dbmodule->connect();
3879 # Check if any errors occured while connecting to the database server.
3881 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3883 # A database connection error has occured so return
3886 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3890 # Select the database.
3892 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3894 # Check if any errors occured while selecting the database.
3896 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3898 # The database does not exist, so return an error.
3900 kiriwrite_error("databasemissingfile");
3902 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3904 # The database has invalid permissions set, so return
3907 kiriwrite_error("databaseinvalidpermissions");
3911 # Check if the database has read and write permissions.
3913 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
3915 if ($database_permissions eq 1){
3917 # The database permissions are invalid so return an error.
3919 kiriwrite_error("databaseinvalidpermissions");
3923 # Get information about the database.
3925 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3927 # Check if any errors had occured while getting the database
3930 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3932 # A database error has occured so return an error and
3933 # also the extended error information.
3935 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3939 my $database_name = $database_info{"DatabaseName"};
3941 # Edit the selected pages.
3943 foreach $filename (@filelist){
3945 # Get the page information.
3947 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3949 # Check if any errors occured.
3951 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3953 # A database error has occured so write a warning message.
3955 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3957 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3959 # The page does not exist, so write a warning message.
3961 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepagedoesnotexist}, $filename);
3967 # Check if the page section should be altered.
3969 if ($altersection eq "on"){
3971 # Change the section name.
3973 $page_info{"PageSection"} = $newsection;
3977 # Check if the page template should be altered.
3979 if ($altertemplate eq "on"){
3981 # Change the page template filename.
3983 $page_info{"PageTemplate"} = $newtemplate;
3987 # Check if the page settings should be altered.
3989 if ($altersettings eq "on"){
3991 # Change the page settings value.
3993 $page_info{"PageSettings"} = $newsettings;
3997 # Edit the selected page.
3999 $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"} });
4001 # Check if any errors occured while editing the page.
4003 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4005 # A database error has occured so write a warning message
4006 # with the extended error information.
4008 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
4012 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4014 # The pages does not exist in the database.
4016 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepagedoesnotexist}, $filename);
4020 } elsif ($kiriwrite_dbmodule->geterror eq "PageExists"){
4022 # A page already exists with the new filename.
4024 kiriwrite_error("pagefilenameexists");
4028 # The page has been edited so write a message saying that the page
4031 $edited_list{$pageedited}{Filename} = $page_info{"PageFilename"};
4032 $edited_list{$pageedited}{Name} = $page_info{"PageName"};
4034 # Increment the counter of edited pages.
4040 # Disconnect from the database server.
4042 $kiriwrite_dbmodule->disconnect();
4044 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multiedit}, { Style => "pageheader" });
4045 $kiriwrite_presmodule->addlinebreak();
4046 $kiriwrite_presmodule->addlinebreak();
4048 # Check if the counter of edited pages is 0 and if it is
4049 # then write a message saying that no pages were edited
4050 # else write a message listing all of the pages edited.
4052 if ($pageedited eq 0){
4054 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagesedited}, $database_name));
4058 # Write out the message saying that the selected pages
4061 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagesedited}, $database_name));
4062 $kiriwrite_presmodule->addlinebreak();
4063 $kiriwrite_presmodule->addlinebreak();
4064 $kiriwrite_presmodule->startbox("datalist");
4066 foreach $page (keys %edited_list){
4068 # Check if the page name is not blank.
4070 if (!$edited_list{$page}{Name}){
4072 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
4073 $kiriwrite_presmodule->addtext(" (" . $edited_list{$page}{Filename} . ")");
4077 $kiriwrite_presmodule->addtext($edited_list{$page}{Name});
4078 $kiriwrite_presmodule->addtext(" (" . $edited_list{$page}{Filename} . ")");
4082 $kiriwrite_presmodule->addlinebreak();
4085 $kiriwrite_presmodule->endbox();
4089 # Check if any warnings have occured and write a message
4090 # if any warnings did occur.
4094 # One or several warnings have occured so
4097 $kiriwrite_presmodule->addlinebreak();
4098 $kiriwrite_presmodule->addlinebreak();
4099 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{editedpageswarnings});
4100 $kiriwrite_presmodule->addlinebreak();
4101 $kiriwrite_presmodule->addlinebreak();
4102 $kiriwrite_presmodule->startbox("datalist");
4103 foreach $warning (keys %warning_list) {
4104 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
4105 $kiriwrite_presmodule->addlinebreak();
4107 $kiriwrite_presmodule->endbox();
4111 # Write a link going back to the page list for
4112 # the selected database.
4114 $kiriwrite_presmodule->addlinebreak();
4115 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
4117 return $kiriwrite_presmodule->grab();
4119 } elsif ($confirm eq 0){
4121 # The action to edit the template has not been confirmed
4122 # so write a form out instead.
4124 # Connect to the database server.
4126 $kiriwrite_dbmodule->connect();
4128 # Check if any errors occured while connecting to the database server.
4130 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4132 # A database connection error has occured so return
4135 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4139 # Select the database.
4141 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
4143 # Check if any errors occured while selecting the database.
4145 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4147 # The database does not exist, so return an error.
4149 kiriwrite_error("databasemissingfile");
4151 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4153 # The database has invalid permissions set, so return
4156 kiriwrite_error("databaseinvalidpermissions");
4160 # Check if the database has read and write permissions.
4162 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
4164 if ($database_permissions eq 1){
4166 # The database permissions are invalid so return an error.
4168 kiriwrite_error("databaseinvalidpermissions");
4172 # Get information about the database.
4174 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4176 # Check if any errors had occured while getting the database
4179 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4181 # A database error has occured so return an error and
4182 # also the extended error information.
4184 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4188 my $database_name = $database_info{"DatabaseName"};
4190 # Define some variables for later.
4198 my $filelist_filename;
4205 my $template_filename;
4206 my $template_warning;
4207 my $templateseek = 0;
4209 tie(%edit_list, 'Tie::IxHash');
4210 tie(%template_list, 'Tie::IxHash');
4212 # Get the information about each page that is going
4215 foreach $filelist_filename (@filelist){
4217 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
4219 # Check if any errors occured.
4221 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4223 # A database error has occured so return an error and
4224 # also the extended error information.
4226 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4228 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4230 # The page does not exist, so process the next page.
4236 # Add the page name and file name to the list of
4239 $edit_list{$pageseek}{Filename} = $page_info{"PageFilename"};
4240 $edit_list{$pageseek}{Name} = $page_info{"PageName"};
4242 # Increment the page seek counter and reset the
4249 # Check if any pages were found in the database and return
4252 if ($pageseek eq 0){
4254 # No pages were found so return an error.
4256 kiriwrite_error("nopagesselected");
4260 # Connect to the template database.
4262 $kiriwrite_dbmodule->connecttemplate();
4264 # Check if any errors had occured.
4266 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
4268 # The template database does not exist so write a warning
4271 $template_warning = $kiriwrite_lang->{pages}->{templatedatabasenotexistmultieditkeep};
4273 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
4275 # The template database has invalid permissions set so
4278 $template_warning = $kiriwrite_lang->{pages}->{templatedatabasepermissionsinvalidmultieditkeep};
4282 if (!$template_warning){
4284 # Get the list of templates available.
4286 @templates_list = $kiriwrite_dbmodule->gettemplatelist();
4288 # Check if any errors had occured.
4290 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
4292 # A database error occured while getting the list
4293 # of templates so write a warning message with the
4294 # extended error information.
4296 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrormultieditkeep}, $kiriwrite_dbmodule->geterror(1));
4300 if (!$template_warning){
4302 foreach $template_filename (@templates_list){
4304 # Get the template data.
4306 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
4308 # Check if any error occured while getting the template information.
4310 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
4312 # A database error has occured, so write a warning message with
4313 # the extended error information.
4315 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrormultieditkeep}, $kiriwrite_dbmodule->geterror(1));
4317 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
4319 # The template does not exist, so process the next page.
4325 # Add the template to the list of templates.
4327 $template_list{$templateseek}{Filename} = $template_info{"TemplateFilename"};
4328 $template_list{$templateseek}{Name} = $template_info{"TemplateName"};
4338 # Disconnect from the template database.
4340 $kiriwrite_dbmodule->disconnecttemplate();
4342 # Disconnect from the database server.
4344 $kiriwrite_dbmodule->disconnect();
4346 # Write a form for editing the selected pages.
4348 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multiedit}, { Style => "pageheader" });
4349 $kiriwrite_presmodule->addlinebreak();
4350 $kiriwrite_presmodule->addlinebreak();
4351 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
4352 $kiriwrite_presmodule->startbox();
4353 $kiriwrite_presmodule->addhiddendata("mode", "page");
4354 $kiriwrite_presmodule->addhiddendata("action", "multiedit");
4355 $kiriwrite_presmodule->addhiddendata("database", $database);
4356 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
4357 $kiriwrite_presmodule->addhiddendata("confirm", 1);
4361 foreach $page (keys %edit_list){
4362 $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
4363 $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $edit_list{$page}{Filename});
4367 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{multieditmessage}, $database_name));
4368 $kiriwrite_presmodule->addlinebreak();
4369 $kiriwrite_presmodule->addlinebreak();
4370 $kiriwrite_presmodule->startbox("datalist");
4372 foreach $page (keys %edit_list){
4373 if (!$edit_list{$page}{Name}){
4374 $kiriwrite_presmodule->additalictext("No Name");
4375 $kiriwrite_presmodule->addtext(" (" . $edit_list{$page}{Filename} . ")");
4377 $kiriwrite_presmodule->addtext($edit_list{$page}{Name} . " (" . $edit_list{$page}{Filename} . ")");
4380 $kiriwrite_presmodule->addlinebreak();
4383 $kiriwrite_presmodule->endbox();
4384 $kiriwrite_presmodule->addlinebreak();
4385 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multieditmessagevalues});
4386 $kiriwrite_presmodule->addlinebreak();
4387 $kiriwrite_presmodule->addlinebreak();
4388 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
4390 $kiriwrite_presmodule->startheader();
4391 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{alter}, { Style => "tablecellheader" });
4392 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
4393 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
4394 $kiriwrite_presmodule->endheader();
4396 $kiriwrite_presmodule->startrow();
4397 $kiriwrite_presmodule->addcell("tablecell1");
4398 $kiriwrite_presmodule->addcheckbox("altersection");
4399 $kiriwrite_presmodule->endcell();
4400 $kiriwrite_presmodule->addcell("tablecell1");
4401 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
4402 $kiriwrite_presmodule->endcell();
4403 $kiriwrite_presmodule->addcell("tablecell1");
4404 $kiriwrite_presmodule->addinputbox("newsection", { Size => 64, MaxLength => 256 });
4405 $kiriwrite_presmodule->endcell();
4406 $kiriwrite_presmodule->endrow();
4408 $kiriwrite_presmodule->startrow();
4409 $kiriwrite_presmodule->addcell("tablecell2");
4410 $kiriwrite_presmodule->addcheckbox("altertemplate");
4411 $kiriwrite_presmodule->endcell();
4412 $kiriwrite_presmodule->addcell("tablecell2");
4413 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
4414 $kiriwrite_presmodule->endcell();
4416 $kiriwrite_presmodule->addcell("tablecell2");
4418 if ($template_warning){
4420 $kiriwrite_presmodule->addhiddendata("newtemplate", "!skip");
4421 $kiriwrite_presmodule->addtext($template_warning);
4425 $kiriwrite_presmodule->addselectbox("newtemplate");
4427 foreach $template (keys %template_list){
4429 $kiriwrite_presmodule->addoption($template_list{$template}{Name} . " (" . $template_list{$template}{Filename} . ")", { Value => $template_list{$template}{Filename}});
4433 $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
4434 $kiriwrite_presmodule->endselectbox();
4437 $kiriwrite_presmodule->endcell();
4438 $kiriwrite_presmodule->endrow();
4440 $kiriwrite_presmodule->startrow();
4441 $kiriwrite_presmodule->addcell("tablecell1");
4442 $kiriwrite_presmodule->addcheckbox("altersettings");
4443 $kiriwrite_presmodule->endcell();
4444 $kiriwrite_presmodule->addcell("tablecell1");
4445 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
4446 $kiriwrite_presmodule->endcell();
4447 $kiriwrite_presmodule->addcell("tablecell1");
4448 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => 1 , Selected => 1});
4449 $kiriwrite_presmodule->addlinebreak();
4450 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => 2 });
4451 $kiriwrite_presmodule->addlinebreak();
4452 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => 3 });
4453 $kiriwrite_presmodule->addlinebreak();
4454 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => 0 });
4455 $kiriwrite_presmodule->endcell();
4456 $kiriwrite_presmodule->endrow();
4458 $kiriwrite_presmodule->endtable();
4459 $kiriwrite_presmodule->addlinebreak();
4460 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{editpagesbutton});
4461 $kiriwrite_presmodule->addtext(" | ");
4462 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
4463 $kiriwrite_presmodule->addtext(" | ");
4464 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
4465 $kiriwrite_presmodule->endbox();
4466 $kiriwrite_presmodule->endform();
4468 return $kiriwrite_presmodule->grab();
4472 # The confirm value is something else other than
4473 # 1 or 0, so return an error.
4475 kiriwrite_error("invalidvariable");
4481 sub kiriwrite_page_list{
4482 #################################################################################
4483 # kiriwrite_page_list: Lists pages from an database. #
4487 # kiriwrite_page_list([database]); #
4489 # database Specifies the database to retrieve the pages from. #
4490 #################################################################################
4492 # Get the database file name from what was passed to the subroutine.
4494 my ($database_file) = @_;
4496 # Check if the database_file variable is empty, if it is then print out a
4497 # select box asking the user to select a database from the list.
4499 if (!$database_file) {
4501 # Define the variables required for this section.
4505 my @databasefilenames;
4508 my $dbfilename = "";
4511 my $data_file_length = 0;
4512 my $data_file_friendly = "";
4513 my $database_name = "";
4514 my $file_permissions = "";
4516 # Connect to the database server.
4518 $kiriwrite_dbmodule->connect();
4520 # Check if any errors occured while connecting to the database server.
4522 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4524 # A database connection error has occured so return
4527 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4531 # Open the data directory and get all of the databases.
4533 @database_list = $kiriwrite_dbmodule->getdblist();
4535 # Check if any errors occured while trying to get the list of databases.
4537 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
4539 # The database directory is missing so return an error.
4541 kiriwrite_error("datadirectorymissing");
4543 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
4545 # The database directory has invalid permissions set so return
4548 kiriwrite_error("datadirectoryinvalidpermissions");
4552 # Get the information about each database (the short name and friendly name).
4554 foreach $data_file (@database_list){
4556 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
4558 # Check if any errors occured while selecting the database.
4560 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4562 # The database does not exist, so process the next
4567 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4569 # The database has invalid permissions set, so process
4570 # the next database.
4576 # Get the database information.
4578 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4580 # Check if any errors had occured while getting the database
4583 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4585 # A database error has occured, so process the next
4592 # Set the database name.
4594 $database_name = $database_info{"DatabaseName"};
4596 # Check if the database name is undefined and if it is
4597 # then set it blank.
4599 if (!$database_name){
4600 $database_name = "";
4603 # Append the database to the list of databases available.
4605 push(@databasefilenames, $data_file);
4606 push(@databasenames, $database_name);
4610 # Disconnect from the database server.
4612 $kiriwrite_dbmodule->disconnect();
4614 # Write the page data.
4616 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{viewpages}, { Style => "pageheader" });
4617 $kiriwrite_presmodule->addlinebreak();
4618 $kiriwrite_presmodule->addlinebreak();
4619 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{nodatabaseselected});
4620 $kiriwrite_presmodule->addlinebreak();
4621 $kiriwrite_presmodule->addlinebreak();
4622 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"});
4623 $kiriwrite_presmodule->startbox();
4624 $kiriwrite_presmodule->addhiddendata("mode", "page");
4625 $kiriwrite_presmodule->addhiddendata("action", "view");
4626 $kiriwrite_presmodule->addselectbox("database");
4627 foreach $dbfilename (@databasefilenames){
4628 $dbname = $databasenames[$dbseek];
4630 $kiriwrite_presmodule->addoption($dbname . " (" . $dbfilename . ")", { Value => $dbfilename });
4632 $kiriwrite_presmodule->endselectbox();
4633 $kiriwrite_presmodule->addtext(" | ");
4634 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{viewbutton});
4635 $kiriwrite_presmodule->endbox();
4636 $kiriwrite_presmodule->endform();
4638 return $kiriwrite_presmodule->grab();
4645 my $pagemultioptions = "";
4647 my $tablestyle = "";
4649 my $page_filename = "";
4651 my $page_description = "";
4652 my $page_modified = "";
4654 my $tablestyletype = 0;
4656 my $db_file_notblank = 0;
4658 tie(%database_info, 'Tie::IxHash');
4659 tie(%page_info, 'Tie::IxHash');
4661 # The database_file variable is not blank, so print out a list of pages from
4662 # the selected database.
4664 # Preform a variable check on the database filename to make sure that it is
4665 # valid before using it.
4667 kiriwrite_variablecheck($database_file, "filename", "", 0);
4668 kiriwrite_variablecheck($database_file, "maxlength", 32, 0);
4670 # Connect to the database server.
4672 $kiriwrite_dbmodule->connect();
4674 # Check if any errors occured while connecting to the database server.
4676 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4678 # A database connection error has occured so return
4681 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4685 # Select the database.
4687 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_file });
4689 # Check if any errors had occured while selecting the database.
4691 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4693 # The database does not exist, so return an error.
4695 kiriwrite_error("databasemissingfile");
4697 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4699 # The database has invalid permissions set, so return
4702 kiriwrite_error("databaseinvalidpermissions");
4706 # Get information about the database.
4708 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4710 $db_name = $database_info{"DatabaseName"};
4712 # Check if any errors had occured while getting the database
4715 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4717 # A database error has occured so return an error and
4718 # also the extended error information.
4720 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4724 # Get the list of pages.
4726 @database_pages = $kiriwrite_dbmodule->getpagelist();
4728 # Check if any errors had occured while getting the list of pages.
4730 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4732 # A database error has occured so return an error and
4733 # also the extended error information.
4735 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4739 # Check if there are any page names in the database array.
4741 if (@database_pages){
4743 # Write the start of the page.
4745 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagelist}, $db_name), { Style => "pageheader" });
4746 $kiriwrite_presmodule->addlinebreak();
4747 $kiriwrite_presmodule->addlinebreak();
4748 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
4749 $kiriwrite_presmodule->startbox();
4750 $kiriwrite_presmodule->addhiddendata("mode", "page");
4751 $kiriwrite_presmodule->addhiddendata("database", $database_file);
4752 $kiriwrite_presmodule->addhiddendata("type", "multiple");
4754 # Write the list of multiple selection options.
4756 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
4757 $kiriwrite_presmodule->addtext(" | ");
4758 $kiriwrite_presmodule->addbutton("action", { Value => "multidelete", Description => $kiriwrite_lang->{pages}->{deleteselectedbutton} });
4759 $kiriwrite_presmodule->addtext(" | ");
4760 $kiriwrite_presmodule->addbutton("action", { Value => "multimove", Description => $kiriwrite_lang->{pages}->{moveselectedbutton} });
4761 $kiriwrite_presmodule->addtext(" | ");
4762 $kiriwrite_presmodule->addbutton("action", { Value => "multicopy", Description => $kiriwrite_lang->{pages}->{copyselectedbutton} });
4763 $kiriwrite_presmodule->addtext(" | ");
4764 $kiriwrite_presmodule->addbutton("action", { Value => "multiedit", Description => $kiriwrite_lang->{pages}->{editselectedbutton} });
4766 $kiriwrite_presmodule->addlinebreak();
4767 $kiriwrite_presmodule->addlinebreak();
4768 $kiriwrite_presmodule->endbox();
4770 # Write the table header.
4772 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
4773 $kiriwrite_presmodule->startheader();
4774 $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
4775 $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagefilename}, { Style => "tablecellheader" });
4776 $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagename}, { Style => "tablecellheader" });
4777 $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagedescription}, { Style => "tablecellheader" });
4778 $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{lastmodified}, { Style => "tablecellheader" });
4779 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
4780 $kiriwrite_presmodule->endheader();
4782 # Process each page filename and get the page information.
4784 foreach $page_filename (@database_pages){
4786 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page_filename, Reduced => 1 });
4788 # Check if any errors have occured.
4790 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4792 # A database error has occured so return an error and
4793 # also the extended error information.
4795 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4797 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4799 # The page does not exist, so process the next page.
4807 $page_filename = $page_info{"PageFilename"};
4808 $page_name = $page_info{"PageName"};
4809 $page_description = $page_info{"PageDescription"};
4810 $page_modified = $page_info{"PageLastModified"};
4812 # Set the table cell style.
4814 if ($tablestyletype eq 0){
4816 $tablestyle = "tablecell1";
4817 $tablestyletype = 1;
4821 $tablestyle = "tablecell2";
4822 $tablestyletype = 0;
4826 # Write out the row of data.
4828 $kiriwrite_presmodule->startrow();
4829 $kiriwrite_presmodule->addcell($tablestyle);
4830 $kiriwrite_presmodule->addhiddendata("id[" . $page_count . "]", $page_filename);
4831 $kiriwrite_presmodule->addcheckbox("name[" . $page_count . "]");
4832 $kiriwrite_presmodule->endcell();
4833 $kiriwrite_presmodule->addcell($tablestyle);
4834 $kiriwrite_presmodule->addtext($page_filename);
4835 $kiriwrite_presmodule->endcell();
4836 $kiriwrite_presmodule->addcell($tablestyle);
4840 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
4844 $kiriwrite_presmodule->addtext($page_name);
4848 $kiriwrite_presmodule->endcell();
4849 $kiriwrite_presmodule->addcell($tablestyle);
4851 if (!$page_description){
4853 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
4857 $kiriwrite_presmodule->addtext($page_description);
4861 $kiriwrite_presmodule->endcell();
4862 $kiriwrite_presmodule->addcell($tablestyle);
4864 if (!$page_modified){
4866 $kiriwrite_presmodule->additalictext("No Date");
4870 $kiriwrite_presmodule->addtext($page_modified);
4874 $kiriwrite_presmodule->endcell();
4875 $kiriwrite_presmodule->addcell($tablestyle);
4876 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=edit&database=" . $database_file . "&page=" . $page_filename, { Text => $kiriwrite_lang->{options}->{edit} });
4877 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=delete&database=" . $database_file . "&page=" . $page_filename, { Text => $kiriwrite_lang->{options}->{delete} });
4878 $kiriwrite_presmodule->endcell();
4879 $kiriwrite_presmodule->endrow();
4881 # Increment the counter.
4887 # Disconnect from the database server.
4889 $kiriwrite_dbmodule->disconnect();
4891 $kiriwrite_presmodule->endtable();
4892 $kiriwrite_presmodule->startbox();
4893 $kiriwrite_presmodule->addhiddendata("count", $page_count);
4894 $kiriwrite_presmodule->endbox();
4895 $kiriwrite_presmodule->endform();
4897 if (!@database_pages || !$page_count){
4899 # There were no values in the database pages array and
4900 # the page count had not been incremented so write a
4901 # message saying that there were no pages in the
4904 $kiriwrite_presmodule->clear();
4905 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagelist}, $db_name), { Style => "pageheader" });
4906 $kiriwrite_presmodule->addlinebreak();
4907 $kiriwrite_presmodule->addlinebreak();
4908 $kiriwrite_presmodule->startbox("errorbox");
4909 $kiriwrite_presmodule->enterdata($kiriwrite_lang->{pages}->{nopagesindatabase});
4910 $kiriwrite_presmodule->endbox();
4914 return $kiriwrite_presmodule->grab();
4920 sub kiriwrite_template_add{
4921 #################################################################################
4922 # kiriwrite_template_add: Add a template to the template folder #
4926 # kiriwrite_template_add(filename, name, description, layout, confirm); #
4928 # filename The filename of the new template. #
4929 # name The name of the template. #
4930 # description The description of the template. #
4931 # layout The layout of the new template. #
4932 # confirm Confirm the action of creating a new template. #
4933 #################################################################################
4935 # Get the variables that were passed to the subroutine.
4937 my ($templatefilename, $templatename, $templatedescription, $templatelayout, $confirm) = @_;
4939 # Check if the confirm value is blank and if it is then set confirm to 0.
4943 # The confirm value is blank, so set the value of confirm to 0.
4951 # Check (validate) each of the values.
4953 kiriwrite_variablecheck($templatename, "utf8", 0, 0);
4954 kiriwrite_variablecheck($templatedescription, "utf8", 0, 0);
4955 kiriwrite_variablecheck($templatelayout, "utf8", 0, 0);
4957 # Convert the values into proper UTF8 strings that can be used.
4959 $templatename = kiriwrite_utf8convert($templatename);
4960 $templatedescription = kiriwrite_utf8convert($templatedescription);
4961 $templatelayout = kiriwrite_utf8convert($templatelayout);
4963 # Check the length of the converted UTF8 strings.
4965 my $templatefilename_length_check = kiriwrite_variablecheck($templatefilename, "maxlength", 64, 1);
4966 my $templatename_length_check = kiriwrite_variablecheck($templatename, "maxlength", 512, 1);
4967 my $templatedescription_length_check = kiriwrite_variablecheck($templatedescription, "maxlength", 512, 1);
4968 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
4970 if ($templatefilename_length_check eq 1){
4972 # The template filename length is too long, so return an error.
4974 kiriwrite_error("templatefilenametoolong");
4978 if ($templatename_length_check eq 1){
4980 # The template name length is too long, so return an error.
4982 kiriwrite_error("templatenametoolong");
4987 if ($templatedescription_length_check eq 1){
4989 # The template description length is too long, so return an error.
4991 kiriwrite_error("templatedescriptiontoolong");
4995 # Check if the filename specified is a valid filename.
4997 kiriwrite_variablecheck($templatefilename, "filename", "", 0);
4999 # Connect to the template server.
5001 $kiriwrite_dbmodule->connect();
5003 # Connect to the template database.
5005 $kiriwrite_dbmodule->connecttemplate(1);
5007 # Check if any errors had occured.
5009 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5011 # The template database has invalid permissions set so
5014 kiriwrite_error("templatedatabaseinvalidpermissions");
5018 $kiriwrite_dbmodule->addtemplate({ TemplateFilename => $templatefilename, TemplateName => $templatename, TemplateDescription => $templatedescription, TemplateLayout => $templatelayout });
5020 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5022 # A database error has occured so return an error along
5023 # with the extended error information.
5025 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5027 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5029 # The template database has invalid permissions set so return
5032 kiriwrite_error("templatedatabaseinvalidpermissions");
5034 } elsif ($kiriwrite_dbmodule->geterror eq "TemplatePageExists"){
5036 # The template page already exists so return an error.
5038 kiriwrite_error("templatefilenameexists");
5040 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseUncreateable"){
5042 # The template databases is uncreatable so return an error.
5044 kiriwrite_error("templatedatabasenotcreated");
5048 $kiriwrite_dbmodule->disconnecttemplate();
5050 # Disconnect from the template server.
5052 $kiriwrite_dbmodule->disconnect();
5054 # Print out the confirmation message.
5056 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{addedtemplate}, { Style => "pageheader" });
5057 $kiriwrite_presmodule->addlinebreak();
5058 $kiriwrite_presmodule->addlinebreak();
5059 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{addedtemplatemessage}, $templatename));
5060 $kiriwrite_presmodule->addlinebreak();
5061 $kiriwrite_presmodule->addlinebreak();
5062 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5063 return $kiriwrite_presmodule->grab();
5066 # No confirmation was made, so print out a form for adding a template.
5068 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{addtemplate}, { Style => "pageheader" });
5069 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5070 $kiriwrite_presmodule->startbox();
5071 $kiriwrite_presmodule->addhiddendata("mode", "template");
5072 $kiriwrite_presmodule->addhiddendata("action", "add");
5073 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5074 $kiriwrite_presmodule->addlinebreak();
5075 $kiriwrite_presmodule->starttable("", { CellSpacing => 0, CellPadding => 5 });
5077 $kiriwrite_presmodule->startheader();
5078 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
5079 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
5080 $kiriwrite_presmodule->endheader();
5082 $kiriwrite_presmodule->startrow();
5083 $kiriwrite_presmodule->addcell("tablecell1");
5084 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatename});
5085 $kiriwrite_presmodule->endcell();
5086 $kiriwrite_presmodule->addcell("tablecell2");
5087 $kiriwrite_presmodule->addinputbox("templatename", { Size => 64, MaxLength => 512 });
5088 $kiriwrite_presmodule->endcell();
5089 $kiriwrite_presmodule->endrow();
5091 $kiriwrite_presmodule->startrow();
5092 $kiriwrite_presmodule->addcell("tablecell1");
5093 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatedescription});
5094 $kiriwrite_presmodule->endcell();
5095 $kiriwrite_presmodule->addcell("tablecell2");
5096 $kiriwrite_presmodule->addinputbox("templatedescription", { Size => 64, MaxLength => 512 });
5097 $kiriwrite_presmodule->endcell();
5098 $kiriwrite_presmodule->endrow();
5100 $kiriwrite_presmodule->startrow();
5101 $kiriwrite_presmodule->addcell("tablecell1");
5102 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatefilename});
5103 $kiriwrite_presmodule->endcell();
5104 $kiriwrite_presmodule->addcell("tablecell2");
5105 $kiriwrite_presmodule->addinputbox("templatefilename", { Size => 32, MaxLength => 64 });
5106 $kiriwrite_presmodule->endcell();
5107 $kiriwrite_presmodule->endrow();
5109 $kiriwrite_presmodule->startrow();
5110 $kiriwrite_presmodule->addcell("tablecell1");
5111 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatelayout});
5112 $kiriwrite_presmodule->endcell();
5113 $kiriwrite_presmodule->addcell("tablecell2");
5114 $kiriwrite_presmodule->addtextbox("templatelayout", { Columns => 50, Rows => 10 });
5115 $kiriwrite_presmodule->addlinebreak();
5116 $kiriwrite_presmodule->addlinebreak();
5117 $kiriwrite_presmodule->startbox("datalist");
5118 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
5119 $kiriwrite_presmodule->addlinebreak();
5120 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagecontent});
5121 $kiriwrite_presmodule->addlinebreak();
5122 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
5123 $kiriwrite_presmodule->addlinebreak();
5124 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
5125 $kiriwrite_presmodule->addlinebreak();
5126 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
5127 $kiriwrite_presmodule->addlinebreak();
5128 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
5129 $kiriwrite_presmodule->addlinebreak();
5130 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
5131 $kiriwrite_presmodule->addlinebreak();
5132 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
5133 $kiriwrite_presmodule->addlinebreak();
5134 $kiriwrite_presmodule->endbox();
5135 $kiriwrite_presmodule->endcell();
5136 $kiriwrite_presmodule->endrow();
5137 $kiriwrite_presmodule->endtable();
5139 $kiriwrite_presmodule->addlinebreak();
5140 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{addtemplatebutton});
5141 $kiriwrite_presmodule->addtext(" | ");
5142 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
5143 $kiriwrite_presmodule->addtext(" | ");
5144 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template" , { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5146 $kiriwrite_presmodule->endbox();
5147 $kiriwrite_presmodule->endform();
5149 return $kiriwrite_presmodule->grab();
5156 sub kiriwrite_template_edit{
5157 #################################################################################
5158 # kiriwrite_template_edit: Edit a template from the template folder. #
5162 # kiriwrite_template_edit(filename, [newfilename], [newname], [newdescription], #
5163 # [templatelayout], [confirm]); #
5165 # filename The current filename of the template to edit. #
5166 # newfilename The new filename of the template to edit. #
5167 # newname The new name of the template being edited. #
5168 # newdescription The new description of the template being edited. #
5169 # templatelayout The modified/altered template layout. #
5170 # confirm Confirms the action to edit a template and its #
5172 #################################################################################
5174 # Get all the variables that have been passed to the subroutine.
5176 my ($templatefilename, $templatenewfilename, $templatenewname, $templatenewdescription, $templatelayout, $confirm) = @_;
5178 # Check if the confirm variable is blank, if it is then
5179 # set confirm to '0'
5183 # confirm is uninitalised/blank, so set the value of confirm
5190 # Check if the template filename is blank and if it is, then return
5193 if (!$templatefilename){
5195 kiriwrite_error("templatefilenameblank");
5199 # Connect to the database server.
5201 $kiriwrite_dbmodule->connect();
5203 # Check if any errors occured while connecting to the database server.
5205 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5207 # A database connection error has occured so return
5210 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5216 # Check certain strings to see if they UTF8 compiliant.
5218 kiriwrite_variablecheck($templatenewname, "utf8", 0, 0);
5219 kiriwrite_variablecheck($templatenewdescription, "utf8", 0, 0);
5220 kiriwrite_variablecheck($templatelayout, "utf8", 0, 0);
5222 # Convert the values into proper UTF8 strings.
5224 $templatenewname = kiriwrite_utf8convert($templatenewname);
5225 $templatenewdescription = kiriwrite_utf8convert($templatenewdescription);
5226 $templatelayout = kiriwrite_utf8convert($templatelayout);
5228 # Check if the filenames recieved are valid filenames.
5230 kiriwrite_variablecheck($templatenewfilename, "maxlength", 64, 0);
5231 kiriwrite_variablecheck($templatenewdescription, "maxlength", 512, 0);
5232 kiriwrite_variablecheck($templatenewname, "maxlength", 512, 0);
5233 kiriwrite_variablecheck($templatefilename, "maxlength", 64, 0);
5234 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
5236 kiriwrite_variablecheck($templatefilename, "filename", "", 0);
5237 kiriwrite_variablecheck($templatenewfilename, "filename", "", 0);
5239 # Connect to the template database.
5241 $kiriwrite_dbmodule->connecttemplate();
5243 # Check if any errors had occured.
5245 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5247 # The template database has invalid permissions set so
5250 kiriwrite_error("templatedatabaseinvalidpermissions");
5254 # Edit the template.
5256 $kiriwrite_dbmodule->edittemplate({ TemplateFilename => $templatefilename, NewTemplateFilename => $templatenewfilename, NewTemplateName => $templatenewname, NewTemplateDescription => $templatenewdescription, NewTemplateLayout => $templatelayout });
5258 # Check if any error occured while editing the template.
5260 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5262 # A database error has occured, so return an error.
5264 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5266 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5268 # The template database has invalid permissions set so return
5271 kiriwrite_error("templatedatabaseinvalidpermissions");
5273 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5275 # The template does not exist, so process the next template.
5277 kiriwrite_error("templatedoesnotexist");
5281 # Disconnect from the database server.
5283 $kiriwrite_dbmodule->disconnect();
5285 # Disconnect from the template database.
5287 $kiriwrite_dbmodule->disconnecttemplate();
5289 # Append a link so that the user can return to the templates list.
5291 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{editedtemplate}, { Style => "pageheader" });
5292 $kiriwrite_presmodule->addlinebreak();
5293 $kiriwrite_presmodule->addlinebreak();
5294 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{editedtemplatemessage}, $templatenewname));
5295 $kiriwrite_presmodule->addlinebreak();
5296 $kiriwrite_presmodule->addlinebreak();
5297 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5301 # Connect to the template database.
5303 $kiriwrite_dbmodule->connecttemplate();
5305 # Check if any errors had occured.
5307 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5309 # The template database has invalid permissions set so
5312 kiriwrite_error("templatedatabaseinvalidpermissions");
5316 # Get the template information.
5318 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $templatefilename });
5320 # Check if any error occured while getting the template information.
5322 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5324 # A database error has occured, so return an error.
5326 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5328 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5330 # The template does not exist, so return an error.
5332 kiriwrite_error("templatedoesnotexist");
5336 # Disconnect from the template database.
5338 $kiriwrite_dbmodule->disconnecttemplate();
5340 # Get the values from the query results.
5342 my $template_filename = $template_info{"TemplateFilename"};
5343 my $template_name = $template_info{"TemplateName"};
5344 my $template_description = $template_info{"TemplateDescription"};
5345 my $template_layout = $template_info{"TemplateLayout"};
5346 my $template_modified = $template_info{"TemplateLastModified"};
5348 # Check if the values are undefined and set them blank
5351 if (!$template_name){
5352 $template_name = "";
5355 if (!$template_description){
5356 $template_description = "";
5359 if (!$template_layout){
5360 $template_layout = "";
5363 # Write out the form for editing an template with the current template
5364 # settings put into the correct place.
5366 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{edittemplate}, { Style => "pageheader" });
5367 $kiriwrite_presmodule->addlinebreak();
5368 $kiriwrite_presmodule->addlinebreak();
5369 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5370 $kiriwrite_presmodule->startbox();
5371 $kiriwrite_presmodule->addhiddendata("mode", "template");
5372 $kiriwrite_presmodule->addhiddendata("action", "edit");
5373 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5374 $kiriwrite_presmodule->addhiddendata("template", $template_filename);
5375 $kiriwrite_presmodule->starttable("", { CellSpacing => 0, CellPadding => 5});
5377 $kiriwrite_presmodule->startheader();
5378 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
5379 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
5380 $kiriwrite_presmodule->endheader();
5382 $kiriwrite_presmodule->startrow();
5383 $kiriwrite_presmodule->addcell("tablecell1");
5384 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatename});
5385 $kiriwrite_presmodule->endcell();
5386 $kiriwrite_presmodule->addcell("tablecell2");
5387 $kiriwrite_presmodule->addinputbox("newname", { Size => 64, MaxLength => 512, Value => $template_name });
5388 $kiriwrite_presmodule->endcell();
5389 $kiriwrite_presmodule->endrow();
5391 $kiriwrite_presmodule->startrow();
5392 $kiriwrite_presmodule->addcell("tablecell1");
5393 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatedescription});
5394 $kiriwrite_presmodule->endcell();
5395 $kiriwrite_presmodule->addcell("tablecell2");
5396 $kiriwrite_presmodule->addinputbox("newdescription", { Size => 64, MaxLength => 512, Value => $template_description });
5397 $kiriwrite_presmodule->endcell();
5398 $kiriwrite_presmodule->endrow();
5400 $kiriwrite_presmodule->startrow();
5401 $kiriwrite_presmodule->addcell("tablecell1");
5402 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatefilename});
5403 $kiriwrite_presmodule->endcell();
5404 $kiriwrite_presmodule->addcell("tablecell2");
5405 $kiriwrite_presmodule->addinputbox("newfilename", { Size => 32, MaxLength => 64, Value => $template_filename });
5406 $kiriwrite_presmodule->endcell();
5407 $kiriwrite_presmodule->endrow();
5409 $kiriwrite_presmodule->startrow();
5410 $kiriwrite_presmodule->addcell("tablecell1");
5411 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatelayout});
5412 $kiriwrite_presmodule->endcell();
5413 $kiriwrite_presmodule->addcell("tablecell2");
5414 $kiriwrite_presmodule->addtextbox("newlayout", { Rows => 10, Columns => 50, Value => $template_layout});
5415 $kiriwrite_presmodule->addlinebreak();
5416 $kiriwrite_presmodule->addlinebreak();
5417 $kiriwrite_presmodule->startbox("datalist");
5418 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
5419 $kiriwrite_presmodule->addlinebreak();
5420 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagecontent});
5421 $kiriwrite_presmodule->addlinebreak();
5422 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
5423 $kiriwrite_presmodule->addlinebreak();
5424 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
5425 $kiriwrite_presmodule->addlinebreak();
5426 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
5427 $kiriwrite_presmodule->addlinebreak();
5428 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
5429 $kiriwrite_presmodule->addlinebreak();
5430 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
5431 $kiriwrite_presmodule->addlinebreak();
5432 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
5433 $kiriwrite_presmodule->addlinebreak();
5434 $kiriwrite_presmodule->endbox();
5435 $kiriwrite_presmodule->endcell();
5436 $kiriwrite_presmodule->endrow();
5438 $kiriwrite_presmodule->endtable();
5440 $kiriwrite_presmodule->addlinebreak();
5442 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{edittemplatebutton});
5443 $kiriwrite_presmodule->addtext(" | ");
5444 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
5445 $kiriwrite_presmodule->addtext(" | ");
5446 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5448 $kiriwrite_presmodule->endbox();
5449 $kiriwrite_presmodule->endform();
5453 # Disconnect from the database server.
5455 $kiriwrite_dbmodule->disconnect();
5457 return $kiriwrite_presmodule->grab();
5461 sub kiriwrite_template_delete{
5462 #################################################################################
5463 # kiriwrite_template_delete: Delete a template from the template folder. #
5467 # kiriwrite_template_delete(filename, confirm); #
5469 # filename Specifies the filename of the database to delete. #
5470 # confirm Confirms the action to delete a template. #
5471 #################################################################################
5473 # Get the parameters that were passed to the subroutine.
5475 my ($template_filename, $template_confirm) = @_;
5477 if (!$template_confirm){
5478 $template_confirm = 0;
5481 # Check the length of the variables.
5482 kiriwrite_variablecheck($template_filename, "maxlength", 64, 0);
5483 kiriwrite_variablecheck($template_confirm, "maxlength", 1, 0);
5485 # Check if the template_name string is blank and if it is then
5486 # return an error (as the template_name string should not be
5489 if (!$template_filename){
5491 # The template_filename string really is blank,
5492 # so return an error saying that an empty
5493 # filename was passed (to the subroutine).
5495 kiriwrite_error("templatefilenameblank");
5499 # Check if the template_confirm string is blank and if it is, write
5500 # out a form asking the user to confirm the deletion.
5502 if ($template_confirm eq 1){
5504 # The action to delete the template from the template database has
5505 # been confirmed so delete the template.
5507 # Connect to the database server.
5509 $kiriwrite_dbmodule->connect();
5511 # Check if any errors occured while connecting to the database server.
5513 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5515 # A database connection error has occured so return
5518 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5522 # Check if the template database exists and the file permissions
5523 # are valid and return an error if they aren't.
5525 $kiriwrite_dbmodule->connecttemplate();
5527 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5529 # The template database does not exist so write a warning
5532 kiriwrite_error("templatedatabasemissing");
5534 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5536 # The template database has invalid permissions set so
5539 kiriwrite_error("templatedatabaseinvalidpermissions");
5543 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
5545 # Check if any error occured while getting the template information.
5547 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5549 # A database error has occured, so return an error.
5551 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5553 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5555 # The template does not exist, so return an error.
5557 kiriwrite_error("templatedoesnotexist");
5561 # Delete the selected template.
5563 $kiriwrite_dbmodule->deletetemplate({ TemplateFilename => $template_filename });
5565 # Check if any error occured while deleting the template.
5567 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5569 # A database error has occured, so return an error.
5571 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5573 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5575 # The template does not exist, so process the next template.
5577 kiriwrite_error("templatedoesnotexist");
5581 $kiriwrite_dbmodule->disconnecttemplate();
5583 # Get the deleted database name.
5585 my $database_template_name = $template_info{"TemplateName"};
5587 # Disconnect from the database server.
5589 $kiriwrite_dbmodule->disconnect();
5591 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{deletedtemplate}, { Style => "pageheader" });
5592 $kiriwrite_presmodule->addlinebreak();
5593 $kiriwrite_presmodule->addlinebreak();
5594 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{deletedtemplatemessage}, $database_template_name) );
5595 $kiriwrite_presmodule->addlinebreak();
5596 $kiriwrite_presmodule->addlinebreak();
5597 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5599 return $kiriwrite_presmodule->grab();
5601 } elsif ($template_confirm eq 0) {
5603 # The template confirm value is 0 (previously blank and then set to 0), so
5604 # write out a form asking the user to confirm the deletion of the template.
5606 # Connect to the database server.
5608 $kiriwrite_dbmodule->connect();
5610 # Check if any errors occured while connecting to the database server.
5612 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5614 # A database connection error has occured so return
5617 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5621 # Connect to the template database.
5623 $kiriwrite_dbmodule->connecttemplate();
5625 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5627 # The template database does not exist so write a warning
5630 kiriwrite_error("templatedatabasemissing");
5632 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5634 # The template database has invalid permissions set so
5637 kiriwrite_error("templatedatabaseinvalidpermissions");
5641 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
5643 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5645 # A database error has occured, so return an error.
5647 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5649 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5651 # The template does not exist, so return an error.
5653 kiriwrite_error("templatedoesnotexist");
5657 my $template_data_filename = $template_info{"TemplateFilename"};
5658 my $template_data_name = $template_info{"TemplateName"};
5660 $kiriwrite_dbmodule->disconnecttemplate();
5662 # Disconnect from the database server.
5664 $kiriwrite_dbmodule->disconnect();
5666 # Write out the confirmation form.
5668 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{deletetemplate}, { Style => "pageheader" });
5669 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5670 $kiriwrite_presmodule->startbox();
5671 $kiriwrite_presmodule->addhiddendata("mode", "template");
5672 $kiriwrite_presmodule->addhiddendata("template", $template_filename);
5673 $kiriwrite_presmodule->addhiddendata("action", "delete");
5674 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5675 $kiriwrite_presmodule->addlinebreak();
5676 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{deletetemplatemessage}, $template_data_name, $template_data_filename));
5677 $kiriwrite_presmodule->addlinebreak();
5678 $kiriwrite_presmodule->addlinebreak();
5679 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{deletetemplatebutton});
5680 $kiriwrite_presmodule->addtext(" | ");
5681 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{deletetemplatereturntolist} });
5682 $kiriwrite_presmodule->endbox();
5683 $kiriwrite_presmodule->endform();
5685 return $kiriwrite_presmodule->grab();
5689 kiriwrite_error("invalidvariable");
5695 sub kiriwrite_template_list{
5696 #################################################################################
5697 # kiriwrite_template_list: List the templates in the template folder. #
5701 # kiriwrite_template_list(); #
5702 #################################################################################
5704 # Define certain values for later.
5711 my $template_filename = "";
5712 my $template_filename_list = "";
5713 my $template_name = "";
5714 my $template_description = "";
5715 my $template_data = "";
5717 my $template_count = 0;
5719 my $template_style = 0;
5720 my $template_stylename = "";
5722 my $templatewarning = "";
5724 # Connect to the database server.
5726 $kiriwrite_dbmodule->connect();
5728 # Check if any errors occured while connecting to the database server.
5730 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5732 # A database connection error has occured so return
5735 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5739 # Connect to the template database.
5741 $kiriwrite_dbmodule->connecttemplate();
5743 # Check if any errors had occured.
5745 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5747 # The template database does not exist so write a warning
5750 $templatewarning = $kiriwrite_lang->{template}->{templatedatabasedoesnotexist};
5752 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5754 # The template database has invalid permissions set so
5757 kiriwrite_error("templatedatabaseinvalidpermissions");
5759 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5761 # A database error occured while getting the list of
5762 # templates so return an error with the extended
5763 # error information.
5765 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5769 # Get the list of template databases.
5771 if (!$templatewarning){
5773 @templates_list = $kiriwrite_dbmodule->gettemplatelist();
5777 # Check if any errors had occured.
5779 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5781 # A database error occured while getting the list
5782 # of templates so return an error with the
5783 # extended error information.
5785 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5789 # Check if any templates are in the database and if there isn't
5790 # then write a message saying that there are no templates in the
5793 if (!@templates_list && !$templatewarning){
5794 $templatewarning = $kiriwrite_lang->{template}->{notemplatesavailable};
5797 # Process the templates into a template list.
5799 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{viewtemplates}, { Style => "pageheader" });
5800 $kiriwrite_presmodule->addlinebreak();
5801 $kiriwrite_presmodule->addlinebreak();
5803 if ($templatewarning){
5805 $kiriwrite_presmodule->startbox("errorbox");
5806 $kiriwrite_presmodule->addtext($templatewarning);
5807 $kiriwrite_presmodule->endbox();
5811 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
5812 $kiriwrite_presmodule->startheader();
5813 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatefilename}, { Style => "tablecellheader" });
5814 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatename}, { Style => "tablecellheader" });
5815 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatedescription}, { Style => "tablecellheader" });
5816 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
5817 $kiriwrite_presmodule->endheader();
5819 foreach $template (@templates_list){
5821 # Get the template data.
5823 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
5825 # Check if any errors occured while trying to get the template
5828 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5830 # A database error has occured, so return an error.
5832 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5834 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5836 # The template does not exist, so process the next template.
5842 $template_filename = $template_info{"TemplateFileName"};
5843 $template_name = $template_info{"TemplateName"};
5844 $template_description = $template_info{"TemplateDescription"};
5846 # Check what style the row of table cells should be.
5848 if ($template_style eq 0){
5850 $template_stylename = "tablecell1";
5851 $template_style = 1;
5855 $template_stylename = "tablecell2";
5856 $template_style = 0;
5860 $kiriwrite_presmodule->startrow();
5861 $kiriwrite_presmodule->addcell($template_stylename);
5862 $kiriwrite_presmodule->addtext($template_info{"TemplateFilename"});
5864 # Check if the blank template value was set.
5866 if (!$template_info{"TemplateLayout"}){
5867 $kiriwrite_presmodule->additalictext(" " . "[Blank Template]");
5870 $kiriwrite_presmodule->endcell();
5871 $kiriwrite_presmodule->addcell($template_stylename);
5873 # Check if the template name is blank and if it is
5874 # write a message to say there's no name for the
5877 if (!$template_info{"TemplateName"}){
5878 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
5880 $kiriwrite_presmodule->addtext($template_info{"TemplateName"});
5883 $kiriwrite_presmodule->endcell();
5884 $kiriwrite_presmodule->addcell($template_stylename);
5886 # Check if the template description is blank and if
5887 # it is then write a message to say there's no
5888 # description for the template.
5890 if (!$template_info{"TemplateDescription"}){
5891 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
5893 $kiriwrite_presmodule->addtext($template_info{"TemplateDescription"});
5896 $kiriwrite_presmodule->endcell();
5897 $kiriwrite_presmodule->addcell($template_stylename);
5898 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template&action=edit&template=" . $template_info{"TemplateFilename"}, { Text => $kiriwrite_lang->{options}->{edit} });
5899 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template&action=delete&template=" . $template_info{"TemplateFilename"}, { Text => $kiriwrite_lang->{options}->{delete} });
5900 $kiriwrite_presmodule->endcell();
5901 $kiriwrite_presmodule->endrow();
5905 $kiriwrite_presmodule->endtable();
5909 # Disconnect from the database server.
5911 $kiriwrite_dbmodule->disconnect();
5913 $kiriwrite_dbmodule->disconnecttemplate();
5914 return $kiriwrite_presmodule->grab();
5919 sub kiriwrite_database_add{
5920 #################################################################################
5921 # kiriwrite_database_add: Creates a new database. #
5925 # kiriwrite_database_add(filename, name, description, notes, categories, #
5928 # filename Specifies the filename for the database. #
5929 # name Specifies a (friendly) name for the database. #
5930 # description Specifies a description for the database. #
5931 # notes Specifies the notes for the database. #
5932 # categories Specifies the categories for the database. #
5933 # confirm Confirms the action to create a database. #
5934 #################################################################################
5936 # Get the variables passed from the subroutine.
5938 my ($database_filename, $database_name, $database_description, $database_notes, $database_categories, $database_confirm) = @_;
5940 # Check if the confirm value is blank and if it is then
5941 # set the confirm value to 0.
5943 if (!$database_confirm){
5945 # The confirm value was blank so set the value to 0.
5947 $database_confirm = 0;
5951 if ($database_confirm eq 1){
5953 # The action to create a new database is confirmed.
5955 # Validate the database name and database descriptions.
5957 my $database_name_check_utf8 = kiriwrite_variablecheck($database_name, "utf8", 0, 0);
5958 my $database_description_check_utf8 = kiriwrite_variablecheck($database_description, "utf8", 0, 0);
5959 my $database_notes_check_utf8 = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
5960 my $database_categories_check_utf8 = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
5962 # Convert the UTF8 strings before checking the length of the strings.
5964 $database_name = kiriwrite_utf8convert($database_name);
5965 $database_description = kiriwrite_utf8convert($database_description);
5966 $database_notes = kiriwrite_utf8convert($database_notes);
5967 $database_categories = kiriwrite_utf8convert($database_categories);
5969 my $database_name_check_blank = kiriwrite_variablecheck($database_name, "blank", 0, 1);
5970 my $database_name_check_length = kiriwrite_variablecheck($database_name, "maxlength", 256, 1);
5971 my $database_description_check_length = kiriwrite_variablecheck($database_description, "maxlength", 512, 1);
5972 my $database_filename_check_length = kiriwrite_variablecheck($database_filename, "maxlength", 32, 1);
5973 my $database_categories_check_length = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
5975 # Check if values returned contains any values that would
5976 # result in a specific error message being returned.
5978 if ($database_name_check_length eq 1){
5980 # The length of the database name is too long, so return an error.
5981 kiriwrite_error("databasenametoolong");
5985 if ($database_description_check_length eq 1){
5987 # The database description length is too long, so return an error.
5988 kiriwrite_error("databasedescriptiontoolong");
5992 if ($database_name_check_blank eq 1){
5994 # The database name is blank, so return an error.
5995 kiriwrite_error("databasenameblank");
5999 if ($database_filename_check_length eq 1){
6001 # The database filename is to long, so return an error.
6002 kiriwrite_error("databasefilenametoolong");
6006 if ($database_categories_check_length eq 1){
6008 # The database categories is too long, so return an error.
6009 kiriwrite_error("databasecategoriestoolong");
6013 # Check if the database filename is blank and if it is then
6014 # generate a filename.
6016 if ($database_filename eq ""){
6018 # Filename is blank so generate a file name from
6019 # the database name.
6021 $database_filename = kiriwrite_processfilename($database_name);
6025 # Filename is not blank so don't generate a filename.
6029 kiriwrite_variablecheck($database_filename, "filename", "", 0);
6030 kiriwrite_variablecheck($database_filename, "maxlength", 32, 0);
6032 # Connect to the database server.
6034 $kiriwrite_dbmodule->connect();
6036 # Check if any errors occured while connecting to the database server.
6038 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6040 # A database connection error has occured so return
6043 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6047 my $database_name_final = $database_name;
6049 # Create the database.
6051 $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"} });
6053 # Check if any errors have occured.
6055 if ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
6057 # A database with the filename given already exists, so
6060 kiriwrite_error("fileexists");
6062 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6064 # A database error has occured so return an error with
6065 # the extended error information.
6067 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6071 # Disconnect from the database server.
6073 $kiriwrite_dbmodule->disconnect();
6075 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
6076 $kiriwrite_presmodule->addlinebreak();
6077 $kiriwrite_presmodule->addlinebreak();
6078 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseadded} , $database_name_final));
6079 $kiriwrite_presmodule->addlinebreak();
6080 $kiriwrite_presmodule->addlinebreak();
6081 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6083 return $kiriwrite_presmodule->grab();
6087 # There is confirm value is not 1, so write a form for creating a database to
6090 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
6091 $kiriwrite_presmodule->addlinebreak();
6092 $kiriwrite_presmodule->addlinebreak();
6093 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6094 $kiriwrite_presmodule->startbox();
6095 $kiriwrite_presmodule->addhiddendata("mode", "db");
6096 $kiriwrite_presmodule->addhiddendata("action", "new");
6097 $kiriwrite_presmodule->addhiddendata("confirm", "1");
6098 $kiriwrite_presmodule->endbox();
6099 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
6101 $kiriwrite_presmodule->startheader();
6102 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader"});
6103 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader"});
6104 $kiriwrite_presmodule->endheader();
6106 $kiriwrite_presmodule->startrow();
6107 $kiriwrite_presmodule->addcell("tablecell1");
6108 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
6109 $kiriwrite_presmodule->endcell();
6110 $kiriwrite_presmodule->addcell("tablecell2");
6111 $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256 });
6112 $kiriwrite_presmodule->endcell();
6113 $kiriwrite_presmodule->endrow();
6115 $kiriwrite_presmodule->startrow();
6116 $kiriwrite_presmodule->addcell("tablecell1");
6117 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
6118 $kiriwrite_presmodule->endcell();
6119 $kiriwrite_presmodule->addcell("tablecell2");
6120 $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512 });
6121 $kiriwrite_presmodule->endcell();
6122 $kiriwrite_presmodule->endrow();
6124 $kiriwrite_presmodule->startrow();
6125 $kiriwrite_presmodule->addcell("tablecell1");
6126 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
6127 $kiriwrite_presmodule->endcell();
6128 $kiriwrite_presmodule->addcell("tablecell2");
6129 $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512 });
6130 $kiriwrite_presmodule->endcell();
6131 $kiriwrite_presmodule->endrow();
6133 $kiriwrite_presmodule->startrow();
6134 $kiriwrite_presmodule->addcell("tablecell1");
6135 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
6136 $kiriwrite_presmodule->endcell();
6137 $kiriwrite_presmodule->addcell("tablecell2");
6138 $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => 50, Rows => 10, WordWrap => 0 });
6139 $kiriwrite_presmodule->endcell();
6140 $kiriwrite_presmodule->endrow();
6142 $kiriwrite_presmodule->startrow();
6143 $kiriwrite_presmodule->addcell("tablecell1");
6144 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
6145 $kiriwrite_presmodule->endcell();
6146 $kiriwrite_presmodule->addcell("tablecell2");
6147 $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32 });
6148 $kiriwrite_presmodule->startlist();
6149 $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabaseautogenerate});
6150 $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasenoextensions});
6151 $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacterlength});
6152 $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacters});
6153 $kiriwrite_presmodule->endlist();
6154 $kiriwrite_presmodule->endcell();
6155 $kiriwrite_presmodule->endrow();
6157 $kiriwrite_presmodule->endtable();
6158 $kiriwrite_presmodule->startbox();
6159 $kiriwrite_presmodule->addlinebreak();
6160 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{adddatabasebutton});
6161 $kiriwrite_presmodule->addtext("|");
6162 $kiriwrite_presmodule->addreset($kiriwrite_lang->{database}->{clearvaluesbutton});
6163 $kiriwrite_presmodule->addtext("| ");
6164 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6165 $kiriwrite_presmodule->endbox();
6166 $kiriwrite_presmodule->endform();
6168 # Exit the subroutine taking the data in the pagadata variable with it.
6170 return $kiriwrite_presmodule->grab();
6174 sub kiriwrite_database_edit{
6175 #################################################################################
6176 # kiriwrite_database_edit: Edits an database. #
6180 # kiriwrite_database_edit(filename, newfilename, newname, newdescription, #
6181 # notes, categories, [confirm]); #
6183 # filename Specifies the filename of the database. #
6184 # newfilename Specifies the new filename of the database. #
6185 # newname Specifies the new name of the database. #
6186 # newdescription Specifies the new description of the database. #
6187 # notes Specifies the new notes of the database. #
6188 # categories Specifies the new categories of the database. #
6189 # confirm Confirms the action to edit a database. #
6190 #################################################################################
6192 # First, get all the variables passed to the subroutine.
6194 my ($database_shortname, $database_newfilename, $database_newname, $database_newdescription, $database_notes, $database_categories, $database_confirm) = @_;
6196 # Check if the database confirm value is blank and if it is
6197 # set the confirm value to 0.
6199 if (!$database_confirm){
6201 $database_confirm = 0;
6205 # Check if the database filename given is valid and return an error
6208 kiriwrite_variablecheck($database_shortname, "filename", "", 0);
6210 # 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
6211 # if $database_confirm was used directly).
6213 if ($database_confirm eq 1){
6215 # Check if the new data passes the validation tests below. First, check the length of the variables.
6217 my $database_name_check_utf8 = kiriwrite_variablecheck($database_newname, "utf8", 0, 0);
6218 my $database_description_check_utf8 = kiriwrite_variablecheck($database_newdescription, "utf8", 0, 0);
6219 my $database_notes_check_utf8 = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
6220 my $database_categories_check_utf8 = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
6222 # Convert the UTF8 strings to make sure their length is accurate.
6224 $database_newname = kiriwrite_utf8convert($database_newname);
6225 $database_newdescription = kiriwrite_utf8convert($database_newdescription);
6226 $database_notes = kiriwrite_utf8convert($database_notes);
6227 $database_categories = kiriwrite_utf8convert($database_categories);
6229 # Preform the following tests.
6231 my $database_filename_check_length = kiriwrite_variablecheck($database_newfilename, "maxlength", 32, 1);
6232 my $database_filename_letnum = kiriwrite_variablecheck($database_newfilename, "filename", 0, 0);
6233 my $database_name_check_length = kiriwrite_variablecheck($database_newname, "maxlength", 256, 1);
6234 my $database_description_check_length = kiriwrite_variablecheck($database_newdescription, "maxlength", 512, 1);
6235 my $database_categories_check_length = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
6236 my $database_name_check_blank = kiriwrite_variablecheck($database_newname, "blank", 0, 1);
6238 # Check if the data is valid and return a specific error if it doesn't.
6240 if ($database_name_check_length eq 1){
6242 # The length of the database name is too long, so return an error.
6243 kiriwrite_error("databasenametoolong");
6247 if ($database_description_check_length eq 1){
6249 # The database description length is too long, so return an error.
6250 kiriwrite_error("databasedescriptiontoolong");
6254 if ($database_name_check_blank eq 1){
6256 # The database name is blank, so return an error.
6257 kiriwrite_error("databasenameblank");
6261 if ($database_filename_check_length eq 1){
6263 # The database filename is too long, so return an error.
6264 kiriwrite_error("databasefilenametoolong");
6268 if ($database_categories_check_length eq 1){
6270 # The database categories is too long, so return an error.
6271 kiriwrite_error("databasecategoriestoolong");
6275 # Connect to the database server.
6277 $kiriwrite_dbmodule->connect();
6279 # Check if any errors occured while connecting to the database server.
6281 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6283 # A database connection error has occured so return
6286 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6292 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
6294 # Check if any errors had occured while selecting the database.
6296 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6298 # The database does not exist, so return an error.
6300 kiriwrite_error("databasemissingfile");
6302 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6304 # The database has invalid permissions set, so return
6307 kiriwrite_error("databaseinvalidpermissions");
6313 $kiriwrite_dbmodule->editdatabase({ DatabaseNewFilename => $database_newfilename, DatabaseName => $database_newname , DatabaseDescription => $database_newdescription , DatabaseNotes => $database_notes, DatabaseCategories => $database_categories });
6315 # Check if any errors had occured while using the database.
6317 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6319 # The database does not exist, so return an error.
6321 kiriwrite_error("databasemissingfile");
6323 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6325 # The database has invalid permissions set, so return
6328 kiriwrite_error("databaseinvalidpermissions");
6330 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
6332 # The database directory has invalid permissions set, so
6335 kiriwrite_error("datadirectoryinvalidpermissions");
6337 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
6339 # A database already exists with the new filename, so
6342 kiriwrite_error("databasealreadyexists");
6344 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6346 # A database error has occured so return an error with
6347 # the extended error information.
6349 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6353 # Disconnect from the server.
6355 $kiriwrite_dbmodule->disconnect();
6357 # Write out a message saying that the database has been updated.
6359 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{editeddatabase}, { Style => "pageheader" } );
6360 $kiriwrite_presmodule->addlinebreak();
6361 $kiriwrite_presmodule->addlinebreak();
6362 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseupdated}, $database_newname));
6363 $kiriwrite_presmodule->addlinebreak();
6364 $kiriwrite_presmodule->addlinebreak();
6365 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6367 return $kiriwrite_presmodule->grab();
6371 my (%database_info);
6373 # Check if the database filename given is valid and return an error
6376 # Connect to the database server.
6378 $kiriwrite_dbmodule->connect();
6380 # Check if any errors occured while connecting to the database server.
6382 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6384 # A database connection error has occured so return
6387 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6391 # Select the database.
6393 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
6395 # Check if any errors had occured while setting the database.
6397 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6399 # The database does not exist, so return an error.
6401 kiriwrite_error("databasemissingfile");
6403 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6405 # The database has invalid permissions set, so return
6408 kiriwrite_error("databaseinvalidpermissions");
6412 # Get the database information.
6414 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6416 # Check if any errors had occured while getting the database
6419 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6421 # A database error has occured so return an error and
6422 # also the extended error information.
6424 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6428 # Get the values needed from the kiriwrite_database_info table.
6430 my $database_oldname = $database_info{"DatabaseName"};
6431 my $database_olddescription = $database_info{"Description"};
6432 my $database_notes = $database_info{"Notes"};
6433 my $database_categories = $database_info{"Categories"};
6435 # Disconnect from the database server.
6437 $kiriwrite_dbmodule->disconnect();
6439 # Print out the form for editing a database's settings.
6441 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{editdatabase}, $database_oldname), { Style => "pageheader" });
6442 $kiriwrite_presmodule->addlinebreak();
6443 $kiriwrite_presmodule->addlinebreak();
6444 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6445 $kiriwrite_presmodule->startbox();
6446 $kiriwrite_presmodule->addhiddendata("mode", "db");
6447 $kiriwrite_presmodule->addhiddendata("action", "edit");
6448 $kiriwrite_presmodule->addhiddendata("database", $database_shortname);
6449 $kiriwrite_presmodule->addhiddendata("confirm", "1");
6450 $kiriwrite_presmodule->endbox();
6452 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
6453 $kiriwrite_presmodule->startheader();
6454 $kiriwrite_presmodule->addheader("Setting", { Style => "tablecellheader" });
6455 $kiriwrite_presmodule->addheader("Value", { Style => "tablecellheader" });
6456 $kiriwrite_presmodule->endheader();
6458 $kiriwrite_presmodule->startrow();
6459 $kiriwrite_presmodule->addcell("tablecell1");
6460 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
6461 $kiriwrite_presmodule->endcell();
6462 $kiriwrite_presmodule->addcell("tablecell2");
6463 $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256, Value => $database_oldname } );
6464 $kiriwrite_presmodule->endcell();
6465 $kiriwrite_presmodule->endrow();
6467 $kiriwrite_presmodule->startrow();
6468 $kiriwrite_presmodule->addcell("tablecell1");
6469 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
6470 $kiriwrite_presmodule->endcell();
6471 $kiriwrite_presmodule->addcell("tablecell2");
6472 $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512, Value => $database_olddescription } );
6473 $kiriwrite_presmodule->endcell();
6474 $kiriwrite_presmodule->endrow();
6476 $kiriwrite_presmodule->startrow();
6477 $kiriwrite_presmodule->addcell("tablecell1");
6478 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
6479 $kiriwrite_presmodule->endcell();
6480 $kiriwrite_presmodule->addcell("tablecell2");
6481 $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512, Value => $database_categories } );
6482 $kiriwrite_presmodule->endcell();
6483 $kiriwrite_presmodule->endrow();
6485 $kiriwrite_presmodule->startrow();
6486 $kiriwrite_presmodule->addcell("tablecell1");
6487 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
6488 $kiriwrite_presmodule->endcell();
6489 $kiriwrite_presmodule->addcell("tablecell2");
6490 $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => 50, Rows => 10, Value => $database_notes } );
6491 $kiriwrite_presmodule->endcell();
6492 $kiriwrite_presmodule->endrow();
6494 $kiriwrite_presmodule->startrow();
6495 $kiriwrite_presmodule->addcell("tablecell1");
6496 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
6497 $kiriwrite_presmodule->endcell();
6498 $kiriwrite_presmodule->addcell("tablecell2");
6499 $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32, Value => $database_shortname } );
6500 $kiriwrite_presmodule->endcell();
6501 $kiriwrite_presmodule->endrow();
6503 $kiriwrite_presmodule->endtable();
6505 $kiriwrite_presmodule->startbox();
6506 $kiriwrite_presmodule->addlinebreak();
6507 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{editdatabasebutton});
6508 $kiriwrite_presmodule->addtext(" | ");
6509 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
6510 $kiriwrite_presmodule->addtext(" | ");
6511 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6512 $kiriwrite_presmodule->endbox();
6513 $kiriwrite_presmodule->endform();
6515 return $kiriwrite_presmodule->grab();
6519 # The interpreter should not be here. So return an error saying invalid variable.
6521 kiriwrite_error("invalidvariable");
6525 sub kiriwrite_database_delete{
6526 #################################################################################
6527 # kiriwrite_database_delete: Deletes an database. #
6531 # kiriwrite_database_delete(filename, [confirm]); #
6533 # filename Specifies the filename for the database to be deleted. #
6534 # confirm Confirms the action to delete a database. #
6535 #################################################################################
6537 my ($database_filename, $database_confirm) = @_;
6539 # Check if the confirm value is blank and if it is then set the
6540 # confirm value to 0.
6542 if (!$database_confirm){
6544 $database_confirm = 0;
6548 # Connect to the database server.
6550 $kiriwrite_dbmodule->connect();
6552 # Check if any errors occured while connecting to the database server.
6554 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6556 # A database connection error has occured so return
6559 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6563 # Check if the database filename given is valid and return an error
6566 kiriwrite_variablecheck($database_filename, "filename", "", 0);
6568 # Check if the request to delete a database has been confirmed. If it has,
6569 # then delete the database itself.
6571 if ($database_confirm eq 1){
6572 # There is a value in the confirm variable of the HTTP query.
6574 # Select the database to delete and get the database name.
6576 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
6578 # Check if any error occured while selecting the database.
6580 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6582 # The database does not exist so return an error.
6584 kiriwrite_error("databasemissingfile");
6586 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6588 # The database has invalid permissions set so return
6591 kiriwrite_error("databaseinvalidpermissions");
6595 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6597 # Check if any errors have occured while getting the database
6600 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6602 # A database error has occured so return an error with
6603 # the extended error information.
6605 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6609 my $database_name = $database_info{"DatabaseName"};
6611 # Delete the selected database.
6613 $kiriwrite_dbmodule->deletedatabase({ DatabaseName => $database_filename });
6615 # Check if any error occured while deleting the database.
6617 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6619 # The database does not exist so return an error.
6621 kiriwrite_error("databasemissingfile");
6623 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6625 # The database has invalid permissions set so return
6628 kiriwrite_error("databaseinvalidpermissions");
6632 # Disconnect from the database server.
6634 $kiriwrite_dbmodule->disconnect();
6636 # Write a message saying that the database has been deleted.
6638 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deleteddatabase}, { Style => "pageheader" });
6639 $kiriwrite_presmodule->addlinebreak();
6640 $kiriwrite_presmodule->addlinebreak();
6641 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deleteddatabasemessage}, $database_name));
6642 $kiriwrite_presmodule->addlinebreak();
6643 $kiriwrite_presmodule->addlinebreak();
6644 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6646 return $kiriwrite_presmodule->grab();
6650 # The action has not been confirmed, so write out a form asking the
6653 # Get the database name.
6655 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
6657 # Check if any error occured while selecting the database.
6659 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6661 # The database does not exist so return an error.
6663 kiriwrite_error("databasemissingfile");
6665 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6667 # The database has invalid permissions set so return
6670 kiriwrite_error("databaseinvalidpermissions");
6675 # Check if any errors have occured.
6677 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6679 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6681 # A database error has occured so return an error with
6682 # the extended error information.
6684 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6688 my $database_name = $database_info{"DatabaseName"};
6690 # Disconnect from the database server.
6692 $kiriwrite_dbmodule->disconnect();
6694 # Write out the form to ask the user to confirm the deletion of the
6695 # selected database.
6697 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deletedatabase}, { Style => "pageheader" });
6698 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6699 $kiriwrite_presmodule->startbox();
6700 $kiriwrite_presmodule->addhiddendata("mode", "db");
6701 $kiriwrite_presmodule->addhiddendata("action", "delete");
6702 $kiriwrite_presmodule->addhiddendata("database", $database_filename);
6703 $kiriwrite_presmodule->addhiddendata("confirm", "1");
6704 $kiriwrite_presmodule->addlinebreak();
6705 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deletedatabasemessage}, $database_name));
6706 $kiriwrite_presmodule->addlinebreak();
6707 $kiriwrite_presmodule->addlinebreak();
6708 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{deletedatabasebutton});
6709 $kiriwrite_presmodule->addtext(" | ");
6710 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{deletedatabasereturn} });
6711 $kiriwrite_presmodule->endbox();
6712 $kiriwrite_presmodule->endform();
6714 return $kiriwrite_presmodule->grab();
6718 sub kiriwrite_database_list{
6719 #################################################################################
6720 # kiriwrite_database_list: Lists the databases available. #
6724 # kiriwrite_database_list(); #
6725 #################################################################################
6727 # Connect to the database server.
6729 $kiriwrite_dbmodule->connect();
6731 # Check if any errors occured while connecting to the database server.
6733 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6735 # A database connection error has occured so return
6738 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6742 # Get the list of available databases and process any errors that
6743 # might have occured.
6745 my @database_list = $kiriwrite_dbmodule->getdblist();
6747 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
6749 # The database directory is missing so return an error.
6751 kiriwrite_error("datadirectorymissing");
6753 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
6755 # The database directory has invalid permissions set so return
6758 kiriwrite_error("datadirectoryinvalidpermissions");
6762 # Declare the following variables that are going to be used before using
6763 # the foreach function.
6765 my ($database_info, %database_info);
6767 my @permissions_list;
6768 my $database_count = 0;
6769 my $database_filename = "";
6770 my $database_filename_friendly = "";
6771 my $database_filename_length = 0;
6772 my $database_name = "";
6773 my $database_description = "";
6774 my $database_permissions = "";
6775 my $nodescription = 0;
6778 my $table_style = 0;
6779 my $table_style_name = "";
6781 # Begin creating the table for the list of databases.
6783 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
6784 $kiriwrite_presmodule->addlinebreak();
6785 $kiriwrite_presmodule->addlinebreak();
6786 $kiriwrite_presmodule->starttable("", { CellPadding => "5", CellSpacing => "0" });
6787 $kiriwrite_presmodule->startheader();
6788 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
6789 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
6790 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databaseoptions}, { Style => "tablecellheader" });
6791 $kiriwrite_presmodule->endheader();
6793 foreach $data_file (@database_list){
6795 # Select the database.
6797 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
6799 # Check if any error occured while selecting the database.
6801 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6803 # The database does not exist, so process the next
6808 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6810 # The database has invalid permissions settings, so
6811 # add the database to the list of databases with
6812 # invalid permissions set and process the next
6815 push(@permissions_list, $data_file);
6820 # Get information about the database.
6822 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6824 # Check if any error occured while getting information from the
6827 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6829 # A database error has occured, add the database and specific
6830 # error message to the list of databases with errors and
6831 # process the next database.
6833 push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
6838 $database_name = $database_info{"DatabaseName"};
6839 $database_description = $database_info{"Description"};
6841 # Check the style to be used with.
6843 if ($table_style eq 0){
6845 # Use the first style and set the style value
6846 # to use the next style, the next time the
6847 # if statement is checked.
6849 $table_style_name = "tablecell1";
6853 # Use the second style and set the style
6854 # value to use the first style, the next
6855 # time if statement is checked.
6857 $table_style_name = "tablecell2";
6861 # Create a friendly name for the database.
6863 $database_filename_friendly = $data_file;
6865 # Append the database information to the table.
6867 $kiriwrite_presmodule->startrow();
6868 $kiriwrite_presmodule->addcell($table_style_name);
6870 if (!$database_name){
6871 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
6873 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_filename_friendly, { Text => $database_name });
6876 $kiriwrite_presmodule->endcell();
6877 $kiriwrite_presmodule->addcell($table_style_name);
6879 if (!$database_description){
6880 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
6882 $kiriwrite_presmodule->addtext($database_description);
6885 $kiriwrite_presmodule->endcell();
6886 $kiriwrite_presmodule->addcell($table_style_name);
6887 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=edit&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{edit} });
6888 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=compile&type=single&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{compile} });
6889 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=delete&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{delete} });
6890 $kiriwrite_presmodule->endrow();
6898 $kiriwrite_presmodule->endtable();
6900 # Disconnect from the database server.
6902 $kiriwrite_dbmodule->disconnect();
6904 # Check if there are no valid databases are if there is no
6905 # valid databases then write a message saying that no
6906 # valid databases are available.
6908 if ($database_count eq 0){
6910 $kiriwrite_presmodule->clear();
6911 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
6912 $kiriwrite_presmodule->addlinebreak();
6913 $kiriwrite_presmodule->addlinebreak();
6914 $kiriwrite_presmodule->startbox("errorbox");
6915 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{nodatabasesavailable});
6916 $kiriwrite_presmodule->endbox();
6920 # Check if any databases with problems have appeared and if they
6921 # have, print out a message saying which databases have problems.
6923 if (@permissions_list){
6925 $kiriwrite_presmodule->addlinebreak();
6926 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
6927 $kiriwrite_presmodule->addlinebreak();
6928 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
6929 $kiriwrite_presmodule->addlinebreak();
6931 foreach $data_file (@permissions_list){
6932 $kiriwrite_presmodule->addlinebreak();
6933 $kiriwrite_presmodule->addtext($data_file);
6936 $kiriwrite_presmodule->addlinebreak();
6942 $kiriwrite_presmodule->addlinebreak();
6943 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
6944 $kiriwrite_presmodule->addlinebreak();
6945 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
6946 $kiriwrite_presmodule->addlinebreak();
6948 foreach $data_file (@error_list){
6949 $kiriwrite_presmodule->addlinebreak();
6950 $kiriwrite_presmodule->addtext($data_file);
6953 $kiriwrite_presmodule->addlinebreak();
6957 return $kiriwrite_presmodule->grab(); # Return to the main part of the script with the processed information.
6962 sub kiriwrite_filter_list{
6963 #################################################################################
6964 # kiriwrite_filter_list: Lists the filters that will be used when compiling a #
6969 # kiriwrite_filter_list(); #
6970 #################################################################################
6972 my $filtersdb_notexist = 0;
6974 # Connect to the database server.
6976 $kiriwrite_dbmodule->connect();
6978 # Check if any errors occured while connecting to the database server.
6980 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6982 # A database connection error has occured so return
6985 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6989 # Connect to the filter database.
6991 $kiriwrite_dbmodule->connectfilter();
6993 # Check if any error has occured while connecting to the filter
6996 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
6998 # The filter database does not exist.
7000 $filtersdb_notexist = 1;
7002 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7004 # The filter database has invalid permissions set so return
7007 kiriwrite_error("filtersdbpermissions");
7009 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7011 # A database error has occured with the filter database.
7013 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7017 # Define some variables required for processing the filters list.
7021 my @database_filters;
7022 my $blankfindfilter = 0;
7023 my $filterswarning = "";
7025 my $filter_count = 0;
7026 my $filter_style = 0;
7027 my $filter_style_name = "";
7029 tie(%filter_list, 'Tie::IxHash');
7031 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{viewfilters}, { Style => "pageheader" });
7032 $kiriwrite_presmodule->addlinebreak();
7033 $kiriwrite_presmodule->addlinebreak();
7035 # If the filter database exists then get the list of filters,
7036 # otherwise write a message saying that the filter database
7037 # does not exist and will be created when a filter is added.
7039 if ($filtersdb_notexist eq 0){
7041 # Get the list of available filters.
7043 @database_filters = $kiriwrite_dbmodule->getfilterlist();
7045 # Check if any errors occured while getting the list of filters.
7047 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7049 # A database error has occured with the filter database.
7051 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7055 # Process each filter getting the priority, find setting and
7058 foreach $filter (@database_filters){
7060 # Get the information about the filter.
7062 %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
7064 # Check if any errors occured while getting the filter information.
7066 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7068 # A database error occured while using the filter database.
7070 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7072 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7074 # The filter does not exist so process the next filter.
7080 # Check if the find filter is blank.
7082 if (!$filter_info{"FilterFind"}){
7084 # The find filter is blank, so set the value to write a warning
7085 # message saying that a find filter given is blank.
7087 $blankfindfilter = 1;
7091 $filter_list{$filter_count}{ID} = $filter_info{"FilterID"};
7092 $filter_list{$filter_count}{Priority} = $filter_info{"FilterPriority"};
7093 $filter_list{$filter_count}{Find} = $filter_info{"FilterFind"};
7094 $filter_list{$filter_count}{Replace} = $filter_info{"FilterReplace"};
7095 $filter_list{$filter_count}{Notes} = $filter_info{"FilterNotes"};
7101 # Check if there are filters in the filter database and
7102 # write a message if there isn't.
7104 if ($filter_count eq 0){
7106 # There are no filters in the filter database.
7108 $filterswarning = $kiriwrite_lang->{filter}->{nofiltersavailable};
7114 # Check if the database wasn't found and if it
7115 # wasn't then write a message saying that the
7116 # database will be created when a filter is
7119 if ($filtersdb_notexist eq 1){
7121 # The filter database doesn't exist so write
7124 $filterswarning = $kiriwrite_lang->{filter}->{filterdatabasedoesnotexist};
7129 # Check if there is a warning message and if
7130 # there is then write that warning message
7131 # else write the list of filters.
7133 if ($filterswarning){
7135 $kiriwrite_presmodule->startbox("errorbox");
7136 $kiriwrite_presmodule->addtext($filterswarning);
7137 $kiriwrite_presmodule->endbox();
7141 # The filter database exists so write out the
7144 if ($blankfindfilter eq 1){
7146 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{filter}->{warningtitle});
7147 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{blankfindfilters});
7148 $kiriwrite_presmodule->addtext();
7149 $kiriwrite_presmodule->addlinebreak();
7150 $kiriwrite_presmodule->addlinebreak();
7154 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7156 $kiriwrite_presmodule->startheader();
7157 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{priority}, { Style => "tablecellheader" });
7158 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{findsetting}, { Style => "tablecellheader" });
7159 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{replacesetting}, { Style => "tablecellheader" });
7160 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
7161 $kiriwrite_presmodule->endheader();
7163 foreach $filter (keys %filter_list){
7165 # Check which style should be used.
7167 if ($filter_style eq 0){
7169 $filter_style_name = "tablecell1";
7174 $filter_style_name = "tablecell2";
7179 $kiriwrite_presmodule->startrow();
7180 $kiriwrite_presmodule->addcell($filter_style_name);
7181 $kiriwrite_presmodule->addtext($filter_list{$filter}{Priority});
7182 $kiriwrite_presmodule->endcell();
7183 $kiriwrite_presmodule->addcell($filter_style_name);
7185 # Check if the find filter is blank.
7187 if (!$filter_list{$filter}{Find}){
7189 # The find filter is blank.
7191 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{filter}->{blankfindsetting});
7195 # The find filter is not blank.
7197 $kiriwrite_presmodule->addtext($filter_list{$filter}{Find});
7201 $kiriwrite_presmodule->endcell();
7202 $kiriwrite_presmodule->addcell($filter_style_name);
7204 # Check if the replace filter is blank.
7206 if (!$filter_list{$filter}{Replace}){
7208 # The replace filter is blank.
7210 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{filter}->{blankreplacesetting});
7214 # The replace filter is not blank.
7216 $kiriwrite_presmodule->addtext($filter_list{$filter}{Replace});
7220 $kiriwrite_presmodule->endcell();
7221 $kiriwrite_presmodule->addcell($filter_style_name);
7222 $kiriwrite_presmodule->addlink("?mode=filter&action=edit&filter=" . $filter_list{$filter}{ID}, { Text => $kiriwrite_lang->{options}->{edit} });
7223 $kiriwrite_presmodule->addlink("?mode=filter&action=delete&filter=" . $filter_list{$filter}{ID}, { Text => $kiriwrite_lang->{options}->{delete} });
7224 $kiriwrite_presmodule->endcell();
7225 $kiriwrite_presmodule->endrow();
7229 $kiriwrite_presmodule->endtable();
7233 # Disconnect from the filter database.
7235 $kiriwrite_dbmodule->disconnectfilter();
7237 # Disconnect from the database server.
7239 $kiriwrite_dbmodule->disconnect();
7241 return $kiriwrite_presmodule->grab();
7245 sub kiriwrite_filter_add{
7246 #################################################################################
7247 # kiriwrite_filter_add: Adds a filter to the filter list. #
7251 # kiriwrite_filter_add(filterfind, filterreplace, filterpriority, #
7252 # filternotes, [confirm]); #
7254 # filterfind Specifies the new word(s) to find. #
7255 # filterreplace Specifies the new word(s) to replace. #
7256 # filterpriority Specifies the new priority to use. #
7257 # filternotes Specifies the new notes to use. #
7258 # confirm Confirms the action to add a filter. #
7259 #################################################################################
7261 # Get the values that have been passed to the subroutine.
7263 my ($filter_new_find, $filter_new_replace, $filter_new_priority, $filter_new_notes, $confirm) = @_;
7265 # Check the confirm value to make sure it is no more than
7266 # one character long.
7268 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
7272 # The confirm value is undefined, so set the
7273 # value of the confirm integer to '0'.
7281 # The confirm integer is '1', so add the word
7282 # to the filter list.
7284 # First, check the variables recieved are UTF8
7287 kiriwrite_variablecheck($filter_new_find, "utf8", 0, 0);
7288 kiriwrite_variablecheck($filter_new_replace, "utf8", 0, 0);
7289 kiriwrite_variablecheck($filter_new_priority, "utf8", 0, 0);
7290 kiriwrite_variablecheck($filter_new_notes, "utf8", 0, 0);
7292 # Convert the UTF8 values so that the length can
7295 $filter_new_find = kiriwrite_utf8convert($filter_new_find);
7296 $filter_new_replace = kiriwrite_utf8convert($filter_new_replace);
7297 $filter_new_priority = kiriwrite_utf8convert($filter_new_priority);
7298 $filter_new_notes = kiriwrite_utf8convert($filter_new_notes);
7300 # Check if the find filter is blank and return an error
7303 if (!$filter_new_find){
7305 # The find filter given is blank so return an
7308 kiriwrite_error("blankfindfilter");
7312 if (!$filter_new_priority){
7314 # The filter priority is blank so set it
7317 $filter_new_priority = 1;
7321 # Check the length and contents of the values given
7322 # to make sure they are valid.
7324 my $filterfind_maxlength_check = kiriwrite_variablecheck($filter_new_find, "maxlength", 1024, 1);
7325 my $filterreplace_maxlength_check = kiriwrite_variablecheck($filter_new_replace, "maxlength", 1024, 1);
7326 my $filterpriority_maxlength_check = kiriwrite_variablecheck($filter_new_priority, "maxlength", 5, 1);
7327 my $filterpriority_numbers_check = kiriwrite_variablecheck($filter_new_priority, "numbers", 0, 1);
7329 # Check if the result of the tests to see if they
7332 if ($filterfind_maxlength_check eq 1){
7334 # The find filter is too long, so return
7337 kiriwrite_error("findfiltertoolong");
7341 if ($filterreplace_maxlength_check eq 1){
7343 # The replace filter is too long, so
7346 kiriwrite_error("replacefiltertoolong");
7350 if ($filterpriority_maxlength_check eq 1){
7352 # The length of the filter priority
7353 # given is too long, so return an
7356 kiriwrite_error("filterprioritytoolong");
7360 if ($filterpriority_numbers_check eq 1){
7362 # The priority of the filter given
7363 # contains characters other than
7366 kiriwrite_error("filterpriorityinvalidchars");
7370 # Check if the filter priority is less than 1
7371 # and more than 10000 and return an error
7374 if ($filter_new_priority < 1 || $filter_new_priority > 50000){
7376 # The filter priority is less than 1 and
7377 # more than 10000, so return an error.
7379 kiriwrite_error("filterpriorityinvalid");
7383 # Connect to the database server.
7385 $kiriwrite_dbmodule->connect();
7387 # Check if any errors occured while connecting to the database server.
7389 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7391 # A database connection error has occured so return
7394 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7398 # Connect to the filter database.
7400 $kiriwrite_dbmodule->connectfilter(1);
7402 # Check if any error has occured while connecting to the filter
7405 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7407 # The filter database does not exist.
7409 kiriwrite_error("filtersdbmissing");
7411 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7413 # The filter database has invalid permissions set so return
7416 kiriwrite_error("filtersdbpermissions");
7420 # Add the filter to the filter database.
7422 $kiriwrite_dbmodule->addfilter({ FindFilter => $filter_new_find, ReplaceFilter => $filter_new_replace, Priority => $filter_new_priority, Notes => $filter_new_notes});
7424 # Check if any errors have occured while adding the filter.
7426 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7428 # The filter database has invalid permissions set so return
7431 kiriwrite_error("filtersdbpermissions");
7433 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseUncreatable"){
7435 # The filter database is uncreatable so return an error.
7437 kiriwrite_error("filterdatabase");
7439 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7441 # A database error with the filter database has occured so return
7442 # an error with the extended error information.
7444 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7448 # Disconnect from the filter database.
7450 $kiriwrite_dbmodule->disconnectfilter();
7452 # Disconnect from the database server.
7454 $kiriwrite_dbmodule->disconnect();
7456 # Write out a message saying that the filter was added to the
7459 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{filteradded}, { Style => "pageheader" });
7460 $kiriwrite_presmodule->addlinebreak();
7461 $kiriwrite_presmodule->addlinebreak();
7462 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{filteraddedmessage});
7463 $kiriwrite_presmodule->addlinebreak();
7464 $kiriwrite_presmodule->addlinebreak();
7465 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7467 return $kiriwrite_presmodule->grab();
7469 } elsif ($confirm ne 0) {
7471 # The confirm integer is another value (which
7472 # it shouldn't be) so return an error.
7474 kiriwrite_error("invalidvalue");
7478 # The confirm integer was blank so print out a form
7479 # for adding a new filter.
7481 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{addfilter}, { Style => "pageheader" });
7482 $kiriwrite_presmodule->addlinebreak();
7483 $kiriwrite_presmodule->addlinebreak();
7484 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
7485 $kiriwrite_presmodule->startbox();
7486 $kiriwrite_presmodule->addhiddendata("mode", "filter");
7487 $kiriwrite_presmodule->addhiddendata("action", "add");
7488 $kiriwrite_presmodule->addhiddendata("confirm", 1);
7489 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7491 $kiriwrite_presmodule->startheader();
7492 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
7493 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
7494 $kiriwrite_presmodule->endheader();
7496 $kiriwrite_presmodule->startrow();
7497 $kiriwrite_presmodule->addcell("tablecell1");
7498 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
7499 $kiriwrite_presmodule->endcell();
7500 $kiriwrite_presmodule->addcell("tablecell2");
7501 $kiriwrite_presmodule->addinputbox("findword", { Size => 64, MaxLength => 1024 });
7502 $kiriwrite_presmodule->endcell();
7503 $kiriwrite_presmodule->endrow();
7505 $kiriwrite_presmodule->startrow();
7506 $kiriwrite_presmodule->addcell("tablecell1");
7507 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{replacefilter});
7508 $kiriwrite_presmodule->endcell();
7509 $kiriwrite_presmodule->addcell("tablecell2");
7510 $kiriwrite_presmodule->addinputbox("replaceword", { Size => 64, MaxLength => 1024 });
7511 $kiriwrite_presmodule->endcell();
7512 $kiriwrite_presmodule->endrow();
7514 $kiriwrite_presmodule->startrow();
7515 $kiriwrite_presmodule->addcell("tablecell1");
7516 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
7517 $kiriwrite_presmodule->endcell();
7518 $kiriwrite_presmodule->addcell("tablecell2");
7519 $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5 });
7520 $kiriwrite_presmodule->startlist();
7521 $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
7522 $kiriwrite_presmodule->endlist();
7523 $kiriwrite_presmodule->endcell();
7524 $kiriwrite_presmodule->endrow();
7526 $kiriwrite_presmodule->startrow();
7527 $kiriwrite_presmodule->addcell("tablecell1");
7528 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
7529 $kiriwrite_presmodule->endcell();
7530 $kiriwrite_presmodule->addcell("tablecell2");
7531 $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10 });
7532 $kiriwrite_presmodule->endcell();
7533 $kiriwrite_presmodule->endrow();
7535 $kiriwrite_presmodule->endtable();
7537 $kiriwrite_presmodule->addlinebreak();
7538 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{addfilterbutton});
7539 $kiriwrite_presmodule->addtext(" | ");
7540 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
7541 $kiriwrite_presmodule->addtext(" | ");
7542 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7544 $kiriwrite_presmodule->endbox();
7545 $kiriwrite_presmodule->endform();
7547 return $kiriwrite_presmodule->grab();
7551 sub kiriwrite_filter_edit{
7552 #################################################################################
7553 # kiriwrite_filter_edit: Edits a filter from the filter list. #
7557 # kiriwrite_filter_edit(filternumber, newfilterfind, newfilterreplace, #
7558 # newfilterpriority, newfilternotes, confirm); #
7560 # filterid Specifies the filter number (line number) in the #
7561 # filter database. #
7562 # newfilterfind Specifies the new word to find. #
7563 # newfilterreplace Specifies the new word to replace. #
7564 # newfilterpriority Specifies the new filter priority. #
7565 # newfilternotes Specifies the new filter notes. #
7566 # confirm Confirms the action to edit a filter. #
7567 #################################################################################
7569 # Get the values that have been passed to the subroutine.
7571 my ($filter_id, $filter_new_find, $filter_new_replace, $filter_new_priority, $filter_new_notes, $confirm) = @_;
7573 # Check the confirm value to make sure it is no more than
7574 # one character long.
7576 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
7578 # Check if the confirm value is blank and if it is
7579 # srt the confirm value to 0.
7583 # The confirm value does not have any value
7584 # set so set it to 0.
7590 # Check if the filter identification number is blank,
7591 # contains characters other than numbers and is more
7592 # than seven characters long.
7596 # The filter identification number is blank,
7597 # so return an error.
7599 kiriwrite_error("filteridblank");
7603 my $filter_id_numbers_check = kiriwrite_variablecheck($filter_id, "numbers", 0, 1);
7605 if ($filter_id_numbers_check eq 1){
7607 # The filter identification number contains
7608 # characters other than numbers, so return
7611 kiriwrite_error("filteridinvalid");
7615 my $filter_id_maxlength_check = kiriwrite_variablecheck($filter_id, "maxlength", 7, 1);
7617 if ($filter_id_maxlength_check eq 1){
7619 # The filter identification number given
7620 # is more than seven characters long, so
7623 kiriwrite_error("filteridtoolong");
7627 my $filter_priority;
7632 # Check if the action to edit a filter has been
7637 # The action to edit a filter has been confirmed so
7638 # edit the selected filter.
7640 # First, check the variables recieved are UTF8
7643 kiriwrite_variablecheck($filter_new_find, "utf8", 0, 0);
7644 kiriwrite_variablecheck($filter_new_replace, "utf8", 0, 0);
7645 kiriwrite_variablecheck($filter_new_priority, "utf8", 0, 0);
7646 kiriwrite_variablecheck($filter_new_notes, "utf8", 0, 0);
7648 # Convert the UTF8 values so that the length can
7651 $filter_find = kiriwrite_utf8convert($filter_new_find);
7652 $filter_replace = kiriwrite_utf8convert($filter_new_replace);
7653 $filter_priority = kiriwrite_utf8convert($filter_new_priority);
7654 $filter_notes = kiriwrite_utf8convert($filter_new_notes);
7656 # Check if the find filter is blank and return an error
7659 if (!$filter_new_find){
7661 # The find filter given is blank so return an
7664 kiriwrite_error("blankfindfilter");
7668 if (!$filter_new_priority){
7670 # The filter priority is blank so set it
7673 $filter_new_priority = 1;
7677 # Check the length and contents of the values given
7678 # to make sure they are valid.
7680 my $filterfind_maxlength_check = kiriwrite_variablecheck($filter_new_find, "maxlength", 1024, 1);
7681 my $filterreplace_maxlength_check = kiriwrite_variablecheck($filter_new_replace, "maxlength", 1024, 1);
7682 my $filterpriority_maxlength_check = kiriwrite_variablecheck($filter_new_priority, "maxlength", 5, 1);
7683 my $filterpriority_numbers_check = kiriwrite_variablecheck($filter_new_priority, "numbers", 0, 1);
7685 # Check if the result of the tests to see if they
7688 if ($filterfind_maxlength_check eq 1){
7690 # The find filter is too long, so return
7693 kiriwrite_error("findfiltertoolong");
7697 if ($filterreplace_maxlength_check eq 1){
7699 # The replace filter is too long, so
7702 kiriwrite_error("replacefiltertoolong");
7706 if ($filterpriority_maxlength_check eq 1){
7708 # The length of the filter priority
7709 # given is too long, so return an
7712 kiriwrite_error("filterprioritytoolong");
7716 if ($filterpriority_numbers_check eq 1){
7718 # The priority of the filter given
7719 # contains characters other than
7722 kiriwrite_error("filterpriorityinvalidchars");
7726 # Check if the filter priority is less than 1
7727 # and more than 10000 and return an error
7730 if ($filter_new_priority < 1 || $filter_new_priority > 50000){
7732 # The filter priority is less than 1 and
7733 # more than 10000, so return an error.
7735 kiriwrite_error("filterpriorityinvalid");
7739 # Connect to the database server.
7741 $kiriwrite_dbmodule->connect();
7743 # Check if any errors occured while connecting to the database server.
7745 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7747 # A database connection error has occured so return
7750 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7754 # Connect to the filter database.
7756 $kiriwrite_dbmodule->connectfilter();
7758 # Check if any error has occured while connecting to the filter
7761 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7763 # The filter database does not exist.
7765 kiriwrite_error("filtersdbmissing");
7767 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7769 # The filter database has invalid permissions set so return
7772 kiriwrite_error("filtersdbpermissions");
7774 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7776 # A database error has occured with the filter database.
7778 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7782 # Edit the selected filter in the filter database.
7784 $kiriwrite_dbmodule->editfilter({ FilterID => $filter_id, NewFindFilter => $filter_new_find, NewReplaceFilter => $filter_new_replace, NewFilterPriority => $filter_new_priority, NewFilterNotes => $filter_new_notes });
7786 # Check if any errors occured while editing the filter.
7788 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7790 # The filter database has invalid permissions set so return
7793 kiriwrite_error("filtersdbpermissions");
7795 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7797 # A database error has occured while using the filter database
7798 # so return an error.
7800 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7802 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7804 # The specified filter does not exist so return an error.
7806 kiriwrite_error("filterdoesnotexist");
7810 # Disconnect from the filter database.
7812 $kiriwrite_dbmodule->disconnectfilter();
7814 # Disconnect from the database server.
7816 $kiriwrite_dbmodule->disconnect();
7818 # Write a message saying that the filter was edited.
7820 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfilter}, { Style => "pageheader" });
7821 $kiriwrite_presmodule->addlinebreak();
7822 $kiriwrite_presmodule->addlinebreak();
7823 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfiltermessage});
7824 $kiriwrite_presmodule->addlinebreak();
7825 $kiriwrite_presmodule->addlinebreak();
7826 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist}});
7828 return $kiriwrite_presmodule->grab();
7830 } elsif ($confirm eq 0){
7832 # The action to edit a filter has not been confirmed
7833 # so write a form for editing the filter with.
7835 # Connect to the database server.
7837 $kiriwrite_dbmodule->connect();
7839 # Check if any errors occured while connecting to the database server.
7841 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7843 # A database connection error has occured so return
7846 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7850 # Connect to the database server.
7852 $kiriwrite_dbmodule->connect();
7854 # Check if any errors occured while connecting to the database server.
7856 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7858 # A database connection error has occured so return
7861 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7865 # Connect to the filter database.
7867 $kiriwrite_dbmodule->connectfilter();
7869 # Check if any error has occured while connecting to the filter
7872 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7874 # The filter database does not exist.
7876 kiriwrite_error("filtersdbmissing");
7878 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7880 # The filter database has invalid permissions set so return
7883 kiriwrite_error("filtersdbpermissions");
7885 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7887 # A database error has occured with the filter database.
7889 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7893 # Get information about the filter.
7895 my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
7897 # Check if any errors occured while getting information about the filter.
7899 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7901 # A database error occured while using the filter database so
7904 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7906 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7908 # The filter does not exist so return an error.
7910 kiriwrite_error("filterdoesnotexist");
7914 # Get the required information.
7916 $filter_priority = $filter_info{"FilterPriority"};
7917 $filter_find = $filter_info{"FilterFind"};
7918 $filter_replace = $filter_info{"FilterReplace"};
7919 $filter_notes = $filter_info{"FilterNotes"};
7921 # Disconnect from the filter database.
7923 $kiriwrite_dbmodule->disconnectfilter();
7925 # Disconnect from the database server.
7927 $kiriwrite_dbmodule->disconnect();
7929 # Write out the form.
7931 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editfilter}, { Style => "pageheader" });
7932 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
7933 $kiriwrite_presmodule->startbox();
7934 $kiriwrite_presmodule->addhiddendata("mode", "filter");
7935 $kiriwrite_presmodule->addhiddendata("action", "edit");
7936 $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
7937 $kiriwrite_presmodule->addhiddendata("confirm", 1);
7939 $kiriwrite_presmodule->addlinebreak();
7940 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7942 $kiriwrite_presmodule->startheader();
7943 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
7944 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
7945 $kiriwrite_presmodule->endheader();
7947 $kiriwrite_presmodule->startrow();
7948 $kiriwrite_presmodule->addcell("tablecell1");
7949 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
7950 $kiriwrite_presmodule->endcell();
7951 $kiriwrite_presmodule->addcell("tablecell2");
7952 $kiriwrite_presmodule->addinputbox("filterfind", { Size => 64, MaxLength => 1024, Value => $filter_find });
7953 $kiriwrite_presmodule->endcell();
7954 $kiriwrite_presmodule->endrow();
7956 $kiriwrite_presmodule->startrow();
7957 $kiriwrite_presmodule->addcell("tablecell1");
7958 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{replacefilter});
7959 $kiriwrite_presmodule->endcell();
7960 $kiriwrite_presmodule->addcell("tablecell2");
7961 $kiriwrite_presmodule->addinputbox("filterreplace", { Size => 64, MaxLength => 1024, Value => $filter_replace });
7962 $kiriwrite_presmodule->endcell();
7963 $kiriwrite_presmodule->endrow();
7965 $kiriwrite_presmodule->startrow();
7966 $kiriwrite_presmodule->addcell("tablecell1");
7967 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
7968 $kiriwrite_presmodule->endcell();
7969 $kiriwrite_presmodule->addcell("tablecell2");
7970 $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5, Value => $filter_priority });
7971 $kiriwrite_presmodule->startlist();
7972 $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
7973 $kiriwrite_presmodule->endlist();
7974 $kiriwrite_presmodule->endcell();
7975 $kiriwrite_presmodule->endrow();
7977 $kiriwrite_presmodule->startrow();
7978 $kiriwrite_presmodule->addcell("tablecell1");
7979 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
7980 $kiriwrite_presmodule->endcell();
7981 $kiriwrite_presmodule->addcell("tablecell2");
7982 $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10});
7983 $kiriwrite_presmodule->endcell();
7984 $kiriwrite_presmodule->endrow();
7986 $kiriwrite_presmodule->endtable();
7988 $kiriwrite_presmodule->addlinebreak();
7989 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{editfilterbutton});
7990 $kiriwrite_presmodule->addtext(" | ");
7991 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
7992 $kiriwrite_presmodule->addtext(" | ");
7993 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7994 $kiriwrite_presmodule->endbox();
7995 $kiriwrite_presmodule->endform();
7997 return $kiriwrite_presmodule->grab();
8001 # A confirm value other than 0 or 1 has been
8002 # specified, so return an error.
8004 kiriwrite_error("invalidvalue");
8010 sub kiriwrite_filter_delete{
8011 #################################################################################
8012 # kiriwrite_filter_delete: Deletes a filter from the filter list. #
8016 # kiriwrite_filter_delete(filterid, confirm); #
8018 # filterid Specifies the filter line number to delete. #
8019 # confirm Confirms the deletion of the selected filter. #
8020 #################################################################################
8022 # Get the values that were passed to this subroutine.
8024 my ($filter_id, $confirm) = @_;
8026 # Check the confirm value to make sure it is no more than
8027 # one character long.
8029 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
8031 # Check if the confirm value is blank and if it is
8032 # srt the confirm value to 0.
8036 # The confirm value does not have any value
8037 # set so set it to 0.
8043 # Check if the filter identification number is blank,
8044 # contains characters other than numbers and is more
8045 # than seven characters long.
8049 # The filter identification number is blank,
8050 # so return an error.
8052 kiriwrite_error("filteridblank");
8056 my $filter_id_numbers_check = kiriwrite_variablecheck($filter_id, "numbers", 0, 1);
8058 if ($filter_id_numbers_check eq 1){
8060 # The filter identification number contains
8061 # characters other than numbers, so return
8064 kiriwrite_error("filteridinvalid");
8068 my $filter_id_maxlength_check = kiriwrite_variablecheck($filter_id, "maxlength", 7, 1);
8070 if ($filter_id_maxlength_check eq 1){
8072 # The filter identification number given
8073 # is more than seven characters long, so
8076 kiriwrite_error("filteridtoolong");
8080 # Define some values for later.
8082 my @database_filter;
8083 my $filter_exists = 0;
8085 # Check if the confirm integer has a value of '1'.
8089 # The action to delete a filter has been confirmed.
8091 # Connect to the database server.
8093 $kiriwrite_dbmodule->connect();
8095 # Check if any errors occured while connecting to the database server.
8097 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8099 # A database connection error has occured so return
8102 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8106 # Connect to the filter database.
8108 $kiriwrite_dbmodule->connectfilter();
8110 # Check if any error has occured while connecting to the filter
8113 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8115 # The filter database does not exist.
8117 kiriwrite_error("filtersdbmissing");
8119 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8121 # The filter database has invalid permissions set so return
8124 kiriwrite_error("filtersdbpermissions");
8126 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8128 # A database error has occured with the filter database.
8130 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8134 # Delete the filter from the filter database.
8136 $kiriwrite_dbmodule->deletefilter({ FilterID => $filter_id });
8138 # Check if any errors occured while deleting the filter.
8140 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8142 # A database error has occured while trying to delete a filter so
8145 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8147 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8149 # The filter does not exist so return an error.
8151 kiriwrite_error("filterdoesnotexist");
8155 # Disconnect from the filter database.
8157 $kiriwrite_dbmodule->disconnectfilter();
8159 # Disconnect from the database server.
8161 $kiriwrite_dbmodule->disconnect();
8163 # Write a message saying that the filter was deleted
8164 # from the filter database.
8166 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfilter}, { Style => "pageheader" });
8167 $kiriwrite_presmodule->addlinebreak();
8168 $kiriwrite_presmodule->addlinebreak();
8169 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfiltermessage});
8170 $kiriwrite_presmodule->addlinebreak();
8171 $kiriwrite_presmodule->addlinebreak();
8172 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
8174 } elsif ($confirm eq 0) {
8176 # Connect to the database server.
8178 $kiriwrite_dbmodule->connect();
8180 # Check if any errors occured while connecting to the database server.
8182 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8184 # A database connection error has occured so return
8187 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8191 # Connect to the filter database.
8193 $kiriwrite_dbmodule->connectfilter();
8195 # Check if any error has occured while connecting to the filter
8198 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8200 # The filter database does not exist.
8202 kiriwrite_error("filtersdbmissing");
8204 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8206 # The filter database has invalid permissions set so return
8209 kiriwrite_error("filtersdbpermissions");
8211 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8213 # A database error has occured with the filter database.
8215 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8219 # Get information about the filter (to check if it exists).
8221 my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
8223 # Check if any errors occured while getting information about the filter.
8225 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8227 # A database error occured while using the filter database so
8230 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8232 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8234 # The filter does not exist so return an error.
8236 kiriwrite_error("filterdoesnotexist");
8240 # Disconnect from the filter database.
8242 $kiriwrite_dbmodule->disconnectfilter();
8244 # Disconnect from the database
8246 # The confirm integer is '0', so continue write out
8247 # a form asking the user to confirm the deletion
8250 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefilter}, { Style => "pageheader" });
8251 $kiriwrite_presmodule->addlinebreak();
8252 $kiriwrite_presmodule->addlinebreak();
8253 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefiltermessage});
8254 $kiriwrite_presmodule->addlinebreak();
8255 $kiriwrite_presmodule->addlinebreak();
8256 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
8257 $kiriwrite_presmodule->startbox();
8258 $kiriwrite_presmodule->addhiddendata("mode", "filter");
8259 $kiriwrite_presmodule->addhiddendata("action", "delete");
8260 $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
8261 $kiriwrite_presmodule->addhiddendata("confirm", 1);
8262 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{deletefilterbutton});
8263 $kiriwrite_presmodule->addtext(" | ");
8264 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{deletefilterreturn} });
8265 $kiriwrite_presmodule->endbox();
8266 $kiriwrite_presmodule->endform();
8270 kiriwrite_error("invalidvalue");
8274 return $kiriwrite_presmodule->grab();
8278 sub kiriwrite_compile_makepages{
8279 #################################################################################
8280 # kiriwrite_compile_makepages: Compile the selected pages and place them in the #
8281 # specified output directory. #
8285 # kiriwrite_compile_makepages(type, selectedlist, confirm); #
8287 # type Specifies if single or multiple databases are to be compiled. #
8288 # confirm Specifies if the action to compile the databases should really #
8290 # selectedlist Specifies the databases to compile from as an array. #
8291 #################################################################################
8293 # Get the values that have been passed to the subroutine.
8295 my ($type, $confirm, @selectedlist) = @_;
8297 # Check if the confirm value is more than one
8300 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
8302 # Check if the confirm value is blank and if it
8303 # is then set the confirm value to 0.
8307 # The confirm value is blank, so set the
8308 # confirm value to 0.
8314 # Check if there are any databases selected
8315 # and return an error if there isn't.
8317 if (!@selectedlist){
8319 # There are no databases in the array
8320 # so return an error.
8322 kiriwrite_error("nodatabaseselected");
8326 # Check if the type given is no more than
8327 # 7 characters long.
8329 my $type_maxlength_check = kiriwrite_variablecheck($type, "maxlength", 8, 1);
8331 if ($type_maxlength_check eq 1){
8333 # The type length given is too long so
8336 kiriwrite_error("variabletoolong");
8340 # Check if the action to compile the databases
8341 # has been confirmed.
8345 # The action to compile the datavases has
8348 # Define some variables for later.
8362 my @pagedirectories;
8363 my @database_filters;
8364 my $warning_count = 0;
8365 my $error_count = 0;
8366 my $pages_count = 0;
8368 my $filters_count = 0;
8369 my $filters_find_blank_warning = 0;
8375 my $page_filename_check;
8376 my $page_filename_char = "";
8377 my $page_filename_directory;
8378 my $page_filename_length = 0;
8379 my $page_filename_seek = 0;
8380 my $page_filename_dircount = 0;
8381 my $page_filename_exists = 0;
8382 my $page_filename_permissions = 0;
8383 my $page_directory_name;
8384 my $page_directory_path;
8386 my $page_description;
8391 my $page_lastmodified;
8394 my $page_autosection;
8397 my $database_filename_check = 0;
8398 my $database_maxlength_check = 0;
8399 my $output_exists = 0;
8400 my $output_permissions = 0;
8401 my $filters_exists = 0;
8402 my $filters_permissions = 0;
8403 my $filters_skip = 0;
8405 my $templates_skip = 0;
8406 my $information_prefix = $kiriwrite_lang->{compile}->{informationprefix};
8407 my $error_prefix = $kiriwrite_lang->{compile}->{errorprefix};
8408 my $warning_prefix = $kiriwrite_lang->{compile}->{warningprefix};
8409 my $filehandle_page;
8411 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabases}, { Style => "pageheader" });
8412 $kiriwrite_presmodule->addlinebreak();
8413 $kiriwrite_presmodule->addlinebreak();
8414 $kiriwrite_presmodule->startbox("datalist");
8416 # Check if the output directory exists and has
8417 # valid permissions set.
8419 $output_exists = kiriwrite_fileexists($kiriwrite_config{'directory_data_output'});
8421 if ($output_exists ne 0){
8423 # The output directory does not exist so
8426 kiriwrite_error("outputdirectorymissing");
8430 $output_permissions = kiriwrite_filepermissions($kiriwrite_config{'directory_data_output'}, 1, 1);
8432 if ($output_permissions ne 0){
8434 # The output directory has invalid
8435 # permissions set so return an error.
8437 kiriwrite_error("outputdirectoryinvalidpermissions");
8441 # Connect to the database server.
8443 $kiriwrite_dbmodule->connect();
8445 # Check if any errors occured while connecting to the database server.
8447 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8449 # A database connection error has occured so return
8452 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8456 # Connect to the filter database.
8458 $kiriwrite_dbmodule->connectfilter();
8460 # Check if any error has occured while connecting to the filter
8463 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8465 # The filter database does not exist so write a warning message.
8467 $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{filterdatabasemissing});
8468 $kiriwrite_presmodule->addlinebreak();
8472 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8474 # The filter database has invalid permissions set so write a
8477 $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{filterdatabasepermissions});
8478 $kiriwrite_presmodule->addlinebreak();
8484 # Load the filter database (if the filters skip
8485 # value isn't set to 1).
8487 if ($filters_skip eq 0){
8489 # Get the list of available filters.
8491 @database_filters = $kiriwrite_dbmodule->getfilterlist();
8493 # Check if any errors occured while getting the list of filters.
8495 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8497 # A database error has occured with the filter database.
8499 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8500 $kiriwrite_presmodule->addlinebreak();
8505 # Check if the filters skip value is set to 0
8506 # before executing the query.
8508 if ($filters_skip eq 0){
8510 foreach $filter (@database_filters){
8512 # Get the filter information.
8514 %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
8516 # Check if any errors occured while getting the filter information.
8518 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8520 # A database error occured while using the filter database.
8522 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8523 $kiriwrite_presmodule->addlinebreak();
8527 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8529 # The filter does not exist so process the next filter.
8535 # Check if the find filter is blank and
8536 # if it is then write a warning message.
8538 if (!$filter_info{"FilterFind"}){
8540 if ($filters_find_blank_warning ne 1){
8542 $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{findfilterblank});
8543 $kiriwrite_presmodule->addlinebreak();
8544 $filters_find_blank_warning = 1;
8550 # Add each find and replace filter.
8552 $findfilter[$filters_count] = $filter_info{"FilterFind"};
8553 $replacefilter[$filters_count] = $filter_info{"FilterReplace"};
8561 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishfilterdatabase});
8562 $kiriwrite_presmodule->addlinebreak();
8568 # Disconnect from the filter database.
8570 $kiriwrite_dbmodule->disconnectfilter();
8572 # Connect to the template database.
8574 $kiriwrite_dbmodule->connecttemplate();
8576 # Check if any errors occured while connecting to the template database.
8578 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
8580 # The template database does not exist so set the template
8583 $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{templatedatabasemissing});
8584 $kiriwrite_presmodule->addlinebreak();
8585 $templates_skip = 1;
8588 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
8590 # The template database has invalid permissions set so write
8591 # the template warning message.
8593 $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{templatedatabasepermissions});
8594 $kiriwrite_presmodule->addlinebreak();
8595 $templates_skip = 1;
8600 # Check if the template skip value isn't set and if it isn't
8601 # then get the list of templates.
8603 if (!$templates_skip){
8605 @templateslist = $kiriwrite_dbmodule->gettemplatelist();
8607 # Check if any errors had occured.
8609 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
8611 # A database error occured while getting the list
8612 # of templates so return a warning message with the
8613 # extended error information.
8615 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8616 $templates_skip = 1;
8621 # Check if the template skip value isn't set and if it isn't
8622 # then process each template.
8624 if (!$templates_skip){
8626 # Process each template.
8628 foreach $template (@templateslist){
8630 # Get information about the template.
8632 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
8634 # Check if any error occured while getting the template information.
8636 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
8638 # A database error has occured, so return an error.
8640 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8643 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
8645 # The template does not exist, so process the next template.
8651 # Place each template file into the hash.
8653 $templatefiles{$template_info{"TemplateFilename"}}{template} = $template_info{"TemplateLayout"};
8654 $templatefiles{$template_info{"TemplateFilename"}}{valid} = 1;
8658 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishtemplatedatabase});
8659 $kiriwrite_presmodule->addlinebreak();
8665 # Disconnect from the template database.
8667 $kiriwrite_dbmodule->disconnecttemplate();
8669 # Process each database.
8671 foreach $database (@selectedlist){
8673 # Check if the database filename and length
8676 $kiriwrite_presmodule->addhorizontalline();
8678 $database_filename_check = kiriwrite_variablecheck($database, "page_filename", "", 1);
8679 $database_maxlength_check = kiriwrite_variablecheck($database, "maxlength", 32, 1);
8681 if ($database_filename_check ne 0){
8683 # The database filename is invalid, so process
8684 # the next database.
8686 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenameinvalidcharacters}, $database));
8687 $kiriwrite_presmodule->addlinebreak();
8693 if ($database_maxlength_check ne 0){
8695 # The database file is too long, so process the
8698 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenametoolong}, $database));
8699 $kiriwrite_presmodule->addlinebreak();
8705 # Select the database.
8707 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
8709 # Check if any errors had occured while selecting the database.
8711 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
8713 # The database does not exist, so write a warning message.
8715 $kiriwrite_presmodule->addtext($warning_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasemissing}, $database));
8716 $kiriwrite_presmodule->addlinebreak();
8720 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
8722 # The database has invalid permissions set, so write
8725 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseinvalidpermissions}, $database));
8726 $kiriwrite_presmodule->addlinebreak();
8732 # Get information about the database.
8734 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
8736 # Check if any error occured while getting the database information.
8738 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
8740 # A database error has occured so write an error.
8742 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseerror}, $database, $kiriwrite_dbmodule->geterror(1)));
8743 $kiriwrite_presmodule->addlinebreak();
8749 # Get the database name.
8751 $database_name = $database_info{"DatabaseName"};
8753 $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compilingpages}, $database_name));
8754 $kiriwrite_presmodule->addlinebreak();
8756 # Get the list of pages in the database.
8758 @databasepages = $kiriwrite_dbmodule->getpagelist();
8760 # Check if any errors occured while getting the list of pages.
8762 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
8764 # A database error has occured so return an error and
8765 # also the extended error information.
8767 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasepageerror}, $database, $kiriwrite_dbmodule->geterror(1)));
8768 $kiriwrite_presmodule->addlinebreak();
8774 foreach $page (@databasepages) {
8776 # Get information about the page.
8778 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
8780 $page_filename = $page_info{"PageFilename"};
8781 $page_name = $page_info{"PageName"};
8782 $page_description = $page_info{"PageDescription"};
8783 $page_section = $page_info{"PageSection"};
8784 $page_template = $page_info{"PageTemplate"};
8785 $page_content = $page_info{"PageContent"};
8786 $page_settings = $page_info{"PageSettings"};
8787 $page_lastmodified = $page_info{"PageLastModified"};
8789 # Check if the filename is valid.
8791 $page_filename_check = kiriwrite_variablecheck($page_filename, "page_filename", 0, 1);
8793 if ($page_filename_check ne 0){
8795 # The file name is not valid so write a
8796 # error and process the next page.
8798 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{invalidpagefilename}, $page_name));
8799 $kiriwrite_presmodule->addlinebreak();
8805 # Check if the template with the filename does not exist
8806 # in the template files hash and write a message and
8807 # process the next page.
8809 if (!$templatefiles{$page_template}{valid} && $page_template ne "!none" && $templates_skip eq 0){
8811 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatefilemissing}, $page_template, $page_name, $page_filename));
8812 $kiriwrite_presmodule->addlinebreak();
8816 $page_final = $page_content;
8818 } elsif ($page_template eq "!none"){
8820 $page_final = $page_content;
8824 $page_final = $templatefiles{$page_template}{template};
8830 $page_final =~ s/<kiriwrite:pagecontent>/$page_content/g;
8834 # Create the combined page title (if needed).
8836 if ($page_settings eq 0 || $page_settings > 3){
8838 # Don't use page name or section name.
8840 $page_final =~ s/<kiriwrite:pagetitle>//g;
8842 } elsif ($page_settings eq 1){
8844 # Use the page name and section name.
8846 $page_autotitle = "(" . $page_section . " - " . $page_name . ")";
8847 $page_title = $page_section . " - " . $page_name;
8848 $page_final =~ s/<kiriwrite:pagetitle>/$page_title/g;
8850 } elsif ($page_settings eq 2){
8852 # Use the page name only.
8854 $page_autotitle = "(" . $page_name . ")";
8855 $page_final =~ s/<kiriwrite:pagetitle>/$page_name/g;
8857 } elsif ($page_settings eq 3){
8859 # Use the section name only.
8862 $page_autotitle = "(" . $page_section . ")";
8864 $page_final =~ s/<kiriwrite:pagetitle>/$page_section/g;
8868 # Check if the section name is not blank and
8869 # place brackets inbetween if it is.
8873 $page_autosection = "(" . $page_section . ")";
8877 # Replace each <kiriwrite> value with the apporiate page
8880 $page_final =~ s/<kiriwrite:pagename>/$page_name/g;
8881 $page_final =~ s/<kiriwrite:pagedescription>/$page_description/g;
8882 $page_final =~ s/<kiriwrite:pagesection>/$page_section/g;
8883 $page_final =~ s/<kiriwrite:autosection>/$page_autosection/g;
8884 $page_final =~ s/<kiriwrite:autotitle>/$page_autotitle/g;
8886 # Process the filters on the page data.
8888 if ($filters_skip eq 0){
8892 foreach $filter_find (@findfilter){
8894 # Get the replace filter and process each
8895 # filter on the page.
8897 $filter_replace = $replacefilter[$filters_count];
8898 $page_final =~ s/$filter_find/$filter_replace/g;
8905 # Process the page filename and check what directories
8906 # need to be created.
8908 $page_filename_length = int(length($page_filename));
8912 $page_filename_char = substr($page_filename, $page_filename_seek, 1);
8914 # Check if a forward slash appears and add it to
8915 # the list of directories array.
8917 if ($page_filename_char eq '/'){
8919 # Append the directory name to the list of
8920 # directories array.
8922 $pagedirectories[$page_filename_dircount] = $page_filename_directory;
8923 $page_filename_directory = "";
8924 $page_filename_char = "";
8925 $page_filename_dircount++;
8929 # Append the character to the directory/filename.
8931 $page_filename_directory = $page_filename_directory . $page_filename_char;
8935 $page_filename_seek++;
8937 } until ($page_filename_length eq $page_filename_seek);
8939 foreach $page_directory_name (@pagedirectories){
8941 # Check if the directory name is undefined and if it
8942 # is then set it blank.
8944 if (!$page_directory_name){
8945 $page_directory_name = "";
8948 if (!$page_directory_path){
8949 $page_directory_path = "";
8952 # Check if the directory exists and create
8953 # the directory if it doesn't exist.
8955 $page_directory_path = $page_directory_path . '/' . $page_directory_name;
8957 mkdir($kiriwrite_config{"directory_data_output"} . '/' . $page_directory_path);
8961 # Check if the file already exists and if it does then check
8962 # the permissions of the file and return an error if the
8963 # permissions set are invalid.
8965 $page_filename_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"} . '/' . $page_filename);
8967 if ($page_filename_exists eq 0){
8969 # The page filename exists, so check if the permissions given are
8972 $page_filename_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"} . '/' . $page_filename, 1, 1);
8974 if ($page_filename_permissions eq 1){
8976 # The file has invalid permissions set.
8978 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pageinvalidpermissions}, $page_filename));
8979 $kiriwrite_presmodule->addlinebreak();
8982 # Reset certain values.
8984 $page_autotitle = "";
8985 $page_autosection = "";
8986 $page_filename_seek = 0;
8987 $page_filename_dircount = 0;
8989 $page_filename_directory = "";
8990 $page_directory_path = "";
8991 $page_directory_name = "";
8992 @pagedirectories = ();
9000 # Reset certain values.
9002 $page_autotitle = "";
9003 $page_autosection = "";
9004 $page_filename_seek = 0;
9005 $page_filename_dircount = 0;
9007 $page_filename_directory = "";
9008 $page_directory_path = "";
9009 $page_directory_name = "";
9010 @pagedirectories = ();
9012 # Write the file to the output directory.
9014 ($page_filename) = $page_filename =~ m/^(.*)$/g;
9015 ($kiriwrite_config{"directory_data_output"}) = $kiriwrite_config{"directory_data_output"} =~ m/^(.*)$/g;
9017 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);
9025 binmode $filehandle_page, ':utf8';
9026 print $filehandle_page $page_final;
9027 close($filehandle_page);
9029 # Write a message saying the page has been compiled. Check
9030 # to see if the page name is blank and write a message
9031 # saying there's no page name.
9034 $kiriwrite_presmodule->addtext($information_prefix . ' ');
9035 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
9036 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledpageblankname}, $page_filename));
9038 $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compiledpage}, $page_name, $page_filename));
9042 $kiriwrite_presmodule->addlinebreak();
9047 # Write a message saying that the database has
9050 $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefinish}, $database_name));
9051 $kiriwrite_presmodule->addlinebreak();
9055 # Disconnect from the database server.
9057 $kiriwrite_dbmodule->disconnect();
9059 $kiriwrite_presmodule->addhorizontalline();
9060 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compileresults}, $pages_count, $error_count, $warning_count));
9061 $kiriwrite_presmodule->endbox();
9062 $kiriwrite_presmodule->addlinebreak();
9063 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9065 return $kiriwrite_presmodule->grab();
9067 } elsif ($confirm eq 0){
9069 # The action to compile the databases has
9070 # not been confirmed so check what type
9073 if ($type eq "single"){
9075 # The type is a single database selected so
9076 # process that database.
9078 # Define some variables for later.
9081 my $database_filename_check;
9082 my $database_maxlength_check;
9083 my $databasefilename;
9086 # Check that the database name and length are
9087 # valid and return an error if they aren't.
9089 $databasefilename = $selectedlist[0];
9091 # Connect to the database server.
9093 $kiriwrite_dbmodule->connect();
9095 # Check if any errors occured while connecting to the database server.
9097 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9099 # A database connection error has occured so return
9102 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9106 # Select the database.
9108 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasefilename });
9110 # Check if any errors had occured while selecting the database.
9112 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9114 # The database does not exist, so return an error.
9116 kiriwrite_error("databasemissingfile");
9118 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9120 # The database has invalid permissions set, so return
9123 kiriwrite_error("databaseinvalidpermissions");
9127 # Get information about the database.
9129 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9131 # Check if any error occured while getting the database information.
9133 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9135 # A database error has occured so return an error and
9136 # also the extended error information.
9138 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
9142 $database_name = $database_info{"DatabaseName"};
9144 # Disconnect from the database server.
9146 $kiriwrite_dbmodule->disconnect();
9148 # Write out a form asking the user to confirm if the
9149 # user wants to compile the selected database.
9151 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabase}, { Style => "pageheader" });
9152 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9153 $kiriwrite_presmodule->startbox();
9154 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9155 $kiriwrite_presmodule->addhiddendata("action", "compile");
9156 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9157 $kiriwrite_presmodule->addhiddendata("id[1]", $databasefilename);
9158 $kiriwrite_presmodule->addhiddendata("name[1]", "on");
9159 $kiriwrite_presmodule->addhiddendata("confirm", 1);
9160 $kiriwrite_presmodule->addlinebreak();
9161 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledatabasemessage}, $database_name));
9162 $kiriwrite_presmodule->addlinebreak();
9163 $kiriwrite_presmodule->addlinebreak();
9164 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compiledatabasebutton});
9165 $kiriwrite_presmodule->addtext(" | ");
9166 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9167 $kiriwrite_presmodule->endbox();
9168 $kiriwrite_presmodule->endform();
9170 return $kiriwrite_presmodule->grab();
9172 } elsif ($type eq "multiple"){
9174 # The type is multiple databases selected
9175 # so process each database.
9177 # Define some variables for later.
9182 my $database_filename_check;
9183 my $database_maxlength_check;
9184 my $database_count = 0;
9185 my $database_info_name;
9187 # Connect to the database server.
9189 $kiriwrite_dbmodule->connect();
9191 # Check if any errors occured while connecting to the database server.
9193 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9195 # A database connection error has occured so return
9198 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9202 foreach $databasename (@selectedlist){
9204 # Check if the database is in the database
9205 # directory and skip it if it isn't.
9207 $database_filename_check = kiriwrite_variablecheck($databasename, "filename", "", 1);
9208 $database_maxlength_check = kiriwrite_variablecheck($databasename, "maxlength", 32, 1);
9210 if ($database_filename_check ne 0 || $database_maxlength_check ne 0){
9212 # The database filename given is invalid or
9213 # the database filename given is too long
9214 # so process the next database.
9220 # Select the database to add the page to.
9222 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasename });
9224 # Check if any errors had occured while selecting the database.
9226 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9228 # The database does not exist, so process the next database.
9232 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9234 # The database has invalid permissions set, so process
9235 # the next database.
9241 # Get information about the database.
9243 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9245 # Check if any error occured while getting the database information.
9247 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9249 # A database error has occured so process the next
9256 $database_list{$database_count}{Name} = $database_info{"DatabaseName"};
9257 $database_list{$database_count}{Filename} = $databasename;
9263 # Check if any databases are available to be compiled.
9265 if ($database_count eq 0){
9267 # No databases are available to be compiled.
9269 kiriwrite_error("nodatabaseselected");
9273 # Write out the form for compiling the database.
9275 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabases}, { Style => "pageheader" });
9276 $kiriwrite_presmodule->addlinebreak();
9277 $kiriwrite_presmodule->addlinebreak();
9278 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9279 $kiriwrite_presmodule->startbox();
9280 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9281 $kiriwrite_presmodule->addhiddendata("action", "compile");
9282 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9283 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9284 $kiriwrite_presmodule->addhiddendata("confirm", 1);
9285 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabasesmessage});
9286 $kiriwrite_presmodule->addlinebreak();
9287 $kiriwrite_presmodule->addlinebreak();
9288 $kiriwrite_presmodule->startbox("datalist");
9290 $database_count = 0;
9292 # write out the list of databases to compile.
9294 foreach $database (keys %database_list){
9298 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9299 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9301 # Check if the database name is undefined and if it is
9302 # then write a message saying the database name is blank.
9304 if (!$database_list{$database}{Name}){
9305 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{compile}->{blankdatabasename});
9307 $kiriwrite_presmodule->addtext($database_list{$database}{Name});
9310 $kiriwrite_presmodule->addlinebreak();
9314 $kiriwrite_presmodule->endbox();
9316 # Disconnect from the database server.
9318 $kiriwrite_dbmodule->disconnect();
9320 $kiriwrite_presmodule->addlinebreak();
9321 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselecteddatabasesbutton});
9322 $kiriwrite_presmodule->addtext(" | ");
9323 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9324 $kiriwrite_presmodule->endbox();
9325 $kiriwrite_presmodule->endform();
9327 return $kiriwrite_presmodule->grab();
9331 # The type is something else other than
9332 # single or multiple, so return an error.
9334 kiriwrite_error("invalidvariable");
9340 # The confirm value is neither 0 or 1, so
9343 kiriwrite_error("invalidvariable");
9349 sub kiriwrite_compile_all{
9350 #################################################################################
9351 # kiriwrite_compile_all: Compile all of the databases in the database #
9356 # kiriwrite_compile_all(); #
9357 #################################################################################
9359 # Connect to the database server.
9361 $kiriwrite_dbmodule->connect();
9363 # Check if any errors occured while connecting to the database server.
9365 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9367 # A database connection error has occured so return
9370 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9374 # Get the list of available databases.
9376 my @database_list = $kiriwrite_dbmodule->getdblist();
9378 # Check if any errors occured while getting the databases.
9380 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9382 # The database directory is missing so return an error.
9384 kiriwrite_error("datadirectorymissing");
9386 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9388 # The database directory has invalid permissions set so return
9391 kiriwrite_error("datadirectoryinvalidpermissions");
9395 # Define some variables for later.
9398 my $database_name_filename_check;
9399 my $database_count = 0;
9401 # Check the list of databases to compile to see if it is blank,
9402 # if it is then return an error.
9404 if (!@database_list){
9406 # The list of database is blank so return an error.
9408 kiriwrite_error("nodatabasesavailable");
9412 # Write out a form for confirming the action to compile all of the databases.
9414 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabases}, { Style => "pageheader" });
9415 $kiriwrite_presmodule->addlinebreak();
9416 $kiriwrite_presmodule->addlinebreak();
9418 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9419 $kiriwrite_presmodule->startbox();
9420 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9421 $kiriwrite_presmodule->addhiddendata("action", "compile");
9422 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9424 foreach $database (@database_list){
9426 # Check if the database filename is blank.
9428 if ($database eq ""){
9430 # The database filename is blank so process
9431 # the next database.
9437 # Check if the database filename is valid before
9438 # using the database.
9440 $database_name_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
9442 if ($database_name_filename_check ne 0){
9444 # The database filename is invalid so process
9445 # the next database.
9452 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database);
9453 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9457 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9459 # Disconnect from the database server.
9461 $kiriwrite_dbmodule->disconnect();
9463 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabasesmessage});
9464 $kiriwrite_presmodule->addlinebreak();
9465 $kiriwrite_presmodule->addlinebreak();
9467 $kiriwrite_presmodule->addhiddendata("confirm", 1);
9468 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compilealldatabasesbutton});
9469 $kiriwrite_presmodule->addtext(" | ");
9470 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9471 $kiriwrite_presmodule->endbox();
9472 $kiriwrite_presmodule->endform();
9474 return $kiriwrite_presmodule->grab();
9478 sub kiriwrite_selectedlist{
9479 #################################################################################
9480 # kiriwrite_page_selectedlist: Get the list of selected pages to use. #
9484 # kiriwrite_page_selectedlist(); #
9485 #################################################################################
9487 # Load the required Perl modules.
9489 my $query = new CGI;
9491 my $count = $query->param('count');
9493 # Check if the list of files has a value and if not set it 0.
9501 # Define some values for later.
9510 my $final_count = 0;
9513 # Get the list of filenames.
9517 # Get the values from id[]
9521 $filename = $query->param('id[' . $seek . ']');
9522 $filename_list[$seek] = $filename;
9524 } until ($seek eq $count || $count eq 0);
9526 # Get the list of selected filenames.
9532 # Get the values from name[]
9536 $selected = $query->param('name[' . $seek . ']');
9544 $selected_list[$seek] = $selected;
9546 } until ($seek eq $count || $count eq 0);
9548 # Create a final list of filenames to be used for
9555 # Check if the selected value is on and include
9556 # the filename in the final list.
9560 $selected = $selected_list[$seek];
9562 if ($selected eq "on"){
9564 $filename = $filename_list[$seek];
9565 $final_list[$final_count] = $filename;
9570 } until ($seek eq $count || $count eq 0);
9576 sub kiriwrite_compile_list{
9577 #################################################################################
9578 # kiriwrite_compile_list: Shows a list of databases that can be compiled. #
9582 # kiriwrite_compile_list(); #
9583 #################################################################################
9585 # Define the following variables that are going to be used before using
9586 # the foreach function.
9590 my $database_count = 0;
9591 my $database_filename = "";
9592 my $database_filename_friendly = "";
9593 my $database_permissions = "";
9594 my $database_name = "";
9595 my $database_description = "";
9597 my @permissions_list;
9599 my $table_style = 0;
9600 my $table_style_name = "";
9603 tie(%database_list, 'Tie::IxHash');
9605 # Connect to the database server.
9607 $kiriwrite_dbmodule->connect();
9609 # Check if any errors occured while connecting to the database server.
9611 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9613 # A database connection error has occured so return
9616 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9620 # Get the list of available databases and process any errors that
9621 # might have occured.
9623 my @database_list = $kiriwrite_dbmodule->getdblist();
9625 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9627 # The database directory is missing so return an error.
9629 kiriwrite_error("datadirectorymissing");
9631 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9633 # The database directory has invalid permissions set so return
9636 kiriwrite_error("datadirectoryinvalidpermissions");
9640 # Begin creating the table for the list of databases.
9642 foreach $data_file (@database_list){
9644 # Select the database.
9646 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
9648 # Check if any error occured while selecting the database.
9650 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9652 # The database does not exist, so process the next
9657 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
9659 # The database has invalid permissions settings, so
9660 # add the database to the list of databases with
9661 # invalid permissions set and process the next
9664 push(@permissions_list, $data_file);
9669 # Get information about the database.
9671 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9673 # Check if any error occured while getting information from the
9676 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9678 # A database error has occured, add the database and specific
9679 # error message to the list of databases with errors and
9680 # process the next database.
9682 push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
9687 $database_name = $database_info{"DatabaseName"};
9688 $database_description = $database_info{"Description"};
9690 # Create a friendly name for the database.
9692 $database_filename_friendly = $data_file;
9694 # Append the database information to the table.
9696 $database_list{$database_count}{Filename} = $database_filename_friendly;
9697 $database_list{$database_count}{Name} = $database_name;
9698 $database_list{$database_count}{Description} = $database_description;
9704 # Check if there are no valid databases are if there is no
9705 # valid databases then write a message saying that no
9706 # valid databases are available.
9708 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilepages}, { Style => "pageheader" });
9709 $kiriwrite_presmodule->addlinebreak();
9710 $kiriwrite_presmodule->addlinebreak();
9712 if ($database_count eq 0){
9714 # There are no databases available for compiling so
9715 # write a message instead.
9717 $kiriwrite_presmodule->startbox("errorbox");
9718 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{nodatabasesavailable});
9719 $kiriwrite_presmodule->endbox();
9723 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9724 $kiriwrite_presmodule->startbox();
9725 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9726 $kiriwrite_presmodule->addhiddendata("action", "compile");
9727 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9729 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
9730 $kiriwrite_presmodule->addtext(" | ");
9731 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselectedbutton});
9732 $kiriwrite_presmodule->addlinebreak();
9733 $kiriwrite_presmodule->addlinebreak();
9734 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9735 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
9737 $kiriwrite_presmodule->startheader();
9738 $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
9739 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
9740 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
9741 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
9742 $kiriwrite_presmodule->endheader();
9744 $database_count = 1;
9746 foreach $database (keys %database_list){
9748 # Check the style to be used with.
9750 if ($table_style eq 0){
9752 # Use the first style and set the style value
9753 # to use the next style, the next time the
9754 # if statement is checked.
9756 $table_style_name = "tablecell1";
9761 # Use the second style and set the style
9762 # value to use the first style, the next
9763 # time if statement is checked.
9765 $table_style_name = "tablecell2";
9769 # Add the template to the list of available
9770 # templates to compile.
9772 $kiriwrite_presmodule->startrow();
9773 $kiriwrite_presmodule->addcell($table_style_name);
9774 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9775 $kiriwrite_presmodule->addcheckbox("name[" . $database_count . "]");
9776 $kiriwrite_presmodule->endcell();
9777 $kiriwrite_presmodule->addcell($table_style_name);
9779 if (!$database_list{$database}{Name}){
9780 $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}) });
9782 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_list{$database}{Filename}, { Text => $database_list{$database}{Name} });
9785 $kiriwrite_presmodule->endcell();
9786 $kiriwrite_presmodule->addcell($table_style_name);
9788 if (!$database_list{$database}{Description}){
9789 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
9791 $kiriwrite_presmodule->addtext($database_list{$database}{Description});
9794 $kiriwrite_presmodule->endcell();
9795 $kiriwrite_presmodule->addcell($table_style_name);
9796 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile&action=compile&type=single&database=" . $database_list{$database}{Filename}, { Text => $kiriwrite_lang->{options}->{compile} });
9797 $kiriwrite_presmodule->endcell();
9798 $kiriwrite_presmodule->endrow();
9804 $kiriwrite_presmodule->endtable();
9805 $kiriwrite_presmodule->endbox();
9806 $kiriwrite_presmodule->endform();
9810 # Disconnect from the database server.
9812 $kiriwrite_dbmodule->disconnect();
9814 # Check if any databases with problems have appeared and if they
9815 # have, print out a message saying which databases have problems.
9817 if (@permissions_list){
9819 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
9820 $kiriwrite_presmodule->addlinebreak();
9821 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
9822 $kiriwrite_presmodule->addlinebreak();
9824 foreach $database (@permissions_list){
9826 $kiriwrite_presmodule->addlinebreak();
9827 $kiriwrite_presmodule->addtext($database);
9831 $kiriwrite_presmodule->addlinebreak();
9832 $kiriwrite_presmodule->addlinebreak();
9838 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
9839 $kiriwrite_presmodule->addlinebreak();
9840 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
9841 $kiriwrite_presmodule->addlinebreak();
9843 foreach $database (@error_list){
9845 $kiriwrite_presmodule->addlinebreak();
9846 $kiriwrite_presmodule->addtext($database);
9852 return $kiriwrite_presmodule->grab();
9856 sub kiriwrite_compile_clean{
9857 #################################################################################
9858 # kiriwrite_compile_clean: Deletes the contents of the output directory. #
9862 # kiriwrite_compile_clean(confirm); #
9864 # confirm Confirms the deletion of files from the output directory. #
9865 #################################################################################
9867 # Get the values passed to the subroutine.
9871 # Define some variables for later.
9873 my $file_permissions;
9874 my $output_directory_exists;
9875 my $output_directory_permissions;
9876 my $warning_message;
9878 # Check if the output directory exists.
9880 $output_directory_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"});
9882 if ($output_directory_exists eq 1){
9884 # The output directory does not exist so return
9887 kiriwrite_error("outputdirectorymissing");
9891 # Check if the output directory has invalid
9894 $output_directory_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"});
9896 if ($output_directory_permissions eq 1){
9898 # The output directory has invalid permissions
9899 # set, so return an error.
9901 kiriwrite_error("outputdirectoryinvalidpermissions");
9909 # The action to clean the output directory has been
9912 # Remove the list of files and directories from the
9915 $file_permissions = kiriwrite_compile_clean_helper($kiriwrite_config{"directory_data_output"}, 1);
9917 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9919 if ($file_permissions eq 1){
9921 $kiriwrite_presmodule->addlinebreak();
9922 $kiriwrite_presmodule->addlinebreak();
9923 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{somecontentnotremoved});
9924 $kiriwrite_presmodule->addlinebreak();
9925 $kiriwrite_presmodule->addlinebreak();
9929 $kiriwrite_presmodule->addlinebreak();
9930 $kiriwrite_presmodule->addlinebreak();
9931 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{contentremoved});
9932 $kiriwrite_presmodule->addlinebreak();
9933 $kiriwrite_presmodule->addlinebreak();
9937 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9939 return $kiriwrite_presmodule->grab();
9943 # A value other than 1 is set for the confirm value
9944 # (which it shouldn't be) so return an error.
9946 kiriwrite_error("invalidvariable");
9952 # Print out a form for cleaning the output directory.
9954 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9955 $kiriwrite_presmodule->addlinebreak();
9956 $kiriwrite_presmodule->addlinebreak();
9957 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9958 $kiriwrite_presmodule->startbox();
9959 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9960 $kiriwrite_presmodule->addhiddendata("action", "clean");
9961 $kiriwrite_presmodule->addhiddendata("confirm", 1);
9962 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectorymessage});
9963 $kiriwrite_presmodule->addlinebreak();
9964 $kiriwrite_presmodule->addlinebreak();
9965 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{cleanoutputdirectorybutton});
9966 $kiriwrite_presmodule->addtext(" | ");
9967 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist}});
9968 $kiriwrite_presmodule->endbox();
9969 $kiriwrite_presmodule->endform();
9971 return $kiriwrite_presmodule->grab();
9975 sub kiriwrite_compile_clean_helper{
9976 #################################################################################
9977 # kiriwrite_compile_clean_helper: Helper for cleaning out the output directory. #
9978 # This command sometimes is called recursively (when a directory is found). #
9982 # kiriwrite_compile_clean_helper(directory, removedirectory, [permissions]); #
9984 # directory Specifies the directory to remove files (and #
9985 # sub-directories) from. #
9986 # keepdirectory Keeps the directory itself after all files have been #
9988 # permissions Used recursively for error checking. #
9989 #################################################################################
9991 # Get the values passed to the subroutine.
9993 my ($directory, $directory_keep, $permissions) = @_;
9995 # Check if the directory_keep is only one charater long.
9997 my $directory_file = "";
9999 my $file_permissions = 0;
10002 # Check if the file permissions value is blank.
10004 if (!$permissions){
10006 # The file permissions value is blank.
10012 # Open the directory specified, read the contents of
10013 # the directory and then close the directory.
10015 opendir(DIRECTORY, $directory);
10016 @directory_list = readdir(DIRECTORY);
10017 closedir(DIRECTORY);
10019 # Remove each file and directory.
10021 foreach $directory_file (@directory_list){
10023 # Check if the filename is '.' or '..' and if it
10024 # is skip those files.
10026 if ($directory_file eq "." || $directory_file eq ".."){
10028 # The filename is '.' or '..' so skip processing
10033 # Check if the permissions on the file or directory has
10034 # valid permissions set.
10036 $file_permissions = kiriwrite_filepermissions($directory . '/' . $directory_file, 1, 1);
10038 if ($file_permissions eq 1){
10040 # The file or directory has invalid permissions set.
10047 # Check if the filename is a directory.
10049 if (-d $directory . '/' . $directory_file){
10051 # The filename is a directory so send the directory name
10052 # and this subroutine again (recursively).
10054 kiriwrite_compile_clean_helper($directory . '/' . $directory_file, 0, $permissions);
10058 # The file is not a directory but an actual file so
10059 # remove as normal (in terms of the Perl language).
10061 ($directory) = $directory =~ m/^(.*)$/g;
10062 ($directory_file) = $directory_file =~ m/^(.*)$/g;
10064 # Check if the directory is undefined and if it is then
10071 if (!$directory_file){
10072 $directory_file = "";
10075 unlink($directory . '/' . $directory_file);
10083 # Check if the directory should be kept.
10085 if ($directory_keep eq 1){
10087 # The directory_keep value is set as 1 so the directory
10088 # specified should be kept.
10090 } elsif ($directory_keep eq 0) {
10092 # The directory_keep value is set as 0 so remove the
10093 # directory specified.
10095 ($directory) = $directory =~ m/^(.*)$/g;
10100 # A value other than 0 or 1 was specified so return
10103 kiriwrite_error('invalidvalue');
10107 return $permissions;
10111 sub kiriwrite_settings_view{
10112 #################################################################################
10113 # kiriwrite_options_view: Writes out the list of options and variables. #
10117 # kiriwrite_settings_view(); #
10118 #################################################################################
10120 # Get the settings.
10122 my $settings_directory_db = $kiriwrite_config{"directory_data_db"};
10123 my $settings_directory_output = $kiriwrite_config{"directory_data_output"};
10124 my $settings_noncgi_images = $kiriwrite_config{"directory_noncgi_images"};
10125 my $settings_system_datetime = $kiriwrite_config{"system_datetime"};
10126 my $settings_system_language = $kiriwrite_config{"system_language"};
10127 my $settings_system_presentation = $kiriwrite_config{"system_presmodule"};
10128 my $settings_system_database = $kiriwrite_config{"system_dbmodule"};
10130 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{viewsettings}, { Style => "pageheader" });
10131 $kiriwrite_presmodule->addlinebreak();
10132 $kiriwrite_presmodule->addlinebreak();
10133 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{currentsettings});
10134 $kiriwrite_presmodule->addlinebreak();
10135 $kiriwrite_presmodule->addlinebreak();
10136 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10138 $kiriwrite_presmodule->startheader();
10139 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10140 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10141 $kiriwrite_presmodule->endheader();
10143 $kiriwrite_presmodule->startrow();
10144 $kiriwrite_presmodule->addcell("tablecellheader");
10145 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10146 $kiriwrite_presmodule->endcell();
10147 $kiriwrite_presmodule->addcell("tablecellheader");
10148 $kiriwrite_presmodule->endcell();
10149 $kiriwrite_presmodule->endrow();
10151 $kiriwrite_presmodule->startrow();
10152 $kiriwrite_presmodule->addcell("tablecell1");
10153 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10154 $kiriwrite_presmodule->endcell();
10155 $kiriwrite_presmodule->addcell("tablecell2");
10156 $kiriwrite_presmodule->addtext($settings_directory_db);
10157 $kiriwrite_presmodule->endcell();
10158 $kiriwrite_presmodule->endrow();
10160 $kiriwrite_presmodule->startrow();
10161 $kiriwrite_presmodule->addcell("tablecell1");
10162 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
10163 $kiriwrite_presmodule->endcell();
10164 $kiriwrite_presmodule->addcell("tablecell2");
10165 $kiriwrite_presmodule->addtext($settings_directory_output);
10166 $kiriwrite_presmodule->endcell();
10167 $kiriwrite_presmodule->endrow();
10169 $kiriwrite_presmodule->startrow();
10170 $kiriwrite_presmodule->addcell("tablecell1");
10171 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
10172 $kiriwrite_presmodule->endcell();
10173 $kiriwrite_presmodule->addcell("tablecell2");
10174 $kiriwrite_presmodule->addtext($settings_noncgi_images);
10175 $kiriwrite_presmodule->endcell();
10176 $kiriwrite_presmodule->endrow();
10178 $kiriwrite_presmodule->startrow();
10179 $kiriwrite_presmodule->addcell("tablecellheader");
10180 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
10181 $kiriwrite_presmodule->endcell();
10182 $kiriwrite_presmodule->addcell("tablecellheader");
10183 $kiriwrite_presmodule->endcell();
10184 $kiriwrite_presmodule->endrow();
10186 $kiriwrite_presmodule->startrow();
10187 $kiriwrite_presmodule->addcell("tablecell1");
10188 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
10189 $kiriwrite_presmodule->endcell();
10190 $kiriwrite_presmodule->addcell("tablecell2");
10191 $kiriwrite_presmodule->addtext($settings_system_datetime);
10192 $kiriwrite_presmodule->endcell();
10193 $kiriwrite_presmodule->endrow();
10195 $kiriwrite_presmodule->startrow();
10196 $kiriwrite_presmodule->addcell("tablecellheader");
10197 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
10198 $kiriwrite_presmodule->endcell();
10199 $kiriwrite_presmodule->addcell("tablecellheader");
10200 $kiriwrite_presmodule->endcell();
10201 $kiriwrite_presmodule->endrow();
10203 $kiriwrite_presmodule->startrow();
10204 $kiriwrite_presmodule->addcell("tablecell1");
10205 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
10206 $kiriwrite_presmodule->endcell();
10207 $kiriwrite_presmodule->addcell("tablecell2");
10208 $kiriwrite_presmodule->addtext($settings_system_language);
10209 $kiriwrite_presmodule->endcell();
10210 $kiriwrite_presmodule->endrow();
10212 $kiriwrite_presmodule->startrow();
10213 $kiriwrite_presmodule->addcell("tablecellheader");
10214 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
10215 $kiriwrite_presmodule->endcell();
10216 $kiriwrite_presmodule->addcell("tablecellheader");
10217 $kiriwrite_presmodule->endcell();
10218 $kiriwrite_presmodule->endrow();
10220 $kiriwrite_presmodule->startrow();
10221 $kiriwrite_presmodule->addcell("tablecell1");
10222 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
10223 $kiriwrite_presmodule->endcell();
10224 $kiriwrite_presmodule->addcell("tablecell2");
10225 $kiriwrite_presmodule->addtext($settings_system_presentation);
10226 $kiriwrite_presmodule->endcell();
10227 $kiriwrite_presmodule->endrow();
10229 $kiriwrite_presmodule->startrow();
10230 $kiriwrite_presmodule->addcell("tablecell1");
10231 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
10232 $kiriwrite_presmodule->endcell();
10233 $kiriwrite_presmodule->addcell("tablecell2");
10234 $kiriwrite_presmodule->addtext($settings_system_database);
10235 $kiriwrite_presmodule->endcell();
10236 $kiriwrite_presmodule->endrow();
10238 $kiriwrite_presmodule->endtable();
10240 $kiriwrite_presmodule->addlinebreak();
10241 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{altersettings});
10243 return $kiriwrite_presmodule->grab();
10247 sub kiriwrite_settings_edit{
10248 #################################################################################
10249 # kiriwrite_settings_edit: Edits the options. #
10253 # kiriwrite_settings_edit(options); #
10255 # options Specifies the following options in any order. #
10257 # DatabaseDirectory Specifies the new database directory to use. #
10258 # OutputDirectory Specifies the new output directory to use. #
10259 # ImagesURIPath Specifies the new URI path for images. #
10260 # DateTimeFormat Specifies the new date and time format. #
10261 # SystemLanguage Specifies the new language to use for Kiriwrite. #
10262 # PrsentationModule Specifies the new presentation module to use for #
10264 # DatabaseModule Specifies the new database module to use for Kiriwrite. #
10266 # Options for server-based database modules. #
10268 # DatabaseServer Specifies the database server to use. #
10269 # DaravasePort Specifies the port the database server is running on. #
10270 # DatabaseProtocol Specifies the protocol the database server is using. #
10271 # DatabaseSQLDatabase Specifies the SQL database name to use. #
10272 # DatabaseUsername Specifies the database server username. #
10273 # DatabasePasswordKeep Keeps the current password in the configuration file. #
10274 # DatabasePassword Specifies the password for the database server username.#
10275 # DatabaseTablePrefix Specifies the prefix used for tables. #
10276 #################################################################################
10278 # Get the values that have been passed to the subroutine.
10280 my ($passedoptions) = @_;
10282 # Get the values from the hash.
10284 my $settings_dbdirectory = $passedoptions->{"DatabaseDirectory"};
10285 my $settings_outputdirectory = $passedoptions->{"OutputDirectory"};
10286 my $settings_imagesuri = $passedoptions->{"ImagesURIPath"};
10287 my $settings_datetimeformat = $passedoptions->{"DateTimeFormat"};
10288 my $settings_languagesystem = $passedoptions->{"SystemLanguage"};
10289 my $settings_presmodule = $passedoptions->{"PresentationModule"};
10290 my $settings_dbmodule = $passedoptions->{"DatabaseModule"};
10292 my $settings_database_server = $passedoptions->{"DatabaseServer"};
10293 my $settings_database_port = $passedoptions->{"DatabasePort"};
10294 my $settings_database_protocol = $passedoptions->{"DatabaseProtocol"};
10295 my $settings_database_sqldatabase = $passedoptions->{"DatabaseSQLDatabase"};
10296 my $settings_database_username = $passedoptions->{"DatabaseUsername"};
10297 my $settings_database_passwordkeep = $passedoptions->{"DatabasePasswordKeep"};
10298 my $settings_database_password = $passedoptions->{"DatabasePassword"};
10299 my $settings_database_tableprefix = $passedoptions->{"DatabaseTablePrefix"};
10301 my $confirm = $passedoptions->{"Confirm"};
10305 # If the confirm value is blank, then set the confirm
10312 if ($confirm eq "1"){
10314 # The action to edit the settings has been confirmed.
10315 # Start by checking each variable about to be placed
10316 # in the settings file is valid.
10318 # Deinfe some variables for later.
10320 my @kiriwrite_new_settings;
10322 # Check the length of the directory names.
10324 kiriwrite_variablecheck($settings_dbdirectory, "maxlength", 64, 0);
10325 kiriwrite_variablecheck($settings_outputdirectory, "maxlength", 64, 0);
10326 kiriwrite_variablecheck($settings_imagesuri, "maxlength", 512, 0);
10327 kiriwrite_variablecheck($settings_datetimeformat, "maxlength", 32, 0);
10329 kiriwrite_variablecheck($settings_languagesystem, "language_filename", "", 0);
10331 # Check the module names to see if they're valid.
10333 my $kiriwrite_presmodule_modulename_check = kiriwrite_variablecheck($settings_presmodule, "module", 0, 1);
10334 my $kiriwrite_dbmodule_modulename_check = kiriwrite_variablecheck($settings_dbmodule, "module", 0, 1);
10336 if ($kiriwrite_presmodule_modulename_check eq 1){
10338 # The presentation module name is blank, so return
10341 kiriwrite_error("presmoduleblank");
10345 if ($kiriwrite_presmodule_modulename_check eq 2){
10347 # The presentation module name is invalid, so return
10350 kiriwrite_error("presmoduleinvalid");
10354 if ($kiriwrite_dbmodule_modulename_check eq 1){
10356 # The database module name is blank, so return
10359 kiriwrite_error("dbmoduleblank");
10363 if ($kiriwrite_dbmodule_modulename_check eq 2){
10365 # The database module name is invalid, so return
10368 kiriwrite_error("dbmoduleinvalid");
10372 # Check if the directory names only contain letters and numbers and
10373 # return a specific error if they don't.
10375 my $kiriwrite_dbdirectory_check = kiriwrite_variablecheck($settings_dbdirectory, "directory", 0, 1);
10376 my $kiriwrite_outputdirectory_check = kiriwrite_variablecheck($settings_outputdirectory, "directory", 0, 1);
10377 kiriwrite_variablecheck($settings_datetimeformat, "datetime", 0, 0);
10379 if ($kiriwrite_dbdirectory_check eq 1){
10381 # The database directory name is blank, so return
10384 kiriwrite_error("dbdirectoryblank");
10386 } elsif ($kiriwrite_dbdirectory_check eq 2){
10388 # The database directory name is invalid, so return
10391 kiriwrite_error("dbdirectoryinvalid");
10395 if ($kiriwrite_outputdirectory_check eq 1){
10397 # The output directory name is blank, so return
10400 kiriwrite_error("outputdirectoryblank");
10402 } elsif ($kiriwrite_outputdirectory_check eq 2){
10404 # The output directory name is invalid, so return
10407 kiriwrite_error("outputdirectoryinvalid");
10411 # Check if the presentation module with the filename given exists.
10413 my $presmodule_exists = kiriwrite_fileexists("Modules/Presentation/" . $settings_presmodule . ".pm");
10415 if ($presmodule_exists eq 1){
10417 # The presentation module does not exist so return an error.
10419 kiriwrite_error("presmodulemissing");
10423 # Check if the database module with the filename given exists.
10425 my $dbmodule_exists = kiriwrite_fileexists("Modules/Database/" . $settings_dbmodule . ".pm");
10427 if ($dbmodule_exists eq 1){
10429 # The database module does not exist so return an error.
10431 kiriwrite_error("dbmodulemissing");
10435 # Check if the language filename given exists.
10437 my $languagefile_exists = kiriwrite_fileexists("lang/" . $settings_languagesystem . ".xml");
10439 if ($languagefile_exists eq 1){
10441 # The language filename given does not exist so return an error.
10443 kiriwrite_error("languagefilenamemissing");
10447 # Check the database server options to see if they are valid.
10449 my $kiriwrite_databaseserver_length_check = kiriwrite_variablecheck($settings_database_server, "maxlength", 128, 1);
10450 my $kiriwrite_databaseserver_lettersnumbers_check = kiriwrite_variablecheck($settings_database_server, "lettersnumbers", 0, 1);
10451 my $kiriwrite_databaseport_length_check = kiriwrite_variablecheck($settings_database_port, "maxlength", 5, 1);
10452 my $kiriwrite_databaseport_numbers_check = kiriwrite_variablecheck($settings_database_port, "numbers", 0, 1);
10453 my $kiriwrite_databaseport_port_check = kiriwrite_variablecheck($settings_database_port, "port", 0, 1);
10454 my $kiriwrite_databaseprotocol_length_check = kiriwrite_variablecheck($settings_database_protocol, "maxlength", 5, 1);
10455 my $kiriwrite_databaseprotocol_protocol_check = kiriwrite_variablecheck($settings_database_protocol, "serverprotocol", 0, 1);
10456 my $kiriwrite_databasename_length_check = kiriwrite_variablecheck($settings_database_sqldatabase, "maxlength", 32, 1);
10457 my $kiriwrite_databasename_lettersnumbers_check = kiriwrite_variablecheck($settings_database_sqldatabase, "lettersnumbers", 0, 1);
10458 my $kiriwrite_databaseusername_length_check = kiriwrite_variablecheck($settings_database_username, "maxlength", 16, 1);
10459 my $kiriwrite_databaseusername_lettersnumbers_check = kiriwrite_variablecheck($settings_database_username, "lettersnumbers", 0, 1);
10460 my $kiriwrite_databasepassword_length_check = kiriwrite_variablecheck($settings_database_password, "maxlength", 64, 1);
10461 my $kiriwrite_databasetableprefix_length_check = kiriwrite_variablecheck($settings_database_tableprefix, "maxlength", 16, 1);
10462 my $kiriwrite_databasetableprefix_lettersnumbers_check = kiriwrite_variablecheck($settings_database_tableprefix, "lettersnumbers", 0, 1);
10464 if ($kiriwrite_databaseserver_length_check eq 1){
10466 # The length of the database server name is too long so
10469 kiriwrite_error("servernametoolong");
10473 if ($kiriwrite_databaseserver_lettersnumbers_check eq 1){
10475 # The database server name contains characters other
10476 # than letters and numbers, so return an error.
10478 kiriwrite_error("servernameinvalid");
10482 if ($kiriwrite_databaseport_length_check eq 1){
10484 # The database port number length is too long so return
10487 kiriwrite_error("serverportnumbertoolong");
10491 if ($kiriwrite_databaseport_numbers_check eq 1){
10493 # The database port number contains characters other
10494 # than numbers so return an error.
10496 kiriwrite_error("serverportnumberinvalidcharacters");
10500 if ($kiriwrite_databaseport_port_check eq 1){
10502 # The database port number given is invalid so return
10505 kiriwrite_error("serverportnumberinvalid");
10509 if ($kiriwrite_databaseprotocol_length_check eq 1){
10511 # The database protocol name given is too long so
10514 kiriwrite_error("serverprotocolnametoolong");
10518 if ($kiriwrite_databaseprotocol_protocol_check eq 1){
10520 # The server protcol given is invalid so return
10523 kiriwrite_error("serverprotocolinvalid");
10527 if ($kiriwrite_databasename_length_check eq 1){
10529 # The SQL database name is too long so return
10532 kiriwrite_error("serverdatabasenametoolong");
10536 if ($kiriwrite_databasename_lettersnumbers_check eq 1){
10538 # The database name contains invalid characters
10539 # so return an error.
10541 kiriwrite_error("serverdatabasenameinvalid");
10545 if ($kiriwrite_databaseusername_length_check eq 1){
10547 # The database username given is too long so
10550 kiriwrite_error("serverdatabaseusernametoolong");
10554 if ($kiriwrite_databaseusername_lettersnumbers_check eq 1){
10556 # The database username contains invalid characters
10557 # so return an error.
10559 kiriwrite_error("serverdatabaseusernameinvalid");
10563 if ($kiriwrite_databasepassword_length_check eq 1){
10565 # The database password given is too long so return
10568 kiriwrite_error("serverdatabasepasswordtoolong");
10572 if ($kiriwrite_databasetableprefix_length_check eq 1){
10574 # The database table prefix given is too long so
10577 kiriwrite_error("serverdatabasetableprefixtoolong");
10581 if ($kiriwrite_databasetableprefix_lettersnumbers_check eq 1){
10583 # The database table prefix given contains invalid
10584 # characters so return an error.
10586 kiriwrite_error("serverdatabasetableprefixinvalid");
10590 # Check if the current password should be kept.
10592 if ($settings_database_passwordkeep eq "on"){
10594 # The current password in the configuration file should be used.
10596 $settings_database_password = $kiriwrite_config{"database_password"};
10600 # Write the new settings to the XML file.
10602 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 });
10604 # Write a confirmation message.
10606 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingsedited}, { Style => "pageheader" });
10607 $kiriwrite_presmodule->addlinebreak();
10608 $kiriwrite_presmodule->addlinebreak();
10609 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingseditedmessage});
10610 $kiriwrite_presmodule->addlinebreak();
10611 $kiriwrite_presmodule->addlinebreak();
10612 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
10614 return $kiriwrite_presmodule->grab();
10618 # Get the list of languages available.
10621 my @language_directory = "";
10623 my $language_filename = "";
10624 my $language_file_xml = "";
10625 my $language_file_systemname = "";
10626 my $language_file_localname = "";
10627 my $language_file_seek = 0;
10628 my $language_flie_dot = 0;
10629 my $language_file_length = 0;
10630 my $language_file_count = 0;
10631 my $language_file_char = "";
10632 my $language_file_friendly = "";
10633 my $language_config = $kiriwrite_config{"system_language"};
10635 tie(%language_list, 'Tie::IxHash');
10637 opendir(LANGUAGEDIR, "lang");
10638 @language_directory = grep /m*\.xml$/, readdir(LANGUAGEDIR);
10639 closedir(LANGUAGEDIR);
10641 # Process each language by loading the XML configuration file
10642 # used for each language and then get the System name and
10643 # the local name of the language.
10645 foreach $language_filename (@language_directory){
10647 # Load the language file currently selected.
10649 $language_file_xml = $xsl->XMLin("lang" . '/' . $language_filename, SuppressEmpty => 1);
10651 # Get the system name and the local name of the language.
10653 $language_file_localname = $language_file_xml -> {about} -> {name};
10655 # Check if either the system name or the local name of the language
10656 # is blank and if it is, then don't add the language to the list.
10658 if ($language_file_localname eq ""){
10660 # The system name or the local name is blank so don't add
10661 # the language to the list.
10665 # Get the 'friendly' name of the language file name (basically
10666 # remove the .xml part from the filename.
10668 $language_file_length = length($language_filename);
10672 # Get a character from the language filename and currently
10673 # set by the seek counter.
10675 $language_file_char = substr($language_filename, $language_file_seek, 1);
10677 # Check if the character is a dot and if it is then set the
10678 # last dot value to the seek counter value.
10680 if ($language_file_char eq "."){
10682 # Current chatacter is a dot so set the last dot value
10683 # to what is currently the seek counter.
10685 $language_flie_dot = $language_file_seek;
10689 # Current character is not a dot, so do nothing.
10693 # Increment the seek counter.
10695 $language_file_seek++;
10697 } until ($language_file_seek eq $language_file_length);
10699 # Reset the seek counter.
10701 $language_file_seek = 0;
10703 # Process the file name again and this time process the file
10704 # name until it reaches the last dot found.
10708 # Get the character the seek counter is currently set at.
10710 $language_file_char = substr($language_filename, $language_file_seek, 1);
10712 # Append the character to the friendly file name.
10714 $language_file_friendly = $language_file_friendly . $language_file_char;
10716 # Increment the seek counter.
10718 $language_file_seek++;
10720 } until ($language_file_seek eq $language_flie_dot);
10722 # Append the language to the available languages list.
10724 $language_list{$language_file_count}{Filename} = $language_file_friendly;
10725 $language_list{$language_file_count}{Name} = $language_file_localname;
10726 $language_file_count++;
10728 # Reset certain counters and values before continuing.
10730 $language_file_seek = 0;
10731 $language_flie_dot = 0;
10732 $language_file_length = 0;
10733 $language_file_char = "";
10734 $language_file_friendly = "";
10740 # Get the list of presentation modules available.
10742 my %presmodule_list;
10743 my @presmodule_directory;
10745 my $presmodule_file = "";
10746 my $presmodule_char = "";
10747 my $presmodule_dot = 0;
10748 my $presmodule_firstdot = 0;
10749 my $presmodule_firstdotfound = "";
10750 my $presmodule_seek = 0;
10751 my $presmodule_length = 0;
10752 my $presmodule_count = 0;
10753 my $presmodule_friendly = "";
10754 my $presmodule_selectlist = "";
10755 my $presmodule_config = $kiriwrite_config{"system_presmodule"};
10757 # Open and get the list of presentation modules (perl modules) by filtering
10760 opendir(OUTPUTSYSTEMDIR, "Modules/Presentation");
10761 @presmodule_directory = grep /m*\.pm$/, readdir(OUTPUTSYSTEMDIR);
10762 closedir(OUTPUTSYSTEMDIR);
10764 # Process each presentation module and add them to the list of available
10765 # presentation modules.
10767 foreach $presmodule_file (@presmodule_directory){
10769 # Get the length of the presentation module (perl module) filename.
10771 $presmodule_length = length($presmodule_file);
10773 # Get the friendly name of the Perl module (by getting rid of the
10774 # .pm part of the filename).
10778 $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10780 # Check if the current character is a dot and if it is then
10781 # set the last dot found number to the current seek number.
10783 if ($presmodule_char eq "."){
10785 # Put the seek value as the last dot found number.
10787 $presmodule_dot = $presmodule_seek;
10791 # Increment the seek counter.
10793 $presmodule_seek++;
10795 } until ($presmodule_seek eq $presmodule_length);
10797 # Reset the seek counter as it is going to be used again.
10799 $presmodule_seek = 0;
10801 # Get the friendly name of the Perl module by the processing the file
10802 # name to the last dot the previous 'do' tried to find.
10806 # Get the character the seek counter is currently set at.
10808 $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10810 # Append the character to the friendly name of the presentation module.
10812 $presmodule_friendly = $presmodule_friendly . $presmodule_char;
10814 # Increment the seek counter.
10816 $presmodule_seek++;
10818 } until ($presmodule_seek eq $presmodule_dot);
10820 # Append the option to tbe list of available presentation modules.
10822 $presmodule_list{$presmodule_count}{Filename} = $presmodule_friendly;
10824 # Reset the following values.
10826 $presmodule_seek = 0;
10827 $presmodule_length = 0;
10828 $presmodule_char = "";
10829 $presmodule_friendly = "";
10830 $presmodule_count++;
10834 # Get the list of database modules available.
10837 my @dbmodule_directory;
10839 my $dbmodule_file = "";
10840 my $dbmodule_char = "";
10841 my $dbmodule_dot = 0;
10842 my $dbmodule_firstdot = 0;
10843 my $dbmodule_firstdotfound = "";
10844 my $dbmodule_seek = 0;
10845 my $dbmodule_length = 0;
10846 my $dbmodule_count = 0;
10847 my $dbmodule_friendly = "";
10848 my $dbmodule_selectlist = "";
10849 my $dbmodule_config = $kiriwrite_config{"system_dbmodule"};
10851 # Open and get the list of presentation modules (perl modules) by filtering
10854 opendir(DATABASEDIR, "Modules/Database");
10855 @dbmodule_directory = grep /m*\.pm$/, readdir(DATABASEDIR);
10856 closedir(DATABASEDIR);
10858 # Process each presentation module and add them to the list of available
10859 # presentation modules.
10861 foreach $dbmodule_file (@dbmodule_directory){
10863 # Get the length of the database module (perl module) filename.
10865 $dbmodule_length = length($dbmodule_file);
10867 # Get the friendly name of the Perl module (by getting rid of the
10868 # .pm part of the filename).
10872 $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10874 # Check if the current character is a dot and if it is then
10875 # set the last dot found number to the current seek number.
10877 if ($dbmodule_char eq "."){
10879 # Put the seek value as the last dot found number.
10881 $dbmodule_dot = $dbmodule_seek;
10885 # Increment the seek counter.
10889 } until ($dbmodule_seek eq $dbmodule_length);
10891 # Reset the seek counter as it is going to be used again.
10893 $dbmodule_seek = 0;
10895 # Get the friendly name of the Perl module by the processing the file
10896 # name to the last dot the previous 'do' tried to find.
10900 # Get the character the seek counter is currently set at.
10902 $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10904 # Append the character to the friendly name of the presentation module.
10906 $dbmodule_friendly = $dbmodule_friendly . $dbmodule_char;
10908 # Increment the seek counter.
10912 } until ($dbmodule_seek eq $dbmodule_dot);
10914 # Append the option to tbe list of available database modules.
10916 $dbmodule_list{$dbmodule_count}{Filename} = $dbmodule_friendly;
10918 # Reset the following values.
10920 $dbmodule_seek = 0;
10921 $dbmodule_length = 0;
10922 $dbmodule_char = "";
10923 $dbmodule_friendly = "";
10928 # Get the directory settings.
10930 my $directory_settings_database = $kiriwrite_config{"directory_data_db"};
10931 my $directory_settings_output = $kiriwrite_config{"directory_data_output"};
10932 my $directory_settings_imagesuri = $kiriwrite_config{"directory_noncgi_images"};
10933 my $datetime_setting = $kiriwrite_config{"system_datetime"};
10935 my $database_server = $kiriwrite_config{"database_server"};
10936 my $database_port = $kiriwrite_config{"database_port"};
10937 my $database_protocol = $kiriwrite_config{"database_protocol"};
10938 my $database_sqldatabase = $kiriwrite_config{"database_sqldatabase"};
10939 my $database_username = $kiriwrite_config{"database_username"};
10940 my $database_passwordhash = $kiriwrite_config{"database_passwordhash"};
10941 my $database_password = $kiriwrite_config{"database_password"};
10942 my $database_prefix = $kiriwrite_config{"database_tableprefix"};
10944 # Print out a form for editing the settings.
10946 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{editsettings}, { Style => "pageheader" });
10947 $kiriwrite_presmodule->addlinebreak();
10948 $kiriwrite_presmodule->addlinebreak();
10949 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{setting}->{warning});
10950 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{warningmessage});
10951 $kiriwrite_presmodule->addlinebreak();
10952 $kiriwrite_presmodule->addlinebreak();
10954 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
10955 $kiriwrite_presmodule->startbox();
10956 $kiriwrite_presmodule->addhiddendata("mode", "settings");
10957 $kiriwrite_presmodule->addhiddendata("action", "edit");
10958 $kiriwrite_presmodule->addhiddendata("confirm", 1);
10960 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10962 $kiriwrite_presmodule->startheader();
10963 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10964 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10965 $kiriwrite_presmodule->endheader();
10967 $kiriwrite_presmodule->startrow();
10968 $kiriwrite_presmodule->addcell("tablecellheader");
10969 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10970 $kiriwrite_presmodule->endcell();
10971 $kiriwrite_presmodule->addcell("tablecellheader");
10972 $kiriwrite_presmodule->endcell();
10973 $kiriwrite_presmodule->endrow();
10975 $kiriwrite_presmodule->startrow();
10976 $kiriwrite_presmodule->addcell("tablecell1");
10977 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10978 $kiriwrite_presmodule->endcell();
10979 $kiriwrite_presmodule->addcell("tablecell2");
10980 $kiriwrite_presmodule->addinputbox("databasedir", { Size => 32, MaxLength => 64, Value => $directory_settings_database });
10981 $kiriwrite_presmodule->endcell();
10982 $kiriwrite_presmodule->endrow();
10984 $kiriwrite_presmodule->startrow();
10985 $kiriwrite_presmodule->addcell("tablecell1");
10986 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
10987 $kiriwrite_presmodule->endcell();
10988 $kiriwrite_presmodule->addcell("tablecell2");
10989 $kiriwrite_presmodule->addinputbox("outputdir", { Size => 32, MaxLength => 64, Value => $directory_settings_output });
10990 $kiriwrite_presmodule->endcell();
10991 $kiriwrite_presmodule->endrow();
10993 $kiriwrite_presmodule->startrow();
10994 $kiriwrite_presmodule->addcell("tablecell1");
10995 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
10996 $kiriwrite_presmodule->endcell();
10997 $kiriwrite_presmodule->addcell("tablecell2");
10998 $kiriwrite_presmodule->addinputbox("imagesuripath", { Size => 32, MaxLength => 64, Value => $directory_settings_imagesuri });
10999 $kiriwrite_presmodule->endcell();
11000 $kiriwrite_presmodule->endrow();
11002 $kiriwrite_presmodule->startrow();
11003 $kiriwrite_presmodule->addcell("tablecellheader");
11004 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
11005 $kiriwrite_presmodule->endcell();
11006 $kiriwrite_presmodule->addcell("tablecellheader");
11007 $kiriwrite_presmodule->endcell();
11008 $kiriwrite_presmodule->endrow();
11010 $kiriwrite_presmodule->startrow();
11011 $kiriwrite_presmodule->addcell("tablecell1");
11012 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
11013 $kiriwrite_presmodule->endcell();
11014 $kiriwrite_presmodule->addcell("tablecell2");
11015 $kiriwrite_presmodule->addinputbox("datetime", { Size => 32, MaxLength => 64, Value => $datetime_setting });
11016 $kiriwrite_presmodule->addlinebreak();
11017 $kiriwrite_presmodule->addlinebreak();
11018 $kiriwrite_presmodule->startbox("datalist");
11020 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleday});
11021 $kiriwrite_presmodule->addlinebreak();
11022 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleday});
11023 $kiriwrite_presmodule->addlinebreak();
11024 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlemonth});
11025 $kiriwrite_presmodule->addlinebreak();
11026 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublemonth});
11027 $kiriwrite_presmodule->addlinebreak();
11028 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleyear});
11029 $kiriwrite_presmodule->addlinebreak();
11030 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleyear});
11031 $kiriwrite_presmodule->addlinebreak();
11032 $kiriwrite_presmodule->addlinebreak();
11033 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlehour});
11034 $kiriwrite_presmodule->addlinebreak();
11035 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublehour});
11036 $kiriwrite_presmodule->addlinebreak();
11037 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleminute});
11038 $kiriwrite_presmodule->addlinebreak();
11039 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleminute});
11040 $kiriwrite_presmodule->addlinebreak();
11041 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlesecond});
11042 $kiriwrite_presmodule->addlinebreak();
11043 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublesecond});
11044 $kiriwrite_presmodule->addlinebreak();
11045 $kiriwrite_presmodule->addlinebreak();
11046 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{othercharacters});
11047 $kiriwrite_presmodule->endbox();
11048 $kiriwrite_presmodule->endcell();
11049 $kiriwrite_presmodule->endrow();
11051 $kiriwrite_presmodule->startrow();
11052 $kiriwrite_presmodule->addcell("tablecellheader");
11053 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
11054 $kiriwrite_presmodule->endcell();
11055 $kiriwrite_presmodule->addcell("tablecellheader");
11056 $kiriwrite_presmodule->endcell();
11057 $kiriwrite_presmodule->endrow();
11059 $kiriwrite_presmodule->startrow();
11060 $kiriwrite_presmodule->addcell("tablecell1");
11061 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
11062 $kiriwrite_presmodule->endcell();
11063 $kiriwrite_presmodule->addcell("tablecell2");
11065 $kiriwrite_presmodule->addselectbox("language");
11067 # Process the list of available languages.
11069 foreach $language (keys %language_list){
11071 # Check if the language filename matches the filename in the configuration
11074 if ($language_list{$language}{Filename} eq $language_config){
11076 $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} , Selected => 1 });
11080 $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} });
11086 $kiriwrite_presmodule->endselectbox();
11088 $kiriwrite_presmodule->startrow();
11089 $kiriwrite_presmodule->addcell("tablecellheader");
11090 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
11091 $kiriwrite_presmodule->endcell();
11092 $kiriwrite_presmodule->addcell("tablecellheader");
11093 $kiriwrite_presmodule->endcell();
11094 $kiriwrite_presmodule->endrow();
11096 $kiriwrite_presmodule->startrow();
11097 $kiriwrite_presmodule->addcell("tablecell1");
11098 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
11099 $kiriwrite_presmodule->endcell();
11100 $kiriwrite_presmodule->addcell("tablecell2");
11102 $kiriwrite_presmodule->addselectbox("presmodule");
11104 # Process the list of available presentation modules.
11106 foreach $presmodule (keys %presmodule_list){
11108 # Check if the presentation module fileanme matches the filename in the
11109 # configuration file.
11111 if ($presmodule_list{$presmodule}{Filename} eq $presmodule_config){
11113 $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} , Selected => 1 });
11117 $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} });
11123 $kiriwrite_presmodule->endselectbox();
11125 $kiriwrite_presmodule->endcell();
11126 $kiriwrite_presmodule->endrow();
11128 $kiriwrite_presmodule->startrow();
11129 $kiriwrite_presmodule->addcell("tablecell1");
11130 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
11131 $kiriwrite_presmodule->endcell();
11132 $kiriwrite_presmodule->addcell("tablecell2");
11134 # Process the list of available database modules.
11136 $kiriwrite_presmodule->addselectbox("dbmodule");
11138 foreach $dbmodule (keys %dbmodule_list){
11140 # Check if the database module fileanme matches the filename in the
11141 # configuration file.
11143 if ($dbmodule_list{$dbmodule}{Filename} eq $dbmodule_config){
11145 $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} , Selected => 1 });
11149 $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} });
11156 $kiriwrite_presmodule->endselectbox();
11158 $kiriwrite_presmodule->endcell();
11159 $kiriwrite_presmodule->endrow();
11161 $kiriwrite_presmodule->startrow();
11162 $kiriwrite_presmodule->addcell("tablecell1");
11163 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseserver});
11164 $kiriwrite_presmodule->endcell();
11165 $kiriwrite_presmodule->addcell("tablecell2");
11166 $kiriwrite_presmodule->addinputbox("database_server", { Size => 32, MaxLength => 128, Value => $database_server });
11167 $kiriwrite_presmodule->endcell();
11168 $kiriwrite_presmodule->endrow();
11170 $kiriwrite_presmodule->startrow();
11171 $kiriwrite_presmodule->addcell("tablecell1");
11172 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseport});
11173 $kiriwrite_presmodule->endcell();
11174 $kiriwrite_presmodule->addcell("tablecell2");
11175 $kiriwrite_presmodule->addinputbox("database_port", { Size => 5, MaxLength => 5, Value => $database_port });
11176 $kiriwrite_presmodule->endcell();
11177 $kiriwrite_presmodule->endrow();
11179 $kiriwrite_presmodule->startrow();
11180 $kiriwrite_presmodule->addcell("tablecell1");
11181 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseprotocol});
11182 $kiriwrite_presmodule->endcell();
11183 $kiriwrite_presmodule->addcell("tablecell2");
11185 # Check if TCP is being used.
11187 $kiriwrite_presmodule->addselectbox("database_protocol");
11189 if ($database_protocol eq "tcp"){
11191 # The TCP protocol is selected so have the TCP option selected.
11193 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp", Selected => 1});
11197 # The TCP protocol is not selected.
11199 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp"});
11203 # Check if UDP is being used.
11205 if ($database_protocol eq "udp"){
11207 # The UDP protocol is selected so have the UDP option selected.
11209 $kiriwrite_presmodule->addoption("UDP", { Value => "udp", Selected => 1});
11213 # The UDP protocol is not selected.
11215 $kiriwrite_presmodule->addoption("UDP", { Value => "udp"});
11219 $kiriwrite_presmodule->endselectbox();
11221 $kiriwrite_presmodule->endcell();
11222 $kiriwrite_presmodule->endrow();
11224 $kiriwrite_presmodule->startrow();
11225 $kiriwrite_presmodule->addcell("tablecell1");
11226 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasename});
11227 $kiriwrite_presmodule->endcell();
11228 $kiriwrite_presmodule->addcell("tablecell2");
11229 $kiriwrite_presmodule->addinputbox("database_sqldatabase", { Size => 32, MaxLength => 32, Value => $database_sqldatabase });
11230 $kiriwrite_presmodule->endcell();
11231 $kiriwrite_presmodule->endrow();
11233 $kiriwrite_presmodule->startrow();
11234 $kiriwrite_presmodule->addcell("tablecell1");
11235 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseusername});
11236 $kiriwrite_presmodule->endcell();
11237 $kiriwrite_presmodule->addcell("tablecell2");
11238 $kiriwrite_presmodule->addinputbox("database_username", { Size => 16, MaxLength => 16, Value => $database_username });
11239 $kiriwrite_presmodule->endcell();
11240 $kiriwrite_presmodule->endrow();
11242 $kiriwrite_presmodule->startrow();
11243 $kiriwrite_presmodule->addcell("tablecell1");
11244 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasepassword});
11245 $kiriwrite_presmodule->endcell();
11246 $kiriwrite_presmodule->addcell("tablecell2");
11247 $kiriwrite_presmodule->addinputbox("database_password", { Size => 16, MaxLength => 64, Password => 1 });
11248 $kiriwrite_presmodule->addtext(" ");
11249 $kiriwrite_presmodule->addcheckbox("database_password_keep", { OptionDescription => "Keep the current password", Checked => 1 });
11250 $kiriwrite_presmodule->endcell();
11251 $kiriwrite_presmodule->endrow();
11253 $kiriwrite_presmodule->startrow();
11254 $kiriwrite_presmodule->addcell("tablecell1");
11255 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{tableprefix});
11256 $kiriwrite_presmodule->endcell();
11257 $kiriwrite_presmodule->addcell("tablecell2");
11258 $kiriwrite_presmodule->addinputbox("database_tableprefix", { Size => 16, MaxLength => 16, Value => $database_prefix });
11259 $kiriwrite_presmodule->endcell();
11260 $kiriwrite_presmodule->endrow();
11262 $kiriwrite_presmodule->endtable();
11264 $kiriwrite_presmodule->addlinebreak();
11265 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{setting}->{changesettingsbutton});
11266 $kiriwrite_presmodule->addtext(" | ");
11267 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
11268 $kiriwrite_presmodule->addtext(" | ");
11269 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
11270 $kiriwrite_presmodule->endbox();
11271 $kiriwrite_presmodule->endform();
11273 return $kiriwrite_presmodule->grab();
11277 sub kiriwrite_settings_load{
11278 #################################################################################
11279 # kiriwrite_settings_load: Load the configuration settings into the global #
11284 # kiriwrite_settings_load(); #
11285 #################################################################################
11287 # Load the required Perl modules.
11289 use XML::Simple qw(XMLin);
11290 $xsl = XML::Simple->new();
11292 # Check if the Kiriwrite configuration file exists before using it and
11293 # return an critical error if it doesn't exist.
11295 my $kiriwrite_conf_exist = kiriwrite_fileexists("kiriwrite.xml");
11297 if ($kiriwrite_conf_exist eq 1){
11299 # The configuration really does not exist so return an critical error.
11301 kiriwrite_critical("configfilemissing");
11305 # Check if the Kiriwrite configuration file has valid permission settings
11306 # before using it and return an critical error if it doesn't have the
11307 # valid permission settings.
11309 my $kiriwrite_conf_permissions = kiriwrite_filepermissions("kiriwrite.xml", 1, 0);
11311 if ($kiriwrite_conf_permissions eq 1){
11313 # The permission settings for the Kiriwrite configuration file are
11314 # invalid, so return an critical error.
11316 kiriwrite_critical("configfileinvalidpermissions");
11320 # Converts the XML file into meaningful data for later on in this subroutine.
11322 my $kiriwrite_conf_file = 'kiriwrite.xml';
11323 my $kiriwrite_conf_data = $xsl->XMLin($kiriwrite_conf_file, SuppressEmpty => 1);
11325 # Go and fetch the settings and place them into a hash (that is global).
11327 %kiriwrite_config = (
11329 "directory_data_db" => $kiriwrite_conf_data->{settings}->{directories}->{database},
11330 "directory_data_output" => $kiriwrite_conf_data->{settings}->{directories}->{output},
11331 "directory_noncgi_images" => $kiriwrite_conf_data->{settings}->{directories}->{images},
11333 "system_language" => $kiriwrite_conf_data->{settings}->{language}->{lang},
11334 "system_presmodule" => $kiriwrite_conf_data->{settings}->{system}->{presentation},
11335 "system_dbmodule" => $kiriwrite_conf_data->{settings}->{system}->{database},
11336 "system_datetime" => $kiriwrite_conf_data->{settings}->{system}->{datetime},
11338 "database_server" => $kiriwrite_conf_data->{settings}->{database}->{server},
11339 "database_port" => $kiriwrite_conf_data->{settings}->{database}->{port},
11340 "database_protocol" => $kiriwrite_conf_data->{settings}->{database}->{protocol},
11341 "database_sqldatabase" => $kiriwrite_conf_data->{settings}->{database}->{database},
11342 "database_username" => $kiriwrite_conf_data->{settings}->{database}->{username},
11343 "database_password" => $kiriwrite_conf_data->{settings}->{database}->{password},
11344 "database_tableprefix" => $kiriwrite_conf_data->{settings}->{database}->{prefix}
11348 # Do a validation check on all of the variables that were loaded into the global configuration hash.
11350 kiriwrite_variablecheck($kiriwrite_config{"directory_data_db"}, "maxlength", 64, 0);
11351 kiriwrite_variablecheck($kiriwrite_config{"directory_data_output"}, "maxlength", 64, 0);
11352 kiriwrite_variablecheck($kiriwrite_config{"directory_noncgi_images"}, "maxlength", 512, 0);
11353 kiriwrite_variablecheck($kiriwrite_config{"directory_data_template"}, "maxlength", 64, 0);
11355 my $kiriwrite_config_language_filename = kiriwrite_variablecheck($kiriwrite_config{"system_language"}, "language_filename", "", 1);
11356 my $kiriwrite_config_presmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_presmodule"}, "module", 0, 1);
11357 my $kiriwrite_config_dbmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_dbmodule"}, "module", 0, 1);
11359 # Check if the language filename is valid and return an critical error if
11362 if ($kiriwrite_config_language_filename eq 1){
11364 # The language filename is blank so return an critical error.
11366 kiriwrite_critical("languagefilenameblank");
11368 } elsif ($kiriwrite_config_language_filename eq 2){
11370 # The language filename is invalid so return an critical error.
11372 kiriwrite_critical("languagefilenameinvalid");
11376 # Check if the presentation and database module names are valid and return a critical
11377 # error if they aren't.
11379 if ($kiriwrite_config_presmodule_filename eq 1){
11381 # The presentation module filename given is blank so return an
11384 kiriwrite_critical("presmoduleblank");
11388 if ($kiriwrite_config_presmodule_filename eq 2){
11390 # The presentation module filename is invalid so return an
11393 kiriwrite_critical("presmoduleinvalid");
11397 if ($kiriwrite_config_dbmodule_filename eq 1){
11399 # The database module filename given is blank so return an
11402 kiriwrite_critical("dbmoduleblank");
11406 if ($kiriwrite_config_dbmodule_filename eq 2){
11408 # The database module filename given is invalid so return
11409 # an critical error.
11411 kiriwrite_critical("dbmoduleinvalid");
11415 # Check if the language file does exist before loading it and return an critical error
11416 # if it does not exist.
11418 my $kiriwrite_config_language_fileexists = kiriwrite_fileexists("lang/" . $kiriwrite_config{"system_language"} . ".xml");
11420 if ($kiriwrite_config_language_fileexists eq 1){
11422 # Language file does not exist so return an critical error.
11424 kiriwrite_critical("languagefilemissing");
11428 # Check if the language file has valid permission settings and return an critical error if
11429 # the language file has invalid permissions settings.
11431 my $kiriwrite_config_language_filepermissions = kiriwrite_filepermissions("lang/" . $kiriwrite_config{"system_language"} . ".xml", 1, 0);
11433 if ($kiriwrite_config_language_filepermissions eq 1){
11435 # Language file contains invalid permissions so return an critical error.
11437 kiriwrite_critical("languagefilepermissions");
11441 # Load the language file.
11443 $kiriwrite_lang = $xsl->XMLin("lang/" . $kiriwrite_config{"system_language"} . ".xml", SuppressEmpty => 1);
11445 # Check if the presentation module does exist before loading it and return an critical error
11446 # if the presentation module does not exist.
11448 my $kiriwrite_config_presmodule_fileexists = kiriwrite_fileexists("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm");
11450 if ($kiriwrite_config_presmodule_fileexists eq 1){
11452 # Presentation module does not exist so return an critical error.
11454 kiriwrite_critical("presmodulemissing");
11458 # Check if the presentation module does have the valid permission settings and return a
11459 # critical error if the presentation module contains invalid permission settings.
11461 my $kiriwrite_config_presmodule_permissions = kiriwrite_filepermissions("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm", 1, 0);
11463 if ($kiriwrite_config_presmodule_permissions eq 1){
11465 # Presentation module contains invalid permissions so return an critical error.
11467 kiriwrite_critical("presmoduleinvalidpermissions");
11471 # Check if the database module does exist before loading it and return an critical error
11472 # if the database module does not exist.
11474 my $kiriwrite_config_dbmodule_fileexists = kiriwrite_fileexists("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm");
11476 if ($kiriwrite_config_dbmodule_fileexists eq 1){
11478 # Database module does not exist so return an critical error.
11480 kiriwrite_critical("dbmodulemissing");
11484 # Check if the database module does have the valid permission settings and return an
11485 # critical error if the database module contains invalid permission settings.
11487 my $kiriwrite_config_dbmodule_permissions = kiriwrite_filepermissions("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm", 1, 0);
11489 if ($kiriwrite_config_dbmodule_permissions eq 1){
11491 # Presentation module contains invalid permissions so return an critical error.
11493 kiriwrite_critical("dbmoduleinvalidpermissions");
11497 # Include the Modules directory.
11499 use lib "Modules/";
11501 # Load the presentation module.
11503 my $presmodulename = "Presentation::" . $kiriwrite_config{"system_presmodule"};
11504 ($presmodulename) = $presmodulename =~ m/^(.*)$/g;
11505 eval "use " . $presmodulename;
11506 $presmodulename = "Kiriwrite::Presentation::" . $kiriwrite_config{"system_presmodule"};
11507 $kiriwrite_presmodule = $presmodulename->new();
11509 # Load the database module.
11511 my $dbmodulename = "Database::" . $kiriwrite_config{"system_dbmodule"};
11512 ($dbmodulename) = $dbmodulename =~ m/^(.*)$/g;
11513 eval "use " . $dbmodulename;
11514 $dbmodulename = "Kiriwrite::Database::" . $kiriwrite_config{"system_dbmodule"};
11515 $kiriwrite_dbmodule = $dbmodulename->new();
11517 # Load the following settings to the database module.
11519 $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"} });
11525 sub kiriwrite_variablecheck{
11526 #################################################################################
11527 # kiriwrite_variablecheck: Checks the variables for any invalid characters. #
11531 # kiriwrite_variablecheck(variable, type, length, noerror); #
11533 # variable Specifies the variable to be checked. #
11534 # type Specifies what type the variable is. #
11535 # option Specifies the maximum/minimum length of the variable #
11536 # (if minlength/maxlength is used) or if the filename should be #
11537 # checked to see if it is blank. #
11538 # noerror Specifies if Kiriwrite should return an error or not on #
11539 # certain values. #
11540 #################################################################################
11542 # Get the values that were passed to the subroutine.
11544 my ($variable_data, $variable_type, $variable_option, $variable_noerror) = @_;
11546 if ($variable_type eq "numbers"){
11548 # Check for numbers and return an error if there is anything else than numebrs.
11550 my $variable_data_validated = $variable_data; # Copy the variable_data to variable_data_validated.
11551 $variable_data_validated =~ tr/0-9//d; # Take away all of the numbers and from the variable.
11552 # If it only contains numbers then it should be blank.
11554 if ($variable_data_validated eq ""){
11555 # The validated variable is blank. So continue to the end of this section where the return function should be.
11557 # The variable is not blank, so check if the no error value is set
11560 if ($variable_noerror eq 1){
11562 # The validated variable is not blank and the noerror
11563 # value is set to 1. So return an value of 1.
11564 # (meaning that the data is invalid).
11568 } elsif ($variable_noerror eq 0) {
11570 # The validated variable is not blank and the noerror
11571 # value is set to 0.
11573 kiriwrite_error("invalidvariable");
11577 # The variable noerror value is something else
11578 # pther than 1 or 0. So return an error.
11580 kiriwrite_error("invalidvariable");
11588 } elsif ($variable_type eq "lettersnumbers"){
11590 # Check for letters and numbers and return an error if there is anything else other
11591 # than letters and numbers.
11593 my $variable_data_validated = $variable_data; # Copy the variable_data to variable_data_validated
11594 $variable_data_validated =~ tr/a-zA-Z0-9.//d;
11595 $variable_data_validated =~ s/\s//g;
11597 if ($variable_data_validated eq ""){
11598 # The validated variable is blank. So continue to the end of this section where the return function should be.
11600 # The variable is not blank, so check if the no error value is set
11603 if ($variable_noerror eq 1){
11605 # The validated variable is not blank and the noerror
11606 # value is set to 1. So return an value of 1.
11607 # (meaning that the data is invalid).
11611 } elsif ($variable_noerror eq 0) {
11613 # The validated variable is not blank and the noerror
11614 # value is set to 0.
11616 kiriwrite_error("invalidvariable");
11620 # The variable noerror value is something else
11621 # pther than 1 or 0. So return an error.
11623 kiriwrite_error("invalidvariable");
11631 } elsif ($variable_type eq "maxlength"){
11632 # Check for the length of the variable, return an error if it is longer than the length specified.
11634 # Check if the variable_data string is blank, if it is then set the variable_data_length
11637 my $variable_data_length = 0;
11639 if (!$variable_data){
11641 # Set variable_data_length to '0'.
11642 $variable_data_length = 0;
11646 # Get the length of the variable recieved.
11647 $variable_data_length = length($variable_data);
11653 if ($variable_data_length > $variable_option){
11655 # The variable length is longer than it should be so check if
11656 # the no error value is set 1.
11658 if ($variable_noerror eq 1){
11660 # The no error value is set to 1, so return an
11661 # value of 1 (meaning tha the variable is
11662 # too long to be used).
11666 } elsif ($variable_noerror eq 0){
11668 # The no error value is set to 0, so return
11671 kiriwrite_error("variabletoolong");
11675 # The no error value is something else other
11676 # than 0 or 1, so return an error.
11678 kiriwrite_error("variabletoolong");
11684 # The variable length is exactly or shorter than specified, so continue to end of this section where
11685 # the return function should be.
11691 } elsif ($variable_type eq "blank"){
11692 # Check if the variable is blank and if it is blank, then return an error.
11694 if (!$variable_data){
11696 # The variable data really is blank, so check what
11697 # the no error value is set.
11699 if ($variable_noerror eq 1){
11701 # The no error value is set to 1, so return
11702 # a value of 1 (saying that the variable was
11707 } elsif ($variable_noerror eq 0){
11709 # The no error value is set to 0, so return
11712 kiriwrite_error("blankvariable");
11716 # The no error value is something else other
11717 # than 0 or 1, so return an error.
11719 kiriwrite_error("invalidvariable");
11727 } elsif ($variable_type eq "filename"){
11728 # Check for letters and numbers, if anything else than letters and numbers is there (including spaces) return
11731 # Check if the filename passed is blank, if it is then return with an error.
11733 if ($variable_data eq ""){
11735 # The filename specified is blank, so check what the
11736 # noerror value is set.
11738 if ($variable_noerror eq 1){
11740 # The no error value is set to 1 so return
11741 # a value of 1 (meaning that the filename
11746 } elsif ($variable_noerror eq 0){
11748 # The no error value is set to 1 so return
11751 kiriwrite_error("blankfilename");
11755 # The no error value is something else other
11756 # than 0 or 1, so return an error.
11758 kiriwrite_error("invalidvariable");
11767 my $variable_data_validated = $variable_data;
11768 $variable_data_validated =~ tr/a-zA-Z0-9\.//d;
11770 # Check if the validated data variable is blank, if it is
11771 # then continue to the end of this section where the return
11772 # function should be, otherwise return an error.
11774 if ($variable_data_validated eq ""){
11776 # The validated data variable is blank, meaning that
11777 # it only contained letters and numbers.
11781 # The validated data variable is not blank, meaning
11782 # that it contains something else, so return an error
11785 if ($variable_noerror eq 1){
11787 # The no error value is set to 1 so return
11788 # an value of 2. (meaning that the filename
11794 } elsif ($variable_noerror eq 0){
11796 # The no error value is set to 0 so return
11799 kiriwrite_error("invalidfilename");
11803 # The no error value is something else other
11804 # than 0 or 1 so return an error.
11806 kiriwrite_error("invalidvariable");
11814 } elsif ($variable_type eq "filenameindir"){
11815 # Check if the filename is in the directory and return an
11816 # error if it isn't.
11818 if ($variable_data eq ""){
11820 # The filename specified is blank, so check what the
11821 # noerror value is set.
11823 if ($variable_noerror eq 1){
11825 # The no error value is set to 1 so return
11826 # a value of 1 (meaning that the filename
11831 } elsif ($variable_noerror eq 0){
11833 # The no error value is set to 1 so return
11836 kiriwrite_error("blankfilename");
11840 # The no error value is something else other
11841 # than 0 or 1, so return an error.
11843 kiriwrite_error("invalidvariable");
11852 # Set the following variables for later on.
11854 my $variable_data_length = 0;
11855 my $variable_data_char = "";
11856 my $variable_data_validated = "";
11857 my $variable_data_seek = 0;
11858 my $variable_database_list = "";
11859 my $variable_database_listcurrent = "";
11860 my $variable_data_firstlevel = 1;
11862 # Get the length of the variable recieved.
11864 $variable_data_length = length($variable_data);
11866 # Check if the database filename contains the directory command
11867 # for up a directory level and if it is, return an error
11868 # or return with a number.
11872 # Get a character from the filename passed to this subroutine.
11874 $variable_data_char = substr($variable_data, $variable_data_seek, 1);
11876 # Check if the current character is the forward slash character.
11878 if ($variable_data_char eq "/"){
11880 # Check if the current directory is blank (and on the first level), or if the
11881 # current directory contains two dots or one dot, if it does return an error.
11883 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
11885 # Check if the noerror value is set to 1, if it is return an
11886 # number, else return an proper error.
11888 if ($variable_noerror eq 1){
11890 # Page filename contains invalid characters and
11891 # the no error value is set to 1 so return a
11892 # value of 2 (meaning that the page filename
11897 } elsif ($variable_noerror eq 0) {
11899 # Page filename contains invalid characters and
11900 # the no error value is set to 0 so return an
11903 kiriwrite_error("invalidfilename");
11907 # The no error value is something else other
11908 # than 0 or 1 so return an error.
11910 kiriwrite_error("invalidvariable");
11916 # Append the forward slash, clear the current directory name and set
11917 # the first directory level value to 0.
11919 $variable_database_list = $variable_database_list . $variable_data_char;
11920 $variable_database_listcurrent = "";
11921 $variable_data_firstlevel = 0;
11925 # Append the current character to the directory name and to the current
11928 $variable_database_list = $variable_database_list . $variable_data_char;
11929 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
11933 # Increment the seek counter.
11935 $variable_data_seek++;
11937 } until ($variable_data_seek eq $variable_data_length);
11941 } elsif ($variable_type eq "datetime"){
11942 # Check if the date and time setting format is valid.
11944 if ($variable_data eq ""){
11946 if ($variable_noerror eq 1){
11948 # The no error value is set to 1 so return
11949 # a value of 1 (meaning that the date and
11950 # time format was blank).
11954 } elsif ($variable_noerror eq 0){
11956 # The no error value is set to 1 so return
11959 kiriwrite_error("blankdatetimeformat");
11963 # The no error value is something else other
11964 # than 0 or 1, so return an error.
11966 kiriwrite_error("invalidvariable");
11972 my $variable_data_validated = $variable_data;
11973 $variable_data_validated =~ tr|dDmMyYhms/():[ ]||d;
11975 if ($variable_data_validated eq ""){
11977 # The date and time format is valid. So
11982 # The validated data variable is not blank, meaning
11983 # that it contains something else, so return an error
11986 if ($variable_noerror eq 1){
11988 # The no error value is set to 1 so return
11989 # an value of 2. (meaning that the date and
11990 # time format was invalid).
11994 } elsif ($variable_noerror eq 0){
11996 # The no error value is set to 0 so return
11999 kiriwrite_error("invaliddatetimeformat");
12003 # The no error value is something else other
12004 # than 0 or 1 so return an error.
12006 kiriwrite_error("invalidvariable");
12014 } elsif ($variable_type eq "directory"){
12015 # Check if the directory only contains letters and numbers and
12016 # return an error if anything else appears.
12018 my $variable_data_validated = $variable_data;
12019 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12021 if ($variable_data eq ""){
12023 if ($variable_noerror eq 1){
12025 # The no error value is set to 1 so return
12026 # a value of 1 (meaning that the directory
12031 } elsif ($variable_noerror eq 0){
12033 # The no error value is set to 1 so return
12036 kiriwrite_error("blankdirectory");
12040 # The no error value is something else other
12041 # than 0 or 1, so return an error.
12043 kiriwrite_error("invalidvariable");
12049 if ($variable_data_validated eq ""){
12051 # The validated data variable is blank, meaning that
12052 # it only contains letters and numbers.
12056 # The validated data variable is not blank, meaning
12057 # that it contains something else, so return an error
12060 if ($variable_noerror eq 1){
12062 # The no error value is set to 1 so return
12063 # an value of 2. (meaning that the directory
12064 # name is invalid).
12068 } elsif ($variable_noerror eq 0){
12070 # The no error value is set to 0 so return
12073 kiriwrite_error("invaliddirectory");
12077 # The no error value is something else other
12078 # than 0 or 1 so return an error.
12080 kiriwrite_error("invalidvariable");
12088 } elsif ($variable_type eq "language_filename"){
12090 # The variable type is a language filename type.
12091 # Check if the language file name is blank and
12092 # if it is then return an error (or value).
12094 if ($variable_data eq ""){
12096 # The language filename is blank so check the
12097 # no error value and return an error (or value).
12099 if ($variable_noerror eq 1){
12101 # Language filename is blank and the no error value
12102 # is set as 1, so return a value of 1 (saying that
12103 # the language filename is blank).
12107 } elsif ($variable_noerror eq 0) {
12109 # Language filename is blank and the no error value
12110 # is not set as 1, so return an error.
12112 kiriwrite_critical("languagefilenameblank");
12116 # The noerror value is something else other
12117 # than 0 or 1 so return an error.
12119 kiriwrite_error("invalidvariable");
12125 # Set the following variables for later on.
12127 my $variable_data_length = 0;
12128 my $variable_data_char = "";
12129 my $variable_data_seek = 0;
12131 # Get the length of the language file name.
12133 $variable_data_length = length($variable_data);
12137 # Get a character from the language filename passed to this
12138 # subroutine and the character the seek counter value is set
12141 $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12143 # Check if the language filename contains a forward slash or a dot,
12144 # if the selected character is a forward slash then return an error
12147 if ($variable_data_char eq "/" || $variable_data_char eq "."){
12149 # The language filename contains a forward slash or
12150 # a dot so depending on the no error value, return
12151 # an error or a value.
12153 if ($variable_noerror eq 1){
12155 # Language filename contains a forward slash or a dot
12156 # and the no error value has been set to 1, so return
12157 # an value of 2 (saying that the language file name is
12162 } elsif ($variable_noerror eq 0) {
12164 # Language filename contains a forward slash and the no
12165 # error value has not been set to 1, so return an error.
12167 kiriwrite_critical("languagefilenameinvalid");
12171 # The noerror value is something else other than
12172 # 1 or 0 so return an error.
12174 kiriwrite_error("invalidvariable");
12180 # Increment the seek counter.
12182 $variable_data_seek++;
12184 } until ($variable_data_seek eq $variable_data_length);
12188 } elsif ($variable_type eq "pagesetting"){
12190 # The variable type is a page setting, so check if the page
12191 # setting has one of the valid options.
12193 if ($variable_data eq 0 || $variable_data eq 1 || $variable_data eq 2 || $variable_data eq 3){
12195 # The variable is one of the options above, so continue
12196 # to the end of this section.
12200 # The variable is not one of the options above, so check
12201 # and see if a error or a value should be returned.
12203 if ($variable_noerror eq 1){
12205 # The page setting is invalid and the no error
12206 # value is set 1, so return a value of 1
12207 # (saying that the page setting value is
12212 } elsif ($variable_noerror eq 0) {
12214 # Page setting is invalid and the no error value
12215 # is not 1, so return an error.
12217 kiriwrite_error("invalidvariable");
12221 # The no error value is something else other
12222 # than 0 or 1 so return an error.
12224 kiriwrite_error("invalidvariable");
12232 } elsif ($variable_type eq "page_filename"){
12234 # The variable type is a page filename type. Check
12235 # if the data is empty and if it is then return an
12236 # error (or value).
12238 if ($variable_data eq ""){
12240 # The filename is blank so check the no error
12241 # value and depending on it return an value
12244 if ($variable_noerror eq 1){
12246 # Page filename is blank and the no error value
12247 # is set as 1, so return a value of 1 (saying
12248 # the filename is blank).
12252 } elsif ($variable_noerror eq 0) {
12254 # Page filename is blank and the no error value
12255 # is not 1, so return an error.
12257 kiriwrite_error("emptypagefilename");
12261 # The no error value is something else other
12262 # than 0 or 1 so return an error.
12264 kiriwrite_error("invalidvariable");
12269 # Set the following variables for later on.
12272 my $variable_data_length = 0;
12273 my $variable_data_slash = 0;
12274 my $variable_data_char = "";
12275 my $variable_data_validated = "";
12276 my $variable_data_seek = 0;
12277 my $variable_database_list = "";
12278 my $variable_database_listcurrent = "";
12279 my $variable_data_firstlevel = 1;
12281 # Get the length of the filename.
12283 $variable_data_length = length($variable_data);
12285 # Check that only valid characters should be appearing in
12288 $variable_data_validated = $variable_data;
12289 $variable_data_validated =~ tr|a-zA-Z0-9\.\/\-_||d;
12291 if ($variable_data_validated ne ""){
12293 # The validated variable is not blank, meaning the
12294 # variable contains invalid characters, so return
12297 if ($variable_noerror eq 1){
12299 # Page filename contains invalid characters and
12300 # the no error value is set to 1 so return a
12301 # value of 2 (meaning that the page filename
12306 } elsif ($variable_noerror eq 0) {
12308 # Page filename contains invalid characters and
12309 # the no error value is set to 0 so return an
12312 kiriwrite_error("invalidfilename");
12316 # The no error value is something else other
12317 # than 0 or 1 so return an error.
12319 kiriwrite_error("invalidvariable");
12325 # Check if the page filename contains the directory command
12326 # for up a directory level and if it is, return an error
12327 # or return with a number.
12331 # Get a character from the filename passed to this subroutine.
12333 $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12335 # Check if the current character is the forward slash character.
12337 if ($variable_data_char eq "/"){
12339 # Check if the current directory is blank (and on the first level), or if the
12340 # current directory contains two dots or one dot, if it does return an error.
12342 $variable_data_slash = 1;
12344 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
12346 # Check if the noerror value is set to 1, if it is return an
12347 # number, else return an proper error.
12349 if ($variable_noerror eq 1){
12351 # Page filename contains invalid characters and
12352 # the no error value is set to 1 so return a
12353 # value of 2 (meaning that the page filename
12358 } elsif ($variable_noerror eq 0) {
12360 # Page filename contains invalid characters and
12361 # the no error value is set to 0 so return an
12364 kiriwrite_error("invalidfilename");
12368 # The no error value is something else other
12369 # than 0 or 1 so return an error.
12371 kiriwrite_error("invalidvariable");
12377 # Append the forward slash, clear the current directory name and set
12378 # the first directory level value to 0.
12380 $variable_database_list = $variable_database_list . $variable_data_char;
12381 $variable_database_listcurrent = "";
12382 $variable_data_firstlevel = 0;
12386 # Append the current character to the directory name and to the current
12389 $variable_data_slash = 0;
12391 $variable_database_list = $variable_database_list . $variable_data_char;
12392 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
12396 # Increment the seek counter.
12398 $variable_data_seek++;
12400 } until ($variable_data_seek eq $variable_data_length);
12402 # Check if the last character is a slash and return an
12405 if ($variable_data_slash eq 1){
12407 if ($variable_noerror eq 1){
12409 # Last character is a slash and the no error
12410 # value is set to 1 so return a value of 2
12411 # (meaning that the page filename is invalid).
12415 } elsif ($variable_noerror eq 0) {
12417 # Page filename contains a slash for the last
12418 # character and the no error value is set to 0
12419 # so return an error.
12421 kiriwrite_error("invalidfilename");
12425 # The no error value is something else other
12426 # than 0 or 1 so return an error.
12428 kiriwrite_error("invalidvariable");
12436 } elsif ($variable_type eq "module"){
12438 # The variable type is a presentation module filename.
12440 # Check if the variable_data is blank and if it is
12443 if ($variable_data eq ""){
12445 # The presentation module is blank so check if an error
12446 # value should be returned or a number should be
12449 if ($variable_noerror eq 1){
12451 # Module name is blank and the no error value
12452 # is set to 1 so return a value of 2 (meaning
12453 # that the page filename is blank).
12457 } elsif ($variable_noerror eq 0) {
12459 # Module name contains is blank and the no error
12460 # value is set to 0 so return an error.
12462 kiriwrite_critical("moduleblank");
12466 # The no error value is something else other
12467 # than 0 or 1 so return an error.
12469 kiriwrite_critical("invalidvalue");
12477 my $variable_data_validated = $variable_data;
12478 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12480 if ($variable_data_validated eq ""){
12484 if ($variable_noerror eq 1){
12486 # Module name contains invalid characters and
12487 # the no error value is set to 1 so return a
12488 # value of 2 (meaning that the page filename
12493 } elsif ($variable_noerror eq 0) {
12495 # Module name contains invalid characters and
12496 # the no error value is set to 0 so return an
12499 kiriwrite_critical("moduleinvalid");
12503 # The no error value is something else other
12504 # than 0 or 1 so return an error.
12506 kiriwrite_error("invalidvalue");
12514 } elsif ($variable_type eq "utf8"){
12516 # The variable type is a UTF8 string.
12518 if (!$variable_data){
12520 $variable_data = "";
12524 # Check if the string is a valid UTF8 string.
12526 if ($variable_data =~ m/^(
12527 [\x09\x0A\x0D\x20-\x7E] # ASCII
12528 | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
12529 | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
12530 | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
12531 | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
12532 | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
12533 | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
12534 | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
12537 # The UTF-8 string is valid.
12541 # The UTF-8 string is not valid, check if the no error
12542 # value is set to 1 and return an error if it isn't.
12544 if ($variable_noerror eq 1){
12546 # The no error value has been set to 1, so return
12547 # a value of 1 (meaning that the UTF-8 string is
12552 } elsif ($variable_noerror eq 0) {
12554 # The no error value has been set to 0, so return
12557 kiriwrite_error("invalidutf8");
12561 # The no error value is something else other than 0
12562 # or 1, so return an error.
12564 kiriwrite_error("invalidoption");
12572 } elsif ($variable_type eq "serverprotocol"){
12574 # Check if the server protocol is TCP or UDP and return
12575 # an error if it isn't.
12577 if ($variable_data ne "tcp" && $variable_data ne "udp"){
12579 # The protocol given is not valid, check if the no
12580 # error value is set to 1 and return an error if it isn't.
12582 if ($variable_noerror eq 1){
12584 # The no error value has been set to 1, so return a
12585 # value of 1 (meaning that the server protocol is
12590 } elsif ($variable_noerror eq 0){
12592 # The no error value has been set to 0, so return
12595 kiriwrite_error("serverprotocolinvalid");
12599 # The no error value is something else other than 0
12600 # or 1, so return an error.
12602 kiriwrite_error("invalidoption");
12610 } elsif ($variable_type eq "port"){
12612 # Check if the port number given is less than 0 or more than 65535
12613 # and return an error if it is.
12615 if ($variable_data < 0 || $variable_data > 65535){
12617 # The port number is less than 0 and more than 65535 so
12618 # check if the no error value is set to 1 and return an
12619 # error if it isn't.
12621 if ($variable_noerror eq 1){
12623 # The no error value has been set to 1, so return a
12624 # value of 1 (meaning that the port number is invalid).
12628 } elsif ($variable_noerror eq 0){
12630 # The no error value has been set to 0, so return
12633 kiriwrite_error("serverportnumberinvalid");
12637 # The no error value is something else other than 0
12638 # or 1, so return an error.
12640 kiriwrite_error("invalidoption");
12650 # Another type than the valid ones above has been specified so return an error specifying an invalid option.
12651 kiriwrite_error("invalidoption");
12655 sub kiriwrite_output_header{
12656 #################################################################################
12657 # kiriwrite_output_header: Outputs the header to the browser/stdout/console. #
12661 # kiriwrite_output_header(); #
12662 #################################################################################
12664 # Print a header saying that the page expires immediately since the
12665 # date is set in the past.
12667 print header(-Expires=>'Sunday, 01-Jan-06 00:00:00 GMT', -charset=>'utf-8');
12671 sub kiriwrite_processfilename{
12672 #################################################################################
12673 # kiriwrite_processfilename: Processes a name and turns it into a filename that #
12674 # can be used by Kiriwrite. #
12678 # kiriwrite_processfilename(text); #
12680 # text Specifies the text to be used in the process for creating a new #
12682 #################################################################################
12684 # Get the values that have been passed to the subroutine.
12686 my ($process_text) = @_;
12688 # Define some variables that will be used later on.
12690 my $processed_stageone = "";
12691 my $processed_stagetwo = "";
12692 my $processed_length = "";
12693 my $processed_char = "";
12694 my $processed_seek = 0;
12695 my $processed_filename = "";
12697 # Set the first stage value of the processed filename to the
12698 # process filename and then filter it out to only contain
12699 # numbers and letters (no spaces) and then convert the
12700 # capitals to small letters.
12702 $processed_stageone = $process_text;
12703 $processed_stageone =~ tr#a-zA-Z0-9##cd;
12704 $processed_stageone =~ tr/A-Z/a-z/;
12706 # Now set the second stage value of the processed filename
12707 # to the first stage value of the processed filename and
12708 # then limit the filename down to 32 characters.
12710 $processed_stagetwo = $processed_stageone;
12711 $processed_length = length($processed_stagetwo);
12713 # Process the second stage filename into the final
12714 # filename and do so until the seek counter is 32
12715 # or reaches the length of the second stage filename.
12719 # Get the character that is the seek counter
12722 $processed_char = substr($processed_stagetwo, $processed_seek, 1);
12724 # Append to the final processed filename.
12726 $processed_filename = $processed_filename . $processed_char;
12728 # Increment the seek counter.
12732 } until ($processed_seek eq 32 || $processed_seek eq $processed_length);
12734 return $processed_filename;
12738 sub kiriwrite_language{
12739 #################################################################################
12740 # kiriwrite_language: Process language strings that needs certain text inserted.#
12744 # kiriwrite_language(string, [text, text, ...]); #
12746 # string Specifies the string to process. #
12747 # text Specifies the text to pass to the string (can be repeated many #
12749 #################################################################################
12751 my $string = shift;
12754 foreach $item (@_){
12756 $string =~ s/%s/$item/;
12764 sub kiriwrite_error{
12765 #################################################################################
12766 # kiriwrite_error: Prints out an error message. #
12770 # kiriwrite_error(errortype, errorext); #
12772 # errortype Specifies the type of error that occured. #
12773 # errorext Specifies the extended error information. #
12774 #################################################################################
12776 # Get the error type from the subroutine.
12778 my ($error_type, $error_extended) = @_;
12780 # Disconnect from the database server.
12782 if ($kiriwrite_dbmodule){
12783 $kiriwrite_dbmodule->disconnect();
12786 # Load the list of error messages.
12788 my ($kiriwrite_error, %kiriwrite_error);
12790 %kiriwrite_error = (
12792 # Catch all error message.
12793 "generic" => $kiriwrite_lang->{error}->{generic},
12795 # Standard error messages.
12796 "blankfilename" => $kiriwrite_lang->{error}->{blankfilename},
12797 "blankvariable" => $kiriwrite_lang->{error}->{blankvariable},
12798 "fileexists" => $kiriwrite_lang->{error}->{fileexists},
12799 "internalerror" => $kiriwrite_lang->{error}->{internalerror},
12800 "invalidoption" => $kiriwrite_lang->{error}->{invalidoption},
12801 "invalidaction" => $kiriwrite_lang->{error}->{invalidaction},
12802 "invalidfilename" => $kiriwrite_lang->{error}->{invalidfilename},
12803 "invalidmode" => $kiriwrite_lang->{error}->{invalidmode},
12804 "invalidutf8" => $kiriwrite_lang->{error}->{invalidutf8},
12805 "invalidvariable" => $kiriwrite_lang->{error}->{invalidvariable},
12806 "variabletoolong" => $kiriwrite_lang->{error}->{variabletoolong},
12808 # Specific error messages.
12809 "blankcompiletype" => $kiriwrite_lang->{error}->{blankcompiletype},
12810 "blankdatabasepageadd" => $kiriwrite_lang->{error}->{blankdatabasepageadd},
12811 "blankdirectory" => $kiriwrite_lang->{error}->{blankdirectory},
12812 "blankfindfilter" => $kiriwrite_lang->{error}->{blankfindfilter},
12813 "blankdatetimeformat" => $kiriwrite_lang->{error}->{blankdatetimeformat},
12814 "databaseconnectionerror" => $kiriwrite_lang->{error}->{databaseconnectionerror},
12815 "databasecategoriestoolong" => $kiriwrite_lang->{error}->{databasecategoriestoolong},
12816 "databasecopysame" => $kiriwrite_lang->{error}->{databasecopysame},
12817 "databasealreadyexists" => $kiriwrite_lang->{error}->{databasealreadyexists},
12818 "datadirectorymissing" => $kiriwrite_lang->{error}->{datadirectorymissing},
12819 "datadirectoryinvalidpermissions" => $kiriwrite_lang->{error}->{datadirectoryinvalidpermissions},
12820 "databasedescriptiontoolong" => $kiriwrite_lang->{error}->{databasedescriptiontoolong},
12821 "databasefilenameinvalid" => $kiriwrite_lang->{error}->{databasefilenameinvalid},
12822 "databasefilenametoolong" => $kiriwrite_lang->{error}->{databasefilenametoolong},
12823 "databaseerror" => $kiriwrite_lang->{error}->{databaseerror},
12824 "databaseinvalidpermissions" => $kiriwrite_lang->{error}->{databaseinvalidpermissions},
12825 "databasenameinvalid" => $kiriwrite_lang->{error}->{databasenameinvalid},
12826 "databasenametoolong" => $kiriwrite_lang->{error}->{databasenametoolong},
12827 "databasenameblank" => $kiriwrite_lang->{error}->{databasenameblank},
12828 "databasemissingfile" => $kiriwrite_lang->{error}->{databasemissingfile},
12829 "databasemovemissingfile" => $kiriwrite_lang->{error}->{databasemovemissingfile},
12830 "databasenorename" => $kiriwrite_lang->{error}->{databasenorename},
12831 "databasemovesame" => $kiriwrite_lang->{error}->{databasemovesame},
12832 "dbmoduleblank" => $kiriwrite_lang->{error}->{dbmoduleblank},
12833 "dbmoduleinvalid" => $kiriwrite_lang->{error}->{dbmoduleinvalid},
12834 "dbdirectoryblank" => $kiriwrite_lang->{error}->{dbdirectoryblank},
12835 "dbdirectoryinvalid" => $kiriwrite_lang->{error}->{dbdirectoryinvalid},
12836 "dbmodulemissing" => $kiriwrite_lang->{error}->{dbmodulemissing},
12837 "filtersdatabasenotcreated" => $kiriwrite_lang->{error}->{filtersdatabasenotcreated},
12838 "filtersdbdatabaseerror" => $kiriwrite_lang->{error}->{filtersdbdatabaseerror},
12839 "filtersdbpermissions" => $kiriwrite_lang->{error}->{filtersdbpermissions},
12840 "filtersdbmissing" => $kiriwrite_lang->{error}->{filtersdbmissing},
12841 "filteridblank" => $kiriwrite_lang->{error}->{filteridblank},
12842 "filterdoesnotexist" => $kiriwrite_lang->{error}->{filterdoesnotexist},
12843 "filteridinvalid" => $kiriwrite_lang->{error}->{filteridinvalid},
12844 "filteridtoolong" => $kiriwrite_lang->{error}->{filteridtoolong},
12845 "findfiltertoolong" => $kiriwrite_lang->{error}->{findfiltertoolong},
12846 "filterpriorityinvalid" => $kiriwrite_lang->{error}->{filterpriorityinvalid},
12847 "filterpriorityinvalidchars" => $kiriwrite_lang->{error}->{filterpriorityinvalidchars},
12848 "filterprioritytoolong" => $kiriwrite_lang->{error}->{filterprioritytoolong},
12849 "invalidcompiletype" => $kiriwrite_lang->{error}->{invalidcompiletype},
12850 "invalidpagenumber" => $kiriwrite_lang->{error}->{invalidpagenumber},
12851 "nopagesselected" => $kiriwrite_lang->{error}->{nopagesselected},
12852 "invaliddirectory" => $kiriwrite_lang->{error}->{invaliddirectory},
12853 "invaliddatetimeformat" => $kiriwrite_lang->{error}->{invaliddatetimeformat},
12854 "invalidlanguagefilename" => $kiriwrite_lang->{error}->{invalidlanguagefilename},
12855 "languagefilenamemissing" => $kiriwrite_lang->{error}->{languagefilenamemissing},
12856 "moduleblank" => $kiriwrite_lang->{error}->{moduleblank},
12857 "moduleinvalid" => $kiriwrite_lang->{error}->{moduleinvalid},
12858 "newcopydatabasedatabaseerror" => $kiriwrite_lang->{error}->{newcopydatabasedatabaseerror},
12859 "newcopydatabasedoesnotexist" => $kiriwrite_lang->{error}->{newcopydatabasedoesnotexist},
12860 "newcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newcopydatabasefileinvalidpermissions},
12861 "newmovedatabasedatabaseerror" => $kiriwrite_lang->{error}->{newmovedatabasedatabaseerror},
12862 "newmovedatabasedoesnotexist" => $kiriwrite_lang->{error}->{newmovedatabasedoesnotexist},
12863 "newmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newmovedatabasefileinvalidpermissions},
12864 "nodatabasesavailable" => $kiriwrite_lang->{error}->{nodatabasesavailable},
12865 "nodatabaseselected" => $kiriwrite_lang->{error}->{nodatabaseselected},
12866 "noeditvaluesselected" => $kiriwrite_lang->{error}->{noeditvaluesselected},
12867 "oldcopydatabasedatabaseerror" => $kiriwrite_lang->{error}->{oldcopydatabasedatabaseerror},
12868 "oldcopydatabasedoesnotexist" => $kiriwrite_lang->{error}->{oldcopydatabasedoesnotexist},
12869 "oldcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldcopydatabasefileinvalidpermissions},
12870 "oldmovedatabasedatabaseerror" => $kiriwrite_lang->{error}->{oldmovedatabasedatabaseerror},
12871 "oldmovedatabasedoesnotexist" => $kiriwrite_lang->{error}->{oldmovedatabasedoesnotexist},
12872 "oldmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldmovedatabasefileinvalidpermissions},
12873 "outputdirectoryblank" => $kiriwrite_lang->{error}->{outputdirectoryblank},
12874 "outputdirectoryinvalid" => $kiriwrite_lang->{error}->{outputdirectoryinvalid},
12875 "outputdirectorymissing" => $kiriwrite_lang->{error}->{outputdirectorymissing},
12876 "outputdirectoryinvalidpermissions" => $kiriwrite_lang->{error}->{outputdirectoryinvalidpermissions},
12877 "presmoduleblank" => $kiriwrite_lang->{error}->{presmoduleblank},
12878 "presmoduleinvalid" => $kiriwrite_lang->{error}->{presmoduleinvalid},
12879 "presmodulemissing" => $kiriwrite_lang->{error}->{presmodulemissing},
12880 "pagefilenamedoesnotexist" => $kiriwrite_lang->{error}->{pagefilenamedoesnotexist},
12881 "pagefilenameexists" => $kiriwrite_lang->{error}->{pagefilenameexists},
12882 "pagefilenameinvalid" => $kiriwrite_lang->{error}->{pagefilenameinvalid},
12883 "pagefilenametoolong" => $kiriwrite_lang->{error}->{pagefilenametoolong},
12884 "pagefilenameblank" => $kiriwrite_lang->{error}->{pagefilenameblank},
12885 "pagetitletoolong" => $kiriwrite_lang->{error}->{pagetitletoolong},
12886 "pagedescriptiontoolong" => $kiriwrite_lang->{error}->{pagedescriptiontoolong},
12887 "pagesectiontoolong" => $kiriwrite_lang->{error}->{pagesectiontoolong},
12888 "pagedatabasefilenametoolong" => $kiriwrite_lang->{error}->{pagedatabasefilenametoolong},
12889 "pagesettingstoolong" => $kiriwrite_lang->{error}->{pagesettingstoolong},
12890 "pagesettingsinvalid" => $kiriwrite_lang->{error}->{pagesettingsinvalid},
12891 "pagetemplatefilenametoolong" => $kiriwrite_lang->{error}->{pagetemplatefilenametoolong},
12892 "replacefiltertoolong" => $kiriwrite_lang->{error}->{replacefiltertoolong},
12893 "servernameinvalid" => $kiriwrite_lang->{error}->{servernameinvalid},
12894 "servernametoolong" => $kiriwrite_lang->{error}->{servernametoolong},
12895 "serverdatabasenameinvalid" => $kiriwrite_lang->{error}->{serverdatabasenameinvalid},
12896 "serverdatabasenametoolong" => $kiriwrite_lang->{error}->{serverdatabasenametoolong},
12897 "serverdatabaseusernameinvalid" => $kiriwrite_lang->{error}->{serverdatabaseusernameinvalid},
12898 "serverdatabaseusernametoolong" => $kiriwrite_lang->{error}->{serverdatabaseusernametoolong},
12899 "serverdatabasepasswordtoolong" => $kiriwrite_lang->{error}->{serverdatabasepasswordtoolong},
12900 "serverdatabasetableprefixinvalid" => $kiriwrite_lang->{error}->{serverdatabasetableprefixinvalid},
12901 "serverdatabasetableprefixtoolong" => $kiriwrite_lang->{error}->{serverdatabasetableprefixtoolong},
12902 "serverportnumberinvalid" => $kiriwrite_lang->{error}->{serverportnumberinvalid},
12903 "serverportnumberinvalidcharacters" => $kiriwrite_lang->{error}->{serverportnumberinvalidcharacters},
12904 "serverportnumbertoolong" => $kiriwrite_lang->{error}->{serverportnumbertoolong},
12905 "serverprotocolnametoolong" => $kiriwrite_lang->{error}->{serverprotocolnametoolong},
12906 "serverprotocolinvalid" => $kiriwrite_lang->{error}->{serverprotocolinvalid},
12907 "templatenameblank" => $kiriwrite_lang->{error}->{templatenameblank},
12908 "templatefilenameexists" => $kiriwrite_lang->{error}->{templatefilenameexists},
12909 "templatefilenameinvalid" => $kiriwrite_lang->{error}->{templatefilenameinvalid},
12910 "templatedatabaseerror" => $kiriwrite_lang->{error}->{templatedatabaseerror},
12911 "templatedatabaseinvalidpermissions" => $kiriwrite_lang->{error}->{templatedatabaseinvalidpermissions},
12912 "templatedatabaseinvalidformat" => $kiriwrite_lang->{error}->{templatedatabaseinvalidformat},
12913 "templatedirectoryblank" => $kiriwrite_lang->{error}->{templatedirectoryblank},
12914 "templatedirectoryinvalid" => $kiriwrite_lang->{error}->{templatedirectoryinvalid},
12915 "templatedatabasenotcreated" => $kiriwrite_lang->{error}->{templatedatabasenotcreated},
12916 "templatefilenametoolong" => $kiriwrite_lang->{error}->{templatefilenametoolong},
12917 "templatenametoolong" => $kiriwrite_lang->{error}->{templatenametoolong},
12918 "templatedescriptiontoolong" => $kiriwrite_lang->{error}->{templatedescriptiontoolong},
12919 "templatedatabasemissing" => $kiriwrite_lang->{error}->{templatedatabasemissing},
12920 "templatedoesnotexist" => $kiriwrite_lang->{error}->{templatedoesnotexist},
12921 "templatefilenameblank" => $kiriwrite_lang->{error}->{templatefilenameblank},
12925 # Check if the specified error is blank and if it is
12926 # use the generic error messsage.
12928 if (!$kiriwrite_error{$error_type}){
12929 $error_type = "generic";
12932 $kiriwrite_presmodule->clear();
12934 $kiriwrite_presmodule->startbox("errorbox");
12935 $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{error}, { Style => "errorheader" });
12936 $kiriwrite_presmodule->addlinebreak();
12937 $kiriwrite_presmodule->addtext($kiriwrite_error{$error_type}, { Style => "errortext" });
12939 # Check to see if extended error information was passed.
12941 if ($error_extended){
12943 # Write the extended error information.
12945 $kiriwrite_presmodule->addlinebreak();
12946 $kiriwrite_presmodule->addlinebreak();
12947 $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{extendederror});
12948 $kiriwrite_presmodule->addlinebreak();
12949 $kiriwrite_presmodule->addlinebreak();
12950 $kiriwrite_presmodule->startbox("datalist");
12951 $kiriwrite_presmodule->addtext($error_extended);
12952 $kiriwrite_presmodule->endbox();
12956 $kiriwrite_presmodule->endbox();
12958 kiriwrite_output_header;
12959 kiriwrite_output_page($kiriwrite_lang->{error}->{error}, $kiriwrite_presmodule->grab(), "none");
12965 sub kiriwrite_fileexists{
12966 #################################################################################
12967 # kiriwrite_fileexists: Check if a file exists and returns a value depending on #
12968 # if the file exists or not. #
12972 # kiriwrite_fileexists(filename); #
12974 # filename Specifies the file name to check if it exists or not. #
12975 #################################################################################
12977 # Get the value that was passed to the subroutine.
12979 my ($filename) = @_;
12981 # Check if the filename exists, if it does, return a value of 0, else
12982 # return a value of 1, meaning that the file was not found.
12986 # Specified file does exist so return a value of 0.
12992 # Specified file does not exist so return a value of 1.
13000 sub kiriwrite_filepermissions{
13001 #################################################################################
13002 # kiriwrite_filepermissions: Check if the file permissions of a file and return #
13003 # either a 1 saying that the permissions are valid or return a 0 saying that #
13004 # the permissions are invalid. #
13008 # kiriwrite_filepermissions(filename, [read], [write], [filemissingskip]); #
13010 # filename Specifies the filename to check for permissions. #
13011 # read Preform check that the file is readable. #
13012 # write Preform check that the file is writeable. #
13013 # filemissingskip Skip the check of seeing if it can read or write if the #
13014 # file is missing. #
13015 #################################################################################
13017 # Get the values that was passed to the subroutine.
13019 my ($filename, $readpermission, $writepermission, $ignorechecks) = @_;
13021 # Check to make sure that the read permission and write permission values
13022 # are only 1 character long.
13024 kiriwrite_variablecheck($readpermission, "maxlength", 1, 0);
13025 kiriwrite_variablecheck($writepermission, "maxlength", 1, 0);
13026 kiriwrite_variablecheck($ignorechecks, "maxlength", 1, 0);
13028 my $ignorechecks_result = 0;
13030 # Check if the file should be ignored for read and write checking if
13031 # it doesn't exist.
13033 if ($ignorechecks){
13037 # The file exists so the checks are to be done.
13039 $ignorechecks_result = 0;
13043 # The file does not exist so the checks don't need to
13044 # be done to prevent false positives.
13046 $ignorechecks_result = 1;
13052 $ignorechecks_result = 0;
13056 # Check if the file should be checked to see if it can be read.
13058 if ($readpermission && $ignorechecks_result eq 0){
13060 # The file should be checked to see if it does contain read permissions
13061 # and return a 0 if it is invalid.
13065 # The file is readable, so do nothing.
13069 # The file is not readable, so return 1.
13077 # Check if the file should be checked to see if it can be written.
13079 if ($writepermission && $ignorechecks_result eq 0){
13081 # The file should be checked to see if it does contain write permissions
13082 # and return a 0 if it is invalid.
13086 # The file is writeable, so do nothing.
13090 # The file is not writeable, so return 1.
13098 # No problems have occured, so return 0.
13104 sub kiriwrite_utf8convert{
13105 #################################################################################
13106 # kiriwrite_utf8convert: Properly converts values into UTF-8 values. #
13110 # utfstring # The UTF-8 string to convert. #
13111 #################################################################################
13113 # Get the values passed to the subroutine.
13115 my ($utfstring) = @_;
13117 # Load the Encode perl module.
13119 use Encode qw(decode_utf8);
13121 # Convert the string.
13123 my $finalutf8 = Encode::decode_utf8( $utfstring );
13129 sub kiriwrite_critical{
13130 #################################################################################
13131 # kiriwrite_critical: Displays an critical error message that cannot be #
13132 # normally by the kiriwrite_error subroutine. #
13136 # errortype Specifies the type of critical error that has occured. #
13137 #################################################################################
13139 # Get the value that was passed to the subroutine.
13141 my ($error_type) = @_;
13145 # Get the error type from the errortype string.
13149 # Generic critical error message.
13151 "generic" => "A critical error has occured but the error is not known to Kiriwrite.",
13153 # Specific critical error messages.
13155 "configfilemissing" => "The Kiriwrite configuration file is missing! Running the installer script for Kiriwrite is recommended.",
13156 "configfileinvalidpermissions" => "The Kiriwrite configuration file has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13157 "dbmodulemissing" => "The database module is missing! Running the installer script for Kiriwrite is recommended.",
13158 "dbmoduleinvalidpermissions" => "The database module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13159 "dbmoduleinvalid" => "The database module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13160 "invalidvalue" => "An invalid value was passed.",
13161 "languagefilenameblank" => "The language filename given is blank! Running the installer script for Kiriwrite is recommended.",
13162 "languagefilenameinvalid" => "The language filename given is invalid! Running the installer script for Kiriwrite is recommended.",
13163 "languagefilemissing" => "The language filename given does not exist. Running the installer script for Kiriwrite is recommended.",
13164 "languagefilenameinvalidpermissions" => "The language file with the filename given has invalid permissions set. Please set the valid permission settings for the language file.",
13165 "presmodulemissing" => "The presentation module is missing! Running the installer script for Kiriwrite is recommended.",
13166 "presmoduleinvalidpermissions" => "The presentation module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the presentation module.",
13167 "presmoduleinvalid" => "The presentation module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13170 if (!$error_list{$error_type}){
13172 $error_type = "generic";
13177 print "Critical Error: " . $error_list{$error_type};
13182 sub kiriwrite_output_page{
13183 #################################################################################
13184 # kiriwrite_output_page: Outputs the page to the browser/stdout/console. #
13188 # kiriwrite_output_page(pagetitle, pagedata, menutype); #
13190 # pagetitle Specifies the page title. #
13191 # pagedata Specifies the page data. #
13192 # menutype Prints out which menu to use. #
13193 #################################################################################
13195 my ($pagetitle, $pagedata, $menutype) = @_;
13197 # Open the script page template and load it into the scriptpage variable,
13198 # while declaring the variable.
13200 open (my $filehandle_scriptpage, "<:utf8", 'page.html');
13201 my @scriptpage = <$filehandle_scriptpage>;
13202 binmode $filehandle_scriptpage, ':utf8';
13203 close ($filehandle_scriptpage);
13205 # Define the variables required.
13207 my $scriptpageline = "";
13208 my $pageoutput = "";
13209 my $menuoutput = "";
13211 $kiriwrite_presmodule->clear();
13213 # Print out the main menu for Kiriwrite.
13215 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{menu}->{viewdatabases} });
13216 $kiriwrite_presmodule->addtext(" | ");
13217 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page", { Text => $kiriwrite_lang->{menu}->{viewpages} });
13218 $kiriwrite_presmodule->addtext(" | ");
13219 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{menu}->{viewfilters} });
13220 $kiriwrite_presmodule->addtext(" | ");
13221 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{menu}->{viewtemplates} });
13222 $kiriwrite_presmodule->addtext(" | ");
13223 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{menu}->{compilepages} });
13224 $kiriwrite_presmodule->addtext(" | ");
13225 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{menu}->{viewsettings} });
13226 $kiriwrite_presmodule->addlinebreak();
13228 # Check what menu is going to be printed along with the default 'top' menu.
13230 if ($menutype eq "database"){
13232 # If the menu type is database then print out the database sub-menu.
13234 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{database}->{submenu}->{viewdatabases} });
13235 $kiriwrite_presmodule->addtext(" | ");
13236 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=new", { Text => $kiriwrite_lang->{database}->{submenu}->{adddatabase} });
13238 } elsif ($menutype eq "pages"){
13239 # If the menu type is pages then print out the pages sub-menu.
13241 # First, fetch the database name from the HTTP query string.
13243 my $query = new CGI;
13244 my $db_filename = $query->param('database');
13246 # Check if a value has been placed in the db_filename string.
13248 if (!$db_filename){
13250 # As the database filename is blank, don't add an option to add a page.
13254 # A database file has been specified so add an option to add a page to
13255 # the selected database.
13257 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page&action=add&database=" . $db_filename, { Text => $kiriwrite_lang->{pages}->{submenu}->{addpage} });
13261 } elsif ($menutype eq "filter"){
13263 # If the menu type is filters then print out the filter sub-menu.
13265 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{submenu}->{showfilters} });
13266 $kiriwrite_presmodule->addtext(" | ");
13267 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter&action=add", { Text => $kiriwrite_lang->{filter}->{submenu}->{addfilter} });
13269 } elsif ($menutype eq "settings"){
13271 # If the menu type is options then print out the options sub-menu.
13273 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{submenu}->{viewsettings} });
13274 $kiriwrite_presmodule->addtext(" | ");
13275 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings&action=edit", { Text => $kiriwrite_lang->{setting}->{submenu}->{editsettings} });
13277 } elsif ($menutype eq "template"){
13279 # If the menu type is template then print out the template sub-menu.
13281 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{template}->{submenu}->{showtemplates} });
13282 $kiriwrite_presmodule->addtext(" | ");
13283 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template&action=add", { Text => $kiriwrite_lang->{template}->{submenu}->{addtemplate} });
13285 } elsif ($menutype eq "compile"){
13287 # If the menu type is compile then print out the compile sub-menu.
13289 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{submenu}->{listdatabases} });
13290 $kiriwrite_presmodule->addtext(" | ");
13291 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=all", { Text => $kiriwrite_lang->{compile}->{submenu}->{compileall} });
13292 $kiriwrite_presmodule->addtext(" | ");
13293 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=clean", { Text => $kiriwrite_lang->{compile}->{submenu}->{cleanoutputdirectory} });
13297 $menuoutput = $kiriwrite_presmodule->grab();
13299 # Find <kiriwrite> tages and replace with the apporiate variables.
13301 foreach $scriptpageline (@scriptpage){
13303 $scriptpageline =~ s/<kiriwrite:menu>/$menuoutput/g;
13304 $scriptpageline =~ s/<kiriwrite:imagespath>/$kiriwrite_config{"directory_noncgi_images"}/g;
13305 $scriptpageline =~ s/<kiriwrite:pagedata>/$pagedata/g;
13307 # Check if page title specified is blank, otherwise add a page title
13310 if ($pagetitle eq ""){
13311 $scriptpageline =~ s/<kiriwrite:title>//g;
13313 $scriptpageline =~ s/<kiriwrite:title>/ ($pagetitle)/g;
13318 # Append processed line to the pageoutput variable.
13320 $pageoutput = $pageoutput . $scriptpageline;
13324 binmode STDOUT, ':utf8';
13332 sub kiriwrite_output_xml{
13333 #################################################################################
13334 # kiriwrite_output_xml: Outputs several types of data to an XML file #
13338 # kiriwrite_output_xml(filename, type, settings); #
13340 # filename Specifies the filename of the XML file. #
13341 # type Specifies the type of the XML file to be written. #
13342 # settings Specifies the following settings in any order. #
13344 # Settings for Kiriwrite configuration files: #
13346 # DatabaseDirectory Specifies the new database directory to use. #
13347 # OutputDirectory Specifies the new output directory to use. #
13348 # ImagesURIPath Specifies the new URI path for images. #
13349 # DateTimeFormat Specifies the new date and time format. #
13350 # SystemLanguage Specifies the new language to use for Kiriwrite. #
13351 # PrsentationModule Specifies the new presentation module to use for #
13353 # DatabaseModule Specifies the new database module to use for Kiriwrite. #
13354 # DatabaseServer Specifies the database server to use. #
13355 # DaravasePort Specifies the port the database server is running on. #
13356 # DatabaseProtocol Specifies the protocol the database server is using. #
13357 # DatabaseSQLDatabase Specifies the SQL database name to use. #
13358 # DatabaseUsername Specifies the database server username. #
13359 # DatabasePassword Specifies the password for the database server username.#
13360 # DatabaseTablePrefix Specifies the table prefix to use. #
13361 #################################################################################
13363 # Get the variables passed from the subroutine.
13365 my $xml_filename = shift;
13366 my $xml_type = shift;
13367 my ($passedsettings) = @_;
13369 # Check if filename is blank, if it is then return an error.
13371 if ($xml_filename eq ""){
13372 # Filename is blank, return an error.
13373 kiriwrite_error("blankfilename");
13376 # Validate the XML filename to make sure nothing supicious is being passed.
13378 kiriwrite_variablecheck($xml_filename, "maxlength", 64, 0);
13379 kiriwrite_variablecheck($xml_filename, "filename", "", 0);
13381 # Check what type of XML data to output.
13383 if ($xml_type eq "config") {
13385 # The type of XML data to output is a Kiriwrite configuration file.
13387 # Get the data from the hash.
13389 my $settings_databasedir = $passedsettings->{"DatabaseDirectory"};
13390 my $settings_outputdir = $passedsettings->{"OutputDirectory"};
13391 my $settings_imagesuri = $passedsettings->{"ImagesURIPath"};
13392 my $settings_datetime = $passedsettings->{"DateTimeFormat"};
13393 my $settings_systemlanguage = $passedsettings->{"SystemLanguage"};
13394 my $settings_presmodule = $passedsettings->{"PresentationModule"};
13395 my $settings_dbmodule = $passedsettings->{"DatabaseModule"};
13397 my $settings_database_server = $passedsettings->{"DatabaseServer"};
13398 my $settings_database_port = $passedsettings->{"DatabasePort"};
13399 my $settings_database_protocol = $passedsettings->{"DatabaseProtocol"};
13400 my $settings_database_sqldatabase = $passedsettings->{"DatabaseSQLDatabase"};
13401 my $settings_database_username = $passedsettings->{"DatabaseUsername"};
13402 my $settings_database_password = $passedsettings->{"DatabasePassword"};
13403 my $settings_database_tableprefix = $passedsettings->{"DatabaseTablePrefix"};
13405 # Convert the password to make sure it can be read properly.
13407 if ($settings_database_password){
13409 $settings_database_password =~ s/\0//g;
13410 $settings_database_password =~ s/</</g;
13411 $settings_database_password =~ s/>/>/g;
13415 # Convert the less than and greater than characters are there and
13418 if ($settings_imagesuri){
13420 $settings_imagesuri =~ s/</</g;
13421 $settings_imagesuri =~ s/>/>/g;
13425 # Check if the database password value is undefined and if it is then
13428 if (!$settings_database_password){
13430 $settings_database_password = "";
13434 # Create the XML data layout.
13436 my $xmldata = "<?xml version=\"1.0\"?>\r\n\r\n<kiriwrite-config>\r\n";
13438 $xmldata = $xmldata . "<!-- This file was automatically generated by Kiriwrite, please feel free to edit to your own needs. -->\r\n";
13439 $xmldata = $xmldata . "\t<settings>\r\n\t\t<directories>\r\n";
13441 $xmldata = $xmldata . "\t\t\t<database>" . $settings_databasedir . "</database>\r\n";
13442 $xmldata = $xmldata . "\t\t\t<output>" . $settings_outputdir . "</output>\r\n";
13443 $xmldata = $xmldata . "\t\t\t<images>" . $settings_imagesuri . "</images>\r\n";
13444 $xmldata = $xmldata . "\t\t</directories>\r\n";
13446 $xmldata = $xmldata . "\t\t<language>\r\n";
13447 $xmldata = $xmldata . "\t\t\t<lang>" . $settings_systemlanguage . "</lang>\r\n";
13448 $xmldata = $xmldata . "\t\t</language>\r\n";
13450 $xmldata = $xmldata . "\t\t<system>\r\n";
13451 $xmldata = $xmldata . "\t\t\t<presentation>" . $settings_presmodule . "</presentation>\r\n";
13452 $xmldata = $xmldata . "\t\t\t<database>" . $settings_dbmodule . "</database>\r\n";
13453 $xmldata = $xmldata . "\t\t\t<datetime>" . $settings_datetime . "</datetime>\r\n";
13454 $xmldata = $xmldata . "\t\t</system>\r\n";
13456 $xmldata = $xmldata . "\t\t<database>\r\n";
13457 $xmldata = $xmldata . "\t\t\t<server>" . $settings_database_server . "</server>\r\n";
13458 $xmldata = $xmldata . "\t\t\t<port>" . $settings_database_port . "</port>\r\n";
13459 $xmldata = $xmldata . "\t\t\t<protocol>" . $settings_database_protocol . "</protocol>\r\n";
13460 $xmldata = $xmldata . "\t\t\t<database>" . $settings_database_sqldatabase . "</database>\r\n";
13461 $xmldata = $xmldata . "\t\t\t<username>" . $settings_database_username . "</username>\r\n";
13462 $xmldata = $xmldata . "\t\t\t<password>" . $settings_database_password . "</password>\r\n";
13463 $xmldata = $xmldata . "\t\t\t<prefix>" . $settings_database_tableprefix . "</prefix>\r\n";
13464 $xmldata = $xmldata . "\t\t</database>\r\n";
13466 $xmldata = $xmldata . "\t</settings>\r\n";
13468 $xmldata = $xmldata . "</kiriwrite-config>";
13470 # Open the Kiriwrite XML configuration file and write the new settings to the
13471 # configuration file.
13473 open(my $filehandle_xmlconfig, "> ", "kiriwrite.xml");
13474 print $filehandle_xmlconfig $xmldata;
13475 close($filehandle_xmlconfig);
13479 # The type of XML data is something else that is not supported by
13480 # Kiriwrite, so return an error.
13482 kiriwrite_error("invalidoption");
13490 #################################################################################
13491 # End listing the functions needed. #
13492 #################################################################################
13494 #################################################################################
13495 # Begin proper script execution. #
13496 #################################################################################
13498 kiriwrite_settings_load; # Load the configuration options.
13500 my $query = new CGI; # Easily fetch variables from the HTTP string.
13504 # Check if a mode has been specified and if a mode has been specified, continue
13505 # and work out what mode has been specified.
13507 if ($query->param('mode')){
13508 my $http_query_mode = $query->param('mode');
13510 if ($http_query_mode eq "db"){
13512 # If mode is 'db' (database), then check what action is required.
13514 if ($query->param('action')){
13515 # An action has been specified, so find out what action has been specified.
13517 my $http_query_action = $query->param('action');
13519 if ($http_query_action eq "edit"){
13520 # The edit action (which mean edit the settings for the selected database) has been specified,
13521 # get the database name and check if the action to edit an database has been confirmed.
13523 if ($query->param('database')){
13524 # If there is a value in the database variable check if it is a valid database. Otherwise,
13527 my $http_query_database = $query->param('database');
13529 # Check if a value for confirm has been specified, if there is, check if it is the correct
13530 # value, otherwise return an error.
13532 if ($query->param('confirm')){
13533 # A value for confirm has been specified, find out what value it is. If the value is correct
13534 # then edit the database settings, otherwise return an error.
13536 my $http_query_confirm = $query->param('confirm');
13538 if ($http_query_confirm eq 1){
13539 # Value is correct, collect the variables to pass onto the database variable.
13541 # Get the variables from the HTTP query.
13543 my $newdatabasename = $query->param('databasename');
13544 my $newdatabasedescription = $query->param('databasedescription');
13545 my $newdatabasefilename = $query->param('databasefilename');
13546 my $databaseshortname = $query->param('database');
13547 my $databasenotes = $query->param('databasenotes');
13548 my $databasecategories = $query->param('databasecategories');
13550 # Check the permissions of the database configuration file and return
13551 # an error if the database permissions are invalid.
13553 # Pass the variables to the database editing subroutine.
13555 my $pagedata = kiriwrite_database_edit($databaseshortname, $newdatabasefilename, $newdatabasename, $newdatabasedescription, $databasenotes, $databasecategories, 1);
13557 kiriwrite_output_header;
13558 kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13562 # Value is incorrect, return and error.
13563 kiriwrite_error("invalidvariable");
13568 # Display the form for editing an database.
13569 my $pagedata = kiriwrite_database_edit($http_query_database);
13571 kiriwrite_output_header;
13572 kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13577 # If there is no value in the database variable, then return an error.
13578 kiriwrite_error("invalidvariable");
13582 } elsif ($http_query_action eq "delete"){
13584 # Action equested is to delete a database, find out if the user has already confirmed deletion of the database
13585 # and if the deletion of the database has been confirmed, delete the database.
13587 if ($query->param('confirm')){
13589 # User has confirmed to delete a database, pass the parameters to the kiriwrite_database_delete
13592 my $database_filename = $query->param('database');
13593 my $database_confirm = $query->param('confirm');
13594 my $pagedata = kiriwrite_database_delete($database_filename, $database_confirm);
13596 kiriwrite_output_header;
13597 kiriwrite_output_page($kiriwrite_lang->{database}->{deleteddatabase}, $pagedata, "database");
13603 # User has clicked on the delete link (thus hasn't confirmed the action to delete a database).
13605 my $database_filename = $query->param('database');
13606 my $pagedata = kiriwrite_database_delete($database_filename);
13608 kiriwrite_output_header;
13609 kiriwrite_output_page($kiriwrite_lang->{database}->{deletedatabase}, $pagedata, "database");
13613 } elsif ($http_query_action eq "new"){
13615 # Action requested is to create a new database, find out if the user has already entered the information needed
13616 # to create a database and see if the user has confirmed the action, otherwise printout a form for adding a
13619 my $http_query_confirm = $query->param('confirm');
13621 # Check if the confirm value is correct.
13623 if ($http_query_confirm){
13624 if ($http_query_confirm eq 1){
13626 # User has confirmed to create a database, pass the parameters to the
13627 # kiriwrite_database_add subroutine.
13629 my $http_query_confirm = $query->param('confirm');
13631 my $database_name = $query->param('databasename');
13632 my $database_description = $query->param('databasedescription');
13633 my $database_filename = $query->param('databasefilename');
13634 my $database_notes = $query->param('databasenotes');
13635 my $database_categories = $query->param('databasecategories');
13637 my $pagedata = kiriwrite_database_add($database_filename, $database_name, $database_description, $database_notes, $database_categories, $http_query_confirm);
13639 kiriwrite_output_header;
13640 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13645 # The confirm value is something else other than 1 (which it shouldn't be), so
13651 # User has clicked on the 'Add Database' link.
13653 my $pagedata = kiriwrite_database_add;
13655 kiriwrite_output_header;
13656 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13660 # Another option has been specified, so return an error.
13662 kiriwrite_error("invalidaction");
13666 # No action has been specified, do the default action of displaying a list
13669 my $pagedata = kiriwrite_database_list;
13671 kiriwrite_output_header; # Output the header to browser/console/stdout.
13672 kiriwrite_output_page("", $pagedata, "database"); # Output the page to browser/console/stdout.
13673 exit; # End the script.
13675 } elsif ($http_query_mode eq "page"){
13677 # If mode is 'page', then check what action is required.
13679 if ($query->param('action')){
13680 my $http_query_action = $query->param('action');
13682 # Check if the action requested matches with one of the options below. If it does,
13683 # go to that section, otherwise return an error.
13685 if ($http_query_action eq "view"){
13687 # The action selected was to view pages from a database,
13689 my $database_name = $query->param('database');
13690 my $pagedata = kiriwrite_page_list($database_name);
13692 kiriwrite_output_header; # Output the header to browser/console/stdout.
13693 kiriwrite_output_page($kiriwrite_lang->{pages}->{viewingdatabase}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13694 exit; # End the script.
13696 } elsif ($http_query_action eq "add"){
13698 # The action selected was to add a page to the selected database.
13700 my $http_query_confirm = $query->param('confirm');
13702 if (!$http_query_confirm){
13704 $http_query_confirm = 0;
13708 if ($http_query_confirm eq 1){
13710 my $http_query_database = $query->param('database');
13711 my $http_query_filename = $query->param('pagefilename');
13712 my $http_query_name = $query->param('pagename');
13713 my $http_query_description = $query->param('pagedescription');
13714 my $http_query_section = $query->param('pagesection');
13715 my $http_query_template = $query->param('pagetemplate');
13716 my $http_query_settings = $query->param('pagesettings');
13717 my $http_query_content = $query->param('pagecontent');
13719 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);
13721 kiriwrite_output_header; # Output the header to browser/console/stdout.
13722 kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13723 exit; # End the script.
13727 my $http_query_database = $query->param('database');
13728 my $pagedata = kiriwrite_page_add($http_query_database);
13730 kiriwrite_output_header; # Output the header to browser/console/stdout.
13731 kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13732 exit; # End the script.
13734 } elsif ($http_query_action eq "edit"){
13736 # The action selected was to edit a page from a database.
13738 my $http_query_confirm = $query->param('confirm');
13740 if (!$http_query_confirm){
13742 $http_query_confirm = 0;
13746 if ($http_query_confirm eq 1){
13748 # Get the needed values from the HTTP query.
13750 my $http_query_database = $query->param('database');
13751 my $http_query_filename = $query->param('page');
13752 my $http_query_newfilename = $query->param('pagefilename');
13753 my $http_query_name = $query->param('pagename');
13754 my $http_query_description = $query->param('pagedescription');
13755 my $http_query_section = $query->param('pagesection');
13756 my $http_query_template = $query->param('pagetemplate');
13757 my $http_query_settings = $query->param('pagesettings');
13758 my $http_query_content = $query->param('pagecontent');
13760 # Pass the values to the editing pages subroutine.
13762 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);
13764 kiriwrite_output_header; # Output the header to browser/console/stdout.
13765 kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13766 exit; # End the script.
13770 # Get the needed values from the HTTP query.
13772 my $http_query_database = $query->param('database');
13773 my $http_query_filename = $query->param('page');
13775 # Pass the values to the editing pages subroutine.
13777 my $pagedata = kiriwrite_page_edit($http_query_database, $http_query_filename);
13779 kiriwrite_output_header; # Output the header to browser/console/stdout.
13780 kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13781 exit; # End the script.
13784 } elsif ($http_query_action eq "delete"){
13786 # The action selected was to delete a page from a database.
13788 my $http_query_database = $query->param('database');
13789 my $http_query_page = $query->param('page');
13790 my $http_query_confirm = $query->param('confirm');
13793 my $selectionlist = "";
13795 if ($http_query_confirm){
13797 # The action has been confirmed, so try to delete the selected page
13798 # from the database.
13800 $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page, $http_query_confirm);
13802 kiriwrite_output_header; # Output the header to browser/console/stdout.
13803 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13804 exit; # End the script.
13808 $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page);
13810 kiriwrite_output_header; # Output the header to browser/console/stdout.
13811 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13812 exit; # End the script.
13815 } elsif ($http_query_action eq "multidelete"){
13817 # The action selected was to delete multiple pages from a
13820 my $http_query_database = $query->param('database');
13821 my $http_query_confirm = $query->param('confirm');
13826 if ($http_query_confirm){
13828 # The action to delete multiple pages from the selected
13829 # database has been confirmed.
13831 @filelist = kiriwrite_selectedlist();
13832 $pagedata = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13834 kiriwrite_output_header; # Output the header to browser/console/stdout.
13835 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13836 exit; # End the script.
13840 # Get the list of selected pages and pass them to the
13841 # multiple page delete subroutine.
13843 @filelist = kiriwrite_selectedlist();
13844 $pagedata = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13846 kiriwrite_output_header; # Output the header to browser/console/stdout.
13847 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13848 exit; # End the script.
13850 } elsif ($http_query_action eq "multimove"){
13852 # The action selected was to move multiple pages from a
13855 my $http_query_database = $query->param('database');
13856 my $http_query_newdatabase = $query->param('newdatabase');
13857 my $http_query_confirm = $query->param('confirm');
13862 if ($http_query_confirm){
13864 # The action to move multiple pages from the selected
13865 # database has been confirmed.
13867 @filelist = kiriwrite_selectedlist();
13868 $pagedata = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13870 kiriwrite_output_header; # Output the header to browser/console/stdout.
13871 kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13872 exit; # End the script.
13876 # Get the list of selected pages and pass them to the
13877 # multiple page move subroutine.
13879 @filelist = kiriwrite_selectedlist();
13880 $pagedata = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13882 kiriwrite_output_header; # Output the header to browser/console/stdout.
13883 kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13884 exit; # End the script.
13886 } elsif ($http_query_action eq "multicopy"){
13888 # The action selected was to copy multiple pages from a
13891 my $http_query_database = $query->param('database');
13892 my $http_query_newdatabase = $query->param('newdatabase');
13893 my $http_query_confirm = $query->param('confirm');
13898 if ($http_query_confirm){
13900 # The action to copy multiple pages from the selected
13901 # database has been confirmed.
13903 @filelist = kiriwrite_selectedlist();
13904 $pagedata = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13906 kiriwrite_output_header; # Output the header to browser/console/stdout.
13907 kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13908 exit; # End the script.
13912 # Get the list of selected pages and pass them to the
13913 # multiple page copy subroutine.
13915 @filelist = kiriwrite_selectedlist();
13916 $pagedata = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13918 kiriwrite_output_header; # Output the header to browser/console/stdout.
13919 kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13920 exit; # End the script.
13922 } elsif ($http_query_action eq "multiedit"){
13924 # The action selected was to edit multiple pages from a
13927 my $http_query_database = $query->param('database');
13928 my $http_query_newsection = $query->param('newsection');
13929 my $http_query_altersection = $query->param('altersection');
13930 my $http_query_newtemplate = $query->param('newtemplate');
13931 my $http_query_altertemplate = $query->param('altertemplate');
13932 my $http_query_newsettings = $query->param('newsettings');
13933 my $http_query_altersettings = $query->param('altersettings');
13934 my $http_query_confirm = $query->param('confirm');
13939 if (!$http_query_confirm){
13941 @filelist = kiriwrite_selectedlist();
13942 $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);
13944 kiriwrite_output_header; # Output the header to browser/console/stdout.
13945 kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13950 # Get the list of selected pages and pass them to the
13951 # multiple page edit subroutine.
13953 @filelist = kiriwrite_selectedlist();
13954 $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);
13956 kiriwrite_output_header; # Output the header to browser/console/stdout.
13957 kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13958 exit; # End the script.
13961 kiriwrite_error("invalidaction");
13966 # If there the action option is left blank, then print out a form where the database
13967 # can be selected to view pages from.
13969 my $pagedata = kiriwrite_page_list;
13971 kiriwrite_output_header; # Output the header to browser/console/stdout.
13972 kiriwrite_output_page($kiriwrite_lang->{pages}->{databaseselecttitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13973 exit; # End the script.
13977 # No action has been specified, do the default action of listing pages from
13978 # the first database found in the directory.
13980 } elsif ($http_query_mode eq "filter"){
13982 # If there's a value for action in the HTTP query, then
13983 # get that value that is in the HTTP query.
13985 if ($query->param('action')){
13987 # There is a value for action in the HTTP query,
13988 # so get the value from it.
13990 my $http_query_action = $query->param('action');
13992 if ($http_query_action eq "add"){
13994 # The action the user requested is to add a filter to the
13997 # Check if there is a value in confirm and if there is
13998 # then pass it on to the new find and replace words
13999 # to add to the filter database.
14001 my $http_query_confirm = $query->param('confirm');
14003 if ($http_query_confirm){
14005 # There is a value in http_query_confirm, so pass on the
14006 # new find and replace words so that they can be added
14007 # to the filter database.
14009 my $http_query_findwords = $query->param('findword');
14010 my $http_query_replacewords = $query->param('replaceword');
14011 my $http_query_priority = $query->param('priority');
14012 my $http_query_notes = $query->param('notes');
14014 my $pagedata = kiriwrite_filter_add($http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
14016 kiriwrite_output_header; # Output the header to browser/console/stdout.
14017 kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14018 exit; # End the script.
14022 my $pagedata = kiriwrite_filter_add();
14024 kiriwrite_output_header; # Output the header to browser/console/stdout.
14025 kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14026 exit; # End the script.
14028 } elsif ($http_query_action eq "edit"){
14030 # The action the user requested is to edit an filter from
14031 # the filter database.
14033 my $http_query_number = $query->param('filter');
14034 my $http_query_confirm = $query->param('confirm');
14036 if ($http_query_confirm){
14038 # There is a value in http_query_confirm, so pass on the
14039 # new find and replace words so that the filter database
14042 my $http_query_findwords = $query->param('filterfind');
14043 my $http_query_replacewords = $query->param('filterreplace');
14044 my $http_query_priority = $query->param('priority');
14045 my $http_query_notes = $query->param('notes');
14047 my $pagedata = kiriwrite_filter_edit($http_query_number, $http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
14049 kiriwrite_output_header; # Output the header to browser/console/stdout.
14050 kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14051 exit; # End the script.
14055 my $pagedata = kiriwrite_filter_edit($http_query_number);
14057 kiriwrite_output_header; # Output the header to browser/console/stdout.
14058 kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14059 exit; # End the script.
14061 } elsif ($http_query_action eq "delete"){
14063 # The action the user requested is to delete an filter
14064 # from the filter database.
14066 my $http_query_number = $query->param('filter');
14067 my $http_query_confirm = $query->param('confirm');
14069 if ($http_query_confirm){
14071 my $pagedata = kiriwrite_filter_delete($http_query_number, $http_query_confirm);
14073 kiriwrite_output_header; # Output the header to browser/console/stdout.
14074 kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14075 exit; # End the script
14079 my $pagedata = kiriwrite_filter_delete($http_query_number);
14081 kiriwrite_output_header; # Output the header to browser/console/stdout.
14082 kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14083 exit; # End the script.
14087 # Another action was requested that was not one of
14088 # the ones prcedding this catch all, so return
14089 # an error saying that an invalid option was
14092 kiriwrite_error("invalidaction");
14098 my $pagedata = kiriwrite_filter_list();
14100 kiriwrite_output_header; # Output the header to browser/console/stdout.
14101 kiriwrite_output_page($kiriwrite_lang->{filter}->{viewfilters}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14102 exit; # End the script.
14108 } elsif ($http_query_mode eq "template"){
14110 # Check if an action has been specified in the HTTP query.
14112 if ($query->param('action')){
14114 # An action has been specified in the HTTP query.
14116 my $http_query_action = $query->param('action');
14118 if ($http_query_action eq "delete"){
14119 # Get the required parameters from the HTTP query.
14121 my $http_query_template = $query->param('template');
14122 my $http_query_confirm = $query->param('confirm');
14124 # Check if a value for confirm has been specified (it shouldn't)
14127 if (!$http_query_confirm){
14128 # The confirm parameter of the HTTP query is blank, so
14129 # write out a form asking the user to confirm the deletion
14130 # of the selected template.
14132 my $pagedata = kiriwrite_template_delete($http_query_template);
14134 kiriwrite_output_header; # Output the header to browser/console/stdout.
14135 kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14136 exit; # End the script.
14140 my $pagedata = kiriwrite_template_delete($http_query_template, $http_query_confirm);
14142 kiriwrite_output_header; # Output the header to browser/console/stdout.
14143 kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14144 exit; # End the script.
14148 } elsif ($http_query_action eq "add") {
14150 # Get the variables from the HTTP query in preperation for processing.
14152 my $http_query_confirm = $query->param('confirm');
14153 my $http_query_templatelayout = $query->param('templatelayout');
14154 my $http_query_templatename = $query->param('templatename');
14155 my $http_query_templatedescription = $query->param('templatedescription');
14156 my $http_query_templatefilename = $query->param('templatefilename');
14158 # Check if there is a confirmed value in the http_query_confirm variable.
14160 if (!$http_query_confirm){
14162 # Since there is no confirm value, print out a form for creating a new
14165 my $pagedata = kiriwrite_template_add();
14167 kiriwrite_output_header; # Output the header to browser/console/stdout.
14168 kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14169 exit; # End the script.
14173 # A value in the http_query_confirm value is specified, so pass the
14174 # variables onto the kiriwrite_template_add subroutine.
14176 my $pagedata = kiriwrite_template_add($http_query_templatefilename, $http_query_templatename, $http_query_templatedescription, $http_query_templatelayout, $http_query_confirm);
14178 kiriwrite_output_header; # Output the header to browser/console/stdout.
14179 kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14180 exit; # End the script.
14184 } elsif ($http_query_action eq "edit") {
14186 # Get the required parameters from the HTTP query.
14188 my $http_query_templatefile = $query->param('template');
14189 my $http_query_confirm = $query->param('confirm');
14191 # Check to see if http_query_confirm has a value of '1' in it and
14192 # if it does, edit the template using the settings providied.
14194 if (!$http_query_confirm){
14196 # Since there is no confirm value, open the template configuration
14197 # file and the template file itself then print out the data on to
14200 my $pagedata = kiriwrite_template_edit($http_query_templatefile);
14201 kiriwrite_output_header; # Output the header to browser/console/stdout.
14202 kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14203 exit; # End the script.
14205 } elsif ($http_query_confirm eq 1) {
14207 # Since there is a confirm value of 1, the user has confirm the
14208 # action of editing of a template so get the other variables
14209 # that were also sent and pass the variables to the subroutine.
14211 my $http_query_newfilename = $query->param('newfilename');
14212 my $http_query_newname = $query->param('newname');
14213 my $http_query_newdescription = $query->param('newdescription');
14214 my $http_query_newlayout = $query->param('newlayout');
14216 my $pagedata = kiriwrite_template_edit($http_query_templatefile, $http_query_newfilename, $http_query_newname, $http_query_newdescription, $http_query_newlayout, $http_query_confirm);
14217 kiriwrite_output_header; # Output the header to browser/console/stdout.
14218 kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14219 exit; # End the script.
14223 # Another confirm value is there instead of '0' or '1'. Return
14224 # an error saying it is invalid.
14226 kiriwrite_error("invalidvariable");
14232 # Another action was specified and was not one of the ones above, so
14235 kiriwrite_error("invalidaction");
14241 # If the action option is left blank, then print out a form where the list
14242 # of templates are available.
14244 my $pagedata = kiriwrite_template_list;
14246 kiriwrite_output_header; # Output the header to browser/console/stdout.
14247 kiriwrite_output_page($kiriwrite_lang->{template}->{viewtemplates}, $pagedata, "template"); # Output the page to browser/console/stdout.
14248 exit; # End the script.
14252 } elsif ($http_query_mode eq "compile"){
14254 # The mode selected is to compile pages from databases.
14256 # If the action option is left blank, then print out a form where the list
14257 # of databases to compile are available.
14259 if ($query->param('action')){
14261 my $http_query_action = $query->param('action');
14263 if ($http_query_action eq "compile"){
14265 # The specified action is to compile the pages, check if the
14266 # action to compile the page has been confirmed.
14268 my $http_query_confirm = $query->param('confirm');
14269 my $http_query_type = $query->param('type');
14271 # If it is blank, set the confirm value to 0.
14273 if (!$http_query_confirm){
14275 # The http_query_confirm variable is uninitalised, so place a
14276 # '0' (meaning an unconfirmed action).
14278 $http_query_confirm = 0;
14282 # If the compile type is blank then return an error.
14284 if (!$http_query_type){
14286 # Compile type is blank so return an error.
14288 kiriwrite_error("blankcompiletype");
14292 if ($http_query_type eq "multiple"){
14294 if ($http_query_confirm eq 1){
14296 # The action to compile the pages has been confirmed so
14297 # compile the pages.
14299 my @selectedlist = kiriwrite_selectedlist();
14300 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14302 kiriwrite_output_header; # Output the header to browser/console/stdout.
14303 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14304 exit; # End the script.
14308 # The action to compile the pages has not been confirmed
14309 # so write a form asking the user to confirm the action
14310 # of compiling the pages.
14312 my @selectedlist = kiriwrite_selectedlist();
14313 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14315 kiriwrite_output_header; # Output the header to browser/console/stdout.
14316 kiriwrite_output_page($kiriwrite_lang->{compile}->{compileselecteddatabases}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14317 exit; # End the script.
14321 } elsif ($http_query_type eq "single"){
14323 my $http_query_database = $query->param('database');
14325 $selectedlist[0] = $http_query_database;
14326 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14328 kiriwrite_output_header; # Output the header to browser/console/stdout.
14329 kiriwrite_output_page($kiriwrite_lang->{compile}->{compiledatabase}, $pagedata, "compile");
14330 exit; # End the script.
14334 kiriwrite_error("invalidcompiletype");
14338 } elsif ($http_query_action eq "all"){
14340 # The selected action is to compile all of the databases
14341 # in the database directory. Check if the action to
14342 # compile all of the databases has been confirmed.
14344 my $http_query_confirm = $query->param('confirm');
14346 if (!$http_query_confirm){
14348 # The http_query_confirm variable is uninitalised, so place a
14349 # '0' (meaning an unconfirmed action).
14351 $http_query_confirm = 0;
14355 if ($http_query_confirm eq 1){
14357 # The action to compile all the databases has been confirmed.
14361 my $pagedata = kiriwrite_compile_all();
14363 kiriwrite_output_header; # Output the header to browser/console/stdout.
14364 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilealldatabases}, $pagedata, "compile");
14367 } elsif ($http_query_action eq "clean") {
14369 # The selected action is to clean the output directory.
14370 # Check if the action to clean the output directory
14371 # has been confirmed.
14373 my $http_query_confirm = $query->param('confirm');
14375 if (!$http_query_confirm){
14377 # The http_query_confirm variable is uninitalised, so place a
14378 # '0' (meaning an unconfirmed action).
14380 $http_query_confirm = 0;
14384 if ($http_query_confirm eq 1){
14386 # The action to clean the output directory has been confirmed.
14388 my $pagedata = kiriwrite_compile_clean($http_query_confirm);
14390 kiriwrite_output_header; # Output the header to browser/console/stdout.
14391 kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14392 exit; # End the script.
14396 # The action to clean the output directory is not
14397 # confirmed, so write a page asking the user
14398 # to confirm cleaning the output directory.
14400 my $pagedata = kiriwrite_compile_clean();
14402 kiriwrite_output_header; # Output the header to browser/console/stdout.
14403 kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14404 exit; # End the script.
14408 # The action specified was something else other than those
14409 # above, so return an error.
14411 kiriwrite_error("invalidaction");
14416 my $pagedata = kiriwrite_compile_list;
14418 kiriwrite_output_header; # Output the header to browser/console/stdout.
14419 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14420 exit; # End the script.
14422 } elsif ($http_query_mode eq "settings"){
14424 # The mode selected is view (and change settings).
14426 # If the action value has been left blank, then view the list of
14427 # current settings.
14429 if ($query->param('action')){
14430 my $http_query_action = $query->param('action');
14432 if ($http_query_action eq "edit"){
14434 # The action specified is to edit the settings. Check if the action
14435 # to edit the settings has been confirmed.
14437 my $http_query_confirm = $query->param('confirm');
14439 if (!$http_query_confirm){
14441 # The confirm value is blank, so set it to 0.
14443 $http_query_confirm = 0;
14447 if ($http_query_confirm eq 1){
14449 # The action to edit the settings has been confirmed. Get the
14450 # required settings from the HTTP query.
14452 my $http_query_database = $query->param('databasedir');
14453 my $http_query_output = $query->param('outputdir');
14454 my $http_query_imagesuri = $query->param('imagesuripath');
14455 my $http_query_datetimeformat = $query->param('datetime');
14456 my $http_query_systemlanguage = $query->param('language');
14457 my $http_query_presmodule = $query->param('presmodule');
14458 my $http_query_dbmodule = $query->param('dbmodule');
14460 my $http_query_database_server = $query->param('database_server');
14461 my $http_query_database_port = $query->param('database_port');
14462 my $http_query_database_protocol = $query->param('database_protocol');
14463 my $http_query_database_sqldatabase = $query->param('database_sqldatabase');
14464 my $http_query_database_username = $query->param('database_username');
14465 my $http_query_database_passwordkeep = $query->param('database_password_keep');
14466 my $http_query_database_password = $query->param('database_password');
14467 my $http_query_database_tableprefix = $query->param('database_tableprefix');
14469 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 });
14471 kiriwrite_output_header; # Output the header to browser/console/stdout.
14472 kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings"); # Output the page to browser/console/stdout.
14473 exit; # End the script.
14477 # The action to edit the settings has not been confirmed.
14479 my $pagedata = kiriwrite_settings_edit;
14481 kiriwrite_output_header; # Output the header to browser/console/stdout.
14482 kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings"); # Output the page to browser/console/stdout.
14483 exit; # End the script.
14487 # The action specified was something else other than those
14488 # above, so return an error.
14490 kiriwrite_error("invalidaction");
14496 # No action has been specified, so print out the list of settings currently being used.
14498 my $pagedata = kiriwrite_settings_view;
14500 kiriwrite_output_header; # Output the header to browser/console/stdout.
14501 kiriwrite_output_page($kiriwrite_lang->{setting}->{viewsettings}, $pagedata, "settings"); # Output the page to browser/console/stdout.
14502 exit; # End the script.
14505 # Another mode has been specified than the ones above, so return an error saying that
14506 # an invalid option was specified.
14508 kiriwrite_error("invalidmode");
14513 # No mode has been specified, so print the default "first-run" view of the
14516 my $pagedata = kiriwrite_database_list;
14518 kiriwrite_output_header; # Output the header to browser/console/stdout.
14519 kiriwrite_output_page("", $pagedata, "database"); # Output the page to browser/console/stdout.
14520 exit; # End the script.
14532 Web-based webpage compiler.
14536 Steve Brokenshire <sbrokenshire@xestia.co.uk>
14540 This perl script is intended to be used on a web server which has CGI with Perl support or with mod_perl support.
14542 =head1 DOCUMENTATION
14544 For more information on how to use Kiriwrite, please see the documentation that was included with Kiriwrite.
14546 - From the Xestia Documentation website: http://documentation.xestia.co.uk and click on the Kiriwrite link on the page.
14548 - From the Documentation directory from the Kiriwrite source packages (.tar/.tar.gz/.tar.bz2).
14550 - In the /usr/share/doc/kiriwrite directory if you installed the distribution-specific packages (and also have access to the server itself).