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;
3163 my $olddatabase_database_handle;
3164 my $olddatabase_string_handle;
3165 my $olddatabase_name;
3166 my $newdatabase_database_handle;
3167 my $newdatabase_string_handle;
3168 my $newdatabase_name;
3173 my $page_filename_sql;
3176 my $page_description;
3177 my $page_description_sql;
3179 my $page_section_sql;
3181 my $page_template_sql;
3185 my $page_settings_sql;
3186 my $page_lastmodified;
3187 my $page_lastmodified_sql;
3190 my $warning_count = 0;
3194 tie(%copied_list, 'Tie::IxHash');
3195 tie(%warning_list, 'Tie::IxHash');
3197 # Get information about the database that the selected pages are moving from.
3199 my %olddatabase_info = $kiriwrite_dbmodule->getdatabaseinfo();
3201 # Check if any errors had occured while getting the database
3204 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3206 # A database error has occured so return an error and
3207 # also the extended error information.
3209 kiriwrite_error("oldcopydatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
3213 $olddatabase_name = $olddatabase_info{"DatabaseName"};
3215 # Get information about the database that the selected pages are moving to.
3217 my %newdatabase_info = $kiriwrite_dbmodule->getseconddatabaseinfo();
3219 # Check if any errors had occured while getting the database
3222 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3224 # A database error has occured so return an error and
3225 # also the extended error information.
3227 kiriwrite_error("newcopydatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
3231 $newdatabase_name = $newdatabase_info{"DatabaseName"};
3233 # Check if the database filename is valid and return an error if
3236 my $newpagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
3238 if ($newpagedatabase_filename_check eq 1){
3240 # The database filename is blank, so return an error.
3242 kiriwrite_error("blankdatabasepageadd");
3244 } elsif ($newpagedatabase_filename_check eq 2){
3246 # The database filename is invalid, so return an error.
3248 kiriwrite_error("databasefilenameinvalid");
3252 foreach $filename (@filelist){
3254 # Get the page information.
3256 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3258 # Check if any errors occured.
3260 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3262 # A database error has occured so return an error and
3263 # also the extended error information.
3265 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3269 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3271 # The page does not exist, so process the next page.
3273 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfrompageerror}, $filename);
3279 $kiriwrite_dbmodule->copypage({ PageFilename => $filename });
3281 # Check if any errors occured while copying the page.
3283 if ($kiriwrite_dbmodule->geterror eq "OldDatabaseError"){
3285 # A database error has occured while copying the pages from
3286 # the old database, so write a warning message.
3288 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfromdatabaseerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3292 } elsif ($kiriwrite_dbmodule->geterror eq "NewDatabaseError"){
3294 # A database error has occured while copying the pages to
3295 # the new database, so write a warning message.
3297 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopytodatabaseerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3301 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3303 # The page with the filename given in the database that
3304 # the page is to be copied from doesn't exist so write
3305 # a warning message.
3307 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfrompagenotexist}, $filename);
3311 } elsif ($kiriwrite_dbmodule->geterror eq "PageAlreadyExists"){
3313 # The page with the filename given in the database that
3314 # the page is to be copied to already exists so write a
3317 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopytopageexists}, $filename);
3323 # Append the copied page (filename and name) to the list of
3326 $copied_list{$page_seek}{Filename} = $filename;
3327 $copied_list{$page_seek}{Name} = $page_info{"PageName"};
3332 # Disconnect from the database server.
3334 $kiriwrite_dbmodule->disconnect();
3336 # Write out a message saying that the pages were moved (if any)
3337 # to the new database (and any warnings given).
3339 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypages}, { Style => "pageheader" });
3340 $kiriwrite_presmodule->addlinebreak();
3341 $kiriwrite_presmodule->addlinebreak();
3345 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{copypagesresultmessage}, $olddatabase_name, $newdatabase_name));
3346 $kiriwrite_presmodule->addlinebreak();
3347 $kiriwrite_presmodule->addlinebreak();
3348 $kiriwrite_presmodule->startbox("datalist");
3349 foreach $page (keys %copied_list){
3350 if (!$copied_list{$page}{Name}){
3351 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
3352 $kiriwrite_presmodule->addtext(" (" . $copied_list{$page}{Filename} . ")");
3354 $kiriwrite_presmodule->addtext($copied_list{$page}{Name} . " (" . $copied_list{$page}{Filename} . ")");
3356 $kiriwrite_presmodule->addlinebreak();
3358 $kiriwrite_presmodule->endbox();
3362 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagescopied}, $olddatabase_name, $newdatabase_name));
3368 $kiriwrite_presmodule->addlinebreak();
3369 $kiriwrite_presmodule->addlinebreak();
3370 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypageswarnings});
3371 $kiriwrite_presmodule->addlinebreak();
3372 $kiriwrite_presmodule->addlinebreak();
3373 $kiriwrite_presmodule->startbox("datalist");
3374 foreach $warning (keys %warning_list){
3375 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
3376 $kiriwrite_presmodule->addlinebreak();
3378 $kiriwrite_presmodule->endbox();
3382 $kiriwrite_presmodule->addlinebreak();
3383 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $olddatabase_name)});
3384 $kiriwrite_presmodule->addtext(" | ");
3385 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $newdatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{viewpagelist}, $newdatabase_name)});
3387 return $kiriwrite_presmodule->grab();
3389 } elsif ($confirm eq 0) {
3391 # The action to copy several pages from one database
3392 # to another has not been confirmed so write a form.
3394 # Connect to the database server.
3396 $kiriwrite_dbmodule->connect();
3398 # Check if any errors occured while connecting to the database server.
3400 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3402 # A database connection error has occured so return
3405 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3409 # Select the database to copy the pages from.
3411 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3413 # Check if any errors occured while selecting the database.
3415 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3417 # The database does not exist, so return an error.
3419 kiriwrite_error("databasemissingfile");
3421 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3423 # The database has invalid permissions set, so return
3426 kiriwrite_error("databaseinvalidpermissions");
3430 # Get information about the database.
3432 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3434 # Check if any errors had occured while getting the database
3437 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3439 # A database error has occured so return an error and
3440 # also the extended error information.
3442 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3446 my $database_name = $database_info{"DatabaseName"};
3448 # Define some values for later.
3462 tie(%copy_list, 'Tie::IxHash');
3463 tie(%db_list, 'Tie::IxHash');
3465 # Process each filename given.
3467 foreach $filename (@filelist){
3469 # Get the page information.
3471 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3473 # Check if any errors occured.
3475 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3477 # A database error has occured so return an error and
3478 # also the extended error information.
3480 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3482 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3484 # The page does not exist, so process the next page.
3490 # Add the page name and file name to the list of
3493 $copy_list{$pageseek}{Filename} = $page_info{"PageFilename"};
3494 $copy_list{$pageseek}{Name} = $page_info{"PageName"};
3496 # Increment the page seek counter.
3502 # Check if any pages exust and return an error if
3505 if ($pageseek eq 0){
3507 # None of the selected pages exist, so return
3510 kiriwrite_error("nopagesselected");
3514 # Get the database filenames and names.
3516 my @database_list = $kiriwrite_dbmodule->getdblist();
3518 # Check if any errors occured while trying to get the list of databases.
3520 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
3522 # The database directory is missing so return an error.
3524 kiriwrite_error("datadirectorymissing");
3526 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
3528 # The database directory has invalid permissions set so return
3531 kiriwrite_error("datadirectoryinvalidpermissions");
3535 # Process each database to get the database name.
3537 foreach $data_file (@database_list){
3539 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
3541 # Check if any errors occured while selecting the database.
3543 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3545 # The database does not exist, so process the next
3550 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3552 # The database has invalid permissions set, so process
3553 # the next database.
3559 # Get the database information.
3561 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3563 # Check if any errors had occured while getting the database
3566 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3568 # A database error has occured so process the next
3575 # Check if the database name is undefined and if it is
3576 # then set it blank.
3578 if (!$database_name){
3579 $database_name = "";
3582 # Append the database filename and name to the list of databases
3583 # to move the pages to.
3585 $db_list{$dbseek}{Filename} = $data_file;
3586 $db_list{$dbseek}{Name} = $database_info{"DatabaseName"};
3592 # Disconnect from the database server.
3594 $kiriwrite_dbmodule->disconnect();
3596 # Write out the form.
3598 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypages}, { Style => "pageheader" });
3599 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
3600 $kiriwrite_presmodule->startbox();
3601 $kiriwrite_presmodule->addhiddendata("mode", "page");
3602 $kiriwrite_presmodule->addhiddendata("action", "multicopy");
3603 $kiriwrite_presmodule->addhiddendata("database", $database);
3604 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
3605 $kiriwrite_presmodule->addhiddendata("confirm", 1);
3609 foreach $page (keys %copy_list){
3610 $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
3611 $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $copy_list{$page}{Filename});
3615 $kiriwrite_presmodule->addlinebreak();
3616 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{copypagesmessage}, $database_name));
3618 $kiriwrite_presmodule->addlinebreak();
3619 $kiriwrite_presmodule->addlinebreak();
3621 $kiriwrite_presmodule->startbox("datalist");
3623 foreach $page (keys %copy_list){
3624 if (!$copy_list{$page}{Name}){
3625 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
3626 $kiriwrite_presmodule->addtext(" (" . $copy_list{$page}{Filename} . ")");
3628 $kiriwrite_presmodule->addtext($copy_list{$page}{Name} . " (" . $copy_list{$page}{Filename} . ")");
3630 $kiriwrite_presmodule->addlinebreak();
3633 $kiriwrite_presmodule->endbox();
3635 $kiriwrite_presmodule->addlinebreak();
3637 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypagesto});
3638 $kiriwrite_presmodule->addselectbox("newdatabase");
3640 foreach $dbname (keys %db_list){
3641 $kiriwrite_presmodule->addoption($db_list{$dbname}{Name} . " (" . $db_list{$dbname}{Filename} . ")", { Value => $db_list{$dbname}{Filename}});
3644 $kiriwrite_presmodule->endselectbox();
3646 $kiriwrite_presmodule->addlinebreak();
3647 $kiriwrite_presmodule->addlinebreak();
3648 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{copypagesbutton});
3649 $kiriwrite_presmodule->addtext(" | ");
3650 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
3652 $kiriwrite_presmodule->endbox();
3653 $kiriwrite_presmodule->endform();
3655 return $kiriwrite_presmodule->grab();
3659 # The confirm value is other than 0 or 1, so return
3662 kiriwrite_error("invalidvariable");
3668 sub kiriwrite_page_multiedit{
3669 #################################################################################
3670 # kiriwrite_page_multiedit: Edit several pages from a database. #
3674 # kiriwrite_page_multiedit(database, newsection, altersection, newtemplate, #
3675 # altertemplate, newsettings, altersettings #
3676 # confirm, filelist); #
3678 # database Specifies the database to edit the pages from. #
3679 # newsection Specifies the new section name to use on the selected pages. #
3680 # altersection Specifies if the section name should be altered. #
3681 # newtemplate Specifies the new template filename to use on the selected #
3683 # altertemplate Specifies if the template filename should be altered. #
3684 # newsettings Specifies the new settings to use on the selected pages. #
3685 # altersettings Specifies if the settings should be altered. #
3686 # confirm Confirms the action to edit the selected pages. #
3687 # filelist The list of file names to edit. #
3688 #################################################################################
3690 # Get the values that were passed to the subroutine.
3692 my ($database, $newsection, $altersection, $newtemplate, $altertemplate, $newsettings, $altersettings, $confirm, @filelist) = @_;
3694 # Check if the file list is blank and return an error
3699 # The file list really is blank so return
3702 kiriwrite_error("nopagesselected");
3706 # Check if certain values are undefined and define them if
3709 if (!$altersection){
3711 # The alter section value is blank, so set it to
3714 $altersection = "off";
3718 if (!$altertemplate){
3720 # The alter template value is blank, so set it to
3723 $altertemplate = "off";
3727 if (!$altersettings){
3729 # The alter settings value is blank, so set it to
3732 $altersettings = "off";
3736 # Check if the database filename is valid and return an error if
3739 my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
3741 if ($pagedatabase_filename_check eq 1){
3743 # The database filename is blank, so return an error.
3745 kiriwrite_error("blankdatabasepageadd");
3747 } elsif ($pagedatabase_filename_check eq 2){
3749 # The database filename is invalid, so return an error.
3751 kiriwrite_error("databasefilenameinvalid");
3755 # Check if the confirm value is blank and if it is then
3756 # set the confirm value to 0.
3766 # The action to edit the template has been confirmed so
3767 # edit the selected pages.
3769 # Check the values recieved at UTF8 compliant before
3772 kiriwrite_variablecheck($newsection, "utf8", 0, 0);
3773 kiriwrite_variablecheck($newtemplate, "utf8", 0, 0);
3774 kiriwrite_variablecheck($newsettings, "utf8", 0, 0);
3776 # Convert the values into proper UTF8 values.
3778 $newsection = kiriwrite_utf8convert($newsection);
3779 $newtemplate = kiriwrite_utf8convert($newtemplate);
3780 $newsettings = kiriwrite_utf8convert($newsettings);
3782 # Check the length of the variables.
3784 kiriwrite_variablecheck($altersection, "maxlength", 3, 0);
3785 kiriwrite_variablecheck($altertemplate, "maxlength", 3, 0);
3786 kiriwrite_variablecheck($altersettings, "maxlength", 3, 0);
3787 my $newsection_maxlength_check = kiriwrite_variablecheck($newsection, "maxlength", 256, 1);
3788 my $newtemplate_maxlength_check = kiriwrite_variablecheck($newtemplate, "maxlength", 256, 1);
3789 my $newtemplate_filename_check = kiriwrite_variablecheck($newtemplate, "filename", 0, 1);
3790 my $newsettings_maxlength_check = kiriwrite_variablecheck($newsettings, "maxlength", 1, 1);
3791 my $newsettings_settings_check = kiriwrite_variablecheck($newsettings, "pagesetting", 0, 1);
3793 # Check the values and return an error if needed.
3795 if ($newsection_maxlength_check eq 1 && $altersection eq "on"){
3797 # The new section name is too long, so return an
3800 kiriwrite_error("pagesectiontoolong");
3804 if ($newtemplate_maxlength_check eq 1 && $altertemplate eq "on"){
3806 # The new template name is too long, so return an
3809 kiriwrite_error("templatefilenametoolong");
3813 # Check if the template filename is set to !skip or !none
3814 # and skip this check if it is.
3816 if ($newtemplate eq "!skip" || $newtemplate eq "!none"){
3818 # Skip this check as the template filename is
3822 if ($newtemplate_filename_check eq 1 && $altertemplate eq "on" || $newtemplate_filename_check eq 2 && $altertemplate eq "on"){
3824 # The new template filename is invalid, so return
3827 kiriwrite_error("templatefilenameinvalid");
3832 if ($newsettings_maxlength_check eq 1 && $altertemplate eq "on"){
3834 # The new settings value is too long, so return
3837 kiriwrite_error("pagesettingstoolong");
3841 if ($newsettings_settings_check eq 1 && $altersettings eq "on"){
3843 # The new settings value is invalid, so return
3846 kiriwrite_error("pagesettingsinvalid");
3850 # Define some values for later.
3862 my $warning_count = 0;
3864 tie(%edited_list, 'Tie::IxHash');
3865 tie(%warning_list, 'Tie::IxHash');
3867 # Check if the template filename is !skip and
3868 # set the alter template value to off if it
3871 if ($newtemplate eq "!skip"){
3873 $altertemplate = "off";
3877 # Check if all values are not selected and return
3878 # an error if they are.
3880 if ($altersection ne "on" && $altertemplate ne "on" && $altersettings ne "on"){
3882 # All values are not selected so return
3885 kiriwrite_error("noeditvaluesselected");
3889 # Connect to the database server.
3891 $kiriwrite_dbmodule->connect();
3893 # Check if any errors occured while connecting to the database server.
3895 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3897 # A database connection error has occured so return
3900 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3904 # Select the database.
3906 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3908 # Check if any errors occured while selecting the database.
3910 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3912 # The database does not exist, so return an error.
3914 kiriwrite_error("databasemissingfile");
3916 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3918 # The database has invalid permissions set, so return
3921 kiriwrite_error("databaseinvalidpermissions");
3925 # Check if the database has read and write permissions.
3927 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
3929 if ($database_permissions eq 1){
3931 # The database permissions are invalid so return an error.
3933 kiriwrite_error("databaseinvalidpermissions");
3937 # Get information about the database.
3939 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3941 # Check if any errors had occured while getting the database
3944 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3946 # A database error has occured so return an error and
3947 # also the extended error information.
3949 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3953 my $database_name = $database_info{"DatabaseName"};
3955 # Edit the selected pages.
3957 foreach $filename (@filelist){
3959 # Get the page information.
3961 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3963 # Check if any errors occured.
3965 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3967 # A database error has occured so write a warning message.
3969 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3971 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3973 # The page does not exist, so write a warning message.
3975 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepagedoesnotexist}, $filename);
3981 # Check if the page section should be altered.
3983 if ($altersection eq "on"){
3985 # Change the section name.
3987 $page_info{"PageSection"} = $newsection;
3991 # Check if the page template should be altered.
3993 if ($altertemplate eq "on"){
3995 # Change the page template filename.
3997 $page_info{"PageTemplate"} = $newtemplate;
4001 # Check if the page settings should be altered.
4003 if ($altersettings eq "on"){
4005 # Change the page settings value.
4007 $page_info{"PageSettings"} = $newsettings;
4011 # Edit the selected page.
4013 $kiriwrite_dbmodule->editpage({ PageFilename => $page_info{"PageFilename"}, PageNewFilename => $page_info{"PageFilename"}, PageNewName => $page_info{"PageName"}, PageNewDescription => $page_info{"PageDescription"}, PageNewSection => $page_info{"PageSection"}, PageNewTemplate => $page_info{"PageTemplate"}, PageNewContent => $page_info{"PageContent"}, PageNewSettings => $page_info{"PageSettings"} });
4015 # Check if any errors occured while editing the page.
4017 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4019 # A database error has occured so write a warning message
4020 # with the extended error information.
4022 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
4026 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4028 # The pages does not exist in the database.
4030 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepagedoesnotexist}, $filename);
4034 } elsif ($kiriwrite_dbmodule->geterror eq "PageExists"){
4036 # A page already exists with the new filename.
4038 kiriwrite_error("pagefilenameexists");
4042 # The page has been edited so write a message saying that the page
4045 $edited_list{$pageedited}{Filename} = $page_info{"PageFilename"};
4046 $edited_list{$pageedited}{Name} = $page_info{"PageName"};
4048 # Increment the counter of edited pages.
4054 # Disconnect from the database server.
4056 $kiriwrite_dbmodule->disconnect();
4058 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multiedit}, { Style => "pageheader" });
4059 $kiriwrite_presmodule->addlinebreak();
4060 $kiriwrite_presmodule->addlinebreak();
4062 # Check if the counter of edited pages is 0 and if it is
4063 # then write a message saying that no pages were edited
4064 # else write a message listing all of the pages edited.
4066 if ($pageedited eq 0){
4068 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagesedited}, $database_name));
4072 # Write out the message saying that the selected pages
4075 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagesedited}, $database_name));
4076 $kiriwrite_presmodule->addlinebreak();
4077 $kiriwrite_presmodule->addlinebreak();
4078 $kiriwrite_presmodule->startbox("datalist");
4080 foreach $page (keys %edited_list){
4082 # Check if the page name is not blank.
4084 if (!$edited_list{$page}{Name}){
4086 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
4087 $kiriwrite_presmodule->addtext(" (" . $edited_list{$page}{Filename} . ")");
4091 $kiriwrite_presmodule->addtext($edited_list{$page}{Name});
4092 $kiriwrite_presmodule->addtext(" (" . $edited_list{$page}{Filename} . ")");
4096 $kiriwrite_presmodule->addlinebreak();
4099 $kiriwrite_presmodule->endbox();
4103 # Check if any warnings have occured and write a message
4104 # if any warnings did occur.
4108 # One or several warnings have occured so
4111 $kiriwrite_presmodule->addlinebreak();
4112 $kiriwrite_presmodule->addlinebreak();
4113 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{editedpageswarnings});
4114 $kiriwrite_presmodule->addlinebreak();
4115 $kiriwrite_presmodule->addlinebreak();
4116 $kiriwrite_presmodule->startbox("datalist");
4117 foreach $warning (keys %warning_list) {
4118 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
4119 $kiriwrite_presmodule->addlinebreak();
4121 $kiriwrite_presmodule->endbox();
4125 # Write a link going back to the page list for
4126 # the selected database.
4128 $kiriwrite_presmodule->addlinebreak();
4129 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
4131 return $kiriwrite_presmodule->grab();
4133 } elsif ($confirm eq 0){
4135 # The action to edit the template has not been confirmed
4136 # so write a form out instead.
4138 # Connect to the database server.
4140 $kiriwrite_dbmodule->connect();
4142 # Check if any errors occured while connecting to the database server.
4144 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4146 # A database connection error has occured so return
4149 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4153 # Select the database.
4155 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
4157 # Check if any errors occured while selecting the database.
4159 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4161 # The database does not exist, so return an error.
4163 kiriwrite_error("databasemissingfile");
4165 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4167 # The database has invalid permissions set, so return
4170 kiriwrite_error("databaseinvalidpermissions");
4174 # Check if the database has read and write permissions.
4176 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
4178 if ($database_permissions eq 1){
4180 # The database permissions are invalid so return an error.
4182 kiriwrite_error("databaseinvalidpermissions");
4186 # Get information about the database.
4188 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4190 # Check if any errors had occured while getting the database
4193 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4195 # A database error has occured so return an error and
4196 # also the extended error information.
4198 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4202 my $database_name = $database_info{"DatabaseName"};
4204 # Define some variables for later.
4212 my $filelist_filename;
4219 my $template_filename;
4220 my $template_warning;
4221 my $templateseek = 0;
4223 tie(%edit_list, 'Tie::IxHash');
4224 tie(%template_list, 'Tie::IxHash');
4226 # Get the information about each page that is going
4229 foreach $filelist_filename (@filelist){
4231 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
4233 # Check if any errors occured.
4235 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4237 # A database error has occured so return an error and
4238 # also the extended error information.
4240 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4242 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4244 # The page does not exist, so process the next page.
4250 # Add the page name and file name to the list of
4253 $edit_list{$pageseek}{Filename} = $page_info{"PageFilename"};
4254 $edit_list{$pageseek}{Name} = $page_info{"PageName"};
4256 # Increment the page seek counter and reset the
4263 # Check if any pages were found in the database and return
4266 if ($pageseek eq 0){
4268 # No pages were found so return an error.
4270 kiriwrite_error("nopagesselected");
4274 # Connect to the template database.
4276 $kiriwrite_dbmodule->connecttemplate();
4278 # Check if any errors had occured.
4280 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
4282 # The template database does not exist so write a warning
4285 $template_warning = $kiriwrite_lang->{pages}->{templatedatabasenotexistmultieditkeep};
4287 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
4289 # The template database has invalid permissions set so
4292 $template_warning = $kiriwrite_lang->{pages}->{templatedatabasepermissionsinvalidmultieditkeep};
4296 if (!$template_warning){
4298 # Get the list of templates available.
4300 @templates_list = $kiriwrite_dbmodule->gettemplatelist();
4302 # Check if any errors had occured.
4304 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
4306 # A database error occured while getting the list
4307 # of templates so write a warning message with the
4308 # extended error information.
4310 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrormultieditkeep}, $kiriwrite_dbmodule->geterror(1));
4314 if (!$template_warning){
4316 foreach $template_filename (@templates_list){
4318 # Get the template data.
4320 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
4322 # Check if any error occured while getting the template information.
4324 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
4326 # A database error has occured, so write a warning message with
4327 # the extended error information.
4329 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrormultieditkeep}, $kiriwrite_dbmodule->geterror(1));
4331 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
4333 # The template does not exist, so process the next page.
4339 # Add the template to the list of templates.
4341 $template_list{$templateseek}{Filename} = $template_info{"TemplateFilename"};
4342 $template_list{$templateseek}{Name} = $template_info{"TemplateName"};
4352 # Disconnect from the template database.
4354 $kiriwrite_dbmodule->disconnecttemplate();
4356 # Disconnect from the database server.
4358 $kiriwrite_dbmodule->disconnect();
4360 # Write a form for editing the selected pages.
4362 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multiedit}, { Style => "pageheader" });
4363 $kiriwrite_presmodule->addlinebreak();
4364 $kiriwrite_presmodule->addlinebreak();
4365 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
4366 $kiriwrite_presmodule->startbox();
4367 $kiriwrite_presmodule->addhiddendata("mode", "page");
4368 $kiriwrite_presmodule->addhiddendata("action", "multiedit");
4369 $kiriwrite_presmodule->addhiddendata("database", $database);
4370 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
4371 $kiriwrite_presmodule->addhiddendata("confirm", 1);
4375 foreach $page (keys %edit_list){
4376 $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
4377 $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $edit_list{$page}{Filename});
4381 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{multieditmessage}, $database_name));
4382 $kiriwrite_presmodule->addlinebreak();
4383 $kiriwrite_presmodule->addlinebreak();
4384 $kiriwrite_presmodule->startbox("datalist");
4386 foreach $page (keys %edit_list){
4387 if (!$edit_list{$page}{Name}){
4388 $kiriwrite_presmodule->additalictext("No Name");
4389 $kiriwrite_presmodule->addtext(" (" . $edit_list{$page}{Filename} . ")");
4391 $kiriwrite_presmodule->addtext($edit_list{$page}{Name} . " (" . $edit_list{$page}{Filename} . ")");
4394 $kiriwrite_presmodule->addlinebreak();
4397 $kiriwrite_presmodule->endbox();
4398 $kiriwrite_presmodule->addlinebreak();
4399 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multieditmessagevalues});
4400 $kiriwrite_presmodule->addlinebreak();
4401 $kiriwrite_presmodule->addlinebreak();
4402 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
4404 $kiriwrite_presmodule->startheader();
4405 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{alter}, { Style => "tablecellheader" });
4406 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
4407 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
4408 $kiriwrite_presmodule->endheader();
4410 $kiriwrite_presmodule->startrow();
4411 $kiriwrite_presmodule->addcell("tablecell1");
4412 $kiriwrite_presmodule->addcheckbox("altersection");
4413 $kiriwrite_presmodule->endcell();
4414 $kiriwrite_presmodule->addcell("tablecell1");
4415 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
4416 $kiriwrite_presmodule->endcell();
4417 $kiriwrite_presmodule->addcell("tablecell1");
4418 $kiriwrite_presmodule->addinputbox("newsection", { Size => 64, MaxLength => 256 });
4419 $kiriwrite_presmodule->endcell();
4420 $kiriwrite_presmodule->endrow();
4422 $kiriwrite_presmodule->startrow();
4423 $kiriwrite_presmodule->addcell("tablecell2");
4424 $kiriwrite_presmodule->addcheckbox("altertemplate");
4425 $kiriwrite_presmodule->endcell();
4426 $kiriwrite_presmodule->addcell("tablecell2");
4427 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
4428 $kiriwrite_presmodule->endcell();
4430 $kiriwrite_presmodule->addcell("tablecell2");
4432 if ($template_warning){
4434 $kiriwrite_presmodule->addhiddendata("newtemplate", "!skip");
4435 $kiriwrite_presmodule->addtext($template_warning);
4439 $kiriwrite_presmodule->addselectbox("newtemplate");
4441 foreach $template (keys %template_list){
4443 $kiriwrite_presmodule->addoption($template_list{$template}{Name} . " (" . $template_list{$template}{Filename} . ")", { Value => $template_list{$template}{Filename}});
4447 $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
4448 $kiriwrite_presmodule->endselectbox();
4451 $kiriwrite_presmodule->endcell();
4452 $kiriwrite_presmodule->endrow();
4454 $kiriwrite_presmodule->startrow();
4455 $kiriwrite_presmodule->addcell("tablecell1");
4456 $kiriwrite_presmodule->addcheckbox("altersettings");
4457 $kiriwrite_presmodule->endcell();
4458 $kiriwrite_presmodule->addcell("tablecell1");
4459 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
4460 $kiriwrite_presmodule->endcell();
4461 $kiriwrite_presmodule->addcell("tablecell1");
4462 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => 1 , Selected => 1});
4463 $kiriwrite_presmodule->addlinebreak();
4464 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => 2 });
4465 $kiriwrite_presmodule->addlinebreak();
4466 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => 3 });
4467 $kiriwrite_presmodule->addlinebreak();
4468 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => 0 });
4469 $kiriwrite_presmodule->endcell();
4470 $kiriwrite_presmodule->endrow();
4472 $kiriwrite_presmodule->endtable();
4473 $kiriwrite_presmodule->addlinebreak();
4474 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{editpagesbutton});
4475 $kiriwrite_presmodule->addtext(" | ");
4476 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
4477 $kiriwrite_presmodule->addtext(" | ");
4478 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
4479 $kiriwrite_presmodule->endbox();
4480 $kiriwrite_presmodule->endform();
4482 return $kiriwrite_presmodule->grab();
4486 # The confirm value is something else other than
4487 # 1 or 0, so return an error.
4489 kiriwrite_error("invalidvariable");
4495 sub kiriwrite_page_list{
4496 #################################################################################
4497 # kiriwrite_page_list: Lists pages from an database. #
4501 # kiriwrite_page_list([database]); #
4503 # database Specifies the database to retrieve the pages from. #
4504 #################################################################################
4506 # Get the database file name from what was passed to the subroutine.
4508 my ($database_file) = @_;
4510 # Check if the database_file variable is empty, if it is then print out a
4511 # select box asking the user to select a database from the list.
4513 if (!$database_file) {
4515 # Define the variables required for this section.
4519 my @databasefilenames;
4522 my $dbfilename = "";
4525 my $data_file_length = 0;
4526 my $data_file_friendly = "";
4527 my $database_name = "";
4528 my $file_permissions = "";
4530 # Connect to the database server.
4532 $kiriwrite_dbmodule->connect();
4534 # Check if any errors occured while connecting to the database server.
4536 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4538 # A database connection error has occured so return
4541 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4545 # Open the data directory and get all of the databases.
4547 @database_list = $kiriwrite_dbmodule->getdblist();
4549 # Check if any errors occured while trying to get the list of databases.
4551 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
4553 # The database directory is missing so return an error.
4555 kiriwrite_error("datadirectorymissing");
4557 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
4559 # The database directory has invalid permissions set so return
4562 kiriwrite_error("datadirectoryinvalidpermissions");
4566 # Get the information about each database (the short name and friendly name).
4568 foreach $data_file (@database_list){
4570 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
4572 # Check if any errors occured while selecting the database.
4574 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4576 # The database does not exist, so process the next
4581 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4583 # The database has invalid permissions set, so process
4584 # the next database.
4590 # Get the database information.
4592 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4594 # Check if any errors had occured while getting the database
4597 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4599 # A database error has occured, so process the next
4606 # Set the database name.
4608 $database_name = $database_info{"DatabaseName"};
4610 # Check if the database name is undefined and if it is
4611 # then set it blank.
4613 if (!$database_name){
4614 $database_name = "";
4617 # Append the database to the list of databases available.
4619 push(@databasefilenames, $data_file);
4620 push(@databasenames, $database_name);
4624 # Disconnect from the database server.
4626 $kiriwrite_dbmodule->disconnect();
4628 # Write the page data.
4630 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{viewpages}, { Style => "pageheader" });
4631 $kiriwrite_presmodule->addlinebreak();
4632 $kiriwrite_presmodule->addlinebreak();
4633 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{nodatabaseselected});
4634 $kiriwrite_presmodule->addlinebreak();
4635 $kiriwrite_presmodule->addlinebreak();
4636 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"});
4637 $kiriwrite_presmodule->startbox();
4638 $kiriwrite_presmodule->addhiddendata("mode", "page");
4639 $kiriwrite_presmodule->addhiddendata("action", "view");
4640 $kiriwrite_presmodule->addselectbox("database");
4641 foreach $dbfilename (@databasefilenames){
4642 $dbname = $databasenames[$dbseek];
4644 $kiriwrite_presmodule->addoption($dbname . " (" . $dbfilename . ")", { Value => $dbfilename });
4646 $kiriwrite_presmodule->endselectbox();
4647 $kiriwrite_presmodule->addtext(" | ");
4648 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{viewbutton});
4649 $kiriwrite_presmodule->endbox();
4650 $kiriwrite_presmodule->endform();
4652 return $kiriwrite_presmodule->grab();
4659 my $pagemultioptions = "";
4661 my $tablestyle = "";
4663 my $page_filename = "";
4665 my $page_description = "";
4666 my $page_modified = "";
4668 my $tablestyletype = 0;
4670 my $db_file_notblank = 0;
4672 tie(%database_info, 'Tie::IxHash');
4673 tie(%page_info, 'Tie::IxHash');
4675 # The database_file variable is not blank, so print out a list of pages from
4676 # the selected database.
4678 # Preform a variable check on the database filename to make sure that it is
4679 # valid before using it.
4681 kiriwrite_variablecheck($database_file, "filename", "", 0);
4682 kiriwrite_variablecheck($database_file, "maxlength", 32, 0);
4684 # Connect to the database server.
4686 $kiriwrite_dbmodule->connect();
4688 # Check if any errors occured while connecting to the database server.
4690 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4692 # A database connection error has occured so return
4695 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4699 # Select the database.
4701 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_file });
4703 # Check if any errors had occured while selecting the database.
4705 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4707 # The database does not exist, so return an error.
4709 kiriwrite_error("databasemissingfile");
4711 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4713 # The database has invalid permissions set, so return
4716 kiriwrite_error("databaseinvalidpermissions");
4720 # Get information about the database.
4722 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4724 $db_name = $database_info{"DatabaseName"};
4726 # Check if any errors had occured while getting the database
4729 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4731 # A database error has occured so return an error and
4732 # also the extended error information.
4734 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4738 # Get the list of pages.
4740 @database_pages = $kiriwrite_dbmodule->getpagelist();
4742 # Check if any errors had occured while getting the list of pages.
4744 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4746 # A database error has occured so return an error and
4747 # also the extended error information.
4749 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4753 # Check if there are any page names in the database array.
4755 if (@database_pages){
4757 # Write the start of the page.
4759 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagelist}, $db_name), { Style => "pageheader" });
4760 $kiriwrite_presmodule->addlinebreak();
4761 $kiriwrite_presmodule->addlinebreak();
4762 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
4763 $kiriwrite_presmodule->startbox();
4764 $kiriwrite_presmodule->addhiddendata("mode", "page");
4765 $kiriwrite_presmodule->addhiddendata("database", $database_file);
4766 $kiriwrite_presmodule->addhiddendata("type", "multiple");
4768 # Write the list of multiple selection options.
4770 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
4771 $kiriwrite_presmodule->addtext(" | ");
4772 $kiriwrite_presmodule->addbutton("action", { Value => "multidelete", Description => $kiriwrite_lang->{pages}->{deleteselectedbutton} });
4773 $kiriwrite_presmodule->addtext(" | ");
4774 $kiriwrite_presmodule->addbutton("action", { Value => "multimove", Description => $kiriwrite_lang->{pages}->{moveselectedbutton} });
4775 $kiriwrite_presmodule->addtext(" | ");
4776 $kiriwrite_presmodule->addbutton("action", { Value => "multicopy", Description => $kiriwrite_lang->{pages}->{copyselectedbutton} });
4777 $kiriwrite_presmodule->addtext(" | ");
4778 $kiriwrite_presmodule->addbutton("action", { Value => "multiedit", Description => $kiriwrite_lang->{pages}->{editselectedbutton} });
4780 $kiriwrite_presmodule->addlinebreak();
4781 $kiriwrite_presmodule->addlinebreak();
4782 $kiriwrite_presmodule->endbox();
4784 # Write the table header.
4786 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
4787 $kiriwrite_presmodule->startheader();
4788 $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
4789 $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagefilename}, { Style => "tablecellheader" });
4790 $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagename}, { Style => "tablecellheader" });
4791 $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagedescription}, { Style => "tablecellheader" });
4792 $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{lastmodified}, { Style => "tablecellheader" });
4793 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
4794 $kiriwrite_presmodule->endheader();
4796 # Process each page filename and get the page information.
4798 foreach $page_filename (@database_pages){
4800 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page_filename, Reduced => 1 });
4802 # Check if any errors have occured.
4804 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4806 # A database error has occured so return an error and
4807 # also the extended error information.
4809 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4811 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4813 # The page does not exist, so process the next page.
4821 $page_filename = $page_info{"PageFilename"};
4822 $page_name = $page_info{"PageName"};
4823 $page_description = $page_info{"PageDescription"};
4824 $page_modified = $page_info{"PageLastModified"};
4826 # Set the table cell style.
4828 if ($tablestyletype eq 0){
4830 $tablestyle = "tablecell1";
4831 $tablestyletype = 1;
4835 $tablestyle = "tablecell2";
4836 $tablestyletype = 0;
4840 # Write out the row of data.
4842 $kiriwrite_presmodule->startrow();
4843 $kiriwrite_presmodule->addcell($tablestyle);
4844 $kiriwrite_presmodule->addhiddendata("id[" . $page_count . "]", $page_filename);
4845 $kiriwrite_presmodule->addcheckbox("name[" . $page_count . "]");
4846 $kiriwrite_presmodule->endcell();
4847 $kiriwrite_presmodule->addcell($tablestyle);
4848 $kiriwrite_presmodule->addtext($page_filename);
4849 $kiriwrite_presmodule->endcell();
4850 $kiriwrite_presmodule->addcell($tablestyle);
4854 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
4858 $kiriwrite_presmodule->addtext($page_name);
4862 $kiriwrite_presmodule->endcell();
4863 $kiriwrite_presmodule->addcell($tablestyle);
4865 if (!$page_description){
4867 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
4871 $kiriwrite_presmodule->addtext($page_description);
4875 $kiriwrite_presmodule->endcell();
4876 $kiriwrite_presmodule->addcell($tablestyle);
4878 if (!$page_modified){
4880 $kiriwrite_presmodule->additalictext("No Date");
4884 $kiriwrite_presmodule->addtext($page_modified);
4888 $kiriwrite_presmodule->endcell();
4889 $kiriwrite_presmodule->addcell($tablestyle);
4890 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=edit&database=" . $database_file . "&page=" . $page_filename, { Text => $kiriwrite_lang->{options}->{edit} });
4891 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=delete&database=" . $database_file . "&page=" . $page_filename, { Text => $kiriwrite_lang->{options}->{delete} });
4892 $kiriwrite_presmodule->endcell();
4893 $kiriwrite_presmodule->endrow();
4895 # Increment the counter.
4901 # Disconnect from the database server.
4903 $kiriwrite_dbmodule->disconnect();
4905 $kiriwrite_presmodule->endtable();
4906 $kiriwrite_presmodule->startbox();
4907 $kiriwrite_presmodule->addhiddendata("count", $page_count);
4908 $kiriwrite_presmodule->endbox();
4909 $kiriwrite_presmodule->endform();
4911 if (!@database_pages || !$page_count){
4913 # There were no values in the database pages array and
4914 # the page count had not been incremented so write a
4915 # message saying that there were no pages in the
4918 $kiriwrite_presmodule->clear();
4919 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagelist}, $db_name), { Style => "pageheader" });
4920 $kiriwrite_presmodule->addlinebreak();
4921 $kiriwrite_presmodule->addlinebreak();
4922 $kiriwrite_presmodule->startbox("errorbox");
4923 $kiriwrite_presmodule->enterdata($kiriwrite_lang->{pages}->{nopagesindatabase});
4924 $kiriwrite_presmodule->endbox();
4928 return $kiriwrite_presmodule->grab();
4934 sub kiriwrite_template_add{
4935 #################################################################################
4936 # kiriwrite_template_add: Add a template to the template folder #
4940 # kiriwrite_template_add(filename, name, description, layout, confirm); #
4942 # filename The filename of the new template. #
4943 # name The name of the template. #
4944 # description The description of the template. #
4945 # layout The layout of the new template. #
4946 # confirm Confirm the action of creating a new template. #
4947 #################################################################################
4949 # Get the variables that were passed to the subroutine.
4951 my ($templatefilename, $templatename, $templatedescription, $templatelayout, $confirm) = @_;
4953 # Check if the confirm value is blank and if it is then set confirm to 0.
4957 # The confirm value is blank, so set the value of confirm to 0.
4965 # Check (validate) each of the values.
4967 kiriwrite_variablecheck($templatename, "utf8", 0, 0);
4968 kiriwrite_variablecheck($templatedescription, "utf8", 0, 0);
4969 kiriwrite_variablecheck($templatelayout, "utf8", 0, 0);
4971 # Convert the values into proper UTF8 strings that can be used.
4973 $templatename = kiriwrite_utf8convert($templatename);
4974 $templatedescription = kiriwrite_utf8convert($templatedescription);
4975 $templatelayout = kiriwrite_utf8convert($templatelayout);
4977 # Check the length of the converted UTF8 strings.
4979 my $templatefilename_length_check = kiriwrite_variablecheck($templatefilename, "maxlength", 64, 1);
4980 my $templatename_length_check = kiriwrite_variablecheck($templatename, "maxlength", 512, 1);
4981 my $templatedescription_length_check = kiriwrite_variablecheck($templatedescription, "maxlength", 512, 1);
4982 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
4984 if ($templatefilename_length_check eq 1){
4986 # The template filename length is too long, so return an error.
4988 kiriwrite_error("templatefilenametoolong");
4992 if ($templatename_length_check eq 1){
4994 # The template name length is too long, so return an error.
4996 kiriwrite_error("templatenametoolong");
5001 if ($templatedescription_length_check eq 1){
5003 # The template description length is too long, so return an error.
5005 kiriwrite_error("templatedescriptiontoolong");
5009 # Check if the filename specified is a valid filename.
5011 kiriwrite_variablecheck($templatefilename, "filename", "", 0);
5013 # Connect to the template server.
5015 $kiriwrite_dbmodule->connect();
5017 # Connect to the template database.
5019 $kiriwrite_dbmodule->connecttemplate(1);
5021 # Check if any errors had occured.
5023 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5025 # The template database has invalid permissions set so
5028 kiriwrite_error("templatedatabaseinvalidpermissions");
5032 $kiriwrite_dbmodule->addtemplate({ TemplateFilename => $templatefilename, TemplateName => $templatename, TemplateDescription => $templatedescription, TemplateLayout => $templatelayout });
5034 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5036 # A database error has occured so return an error along
5037 # with the extended error information.
5039 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5041 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5043 # The template database has invalid permissions set so return
5046 kiriwrite_error("templatedatabaseinvalidpermissions");
5048 } elsif ($kiriwrite_dbmodule->geterror eq "TemplatePageExists"){
5050 # The template page already exists so return an error.
5052 kiriwrite_error("templatefilenameexists");
5054 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseUncreateable"){
5056 # The template databases is uncreatable so return an error.
5058 kiriwrite_error("templatedatabasenotcreated");
5062 $kiriwrite_dbmodule->disconnecttemplate();
5064 # Disconnect from the template server.
5066 $kiriwrite_dbmodule->disconnect();
5068 # Print out the confirmation message.
5070 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{addedtemplate}, { Style => "pageheader" });
5071 $kiriwrite_presmodule->addlinebreak();
5072 $kiriwrite_presmodule->addlinebreak();
5073 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{addedtemplatemessage}, $templatename));
5074 $kiriwrite_presmodule->addlinebreak();
5075 $kiriwrite_presmodule->addlinebreak();
5076 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5077 return $kiriwrite_presmodule->grab();
5080 # No confirmation was made, so print out a form for adding a template.
5082 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{addtemplate}, { Style => "pageheader" });
5083 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5084 $kiriwrite_presmodule->startbox();
5085 $kiriwrite_presmodule->addhiddendata("mode", "template");
5086 $kiriwrite_presmodule->addhiddendata("action", "add");
5087 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5088 $kiriwrite_presmodule->addlinebreak();
5089 $kiriwrite_presmodule->starttable("", { CellSpacing => 0, CellPadding => 5 });
5091 $kiriwrite_presmodule->startheader();
5092 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
5093 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
5094 $kiriwrite_presmodule->endheader();
5096 $kiriwrite_presmodule->startrow();
5097 $kiriwrite_presmodule->addcell("tablecell1");
5098 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatename});
5099 $kiriwrite_presmodule->endcell();
5100 $kiriwrite_presmodule->addcell("tablecell2");
5101 $kiriwrite_presmodule->addinputbox("templatename", { Size => 64, MaxLength => 512 });
5102 $kiriwrite_presmodule->endcell();
5103 $kiriwrite_presmodule->endrow();
5105 $kiriwrite_presmodule->startrow();
5106 $kiriwrite_presmodule->addcell("tablecell1");
5107 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatedescription});
5108 $kiriwrite_presmodule->endcell();
5109 $kiriwrite_presmodule->addcell("tablecell2");
5110 $kiriwrite_presmodule->addinputbox("templatedescription", { Size => 64, MaxLength => 512 });
5111 $kiriwrite_presmodule->endcell();
5112 $kiriwrite_presmodule->endrow();
5114 $kiriwrite_presmodule->startrow();
5115 $kiriwrite_presmodule->addcell("tablecell1");
5116 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatefilename});
5117 $kiriwrite_presmodule->endcell();
5118 $kiriwrite_presmodule->addcell("tablecell2");
5119 $kiriwrite_presmodule->addinputbox("templatefilename", { Size => 32, MaxLength => 64 });
5120 $kiriwrite_presmodule->endcell();
5121 $kiriwrite_presmodule->endrow();
5123 $kiriwrite_presmodule->startrow();
5124 $kiriwrite_presmodule->addcell("tablecell1");
5125 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatelayout});
5126 $kiriwrite_presmodule->endcell();
5127 $kiriwrite_presmodule->addcell("tablecell2");
5128 $kiriwrite_presmodule->addtextbox("templatelayout", { Columns => 50, Rows => 10 });
5129 $kiriwrite_presmodule->addlinebreak();
5130 $kiriwrite_presmodule->addlinebreak();
5131 $kiriwrite_presmodule->startbox("datalist");
5132 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
5133 $kiriwrite_presmodule->addlinebreak();
5134 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagecontent});
5135 $kiriwrite_presmodule->addlinebreak();
5136 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
5137 $kiriwrite_presmodule->addlinebreak();
5138 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
5139 $kiriwrite_presmodule->addlinebreak();
5140 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
5141 $kiriwrite_presmodule->addlinebreak();
5142 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
5143 $kiriwrite_presmodule->addlinebreak();
5144 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
5145 $kiriwrite_presmodule->addlinebreak();
5146 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
5147 $kiriwrite_presmodule->addlinebreak();
5148 $kiriwrite_presmodule->endbox();
5149 $kiriwrite_presmodule->endcell();
5150 $kiriwrite_presmodule->endrow();
5151 $kiriwrite_presmodule->endtable();
5153 $kiriwrite_presmodule->addlinebreak();
5154 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{addtemplatebutton});
5155 $kiriwrite_presmodule->addtext(" | ");
5156 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
5157 $kiriwrite_presmodule->addtext(" | ");
5158 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template" , { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5160 $kiriwrite_presmodule->endbox();
5161 $kiriwrite_presmodule->endform();
5163 return $kiriwrite_presmodule->grab();
5170 sub kiriwrite_template_edit{
5171 #################################################################################
5172 # kiriwrite_template_edit: Edit a template from the template folder. #
5176 # kiriwrite_template_edit(filename, [newfilename], [newname], [newdescription], #
5177 # [templatelayout], [confirm]); #
5179 # filename The current filename of the template to edit. #
5180 # newfilename The new filename of the template to edit. #
5181 # newname The new name of the template being edited. #
5182 # newdescription The new description of the template being edited. #
5183 # templatelayout The modified/altered template layout. #
5184 # confirm Confirms the action to edit a template and its #
5186 #################################################################################
5188 # Get all the variables that have been passed to the subroutine.
5190 my ($templatefilename, $templatenewfilename, $templatenewname, $templatenewdescription, $templatelayout, $confirm) = @_;
5192 # Check if the confirm variable is blank, if it is then
5193 # set confirm to '0'
5197 # confirm is uninitalised/blank, so set the value of confirm
5204 # Check if the template filename is blank and if it is, then return
5207 if (!$templatefilename){
5209 kiriwrite_error("templatefilenameblank");
5213 # Connect to the database server.
5215 $kiriwrite_dbmodule->connect();
5217 # Check if any errors occured while connecting to the database server.
5219 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5221 # A database connection error has occured so return
5224 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5230 # Check certain strings to see if they UTF8 compiliant.
5232 kiriwrite_variablecheck($templatenewname, "utf8", 0, 0);
5233 kiriwrite_variablecheck($templatenewdescription, "utf8", 0, 0);
5234 kiriwrite_variablecheck($templatelayout, "utf8", 0, 0);
5236 # Convert the values into proper UTF8 strings.
5238 $templatenewname = kiriwrite_utf8convert($templatenewname);
5239 $templatenewdescription = kiriwrite_utf8convert($templatenewdescription);
5240 $templatelayout = kiriwrite_utf8convert($templatelayout);
5242 # Check if the filenames recieved are valid filenames.
5244 kiriwrite_variablecheck($templatenewfilename, "maxlength", 64, 0);
5245 kiriwrite_variablecheck($templatenewdescription, "maxlength", 512, 0);
5246 kiriwrite_variablecheck($templatenewname, "maxlength", 512, 0);
5247 kiriwrite_variablecheck($templatefilename, "maxlength", 64, 0);
5248 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
5250 kiriwrite_variablecheck($templatefilename, "filename", "", 0);
5251 kiriwrite_variablecheck($templatenewfilename, "filename", "", 0);
5253 # Connect to the template database.
5255 $kiriwrite_dbmodule->connecttemplate();
5257 # Check if any errors had occured.
5259 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5261 # The template database has invalid permissions set so
5264 kiriwrite_error("templatedatabaseinvalidpermissions");
5268 # Edit the template.
5270 $kiriwrite_dbmodule->edittemplate({ TemplateFilename => $templatefilename, NewTemplateFilename => $templatenewfilename, NewTemplateName => $templatenewname, NewTemplateDescription => $templatenewdescription, NewTemplateLayout => $templatelayout });
5272 # Check if any error occured while editing the template.
5274 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5276 # A database error has occured, so return an error.
5278 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5280 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5282 # The template database has invalid permissions set so return
5285 kiriwrite_error("templatedatabaseinvalidpermissions");
5287 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5289 # The template does not exist, so process the next template.
5291 kiriwrite_error("templatedoesnotexist");
5295 # Disconnect from the database server.
5297 $kiriwrite_dbmodule->disconnect();
5299 # Disconnect from the template database.
5301 $kiriwrite_dbmodule->disconnecttemplate();
5303 # Append a link so that the user can return to the templates list.
5305 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{editedtemplate}, { Style => "pageheader" });
5306 $kiriwrite_presmodule->addlinebreak();
5307 $kiriwrite_presmodule->addlinebreak();
5308 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{editedtemplatemessage}, $templatenewname));
5309 $kiriwrite_presmodule->addlinebreak();
5310 $kiriwrite_presmodule->addlinebreak();
5311 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5315 # Connect to the template database.
5317 $kiriwrite_dbmodule->connecttemplate();
5319 # Check if any errors had occured.
5321 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5323 # The template database has invalid permissions set so
5326 kiriwrite_error("templatedatabaseinvalidpermissions");
5330 # Get the template information.
5332 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $templatefilename });
5334 # Check if any error occured while getting the template information.
5336 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5338 # A database error has occured, so return an error.
5340 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5342 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5344 # The template does not exist, so return an error.
5346 kiriwrite_error("templatedoesnotexist");
5350 # Disconnect from the template database.
5352 $kiriwrite_dbmodule->disconnecttemplate();
5354 # Get the values from the query results.
5356 my $template_filename = $template_info{"TemplateFilename"};
5357 my $template_name = $template_info{"TemplateName"};
5358 my $template_description = $template_info{"TemplateDescription"};
5359 my $template_layout = $template_info{"TemplateLayout"};
5360 my $template_modified = $template_info{"TemplateLastModified"};
5362 # Check if the values are undefined and set them blank
5365 if (!$template_name){
5366 $template_name = "";
5369 if (!$template_description){
5370 $template_description = "";
5373 if (!$template_layout){
5374 $template_layout = "";
5377 # Write out the form for editing an template with the current template
5378 # settings put into the correct place.
5380 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{edittemplate}, { Style => "pageheader" });
5381 $kiriwrite_presmodule->addlinebreak();
5382 $kiriwrite_presmodule->addlinebreak();
5383 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5384 $kiriwrite_presmodule->startbox();
5385 $kiriwrite_presmodule->addhiddendata("mode", "template");
5386 $kiriwrite_presmodule->addhiddendata("action", "edit");
5387 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5388 $kiriwrite_presmodule->addhiddendata("template", $template_filename);
5389 $kiriwrite_presmodule->starttable("", { CellSpacing => 0, CellPadding => 5});
5391 $kiriwrite_presmodule->startheader();
5392 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
5393 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
5394 $kiriwrite_presmodule->endheader();
5396 $kiriwrite_presmodule->startrow();
5397 $kiriwrite_presmodule->addcell("tablecell1");
5398 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatename});
5399 $kiriwrite_presmodule->endcell();
5400 $kiriwrite_presmodule->addcell("tablecell2");
5401 $kiriwrite_presmodule->addinputbox("newname", { Size => 64, MaxLength => 512, Value => $template_name });
5402 $kiriwrite_presmodule->endcell();
5403 $kiriwrite_presmodule->endrow();
5405 $kiriwrite_presmodule->startrow();
5406 $kiriwrite_presmodule->addcell("tablecell1");
5407 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatedescription});
5408 $kiriwrite_presmodule->endcell();
5409 $kiriwrite_presmodule->addcell("tablecell2");
5410 $kiriwrite_presmodule->addinputbox("newdescription", { Size => 64, MaxLength => 512, Value => $template_description });
5411 $kiriwrite_presmodule->endcell();
5412 $kiriwrite_presmodule->endrow();
5414 $kiriwrite_presmodule->startrow();
5415 $kiriwrite_presmodule->addcell("tablecell1");
5416 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatefilename});
5417 $kiriwrite_presmodule->endcell();
5418 $kiriwrite_presmodule->addcell("tablecell2");
5419 $kiriwrite_presmodule->addinputbox("newfilename", { Size => 32, MaxLength => 64, Value => $template_filename });
5420 $kiriwrite_presmodule->endcell();
5421 $kiriwrite_presmodule->endrow();
5423 $kiriwrite_presmodule->startrow();
5424 $kiriwrite_presmodule->addcell("tablecell1");
5425 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatelayout});
5426 $kiriwrite_presmodule->endcell();
5427 $kiriwrite_presmodule->addcell("tablecell2");
5428 $kiriwrite_presmodule->addtextbox("newlayout", { Rows => 10, Columns => 50, Value => $template_layout});
5429 $kiriwrite_presmodule->addlinebreak();
5430 $kiriwrite_presmodule->addlinebreak();
5431 $kiriwrite_presmodule->startbox("datalist");
5432 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
5433 $kiriwrite_presmodule->addlinebreak();
5434 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagecontent});
5435 $kiriwrite_presmodule->addlinebreak();
5436 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
5437 $kiriwrite_presmodule->addlinebreak();
5438 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
5439 $kiriwrite_presmodule->addlinebreak();
5440 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
5441 $kiriwrite_presmodule->addlinebreak();
5442 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
5443 $kiriwrite_presmodule->addlinebreak();
5444 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
5445 $kiriwrite_presmodule->addlinebreak();
5446 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
5447 $kiriwrite_presmodule->addlinebreak();
5448 $kiriwrite_presmodule->endbox();
5449 $kiriwrite_presmodule->endcell();
5450 $kiriwrite_presmodule->endrow();
5452 $kiriwrite_presmodule->endtable();
5454 $kiriwrite_presmodule->addlinebreak();
5456 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{edittemplatebutton});
5457 $kiriwrite_presmodule->addtext(" | ");
5458 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
5459 $kiriwrite_presmodule->addtext(" | ");
5460 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5462 $kiriwrite_presmodule->endbox();
5463 $kiriwrite_presmodule->endform();
5467 # Disconnect from the database server.
5469 $kiriwrite_dbmodule->disconnect();
5471 return $kiriwrite_presmodule->grab();
5475 sub kiriwrite_template_delete{
5476 #################################################################################
5477 # kiriwrite_template_delete: Delete a template from the template folder. #
5481 # kiriwrite_template_delete(filename, confirm); #
5483 # filename Specifies the filename of the database to delete. #
5484 # confirm Confirms the action to delete a template. #
5485 #################################################################################
5487 # Get the parameters that were passed to the subroutine.
5489 my ($template_filename, $template_confirm) = @_;
5491 if (!$template_confirm){
5492 $template_confirm = 0;
5495 # Check the length of the variables.
5496 kiriwrite_variablecheck($template_filename, "maxlength", 64, 0);
5497 kiriwrite_variablecheck($template_confirm, "maxlength", 1, 0);
5499 # Check if the template_name string is blank and if it is then
5500 # return an error (as the template_name string should not be
5503 if (!$template_filename){
5505 # The template_filename string really is blank,
5506 # so return an error saying that an empty
5507 # filename was passed (to the subroutine).
5509 kiriwrite_error("templatefilenameblank");
5513 # Check if the template_confirm string is blank and if it is, write
5514 # out a form asking the user to confirm the deletion.
5516 if ($template_confirm eq 1){
5518 # The action to delete the template from the template database has
5519 # been confirmed so delete the template.
5521 # Connect to the database server.
5523 $kiriwrite_dbmodule->connect();
5525 # Check if any errors occured while connecting to the database server.
5527 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5529 # A database connection error has occured so return
5532 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5536 # Check if the template database exists and the file permissions
5537 # are valid and return an error if they aren't.
5539 $kiriwrite_dbmodule->connecttemplate();
5541 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5543 # The template database does not exist so write a warning
5546 kiriwrite_error("templatedatabasemissing");
5548 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5550 # The template database has invalid permissions set so
5553 kiriwrite_error("templatedatabaseinvalidpermissions");
5557 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
5559 # Check if any error occured while getting the template information.
5561 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5563 # A database error has occured, so return an error.
5565 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5567 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5569 # The template does not exist, so return an error.
5571 kiriwrite_error("templatedoesnotexist");
5575 # Delete the selected template.
5577 $kiriwrite_dbmodule->deletetemplate({ TemplateFilename => $template_filename });
5579 # Check if any error occured while deleting the template.
5581 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5583 # A database error has occured, so return an error.
5585 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5587 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5589 # The template does not exist, so process the next template.
5591 kiriwrite_error("templatedoesnotexist");
5595 $kiriwrite_dbmodule->disconnecttemplate();
5597 # Get the deleted database name.
5599 my $database_template_name = $template_info{"TemplateName"};
5601 # Disconnect from the database server.
5603 $kiriwrite_dbmodule->disconnect();
5605 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{deletedtemplate}, { Style => "pageheader" });
5606 $kiriwrite_presmodule->addlinebreak();
5607 $kiriwrite_presmodule->addlinebreak();
5608 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{deletedtemplatemessage}, $database_template_name) );
5609 $kiriwrite_presmodule->addlinebreak();
5610 $kiriwrite_presmodule->addlinebreak();
5611 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5613 return $kiriwrite_presmodule->grab();
5615 } elsif ($template_confirm eq 0) {
5617 # The template confirm value is 0 (previously blank and then set to 0), so
5618 # write out a form asking the user to confirm the deletion of the template.
5620 # Connect to the database server.
5622 $kiriwrite_dbmodule->connect();
5624 # Check if any errors occured while connecting to the database server.
5626 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5628 # A database connection error has occured so return
5631 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5635 # Connect to the template database.
5637 $kiriwrite_dbmodule->connecttemplate();
5639 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5641 # The template database does not exist so write a warning
5644 kiriwrite_error("templatedatabasemissing");
5646 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5648 # The template database has invalid permissions set so
5651 kiriwrite_error("templatedatabaseinvalidpermissions");
5655 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
5657 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5659 # A database error has occured, so return an error.
5661 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5663 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5665 # The template does not exist, so return an error.
5667 kiriwrite_error("templatedoesnotexist");
5671 my $template_data_filename = $template_info{"TemplateFilename"};
5672 my $template_data_name = $template_info{"TemplateName"};
5674 $kiriwrite_dbmodule->disconnecttemplate();
5676 # Disconnect from the database server.
5678 $kiriwrite_dbmodule->disconnect();
5680 # Write out the confirmation form.
5682 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{deletetemplate}, { Style => "pageheader" });
5683 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5684 $kiriwrite_presmodule->startbox();
5685 $kiriwrite_presmodule->addhiddendata("mode", "template");
5686 $kiriwrite_presmodule->addhiddendata("template", $template_filename);
5687 $kiriwrite_presmodule->addhiddendata("action", "delete");
5688 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5689 $kiriwrite_presmodule->addlinebreak();
5690 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{deletetemplatemessage}, $template_data_name, $template_data_filename));
5691 $kiriwrite_presmodule->addlinebreak();
5692 $kiriwrite_presmodule->addlinebreak();
5693 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{deletetemplatebutton});
5694 $kiriwrite_presmodule->addtext(" | ");
5695 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{deletetemplatereturntolist} });
5696 $kiriwrite_presmodule->endbox();
5697 $kiriwrite_presmodule->endform();
5699 return $kiriwrite_presmodule->grab();
5703 kiriwrite_error("invalidvariable");
5709 sub kiriwrite_template_list{
5710 #################################################################################
5711 # kiriwrite_template_list: List the templates in the template folder. #
5715 # kiriwrite_template_list(); #
5716 #################################################################################
5718 # Define certain values for later.
5725 my $template_filename = "";
5726 my $template_filename_list = "";
5727 my $template_name = "";
5728 my $template_description = "";
5729 my $template_data = "";
5731 my $template_count = 0;
5733 my $template_style = 0;
5734 my $template_stylename = "";
5736 my $templatewarning = "";
5738 # Connect to the database server.
5740 $kiriwrite_dbmodule->connect();
5742 # Check if any errors occured while connecting to the database server.
5744 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5746 # A database connection error has occured so return
5749 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5753 # Connect to the template database.
5755 $kiriwrite_dbmodule->connecttemplate();
5757 # Check if any errors had occured.
5759 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5761 # The template database does not exist so write a warning
5764 $templatewarning = $kiriwrite_lang->{template}->{templatedatabasedoesnotexist};
5766 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5768 # The template database has invalid permissions set so
5771 kiriwrite_error("templatedatabaseinvalidpermissions");
5773 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5775 # A database error occured while getting the list of
5776 # templates so return an error with the extended
5777 # error information.
5779 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5783 # Get the list of template databases.
5785 if (!$templatewarning){
5787 @templates_list = $kiriwrite_dbmodule->gettemplatelist();
5791 # Check if any errors had occured.
5793 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5795 # A database error occured while getting the list
5796 # of templates so return an error with the
5797 # extended error information.
5799 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5803 # Check if any templates are in the database and if there isn't
5804 # then write a message saying that there are no templates in the
5807 if (!@templates_list && !$templatewarning){
5808 $templatewarning = $kiriwrite_lang->{template}->{notemplatesavailable};
5811 # Process the templates into a template list.
5813 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{viewtemplates}, { Style => "pageheader" });
5814 $kiriwrite_presmodule->addlinebreak();
5815 $kiriwrite_presmodule->addlinebreak();
5817 if ($templatewarning){
5819 $kiriwrite_presmodule->startbox("errorbox");
5820 $kiriwrite_presmodule->addtext($templatewarning);
5821 $kiriwrite_presmodule->endbox();
5825 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
5826 $kiriwrite_presmodule->startheader();
5827 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatefilename}, { Style => "tablecellheader" });
5828 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatename}, { Style => "tablecellheader" });
5829 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatedescription}, { Style => "tablecellheader" });
5830 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
5831 $kiriwrite_presmodule->endheader();
5833 foreach $template (@templates_list){
5835 # Get the template data.
5837 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
5839 # Check if any errors occured while trying to get the template
5842 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5844 # A database error has occured, so return an error.
5846 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5848 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5850 # The template does not exist, so process the next template.
5856 $template_filename = $template_info{"TemplateFileName"};
5857 $template_name = $template_info{"TemplateName"};
5858 $template_description = $template_info{"TemplateDescription"};
5860 # Check what style the row of table cells should be.
5862 if ($template_style eq 0){
5864 $template_stylename = "tablecell1";
5865 $template_style = 1;
5869 $template_stylename = "tablecell2";
5870 $template_style = 0;
5874 $kiriwrite_presmodule->startrow();
5875 $kiriwrite_presmodule->addcell($template_stylename);
5876 $kiriwrite_presmodule->addtext($template_info{"TemplateFilename"});
5878 # Check if the blank template value was set.
5880 if (!$template_info{"TemplateLayout"}){
5881 $kiriwrite_presmodule->additalictext(" " . "[Blank Template]");
5884 $kiriwrite_presmodule->endcell();
5885 $kiriwrite_presmodule->addcell($template_stylename);
5887 # Check if the template name is blank and if it is
5888 # write a message to say there's no name for the
5891 if (!$template_info{"TemplateName"}){
5892 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
5894 $kiriwrite_presmodule->addtext($template_info{"TemplateName"});
5897 $kiriwrite_presmodule->endcell();
5898 $kiriwrite_presmodule->addcell($template_stylename);
5900 # Check if the template description is blank and if
5901 # it is then write a message to say there's no
5902 # description for the template.
5904 if (!$template_info{"TemplateDescription"}){
5905 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
5907 $kiriwrite_presmodule->addtext($template_info{"TemplateDescription"});
5910 $kiriwrite_presmodule->endcell();
5911 $kiriwrite_presmodule->addcell($template_stylename);
5912 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template&action=edit&template=" . $template_info{"TemplateFilename"}, { Text => $kiriwrite_lang->{options}->{edit} });
5913 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template&action=delete&template=" . $template_info{"TemplateFilename"}, { Text => $kiriwrite_lang->{options}->{delete} });
5914 $kiriwrite_presmodule->endcell();
5915 $kiriwrite_presmodule->endrow();
5919 $kiriwrite_presmodule->endtable();
5923 # Disconnect from the database server.
5925 $kiriwrite_dbmodule->disconnect();
5927 $kiriwrite_dbmodule->disconnecttemplate();
5928 return $kiriwrite_presmodule->grab();
5933 sub kiriwrite_database_add{
5934 #################################################################################
5935 # kiriwrite_database_add: Creates a new database. #
5939 # kiriwrite_database_add(filename, name, description, notes, categories, #
5942 # filename Specifies the filename for the database. #
5943 # name Specifies a (friendly) name for the database. #
5944 # description Specifies a description for the database. #
5945 # notes Specifies the notes for the database. #
5946 # categories Specifies the categories for the database. #
5947 # confirm Confirms the action to create a database. #
5948 #################################################################################
5950 # Get the variables passed from the subroutine.
5952 my ($database_filename, $database_name, $database_description, $database_notes, $database_categories, $database_confirm) = @_;
5954 # Check if the confirm value is blank and if it is then
5955 # set the confirm value to 0.
5957 if (!$database_confirm){
5959 # The confirm value was blank so set the value to 0.
5961 $database_confirm = 0;
5965 if ($database_confirm eq 1){
5967 # The action to create a new database is confirmed.
5969 # Validate the database name and database descriptions.
5971 my $database_name_check_utf8 = kiriwrite_variablecheck($database_name, "utf8", 0, 0);
5972 my $database_description_check_utf8 = kiriwrite_variablecheck($database_description, "utf8", 0, 0);
5973 my $database_notes_check_utf8 = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
5974 my $database_categories_check_utf8 = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
5976 # Convert the UTF8 strings before checking the length of the strings.
5978 $database_name = kiriwrite_utf8convert($database_name);
5979 $database_description = kiriwrite_utf8convert($database_description);
5980 $database_notes = kiriwrite_utf8convert($database_notes);
5981 $database_categories = kiriwrite_utf8convert($database_categories);
5983 my $database_name_check_blank = kiriwrite_variablecheck($database_name, "blank", 0, 1);
5984 my $database_name_check_length = kiriwrite_variablecheck($database_name, "maxlength", 256, 1);
5985 my $database_description_check_length = kiriwrite_variablecheck($database_description, "maxlength", 512, 1);
5986 my $database_filename_check_length = kiriwrite_variablecheck($database_filename, "maxlength", 32, 1);
5987 my $database_categories_check_length = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
5989 # Check if values returned contains any values that would
5990 # result in a specific error message being returned.
5992 if ($database_name_check_length eq 1){
5994 # The length of the database name is too long, so return an error.
5995 kiriwrite_error("databasenametoolong");
5999 if ($database_description_check_length eq 1){
6001 # The database description length is too long, so return an error.
6002 kiriwrite_error("databasedescriptiontoolong");
6006 if ($database_name_check_blank eq 1){
6008 # The database name is blank, so return an error.
6009 kiriwrite_error("databasenameblank");
6013 if ($database_filename_check_length eq 1){
6015 # The database filename is to long, so return an error.
6016 kiriwrite_error("databasefilenametoolong");
6020 if ($database_categories_check_length eq 1){
6022 # The database categories is too long, so return an error.
6023 kiriwrite_error("databasecategoriestoolong");
6027 # Check if the database filename is blank and if it is then
6028 # generate a filename.
6030 if ($database_filename eq ""){
6032 # Filename is blank so generate a file name from
6033 # the database name.
6035 $database_filename = kiriwrite_processfilename($database_name);
6039 # Filename is not blank so don't generate a filename.
6043 kiriwrite_variablecheck($database_filename, "filename", "", 0);
6044 kiriwrite_variablecheck($database_filename, "maxlength", 32, 0);
6046 # Connect to the database server.
6048 $kiriwrite_dbmodule->connect();
6050 # Check if any errors occured while connecting to the database server.
6052 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6054 # A database connection error has occured so return
6057 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6061 my $database_name_final = $database_name;
6063 # Create the database.
6065 $kiriwrite_dbmodule->adddatabase({ DatabaseFilename => $database_filename, DatabaseName => $database_name, DatabaseDescription => $database_description, DatabaseNotes => $database_notes, DatabaseCategories => $database_categories, VersionMajor => $kiriwrite_version{"major"}, VersionMinor => $kiriwrite_version{"minor"}, VersionRevision => $kiriwrite_version{"revision"} });
6067 # Check if any errors have occured.
6069 if ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
6071 # A database with the filename given already exists, so
6074 kiriwrite_error("fileexists");
6076 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6078 # A database error has occured so return an error with
6079 # the extended error information.
6081 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6085 # Disconnect from the database server.
6087 $kiriwrite_dbmodule->disconnect();
6089 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
6090 $kiriwrite_presmodule->addlinebreak();
6091 $kiriwrite_presmodule->addlinebreak();
6092 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseadded} , $database_name_final));
6093 $kiriwrite_presmodule->addlinebreak();
6094 $kiriwrite_presmodule->addlinebreak();
6095 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6097 return $kiriwrite_presmodule->grab();
6101 # There is confirm value is not 1, so write a form for creating a database to
6104 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
6105 $kiriwrite_presmodule->addlinebreak();
6106 $kiriwrite_presmodule->addlinebreak();
6107 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6108 $kiriwrite_presmodule->startbox();
6109 $kiriwrite_presmodule->addhiddendata("mode", "db");
6110 $kiriwrite_presmodule->addhiddendata("action", "new");
6111 $kiriwrite_presmodule->addhiddendata("confirm", "1");
6112 $kiriwrite_presmodule->endbox();
6113 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
6115 $kiriwrite_presmodule->startheader();
6116 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader"});
6117 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader"});
6118 $kiriwrite_presmodule->endheader();
6120 $kiriwrite_presmodule->startrow();
6121 $kiriwrite_presmodule->addcell("tablecell1");
6122 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
6123 $kiriwrite_presmodule->endcell();
6124 $kiriwrite_presmodule->addcell("tablecell2");
6125 $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256 });
6126 $kiriwrite_presmodule->endcell();
6127 $kiriwrite_presmodule->endrow();
6129 $kiriwrite_presmodule->startrow();
6130 $kiriwrite_presmodule->addcell("tablecell1");
6131 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
6132 $kiriwrite_presmodule->endcell();
6133 $kiriwrite_presmodule->addcell("tablecell2");
6134 $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512 });
6135 $kiriwrite_presmodule->endcell();
6136 $kiriwrite_presmodule->endrow();
6138 $kiriwrite_presmodule->startrow();
6139 $kiriwrite_presmodule->addcell("tablecell1");
6140 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
6141 $kiriwrite_presmodule->endcell();
6142 $kiriwrite_presmodule->addcell("tablecell2");
6143 $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512 });
6144 $kiriwrite_presmodule->endcell();
6145 $kiriwrite_presmodule->endrow();
6147 $kiriwrite_presmodule->startrow();
6148 $kiriwrite_presmodule->addcell("tablecell1");
6149 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
6150 $kiriwrite_presmodule->endcell();
6151 $kiriwrite_presmodule->addcell("tablecell2");
6152 $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => 50, Rows => 10, WordWrap => 0 });
6153 $kiriwrite_presmodule->endcell();
6154 $kiriwrite_presmodule->endrow();
6156 $kiriwrite_presmodule->startrow();
6157 $kiriwrite_presmodule->addcell("tablecell1");
6158 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
6159 $kiriwrite_presmodule->endcell();
6160 $kiriwrite_presmodule->addcell("tablecell2");
6161 $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32 });
6162 $kiriwrite_presmodule->startlist();
6163 $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabaseautogenerate});
6164 $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasenoextensions});
6165 $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacterlength});
6166 $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacters});
6167 $kiriwrite_presmodule->endlist();
6168 $kiriwrite_presmodule->endcell();
6169 $kiriwrite_presmodule->endrow();
6171 $kiriwrite_presmodule->endtable();
6172 $kiriwrite_presmodule->startbox();
6173 $kiriwrite_presmodule->addlinebreak();
6174 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{adddatabasebutton});
6175 $kiriwrite_presmodule->addtext("|");
6176 $kiriwrite_presmodule->addreset($kiriwrite_lang->{database}->{clearvaluesbutton});
6177 $kiriwrite_presmodule->addtext("| ");
6178 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6179 $kiriwrite_presmodule->endbox();
6180 $kiriwrite_presmodule->endform();
6182 # Exit the subroutine taking the data in the pagadata variable with it.
6184 return $kiriwrite_presmodule->grab();
6188 sub kiriwrite_database_edit{
6189 #################################################################################
6190 # kiriwrite_database_edit: Edits an database. #
6194 # kiriwrite_database_edit(filename, newfilename, newname, newdescription, #
6195 # notes, categories, [confirm]); #
6197 # filename Specifies the filename of the database. #
6198 # newfilename Specifies the new filename of the database. #
6199 # newname Specifies the new name of the database. #
6200 # newdescription Specifies the new description of the database. #
6201 # notes Specifies the new notes of the database. #
6202 # categories Specifies the new categories of the database. #
6203 # confirm Confirms the action to edit a database. #
6204 #################################################################################
6206 # First, get all the variables passed to the subroutine.
6208 my ($database_shortname, $database_newfilename, $database_newname, $database_newdescription, $database_notes, $database_categories, $database_confirm) = @_;
6210 # Check if the database confirm value is blank and if it is
6211 # set the confirm value to 0.
6213 if (!$database_confirm){
6215 $database_confirm = 0;
6219 # Check if the database filename given is valid and return an error
6222 kiriwrite_variablecheck($database_shortname, "filename", "", 0);
6224 # Check if the confirm variable has a value in it, if it has, check again to make sure it really is the correct value (Perl moans
6225 # if $database_confirm was used directly).
6227 if ($database_confirm eq 1){
6229 # Check if the new data passes the validation tests below. First, check the length of the variables.
6231 my $database_name_check_utf8 = kiriwrite_variablecheck($database_newname, "utf8", 0, 0);
6232 my $database_description_check_utf8 = kiriwrite_variablecheck($database_newdescription, "utf8", 0, 0);
6233 my $database_notes_check_utf8 = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
6234 my $database_categories_check_utf8 = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
6236 # Convert the UTF8 strings to make sure their length is accurate.
6238 $database_newname = kiriwrite_utf8convert($database_newname);
6239 $database_newdescription = kiriwrite_utf8convert($database_newdescription);
6240 $database_notes = kiriwrite_utf8convert($database_notes);
6241 $database_categories = kiriwrite_utf8convert($database_categories);
6243 # Preform the following tests.
6245 my $database_filename_check_length = kiriwrite_variablecheck($database_newfilename, "maxlength", 32, 1);
6246 my $database_filename_letnum = kiriwrite_variablecheck($database_newfilename, "filename", 0, 0);
6247 my $database_name_check_length = kiriwrite_variablecheck($database_newname, "maxlength", 256, 1);
6248 my $database_description_check_length = kiriwrite_variablecheck($database_newdescription, "maxlength", 512, 1);
6249 my $database_categories_check_length = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
6250 my $database_name_check_blank = kiriwrite_variablecheck($database_newname, "blank", 0, 1);
6252 # Check if the data is valid and return a specific error if it doesn't.
6254 if ($database_name_check_length eq 1){
6256 # The length of the database name is too long, so return an error.
6257 kiriwrite_error("databasenametoolong");
6261 if ($database_description_check_length eq 1){
6263 # The database description length is too long, so return an error.
6264 kiriwrite_error("databasedescriptiontoolong");
6268 if ($database_name_check_blank eq 1){
6270 # The database name is blank, so return an error.
6271 kiriwrite_error("databasenameblank");
6275 if ($database_filename_check_length eq 1){
6277 # The database filename is too long, so return an error.
6278 kiriwrite_error("databasefilenametoolong");
6282 if ($database_categories_check_length eq 1){
6284 # The database categories is too long, so return an error.
6285 kiriwrite_error("databasecategoriestoolong");
6289 # Connect to the database server.
6291 $kiriwrite_dbmodule->connect();
6293 # Check if any errors occured while connecting to the database server.
6295 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6297 # A database connection error has occured so return
6300 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6306 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
6308 # Check if any errors had occured while selecting the database.
6310 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6312 # The database does not exist, so return an error.
6314 kiriwrite_error("databasemissingfile");
6316 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6318 # The database has invalid permissions set, so return
6321 kiriwrite_error("databaseinvalidpermissions");
6327 $kiriwrite_dbmodule->editdatabase({ DatabaseNewFilename => $database_newfilename, DatabaseName => $database_newname , DatabaseDescription => $database_newdescription , DatabaseNotes => $database_notes, DatabaseCategories => $database_categories });
6329 # Check if any errors had occured while using the database.
6331 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6333 # The database does not exist, so return an error.
6335 kiriwrite_error("databasemissingfile");
6337 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6339 # The database has invalid permissions set, so return
6342 kiriwrite_error("databaseinvalidpermissions");
6344 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
6346 # The database directory has invalid permissions set, so
6349 kiriwrite_error("datadirectoryinvalidpermissions");
6351 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
6353 # A database already exists with the new filename, so
6356 kiriwrite_error("databasealreadyexists");
6358 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6360 # A database error has occured so return an error with
6361 # the extended error information.
6363 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6367 # Disconnect from the server.
6369 $kiriwrite_dbmodule->disconnect();
6371 # Write out a message saying that the database has been updated.
6373 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{editeddatabase}, { Style => "pageheader" } );
6374 $kiriwrite_presmodule->addlinebreak();
6375 $kiriwrite_presmodule->addlinebreak();
6376 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseupdated}, $database_newname));
6377 $kiriwrite_presmodule->addlinebreak();
6378 $kiriwrite_presmodule->addlinebreak();
6379 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6381 return $kiriwrite_presmodule->grab();
6385 my (%database_info);
6387 # Check if the database filename given is valid and return an error
6390 # Connect to the database server.
6392 $kiriwrite_dbmodule->connect();
6394 # Check if any errors occured while connecting to the database server.
6396 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6398 # A database connection error has occured so return
6401 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6405 # Select the database.
6407 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
6409 # Check if any errors had occured while setting the database.
6411 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6413 # The database does not exist, so return an error.
6415 kiriwrite_error("databasemissingfile");
6417 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6419 # The database has invalid permissions set, so return
6422 kiriwrite_error("databaseinvalidpermissions");
6426 # Get the database information.
6428 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6430 # Check if any errors had occured while getting the database
6433 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6435 # A database error has occured so return an error and
6436 # also the extended error information.
6438 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6442 # Get the values needed from the kiriwrite_database_info table.
6444 my $database_oldname = $database_info{"DatabaseName"};
6445 my $database_olddescription = $database_info{"Description"};
6446 my $database_notes = $database_info{"Notes"};
6447 my $database_categories = $database_info{"Categories"};
6449 # Disconnect from the database server.
6451 $kiriwrite_dbmodule->disconnect();
6453 # Print out the form for editing a database's settings.
6455 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{editdatabase}, $database_oldname), { Style => "pageheader" });
6456 $kiriwrite_presmodule->addlinebreak();
6457 $kiriwrite_presmodule->addlinebreak();
6458 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6459 $kiriwrite_presmodule->startbox();
6460 $kiriwrite_presmodule->addhiddendata("mode", "db");
6461 $kiriwrite_presmodule->addhiddendata("action", "edit");
6462 $kiriwrite_presmodule->addhiddendata("database", $database_shortname);
6463 $kiriwrite_presmodule->addhiddendata("confirm", "1");
6464 $kiriwrite_presmodule->endbox();
6466 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
6467 $kiriwrite_presmodule->startheader();
6468 $kiriwrite_presmodule->addheader("Setting", { Style => "tablecellheader" });
6469 $kiriwrite_presmodule->addheader("Value", { Style => "tablecellheader" });
6470 $kiriwrite_presmodule->endheader();
6472 $kiriwrite_presmodule->startrow();
6473 $kiriwrite_presmodule->addcell("tablecell1");
6474 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
6475 $kiriwrite_presmodule->endcell();
6476 $kiriwrite_presmodule->addcell("tablecell2");
6477 $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256, Value => $database_oldname } );
6478 $kiriwrite_presmodule->endcell();
6479 $kiriwrite_presmodule->endrow();
6481 $kiriwrite_presmodule->startrow();
6482 $kiriwrite_presmodule->addcell("tablecell1");
6483 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
6484 $kiriwrite_presmodule->endcell();
6485 $kiriwrite_presmodule->addcell("tablecell2");
6486 $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512, Value => $database_olddescription } );
6487 $kiriwrite_presmodule->endcell();
6488 $kiriwrite_presmodule->endrow();
6490 $kiriwrite_presmodule->startrow();
6491 $kiriwrite_presmodule->addcell("tablecell1");
6492 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
6493 $kiriwrite_presmodule->endcell();
6494 $kiriwrite_presmodule->addcell("tablecell2");
6495 $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512, Value => $database_categories } );
6496 $kiriwrite_presmodule->endcell();
6497 $kiriwrite_presmodule->endrow();
6499 $kiriwrite_presmodule->startrow();
6500 $kiriwrite_presmodule->addcell("tablecell1");
6501 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
6502 $kiriwrite_presmodule->endcell();
6503 $kiriwrite_presmodule->addcell("tablecell2");
6504 $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => 50, Rows => 10, Value => $database_notes } );
6505 $kiriwrite_presmodule->endcell();
6506 $kiriwrite_presmodule->endrow();
6508 $kiriwrite_presmodule->startrow();
6509 $kiriwrite_presmodule->addcell("tablecell1");
6510 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
6511 $kiriwrite_presmodule->endcell();
6512 $kiriwrite_presmodule->addcell("tablecell2");
6513 $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32, Value => $database_shortname } );
6514 $kiriwrite_presmodule->endcell();
6515 $kiriwrite_presmodule->endrow();
6517 $kiriwrite_presmodule->endtable();
6519 $kiriwrite_presmodule->startbox();
6520 $kiriwrite_presmodule->addlinebreak();
6521 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{editdatabasebutton});
6522 $kiriwrite_presmodule->addtext(" | ");
6523 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
6524 $kiriwrite_presmodule->addtext(" | ");
6525 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6526 $kiriwrite_presmodule->endbox();
6527 $kiriwrite_presmodule->endform();
6529 return $kiriwrite_presmodule->grab();
6533 # The interpreter should not be here. So return an error saying invalid variable.
6535 kiriwrite_error("invalidvariable");
6539 sub kiriwrite_database_delete{
6540 #################################################################################
6541 # kiriwrite_database_delete: Deletes an database. #
6545 # kiriwrite_database_delete(filename, [confirm]); #
6547 # filename Specifies the filename for the database to be deleted. #
6548 # confirm Confirms the action to delete a database. #
6549 #################################################################################
6551 my ($database_filename, $database_confirm) = @_;
6553 # Check if the confirm value is blank and if it is then set the
6554 # confirm value to 0.
6556 if (!$database_confirm){
6558 $database_confirm = 0;
6562 # Connect to the database server.
6564 $kiriwrite_dbmodule->connect();
6566 # Check if any errors occured while connecting to the database server.
6568 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6570 # A database connection error has occured so return
6573 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6577 # Check if the database filename given is valid and return an error
6580 kiriwrite_variablecheck($database_filename, "filename", "", 0);
6582 # Check if the request to delete a database has been confirmed. If it has,
6583 # then delete the database itself.
6585 if ($database_confirm eq 1){
6586 # There is a value in the confirm variable of the HTTP query.
6588 # Select the database to delete and get the database name.
6590 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
6592 # Check if any error occured while selecting the database.
6594 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6596 # The database does not exist so return an error.
6598 kiriwrite_error("databasemissingfile");
6600 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6602 # The database has invalid permissions set so return
6605 kiriwrite_error("databaseinvalidpermissions");
6609 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6611 # Check if any errors have occured while getting the database
6614 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6616 # A database error has occured so return an error with
6617 # the extended error information.
6619 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6623 my $database_name = $database_info{"DatabaseName"};
6625 # Delete the selected database.
6627 $kiriwrite_dbmodule->deletedatabase({ DatabaseName => $database_filename });
6629 # Check if any error occured while deleting the database.
6631 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6633 # The database does not exist so return an error.
6635 kiriwrite_error("databasemissingfile");
6637 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6639 # The database has invalid permissions set so return
6642 kiriwrite_error("databaseinvalidpermissions");
6646 # Disconnect from the database server.
6648 $kiriwrite_dbmodule->disconnect();
6650 # Write a message saying that the database has been deleted.
6652 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deleteddatabase}, { Style => "pageheader" });
6653 $kiriwrite_presmodule->addlinebreak();
6654 $kiriwrite_presmodule->addlinebreak();
6655 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deleteddatabasemessage}, $database_name));
6656 $kiriwrite_presmodule->addlinebreak();
6657 $kiriwrite_presmodule->addlinebreak();
6658 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6660 return $kiriwrite_presmodule->grab();
6664 # The action has not been confirmed, so write out a form asking the
6667 # Get the database name.
6669 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
6671 # Check if any error occured while selecting the database.
6673 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6675 # The database does not exist so return an error.
6677 kiriwrite_error("databasemissingfile");
6679 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6681 # The database has invalid permissions set so return
6684 kiriwrite_error("databaseinvalidpermissions");
6689 # Check if any errors have occured.
6691 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6693 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6695 # A database error has occured so return an error with
6696 # the extended error information.
6698 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6702 my $database_name = $database_info{"DatabaseName"};
6704 # Disconnect from the database server.
6706 $kiriwrite_dbmodule->disconnect();
6708 # Write out the form to ask the user to confirm the deletion of the
6709 # selected database.
6711 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deletedatabase}, { Style => "pageheader" });
6712 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6713 $kiriwrite_presmodule->startbox();
6714 $kiriwrite_presmodule->addhiddendata("mode", "db");
6715 $kiriwrite_presmodule->addhiddendata("action", "delete");
6716 $kiriwrite_presmodule->addhiddendata("database", $database_filename);
6717 $kiriwrite_presmodule->addhiddendata("confirm", "1");
6718 $kiriwrite_presmodule->addlinebreak();
6719 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deletedatabasemessage}, $database_name));
6720 $kiriwrite_presmodule->addlinebreak();
6721 $kiriwrite_presmodule->addlinebreak();
6722 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{deletedatabasebutton});
6723 $kiriwrite_presmodule->addtext(" | ");
6724 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{deletedatabasereturn} });
6725 $kiriwrite_presmodule->endbox();
6726 $kiriwrite_presmodule->endform();
6728 return $kiriwrite_presmodule->grab();
6732 sub kiriwrite_database_list{
6733 #################################################################################
6734 # kiriwrite_database_list: Lists the databases available. #
6738 # kiriwrite_database_list(); #
6739 #################################################################################
6741 # Connect to the database server.
6743 $kiriwrite_dbmodule->connect();
6745 # Check if any errors occured while connecting to the database server.
6747 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6749 # A database connection error has occured so return
6752 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6756 # Get the list of available databases and process any errors that
6757 # might have occured.
6759 my @database_list = $kiriwrite_dbmodule->getdblist();
6761 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
6763 # The database directory is missing so return an error.
6765 kiriwrite_error("datadirectorymissing");
6767 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
6769 # The database directory has invalid permissions set so return
6772 kiriwrite_error("datadirectoryinvalidpermissions");
6776 # Declare the following variables that are going to be used before using
6777 # the foreach function.
6779 my ($database_info, %database_info);
6781 my @permissions_list;
6782 my $database_count = 0;
6783 my $database_filename = "";
6784 my $database_filename_friendly = "";
6785 my $database_filename_length = 0;
6786 my $database_name = "";
6787 my $database_description = "";
6788 my $database_permissions = "";
6789 my $nodescription = 0;
6792 my $table_style = 0;
6793 my $table_style_name = "";
6795 # Begin creating the table for the list of databases.
6797 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
6798 $kiriwrite_presmodule->addlinebreak();
6799 $kiriwrite_presmodule->addlinebreak();
6800 $kiriwrite_presmodule->starttable("", { CellPadding => "5", CellSpacing => "0" });
6801 $kiriwrite_presmodule->startheader();
6802 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
6803 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
6804 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databaseoptions}, { Style => "tablecellheader" });
6805 $kiriwrite_presmodule->endheader();
6807 foreach $data_file (@database_list){
6809 # Select the database.
6811 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
6813 # Check if any error occured while selecting the database.
6815 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6817 # The database does not exist, so process the next
6822 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6824 # The database has invalid permissions settings, so
6825 # add the database to the list of databases with
6826 # invalid permissions set and process the next
6829 push(@permissions_list, $data_file);
6834 # Get information about the database.
6836 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6838 # Check if any error occured while getting information from the
6841 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6843 # A database error has occured, add the database and specific
6844 # error message to the list of databases with errors and
6845 # process the next database.
6847 push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
6852 $database_name = $database_info{"DatabaseName"};
6853 $database_description = $database_info{"Description"};
6855 # Check the style to be used with.
6857 if ($table_style eq 0){
6859 # Use the first style and set the style value
6860 # to use the next style, the next time the
6861 # if statement is checked.
6863 $table_style_name = "tablecell1";
6867 # Use the second style and set the style
6868 # value to use the first style, the next
6869 # time if statement is checked.
6871 $table_style_name = "tablecell2";
6875 # Create a friendly name for the database.
6877 $database_filename_friendly = $data_file;
6879 # Append the database information to the table.
6881 $kiriwrite_presmodule->startrow();
6882 $kiriwrite_presmodule->addcell($table_style_name);
6884 if (!$database_name){
6885 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
6887 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_filename_friendly, { Text => $database_name });
6890 $kiriwrite_presmodule->endcell();
6891 $kiriwrite_presmodule->addcell($table_style_name);
6893 if (!$database_description){
6894 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
6896 $kiriwrite_presmodule->addtext($database_description);
6899 $kiriwrite_presmodule->endcell();
6900 $kiriwrite_presmodule->addcell($table_style_name);
6901 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=edit&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{edit} });
6902 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=compile&type=single&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{compile} });
6903 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=delete&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{delete} });
6904 $kiriwrite_presmodule->endrow();
6912 $kiriwrite_presmodule->endtable();
6914 # Disconnect from the database server.
6916 $kiriwrite_dbmodule->disconnect();
6918 # Check if there are no valid databases are if there is no
6919 # valid databases then write a message saying that no
6920 # valid databases are available.
6922 if ($database_count eq 0){
6924 $kiriwrite_presmodule->clear();
6925 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
6926 $kiriwrite_presmodule->addlinebreak();
6927 $kiriwrite_presmodule->addlinebreak();
6928 $kiriwrite_presmodule->startbox("errorbox");
6929 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{nodatabasesavailable});
6930 $kiriwrite_presmodule->endbox();
6934 # Check if any databases with problems have appeared and if they
6935 # have, print out a message saying which databases have problems.
6937 if (@permissions_list){
6939 $kiriwrite_presmodule->addlinebreak();
6940 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
6941 $kiriwrite_presmodule->addlinebreak();
6942 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
6943 $kiriwrite_presmodule->addlinebreak();
6945 foreach $data_file (@permissions_list){
6946 $kiriwrite_presmodule->addlinebreak();
6947 $kiriwrite_presmodule->addtext($data_file);
6950 $kiriwrite_presmodule->addlinebreak();
6956 $kiriwrite_presmodule->addlinebreak();
6957 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
6958 $kiriwrite_presmodule->addlinebreak();
6959 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
6960 $kiriwrite_presmodule->addlinebreak();
6962 foreach $data_file (@error_list){
6963 $kiriwrite_presmodule->addlinebreak();
6964 $kiriwrite_presmodule->addtext($data_file);
6967 $kiriwrite_presmodule->addlinebreak();
6971 return $kiriwrite_presmodule->grab(); # Return to the main part of the script with the processed information.
6976 sub kiriwrite_filter_list{
6977 #################################################################################
6978 # kiriwrite_filter_list: Lists the filters that will be used when compiling a #
6983 # kiriwrite_filter_list(); #
6984 #################################################################################
6986 my $filtersdb_notexist = 0;
6988 # Connect to the database server.
6990 $kiriwrite_dbmodule->connect();
6992 # Check if any errors occured while connecting to the database server.
6994 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6996 # A database connection error has occured so return
6999 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7003 # Connect to the filter database.
7005 $kiriwrite_dbmodule->connectfilter();
7007 # Check if any error has occured while connecting to the filter
7010 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7012 # The filter database does not exist.
7014 $filtersdb_notexist = 1;
7016 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7018 # The filter database has invalid permissions set so return
7021 kiriwrite_error("filtersdbpermissions");
7023 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7025 # A database error has occured with the filter database.
7027 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7031 # Define some variables required for processing the filters list.
7035 my @database_filters;
7036 my $blankfindfilter = 0;
7037 my $filterswarning = "";
7039 my $filter_count = 0;
7040 my $filter_style = 0;
7041 my $filter_style_name = "";
7043 tie(%filter_list, 'Tie::IxHash');
7045 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{viewfilters}, { Style => "pageheader" });
7046 $kiriwrite_presmodule->addlinebreak();
7047 $kiriwrite_presmodule->addlinebreak();
7049 # If the filter database exists then get the list of filters,
7050 # otherwise write a message saying that the filter database
7051 # does not exist and will be created when a filter is added.
7053 if ($filtersdb_notexist eq 0){
7055 # Get the list of available filters.
7057 @database_filters = $kiriwrite_dbmodule->getfilterlist();
7059 # Check if any errors occured while getting the list of filters.
7061 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7063 # A database error has occured with the filter database.
7065 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7069 # Process each filter getting the priority, find setting and
7072 foreach $filter (@database_filters){
7074 # Get the information about the filter.
7076 %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
7078 # Check if any errors occured while getting the filter information.
7080 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7082 # A database error occured while using the filter database.
7084 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7086 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7088 # The filter does not exist so process the next filter.
7094 # Check if the find filter is blank.
7096 if (!$filter_info{"FilterFind"}){
7098 # The find filter is blank, so set the value to write a warning
7099 # message saying that a find filter given is blank.
7101 $blankfindfilter = 1;
7105 $filter_list{$filter_count}{ID} = $filter_info{"FilterID"};
7106 $filter_list{$filter_count}{Priority} = $filter_info{"FilterPriority"};
7107 $filter_list{$filter_count}{Find} = $filter_info{"FilterFind"};
7108 $filter_list{$filter_count}{Replace} = $filter_info{"FilterReplace"};
7109 $filter_list{$filter_count}{Notes} = $filter_info{"FilterNotes"};
7115 # Check if there are filters in the filter database and
7116 # write a message if there isn't.
7118 if ($filter_count eq 0){
7120 # There are no filters in the filter database.
7122 $filterswarning = $kiriwrite_lang->{filter}->{nofiltersavailable};
7128 # Check if the database wasn't found and if it
7129 # wasn't then write a message saying that the
7130 # database will be created when a filter is
7133 if ($filtersdb_notexist eq 1){
7135 # The filter database doesn't exist so write
7138 $filterswarning = $kiriwrite_lang->{filter}->{filterdatabasedoesnotexist};
7143 # Check if there is a warning message and if
7144 # there is then write that warning message
7145 # else write the list of filters.
7147 if ($filterswarning){
7149 $kiriwrite_presmodule->startbox("errorbox");
7150 $kiriwrite_presmodule->addtext($filterswarning);
7151 $kiriwrite_presmodule->endbox();
7155 # The filter database exists so write out the
7158 if ($blankfindfilter eq 1){
7160 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{filter}->{warningtitle});
7161 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{blankfindfilters});
7162 $kiriwrite_presmodule->addtext();
7163 $kiriwrite_presmodule->addlinebreak();
7164 $kiriwrite_presmodule->addlinebreak();
7168 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7170 $kiriwrite_presmodule->startheader();
7171 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{priority}, { Style => "tablecellheader" });
7172 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{findsetting}, { Style => "tablecellheader" });
7173 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{replacesetting}, { Style => "tablecellheader" });
7174 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
7175 $kiriwrite_presmodule->endheader();
7177 foreach $filter (keys %filter_list){
7179 # Check which style should be used.
7181 if ($filter_style eq 0){
7183 $filter_style_name = "tablecell1";
7188 $filter_style_name = "tablecell2";
7193 $kiriwrite_presmodule->startrow();
7194 $kiriwrite_presmodule->addcell($filter_style_name);
7195 $kiriwrite_presmodule->addtext($filter_list{$filter}{Priority});
7196 $kiriwrite_presmodule->endcell();
7197 $kiriwrite_presmodule->addcell($filter_style_name);
7199 # Check if the find filter is blank.
7201 if (!$filter_list{$filter}{Find}){
7203 # The find filter is blank.
7205 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{filter}->{blankfindsetting});
7209 # The find filter is not blank.
7211 $kiriwrite_presmodule->addtext($filter_list{$filter}{Find});
7215 $kiriwrite_presmodule->endcell();
7216 $kiriwrite_presmodule->addcell($filter_style_name);
7218 # Check if the replace filter is blank.
7220 if (!$filter_list{$filter}{Replace}){
7222 # The replace filter is blank.
7224 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{filter}->{blankreplacesetting});
7228 # The replace filter is not blank.
7230 $kiriwrite_presmodule->addtext($filter_list{$filter}{Replace});
7234 $kiriwrite_presmodule->endcell();
7235 $kiriwrite_presmodule->addcell($filter_style_name);
7236 $kiriwrite_presmodule->addlink("?mode=filter&action=edit&filter=" . $filter_list{$filter}{ID}, { Text => $kiriwrite_lang->{options}->{edit} });
7237 $kiriwrite_presmodule->addlink("?mode=filter&action=delete&filter=" . $filter_list{$filter}{ID}, { Text => $kiriwrite_lang->{options}->{delete} });
7238 $kiriwrite_presmodule->endcell();
7239 $kiriwrite_presmodule->endrow();
7243 $kiriwrite_presmodule->endtable();
7247 # Disconnect from the filter database.
7249 $kiriwrite_dbmodule->disconnectfilter();
7251 # Disconnect from the database server.
7253 $kiriwrite_dbmodule->disconnect();
7255 return $kiriwrite_presmodule->grab();
7259 sub kiriwrite_filter_add{
7260 #################################################################################
7261 # kiriwrite_filter_add: Adds a filter to the filter list. #
7265 # kiriwrite_filter_add(filterfind, filterreplace, filterpriority, #
7266 # filternotes, [confirm]); #
7268 # filterfind Specifies the new word(s) to find. #
7269 # filterreplace Specifies the new word(s) to replace. #
7270 # filterpriority Specifies the new priority to use. #
7271 # filternotes Specifies the new notes to use. #
7272 # confirm Confirms the action to add a filter. #
7273 #################################################################################
7275 # Get the values that have been passed to the subroutine.
7277 my ($filter_new_find, $filter_new_replace, $filter_new_priority, $filter_new_notes, $confirm) = @_;
7279 # Check the confirm value to make sure it is no more than
7280 # one character long.
7282 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
7286 # The confirm value is undefined, so set the
7287 # value of the confirm integer to '0'.
7295 # The confirm integer is '1', so add the word
7296 # to the filter list.
7298 # First, check the variables recieved are UTF8
7301 kiriwrite_variablecheck($filter_new_find, "utf8", 0, 0);
7302 kiriwrite_variablecheck($filter_new_replace, "utf8", 0, 0);
7303 kiriwrite_variablecheck($filter_new_priority, "utf8", 0, 0);
7304 kiriwrite_variablecheck($filter_new_notes, "utf8", 0, 0);
7306 # Convert the UTF8 values so that the length can
7309 $filter_new_find = kiriwrite_utf8convert($filter_new_find);
7310 $filter_new_replace = kiriwrite_utf8convert($filter_new_replace);
7311 $filter_new_priority = kiriwrite_utf8convert($filter_new_priority);
7312 $filter_new_notes = kiriwrite_utf8convert($filter_new_notes);
7314 # Check if the find filter is blank and return an error
7317 if (!$filter_new_find){
7319 # The find filter given is blank so return an
7322 kiriwrite_error("blankfindfilter");
7326 if (!$filter_new_priority){
7328 # The filter priority is blank so set it
7331 $filter_new_priority = 1;
7335 # Check the length and contents of the values given
7336 # to make sure they are valid.
7338 my $filterfind_maxlength_check = kiriwrite_variablecheck($filter_new_find, "maxlength", 1024, 1);
7339 my $filterreplace_maxlength_check = kiriwrite_variablecheck($filter_new_replace, "maxlength", 1024, 1);
7340 my $filterpriority_maxlength_check = kiriwrite_variablecheck($filter_new_priority, "maxlength", 5, 1);
7341 my $filterpriority_numbers_check = kiriwrite_variablecheck($filter_new_priority, "numbers", 0, 1);
7343 # Check if the result of the tests to see if they
7346 if ($filterfind_maxlength_check eq 1){
7348 # The find filter is too long, so return
7351 kiriwrite_error("findfiltertoolong");
7355 if ($filterreplace_maxlength_check eq 1){
7357 # The replace filter is too long, so
7360 kiriwrite_error("replacefiltertoolong");
7364 if ($filterpriority_maxlength_check eq 1){
7366 # The length of the filter priority
7367 # given is too long, so return an
7370 kiriwrite_error("filterprioritytoolong");
7374 if ($filterpriority_numbers_check eq 1){
7376 # The priority of the filter given
7377 # contains characters other than
7380 kiriwrite_error("filterpriorityinvalidchars");
7384 # Check if the filter priority is less than 1
7385 # and more than 10000 and return an error
7388 if ($filter_new_priority < 1 || $filter_new_priority > 50000){
7390 # The filter priority is less than 1 and
7391 # more than 10000, so return an error.
7393 kiriwrite_error("filterpriorityinvalid");
7397 # Connect to the database server.
7399 $kiriwrite_dbmodule->connect();
7401 # Check if any errors occured while connecting to the database server.
7403 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7405 # A database connection error has occured so return
7408 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7412 # Connect to the filter database.
7414 $kiriwrite_dbmodule->connectfilter(1);
7416 # Check if any error has occured while connecting to the filter
7419 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7421 # The filter database does not exist.
7423 kiriwrite_error("filtersdbmissing");
7425 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7427 # The filter database has invalid permissions set so return
7430 kiriwrite_error("filtersdbpermissions");
7434 # Add the filter to the filter database.
7436 $kiriwrite_dbmodule->addfilter({ FindFilter => $filter_new_find, ReplaceFilter => $filter_new_replace, Priority => $filter_new_priority, Notes => $filter_new_notes});
7438 # Check if any errors have occured while adding the filter.
7440 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7442 # The filter database has invalid permissions set so return
7445 kiriwrite_error("filtersdbpermissions");
7447 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseUncreatable"){
7449 # The filter database is uncreatable so return an error.
7451 kiriwrite_error("filterdatabase");
7453 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7455 # A database error with the filter database has occured so return
7456 # an error with the extended error information.
7458 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7462 # Disconnect from the filter database.
7464 $kiriwrite_dbmodule->disconnectfilter();
7466 # Disconnect from the database server.
7468 $kiriwrite_dbmodule->disconnect();
7470 # Write out a message saying that the filter was added to the
7473 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{filteradded}, { Style => "pageheader" });
7474 $kiriwrite_presmodule->addlinebreak();
7475 $kiriwrite_presmodule->addlinebreak();
7476 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{filteraddedmessage});
7477 $kiriwrite_presmodule->addlinebreak();
7478 $kiriwrite_presmodule->addlinebreak();
7479 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7481 return $kiriwrite_presmodule->grab();
7483 } elsif ($confirm ne 0) {
7485 # The confirm integer is another value (which
7486 # it shouldn't be) so return an error.
7488 kiriwrite_error("invalidvalue");
7492 # The confirm integer was blank so print out a form
7493 # for adding a new filter.
7495 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{addfilter}, { Style => "pageheader" });
7496 $kiriwrite_presmodule->addlinebreak();
7497 $kiriwrite_presmodule->addlinebreak();
7498 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
7499 $kiriwrite_presmodule->startbox();
7500 $kiriwrite_presmodule->addhiddendata("mode", "filter");
7501 $kiriwrite_presmodule->addhiddendata("action", "add");
7502 $kiriwrite_presmodule->addhiddendata("confirm", 1);
7503 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7505 $kiriwrite_presmodule->startheader();
7506 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
7507 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
7508 $kiriwrite_presmodule->endheader();
7510 $kiriwrite_presmodule->startrow();
7511 $kiriwrite_presmodule->addcell("tablecell1");
7512 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
7513 $kiriwrite_presmodule->endcell();
7514 $kiriwrite_presmodule->addcell("tablecell2");
7515 $kiriwrite_presmodule->addinputbox("findword", { Size => 64, MaxLength => 1024 });
7516 $kiriwrite_presmodule->endcell();
7517 $kiriwrite_presmodule->endrow();
7519 $kiriwrite_presmodule->startrow();
7520 $kiriwrite_presmodule->addcell("tablecell1");
7521 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{replacefilter});
7522 $kiriwrite_presmodule->endcell();
7523 $kiriwrite_presmodule->addcell("tablecell2");
7524 $kiriwrite_presmodule->addinputbox("replaceword", { Size => 64, MaxLength => 1024 });
7525 $kiriwrite_presmodule->endcell();
7526 $kiriwrite_presmodule->endrow();
7528 $kiriwrite_presmodule->startrow();
7529 $kiriwrite_presmodule->addcell("tablecell1");
7530 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
7531 $kiriwrite_presmodule->endcell();
7532 $kiriwrite_presmodule->addcell("tablecell2");
7533 $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5 });
7534 $kiriwrite_presmodule->startlist();
7535 $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
7536 $kiriwrite_presmodule->endlist();
7537 $kiriwrite_presmodule->endcell();
7538 $kiriwrite_presmodule->endrow();
7540 $kiriwrite_presmodule->startrow();
7541 $kiriwrite_presmodule->addcell("tablecell1");
7542 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
7543 $kiriwrite_presmodule->endcell();
7544 $kiriwrite_presmodule->addcell("tablecell2");
7545 $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10 });
7546 $kiriwrite_presmodule->endcell();
7547 $kiriwrite_presmodule->endrow();
7549 $kiriwrite_presmodule->endtable();
7551 $kiriwrite_presmodule->addlinebreak();
7552 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{addfilterbutton});
7553 $kiriwrite_presmodule->addtext(" | ");
7554 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
7555 $kiriwrite_presmodule->addtext(" | ");
7556 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7558 $kiriwrite_presmodule->endbox();
7559 $kiriwrite_presmodule->endform();
7561 return $kiriwrite_presmodule->grab();
7565 sub kiriwrite_filter_edit{
7566 #################################################################################
7567 # kiriwrite_filter_edit: Edits a filter from the filter list. #
7571 # kiriwrite_filter_edit(filternumber, newfilterfind, newfilterreplace, #
7572 # newfilterpriority, newfilternotes, confirm); #
7574 # filterid Specifies the filter number (line number) in the #
7575 # filter database. #
7576 # newfilterfind Specifies the new word to find. #
7577 # newfilterreplace Specifies the new word to replace. #
7578 # newfilterpriority Specifies the new filter priority. #
7579 # newfilternotes Specifies the new filter notes. #
7580 # confirm Confirms the action to edit a filter. #
7581 #################################################################################
7583 # Get the values that have been passed to the subroutine.
7585 my ($filter_id, $filter_new_find, $filter_new_replace, $filter_new_priority, $filter_new_notes, $confirm) = @_;
7587 # Check the confirm value to make sure it is no more than
7588 # one character long.
7590 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
7592 # Check if the confirm value is blank and if it is
7593 # srt the confirm value to 0.
7597 # The confirm value does not have any value
7598 # set so set it to 0.
7604 # Check if the filter identification number is blank,
7605 # contains characters other than numbers and is more
7606 # than seven characters long.
7610 # The filter identification number is blank,
7611 # so return an error.
7613 kiriwrite_error("filteridblank");
7617 my $filter_id_numbers_check = kiriwrite_variablecheck($filter_id, "numbers", 0, 1);
7619 if ($filter_id_numbers_check eq 1){
7621 # The filter identification number contains
7622 # characters other than numbers, so return
7625 kiriwrite_error("filteridinvalid");
7629 my $filter_id_maxlength_check = kiriwrite_variablecheck($filter_id, "maxlength", 7, 1);
7631 if ($filter_id_maxlength_check eq 1){
7633 # The filter identification number given
7634 # is more than seven characters long, so
7637 kiriwrite_error("filteridtoolong");
7641 my $filter_priority;
7646 # Check if the action to edit a filter has been
7651 # The action to edit a filter has been confirmed so
7652 # edit the selected filter.
7654 # First, check the variables recieved are UTF8
7657 kiriwrite_variablecheck($filter_new_find, "utf8", 0, 0);
7658 kiriwrite_variablecheck($filter_new_replace, "utf8", 0, 0);
7659 kiriwrite_variablecheck($filter_new_priority, "utf8", 0, 0);
7660 kiriwrite_variablecheck($filter_new_notes, "utf8", 0, 0);
7662 # Convert the UTF8 values so that the length can
7665 $filter_find = kiriwrite_utf8convert($filter_new_find);
7666 $filter_replace = kiriwrite_utf8convert($filter_new_replace);
7667 $filter_priority = kiriwrite_utf8convert($filter_new_priority);
7668 $filter_notes = kiriwrite_utf8convert($filter_new_notes);
7670 # Check if the find filter is blank and return an error
7673 if (!$filter_new_find){
7675 # The find filter given is blank so return an
7678 kiriwrite_error("blankfindfilter");
7682 if (!$filter_new_priority){
7684 # The filter priority is blank so set it
7687 $filter_new_priority = 1;
7691 # Check the length and contents of the values given
7692 # to make sure they are valid.
7694 my $filterfind_maxlength_check = kiriwrite_variablecheck($filter_new_find, "maxlength", 1024, 1);
7695 my $filterreplace_maxlength_check = kiriwrite_variablecheck($filter_new_replace, "maxlength", 1024, 1);
7696 my $filterpriority_maxlength_check = kiriwrite_variablecheck($filter_new_priority, "maxlength", 5, 1);
7697 my $filterpriority_numbers_check = kiriwrite_variablecheck($filter_new_priority, "numbers", 0, 1);
7699 # Check if the result of the tests to see if they
7702 if ($filterfind_maxlength_check eq 1){
7704 # The find filter is too long, so return
7707 kiriwrite_error("findfiltertoolong");
7711 if ($filterreplace_maxlength_check eq 1){
7713 # The replace filter is too long, so
7716 kiriwrite_error("replacefiltertoolong");
7720 if ($filterpriority_maxlength_check eq 1){
7722 # The length of the filter priority
7723 # given is too long, so return an
7726 kiriwrite_error("filterprioritytoolong");
7730 if ($filterpriority_numbers_check eq 1){
7732 # The priority of the filter given
7733 # contains characters other than
7736 kiriwrite_error("filterpriorityinvalidchars");
7740 # Check if the filter priority is less than 1
7741 # and more than 10000 and return an error
7744 if ($filter_new_priority < 1 || $filter_new_priority > 50000){
7746 # The filter priority is less than 1 and
7747 # more than 10000, so return an error.
7749 kiriwrite_error("filterpriorityinvalid");
7753 # Connect to the database server.
7755 $kiriwrite_dbmodule->connect();
7757 # Check if any errors occured while connecting to the database server.
7759 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7761 # A database connection error has occured so return
7764 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7768 # Connect to the filter database.
7770 $kiriwrite_dbmodule->connectfilter();
7772 # Check if any error has occured while connecting to the filter
7775 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7777 # The filter database does not exist.
7779 kiriwrite_error("filtersdbmissing");
7781 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7783 # The filter database has invalid permissions set so return
7786 kiriwrite_error("filtersdbpermissions");
7788 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7790 # A database error has occured with the filter database.
7792 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7796 # Edit the selected filter in the filter database.
7798 $kiriwrite_dbmodule->editfilter({ FilterID => $filter_id, NewFindFilter => $filter_new_find, NewReplaceFilter => $filter_new_replace, NewFilterPriority => $filter_new_priority, NewFilterNotes => $filter_new_notes });
7800 # Check if any errors occured while editing the filter.
7802 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7804 # The filter database has invalid permissions set so return
7807 kiriwrite_error("filtersdbpermissions");
7809 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7811 # A database error has occured while using the filter database
7812 # so return an error.
7814 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7816 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7818 # The specified filter does not exist so return an error.
7820 kiriwrite_error("filterdoesnotexist");
7824 # Disconnect from the filter database.
7826 $kiriwrite_dbmodule->disconnectfilter();
7828 # Disconnect from the database server.
7830 $kiriwrite_dbmodule->disconnect();
7832 # Write a message saying that the filter was edited.
7834 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfilter}, { Style => "pageheader" });
7835 $kiriwrite_presmodule->addlinebreak();
7836 $kiriwrite_presmodule->addlinebreak();
7837 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfiltermessage});
7838 $kiriwrite_presmodule->addlinebreak();
7839 $kiriwrite_presmodule->addlinebreak();
7840 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist}});
7842 return $kiriwrite_presmodule->grab();
7844 } elsif ($confirm eq 0){
7846 # The action to edit a filter has not been confirmed
7847 # so write a form for editing the filter with.
7849 # Connect to the database server.
7851 $kiriwrite_dbmodule->connect();
7853 # Check if any errors occured while connecting to the database server.
7855 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7857 # A database connection error has occured so return
7860 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7864 # Connect to the database server.
7866 $kiriwrite_dbmodule->connect();
7868 # Check if any errors occured while connecting to the database server.
7870 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7872 # A database connection error has occured so return
7875 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7879 # Connect to the filter database.
7881 $kiriwrite_dbmodule->connectfilter();
7883 # Check if any error has occured while connecting to the filter
7886 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7888 # The filter database does not exist.
7890 kiriwrite_error("filtersdbmissing");
7892 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7894 # The filter database has invalid permissions set so return
7897 kiriwrite_error("filtersdbpermissions");
7899 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7901 # A database error has occured with the filter database.
7903 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7907 # Get information about the filter.
7909 my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
7911 # Check if any errors occured while getting information about the filter.
7913 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7915 # A database error occured while using the filter database so
7918 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7920 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7922 # The filter does not exist so return an error.
7924 kiriwrite_error("filterdoesnotexist");
7928 # Get the required information.
7930 $filter_priority = $filter_info{"FilterPriority"};
7931 $filter_find = $filter_info{"FilterFind"};
7932 $filter_replace = $filter_info{"FilterReplace"};
7933 $filter_notes = $filter_info{"FilterNotes"};
7935 # Disconnect from the filter database.
7937 $kiriwrite_dbmodule->disconnectfilter();
7939 # Disconnect from the database server.
7941 $kiriwrite_dbmodule->disconnect();
7943 # Write out the form.
7945 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editfilter}, { Style => "pageheader" });
7946 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
7947 $kiriwrite_presmodule->startbox();
7948 $kiriwrite_presmodule->addhiddendata("mode", "filter");
7949 $kiriwrite_presmodule->addhiddendata("action", "edit");
7950 $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
7951 $kiriwrite_presmodule->addhiddendata("confirm", 1);
7953 $kiriwrite_presmodule->addlinebreak();
7954 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7956 $kiriwrite_presmodule->startheader();
7957 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
7958 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
7959 $kiriwrite_presmodule->endheader();
7961 $kiriwrite_presmodule->startrow();
7962 $kiriwrite_presmodule->addcell("tablecell1");
7963 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
7964 $kiriwrite_presmodule->endcell();
7965 $kiriwrite_presmodule->addcell("tablecell2");
7966 $kiriwrite_presmodule->addinputbox("filterfind", { Size => 64, MaxLength => 1024, Value => $filter_find });
7967 $kiriwrite_presmodule->endcell();
7968 $kiriwrite_presmodule->endrow();
7970 $kiriwrite_presmodule->startrow();
7971 $kiriwrite_presmodule->addcell("tablecell1");
7972 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{replacefilter});
7973 $kiriwrite_presmodule->endcell();
7974 $kiriwrite_presmodule->addcell("tablecell2");
7975 $kiriwrite_presmodule->addinputbox("filterreplace", { Size => 64, MaxLength => 1024, Value => $filter_replace });
7976 $kiriwrite_presmodule->endcell();
7977 $kiriwrite_presmodule->endrow();
7979 $kiriwrite_presmodule->startrow();
7980 $kiriwrite_presmodule->addcell("tablecell1");
7981 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
7982 $kiriwrite_presmodule->endcell();
7983 $kiriwrite_presmodule->addcell("tablecell2");
7984 $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5, Value => $filter_priority });
7985 $kiriwrite_presmodule->startlist();
7986 $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
7987 $kiriwrite_presmodule->endlist();
7988 $kiriwrite_presmodule->endcell();
7989 $kiriwrite_presmodule->endrow();
7991 $kiriwrite_presmodule->startrow();
7992 $kiriwrite_presmodule->addcell("tablecell1");
7993 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
7994 $kiriwrite_presmodule->endcell();
7995 $kiriwrite_presmodule->addcell("tablecell2");
7996 $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10});
7997 $kiriwrite_presmodule->endcell();
7998 $kiriwrite_presmodule->endrow();
8000 $kiriwrite_presmodule->endtable();
8002 $kiriwrite_presmodule->addlinebreak();
8003 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{editfilterbutton});
8004 $kiriwrite_presmodule->addtext(" | ");
8005 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
8006 $kiriwrite_presmodule->addtext(" | ");
8007 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
8008 $kiriwrite_presmodule->endbox();
8009 $kiriwrite_presmodule->endform();
8011 return $kiriwrite_presmodule->grab();
8015 # A confirm value other than 0 or 1 has been
8016 # specified, so return an error.
8018 kiriwrite_error("invalidvalue");
8024 sub kiriwrite_filter_delete{
8025 #################################################################################
8026 # kiriwrite_filter_delete: Deletes a filter from the filter list. #
8030 # kiriwrite_filter_delete(filterid, confirm); #
8032 # filterid Specifies the filter line number to delete. #
8033 # confirm Confirms the deletion of the selected filter. #
8034 #################################################################################
8036 # Get the values that were passed to this subroutine.
8038 my ($filter_id, $confirm) = @_;
8040 # Check the confirm value to make sure it is no more than
8041 # one character long.
8043 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
8045 # Check if the confirm value is blank and if it is
8046 # srt the confirm value to 0.
8050 # The confirm value does not have any value
8051 # set so set it to 0.
8057 # Check if the filter identification number is blank,
8058 # contains characters other than numbers and is more
8059 # than seven characters long.
8063 # The filter identification number is blank,
8064 # so return an error.
8066 kiriwrite_error("filteridblank");
8070 my $filter_id_numbers_check = kiriwrite_variablecheck($filter_id, "numbers", 0, 1);
8072 if ($filter_id_numbers_check eq 1){
8074 # The filter identification number contains
8075 # characters other than numbers, so return
8078 kiriwrite_error("filteridinvalid");
8082 my $filter_id_maxlength_check = kiriwrite_variablecheck($filter_id, "maxlength", 7, 1);
8084 if ($filter_id_maxlength_check eq 1){
8086 # The filter identification number given
8087 # is more than seven characters long, so
8090 kiriwrite_error("filteridtoolong");
8094 # Define some values for later.
8096 my @database_filter;
8097 my $filter_exists = 0;
8099 # Check if the confirm integer has a value of '1'.
8103 # The action to delete a filter has been confirmed.
8105 # Connect to the database server.
8107 $kiriwrite_dbmodule->connect();
8109 # Check if any errors occured while connecting to the database server.
8111 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8113 # A database connection error has occured so return
8116 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8120 # Connect to the filter database.
8122 $kiriwrite_dbmodule->connectfilter();
8124 # Check if any error has occured while connecting to the filter
8127 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8129 # The filter database does not exist.
8131 kiriwrite_error("filtersdbmissing");
8133 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8135 # The filter database has invalid permissions set so return
8138 kiriwrite_error("filtersdbpermissions");
8140 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8142 # A database error has occured with the filter database.
8144 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8148 # Delete the filter from the filter database.
8150 $kiriwrite_dbmodule->deletefilter({ FilterID => $filter_id });
8152 # Check if any errors occured while deleting the filter.
8154 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8156 # A database error has occured while trying to delete a filter so
8159 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8161 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8163 # The filter does not exist so return an error.
8165 kiriwrite_error("filterdoesnotexist");
8169 # Disconnect from the filter database.
8171 $kiriwrite_dbmodule->disconnectfilter();
8173 # Disconnect from the database server.
8175 $kiriwrite_dbmodule->disconnect();
8177 # Write a message saying that the filter was deleted
8178 # from the filter database.
8180 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfilter}, { Style => "pageheader" });
8181 $kiriwrite_presmodule->addlinebreak();
8182 $kiriwrite_presmodule->addlinebreak();
8183 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfiltermessage});
8184 $kiriwrite_presmodule->addlinebreak();
8185 $kiriwrite_presmodule->addlinebreak();
8186 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
8188 } elsif ($confirm eq 0) {
8190 # Connect to the database server.
8192 $kiriwrite_dbmodule->connect();
8194 # Check if any errors occured while connecting to the database server.
8196 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8198 # A database connection error has occured so return
8201 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8205 # Connect to the filter database.
8207 $kiriwrite_dbmodule->connectfilter();
8209 # Check if any error has occured while connecting to the filter
8212 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8214 # The filter database does not exist.
8216 kiriwrite_error("filtersdbmissing");
8218 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8220 # The filter database has invalid permissions set so return
8223 kiriwrite_error("filtersdbpermissions");
8225 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8227 # A database error has occured with the filter database.
8229 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8233 # Get information about the filter (to check if it exists).
8235 my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
8237 # Check if any errors occured while getting information about the filter.
8239 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8241 # A database error occured while using the filter database so
8244 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8246 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8248 # The filter does not exist so return an error.
8250 kiriwrite_error("filterdoesnotexist");
8254 # Disconnect from the filter database.
8256 $kiriwrite_dbmodule->disconnectfilter();
8258 # Disconnect from the database
8260 # The confirm integer is '0', so continue write out
8261 # a form asking the user to confirm the deletion
8264 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefilter}, { Style => "pageheader" });
8265 $kiriwrite_presmodule->addlinebreak();
8266 $kiriwrite_presmodule->addlinebreak();
8267 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefiltermessage});
8268 $kiriwrite_presmodule->addlinebreak();
8269 $kiriwrite_presmodule->addlinebreak();
8270 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
8271 $kiriwrite_presmodule->startbox();
8272 $kiriwrite_presmodule->addhiddendata("mode", "filter");
8273 $kiriwrite_presmodule->addhiddendata("action", "delete");
8274 $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
8275 $kiriwrite_presmodule->addhiddendata("confirm", 1);
8276 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{deletefilterbutton});
8277 $kiriwrite_presmodule->addtext(" | ");
8278 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{deletefilterreturn} });
8279 $kiriwrite_presmodule->endbox();
8280 $kiriwrite_presmodule->endform();
8284 kiriwrite_error("invalidvalue");
8288 return $kiriwrite_presmodule->grab();
8292 sub kiriwrite_compile_makepages{
8293 #################################################################################
8294 # kiriwrite_compile_makepages: Compile the selected pages and place them in the #
8295 # specified output directory. #
8299 # kiriwrite_compile_makepages(type, selectedlist, confirm); #
8301 # type Specifies if single or multiple databases are to be compiled. #
8302 # confirm Specifies if the action to compile the databases should really #
8304 # selectedlist Specifies the databases to compile from as an array. #
8305 #################################################################################
8307 # Get the values that have been passed to the subroutine.
8309 my ($type, $confirm, @selectedlist) = @_;
8311 # Check if the confirm value is more than one
8314 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
8316 # Check if the confirm value is blank and if it
8317 # is then set the confirm value to 0.
8321 # The confirm value is blank, so set the
8322 # confirm value to 0.
8328 # Check if there are any databases selected
8329 # and return an error if there isn't.
8331 if (!@selectedlist){
8333 # There are no databases in the array
8334 # so return an error.
8336 kiriwrite_error("nodatabaseselected");
8340 # Check if the type given is no more than
8341 # 7 characters long.
8343 my $type_maxlength_check = kiriwrite_variablecheck($type, "maxlength", 8, 1);
8345 if ($type_maxlength_check eq 1){
8347 # The type length given is too long so
8350 kiriwrite_error("variabletoolong");
8354 # Check if the action to compile the databases
8355 # has been confirmed.
8359 # The action to compile the datavases has
8362 # Define some variables for later.
8376 my @pagedirectories;
8377 my @database_filters;
8378 my $warning_count = 0;
8379 my $error_count = 0;
8380 my $pages_count = 0;
8382 my $filters_count = 0;
8383 my $filters_find_blank_warning = 0;
8389 my $page_filename_check;
8390 my $page_filename_char = "";
8391 my $page_filename_directory;
8392 my $page_filename_length = 0;
8393 my $page_filename_seek = 0;
8394 my $page_filename_dircount = 0;
8395 my $page_filename_exists = 0;
8396 my $page_filename_permissions = 0;
8397 my $page_directory_name;
8398 my $page_directory_path;
8400 my $page_description;
8405 my $page_lastmodified;
8408 my $page_autosection;
8411 my $database_filename_check = 0;
8412 my $database_maxlength_check = 0;
8413 my $output_exists = 0;
8414 my $output_permissions = 0;
8415 my $filters_exists = 0;
8416 my $filters_permissions = 0;
8417 my $filters_skip = 0;
8419 my $templates_skip = 0;
8420 my $information_prefix = $kiriwrite_lang->{compile}->{informationprefix};
8421 my $error_prefix = $kiriwrite_lang->{compile}->{errorprefix};
8422 my $warning_prefix = $kiriwrite_lang->{compile}->{warningprefix};
8423 my $filehandle_page;
8425 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabases}, { Style => "pageheader" });
8426 $kiriwrite_presmodule->addlinebreak();
8427 $kiriwrite_presmodule->addlinebreak();
8428 $kiriwrite_presmodule->startbox("datalist");
8430 # Check if the output directory exists and has
8431 # valid permissions set.
8433 $output_exists = kiriwrite_fileexists($kiriwrite_config{'directory_data_output'});
8435 if ($output_exists ne 0){
8437 # The output directory does not exist so
8440 kiriwrite_error("outputdirectorymissing");
8444 $output_permissions = kiriwrite_filepermissions($kiriwrite_config{'directory_data_output'}, 1, 1);
8446 if ($output_permissions ne 0){
8448 # The output directory has invalid
8449 # permissions set so return an error.
8451 kiriwrite_error("outputdirectoryinvalidpermissions");
8455 # Connect to the database server.
8457 $kiriwrite_dbmodule->connect();
8459 # Check if any errors occured while connecting to the database server.
8461 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8463 # A database connection error has occured so return
8466 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8470 # Connect to the filter database.
8472 $kiriwrite_dbmodule->connectfilter();
8474 # Check if any error has occured while connecting to the filter
8477 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8479 # The filter database does not exist so write a warning message.
8481 $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{filterdatabasemissing});
8482 $kiriwrite_presmodule->addlinebreak();
8486 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8488 # The filter database has invalid permissions set so write a
8491 $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{filterdatabasepermissions});
8492 $kiriwrite_presmodule->addlinebreak();
8498 # Load the filter database (if the filters skip
8499 # value isn't set to 1).
8501 if ($filters_skip eq 0){
8503 # Get the list of available filters.
8505 @database_filters = $kiriwrite_dbmodule->getfilterlist();
8507 # Check if any errors occured while getting the list of filters.
8509 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8511 # A database error has occured with the filter database.
8513 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8514 $kiriwrite_presmodule->addlinebreak();
8519 # Check if the filters skip value is set to 0
8520 # before executing the query.
8522 if ($filters_skip eq 0){
8524 foreach $filter (@database_filters){
8526 # Get the filter information.
8528 %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
8530 # Check if any errors occured while getting the filter information.
8532 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8534 # A database error occured while using the filter database.
8536 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8537 $kiriwrite_presmodule->addlinebreak();
8541 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8543 # The filter does not exist so process the next filter.
8549 # Check if the find filter is blank and
8550 # if it is then write a warning message.
8552 if (!$filter_info{"FilterFind"}){
8554 if ($filters_find_blank_warning ne 1){
8556 $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{findfilterblank});
8557 $kiriwrite_presmodule->addlinebreak();
8558 $filters_find_blank_warning = 1;
8564 # Add each find and replace filter.
8566 $findfilter[$filters_count] = $filter_info{"FilterFind"};
8567 $replacefilter[$filters_count] = $filter_info{"FilterReplace"};
8575 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishfilterdatabase});
8576 $kiriwrite_presmodule->addlinebreak();
8582 # Disconnect from the filter database.
8584 $kiriwrite_dbmodule->disconnectfilter();
8586 # Connect to the template database.
8588 $kiriwrite_dbmodule->connecttemplate();
8590 # Check if any errors occured while connecting to the template database.
8592 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
8594 # The template database does not exist so set the template
8597 $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{templatedatabasemissing});
8598 $kiriwrite_presmodule->addlinebreak();
8599 $templates_skip = 1;
8602 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
8604 # The template database has invalid permissions set so write
8605 # the template warning message.
8607 $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{templatedatabasepermissions});
8608 $kiriwrite_presmodule->addlinebreak();
8609 $templates_skip = 1;
8614 # Check if the template skip value isn't set and if it isn't
8615 # then get the list of templates.
8617 if (!$templates_skip){
8619 @templateslist = $kiriwrite_dbmodule->gettemplatelist();
8621 # Check if any errors had occured.
8623 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
8625 # A database error occured while getting the list
8626 # of templates so return a warning message with the
8627 # extended error information.
8629 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8630 $templates_skip = 1;
8635 # Check if the template skip value isn't set and if it isn't
8636 # then process each template.
8638 if (!$templates_skip){
8640 # Process each template.
8642 foreach $template (@templateslist){
8644 # Get information about the template.
8646 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
8648 # Check if any error occured while getting the template information.
8650 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
8652 # A database error has occured, so return an error.
8654 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8657 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
8659 # The template does not exist, so process the next template.
8665 # Place each template file into the hash.
8667 $templatefiles{$template_info{"TemplateFilename"}}{template} = $template_info{"TemplateLayout"};
8668 $templatefiles{$template_info{"TemplateFilename"}}{valid} = 1;
8672 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishtemplatedatabase});
8673 $kiriwrite_presmodule->addlinebreak();
8679 # Disconnect from the template database.
8681 $kiriwrite_dbmodule->disconnecttemplate();
8683 # Process each database.
8685 foreach $database (@selectedlist){
8687 # Check if the database filename and length
8690 $kiriwrite_presmodule->addhorizontalline();
8692 $database_filename_check = kiriwrite_variablecheck($database, "page_filename", "", 1);
8693 $database_maxlength_check = kiriwrite_variablecheck($database, "maxlength", 32, 1);
8695 if ($database_filename_check ne 0){
8697 # The database filename is invalid, so process
8698 # the next database.
8700 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenameinvalidcharacters}, $database));
8701 $kiriwrite_presmodule->addlinebreak();
8707 if ($database_maxlength_check ne 0){
8709 # The database file is too long, so process the
8712 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenametoolong}, $database));
8713 $kiriwrite_presmodule->addlinebreak();
8719 # Select the database.
8721 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
8723 # Check if any errors had occured while selecting the database.
8725 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
8727 # The database does not exist, so write a warning message.
8729 $kiriwrite_presmodule->addtext($warning_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasemissing}, $database));
8730 $kiriwrite_presmodule->addlinebreak();
8734 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
8736 # The database has invalid permissions set, so write
8739 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseinvalidpermissions}, $database));
8740 $kiriwrite_presmodule->addlinebreak();
8746 # Get information about the database.
8748 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
8750 # Check if any error occured while getting the database information.
8752 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
8754 # A database error has occured so write an error.
8756 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseerror}, $database, $kiriwrite_dbmodule->geterror(1)));
8757 $kiriwrite_presmodule->addlinebreak();
8763 # Get the database name.
8765 $database_name = $database_info{"DatabaseName"};
8767 $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compilingpages}, $database_name));
8768 $kiriwrite_presmodule->addlinebreak();
8770 # Get the list of pages in the database.
8772 @databasepages = $kiriwrite_dbmodule->getpagelist();
8774 # Check if any errors occured while getting the list of pages.
8776 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
8778 # A database error has occured so return an error and
8779 # also the extended error information.
8781 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasepageerror}, $database, $kiriwrite_dbmodule->geterror(1)));
8782 $kiriwrite_presmodule->addlinebreak();
8788 foreach $page (@databasepages) {
8790 # Get information about the page.
8792 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
8794 $page_filename = $page_info{"PageFilename"};
8795 $page_name = $page_info{"PageName"};
8796 $page_description = $page_info{"PageDescription"};
8797 $page_section = $page_info{"PageSection"};
8798 $page_template = $page_info{"PageTemplate"};
8799 $page_content = $page_info{"PageContent"};
8800 $page_settings = $page_info{"PageSettings"};
8801 $page_lastmodified = $page_info{"PageLastModified"};
8803 # Check if the filename is valid.
8805 $page_filename_check = kiriwrite_variablecheck($page_filename, "page_filename", 0, 1);
8807 if ($page_filename_check ne 0){
8809 # The file name is not valid so write a
8810 # error and process the next page.
8812 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{invalidpagefilename}, $page_name));
8813 $kiriwrite_presmodule->addlinebreak();
8819 # Check if the template with the filename does not exist
8820 # in the template files hash and write a message and
8821 # process the next page.
8823 if (!$templatefiles{$page_template}{valid} && $page_template ne "!none" && $templates_skip eq 0){
8825 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatefilemissing}, $page_template, $page_name, $page_filename));
8826 $kiriwrite_presmodule->addlinebreak();
8830 $page_final = $page_content;
8832 } elsif ($page_template eq "!none"){
8834 $page_final = $page_content;
8838 $page_final = $templatefiles{$page_template}{template};
8844 $page_final =~ s/<kiriwrite:pagecontent>/$page_content/g;
8848 # Create the combined page title (if needed).
8850 if ($page_settings eq 0 || $page_settings > 3){
8852 # Don't use page name or section name.
8854 $page_final =~ s/<kiriwrite:pagetitle>//g;
8856 } elsif ($page_settings eq 1){
8858 # Use the page name and section name.
8860 $page_autotitle = "(" . $page_section . " - " . $page_name . ")";
8861 $page_title = $page_section . " - " . $page_name;
8862 $page_final =~ s/<kiriwrite:pagetitle>/$page_title/g;
8864 } elsif ($page_settings eq 2){
8866 # Use the page name only.
8868 $page_autotitle = "(" . $page_name . ")";
8869 $page_final =~ s/<kiriwrite:pagetitle>/$page_name/g;
8871 } elsif ($page_settings eq 3){
8873 # Use the section name only.
8876 $page_autotitle = "(" . $page_section . ")";
8878 $page_final =~ s/<kiriwrite:pagetitle>/$page_section/g;
8882 # Check if the section name is not blank and
8883 # place brackets inbetween if it is.
8887 $page_autosection = "(" . $page_section . ")";
8891 # Replace each <kiriwrite> value with the apporiate page
8894 $page_final =~ s/<kiriwrite:pagename>/$page_name/g;
8895 $page_final =~ s/<kiriwrite:pagedescription>/$page_description/g;
8896 $page_final =~ s/<kiriwrite:pagesection>/$page_section/g;
8897 $page_final =~ s/<kiriwrite:autosection>/$page_autosection/g;
8898 $page_final =~ s/<kiriwrite:autotitle>/$page_autotitle/g;
8900 # Process the filters on the page data.
8902 if ($filters_skip eq 0){
8906 foreach $filter_find (@findfilter){
8908 # Get the replace filter and process each
8909 # filter on the page.
8911 $filter_replace = $replacefilter[$filters_count];
8912 $page_final =~ s/$filter_find/$filter_replace/g;
8919 # Process the page filename and check what directories
8920 # need to be created.
8922 $page_filename_length = int(length($page_filename));
8926 $page_filename_char = substr($page_filename, $page_filename_seek, 1);
8928 # Check if a forward slash appears and add it to
8929 # the list of directories array.
8931 if ($page_filename_char eq '/'){
8933 # Append the directory name to the list of
8934 # directories array.
8936 $pagedirectories[$page_filename_dircount] = $page_filename_directory;
8937 $page_filename_directory = "";
8938 $page_filename_char = "";
8939 $page_filename_dircount++;
8943 # Append the character to the directory/filename.
8945 $page_filename_directory = $page_filename_directory . $page_filename_char;
8949 $page_filename_seek++;
8951 } until ($page_filename_length eq $page_filename_seek);
8953 foreach $page_directory_name (@pagedirectories){
8955 # Check if the directory name is undefined and if it
8956 # is then set it blank.
8958 if (!$page_directory_name){
8959 $page_directory_name = "";
8962 if (!$page_directory_path){
8963 $page_directory_path = "";
8966 # Check if the directory exists and create
8967 # the directory if it doesn't exist.
8969 $page_directory_path = $page_directory_path . '/' . $page_directory_name;
8971 mkdir($kiriwrite_config{"directory_data_output"} . '/' . $page_directory_path);
8975 # Check if the file already exists and if it does then check
8976 # the permissions of the file and return an error if the
8977 # permissions set are invalid.
8979 $page_filename_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"} . '/' . $page_filename);
8981 if ($page_filename_exists eq 0){
8983 # The page filename exists, so check if the permissions given are
8986 $page_filename_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"} . '/' . $page_filename, 1, 1);
8988 if ($page_filename_permissions eq 1){
8990 # The file has invalid permissions set.
8992 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pageinvalidpermissions}, $page_filename));
8993 $kiriwrite_presmodule->addlinebreak();
8996 # Reset certain values.
8998 $page_autotitle = "";
8999 $page_autosection = "";
9000 $page_filename_seek = 0;
9001 $page_filename_dircount = 0;
9003 $page_filename_directory = "";
9004 $page_directory_path = "";
9005 $page_directory_name = "";
9006 @pagedirectories = ();
9014 # Reset certain values.
9016 $page_autotitle = "";
9017 $page_autosection = "";
9018 $page_filename_seek = 0;
9019 $page_filename_dircount = 0;
9021 $page_filename_directory = "";
9022 $page_directory_path = "";
9023 $page_directory_name = "";
9024 @pagedirectories = ();
9026 # Write the file to the output directory.
9028 ($page_filename) = $page_filename =~ m/^(.*)$/g;
9029 ($kiriwrite_config{"directory_data_output"}) = $kiriwrite_config{"directory_data_output"} =~ m/^(.*)$/g;
9031 open($filehandle_page, "> ", $kiriwrite_config{"directory_data_output"} . '/' . $page_filename) or ($kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pagenotwritten}, $page_filename, $!)), $kiriwrite_presmodule->addlinebreak(), $error_count++, next);
9039 binmode $filehandle_page, ':utf8';
9040 print $filehandle_page $page_final;
9041 close($filehandle_page);
9043 # Write a message saying the page has been compiled. Check
9044 # to see if the page name is blank and write a message
9045 # saying there's no page name.
9048 $kiriwrite_presmodule->addtext($information_prefix . ' ');
9049 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
9050 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledpageblankname}, $page_filename));
9052 $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compiledpage}, $page_name, $page_filename));
9056 $kiriwrite_presmodule->addlinebreak();
9061 # Write a message saying that the database has
9064 $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefinish}, $database_name));
9065 $kiriwrite_presmodule->addlinebreak();
9069 # Disconnect from the database server.
9071 $kiriwrite_dbmodule->disconnect();
9073 $kiriwrite_presmodule->addhorizontalline();
9074 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compileresults}, $pages_count, $error_count, $warning_count));
9075 $kiriwrite_presmodule->endbox();
9076 $kiriwrite_presmodule->addlinebreak();
9077 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9079 return $kiriwrite_presmodule->grab();
9081 } elsif ($confirm eq 0){
9083 # The action to compile the databases has
9084 # not been confirmed so check what type
9087 if ($type eq "single"){
9089 # The type is a single database selected so
9090 # process that database.
9092 # Define some variables for later.
9095 my $database_filename_check;
9096 my $database_maxlength_check;
9097 my $databasefilename;
9100 # Check that the database name and length are
9101 # valid and return an error if they aren't.
9103 $databasefilename = $selectedlist[0];
9105 # Connect to the database server.
9107 $kiriwrite_dbmodule->connect();
9109 # Check if any errors occured while connecting to the database server.
9111 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9113 # A database connection error has occured so return
9116 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9120 # Select the database.
9122 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasefilename });
9124 # Check if any errors had occured while selecting the database.
9126 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9128 # The database does not exist, so return an error.
9130 kiriwrite_error("databasemissingfile");
9132 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9134 # The database has invalid permissions set, so return
9137 kiriwrite_error("databaseinvalidpermissions");
9141 # Get information about the database.
9143 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9145 # Check if any error occured while getting the database information.
9147 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9149 # A database error has occured so return an error and
9150 # also the extended error information.
9152 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
9156 $database_name = $database_info{"DatabaseName"};
9158 # Disconnect from the database server.
9160 $kiriwrite_dbmodule->disconnect();
9162 # Write out a form asking the user to confirm if the
9163 # user wants to compile the selected database.
9165 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabase}, { Style => "pageheader" });
9166 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9167 $kiriwrite_presmodule->startbox();
9168 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9169 $kiriwrite_presmodule->addhiddendata("action", "compile");
9170 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9171 $kiriwrite_presmodule->addhiddendata("id[1]", $databasefilename);
9172 $kiriwrite_presmodule->addhiddendata("name[1]", "on");
9173 $kiriwrite_presmodule->addhiddendata("confirm", 1);
9174 $kiriwrite_presmodule->addlinebreak();
9175 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledatabasemessage}, $database_name));
9176 $kiriwrite_presmodule->addlinebreak();
9177 $kiriwrite_presmodule->addlinebreak();
9178 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compiledatabasebutton});
9179 $kiriwrite_presmodule->addtext(" | ");
9180 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9181 $kiriwrite_presmodule->endbox();
9182 $kiriwrite_presmodule->endform();
9184 return $kiriwrite_presmodule->grab();
9186 } elsif ($type eq "multiple"){
9188 # The type is multiple databases selected
9189 # so process each database.
9191 # Define some variables for later.
9196 my $database_filename_check;
9197 my $database_maxlength_check;
9198 my $database_count = 0;
9199 my $database_info_name;
9201 # Connect to the database server.
9203 $kiriwrite_dbmodule->connect();
9205 # Check if any errors occured while connecting to the database server.
9207 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9209 # A database connection error has occured so return
9212 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9216 foreach $databasename (@selectedlist){
9218 # Check if the database is in the database
9219 # directory and skip it if it isn't.
9221 $database_filename_check = kiriwrite_variablecheck($databasename, "filename", "", 1);
9222 $database_maxlength_check = kiriwrite_variablecheck($databasename, "maxlength", 32, 1);
9224 if ($database_filename_check ne 0 || $database_maxlength_check ne 0){
9226 # The database filename given is invalid or
9227 # the database filename given is too long
9228 # so process the next database.
9234 # Select the database to add the page to.
9236 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasename });
9238 # Check if any errors had occured while selecting the database.
9240 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9242 # The database does not exist, so process the next database.
9246 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9248 # The database has invalid permissions set, so process
9249 # the next database.
9255 # Get information about the database.
9257 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9259 # Check if any error occured while getting the database information.
9261 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9263 # A database error has occured so process the next
9270 $database_list{$database_count}{Name} = $database_info{"DatabaseName"};
9271 $database_list{$database_count}{Filename} = $databasename;
9277 # Check if any databases are available to be compiled.
9279 if ($database_count eq 0){
9281 # No databases are available to be compiled.
9283 kiriwrite_error("nodatabaseselected");
9287 # Write out the form for compiling the database.
9289 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabases}, { Style => "pageheader" });
9290 $kiriwrite_presmodule->addlinebreak();
9291 $kiriwrite_presmodule->addlinebreak();
9292 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9293 $kiriwrite_presmodule->startbox();
9294 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9295 $kiriwrite_presmodule->addhiddendata("action", "compile");
9296 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9297 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9298 $kiriwrite_presmodule->addhiddendata("confirm", 1);
9299 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabasesmessage});
9300 $kiriwrite_presmodule->addlinebreak();
9301 $kiriwrite_presmodule->addlinebreak();
9302 $kiriwrite_presmodule->startbox("datalist");
9304 $database_count = 0;
9306 # write out the list of databases to compile.
9308 foreach $database (keys %database_list){
9312 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9313 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9315 # Check if the database name is undefined and if it is
9316 # then write a message saying the database name is blank.
9318 if (!$database_list{$database}{Name}){
9319 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{compile}->{blankdatabasename});
9321 $kiriwrite_presmodule->addtext($database_list{$database}{Name});
9324 $kiriwrite_presmodule->addlinebreak();
9328 $kiriwrite_presmodule->endbox();
9330 # Disconnect from the database server.
9332 $kiriwrite_dbmodule->disconnect();
9334 $kiriwrite_presmodule->addlinebreak();
9335 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselecteddatabasesbutton});
9336 $kiriwrite_presmodule->addtext(" | ");
9337 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9338 $kiriwrite_presmodule->endbox();
9339 $kiriwrite_presmodule->endform();
9341 return $kiriwrite_presmodule->grab();
9345 # The type is something else other than
9346 # single or multiple, so return an error.
9348 kiriwrite_error("invalidvariable");
9354 # The confirm value is neither 0 or 1, so
9357 kiriwrite_error("invalidvariable");
9363 sub kiriwrite_compile_all{
9364 #################################################################################
9365 # kiriwrite_compile_all: Compile all of the databases in the database #
9370 # kiriwrite_compile_all(); #
9371 #################################################################################
9373 # Connect to the database server.
9375 $kiriwrite_dbmodule->connect();
9377 # Check if any errors occured while connecting to the database server.
9379 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9381 # A database connection error has occured so return
9384 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9388 # Get the list of available databases.
9390 my @database_list = $kiriwrite_dbmodule->getdblist();
9392 # Check if any errors occured while getting the databases.
9394 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9396 # The database directory is missing so return an error.
9398 kiriwrite_error("datadirectorymissing");
9400 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9402 # The database directory has invalid permissions set so return
9405 kiriwrite_error("datadirectoryinvalidpermissions");
9409 # Define some variables for later.
9412 my $database_name_filename_check;
9413 my $database_count = 0;
9415 # Check the list of databases to compile to see if it is blank,
9416 # if it is then return an error.
9418 if (!@database_list){
9420 # The list of database is blank so return an error.
9422 kiriwrite_error("nodatabasesavailable");
9426 # Write out a form for confirming the action to compile all of the databases.
9428 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabases}, { Style => "pageheader" });
9429 $kiriwrite_presmodule->addlinebreak();
9430 $kiriwrite_presmodule->addlinebreak();
9432 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9433 $kiriwrite_presmodule->startbox();
9434 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9435 $kiriwrite_presmodule->addhiddendata("action", "compile");
9436 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9438 foreach $database (@database_list){
9440 # Check if the database filename is blank.
9442 if ($database eq ""){
9444 # The database filename is blank so process
9445 # the next database.
9451 # Check if the database filename is valid before
9452 # using the database.
9454 $database_name_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
9456 if ($database_name_filename_check ne 0){
9458 # The database filename is invalid so process
9459 # the next database.
9466 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database);
9467 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9471 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9473 # Disconnect from the database server.
9475 $kiriwrite_dbmodule->disconnect();
9477 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabasesmessage});
9478 $kiriwrite_presmodule->addlinebreak();
9479 $kiriwrite_presmodule->addlinebreak();
9481 $kiriwrite_presmodule->addhiddendata("confirm", 1);
9482 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compilealldatabasesbutton});
9483 $kiriwrite_presmodule->addtext(" | ");
9484 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9485 $kiriwrite_presmodule->endbox();
9486 $kiriwrite_presmodule->endform();
9488 return $kiriwrite_presmodule->grab();
9492 sub kiriwrite_selectedlist{
9493 #################################################################################
9494 # kiriwrite_page_selectedlist: Get the list of selected pages to use. #
9498 # kiriwrite_page_selectedlist(); #
9499 #################################################################################
9501 # Load the required Perl modules.
9503 my $query = new CGI;
9505 my $count = $query->param('count');
9507 # Check if the list of files has a value and if not set it 0.
9515 # Define some values for later.
9524 my $final_count = 0;
9527 # Get the list of filenames.
9531 # Get the values from id[]
9535 $filename = $query->param('id[' . $seek . ']');
9536 $filename_list[$seek] = $filename;
9538 } until ($seek eq $count || $count eq 0);
9540 # Get the list of selected filenames.
9546 # Get the values from name[]
9550 $selected = $query->param('name[' . $seek . ']');
9558 $selected_list[$seek] = $selected;
9560 } until ($seek eq $count || $count eq 0);
9562 # Create a final list of filenames to be used for
9569 # Check if the selected value is on and include
9570 # the filename in the final list.
9574 $selected = $selected_list[$seek];
9576 if ($selected eq "on"){
9578 $filename = $filename_list[$seek];
9579 $final_list[$final_count] = $filename;
9584 } until ($seek eq $count || $count eq 0);
9590 sub kiriwrite_compile_list{
9591 #################################################################################
9592 # kiriwrite_compile_list: Shows a list of databases that can be compiled. #
9596 # kiriwrite_compile_list(); #
9597 #################################################################################
9599 # Define the following variables that are going to be used before using
9600 # the foreach function.
9604 my $database_count = 0;
9605 my $database_filename = "";
9606 my $database_filename_friendly = "";
9607 my $database_permissions = "";
9608 my $database_name = "";
9609 my $database_description = "";
9611 my @permissions_list;
9613 my $table_style = 0;
9614 my $table_style_name = "";
9617 tie(%database_list, 'Tie::IxHash');
9619 # Connect to the database server.
9621 $kiriwrite_dbmodule->connect();
9623 # Check if any errors occured while connecting to the database server.
9625 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9627 # A database connection error has occured so return
9630 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9634 # Get the list of available databases and process any errors that
9635 # might have occured.
9637 my @database_list = $kiriwrite_dbmodule->getdblist();
9639 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9641 # The database directory is missing so return an error.
9643 kiriwrite_error("datadirectorymissing");
9645 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9647 # The database directory has invalid permissions set so return
9650 kiriwrite_error("datadirectoryinvalidpermissions");
9654 # Begin creating the table for the list of databases.
9656 foreach $data_file (@database_list){
9658 # Select the database.
9660 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
9662 # Check if any error occured while selecting the database.
9664 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9666 # The database does not exist, so process the next
9671 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
9673 # The database has invalid permissions settings, so
9674 # add the database to the list of databases with
9675 # invalid permissions set and process the next
9678 push(@permissions_list, $data_file);
9683 # Get information about the database.
9685 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9687 # Check if any error occured while getting information from the
9690 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9692 # A database error has occured, add the database and specific
9693 # error message to the list of databases with errors and
9694 # process the next database.
9696 push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
9701 $database_name = $database_info{"DatabaseName"};
9702 $database_description = $database_info{"Description"};
9704 # Create a friendly name for the database.
9706 $database_filename_friendly = $data_file;
9708 # Append the database information to the table.
9710 $database_list{$database_count}{Filename} = $database_filename_friendly;
9711 $database_list{$database_count}{Name} = $database_name;
9712 $database_list{$database_count}{Description} = $database_description;
9718 # Check if there are no valid databases are if there is no
9719 # valid databases then write a message saying that no
9720 # valid databases are available.
9722 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilepages}, { Style => "pageheader" });
9723 $kiriwrite_presmodule->addlinebreak();
9724 $kiriwrite_presmodule->addlinebreak();
9726 if ($database_count eq 0){
9728 # There are no databases available for compiling so
9729 # write a message instead.
9731 $kiriwrite_presmodule->startbox("errorbox");
9732 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{nodatabasesavailable});
9733 $kiriwrite_presmodule->endbox();
9737 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9738 $kiriwrite_presmodule->startbox();
9739 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9740 $kiriwrite_presmodule->addhiddendata("action", "compile");
9741 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9743 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
9744 $kiriwrite_presmodule->addtext(" | ");
9745 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselectedbutton});
9746 $kiriwrite_presmodule->addlinebreak();
9747 $kiriwrite_presmodule->addlinebreak();
9748 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9749 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
9751 $kiriwrite_presmodule->startheader();
9752 $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
9753 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
9754 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
9755 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
9756 $kiriwrite_presmodule->endheader();
9758 $database_count = 1;
9760 foreach $database (keys %database_list){
9762 # Check the style to be used with.
9764 if ($table_style eq 0){
9766 # Use the first style and set the style value
9767 # to use the next style, the next time the
9768 # if statement is checked.
9770 $table_style_name = "tablecell1";
9775 # Use the second style and set the style
9776 # value to use the first style, the next
9777 # time if statement is checked.
9779 $table_style_name = "tablecell2";
9783 # Add the template to the list of available
9784 # templates to compile.
9786 $kiriwrite_presmodule->startrow();
9787 $kiriwrite_presmodule->addcell($table_style_name);
9788 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9789 $kiriwrite_presmodule->addcheckbox("name[" . $database_count . "]");
9790 $kiriwrite_presmodule->endcell();
9791 $kiriwrite_presmodule->addcell($table_style_name);
9793 if (!$database_list{$database}{Name}){
9794 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile&action=compile&type=single&database=" . $database_list{$database}{Filename}, { Text => $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname}) });
9796 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_list{$database}{Filename}, { Text => $database_list{$database}{Name} });
9799 $kiriwrite_presmodule->endcell();
9800 $kiriwrite_presmodule->addcell($table_style_name);
9802 if (!$database_list{$database}{Description}){
9803 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
9805 $kiriwrite_presmodule->addtext($database_list{$database}{Description});
9808 $kiriwrite_presmodule->endcell();
9809 $kiriwrite_presmodule->addcell($table_style_name);
9810 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile&action=compile&type=single&database=" . $database_list{$database}{Filename}, { Text => $kiriwrite_lang->{options}->{compile} });
9811 $kiriwrite_presmodule->endcell();
9812 $kiriwrite_presmodule->endrow();
9818 $kiriwrite_presmodule->endtable();
9819 $kiriwrite_presmodule->endbox();
9820 $kiriwrite_presmodule->endform();
9824 # Disconnect from the database server.
9826 $kiriwrite_dbmodule->disconnect();
9828 # Check if any databases with problems have appeared and if they
9829 # have, print out a message saying which databases have problems.
9831 if (@permissions_list){
9833 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
9834 $kiriwrite_presmodule->addlinebreak();
9835 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
9836 $kiriwrite_presmodule->addlinebreak();
9838 foreach $database (@permissions_list){
9840 $kiriwrite_presmodule->addlinebreak();
9841 $kiriwrite_presmodule->addtext($database);
9845 $kiriwrite_presmodule->addlinebreak();
9846 $kiriwrite_presmodule->addlinebreak();
9852 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
9853 $kiriwrite_presmodule->addlinebreak();
9854 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
9855 $kiriwrite_presmodule->addlinebreak();
9857 foreach $database (@error_list){
9859 $kiriwrite_presmodule->addlinebreak();
9860 $kiriwrite_presmodule->addtext($database);
9866 return $kiriwrite_presmodule->grab();
9870 sub kiriwrite_compile_clean{
9871 #################################################################################
9872 # kiriwrite_compile_clean: Deletes the contents of the output directory. #
9876 # kiriwrite_compile_clean(confirm); #
9878 # confirm Confirms the deletion of files from the output directory. #
9879 #################################################################################
9881 # Get the values passed to the subroutine.
9885 # Define some variables for later.
9887 my $file_permissions;
9888 my $output_directory_exists;
9889 my $output_directory_permissions;
9890 my $warning_message;
9892 # Check if the output directory exists.
9894 $output_directory_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"});
9896 if ($output_directory_exists eq 1){
9898 # The output directory does not exist so return
9901 kiriwrite_error("outputdirectorymissing");
9905 # Check if the output directory has invalid
9908 $output_directory_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"});
9910 if ($output_directory_permissions eq 1){
9912 # The output directory has invalid permissions
9913 # set, so return an error.
9915 kiriwrite_error("outputdirectoryinvalidpermissions");
9923 # The action to clean the output directory has been
9926 # Remove the list of files and directories from the
9929 $file_permissions = kiriwrite_compile_clean_helper($kiriwrite_config{"directory_data_output"}, 1);
9931 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9933 if ($file_permissions eq 1){
9935 $kiriwrite_presmodule->addlinebreak();
9936 $kiriwrite_presmodule->addlinebreak();
9937 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{somecontentnotremoved});
9938 $kiriwrite_presmodule->addlinebreak();
9939 $kiriwrite_presmodule->addlinebreak();
9943 $kiriwrite_presmodule->addlinebreak();
9944 $kiriwrite_presmodule->addlinebreak();
9945 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{contentremoved});
9946 $kiriwrite_presmodule->addlinebreak();
9947 $kiriwrite_presmodule->addlinebreak();
9951 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9953 return $kiriwrite_presmodule->grab();
9957 # A value other than 1 is set for the confirm value
9958 # (which it shouldn't be) so return an error.
9960 kiriwrite_error("invalidvariable");
9966 # Print out a form for cleaning the output directory.
9968 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9969 $kiriwrite_presmodule->addlinebreak();
9970 $kiriwrite_presmodule->addlinebreak();
9971 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9972 $kiriwrite_presmodule->startbox();
9973 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9974 $kiriwrite_presmodule->addhiddendata("action", "clean");
9975 $kiriwrite_presmodule->addhiddendata("confirm", 1);
9976 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectorymessage});
9977 $kiriwrite_presmodule->addlinebreak();
9978 $kiriwrite_presmodule->addlinebreak();
9979 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{cleanoutputdirectorybutton});
9980 $kiriwrite_presmodule->addtext(" | ");
9981 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist}});
9982 $kiriwrite_presmodule->endbox();
9983 $kiriwrite_presmodule->endform();
9985 return $kiriwrite_presmodule->grab();
9989 sub kiriwrite_compile_clean_helper{
9990 #################################################################################
9991 # kiriwrite_compile_clean_helper: Helper for cleaning out the output directory. #
9992 # This command sometimes is called recursively (when a directory is found). #
9996 # kiriwrite_compile_clean_helper(directory, removedirectory, [permissions]); #
9998 # directory Specifies the directory to remove files (and #
9999 # sub-directories) from. #
10000 # keepdirectory Keeps the directory itself after all files have been #
10002 # permissions Used recursively for error checking. #
10003 #################################################################################
10005 # Get the values passed to the subroutine.
10007 my ($directory, $directory_keep, $permissions) = @_;
10009 # Check if the directory_keep is only one charater long.
10011 my $directory_file = "";
10012 my @directory_list;
10013 my $file_permissions = 0;
10016 # Check if the file permissions value is blank.
10018 if (!$permissions){
10020 # The file permissions value is blank.
10026 # Open the directory specified, read the contents of
10027 # the directory and then close the directory.
10029 opendir(DIRECTORY, $directory);
10030 @directory_list = readdir(DIRECTORY);
10031 closedir(DIRECTORY);
10033 # Remove each file and directory.
10035 foreach $directory_file (@directory_list){
10037 # Check if the filename is '.' or '..' and if it
10038 # is skip those files.
10040 if ($directory_file eq "." || $directory_file eq ".."){
10042 # The filename is '.' or '..' so skip processing
10047 # Check if the permissions on the file or directory has
10048 # valid permissions set.
10050 $file_permissions = kiriwrite_filepermissions($directory . '/' . $directory_file, 1, 1);
10052 if ($file_permissions eq 1){
10054 # The file or directory has invalid permissions set.
10061 # Check if the filename is a directory.
10063 if (-d $directory . '/' . $directory_file){
10065 # The filename is a directory so send the directory name
10066 # and this subroutine again (recursively).
10068 kiriwrite_compile_clean_helper($directory . '/' . $directory_file, 0, $permissions);
10072 # The file is not a directory but an actual file so
10073 # remove as normal (in terms of the Perl language).
10075 ($directory) = $directory =~ m/^(.*)$/g;
10076 ($directory_file) = $directory_file =~ m/^(.*)$/g;
10078 # Check if the directory is undefined and if it is then
10085 if (!$directory_file){
10086 $directory_file = "";
10089 unlink($directory . '/' . $directory_file);
10097 # Check if the directory should be kept.
10099 if ($directory_keep eq 1){
10101 # The directory_keep value is set as 1 so the directory
10102 # specified should be kept.
10104 } elsif ($directory_keep eq 0) {
10106 # The directory_keep value is set as 0 so remove the
10107 # directory specified.
10109 ($directory) = $directory =~ m/^(.*)$/g;
10114 # A value other than 0 or 1 was specified so return
10117 kiriwrite_error('invalidvalue');
10121 return $permissions;
10125 sub kiriwrite_settings_view{
10126 #################################################################################
10127 # kiriwrite_options_view: Writes out the list of options and variables. #
10131 # kiriwrite_settings_view(); #
10132 #################################################################################
10134 # Get the settings.
10136 my $settings_directory_db = $kiriwrite_config{"directory_data_db"};
10137 my $settings_directory_output = $kiriwrite_config{"directory_data_output"};
10138 my $settings_noncgi_images = $kiriwrite_config{"directory_noncgi_images"};
10139 my $settings_system_datetime = $kiriwrite_config{"system_datetime"};
10140 my $settings_system_language = $kiriwrite_config{"system_language"};
10141 my $settings_system_presentation = $kiriwrite_config{"system_presmodule"};
10142 my $settings_system_database = $kiriwrite_config{"system_dbmodule"};
10144 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{viewsettings}, { Style => "pageheader" });
10145 $kiriwrite_presmodule->addlinebreak();
10146 $kiriwrite_presmodule->addlinebreak();
10147 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{currentsettings});
10148 $kiriwrite_presmodule->addlinebreak();
10149 $kiriwrite_presmodule->addlinebreak();
10150 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10152 $kiriwrite_presmodule->startheader();
10153 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10154 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10155 $kiriwrite_presmodule->endheader();
10157 $kiriwrite_presmodule->startrow();
10158 $kiriwrite_presmodule->addcell("tablecellheader");
10159 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10160 $kiriwrite_presmodule->endcell();
10161 $kiriwrite_presmodule->addcell("tablecellheader");
10162 $kiriwrite_presmodule->endcell();
10163 $kiriwrite_presmodule->endrow();
10165 $kiriwrite_presmodule->startrow();
10166 $kiriwrite_presmodule->addcell("tablecell1");
10167 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10168 $kiriwrite_presmodule->endcell();
10169 $kiriwrite_presmodule->addcell("tablecell2");
10170 $kiriwrite_presmodule->addtext($settings_directory_db);
10171 $kiriwrite_presmodule->endcell();
10172 $kiriwrite_presmodule->endrow();
10174 $kiriwrite_presmodule->startrow();
10175 $kiriwrite_presmodule->addcell("tablecell1");
10176 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
10177 $kiriwrite_presmodule->endcell();
10178 $kiriwrite_presmodule->addcell("tablecell2");
10179 $kiriwrite_presmodule->addtext($settings_directory_output);
10180 $kiriwrite_presmodule->endcell();
10181 $kiriwrite_presmodule->endrow();
10183 $kiriwrite_presmodule->startrow();
10184 $kiriwrite_presmodule->addcell("tablecell1");
10185 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
10186 $kiriwrite_presmodule->endcell();
10187 $kiriwrite_presmodule->addcell("tablecell2");
10188 $kiriwrite_presmodule->addtext($settings_noncgi_images);
10189 $kiriwrite_presmodule->endcell();
10190 $kiriwrite_presmodule->endrow();
10192 $kiriwrite_presmodule->startrow();
10193 $kiriwrite_presmodule->addcell("tablecellheader");
10194 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
10195 $kiriwrite_presmodule->endcell();
10196 $kiriwrite_presmodule->addcell("tablecellheader");
10197 $kiriwrite_presmodule->endcell();
10198 $kiriwrite_presmodule->endrow();
10200 $kiriwrite_presmodule->startrow();
10201 $kiriwrite_presmodule->addcell("tablecell1");
10202 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
10203 $kiriwrite_presmodule->endcell();
10204 $kiriwrite_presmodule->addcell("tablecell2");
10205 $kiriwrite_presmodule->addtext($settings_system_datetime);
10206 $kiriwrite_presmodule->endcell();
10207 $kiriwrite_presmodule->endrow();
10209 $kiriwrite_presmodule->startrow();
10210 $kiriwrite_presmodule->addcell("tablecellheader");
10211 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
10212 $kiriwrite_presmodule->endcell();
10213 $kiriwrite_presmodule->addcell("tablecellheader");
10214 $kiriwrite_presmodule->endcell();
10215 $kiriwrite_presmodule->endrow();
10217 $kiriwrite_presmodule->startrow();
10218 $kiriwrite_presmodule->addcell("tablecell1");
10219 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
10220 $kiriwrite_presmodule->endcell();
10221 $kiriwrite_presmodule->addcell("tablecell2");
10222 $kiriwrite_presmodule->addtext($settings_system_language);
10223 $kiriwrite_presmodule->endcell();
10224 $kiriwrite_presmodule->endrow();
10226 $kiriwrite_presmodule->startrow();
10227 $kiriwrite_presmodule->addcell("tablecellheader");
10228 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
10229 $kiriwrite_presmodule->endcell();
10230 $kiriwrite_presmodule->addcell("tablecellheader");
10231 $kiriwrite_presmodule->endcell();
10232 $kiriwrite_presmodule->endrow();
10234 $kiriwrite_presmodule->startrow();
10235 $kiriwrite_presmodule->addcell("tablecell1");
10236 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
10237 $kiriwrite_presmodule->endcell();
10238 $kiriwrite_presmodule->addcell("tablecell2");
10239 $kiriwrite_presmodule->addtext($settings_system_presentation);
10240 $kiriwrite_presmodule->endcell();
10241 $kiriwrite_presmodule->endrow();
10243 $kiriwrite_presmodule->startrow();
10244 $kiriwrite_presmodule->addcell("tablecell1");
10245 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
10246 $kiriwrite_presmodule->endcell();
10247 $kiriwrite_presmodule->addcell("tablecell2");
10248 $kiriwrite_presmodule->addtext($settings_system_database);
10249 $kiriwrite_presmodule->endcell();
10250 $kiriwrite_presmodule->endrow();
10252 $kiriwrite_presmodule->endtable();
10254 $kiriwrite_presmodule->addlinebreak();
10255 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{altersettings});
10257 return $kiriwrite_presmodule->grab();
10261 sub kiriwrite_settings_edit{
10262 #################################################################################
10263 # kiriwrite_settings_edit: Edits the options. #
10267 # kiriwrite_settings_edit(options); #
10269 # options Specifies the following options in any order. #
10271 # DatabaseDirectory Specifies the new database directory to use. #
10272 # OutputDirectory Specifies the new output directory to use. #
10273 # ImagesURIPath Specifies the new URI path for images. #
10274 # DateTimeFormat Specifies the new date and time format. #
10275 # SystemLanguage Specifies the new language to use for Kiriwrite. #
10276 # PrsentationModule Specifies the new presentation module to use for #
10278 # DatabaseModule Specifies the new database module to use for Kiriwrite. #
10280 # Options for server-based database modules. #
10282 # DatabaseServer Specifies the database server to use. #
10283 # DaravasePort Specifies the port the database server is running on. #
10284 # DatabaseProtocol Specifies the protocol the database server is using. #
10285 # DatabaseSQLDatabase Specifies the SQL database name to use. #
10286 # DatabaseUsername Specifies the database server username. #
10287 # DatabasePasswordKeep Keeps the current password in the configuration file. #
10288 # DatabasePassword Specifies the password for the database server username.#
10289 # DatabaseTablePrefix Specifies the prefix used for tables. #
10290 #################################################################################
10292 # Get the values that have been passed to the subroutine.
10294 my ($passedoptions) = @_;
10296 # Get the values from the hash.
10298 my $settings_dbdirectory = $passedoptions->{"DatabaseDirectory"};
10299 my $settings_outputdirectory = $passedoptions->{"OutputDirectory"};
10300 my $settings_imagesuri = $passedoptions->{"ImagesURIPath"};
10301 my $settings_datetimeformat = $passedoptions->{"DateTimeFormat"};
10302 my $settings_languagesystem = $passedoptions->{"SystemLanguage"};
10303 my $settings_presmodule = $passedoptions->{"PresentationModule"};
10304 my $settings_dbmodule = $passedoptions->{"DatabaseModule"};
10306 my $settings_database_server = $passedoptions->{"DatabaseServer"};
10307 my $settings_database_port = $passedoptions->{"DatabasePort"};
10308 my $settings_database_protocol = $passedoptions->{"DatabaseProtocol"};
10309 my $settings_database_sqldatabase = $passedoptions->{"DatabaseSQLDatabase"};
10310 my $settings_database_username = $passedoptions->{"DatabaseUsername"};
10311 my $settings_database_passwordkeep = $passedoptions->{"DatabasePasswordKeep"};
10312 my $settings_database_password = $passedoptions->{"DatabasePassword"};
10313 my $settings_database_tableprefix = $passedoptions->{"DatabaseTablePrefix"};
10315 my $confirm = $passedoptions->{"Confirm"};
10319 # If the confirm value is blank, then set the confirm
10326 if ($confirm eq "1"){
10328 # The action to edit the settings has been confirmed.
10329 # Start by checking each variable about to be placed
10330 # in the settings file is valid.
10332 # Deinfe some variables for later.
10334 my @kiriwrite_new_settings;
10336 # Check the length of the directory names.
10338 kiriwrite_variablecheck($settings_dbdirectory, "maxlength", 64, 0);
10339 kiriwrite_variablecheck($settings_outputdirectory, "maxlength", 64, 0);
10340 kiriwrite_variablecheck($settings_imagesuri, "maxlength", 512, 0);
10341 kiriwrite_variablecheck($settings_datetimeformat, "maxlength", 32, 0);
10343 kiriwrite_variablecheck($settings_languagesystem, "language_filename", "", 0);
10345 # Check the module names to see if they're valid.
10347 my $kiriwrite_presmodule_modulename_check = kiriwrite_variablecheck($settings_presmodule, "module", 0, 1);
10348 my $kiriwrite_dbmodule_modulename_check = kiriwrite_variablecheck($settings_dbmodule, "module", 0, 1);
10350 if ($kiriwrite_presmodule_modulename_check eq 1){
10352 # The presentation module name is blank, so return
10355 kiriwrite_error("presmoduleblank");
10359 if ($kiriwrite_presmodule_modulename_check eq 2){
10361 # The presentation module name is invalid, so return
10364 kiriwrite_error("presmoduleinvalid");
10368 if ($kiriwrite_dbmodule_modulename_check eq 1){
10370 # The database module name is blank, so return
10373 kiriwrite_error("dbmoduleblank");
10377 if ($kiriwrite_dbmodule_modulename_check eq 2){
10379 # The database module name is invalid, so return
10382 kiriwrite_error("dbmoduleinvalid");
10386 # Check if the directory names only contain letters and numbers and
10387 # return a specific error if they don't.
10389 my $kiriwrite_dbdirectory_check = kiriwrite_variablecheck($settings_dbdirectory, "directory", 0, 1);
10390 my $kiriwrite_outputdirectory_check = kiriwrite_variablecheck($settings_outputdirectory, "directory", 0, 1);
10391 kiriwrite_variablecheck($settings_datetimeformat, "datetime", 0, 0);
10393 if ($kiriwrite_dbdirectory_check eq 1){
10395 # The database directory name is blank, so return
10398 kiriwrite_error("dbdirectoryblank");
10400 } elsif ($kiriwrite_dbdirectory_check eq 2){
10402 # The database directory name is invalid, so return
10405 kiriwrite_error("dbdirectoryinvalid");
10409 if ($kiriwrite_outputdirectory_check eq 1){
10411 # The output directory name is blank, so return
10414 kiriwrite_error("outputdirectoryblank");
10416 } elsif ($kiriwrite_outputdirectory_check eq 2){
10418 # The output directory name is invalid, so return
10421 kiriwrite_error("outputdirectoryinvalid");
10425 # Check if the presentation module with the filename given exists.
10427 my $presmodule_exists = kiriwrite_fileexists("Modules/Presentation/" . $settings_presmodule . ".pm");
10429 if ($presmodule_exists eq 1){
10431 # The presentation module does not exist so return an error.
10433 kiriwrite_error("presmodulemissing");
10437 # Check if the database module with the filename given exists.
10439 my $dbmodule_exists = kiriwrite_fileexists("Modules/Database/" . $settings_dbmodule . ".pm");
10441 if ($dbmodule_exists eq 1){
10443 # The database module does not exist so return an error.
10445 kiriwrite_error("dbmodulemissing");
10449 # Check if the language filename given exists.
10451 my $languagefile_exists = kiriwrite_fileexists("lang/" . $settings_languagesystem . ".xml");
10453 if ($languagefile_exists eq 1){
10455 # The language filename given does not exist so return an error.
10457 kiriwrite_error("languagefilenamemissing");
10461 # Check the database server options to see if they are valid.
10463 my $kiriwrite_databaseserver_length_check = kiriwrite_variablecheck($settings_database_server, "maxlength", 128, 1);
10464 my $kiriwrite_databaseserver_lettersnumbers_check = kiriwrite_variablecheck($settings_database_server, "lettersnumbers", 0, 1);
10465 my $kiriwrite_databaseport_length_check = kiriwrite_variablecheck($settings_database_port, "maxlength", 5, 1);
10466 my $kiriwrite_databaseport_numbers_check = kiriwrite_variablecheck($settings_database_port, "numbers", 0, 1);
10467 my $kiriwrite_databaseport_port_check = kiriwrite_variablecheck($settings_database_port, "port", 0, 1);
10468 my $kiriwrite_databaseprotocol_length_check = kiriwrite_variablecheck($settings_database_protocol, "maxlength", 5, 1);
10469 my $kiriwrite_databaseprotocol_protocol_check = kiriwrite_variablecheck($settings_database_protocol, "serverprotocol", 0, 1);
10470 my $kiriwrite_databasename_length_check = kiriwrite_variablecheck($settings_database_sqldatabase, "maxlength", 32, 1);
10471 my $kiriwrite_databasename_lettersnumbers_check = kiriwrite_variablecheck($settings_database_sqldatabase, "lettersnumbers", 0, 1);
10472 my $kiriwrite_databaseusername_length_check = kiriwrite_variablecheck($settings_database_username, "maxlength", 16, 1);
10473 my $kiriwrite_databaseusername_lettersnumbers_check = kiriwrite_variablecheck($settings_database_username, "lettersnumbers", 0, 1);
10474 my $kiriwrite_databasepassword_length_check = kiriwrite_variablecheck($settings_database_password, "maxlength", 64, 1);
10475 my $kiriwrite_databasetableprefix_length_check = kiriwrite_variablecheck($settings_database_tableprefix, "maxlength", 16, 1);
10476 my $kiriwrite_databasetableprefix_lettersnumbers_check = kiriwrite_variablecheck($settings_database_tableprefix, "lettersnumbers", 0, 1);
10478 if ($kiriwrite_databaseserver_length_check eq 1){
10480 # The length of the database server name is too long so
10483 kiriwrite_error("servernametoolong");
10487 if ($kiriwrite_databaseserver_lettersnumbers_check eq 1){
10489 # The database server name contains characters other
10490 # than letters and numbers, so return an error.
10492 kiriwrite_error("servernameinvalid");
10496 if ($kiriwrite_databaseport_length_check eq 1){
10498 # The database port number length is too long so return
10501 kiriwrite_error("serverportnumbertoolong");
10505 if ($kiriwrite_databaseport_numbers_check eq 1){
10507 # The database port number contains characters other
10508 # than numbers so return an error.
10510 kiriwrite_error("serverportnumberinvalidcharacters");
10514 if ($kiriwrite_databaseport_port_check eq 1){
10516 # The database port number given is invalid so return
10519 kiriwrite_error("serverportnumberinvalid");
10523 if ($kiriwrite_databaseprotocol_length_check eq 1){
10525 # The database protocol name given is too long so
10528 kiriwrite_error("serverprotocolnametoolong");
10532 if ($kiriwrite_databaseprotocol_protocol_check eq 1){
10534 # The server protcol given is invalid so return
10537 kiriwrite_error("serverprotocolinvalid");
10541 if ($kiriwrite_databasename_length_check eq 1){
10543 # The SQL database name is too long so return
10546 kiriwrite_error("serverdatabasenametoolong");
10550 if ($kiriwrite_databasename_lettersnumbers_check eq 1){
10552 # The database name contains invalid characters
10553 # so return an error.
10555 kiriwrite_error("serverdatabasenameinvalid");
10559 if ($kiriwrite_databaseusername_length_check eq 1){
10561 # The database username given is too long so
10564 kiriwrite_error("serverdatabaseusernametoolong");
10568 if ($kiriwrite_databaseusername_lettersnumbers_check eq 1){
10570 # The database username contains invalid characters
10571 # so return an error.
10573 kiriwrite_error("serverdatabaseusernameinvalid");
10577 if ($kiriwrite_databasepassword_length_check eq 1){
10579 # The database password given is too long so return
10582 kiriwrite_error("serverdatabasepasswordtoolong");
10586 if ($kiriwrite_databasetableprefix_length_check eq 1){
10588 # The database table prefix given is too long so
10591 kiriwrite_error("serverdatabasetableprefixtoolong");
10595 if ($kiriwrite_databasetableprefix_lettersnumbers_check eq 1){
10597 # The database table prefix given contains invalid
10598 # characters so return an error.
10600 kiriwrite_error("serverdatabasetableprefixinvalid");
10604 # Check if the current password should be kept.
10606 if ($settings_database_passwordkeep eq "on"){
10608 # The current password in the configuration file should be used.
10610 $settings_database_password = $kiriwrite_config{"database_password"};
10614 # Write the new settings to the XML file.
10616 kiriwrite_output_xml("kiriwrite.xml", "config", { DatabaseDirectory => $settings_dbdirectory, OutputDirectory => $settings_outputdirectory, ImagesURIPath => $settings_imagesuri, DateTimeFormat => $settings_datetimeformat, SystemLanguage => $settings_languagesystem, PresentationModule => $settings_presmodule, DatabaseModule => $settings_dbmodule, DatabaseServer => $settings_database_server, DatabasePort => $settings_database_port, DatabaseProtocol => $settings_database_protocol, DatabaseSQLDatabase => $settings_database_sqldatabase, DatabaseUsername => $settings_database_username, DatabasePassword => $settings_database_password, DatabaseTablePrefix => $settings_database_tableprefix });
10618 # Write a confirmation message.
10620 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingsedited}, { Style => "pageheader" });
10621 $kiriwrite_presmodule->addlinebreak();
10622 $kiriwrite_presmodule->addlinebreak();
10623 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingseditedmessage});
10624 $kiriwrite_presmodule->addlinebreak();
10625 $kiriwrite_presmodule->addlinebreak();
10626 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
10628 return $kiriwrite_presmodule->grab();
10632 # Get the list of languages available.
10635 my @language_directory = "";
10637 my $language_filename = "";
10638 my $language_file_xml = "";
10639 my $language_file_systemname = "";
10640 my $language_file_localname = "";
10641 my $language_file_seek = 0;
10642 my $language_flie_dot = 0;
10643 my $language_file_length = 0;
10644 my $language_file_count = 0;
10645 my $language_file_char = "";
10646 my $language_file_friendly = "";
10647 my $language_config = $kiriwrite_config{"system_language"};
10649 tie(%language_list, 'Tie::IxHash');
10651 opendir(LANGUAGEDIR, "lang");
10652 @language_directory = grep /m*\.xml$/, readdir(LANGUAGEDIR);
10653 closedir(LANGUAGEDIR);
10655 # Process each language by loading the XML configuration file
10656 # used for each language and then get the System name and
10657 # the local name of the language.
10659 foreach $language_filename (@language_directory){
10661 # Load the language file currently selected.
10663 $language_file_xml = $xsl->XMLin("lang" . '/' . $language_filename, SuppressEmpty => 1);
10665 # Get the system name and the local name of the language.
10667 $language_file_localname = $language_file_xml -> {about} -> {name};
10669 # Check if either the system name or the local name of the language
10670 # is blank and if it is, then don't add the language to the list.
10672 if ($language_file_localname eq ""){
10674 # The system name or the local name is blank so don't add
10675 # the language to the list.
10679 # Get the 'friendly' name of the language file name (basically
10680 # remove the .xml part from the filename.
10682 $language_file_length = length($language_filename);
10686 # Get a character from the language filename and currently
10687 # set by the seek counter.
10689 $language_file_char = substr($language_filename, $language_file_seek, 1);
10691 # Check if the character is a dot and if it is then set the
10692 # last dot value to the seek counter value.
10694 if ($language_file_char eq "."){
10696 # Current chatacter is a dot so set the last dot value
10697 # to what is currently the seek counter.
10699 $language_flie_dot = $language_file_seek;
10703 # Current character is not a dot, so do nothing.
10707 # Increment the seek counter.
10709 $language_file_seek++;
10711 } until ($language_file_seek eq $language_file_length);
10713 # Reset the seek counter.
10715 $language_file_seek = 0;
10717 # Process the file name again and this time process the file
10718 # name until it reaches the last dot found.
10722 # Get the character the seek counter is currently set at.
10724 $language_file_char = substr($language_filename, $language_file_seek, 1);
10726 # Append the character to the friendly file name.
10728 $language_file_friendly = $language_file_friendly . $language_file_char;
10730 # Increment the seek counter.
10732 $language_file_seek++;
10734 } until ($language_file_seek eq $language_flie_dot);
10736 # Append the language to the available languages list.
10738 $language_list{$language_file_count}{Filename} = $language_file_friendly;
10739 $language_list{$language_file_count}{Name} = $language_file_localname;
10740 $language_file_count++;
10742 # Reset certain counters and values before continuing.
10744 $language_file_seek = 0;
10745 $language_flie_dot = 0;
10746 $language_file_length = 0;
10747 $language_file_char = "";
10748 $language_file_friendly = "";
10754 # Get the list of presentation modules available.
10756 my %presmodule_list;
10757 my @presmodule_directory;
10759 my $presmodule_file = "";
10760 my $presmodule_char = "";
10761 my $presmodule_dot = 0;
10762 my $presmodule_firstdot = 0;
10763 my $presmodule_firstdotfound = "";
10764 my $presmodule_seek = 0;
10765 my $presmodule_length = 0;
10766 my $presmodule_count = 0;
10767 my $presmodule_friendly = "";
10768 my $presmodule_selectlist = "";
10769 my $presmodule_config = $kiriwrite_config{"system_presmodule"};
10771 # Open and get the list of presentation modules (perl modules) by filtering
10774 opendir(OUTPUTSYSTEMDIR, "Modules/Presentation");
10775 @presmodule_directory = grep /m*\.pm$/, readdir(OUTPUTSYSTEMDIR);
10776 closedir(OUTPUTSYSTEMDIR);
10778 # Process each presentation module and add them to the list of available
10779 # presentation modules.
10781 foreach $presmodule_file (@presmodule_directory){
10783 # Get the length of the presentation module (perl module) filename.
10785 $presmodule_length = length($presmodule_file);
10787 # Get the friendly name of the Perl module (by getting rid of the
10788 # .pm part of the filename).
10792 $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10794 # Check if the current character is a dot and if it is then
10795 # set the last dot found number to the current seek number.
10797 if ($presmodule_char eq "."){
10799 # Put the seek value as the last dot found number.
10801 $presmodule_dot = $presmodule_seek;
10805 # Increment the seek counter.
10807 $presmodule_seek++;
10809 } until ($presmodule_seek eq $presmodule_length);
10811 # Reset the seek counter as it is going to be used again.
10813 $presmodule_seek = 0;
10815 # Get the friendly name of the Perl module by the processing the file
10816 # name to the last dot the previous 'do' tried to find.
10820 # Get the character the seek counter is currently set at.
10822 $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10824 # Append the character to the friendly name of the presentation module.
10826 $presmodule_friendly = $presmodule_friendly . $presmodule_char;
10828 # Increment the seek counter.
10830 $presmodule_seek++;
10832 } until ($presmodule_seek eq $presmodule_dot);
10834 # Append the option to tbe list of available presentation modules.
10836 $presmodule_list{$presmodule_count}{Filename} = $presmodule_friendly;
10838 # Reset the following values.
10840 $presmodule_seek = 0;
10841 $presmodule_length = 0;
10842 $presmodule_char = "";
10843 $presmodule_friendly = "";
10844 $presmodule_count++;
10848 # Get the list of database modules available.
10851 my @dbmodule_directory;
10853 my $dbmodule_file = "";
10854 my $dbmodule_char = "";
10855 my $dbmodule_dot = 0;
10856 my $dbmodule_firstdot = 0;
10857 my $dbmodule_firstdotfound = "";
10858 my $dbmodule_seek = 0;
10859 my $dbmodule_length = 0;
10860 my $dbmodule_count = 0;
10861 my $dbmodule_friendly = "";
10862 my $dbmodule_selectlist = "";
10863 my $dbmodule_config = $kiriwrite_config{"system_dbmodule"};
10865 # Open and get the list of presentation modules (perl modules) by filtering
10868 opendir(DATABASEDIR, "Modules/Database");
10869 @dbmodule_directory = grep /m*\.pm$/, readdir(DATABASEDIR);
10870 closedir(DATABASEDIR);
10872 # Process each presentation module and add them to the list of available
10873 # presentation modules.
10875 foreach $dbmodule_file (@dbmodule_directory){
10877 # Get the length of the database module (perl module) filename.
10879 $dbmodule_length = length($dbmodule_file);
10881 # Get the friendly name of the Perl module (by getting rid of the
10882 # .pm part of the filename).
10886 $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10888 # Check if the current character is a dot and if it is then
10889 # set the last dot found number to the current seek number.
10891 if ($dbmodule_char eq "."){
10893 # Put the seek value as the last dot found number.
10895 $dbmodule_dot = $dbmodule_seek;
10899 # Increment the seek counter.
10903 } until ($dbmodule_seek eq $dbmodule_length);
10905 # Reset the seek counter as it is going to be used again.
10907 $dbmodule_seek = 0;
10909 # Get the friendly name of the Perl module by the processing the file
10910 # name to the last dot the previous 'do' tried to find.
10914 # Get the character the seek counter is currently set at.
10916 $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10918 # Append the character to the friendly name of the presentation module.
10920 $dbmodule_friendly = $dbmodule_friendly . $dbmodule_char;
10922 # Increment the seek counter.
10926 } until ($dbmodule_seek eq $dbmodule_dot);
10928 # Append the option to tbe list of available database modules.
10930 $dbmodule_list{$dbmodule_count}{Filename} = $dbmodule_friendly;
10932 # Reset the following values.
10934 $dbmodule_seek = 0;
10935 $dbmodule_length = 0;
10936 $dbmodule_char = "";
10937 $dbmodule_friendly = "";
10942 # Get the directory settings.
10944 my $directory_settings_database = $kiriwrite_config{"directory_data_db"};
10945 my $directory_settings_output = $kiriwrite_config{"directory_data_output"};
10946 my $directory_settings_imagesuri = $kiriwrite_config{"directory_noncgi_images"};
10947 my $datetime_setting = $kiriwrite_config{"system_datetime"};
10949 my $database_server = $kiriwrite_config{"database_server"};
10950 my $database_port = $kiriwrite_config{"database_port"};
10951 my $database_protocol = $kiriwrite_config{"database_protocol"};
10952 my $database_sqldatabase = $kiriwrite_config{"database_sqldatabase"};
10953 my $database_username = $kiriwrite_config{"database_username"};
10954 my $database_passwordhash = $kiriwrite_config{"database_passwordhash"};
10955 my $database_password = $kiriwrite_config{"database_password"};
10956 my $database_prefix = $kiriwrite_config{"database_tableprefix"};
10958 # Print out a form for editing the settings.
10960 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{editsettings}, { Style => "pageheader" });
10961 $kiriwrite_presmodule->addlinebreak();
10962 $kiriwrite_presmodule->addlinebreak();
10963 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{setting}->{warning});
10964 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{warningmessage});
10965 $kiriwrite_presmodule->addlinebreak();
10966 $kiriwrite_presmodule->addlinebreak();
10968 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
10969 $kiriwrite_presmodule->startbox();
10970 $kiriwrite_presmodule->addhiddendata("mode", "settings");
10971 $kiriwrite_presmodule->addhiddendata("action", "edit");
10972 $kiriwrite_presmodule->addhiddendata("confirm", 1);
10974 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10976 $kiriwrite_presmodule->startheader();
10977 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10978 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10979 $kiriwrite_presmodule->endheader();
10981 $kiriwrite_presmodule->startrow();
10982 $kiriwrite_presmodule->addcell("tablecellheader");
10983 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10984 $kiriwrite_presmodule->endcell();
10985 $kiriwrite_presmodule->addcell("tablecellheader");
10986 $kiriwrite_presmodule->endcell();
10987 $kiriwrite_presmodule->endrow();
10989 $kiriwrite_presmodule->startrow();
10990 $kiriwrite_presmodule->addcell("tablecell1");
10991 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10992 $kiriwrite_presmodule->endcell();
10993 $kiriwrite_presmodule->addcell("tablecell2");
10994 $kiriwrite_presmodule->addinputbox("databasedir", { Size => 32, MaxLength => 64, Value => $directory_settings_database });
10995 $kiriwrite_presmodule->endcell();
10996 $kiriwrite_presmodule->endrow();
10998 $kiriwrite_presmodule->startrow();
10999 $kiriwrite_presmodule->addcell("tablecell1");
11000 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
11001 $kiriwrite_presmodule->endcell();
11002 $kiriwrite_presmodule->addcell("tablecell2");
11003 $kiriwrite_presmodule->addinputbox("outputdir", { Size => 32, MaxLength => 64, Value => $directory_settings_output });
11004 $kiriwrite_presmodule->endcell();
11005 $kiriwrite_presmodule->endrow();
11007 $kiriwrite_presmodule->startrow();
11008 $kiriwrite_presmodule->addcell("tablecell1");
11009 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
11010 $kiriwrite_presmodule->endcell();
11011 $kiriwrite_presmodule->addcell("tablecell2");
11012 $kiriwrite_presmodule->addinputbox("imagesuripath", { Size => 32, MaxLength => 64, Value => $directory_settings_imagesuri });
11013 $kiriwrite_presmodule->endcell();
11014 $kiriwrite_presmodule->endrow();
11016 $kiriwrite_presmodule->startrow();
11017 $kiriwrite_presmodule->addcell("tablecellheader");
11018 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
11019 $kiriwrite_presmodule->endcell();
11020 $kiriwrite_presmodule->addcell("tablecellheader");
11021 $kiriwrite_presmodule->endcell();
11022 $kiriwrite_presmodule->endrow();
11024 $kiriwrite_presmodule->startrow();
11025 $kiriwrite_presmodule->addcell("tablecell1");
11026 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
11027 $kiriwrite_presmodule->endcell();
11028 $kiriwrite_presmodule->addcell("tablecell2");
11029 $kiriwrite_presmodule->addinputbox("datetime", { Size => 32, MaxLength => 64, Value => $datetime_setting });
11030 $kiriwrite_presmodule->addlinebreak();
11031 $kiriwrite_presmodule->addlinebreak();
11032 $kiriwrite_presmodule->startbox("datalist");
11034 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleday});
11035 $kiriwrite_presmodule->addlinebreak();
11036 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleday});
11037 $kiriwrite_presmodule->addlinebreak();
11038 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlemonth});
11039 $kiriwrite_presmodule->addlinebreak();
11040 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublemonth});
11041 $kiriwrite_presmodule->addlinebreak();
11042 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleyear});
11043 $kiriwrite_presmodule->addlinebreak();
11044 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleyear});
11045 $kiriwrite_presmodule->addlinebreak();
11046 $kiriwrite_presmodule->addlinebreak();
11047 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlehour});
11048 $kiriwrite_presmodule->addlinebreak();
11049 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublehour});
11050 $kiriwrite_presmodule->addlinebreak();
11051 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleminute});
11052 $kiriwrite_presmodule->addlinebreak();
11053 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleminute});
11054 $kiriwrite_presmodule->addlinebreak();
11055 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlesecond});
11056 $kiriwrite_presmodule->addlinebreak();
11057 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublesecond});
11058 $kiriwrite_presmodule->addlinebreak();
11059 $kiriwrite_presmodule->addlinebreak();
11060 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{othercharacters});
11061 $kiriwrite_presmodule->endbox();
11062 $kiriwrite_presmodule->endcell();
11063 $kiriwrite_presmodule->endrow();
11065 $kiriwrite_presmodule->startrow();
11066 $kiriwrite_presmodule->addcell("tablecellheader");
11067 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
11068 $kiriwrite_presmodule->endcell();
11069 $kiriwrite_presmodule->addcell("tablecellheader");
11070 $kiriwrite_presmodule->endcell();
11071 $kiriwrite_presmodule->endrow();
11073 $kiriwrite_presmodule->startrow();
11074 $kiriwrite_presmodule->addcell("tablecell1");
11075 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
11076 $kiriwrite_presmodule->endcell();
11077 $kiriwrite_presmodule->addcell("tablecell2");
11079 $kiriwrite_presmodule->addselectbox("language");
11081 # Process the list of available languages.
11083 foreach $language (keys %language_list){
11085 # Check if the language filename matches the filename in the configuration
11088 if ($language_list{$language}{Filename} eq $language_config){
11090 $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} , Selected => 1 });
11094 $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} });
11100 $kiriwrite_presmodule->endselectbox();
11102 $kiriwrite_presmodule->startrow();
11103 $kiriwrite_presmodule->addcell("tablecellheader");
11104 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
11105 $kiriwrite_presmodule->endcell();
11106 $kiriwrite_presmodule->addcell("tablecellheader");
11107 $kiriwrite_presmodule->endcell();
11108 $kiriwrite_presmodule->endrow();
11110 $kiriwrite_presmodule->startrow();
11111 $kiriwrite_presmodule->addcell("tablecell1");
11112 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
11113 $kiriwrite_presmodule->endcell();
11114 $kiriwrite_presmodule->addcell("tablecell2");
11116 $kiriwrite_presmodule->addselectbox("presmodule");
11118 # Process the list of available presentation modules.
11120 foreach $presmodule (keys %presmodule_list){
11122 # Check if the presentation module fileanme matches the filename in the
11123 # configuration file.
11125 if ($presmodule_list{$presmodule}{Filename} eq $presmodule_config){
11127 $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} , Selected => 1 });
11131 $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} });
11137 $kiriwrite_presmodule->endselectbox();
11139 $kiriwrite_presmodule->endcell();
11140 $kiriwrite_presmodule->endrow();
11142 $kiriwrite_presmodule->startrow();
11143 $kiriwrite_presmodule->addcell("tablecell1");
11144 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
11145 $kiriwrite_presmodule->endcell();
11146 $kiriwrite_presmodule->addcell("tablecell2");
11148 # Process the list of available database modules.
11150 $kiriwrite_presmodule->addselectbox("dbmodule");
11152 foreach $dbmodule (keys %dbmodule_list){
11154 # Check if the database module fileanme matches the filename in the
11155 # configuration file.
11157 if ($dbmodule_list{$dbmodule}{Filename} eq $dbmodule_config){
11159 $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} , Selected => 1 });
11163 $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} });
11170 $kiriwrite_presmodule->endselectbox();
11172 $kiriwrite_presmodule->endcell();
11173 $kiriwrite_presmodule->endrow();
11175 $kiriwrite_presmodule->startrow();
11176 $kiriwrite_presmodule->addcell("tablecell1");
11177 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseserver});
11178 $kiriwrite_presmodule->endcell();
11179 $kiriwrite_presmodule->addcell("tablecell2");
11180 $kiriwrite_presmodule->addinputbox("database_server", { Size => 32, MaxLength => 128, Value => $database_server });
11181 $kiriwrite_presmodule->endcell();
11182 $kiriwrite_presmodule->endrow();
11184 $kiriwrite_presmodule->startrow();
11185 $kiriwrite_presmodule->addcell("tablecell1");
11186 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseport});
11187 $kiriwrite_presmodule->endcell();
11188 $kiriwrite_presmodule->addcell("tablecell2");
11189 $kiriwrite_presmodule->addinputbox("database_port", { Size => 5, MaxLength => 5, Value => $database_port });
11190 $kiriwrite_presmodule->endcell();
11191 $kiriwrite_presmodule->endrow();
11193 $kiriwrite_presmodule->startrow();
11194 $kiriwrite_presmodule->addcell("tablecell1");
11195 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseprotocol});
11196 $kiriwrite_presmodule->endcell();
11197 $kiriwrite_presmodule->addcell("tablecell2");
11199 # Check if TCP is being used.
11201 $kiriwrite_presmodule->addselectbox("database_protocol");
11203 if ($database_protocol eq "tcp"){
11205 # The TCP protocol is selected so have the TCP option selected.
11207 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp", Selected => 1});
11211 # The TCP protocol is not selected.
11213 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp"});
11217 # Check if UDP is being used.
11219 if ($database_protocol eq "udp"){
11221 # The UDP protocol is selected so have the UDP option selected.
11223 $kiriwrite_presmodule->addoption("UDP", { Value => "udp", Selected => 1});
11227 # The UDP protocol is not selected.
11229 $kiriwrite_presmodule->addoption("UDP", { Value => "udp"});
11233 $kiriwrite_presmodule->endselectbox();
11235 $kiriwrite_presmodule->endcell();
11236 $kiriwrite_presmodule->endrow();
11238 $kiriwrite_presmodule->startrow();
11239 $kiriwrite_presmodule->addcell("tablecell1");
11240 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasename});
11241 $kiriwrite_presmodule->endcell();
11242 $kiriwrite_presmodule->addcell("tablecell2");
11243 $kiriwrite_presmodule->addinputbox("database_sqldatabase", { Size => 32, MaxLength => 32, Value => $database_sqldatabase });
11244 $kiriwrite_presmodule->endcell();
11245 $kiriwrite_presmodule->endrow();
11247 $kiriwrite_presmodule->startrow();
11248 $kiriwrite_presmodule->addcell("tablecell1");
11249 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseusername});
11250 $kiriwrite_presmodule->endcell();
11251 $kiriwrite_presmodule->addcell("tablecell2");
11252 $kiriwrite_presmodule->addinputbox("database_username", { Size => 16, MaxLength => 16, Value => $database_username });
11253 $kiriwrite_presmodule->endcell();
11254 $kiriwrite_presmodule->endrow();
11256 $kiriwrite_presmodule->startrow();
11257 $kiriwrite_presmodule->addcell("tablecell1");
11258 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasepassword});
11259 $kiriwrite_presmodule->endcell();
11260 $kiriwrite_presmodule->addcell("tablecell2");
11261 $kiriwrite_presmodule->addinputbox("database_password", { Size => 16, MaxLength => 64, Password => 1 });
11262 $kiriwrite_presmodule->addtext(" ");
11263 $kiriwrite_presmodule->addcheckbox("database_password_keep", { OptionDescription => "Keep the current password", Checked => 1 });
11264 $kiriwrite_presmodule->endcell();
11265 $kiriwrite_presmodule->endrow();
11267 $kiriwrite_presmodule->startrow();
11268 $kiriwrite_presmodule->addcell("tablecell1");
11269 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{tableprefix});
11270 $kiriwrite_presmodule->endcell();
11271 $kiriwrite_presmodule->addcell("tablecell2");
11272 $kiriwrite_presmodule->addinputbox("database_tableprefix", { Size => 16, MaxLength => 16, Value => $database_prefix });
11273 $kiriwrite_presmodule->endcell();
11274 $kiriwrite_presmodule->endrow();
11276 $kiriwrite_presmodule->endtable();
11278 $kiriwrite_presmodule->addlinebreak();
11279 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{setting}->{changesettingsbutton});
11280 $kiriwrite_presmodule->addtext(" | ");
11281 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
11282 $kiriwrite_presmodule->addtext(" | ");
11283 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
11284 $kiriwrite_presmodule->endbox();
11285 $kiriwrite_presmodule->endform();
11287 return $kiriwrite_presmodule->grab();
11291 sub kiriwrite_settings_load{
11292 #################################################################################
11293 # kiriwrite_settings_load: Load the configuration settings into the global #
11298 # kiriwrite_settings_load(); #
11299 #################################################################################
11301 # Load the required Perl modules.
11303 use XML::Simple qw(XMLin);
11304 $xsl = XML::Simple->new();
11306 # Check if the Kiriwrite configuration file exists before using it and
11307 # return an critical error if it doesn't exist.
11309 my $kiriwrite_conf_exist = kiriwrite_fileexists("kiriwrite.xml");
11311 if ($kiriwrite_conf_exist eq 1){
11313 # The configuration really does not exist so return an critical error.
11315 kiriwrite_critical("configfilemissing");
11319 # Check if the Kiriwrite configuration file has valid permission settings
11320 # before using it and return an critical error if it doesn't have the
11321 # valid permission settings.
11323 my $kiriwrite_conf_permissions = kiriwrite_filepermissions("kiriwrite.xml", 1, 0);
11325 if ($kiriwrite_conf_permissions eq 1){
11327 # The permission settings for the Kiriwrite configuration file are
11328 # invalid, so return an critical error.
11330 kiriwrite_critical("configfileinvalidpermissions");
11334 # Converts the XML file into meaningful data for later on in this subroutine.
11336 my $kiriwrite_conf_file = 'kiriwrite.xml';
11337 my $kiriwrite_conf_data = $xsl->XMLin($kiriwrite_conf_file, SuppressEmpty => 1);
11339 # Go and fetch the settings and place them into a hash (that is global).
11341 %kiriwrite_config = (
11343 "directory_data_db" => $kiriwrite_conf_data->{settings}->{directories}->{database},
11344 "directory_data_output" => $kiriwrite_conf_data->{settings}->{directories}->{output},
11345 "directory_noncgi_images" => $kiriwrite_conf_data->{settings}->{directories}->{images},
11347 "system_language" => $kiriwrite_conf_data->{settings}->{language}->{lang},
11348 "system_presmodule" => $kiriwrite_conf_data->{settings}->{system}->{presentation},
11349 "system_dbmodule" => $kiriwrite_conf_data->{settings}->{system}->{database},
11350 "system_datetime" => $kiriwrite_conf_data->{settings}->{system}->{datetime},
11352 "database_server" => $kiriwrite_conf_data->{settings}->{database}->{server},
11353 "database_port" => $kiriwrite_conf_data->{settings}->{database}->{port},
11354 "database_protocol" => $kiriwrite_conf_data->{settings}->{database}->{protocol},
11355 "database_sqldatabase" => $kiriwrite_conf_data->{settings}->{database}->{database},
11356 "database_username" => $kiriwrite_conf_data->{settings}->{database}->{username},
11357 "database_password" => $kiriwrite_conf_data->{settings}->{database}->{password},
11358 "database_tableprefix" => $kiriwrite_conf_data->{settings}->{database}->{prefix}
11362 # Do a validation check on all of the variables that were loaded into the global configuration hash.
11364 kiriwrite_variablecheck($kiriwrite_config{"directory_data_db"}, "maxlength", 64, 0);
11365 kiriwrite_variablecheck($kiriwrite_config{"directory_data_output"}, "maxlength", 64, 0);
11366 kiriwrite_variablecheck($kiriwrite_config{"directory_noncgi_images"}, "maxlength", 512, 0);
11367 kiriwrite_variablecheck($kiriwrite_config{"directory_data_template"}, "maxlength", 64, 0);
11369 my $kiriwrite_config_language_filename = kiriwrite_variablecheck($kiriwrite_config{"system_language"}, "language_filename", "", 1);
11370 my $kiriwrite_config_presmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_presmodule"}, "module", 0, 1);
11371 my $kiriwrite_config_dbmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_dbmodule"}, "module", 0, 1);
11373 # Check if the language filename is valid and return an critical error if
11376 if ($kiriwrite_config_language_filename eq 1){
11378 # The language filename is blank so return an critical error.
11380 kiriwrite_critical("languagefilenameblank");
11382 } elsif ($kiriwrite_config_language_filename eq 2){
11384 # The language filename is invalid so return an critical error.
11386 kiriwrite_critical("languagefilenameinvalid");
11390 # Check if the presentation and database module names are valid and return a critical
11391 # error if they aren't.
11393 if ($kiriwrite_config_presmodule_filename eq 1){
11395 # The presentation module filename given is blank so return an
11398 kiriwrite_critical("presmoduleblank");
11402 if ($kiriwrite_config_presmodule_filename eq 2){
11404 # The presentation module filename is invalid so return an
11407 kiriwrite_critical("presmoduleinvalid");
11411 if ($kiriwrite_config_dbmodule_filename eq 1){
11413 # The database module filename given is blank so return an
11416 kiriwrite_critical("dbmoduleblank");
11420 if ($kiriwrite_config_dbmodule_filename eq 2){
11422 # The database module filename given is invalid so return
11423 # an critical error.
11425 kiriwrite_critical("dbmoduleinvalid");
11429 # Check if the language file does exist before loading it and return an critical error
11430 # if it does not exist.
11432 my $kiriwrite_config_language_fileexists = kiriwrite_fileexists("lang/" . $kiriwrite_config{"system_language"} . ".xml");
11434 if ($kiriwrite_config_language_fileexists eq 1){
11436 # Language file does not exist so return an critical error.
11438 kiriwrite_critical("languagefilemissing");
11442 # Check if the language file has valid permission settings and return an critical error if
11443 # the language file has invalid permissions settings.
11445 my $kiriwrite_config_language_filepermissions = kiriwrite_filepermissions("lang/" . $kiriwrite_config{"system_language"} . ".xml", 1, 0);
11447 if ($kiriwrite_config_language_filepermissions eq 1){
11449 # Language file contains invalid permissions so return an critical error.
11451 kiriwrite_critical("languagefilepermissions");
11455 # Load the language file.
11457 $kiriwrite_lang = $xsl->XMLin("lang/" . $kiriwrite_config{"system_language"} . ".xml", SuppressEmpty => 1);
11459 # Check if the presentation module does exist before loading it and return an critical error
11460 # if the presentation module does not exist.
11462 my $kiriwrite_config_presmodule_fileexists = kiriwrite_fileexists("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm");
11464 if ($kiriwrite_config_presmodule_fileexists eq 1){
11466 # Presentation module does not exist so return an critical error.
11468 kiriwrite_critical("presmodulemissing");
11472 # Check if the presentation module does have the valid permission settings and return a
11473 # critical error if the presentation module contains invalid permission settings.
11475 my $kiriwrite_config_presmodule_permissions = kiriwrite_filepermissions("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm", 1, 0);
11477 if ($kiriwrite_config_presmodule_permissions eq 1){
11479 # Presentation module contains invalid permissions so return an critical error.
11481 kiriwrite_critical("presmoduleinvalidpermissions");
11485 # Check if the database module does exist before loading it and return an critical error
11486 # if the database module does not exist.
11488 my $kiriwrite_config_dbmodule_fileexists = kiriwrite_fileexists("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm");
11490 if ($kiriwrite_config_dbmodule_fileexists eq 1){
11492 # Database module does not exist so return an critical error.
11494 kiriwrite_critical("dbmodulemissing");
11498 # Check if the database module does have the valid permission settings and return an
11499 # critical error if the database module contains invalid permission settings.
11501 my $kiriwrite_config_dbmodule_permissions = kiriwrite_filepermissions("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm", 1, 0);
11503 if ($kiriwrite_config_dbmodule_permissions eq 1){
11505 # Presentation module contains invalid permissions so return an critical error.
11507 kiriwrite_critical("dbmoduleinvalidpermissions");
11511 # Include the Modules directory.
11513 use lib "Modules/";
11515 # Load the presentation module.
11517 my $presmodulename = "Presentation::" . $kiriwrite_config{"system_presmodule"};
11518 ($presmodulename) = $presmodulename =~ m/^(.*)$/g;
11519 eval "use " . $presmodulename;
11520 $presmodulename = "Kiriwrite::Presentation::" . $kiriwrite_config{"system_presmodule"};
11521 $kiriwrite_presmodule = $presmodulename->new();
11523 # Load the database module.
11525 my $dbmodulename = "Database::" . $kiriwrite_config{"system_dbmodule"};
11526 ($dbmodulename) = $dbmodulename =~ m/^(.*)$/g;
11527 eval "use " . $dbmodulename;
11528 $dbmodulename = "Kiriwrite::Database::" . $kiriwrite_config{"system_dbmodule"};
11529 $kiriwrite_dbmodule = $dbmodulename->new();
11531 # Load the following settings to the database module.
11533 $kiriwrite_dbmodule->loadsettings({ Directory => $kiriwrite_config{"directory_data_db"}, DateTime => $kiriwrite_config{"system_datetime"}, Server => $kiriwrite_config{"database_server"}, Port => $kiriwrite_config{"database_port"}, Protocol => $kiriwrite_config{"database_protocol"}, Database => $kiriwrite_config{"database_sqldatabase"}, Username => $kiriwrite_config{"database_username"}, Password => $kiriwrite_config{"database_password"}, TablePrefix => $kiriwrite_config{"database_tableprefix"} });
11539 sub kiriwrite_variablecheck{
11540 #################################################################################
11541 # kiriwrite_variablecheck: Checks the variables for any invalid characters. #
11545 # kiriwrite_variablecheck(variable, type, length, noerror); #
11547 # variable Specifies the variable to be checked. #
11548 # type Specifies what type the variable is. #
11549 # option Specifies the maximum/minimum length of the variable #
11550 # (if minlength/maxlength is used) or if the filename should be #
11551 # checked to see if it is blank. #
11552 # noerror Specifies if Kiriwrite should return an error or not on #
11553 # certain values. #
11554 #################################################################################
11556 # Get the values that were passed to the subroutine.
11558 my ($variable_data, $variable_type, $variable_option, $variable_noerror) = @_;
11560 if ($variable_type eq "numbers"){
11562 # Check for numbers and return an error if there is anything else than numebrs.
11564 my $variable_data_validated = $variable_data; # Copy the variable_data to variable_data_validated.
11565 $variable_data_validated =~ tr/0-9//d; # Take away all of the numbers and from the variable.
11566 # If it only contains numbers then it should be blank.
11568 if ($variable_data_validated eq ""){
11569 # The validated variable is blank. So continue to the end of this section where the return function should be.
11571 # The variable is not blank, so check if the no error value is set
11574 if ($variable_noerror eq 1){
11576 # The validated variable is not blank and the noerror
11577 # value is set to 1. So return an value of 1.
11578 # (meaning that the data is invalid).
11582 } elsif ($variable_noerror eq 0) {
11584 # The validated variable is not blank and the noerror
11585 # value is set to 0.
11587 kiriwrite_error("invalidvariable");
11591 # The variable noerror value is something else
11592 # pther than 1 or 0. So return an error.
11594 kiriwrite_error("invalidvariable");
11602 } elsif ($variable_type eq "lettersnumbers"){
11604 # Check for letters and numbers and return an error if there is anything else other
11605 # than letters and numbers.
11607 my $variable_data_validated = $variable_data; # Copy the variable_data to variable_data_validated
11608 $variable_data_validated =~ tr/a-zA-Z0-9.//d;
11609 $variable_data_validated =~ s/\s//g;
11611 if ($variable_data_validated eq ""){
11612 # The validated variable is blank. So continue to the end of this section where the return function should be.
11614 # The variable is not blank, so check if the no error value is set
11617 if ($variable_noerror eq 1){
11619 # The validated variable is not blank and the noerror
11620 # value is set to 1. So return an value of 1.
11621 # (meaning that the data is invalid).
11625 } elsif ($variable_noerror eq 0) {
11627 # The validated variable is not blank and the noerror
11628 # value is set to 0.
11630 kiriwrite_error("invalidvariable");
11634 # The variable noerror value is something else
11635 # pther than 1 or 0. So return an error.
11637 kiriwrite_error("invalidvariable");
11645 } elsif ($variable_type eq "maxlength"){
11646 # Check for the length of the variable, return an error if it is longer than the length specified.
11648 # Check if the variable_data string is blank, if it is then set the variable_data_length
11651 my $variable_data_length = 0;
11653 if (!$variable_data){
11655 # Set variable_data_length to '0'.
11656 $variable_data_length = 0;
11660 # Get the length of the variable recieved.
11661 $variable_data_length = length($variable_data);
11667 if ($variable_data_length > $variable_option){
11669 # The variable length is longer than it should be so check if
11670 # the no error value is set 1.
11672 if ($variable_noerror eq 1){
11674 # The no error value is set to 1, so return an
11675 # value of 1 (meaning tha the variable is
11676 # too long to be used).
11680 } elsif ($variable_noerror eq 0){
11682 # The no error value is set to 0, so return
11685 kiriwrite_error("variabletoolong");
11689 # The no error value is something else other
11690 # than 0 or 1, so return an error.
11692 kiriwrite_error("variabletoolong");
11698 # The variable length is exactly or shorter than specified, so continue to end of this section where
11699 # the return function should be.
11705 } elsif ($variable_type eq "blank"){
11706 # Check if the variable is blank and if it is blank, then return an error.
11708 if (!$variable_data){
11710 # The variable data really is blank, so check what
11711 # the no error value is set.
11713 if ($variable_noerror eq 1){
11715 # The no error value is set to 1, so return
11716 # a value of 1 (saying that the variable was
11721 } elsif ($variable_noerror eq 0){
11723 # The no error value is set to 0, so return
11726 kiriwrite_error("blankvariable");
11730 # The no error value is something else other
11731 # than 0 or 1, so return an error.
11733 kiriwrite_error("invalidvariable");
11741 } elsif ($variable_type eq "filename"){
11742 # Check for letters and numbers, if anything else than letters and numbers is there (including spaces) return
11745 # Check if the filename passed is blank, if it is then return with an error.
11747 if ($variable_data eq ""){
11749 # The filename specified is blank, so check what the
11750 # noerror value is set.
11752 if ($variable_noerror eq 1){
11754 # The no error value is set to 1 so return
11755 # a value of 1 (meaning that the filename
11760 } elsif ($variable_noerror eq 0){
11762 # The no error value is set to 1 so return
11765 kiriwrite_error("blankfilename");
11769 # The no error value is something else other
11770 # than 0 or 1, so return an error.
11772 kiriwrite_error("invalidvariable");
11781 my $variable_data_validated = $variable_data;
11782 $variable_data_validated =~ tr/a-zA-Z0-9\.//d;
11784 # Check if the validated data variable is blank, if it is
11785 # then continue to the end of this section where the return
11786 # function should be, otherwise return an error.
11788 if ($variable_data_validated eq ""){
11790 # The validated data variable is blank, meaning that
11791 # it only contained letters and numbers.
11795 # The validated data variable is not blank, meaning
11796 # that it contains something else, so return an error
11799 if ($variable_noerror eq 1){
11801 # The no error value is set to 1 so return
11802 # an value of 2. (meaning that the filename
11808 } elsif ($variable_noerror eq 0){
11810 # The no error value is set to 0 so return
11813 kiriwrite_error("invalidfilename");
11817 # The no error value is something else other
11818 # than 0 or 1 so return an error.
11820 kiriwrite_error("invalidvariable");
11828 } elsif ($variable_type eq "filenameindir"){
11829 # Check if the filename is in the directory and return an
11830 # error if it isn't.
11832 if ($variable_data eq ""){
11834 # The filename specified is blank, so check what the
11835 # noerror value is set.
11837 if ($variable_noerror eq 1){
11839 # The no error value is set to 1 so return
11840 # a value of 1 (meaning that the filename
11845 } elsif ($variable_noerror eq 0){
11847 # The no error value is set to 1 so return
11850 kiriwrite_error("blankfilename");
11854 # The no error value is something else other
11855 # than 0 or 1, so return an error.
11857 kiriwrite_error("invalidvariable");
11866 # Set the following variables for later on.
11868 my $variable_data_length = 0;
11869 my $variable_data_char = "";
11870 my $variable_data_validated = "";
11871 my $variable_data_seek = 0;
11872 my $variable_database_list = "";
11873 my $variable_database_listcurrent = "";
11874 my $variable_data_firstlevel = 1;
11876 # Get the length of the variable recieved.
11878 $variable_data_length = length($variable_data);
11880 # Check if the database filename contains the directory command
11881 # for up a directory level and if it is, return an error
11882 # or return with a number.
11886 # Get a character from the filename passed to this subroutine.
11888 $variable_data_char = substr($variable_data, $variable_data_seek, 1);
11890 # Check if the current character is the forward slash character.
11892 if ($variable_data_char eq "/"){
11894 # Check if the current directory is blank (and on the first level), or if the
11895 # current directory contains two dots or one dot, if it does return an error.
11897 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
11899 # Check if the noerror value is set to 1, if it is return an
11900 # number, else return an proper error.
11902 if ($variable_noerror eq 1){
11904 # Page filename contains invalid characters and
11905 # the no error value is set to 1 so return a
11906 # value of 2 (meaning that the page filename
11911 } elsif ($variable_noerror eq 0) {
11913 # Page filename contains invalid characters and
11914 # the no error value is set to 0 so return an
11917 kiriwrite_error("invalidfilename");
11921 # The no error value is something else other
11922 # than 0 or 1 so return an error.
11924 kiriwrite_error("invalidvariable");
11930 # Append the forward slash, clear the current directory name and set
11931 # the first directory level value to 0.
11933 $variable_database_list = $variable_database_list . $variable_data_char;
11934 $variable_database_listcurrent = "";
11935 $variable_data_firstlevel = 0;
11939 # Append the current character to the directory name and to the current
11942 $variable_database_list = $variable_database_list . $variable_data_char;
11943 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
11947 # Increment the seek counter.
11949 $variable_data_seek++;
11951 } until ($variable_data_seek eq $variable_data_length);
11955 } elsif ($variable_type eq "datetime"){
11956 # Check if the date and time setting format is valid.
11958 if ($variable_data eq ""){
11960 if ($variable_noerror eq 1){
11962 # The no error value is set to 1 so return
11963 # a value of 1 (meaning that the date and
11964 # time format was blank).
11968 } elsif ($variable_noerror eq 0){
11970 # The no error value is set to 1 so return
11973 kiriwrite_error("blankdatetimeformat");
11977 # The no error value is something else other
11978 # than 0 or 1, so return an error.
11980 kiriwrite_error("invalidvariable");
11986 my $variable_data_validated = $variable_data;
11987 $variable_data_validated =~ tr|dDmMyYhms/():[ ]||d;
11989 if ($variable_data_validated eq ""){
11991 # The date and time format is valid. So
11996 # The validated data variable is not blank, meaning
11997 # that it contains something else, so return an error
12000 if ($variable_noerror eq 1){
12002 # The no error value is set to 1 so return
12003 # an value of 2. (meaning that the date and
12004 # time format was invalid).
12008 } elsif ($variable_noerror eq 0){
12010 # The no error value is set to 0 so return
12013 kiriwrite_error("invaliddatetimeformat");
12017 # The no error value is something else other
12018 # than 0 or 1 so return an error.
12020 kiriwrite_error("invalidvariable");
12028 } elsif ($variable_type eq "directory"){
12029 # Check if the directory only contains letters and numbers and
12030 # return an error if anything else appears.
12032 my $variable_data_validated = $variable_data;
12033 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12035 if ($variable_data eq ""){
12037 if ($variable_noerror eq 1){
12039 # The no error value is set to 1 so return
12040 # a value of 1 (meaning that the directory
12045 } elsif ($variable_noerror eq 0){
12047 # The no error value is set to 1 so return
12050 kiriwrite_error("blankdirectory");
12054 # The no error value is something else other
12055 # than 0 or 1, so return an error.
12057 kiriwrite_error("invalidvariable");
12063 if ($variable_data_validated eq ""){
12065 # The validated data variable is blank, meaning that
12066 # it only contains letters and numbers.
12070 # The validated data variable is not blank, meaning
12071 # that it contains something else, so return an error
12074 if ($variable_noerror eq 1){
12076 # The no error value is set to 1 so return
12077 # an value of 2. (meaning that the directory
12078 # name is invalid).
12082 } elsif ($variable_noerror eq 0){
12084 # The no error value is set to 0 so return
12087 kiriwrite_error("invaliddirectory");
12091 # The no error value is something else other
12092 # than 0 or 1 so return an error.
12094 kiriwrite_error("invalidvariable");
12102 } elsif ($variable_type eq "language_filename"){
12104 # The variable type is a language filename type.
12105 # Check if the language file name is blank and
12106 # if it is then return an error (or value).
12108 if ($variable_data eq ""){
12110 # The language filename is blank so check the
12111 # no error value and return an error (or value).
12113 if ($variable_noerror eq 1){
12115 # Language filename is blank and the no error value
12116 # is set as 1, so return a value of 1 (saying that
12117 # the language filename is blank).
12121 } elsif ($variable_noerror eq 0) {
12123 # Language filename is blank and the no error value
12124 # is not set as 1, so return an error.
12126 kiriwrite_critical("languagefilenameblank");
12130 # The noerror value is something else other
12131 # than 0 or 1 so return an error.
12133 kiriwrite_error("invalidvariable");
12139 # Set the following variables for later on.
12141 my $variable_data_length = 0;
12142 my $variable_data_char = "";
12143 my $variable_data_seek = 0;
12145 # Get the length of the language file name.
12147 $variable_data_length = length($variable_data);
12151 # Get a character from the language filename passed to this
12152 # subroutine and the character the seek counter value is set
12155 $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12157 # Check if the language filename contains a forward slash or a dot,
12158 # if the selected character is a forward slash then return an error
12161 if ($variable_data_char eq "/" || $variable_data_char eq "."){
12163 # The language filename contains a forward slash or
12164 # a dot so depending on the no error value, return
12165 # an error or a value.
12167 if ($variable_noerror eq 1){
12169 # Language filename contains a forward slash or a dot
12170 # and the no error value has been set to 1, so return
12171 # an value of 2 (saying that the language file name is
12176 } elsif ($variable_noerror eq 0) {
12178 # Language filename contains a forward slash and the no
12179 # error value has not been set to 1, so return an error.
12181 kiriwrite_critical("languagefilenameinvalid");
12185 # The noerror value is something else other than
12186 # 1 or 0 so return an error.
12188 kiriwrite_error("invalidvariable");
12194 # Increment the seek counter.
12196 $variable_data_seek++;
12198 } until ($variable_data_seek eq $variable_data_length);
12202 } elsif ($variable_type eq "pagesetting"){
12204 # The variable type is a page setting, so check if the page
12205 # setting has one of the valid options.
12207 if ($variable_data eq 0 || $variable_data eq 1 || $variable_data eq 2 || $variable_data eq 3){
12209 # The variable is one of the options above, so continue
12210 # to the end of this section.
12214 # The variable is not one of the options above, so check
12215 # and see if a error or a value should be returned.
12217 if ($variable_noerror eq 1){
12219 # The page setting is invalid and the no error
12220 # value is set 1, so return a value of 1
12221 # (saying that the page setting value is
12226 } elsif ($variable_noerror eq 0) {
12228 # Page setting is invalid and the no error value
12229 # is not 1, so return an error.
12231 kiriwrite_error("invalidvariable");
12235 # The no error value is something else other
12236 # than 0 or 1 so return an error.
12238 kiriwrite_error("invalidvariable");
12246 } elsif ($variable_type eq "page_filename"){
12248 # The variable type is a page filename type. Check
12249 # if the data is empty and if it is then return an
12250 # error (or value).
12252 if ($variable_data eq ""){
12254 # The filename is blank so check the no error
12255 # value and depending on it return an value
12258 if ($variable_noerror eq 1){
12260 # Page filename is blank and the no error value
12261 # is set as 1, so return a value of 1 (saying
12262 # the filename is blank).
12266 } elsif ($variable_noerror eq 0) {
12268 # Page filename is blank and the no error value
12269 # is not 1, so return an error.
12271 kiriwrite_error("emptypagefilename");
12275 # The no error value is something else other
12276 # than 0 or 1 so return an error.
12278 kiriwrite_error("invalidvariable");
12283 # Set the following variables for later on.
12286 my $variable_data_length = 0;
12287 my $variable_data_slash = 0;
12288 my $variable_data_char = "";
12289 my $variable_data_validated = "";
12290 my $variable_data_seek = 0;
12291 my $variable_database_list = "";
12292 my $variable_database_listcurrent = "";
12293 my $variable_data_firstlevel = 1;
12295 # Get the length of the filename.
12297 $variable_data_length = length($variable_data);
12299 # Check that only valid characters should be appearing in
12302 $variable_data_validated = $variable_data;
12303 $variable_data_validated =~ tr|a-zA-Z0-9\.\/\-_||d;
12305 if ($variable_data_validated ne ""){
12307 # The validated variable is not blank, meaning the
12308 # variable contains invalid characters, so return
12311 if ($variable_noerror eq 1){
12313 # Page filename contains invalid characters and
12314 # the no error value is set to 1 so return a
12315 # value of 2 (meaning that the page filename
12320 } elsif ($variable_noerror eq 0) {
12322 # Page filename contains invalid characters and
12323 # the no error value is set to 0 so return an
12326 kiriwrite_error("invalidfilename");
12330 # The no error value is something else other
12331 # than 0 or 1 so return an error.
12333 kiriwrite_error("invalidvariable");
12339 # Check if the page filename contains the directory command
12340 # for up a directory level and if it is, return an error
12341 # or return with a number.
12345 # Get a character from the filename passed to this subroutine.
12347 $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12349 # Check if the current character is the forward slash character.
12351 if ($variable_data_char eq "/"){
12353 # Check if the current directory is blank (and on the first level), or if the
12354 # current directory contains two dots or one dot, if it does return an error.
12356 $variable_data_slash = 1;
12358 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
12360 # Check if the noerror value is set to 1, if it is return an
12361 # number, else return an proper error.
12363 if ($variable_noerror eq 1){
12365 # Page filename contains invalid characters and
12366 # the no error value is set to 1 so return a
12367 # value of 2 (meaning that the page filename
12372 } elsif ($variable_noerror eq 0) {
12374 # Page filename contains invalid characters and
12375 # the no error value is set to 0 so return an
12378 kiriwrite_error("invalidfilename");
12382 # The no error value is something else other
12383 # than 0 or 1 so return an error.
12385 kiriwrite_error("invalidvariable");
12391 # Append the forward slash, clear the current directory name and set
12392 # the first directory level value to 0.
12394 $variable_database_list = $variable_database_list . $variable_data_char;
12395 $variable_database_listcurrent = "";
12396 $variable_data_firstlevel = 0;
12400 # Append the current character to the directory name and to the current
12403 $variable_data_slash = 0;
12405 $variable_database_list = $variable_database_list . $variable_data_char;
12406 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
12410 # Increment the seek counter.
12412 $variable_data_seek++;
12414 } until ($variable_data_seek eq $variable_data_length);
12416 # Check if the last character is a slash and return an
12419 if ($variable_data_slash eq 1){
12421 if ($variable_noerror eq 1){
12423 # Last character is a slash and the no error
12424 # value is set to 1 so return a value of 2
12425 # (meaning that the page filename is invalid).
12429 } elsif ($variable_noerror eq 0) {
12431 # Page filename contains a slash for the last
12432 # character and the no error value is set to 0
12433 # so return an error.
12435 kiriwrite_error("invalidfilename");
12439 # The no error value is something else other
12440 # than 0 or 1 so return an error.
12442 kiriwrite_error("invalidvariable");
12450 } elsif ($variable_type eq "module"){
12452 # The variable type is a presentation module filename.
12454 # Check if the variable_data is blank and if it is
12457 if ($variable_data eq ""){
12459 # The presentation module is blank so check if an error
12460 # value should be returned or a number should be
12463 if ($variable_noerror eq 1){
12465 # Module name is blank and the no error value
12466 # is set to 1 so return a value of 2 (meaning
12467 # that the page filename is blank).
12471 } elsif ($variable_noerror eq 0) {
12473 # Module name contains is blank and the no error
12474 # value is set to 0 so return an error.
12476 kiriwrite_critical("moduleblank");
12480 # The no error value is something else other
12481 # than 0 or 1 so return an error.
12483 kiriwrite_critical("invalidvalue");
12491 my $variable_data_validated = $variable_data;
12492 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12494 if ($variable_data_validated eq ""){
12498 if ($variable_noerror eq 1){
12500 # Module name contains invalid characters and
12501 # the no error value is set to 1 so return a
12502 # value of 2 (meaning that the page filename
12507 } elsif ($variable_noerror eq 0) {
12509 # Module name contains invalid characters and
12510 # the no error value is set to 0 so return an
12513 kiriwrite_critical("moduleinvalid");
12517 # The no error value is something else other
12518 # than 0 or 1 so return an error.
12520 kiriwrite_error("invalidvalue");
12528 } elsif ($variable_type eq "utf8"){
12530 # The variable type is a UTF8 string.
12532 if (!$variable_data){
12534 $variable_data = "";
12538 # Check if the string is a valid UTF8 string.
12540 if ($variable_data =~ m/^(
12541 [\x09\x0A\x0D\x20-\x7E] # ASCII
12542 | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
12543 | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
12544 | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
12545 | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
12546 | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
12547 | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
12548 | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
12551 # The UTF-8 string is valid.
12555 # The UTF-8 string is not valid, check if the no error
12556 # value is set to 1 and return an error if it isn't.
12558 if ($variable_noerror eq 1){
12560 # The no error value has been set to 1, so return
12561 # a value of 1 (meaning that the UTF-8 string is
12566 } elsif ($variable_noerror eq 0) {
12568 # The no error value has been set to 0, so return
12571 kiriwrite_error("invalidutf8");
12575 # The no error value is something else other than 0
12576 # or 1, so return an error.
12578 kiriwrite_error("invalidoption");
12586 } elsif ($variable_type eq "serverprotocol"){
12588 # Check if the server protocol is TCP or UDP and return
12589 # an error if it isn't.
12591 if ($variable_data ne "tcp" && $variable_data ne "udp"){
12593 # The protocol given is not valid, check if the no
12594 # error value is set to 1 and return an error if it isn't.
12596 if ($variable_noerror eq 1){
12598 # The no error value has been set to 1, so return a
12599 # value of 1 (meaning that the server protocol is
12604 } elsif ($variable_noerror eq 0){
12606 # The no error value has been set to 0, so return
12609 kiriwrite_error("serverprotocolinvalid");
12613 # The no error value is something else other than 0
12614 # or 1, so return an error.
12616 kiriwrite_error("invalidoption");
12624 } elsif ($variable_type eq "port"){
12626 # Check if the port number given is less than 0 or more than 65535
12627 # and return an error if it is.
12629 if ($variable_data < 0 || $variable_data > 65535){
12631 # The port number is less than 0 and more than 65535 so
12632 # check if the no error value is set to 1 and return an
12633 # error if it isn't.
12635 if ($variable_noerror eq 1){
12637 # The no error value has been set to 1, so return a
12638 # value of 1 (meaning that the port number is invalid).
12642 } elsif ($variable_noerror eq 0){
12644 # The no error value has been set to 0, so return
12647 kiriwrite_error("serverportnumberinvalid");
12651 # The no error value is something else other than 0
12652 # or 1, so return an error.
12654 kiriwrite_error("invalidoption");
12664 # Another type than the valid ones above has been specified so return an error specifying an invalid option.
12665 kiriwrite_error("invalidoption");
12669 sub kiriwrite_output_header{
12670 #################################################################################
12671 # kiriwrite_output_header: Outputs the header to the browser/stdout/console. #
12675 # kiriwrite_output_header(); #
12676 #################################################################################
12678 # Print a header saying that the page expires immediately since the
12679 # date is set in the past.
12681 print header(-Expires=>'Sunday, 01-Jan-06 00:00:00 GMT', -charset=>'utf-8');
12685 sub kiriwrite_processfilename{
12686 #################################################################################
12687 # kiriwrite_processfilename: Processes a name and turns it into a filename that #
12688 # can be used by Kiriwrite. #
12692 # kiriwrite_processfilename(text); #
12694 # text Specifies the text to be used in the process for creating a new #
12696 #################################################################################
12698 # Get the values that have been passed to the subroutine.
12700 my ($process_text) = @_;
12702 # Define some variables that will be used later on.
12704 my $processed_stageone = "";
12705 my $processed_stagetwo = "";
12706 my $processed_length = "";
12707 my $processed_char = "";
12708 my $processed_seek = 0;
12709 my $processed_filename = "";
12711 # Set the first stage value of the processed filename to the
12712 # process filename and then filter it out to only contain
12713 # numbers and letters (no spaces) and then convert the
12714 # capitals to small letters.
12716 $processed_stageone = $process_text;
12717 $processed_stageone =~ tr#a-zA-Z0-9##cd;
12718 $processed_stageone =~ tr/A-Z/a-z/;
12720 # Now set the second stage value of the processed filename
12721 # to the first stage value of the processed filename and
12722 # then limit the filename down to 32 characters.
12724 $processed_stagetwo = $processed_stageone;
12725 $processed_length = length($processed_stagetwo);
12727 # Process the second stage filename into the final
12728 # filename and do so until the seek counter is 32
12729 # or reaches the length of the second stage filename.
12733 # Get the character that is the seek counter
12736 $processed_char = substr($processed_stagetwo, $processed_seek, 1);
12738 # Append to the final processed filename.
12740 $processed_filename = $processed_filename . $processed_char;
12742 # Increment the seek counter.
12746 } until ($processed_seek eq 32 || $processed_seek eq $processed_length);
12748 return $processed_filename;
12752 sub kiriwrite_language{
12753 #################################################################################
12754 # kiriwrite_language: Process language strings that needs certain text inserted.#
12758 # kiriwrite_language(string, [text, text, ...]); #
12760 # string Specifies the string to process. #
12761 # text Specifies the text to pass to the string (can be repeated many #
12763 #################################################################################
12765 my $string = shift;
12768 foreach $item (@_){
12770 $string =~ s/%s/$item/;
12778 sub kiriwrite_error{
12779 #################################################################################
12780 # kiriwrite_error: Prints out an error message. #
12784 # kiriwrite_error(errortype, errorext); #
12786 # errortype Specifies the type of error that occured. #
12787 # errorext Specifies the extended error information. #
12788 #################################################################################
12790 # Get the error type from the subroutine.
12792 my ($error_type, $error_extended) = @_;
12794 # Disconnect from the database server.
12796 if ($kiriwrite_dbmodule){
12797 $kiriwrite_dbmodule->disconnect();
12800 # Load the list of error messages.
12802 my ($kiriwrite_error, %kiriwrite_error);
12804 %kiriwrite_error = (
12806 # Catch all error message.
12807 "generic" => $kiriwrite_lang->{error}->{generic},
12809 # Standard error messages.
12810 "blankfilename" => $kiriwrite_lang->{error}->{blankfilename},
12811 "blankvariable" => $kiriwrite_lang->{error}->{blankvariable},
12812 "fileexists" => $kiriwrite_lang->{error}->{fileexists},
12813 "internalerror" => $kiriwrite_lang->{error}->{internalerror},
12814 "invalidoption" => $kiriwrite_lang->{error}->{invalidoption},
12815 "invalidaction" => $kiriwrite_lang->{error}->{invalidaction},
12816 "invalidfilename" => $kiriwrite_lang->{error}->{invalidfilename},
12817 "invalidmode" => $kiriwrite_lang->{error}->{invalidmode},
12818 "invalidutf8" => $kiriwrite_lang->{error}->{invalidutf8},
12819 "invalidvariable" => $kiriwrite_lang->{error}->{invalidvariable},
12820 "variabletoolong" => $kiriwrite_lang->{error}->{variabletoolong},
12822 # Specific error messages.
12823 "blankcompiletype" => $kiriwrite_lang->{error}->{blankcompiletype},
12824 "blankdatabasepageadd" => $kiriwrite_lang->{error}->{blankdatabasepageadd},
12825 "blankdirectory" => $kiriwrite_lang->{error}->{blankdirectory},
12826 "blankfindfilter" => $kiriwrite_lang->{error}->{blankfindfilter},
12827 "blankdatetimeformat" => $kiriwrite_lang->{error}->{blankdatetimeformat},
12828 "databaseconnectionerror" => $kiriwrite_lang->{error}->{databaseconnectionerror},
12829 "databasecategoriestoolong" => $kiriwrite_lang->{error}->{databasecategoriestoolong},
12830 "databasecopysame" => $kiriwrite_lang->{error}->{databasecopysame},
12831 "databasealreadyexists" => $kiriwrite_lang->{error}->{databasealreadyexists},
12832 "datadirectorymissing" => $kiriwrite_lang->{error}->{datadirectorymissing},
12833 "datadirectoryinvalidpermissions" => $kiriwrite_lang->{error}->{datadirectoryinvalidpermissions},
12834 "databasedescriptiontoolong" => $kiriwrite_lang->{error}->{databasedescriptiontoolong},
12835 "databasefilenameinvalid" => $kiriwrite_lang->{error}->{databasefilenameinvalid},
12836 "databasefilenametoolong" => $kiriwrite_lang->{error}->{databasefilenametoolong},
12837 "databaseerror" => $kiriwrite_lang->{error}->{databaseerror},
12838 "databaseinvalidpermissions" => $kiriwrite_lang->{error}->{databaseinvalidpermissions},
12839 "databasenameinvalid" => $kiriwrite_lang->{error}->{databasenameinvalid},
12840 "databasenametoolong" => $kiriwrite_lang->{error}->{databasenametoolong},
12841 "databasenameblank" => $kiriwrite_lang->{error}->{databasenameblank},
12842 "databasemissingfile" => $kiriwrite_lang->{error}->{databasemissingfile},
12843 "databasemovemissingfile" => $kiriwrite_lang->{error}->{databasemovemissingfile},
12844 "databasenorename" => $kiriwrite_lang->{error}->{databasenorename},
12845 "databasemovesame" => $kiriwrite_lang->{error}->{databasemovesame},
12846 "dbmoduleblank" => $kiriwrite_lang->{error}->{dbmoduleblank},
12847 "dbmoduleinvalid" => $kiriwrite_lang->{error}->{dbmoduleinvalid},
12848 "dbdirectoryblank" => $kiriwrite_lang->{error}->{dbdirectoryblank},
12849 "dbdirectoryinvalid" => $kiriwrite_lang->{error}->{dbdirectoryinvalid},
12850 "dbmodulemissing" => $kiriwrite_lang->{error}->{dbmodulemissing},
12851 "filtersdatabasenotcreated" => $kiriwrite_lang->{error}->{filtersdatabasenotcreated},
12852 "filtersdbdatabaseerror" => $kiriwrite_lang->{error}->{filtersdbdatabaseerror},
12853 "filtersdbpermissions" => $kiriwrite_lang->{error}->{filtersdbpermissions},
12854 "filtersdbmissing" => $kiriwrite_lang->{error}->{filtersdbmissing},
12855 "filteridblank" => $kiriwrite_lang->{error}->{filteridblank},
12856 "filterdoesnotexist" => $kiriwrite_lang->{error}->{filterdoesnotexist},
12857 "filteridinvalid" => $kiriwrite_lang->{error}->{filteridinvalid},
12858 "filteridtoolong" => $kiriwrite_lang->{error}->{filteridtoolong},
12859 "findfiltertoolong" => $kiriwrite_lang->{error}->{findfiltertoolong},
12860 "filterpriorityinvalid" => $kiriwrite_lang->{error}->{filterpriorityinvalid},
12861 "filterpriorityinvalidchars" => $kiriwrite_lang->{error}->{filterpriorityinvalidchars},
12862 "filterprioritytoolong" => $kiriwrite_lang->{error}->{filterprioritytoolong},
12863 "invalidcompiletype" => $kiriwrite_lang->{error}->{invalidcompiletype},
12864 "invalidpagenumber" => $kiriwrite_lang->{error}->{invalidpagenumber},
12865 "nopagesselected" => $kiriwrite_lang->{error}->{nopagesselected},
12866 "invaliddirectory" => $kiriwrite_lang->{error}->{invaliddirectory},
12867 "invaliddatetimeformat" => $kiriwrite_lang->{error}->{invaliddatetimeformat},
12868 "invalidlanguagefilename" => $kiriwrite_lang->{error}->{invalidlanguagefilename},
12869 "languagefilenamemissing" => $kiriwrite_lang->{error}->{languagefilenamemissing},
12870 "moduleblank" => $kiriwrite_lang->{error}->{moduleblank},
12871 "moduleinvalid" => $kiriwrite_lang->{error}->{moduleinvalid},
12872 "newcopydatabasedatabaseerror" => $kiriwrite_lang->{error}->{newcopydatabasedatabaseerror},
12873 "newcopydatabasedoesnotexist" => $kiriwrite_lang->{error}->{newcopydatabasedoesnotexist},
12874 "newcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newcopydatabasefileinvalidpermissions},
12875 "newmovedatabasedatabaseerror" => $kiriwrite_lang->{error}->{newmovedatabasedatabaseerror},
12876 "newmovedatabasedoesnotexist" => $kiriwrite_lang->{error}->{newmovedatabasedoesnotexist},
12877 "newmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newmovedatabasefileinvalidpermissions},
12878 "nodatabasesavailable" => $kiriwrite_lang->{error}->{nodatabasesavailable},
12879 "nodatabaseselected" => $kiriwrite_lang->{error}->{nodatabaseselected},
12880 "noeditvaluesselected" => $kiriwrite_lang->{error}->{noeditvaluesselected},
12881 "oldcopydatabasedatabaseerror" => $kiriwrite_lang->{error}->{oldcopydatabasedatabaseerror},
12882 "oldcopydatabasedoesnotexist" => $kiriwrite_lang->{error}->{oldcopydatabasedoesnotexist},
12883 "oldcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldcopydatabasefileinvalidpermissions},
12884 "oldmovedatabasedatabaseerror" => $kiriwrite_lang->{error}->{oldmovedatabasedatabaseerror},
12885 "oldmovedatabasedoesnotexist" => $kiriwrite_lang->{error}->{oldmovedatabasedoesnotexist},
12886 "oldmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldmovedatabasefileinvalidpermissions},
12887 "outputdirectoryblank" => $kiriwrite_lang->{error}->{outputdirectoryblank},
12888 "outputdirectoryinvalid" => $kiriwrite_lang->{error}->{outputdirectoryinvalid},
12889 "outputdirectorymissing" => $kiriwrite_lang->{error}->{outputdirectorymissing},
12890 "outputdirectoryinvalidpermissions" => $kiriwrite_lang->{error}->{outputdirectoryinvalidpermissions},
12891 "presmoduleblank" => $kiriwrite_lang->{error}->{presmoduleblank},
12892 "presmoduleinvalid" => $kiriwrite_lang->{error}->{presmoduleinvalid},
12893 "presmodulemissing" => $kiriwrite_lang->{error}->{presmodulemissing},
12894 "pagefilenamedoesnotexist" => $kiriwrite_lang->{error}->{pagefilenamedoesnotexist},
12895 "pagefilenameexists" => $kiriwrite_lang->{error}->{pagefilenameexists},
12896 "pagefilenameinvalid" => $kiriwrite_lang->{error}->{pagefilenameinvalid},
12897 "pagefilenametoolong" => $kiriwrite_lang->{error}->{pagefilenametoolong},
12898 "pagefilenameblank" => $kiriwrite_lang->{error}->{pagefilenameblank},
12899 "pagetitletoolong" => $kiriwrite_lang->{error}->{pagetitletoolong},
12900 "pagedescriptiontoolong" => $kiriwrite_lang->{error}->{pagedescriptiontoolong},
12901 "pagesectiontoolong" => $kiriwrite_lang->{error}->{pagesectiontoolong},
12902 "pagedatabasefilenametoolong" => $kiriwrite_lang->{error}->{pagedatabasefilenametoolong},
12903 "pagesettingstoolong" => $kiriwrite_lang->{error}->{pagesettingstoolong},
12904 "pagesettingsinvalid" => $kiriwrite_lang->{error}->{pagesettingsinvalid},
12905 "pagetemplatefilenametoolong" => $kiriwrite_lang->{error}->{pagetemplatefilenametoolong},
12906 "replacefiltertoolong" => $kiriwrite_lang->{error}->{replacefiltertoolong},
12907 "servernameinvalid" => $kiriwrite_lang->{error}->{servernameinvalid},
12908 "servernametoolong" => $kiriwrite_lang->{error}->{servernametoolong},
12909 "serverdatabasenameinvalid" => $kiriwrite_lang->{error}->{serverdatabasenameinvalid},
12910 "serverdatabasenametoolong" => $kiriwrite_lang->{error}->{serverdatabasenametoolong},
12911 "serverdatabaseusernameinvalid" => $kiriwrite_lang->{error}->{serverdatabaseusernameinvalid},
12912 "serverdatabaseusernametoolong" => $kiriwrite_lang->{error}->{serverdatabaseusernametoolong},
12913 "serverdatabasepasswordtoolong" => $kiriwrite_lang->{error}->{serverdatabasepasswordtoolong},
12914 "serverdatabasetableprefixinvalid" => $kiriwrite_lang->{error}->{serverdatabasetableprefixinvalid},
12915 "serverdatabasetableprefixtoolong" => $kiriwrite_lang->{error}->{serverdatabasetableprefixtoolong},
12916 "serverportnumberinvalid" => $kiriwrite_lang->{error}->{serverportnumberinvalid},
12917 "serverportnumberinvalidcharacters" => $kiriwrite_lang->{error}->{serverportnumberinvalidcharacters},
12918 "serverportnumbertoolong" => $kiriwrite_lang->{error}->{serverportnumbertoolong},
12919 "serverprotocolnametoolong" => $kiriwrite_lang->{error}->{serverprotocolnametoolong},
12920 "serverprotocolinvalid" => $kiriwrite_lang->{error}->{serverprotocolinvalid},
12921 "templatenameblank" => $kiriwrite_lang->{error}->{templatenameblank},
12922 "templatefilenameexists" => $kiriwrite_lang->{error}->{templatefilenameexists},
12923 "templatefilenameinvalid" => $kiriwrite_lang->{error}->{templatefilenameinvalid},
12924 "templatedatabaseerror" => $kiriwrite_lang->{error}->{templatedatabaseerror},
12925 "templatedatabaseinvalidpermissions" => $kiriwrite_lang->{error}->{templatedatabaseinvalidpermissions},
12926 "templatedatabaseinvalidformat" => $kiriwrite_lang->{error}->{templatedatabaseinvalidformat},
12927 "templatedirectoryblank" => $kiriwrite_lang->{error}->{templatedirectoryblank},
12928 "templatedirectoryinvalid" => $kiriwrite_lang->{error}->{templatedirectoryinvalid},
12929 "templatedatabasenotcreated" => $kiriwrite_lang->{error}->{templatedatabasenotcreated},
12930 "templatefilenametoolong" => $kiriwrite_lang->{error}->{templatefilenametoolong},
12931 "templatenametoolong" => $kiriwrite_lang->{error}->{templatenametoolong},
12932 "templatedescriptiontoolong" => $kiriwrite_lang->{error}->{templatedescriptiontoolong},
12933 "templatedatabasemissing" => $kiriwrite_lang->{error}->{templatedatabasemissing},
12934 "templatedoesnotexist" => $kiriwrite_lang->{error}->{templatedoesnotexist},
12935 "templatefilenameblank" => $kiriwrite_lang->{error}->{templatefilenameblank},
12939 # Check if the specified error is blank and if it is
12940 # use the generic error messsage.
12942 if (!$kiriwrite_error{$error_type}){
12943 $error_type = "generic";
12946 $kiriwrite_presmodule->clear();
12948 $kiriwrite_presmodule->startbox("errorbox");
12949 $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{error}, { Style => "errorheader" });
12950 $kiriwrite_presmodule->addlinebreak();
12951 $kiriwrite_presmodule->addtext($kiriwrite_error{$error_type}, { Style => "errortext" });
12953 # Check to see if extended error information was passed.
12955 if ($error_extended){
12957 # Write the extended error information.
12959 $kiriwrite_presmodule->addlinebreak();
12960 $kiriwrite_presmodule->addlinebreak();
12961 $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{extendederror});
12962 $kiriwrite_presmodule->addlinebreak();
12963 $kiriwrite_presmodule->addlinebreak();
12964 $kiriwrite_presmodule->startbox("datalist");
12965 $kiriwrite_presmodule->addtext($error_extended);
12966 $kiriwrite_presmodule->endbox();
12970 $kiriwrite_presmodule->endbox();
12972 kiriwrite_output_header;
12973 kiriwrite_output_page($kiriwrite_lang->{error}->{error}, $kiriwrite_presmodule->grab(), "none");
12979 sub kiriwrite_fileexists{
12980 #################################################################################
12981 # kiriwrite_fileexists: Check if a file exists and returns a value depending on #
12982 # if the file exists or not. #
12986 # kiriwrite_fileexists(filename); #
12988 # filename Specifies the file name to check if it exists or not. #
12989 #################################################################################
12991 # Get the value that was passed to the subroutine.
12993 my ($filename) = @_;
12995 # Check if the filename exists, if it does, return a value of 0, else
12996 # return a value of 1, meaning that the file was not found.
13000 # Specified file does exist so return a value of 0.
13006 # Specified file does not exist so return a value of 1.
13014 sub kiriwrite_filepermissions{
13015 #################################################################################
13016 # kiriwrite_filepermissions: Check if the file permissions of a file and return #
13017 # either a 1 saying that the permissions are valid or return a 0 saying that #
13018 # the permissions are invalid. #
13022 # kiriwrite_filepermissions(filename, [read], [write], [filemissingskip]); #
13024 # filename Specifies the filename to check for permissions. #
13025 # read Preform check that the file is readable. #
13026 # write Preform check that the file is writeable. #
13027 # filemissingskip Skip the check of seeing if it can read or write if the #
13028 # file is missing. #
13029 #################################################################################
13031 # Get the values that was passed to the subroutine.
13033 my ($filename, $readpermission, $writepermission, $ignorechecks) = @_;
13035 # Check to make sure that the read permission and write permission values
13036 # are only 1 character long.
13038 kiriwrite_variablecheck($readpermission, "maxlength", 1, 0);
13039 kiriwrite_variablecheck($writepermission, "maxlength", 1, 0);
13040 kiriwrite_variablecheck($ignorechecks, "maxlength", 1, 0);
13042 my $ignorechecks_result = 0;
13044 # Check if the file should be ignored for read and write checking if
13045 # it doesn't exist.
13047 if ($ignorechecks){
13051 # The file exists so the checks are to be done.
13053 $ignorechecks_result = 0;
13057 # The file does not exist so the checks don't need to
13058 # be done to prevent false positives.
13060 $ignorechecks_result = 1;
13066 $ignorechecks_result = 0;
13070 # Check if the file should be checked to see if it can be read.
13072 if ($readpermission && $ignorechecks_result eq 0){
13074 # The file should be checked to see if it does contain read permissions
13075 # and return a 0 if it is invalid.
13079 # The file is readable, so do nothing.
13083 # The file is not readable, so return 1.
13091 # Check if the file should be checked to see if it can be written.
13093 if ($writepermission && $ignorechecks_result eq 0){
13095 # The file should be checked to see if it does contain write permissions
13096 # and return a 0 if it is invalid.
13100 # The file is writeable, so do nothing.
13104 # The file is not writeable, so return 1.
13112 # No problems have occured, so return 0.
13118 sub kiriwrite_utf8convert{
13119 #################################################################################
13120 # kiriwrite_utf8convert: Properly converts values into UTF-8 values. #
13124 # utfstring # The UTF-8 string to convert. #
13125 #################################################################################
13127 # Get the values passed to the subroutine.
13129 my ($utfstring) = @_;
13131 # Load the Encode perl module.
13133 use Encode qw(decode_utf8);
13135 # Convert the string.
13137 my $finalutf8 = Encode::decode_utf8( $utfstring );
13143 sub kiriwrite_critical{
13144 #################################################################################
13145 # kiriwrite_critical: Displays an critical error message that cannot be #
13146 # normally by the kiriwrite_error subroutine. #
13150 # errortype Specifies the type of critical error that has occured. #
13151 #################################################################################
13153 # Get the value that was passed to the subroutine.
13155 my ($error_type) = @_;
13159 # Get the error type from the errortype string.
13163 # Generic critical error message.
13165 "generic" => "A critical error has occured but the error is not known to Kiriwrite.",
13167 # Specific critical error messages.
13169 "configfilemissing" => "The Kiriwrite configuration file is missing! Running the installer script for Kiriwrite is recommended.",
13170 "configfileinvalidpermissions" => "The Kiriwrite configuration file has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13171 "dbmodulemissing" => "The database module is missing! Running the installer script for Kiriwrite is recommended.",
13172 "dbmoduleinvalidpermissions" => "The database module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13173 "dbmoduleinvalid" => "The database module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13174 "invalidvalue" => "An invalid value was passed.",
13175 "languagefilenameblank" => "The language filename given is blank! Running the installer script for Kiriwrite is recommended.",
13176 "languagefilenameinvalid" => "The language filename given is invalid! Running the installer script for Kiriwrite is recommended.",
13177 "languagefilemissing" => "The language filename given does not exist. Running the installer script for Kiriwrite is recommended.",
13178 "languagefilenameinvalidpermissions" => "The language file with the filename given has invalid permissions set. Please set the valid permission settings for the language file.",
13179 "presmodulemissing" => "The presentation module is missing! Running the installer script for Kiriwrite is recommended.",
13180 "presmoduleinvalidpermissions" => "The presentation module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the presentation module.",
13181 "presmoduleinvalid" => "The presentation module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13184 if (!$error_list{$error_type}){
13186 $error_type = "generic";
13191 print "Critical Error: " . $error_list{$error_type};
13196 sub kiriwrite_output_page{
13197 #################################################################################
13198 # kiriwrite_output_page: Outputs the page to the browser/stdout/console. #
13202 # kiriwrite_output_page(pagetitle, pagedata, menutype); #
13204 # pagetitle Specifies the page title. #
13205 # pagedata Specifies the page data. #
13206 # menutype Prints out which menu to use. #
13207 #################################################################################
13209 my ($pagetitle, $pagedata, $menutype) = @_;
13211 # Open the script page template and load it into the scriptpage variable,
13212 # while declaring the variable.
13214 open (my $filehandle_scriptpage, "<:utf8", 'page.html');
13215 my @scriptpage = <$filehandle_scriptpage>;
13216 binmode $filehandle_scriptpage, ':utf8';
13217 close ($filehandle_scriptpage);
13219 # Define the variables required.
13221 my $scriptpageline = "";
13222 my $pageoutput = "";
13223 my $menuoutput = "";
13225 $kiriwrite_presmodule->clear();
13227 # Print out the main menu for Kiriwrite.
13229 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{menu}->{viewdatabases} });
13230 $kiriwrite_presmodule->addtext(" | ");
13231 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page", { Text => $kiriwrite_lang->{menu}->{viewpages} });
13232 $kiriwrite_presmodule->addtext(" | ");
13233 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{menu}->{viewfilters} });
13234 $kiriwrite_presmodule->addtext(" | ");
13235 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{menu}->{viewtemplates} });
13236 $kiriwrite_presmodule->addtext(" | ");
13237 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{menu}->{compilepages} });
13238 $kiriwrite_presmodule->addtext(" | ");
13239 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{menu}->{viewsettings} });
13240 $kiriwrite_presmodule->addlinebreak();
13242 # Check what menu is going to be printed along with the default 'top' menu.
13244 if ($menutype eq "database"){
13246 # If the menu type is database then print out the database sub-menu.
13248 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{database}->{submenu}->{viewdatabases} });
13249 $kiriwrite_presmodule->addtext(" | ");
13250 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=new", { Text => $kiriwrite_lang->{database}->{submenu}->{adddatabase} });
13252 } elsif ($menutype eq "pages"){
13253 # If the menu type is pages then print out the pages sub-menu.
13255 # First, fetch the database name from the HTTP query string.
13257 my $query = new CGI;
13258 my $db_filename = $query->param('database');
13260 # Check if a value has been placed in the db_filename string.
13262 if (!$db_filename){
13264 # As the database filename is blank, don't add an option to add a page.
13268 # A database file has been specified so add an option to add a page to
13269 # the selected database.
13271 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page&action=add&database=" . $db_filename, { Text => $kiriwrite_lang->{pages}->{submenu}->{addpage} });
13275 } elsif ($menutype eq "filter"){
13277 # If the menu type is filters then print out the filter sub-menu.
13279 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{submenu}->{showfilters} });
13280 $kiriwrite_presmodule->addtext(" | ");
13281 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter&action=add", { Text => $kiriwrite_lang->{filter}->{submenu}->{addfilter} });
13283 } elsif ($menutype eq "settings"){
13285 # If the menu type is options then print out the options sub-menu.
13287 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{submenu}->{viewsettings} });
13288 $kiriwrite_presmodule->addtext(" | ");
13289 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings&action=edit", { Text => $kiriwrite_lang->{setting}->{submenu}->{editsettings} });
13291 } elsif ($menutype eq "template"){
13293 # If the menu type is template then print out the template sub-menu.
13295 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{template}->{submenu}->{showtemplates} });
13296 $kiriwrite_presmodule->addtext(" | ");
13297 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template&action=add", { Text => $kiriwrite_lang->{template}->{submenu}->{addtemplate} });
13299 } elsif ($menutype eq "compile"){
13301 # If the menu type is compile then print out the compile sub-menu.
13303 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{submenu}->{listdatabases} });
13304 $kiriwrite_presmodule->addtext(" | ");
13305 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=all", { Text => $kiriwrite_lang->{compile}->{submenu}->{compileall} });
13306 $kiriwrite_presmodule->addtext(" | ");
13307 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=clean", { Text => $kiriwrite_lang->{compile}->{submenu}->{cleanoutputdirectory} });
13311 $menuoutput = $kiriwrite_presmodule->grab();
13313 # Find <kiriwrite> tages and replace with the apporiate variables.
13315 foreach $scriptpageline (@scriptpage){
13317 $scriptpageline =~ s/<kiriwrite:menu>/$menuoutput/g;
13318 $scriptpageline =~ s/<kiriwrite:imagespath>/$kiriwrite_config{"directory_noncgi_images"}/g;
13319 $scriptpageline =~ s/<kiriwrite:pagedata>/$pagedata/g;
13321 # Check if page title specified is blank, otherwise add a page title
13324 if ($pagetitle eq ""){
13325 $scriptpageline =~ s/<kiriwrite:title>//g;
13327 $scriptpageline =~ s/<kiriwrite:title>/ ($pagetitle)/g;
13332 # Append processed line to the pageoutput variable.
13334 $pageoutput = $pageoutput . $scriptpageline;
13338 binmode STDOUT, ':utf8';
13346 sub kiriwrite_output_xml{
13347 #################################################################################
13348 # kiriwrite_output_xml: Outputs several types of data to an XML file #
13352 # kiriwrite_output_xml(filename, type, settings); #
13354 # filename Specifies the filename of the XML file. #
13355 # type Specifies the type of the XML file to be written. #
13356 # settings Specifies the following settings in any order. #
13358 # Settings for Kiriwrite configuration files: #
13360 # DatabaseDirectory Specifies the new database directory to use. #
13361 # OutputDirectory Specifies the new output directory to use. #
13362 # ImagesURIPath Specifies the new URI path for images. #
13363 # DateTimeFormat Specifies the new date and time format. #
13364 # SystemLanguage Specifies the new language to use for Kiriwrite. #
13365 # PrsentationModule Specifies the new presentation module to use for #
13367 # DatabaseModule Specifies the new database module to use for Kiriwrite. #
13368 # DatabaseServer Specifies the database server to use. #
13369 # DaravasePort Specifies the port the database server is running on. #
13370 # DatabaseProtocol Specifies the protocol the database server is using. #
13371 # DatabaseSQLDatabase Specifies the SQL database name to use. #
13372 # DatabaseUsername Specifies the database server username. #
13373 # DatabasePassword Specifies the password for the database server username.#
13374 # DatabaseTablePrefix Specifies the table prefix to use. #
13375 #################################################################################
13377 # Get the variables passed from the subroutine.
13379 my $xml_filename = shift;
13380 my $xml_type = shift;
13381 my ($passedsettings) = @_;
13383 # Check if filename is blank, if it is then return an error.
13385 if ($xml_filename eq ""){
13386 # Filename is blank, return an error.
13387 kiriwrite_error("blankfilename");
13390 # Validate the XML filename to make sure nothing supicious is being passed.
13392 kiriwrite_variablecheck($xml_filename, "maxlength", 64, 0);
13393 kiriwrite_variablecheck($xml_filename, "filename", "", 0);
13395 # Check what type of XML data to output.
13397 if ($xml_type eq "config") {
13399 # The type of XML data to output is a Kiriwrite configuration file.
13401 # Get the data from the hash.
13403 my $settings_databasedir = $passedsettings->{"DatabaseDirectory"};
13404 my $settings_outputdir = $passedsettings->{"OutputDirectory"};
13405 my $settings_imagesuri = $passedsettings->{"ImagesURIPath"};
13406 my $settings_datetime = $passedsettings->{"DateTimeFormat"};
13407 my $settings_systemlanguage = $passedsettings->{"SystemLanguage"};
13408 my $settings_presmodule = $passedsettings->{"PresentationModule"};
13409 my $settings_dbmodule = $passedsettings->{"DatabaseModule"};
13411 my $settings_database_server = $passedsettings->{"DatabaseServer"};
13412 my $settings_database_port = $passedsettings->{"DatabasePort"};
13413 my $settings_database_protocol = $passedsettings->{"DatabaseProtocol"};
13414 my $settings_database_sqldatabase = $passedsettings->{"DatabaseSQLDatabase"};
13415 my $settings_database_username = $passedsettings->{"DatabaseUsername"};
13416 my $settings_database_password = $passedsettings->{"DatabasePassword"};
13417 my $settings_database_tableprefix = $passedsettings->{"DatabaseTablePrefix"};
13419 # Convert the password to make sure it can be read properly.
13421 $settings_database_password =~ s/\0//g;
13422 $settings_database_password =~ s/</</g;
13423 $settings_database_password =~ s/>/>/g;
13425 # Convert the less than and greater than characters are there and
13428 $settings_imagesuri =~ s/</</g;
13429 $settings_imagesuri =~ s/>/>/g;
13431 # Create the XML data layout.
13433 my $xmldata = "<?xml version=\"1.0\"?>\r\n\r\n<kiriwrite-config>\r\n";
13435 $xmldata = $xmldata . "<!-- This file was automatically generated by Kiriwrite, please feel free to edit to your own needs. -->\r\n";
13436 $xmldata = $xmldata . "\t<settings>\r\n\t\t<directories>\r\n";
13438 $xmldata = $xmldata . "\t\t\t<database>" . $settings_databasedir . "</database>\r\n";
13439 $xmldata = $xmldata . "\t\t\t<output>" . $settings_outputdir . "</output>\r\n";
13440 $xmldata = $xmldata . "\t\t\t<images>" . $settings_imagesuri . "</images>\r\n";
13441 $xmldata = $xmldata . "\t\t</directories>\r\n";
13443 $xmldata = $xmldata . "\t\t<language>\r\n";
13444 $xmldata = $xmldata . "\t\t\t<lang>" . $settings_systemlanguage . "</lang>\r\n";
13445 $xmldata = $xmldata . "\t\t</language>\r\n";
13447 $xmldata = $xmldata . "\t\t<system>\r\n";
13448 $xmldata = $xmldata . "\t\t\t<presentation>" . $settings_presmodule . "</presentation>\r\n";
13449 $xmldata = $xmldata . "\t\t\t<database>" . $settings_dbmodule . "</database>\r\n";
13450 $xmldata = $xmldata . "\t\t\t<datetime>" . $settings_datetime . "</datetime>\r\n";
13451 $xmldata = $xmldata . "\t\t</system>\r\n";
13453 $xmldata = $xmldata . "\t\t<database>\r\n";
13454 $xmldata = $xmldata . "\t\t\t<server>" . $settings_database_server . "</server>\r\n";
13455 $xmldata = $xmldata . "\t\t\t<port>" . $settings_database_port . "</port>\r\n";
13456 $xmldata = $xmldata . "\t\t\t<protocol>" . $settings_database_protocol . "</protocol>\r\n";
13457 $xmldata = $xmldata . "\t\t\t<database>" . $settings_database_sqldatabase . "</database>\r\n";
13458 $xmldata = $xmldata . "\t\t\t<username>" . $settings_database_username . "</username>\r\n";
13459 $xmldata = $xmldata . "\t\t\t<password>" . $settings_database_password . "</password>\r\n";
13460 $xmldata = $xmldata . "\t\t\t<prefix>" . $settings_database_tableprefix . "</prefix>\r\n";
13461 $xmldata = $xmldata . "\t\t</database>\r\n";
13463 $xmldata = $xmldata . "\t</settings>\r\n";
13465 $xmldata = $xmldata . "</kiriwrite-config>";
13467 # Open the Kiriwrite XML configuration file and write the new settings to the
13468 # configuration file.
13470 open(my $filehandle_xmlconfig, "> ", "kiriwrite.xml");
13471 print $filehandle_xmlconfig $xmldata;
13472 close($filehandle_xmlconfig);
13476 # The type of XML data is something else that is not supported by
13477 # Kiriwrite, so return an error.
13479 kiriwrite_error("invalidoption");
13487 #################################################################################
13488 # End listing the functions needed. #
13489 #################################################################################
13491 #################################################################################
13492 # Begin proper script execution. #
13493 #################################################################################
13495 kiriwrite_settings_load; # Load the configuration options.
13497 my $query = new CGI; # Easily fetch variables from the HTTP string.
13501 # Check if a mode has been specified and if a mode has been specified, continue
13502 # and work out what mode has been specified.
13504 if ($query->param('mode')){
13505 my $http_query_mode = $query->param('mode');
13507 if ($http_query_mode eq "db"){
13509 # If mode is 'db' (database), then check what action is required.
13511 if ($query->param('action')){
13512 # An action has been specified, so find out what action has been specified.
13514 my $http_query_action = $query->param('action');
13516 if ($http_query_action eq "edit"){
13517 # The edit action (which mean edit the settings for the selected database) has been specified,
13518 # get the database name and check if the action to edit an database has been confirmed.
13520 if ($query->param('database')){
13521 # If there is a value in the database variable check if it is a valid database. Otherwise,
13524 my $http_query_database = $query->param('database');
13526 # Check if a value for confirm has been specified, if there is, check if it is the correct
13527 # value, otherwise return an error.
13529 if ($query->param('confirm')){
13530 # A value for confirm has been specified, find out what value it is. If the value is correct
13531 # then edit the database settings, otherwise return an error.
13533 my $http_query_confirm = $query->param('confirm');
13535 if ($http_query_confirm eq 1){
13536 # Value is correct, collect the variables to pass onto the database variable.
13538 # Get the variables from the HTTP query.
13540 my $newdatabasename = $query->param('databasename');
13541 my $newdatabasedescription = $query->param('databasedescription');
13542 my $newdatabasefilename = $query->param('databasefilename');
13543 my $databaseshortname = $query->param('database');
13544 my $databasenotes = $query->param('databasenotes');
13545 my $databasecategories = $query->param('databasecategories');
13547 # Check the permissions of the database configuration file and return
13548 # an error if the database permissions are invalid.
13550 # Pass the variables to the database editing subroutine.
13552 my $pagedata = kiriwrite_database_edit($databaseshortname, $newdatabasefilename, $newdatabasename, $newdatabasedescription, $databasenotes, $databasecategories, 1);
13554 kiriwrite_output_header;
13555 kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13559 # Value is incorrect, return and error.
13560 kiriwrite_error("invalidvariable");
13565 # Display the form for editing an database.
13566 my $pagedata = kiriwrite_database_edit($http_query_database);
13568 kiriwrite_output_header;
13569 kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13574 # If there is no value in the database variable, then return an error.
13575 kiriwrite_error("invalidvariable");
13579 } elsif ($http_query_action eq "delete"){
13581 # Action equested is to delete a database, find out if the user has already confirmed deletion of the database
13582 # and if the deletion of the database has been confirmed, delete the database.
13584 if ($query->param('confirm')){
13586 # User has confirmed to delete a database, pass the parameters to the kiriwrite_database_delete
13589 my $database_filename = $query->param('database');
13590 my $database_confirm = $query->param('confirm');
13591 my $pagedata = kiriwrite_database_delete($database_filename, $database_confirm);
13593 kiriwrite_output_header;
13594 kiriwrite_output_page($kiriwrite_lang->{database}->{deleteddatabase}, $pagedata, "database");
13600 # User has clicked on the delete link (thus hasn't confirmed the action to delete a database).
13602 my $database_filename = $query->param('database');
13603 my $pagedata = kiriwrite_database_delete($database_filename);
13605 kiriwrite_output_header;
13606 kiriwrite_output_page($kiriwrite_lang->{database}->{deletedatabase}, $pagedata, "database");
13610 } elsif ($http_query_action eq "new"){
13612 # Action requested is to create a new database, find out if the user has already entered the information needed
13613 # to create a database and see if the user has confirmed the action, otherwise printout a form for adding a
13616 my $http_query_confirm = $query->param('confirm');
13618 # Check if the confirm value is correct.
13620 if ($http_query_confirm){
13621 if ($http_query_confirm eq 1){
13623 # User has confirmed to create a database, pass the parameters to the
13624 # kiriwrite_database_add subroutine.
13626 my $http_query_confirm = $query->param('confirm');
13628 my $database_name = $query->param('databasename');
13629 my $database_description = $query->param('databasedescription');
13630 my $database_filename = $query->param('databasefilename');
13631 my $database_notes = $query->param('databasenotes');
13632 my $database_categories = $query->param('databasecategories');
13634 my $pagedata = kiriwrite_database_add($database_filename, $database_name, $database_description, $database_notes, $database_categories, $http_query_confirm);
13636 kiriwrite_output_header;
13637 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13642 # The confirm value is something else other than 1 (which it shouldn't be), so
13648 # User has clicked on the 'Add Database' link.
13650 my $pagedata = kiriwrite_database_add;
13652 kiriwrite_output_header;
13653 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13657 # Another option has been specified, so return an error.
13659 kiriwrite_error("invalidaction");
13663 # No action has been specified, do the default action of displaying a list
13666 my $pagedata = kiriwrite_database_list;
13668 kiriwrite_output_header; # Output the header to browser/console/stdout.
13669 kiriwrite_output_page("", $pagedata, "database"); # Output the page to browser/console/stdout.
13670 exit; # End the script.
13672 } elsif ($http_query_mode eq "page"){
13674 # If mode is 'page', then check what action is required.
13676 if ($query->param('action')){
13677 my $http_query_action = $query->param('action');
13679 # Check if the action requested matches with one of the options below. If it does,
13680 # go to that section, otherwise return an error.
13682 if ($http_query_action eq "view"){
13684 # The action selected was to view pages from a database,
13686 my $database_name = $query->param('database');
13687 my $pagedata = kiriwrite_page_list($database_name);
13689 kiriwrite_output_header; # Output the header to browser/console/stdout.
13690 kiriwrite_output_page($kiriwrite_lang->{pages}->{viewingdatabase}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13691 exit; # End the script.
13693 } elsif ($http_query_action eq "add"){
13695 # The action selected was to add a page to the selected database.
13697 my $http_query_confirm = $query->param('confirm');
13699 if (!$http_query_confirm){
13701 $http_query_confirm = 0;
13705 if ($http_query_confirm eq 1){
13707 my $http_query_database = $query->param('database');
13708 my $http_query_filename = $query->param('pagefilename');
13709 my $http_query_name = $query->param('pagename');
13710 my $http_query_description = $query->param('pagedescription');
13711 my $http_query_section = $query->param('pagesection');
13712 my $http_query_template = $query->param('pagetemplate');
13713 my $http_query_settings = $query->param('pagesettings');
13714 my $http_query_content = $query->param('pagecontent');
13716 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);
13718 kiriwrite_output_header; # Output the header to browser/console/stdout.
13719 kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13720 exit; # End the script.
13724 my $http_query_database = $query->param('database');
13725 my $pagedata = kiriwrite_page_add($http_query_database);
13727 kiriwrite_output_header; # Output the header to browser/console/stdout.
13728 kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13729 exit; # End the script.
13731 } elsif ($http_query_action eq "edit"){
13733 # The action selected was to edit a page from a database.
13735 my $http_query_confirm = $query->param('confirm');
13737 if (!$http_query_confirm){
13739 $http_query_confirm = 0;
13743 if ($http_query_confirm eq 1){
13745 # Get the needed values from the HTTP query.
13747 my $http_query_database = $query->param('database');
13748 my $http_query_filename = $query->param('page');
13749 my $http_query_newfilename = $query->param('pagefilename');
13750 my $http_query_name = $query->param('pagename');
13751 my $http_query_description = $query->param('pagedescription');
13752 my $http_query_section = $query->param('pagesection');
13753 my $http_query_template = $query->param('pagetemplate');
13754 my $http_query_settings = $query->param('pagesettings');
13755 my $http_query_content = $query->param('pagecontent');
13757 # Pass the values to the editing pages subroutine.
13759 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);
13761 kiriwrite_output_header; # Output the header to browser/console/stdout.
13762 kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13763 exit; # End the script.
13767 # Get the needed values from the HTTP query.
13769 my $http_query_database = $query->param('database');
13770 my $http_query_filename = $query->param('page');
13772 # Pass the values to the editing pages subroutine.
13774 my $pagedata = kiriwrite_page_edit($http_query_database, $http_query_filename);
13776 kiriwrite_output_header; # Output the header to browser/console/stdout.
13777 kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13778 exit; # End the script.
13781 } elsif ($http_query_action eq "delete"){
13783 # The action selected was to delete a page from a database.
13785 my $http_query_database = $query->param('database');
13786 my $http_query_page = $query->param('page');
13787 my $http_query_confirm = $query->param('confirm');
13790 my $selectionlist = "";
13792 if ($http_query_confirm){
13794 # The action has been confirmed, so try to delete the selected page
13795 # from the database.
13797 $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page, $http_query_confirm);
13799 kiriwrite_output_header; # Output the header to browser/console/stdout.
13800 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13801 exit; # End the script.
13805 $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page);
13807 kiriwrite_output_header; # Output the header to browser/console/stdout.
13808 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13809 exit; # End the script.
13812 } elsif ($http_query_action eq "multidelete"){
13814 # The action selected was to delete multiple pages from a
13817 my $http_query_database = $query->param('database');
13818 my $http_query_confirm = $query->param('confirm');
13823 if ($http_query_confirm){
13825 # The action to delete multiple pages from the selected
13826 # database has been confirmed.
13828 @filelist = kiriwrite_selectedlist();
13829 $pagedata = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13831 kiriwrite_output_header; # Output the header to browser/console/stdout.
13832 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13833 exit; # End the script.
13837 # Get the list of selected pages and pass them to the
13838 # multiple page delete subroutine.
13840 @filelist = kiriwrite_selectedlist();
13841 $pagedata = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13843 kiriwrite_output_header; # Output the header to browser/console/stdout.
13844 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13845 exit; # End the script.
13847 } elsif ($http_query_action eq "multimove"){
13849 # The action selected was to move multiple pages from a
13852 my $http_query_database = $query->param('database');
13853 my $http_query_newdatabase = $query->param('newdatabase');
13854 my $http_query_confirm = $query->param('confirm');
13859 if ($http_query_confirm){
13861 # The action to move multiple pages from the selected
13862 # database has been confirmed.
13864 @filelist = kiriwrite_selectedlist();
13865 $pagedata = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13867 kiriwrite_output_header; # Output the header to browser/console/stdout.
13868 kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13869 exit; # End the script.
13873 # Get the list of selected pages and pass them to the
13874 # multiple page move subroutine.
13876 @filelist = kiriwrite_selectedlist();
13877 $pagedata = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13879 kiriwrite_output_header; # Output the header to browser/console/stdout.
13880 kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13881 exit; # End the script.
13883 } elsif ($http_query_action eq "multicopy"){
13885 # The action selected was to copy multiple pages from a
13888 my $http_query_database = $query->param('database');
13889 my $http_query_newdatabase = $query->param('newdatabase');
13890 my $http_query_confirm = $query->param('confirm');
13895 if ($http_query_confirm){
13897 # The action to copy multiple pages from the selected
13898 # database has been confirmed.
13900 @filelist = kiriwrite_selectedlist();
13901 $pagedata = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13903 kiriwrite_output_header; # Output the header to browser/console/stdout.
13904 kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13905 exit; # End the script.
13909 # Get the list of selected pages and pass them to the
13910 # multiple page copy subroutine.
13912 @filelist = kiriwrite_selectedlist();
13913 $pagedata = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13915 kiriwrite_output_header; # Output the header to browser/console/stdout.
13916 kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13917 exit; # End the script.
13919 } elsif ($http_query_action eq "multiedit"){
13921 # The action selected was to edit multiple pages from a
13924 my $http_query_database = $query->param('database');
13925 my $http_query_newsection = $query->param('newsection');
13926 my $http_query_altersection = $query->param('altersection');
13927 my $http_query_newtemplate = $query->param('newtemplate');
13928 my $http_query_altertemplate = $query->param('altertemplate');
13929 my $http_query_newsettings = $query->param('newsettings');
13930 my $http_query_altersettings = $query->param('altersettings');
13931 my $http_query_confirm = $query->param('confirm');
13936 if (!$http_query_confirm){
13938 @filelist = kiriwrite_selectedlist();
13939 $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);
13941 kiriwrite_output_header; # Output the header to browser/console/stdout.
13942 kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13947 # Get the list of selected pages and pass them to the
13948 # multiple page edit subroutine.
13950 @filelist = kiriwrite_selectedlist();
13951 $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);
13953 kiriwrite_output_header; # Output the header to browser/console/stdout.
13954 kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13955 exit; # End the script.
13958 kiriwrite_error("invalidaction");
13963 # If there the action option is left blank, then print out a form where the database
13964 # can be selected to view pages from.
13966 my $pagedata = kiriwrite_page_list;
13968 kiriwrite_output_header; # Output the header to browser/console/stdout.
13969 kiriwrite_output_page($kiriwrite_lang->{pages}->{databaseselecttitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13970 exit; # End the script.
13974 # No action has been specified, do the default action of listing pages from
13975 # the first database found in the directory.
13977 } elsif ($http_query_mode eq "filter"){
13979 # If there's a value for action in the HTTP query, then
13980 # get that value that is in the HTTP query.
13982 if ($query->param('action')){
13984 # There is a value for action in the HTTP query,
13985 # so get the value from it.
13987 my $http_query_action = $query->param('action');
13989 if ($http_query_action eq "add"){
13991 # The action the user requested is to add a filter to the
13994 # Check if there is a value in confirm and if there is
13995 # then pass it on to the new find and replace words
13996 # to add to the filter database.
13998 my $http_query_confirm = $query->param('confirm');
14000 if ($http_query_confirm){
14002 # There is a value in http_query_confirm, so pass on the
14003 # new find and replace words so that they can be added
14004 # to the filter database.
14006 my $http_query_findwords = $query->param('findword');
14007 my $http_query_replacewords = $query->param('replaceword');
14008 my $http_query_priority = $query->param('priority');
14009 my $http_query_notes = $query->param('notes');
14011 my $pagedata = kiriwrite_filter_add($http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
14013 kiriwrite_output_header; # Output the header to browser/console/stdout.
14014 kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14015 exit; # End the script.
14019 my $pagedata = kiriwrite_filter_add();
14021 kiriwrite_output_header; # Output the header to browser/console/stdout.
14022 kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14023 exit; # End the script.
14025 } elsif ($http_query_action eq "edit"){
14027 # The action the user requested is to edit an filter from
14028 # the filter database.
14030 my $http_query_number = $query->param('filter');
14031 my $http_query_confirm = $query->param('confirm');
14033 if ($http_query_confirm){
14035 # There is a value in http_query_confirm, so pass on the
14036 # new find and replace words so that the filter database
14039 my $http_query_findwords = $query->param('filterfind');
14040 my $http_query_replacewords = $query->param('filterreplace');
14041 my $http_query_priority = $query->param('priority');
14042 my $http_query_notes = $query->param('notes');
14044 my $pagedata = kiriwrite_filter_edit($http_query_number, $http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
14046 kiriwrite_output_header; # Output the header to browser/console/stdout.
14047 kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14048 exit; # End the script.
14052 my $pagedata = kiriwrite_filter_edit($http_query_number);
14054 kiriwrite_output_header; # Output the header to browser/console/stdout.
14055 kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14056 exit; # End the script.
14058 } elsif ($http_query_action eq "delete"){
14060 # The action the user requested is to delete an filter
14061 # from the filter database.
14063 my $http_query_number = $query->param('filter');
14064 my $http_query_confirm = $query->param('confirm');
14066 if ($http_query_confirm){
14068 my $pagedata = kiriwrite_filter_delete($http_query_number, $http_query_confirm);
14070 kiriwrite_output_header; # Output the header to browser/console/stdout.
14071 kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14072 exit; # End the script
14076 my $pagedata = kiriwrite_filter_delete($http_query_number);
14078 kiriwrite_output_header; # Output the header to browser/console/stdout.
14079 kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14080 exit; # End the script.
14084 # Another action was requested that was not one of
14085 # the ones prcedding this catch all, so return
14086 # an error saying that an invalid option was
14089 kiriwrite_error("invalidaction");
14095 my $pagedata = kiriwrite_filter_list();
14097 kiriwrite_output_header; # Output the header to browser/console/stdout.
14098 kiriwrite_output_page($kiriwrite_lang->{filter}->{viewfilters}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14099 exit; # End the script.
14105 } elsif ($http_query_mode eq "template"){
14107 # Check if an action has been specified in the HTTP query.
14109 if ($query->param('action')){
14111 # An action has been specified in the HTTP query.
14113 my $http_query_action = $query->param('action');
14115 if ($http_query_action eq "delete"){
14116 # Get the required parameters from the HTTP query.
14118 my $http_query_template = $query->param('template');
14119 my $http_query_confirm = $query->param('confirm');
14121 # Check if a value for confirm has been specified (it shouldn't)
14124 if (!$http_query_confirm){
14125 # The confirm parameter of the HTTP query is blank, so
14126 # write out a form asking the user to confirm the deletion
14127 # of the selected template.
14129 my $pagedata = kiriwrite_template_delete($http_query_template);
14131 kiriwrite_output_header; # Output the header to browser/console/stdout.
14132 kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14133 exit; # End the script.
14137 my $pagedata = kiriwrite_template_delete($http_query_template, $http_query_confirm);
14139 kiriwrite_output_header; # Output the header to browser/console/stdout.
14140 kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14141 exit; # End the script.
14145 } elsif ($http_query_action eq "add") {
14147 # Get the variables from the HTTP query in preperation for processing.
14149 my $http_query_confirm = $query->param('confirm');
14150 my $http_query_templatelayout = $query->param('templatelayout');
14151 my $http_query_templatename = $query->param('templatename');
14152 my $http_query_templatedescription = $query->param('templatedescription');
14153 my $http_query_templatefilename = $query->param('templatefilename');
14155 # Check if there is a confirmed value in the http_query_confirm variable.
14157 if (!$http_query_confirm){
14159 # Since there is no confirm value, print out a form for creating a new
14162 my $pagedata = kiriwrite_template_add();
14164 kiriwrite_output_header; # Output the header to browser/console/stdout.
14165 kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14166 exit; # End the script.
14170 # A value in the http_query_confirm value is specified, so pass the
14171 # variables onto the kiriwrite_template_add subroutine.
14173 my $pagedata = kiriwrite_template_add($http_query_templatefilename, $http_query_templatename, $http_query_templatedescription, $http_query_templatelayout, $http_query_confirm);
14175 kiriwrite_output_header; # Output the header to browser/console/stdout.
14176 kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14177 exit; # End the script.
14181 } elsif ($http_query_action eq "edit") {
14183 # Get the required parameters from the HTTP query.
14185 my $http_query_templatefile = $query->param('template');
14186 my $http_query_confirm = $query->param('confirm');
14188 # Check to see if http_query_confirm has a value of '1' in it and
14189 # if it does, edit the template using the settings providied.
14191 if (!$http_query_confirm){
14193 # Since there is no confirm value, open the template configuration
14194 # file and the template file itself then print out the data on to
14197 my $pagedata = kiriwrite_template_edit($http_query_templatefile);
14198 kiriwrite_output_header; # Output the header to browser/console/stdout.
14199 kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14200 exit; # End the script.
14202 } elsif ($http_query_confirm eq 1) {
14204 # Since there is a confirm value of 1, the user has confirm the
14205 # action of editing of a template so get the other variables
14206 # that were also sent and pass the variables to the subroutine.
14208 my $http_query_newfilename = $query->param('newfilename');
14209 my $http_query_newname = $query->param('newname');
14210 my $http_query_newdescription = $query->param('newdescription');
14211 my $http_query_newlayout = $query->param('newlayout');
14213 my $pagedata = kiriwrite_template_edit($http_query_templatefile, $http_query_newfilename, $http_query_newname, $http_query_newdescription, $http_query_newlayout, $http_query_confirm);
14214 kiriwrite_output_header; # Output the header to browser/console/stdout.
14215 kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14216 exit; # End the script.
14220 # Another confirm value is there instead of '0' or '1'. Return
14221 # an error saying it is invalid.
14223 kiriwrite_error("invalidvariable");
14229 # Another action was specified and was not one of the ones above, so
14232 kiriwrite_error("invalidaction");
14238 # If the action option is left blank, then print out a form where the list
14239 # of templates are available.
14241 my $pagedata = kiriwrite_template_list;
14243 kiriwrite_output_header; # Output the header to browser/console/stdout.
14244 kiriwrite_output_page($kiriwrite_lang->{template}->{viewtemplates}, $pagedata, "template"); # Output the page to browser/console/stdout.
14245 exit; # End the script.
14249 } elsif ($http_query_mode eq "compile"){
14251 # The mode selected is to compile pages from databases.
14253 # If the action option is left blank, then print out a form where the list
14254 # of databases to compile are available.
14256 if ($query->param('action')){
14258 my $http_query_action = $query->param('action');
14260 if ($http_query_action eq "compile"){
14262 # The specified action is to compile the pages, check if the
14263 # action to compile the page has been confirmed.
14265 my $http_query_confirm = $query->param('confirm');
14266 my $http_query_type = $query->param('type');
14268 # If it is blank, set the confirm value to 0.
14270 if (!$http_query_confirm){
14272 # The http_query_confirm variable is uninitalised, so place a
14273 # '0' (meaning an unconfirmed action).
14275 $http_query_confirm = 0;
14279 # If the compile type is blank then return an error.
14281 if (!$http_query_type){
14283 # Compile type is blank so return an error.
14285 kiriwrite_error("blankcompiletype");
14289 if ($http_query_type eq "multiple"){
14291 if ($http_query_confirm eq 1){
14293 # The action to compile the pages has been confirmed so
14294 # compile the pages.
14296 my @selectedlist = kiriwrite_selectedlist();
14297 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14299 kiriwrite_output_header; # Output the header to browser/console/stdout.
14300 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14301 exit; # End the script.
14305 # The action to compile the pages has not been confirmed
14306 # so write a form asking the user to confirm the action
14307 # of compiling the pages.
14309 my @selectedlist = kiriwrite_selectedlist();
14310 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14312 kiriwrite_output_header; # Output the header to browser/console/stdout.
14313 kiriwrite_output_page($kiriwrite_lang->{compile}->{compileselecteddatabases}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14314 exit; # End the script.
14318 } elsif ($http_query_type eq "single"){
14320 my $http_query_database = $query->param('database');
14322 $selectedlist[0] = $http_query_database;
14323 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14325 kiriwrite_output_header; # Output the header to browser/console/stdout.
14326 kiriwrite_output_page($kiriwrite_lang->{compile}->{compiledatabase}, $pagedata, "compile");
14327 exit; # End the script.
14331 kiriwrite_error("invalidcompiletype");
14335 } elsif ($http_query_action eq "all"){
14337 # The selected action is to compile all of the databases
14338 # in the database directory. Check if the action to
14339 # compile all of the databases has been confirmed.
14341 my $http_query_confirm = $query->param('confirm');
14343 if (!$http_query_confirm){
14345 # The http_query_confirm variable is uninitalised, so place a
14346 # '0' (meaning an unconfirmed action).
14348 $http_query_confirm = 0;
14352 if ($http_query_confirm eq 1){
14354 # The action to compile all the databases has been confirmed.
14358 my $pagedata = kiriwrite_compile_all();
14360 kiriwrite_output_header; # Output the header to browser/console/stdout.
14361 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilealldatabases}, $pagedata, "compile");
14364 } elsif ($http_query_action eq "clean") {
14366 # The selected action is to clean the output directory.
14367 # Check if the action to clean the output directory
14368 # has been confirmed.
14370 my $http_query_confirm = $query->param('confirm');
14372 if (!$http_query_confirm){
14374 # The http_query_confirm variable is uninitalised, so place a
14375 # '0' (meaning an unconfirmed action).
14377 $http_query_confirm = 0;
14381 if ($http_query_confirm eq 1){
14383 # The action to clean the output directory has been confirmed.
14385 my $pagedata = kiriwrite_compile_clean($http_query_confirm);
14387 kiriwrite_output_header; # Output the header to browser/console/stdout.
14388 kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14389 exit; # End the script.
14393 # The action to clean the output directory is not
14394 # confirmed, so write a page asking the user
14395 # to confirm cleaning the output directory.
14397 my $pagedata = kiriwrite_compile_clean();
14399 kiriwrite_output_header; # Output the header to browser/console/stdout.
14400 kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14401 exit; # End the script.
14405 # The action specified was something else other than those
14406 # above, so return an error.
14408 kiriwrite_error("invalidaction");
14413 my $pagedata = kiriwrite_compile_list;
14415 kiriwrite_output_header; # Output the header to browser/console/stdout.
14416 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14417 exit; # End the script.
14419 } elsif ($http_query_mode eq "settings"){
14421 # The mode selected is view (and change settings).
14423 # If the action value has been left blank, then view the list of
14424 # current settings.
14426 if ($query->param('action')){
14427 my $http_query_action = $query->param('action');
14429 if ($http_query_action eq "edit"){
14431 # The action specified is to edit the settings. Check if the action
14432 # to edit the settings has been confirmed.
14434 my $http_query_confirm = $query->param('confirm');
14436 if (!$http_query_confirm){
14438 # The confirm value is blank, so set it to 0.
14440 $http_query_confirm = 0;
14444 if ($http_query_confirm eq 1){
14446 # The action to edit the settings has been confirmed. Get the
14447 # required settings from the HTTP query.
14449 my $http_query_database = $query->param('databasedir');
14450 my $http_query_output = $query->param('outputdir');
14451 my $http_query_imagesuri = $query->param('imagesuripath');
14452 my $http_query_datetimeformat = $query->param('datetime');
14453 my $http_query_systemlanguage = $query->param('language');
14454 my $http_query_presmodule = $query->param('presmodule');
14455 my $http_query_dbmodule = $query->param('dbmodule');
14457 my $http_query_database_server = $query->param('database_server');
14458 my $http_query_database_port = $query->param('database_port');
14459 my $http_query_database_protocol = $query->param('database_protocol');
14460 my $http_query_database_sqldatabase = $query->param('database_sqldatabase');
14461 my $http_query_database_username = $query->param('database_username');
14462 my $http_query_database_passwordkeep = $query->param('database_password_keep');
14463 my $http_query_database_password = $query->param('database_password');
14464 my $http_query_database_tableprefix = $query->param('database_tableprefix');
14466 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 });
14468 kiriwrite_output_header; # Output the header to browser/console/stdout.
14469 kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings"); # Output the page to browser/console/stdout.
14470 exit; # End the script.
14474 # The action to edit the settings has not been confirmed.
14476 my $pagedata = kiriwrite_settings_edit;
14478 kiriwrite_output_header; # Output the header to browser/console/stdout.
14479 kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings"); # Output the page to browser/console/stdout.
14480 exit; # End the script.
14484 # The action specified was something else other than those
14485 # above, so return an error.
14487 kiriwrite_error("invalidaction");
14493 # No action has been specified, so print out the list of settings currently being used.
14495 my $pagedata = kiriwrite_settings_view;
14497 kiriwrite_output_header; # Output the header to browser/console/stdout.
14498 kiriwrite_output_page($kiriwrite_lang->{setting}->{viewsettings}, $pagedata, "settings"); # Output the page to browser/console/stdout.
14499 exit; # End the script.
14502 # Another mode has been specified than the ones above, so return an error saying that
14503 # an invalid option was specified.
14505 kiriwrite_error("invalidmode");
14510 # No mode has been specified, so print the default "first-run" view of the
14513 my $pagedata = kiriwrite_database_list;
14515 kiriwrite_output_header; # Output the header to browser/console/stdout.
14516 kiriwrite_output_page("", $pagedata, "database"); # Output the page to browser/console/stdout.
14517 exit; # End the script.
14529 Web-based webpage compiler.
14533 Steve Brokenshire <sbrokenshire@xestia.co.uk>
14537 This perl script is intended to be used on a web server which has CGI with Perl support or with mod_perl support.
14539 =head1 DOCUMENTATION
14541 For more information on how to use Kiriwrite, please see the documentation that was included with Kiriwrite.
14543 - From the Xestia Documentation website: http://documentation.xestia.co.uk and click on the Kiriwrite link on the page.
14545 - From the Documentation directory from the Kiriwrite source packages (.tar/.tar.gz/.tar.bz2).
14547 - In the /usr/share/doc/kiriwrite directory if you installed the distribution-specific packages (and also have access to the server itself).