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.
29 use CGI::Carp('fatalsToBrowser'); # Output errors to the browser.
32 # Declare global variables for Kiriwrite settings and languages.
34 my ($kiriwrite_config, %kiriwrite_config, $kiriwrite_lang, $kiriwrite_version, %kiriwrite_version, $kiriwrite_env, %kiriwrite_env, $kiriwrite_presmodule, $kiriwrite_dbmodule);
36 # Setup the version information for Kiriwrite.
38 %kiriwrite_version = (
45 #################################################################################
46 # BEGIN: Get the enviroment stuff #
47 #################################################################################
49 # Get the script filename.
51 my $env_script_name = $ENV{'SCRIPT_NAME'};
53 # Process the script filename until there is only the
56 my $env_script_name_length = length($env_script_name);
57 my $filename_seek = 0;
58 my $filename_char = "";
59 my $filename_last = 0;
62 $filename_char = substr($env_script_name, $filename_seek, 1);
63 if ($filename_char eq "/"){
64 $filename_last = $filename_seek + 1;
67 } until ($filename_seek eq $env_script_name_length || $env_script_name_length eq 0);
69 my $env_script_name_finallength = $env_script_name_length - $filename_last;
70 my $script_filename = substr($env_script_name, $filename_last, $env_script_name_finallength);
72 # Setup the needed enviroment variables for Kiriwrite.
75 "script_filename" => $script_filename,
80 #################################################################################
81 # Begin listing the functions needed. #
82 #################################################################################
84 sub kiriwrite_page_add{
85 #################################################################################
86 # kiriwrite_page_add: Adds a page to a database #
90 # kiriwrite_page_add(database, pagefilename, title, description, section, #
91 # template, settings, info, confirm); #
93 # database Specifies the database name. #
94 # pagefilename Specifies the page filename. #
95 # title Specifies the page title to be used. #
96 # description Specifies the short description of the page. #
97 # section Specifies the section assigned to the page. #
98 # template Specifies the template to use. #
99 # settings Specifies the settings to be used on the page. #
100 # data Specifies the data which consists the page. #
101 # confirm Confirms action to add an page. #
102 #################################################################################
104 # Fetch the required variables that have been passed to the subroutine.
106 my ($pagedatabase, $pagefilename, $pagetitle, $pagedescription, $pagesection, $pagetemplate, $pagesettings, $pagefiledata, $confirm) = @_;
108 # Check if the action to add a new page has been confirmed (or not).
116 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
118 # Check if the database filename is valid and return an error if
121 my $pagedatabase_filename_check = kiriwrite_variablecheck($pagedatabase, "filename", 0, 1);
123 if ($pagedatabase_filename_check eq 1){
125 # The database filename is blank, so return an error.
127 kiriwrite_error("blankdatabasepageadd");
129 } elsif ($pagedatabase_filename_check eq 2){
131 # The database filename is invalid, so return an error.
133 kiriwrite_error("databasefilenameinvalid");
137 # Check the length the database name and return an error if it's
140 my $pagedatabase_length_check = kiriwrite_variablecheck($pagedatabase, "maxlength", 32, 1);
142 if ($pagedatabase_length_check eq 1){
144 # The database name is too long, so return an error.
146 kiriwrite_error("databasefilenametoolong");
150 if ($confirm eq "1"){
152 # Check all the variables to see if they UTF8 valid.
154 kiriwrite_variablecheck($pagefilename, "utf8", 0, 0);
155 kiriwrite_variablecheck($pagetitle, "utf8", 0, 0);
156 kiriwrite_variablecheck($pagedescription, "utf8", 0, 0);
157 kiriwrite_variablecheck($pagesection, "utf8", 0, 0);
158 kiriwrite_variablecheck($pagedatabase, "utf8", 0, 0);
159 kiriwrite_variablecheck($pagesettings, "utf8", 0, 0);
160 kiriwrite_variablecheck($pagetemplate, "utf8", 0, 0);
161 kiriwrite_variablecheck($pagefiledata, "utf8", 0, 0);
163 # Convert the values into proper UTF8 values.
165 $pagefilename = kiriwrite_utf8convert($pagefilename);
166 $pagetitle = kiriwrite_utf8convert($pagetitle);
167 $pagedescription = kiriwrite_utf8convert($pagedescription);
168 $pagesection = kiriwrite_utf8convert($pagesection);
169 $pagedatabase = kiriwrite_utf8convert($pagedatabase);
170 $pagesettings = kiriwrite_utf8convert($pagesettings);
171 $pagetemplate = kiriwrite_utf8convert($pagetemplate);
172 $pagefiledata = kiriwrite_utf8convert($pagefiledata);
174 # Check all the variables (except for the page data, filename and settings
175 # will be checked more specifically later if needed) that were passed to
178 my $pagefilename_maxlength_check = kiriwrite_variablecheck($pagefilename, "maxlength", 256, 1);
179 my $pagetitle_maxlength_check = kiriwrite_variablecheck($pagetitle, "maxlength", 512, 1);
180 my $pagedescription_maxlength_check = kiriwrite_variablecheck($pagedescription, "maxlength", 512, 1);
181 my $pagesection_maxlength_check = kiriwrite_variablecheck($pagesection, "maxlength", 256, 1);
182 my $pagedatabase_maxlength_check = kiriwrite_variablecheck($pagedatabase, "maxlength", 32, 1);
183 my $pagesettings_maxlength_check = kiriwrite_variablecheck($pagesettings, "maxlength", 1, 1);
184 my $pagetemplate_maxlength_check = kiriwrite_variablecheck($pagetemplate, "maxlength", 64, 1);
186 # Check if an value returned is something else other than 0.
188 if ($pagefilename_maxlength_check eq 1){
190 # The page filename given is too long, so return an error.
192 kiriwrite_error("pagefilenametoolong");
196 if ($pagetitle_maxlength_check eq 1){
198 # The page title given is too long, so return an error.
200 kiriwrite_error("pagetitletoolong");
204 if ($pagedescription_maxlength_check eq 1){
206 # The page description given is too long, so return an error.
208 kiriwrite_error("pagedescriptiontoolong");
212 if ($pagesection_maxlength_check eq 1){
214 # The page section given is too long, so return an error.
216 kiriwrite_error("pagesectiontoolong");
220 if ($pagedatabase_maxlength_check eq 1){
222 # The page database given is too long, so return an error.
224 kiriwrite_error("pagedatabasefilenametoolong");
228 if ($pagesettings_maxlength_check eq 1){
230 # The page settings given is too long, so return an error.
232 kiriwrite_error("pagesettingstoolong");
236 if ($pagetemplate_maxlength_check eq 1){
238 # The page template given is too long, so return an error.
240 kiriwrite_error("pagetemplatefilenametoolong");
244 # The action to create a new page has been confirmed, so add the page to the
248 kiriwrite_error("pagefilenameblank");
251 # Check the page filename and page settings.
253 my $pagefilename_filename_check = kiriwrite_variablecheck($pagefilename, "page_filename", 0, 1);
254 my $pagesettings_setting_check = kiriwrite_variablecheck($pagesettings, "pagesetting", 0, 1);
255 my $pagetemplate_filename_check = 0;
257 if ($pagetemplate ne "!none"){
259 # A template is being used so check the filename of the
262 $pagetemplate_filename_check = kiriwrite_variablecheck($pagetemplate, "page_filename", 0, 1);
266 if ($pagefilename_filename_check ne 0){
268 # The page filename given is invalid, so return an error.
270 kiriwrite_error("pagefilenameinvalid");
274 if ($pagesettings_setting_check eq 1){
276 # The page settings given is invalid, so return an error.
278 kiriwrite_error("pagesettingsinvalid");
282 if ($pagetemplate_filename_check eq 1){
284 # The template filename given is invalid, so return an error
286 kiriwrite_error("templatefilenameinvalid");
290 # Check if the database has write permissions.
292 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($pagedatabase, 1, 1);
294 if ($database_permissions eq 1){
296 # The database permissions are invalid so return an error.
298 kiriwrite_error("databaseinvalidpermissions");
302 # Connect to the database server.
304 $kiriwrite_dbmodule->connect();
306 # Check if any errors occured while connecting to the database server.
308 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
310 # A database connection error has occured so return
313 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
317 # Select the database to add the page to.
319 $kiriwrite_dbmodule->selectdb({ DatabaseName => $pagedatabase });
321 # Check if any errors had occured while selecting the database.
323 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
325 # The database does not exist, so return an error.
327 kiriwrite_error("databasemissingfile");
329 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
331 # The database has invalid permissions set, so return
334 kiriwrite_error("databaseinvalidpermissions");
338 # Get information about the database.
340 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
342 # Check if any error occured while getting the database information.
344 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
346 # A database error has occured so return an error and
347 # also the extended error information.
349 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
353 # Add the page to the selected database.
355 $kiriwrite_dbmodule->addpage({ PageFilename => $pagefilename, PageName => $pagetitle, PageDescription => $pagedescription, PageSection => $pagesection, PageTemplate => $pagetemplate, PageContent => $pagefiledata, PageSettings => $pagesettings });
357 # Check if any errors occured while adding the page.
359 if ($kiriwrite_dbmodule->geterror eq "PageExists"){
361 # A page with the filename given already exists so
364 kiriwrite_error("pagefilenameexists");
366 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
368 # A database error has occured so return an error
369 # with extended error information.
371 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
375 my $database_name = $database_info{"DatabaseName"};
377 # Disconnect from the database server.
379 $kiriwrite_dbmodule->disconnect();
381 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{addpage}, { Style => "pageheader" });
382 $kiriwrite_presmodule->addlinebreak();
383 $kiriwrite_presmodule->addlinebreak();
384 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pageaddedmessage}, $pagetitle, $database_name));
385 $kiriwrite_presmodule->addlinebreak();
386 $kiriwrite_presmodule->addlinebreak();
387 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $pagedatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
389 return $kiriwrite_presmodule->grab();
391 } elsif ($confirm eq 0) {
393 # The action to create a new page has not been confirmed, so print out a form
394 # for adding a page to a database.
400 my $template_filename;
402 my $template_data = "";
403 my $template_warningmessage;
404 my $template_warning = 0;
405 my $template_count = 0;
408 tie(%template_list, 'Tie::IxHash');
410 # Connect to the database server.
412 $kiriwrite_dbmodule->connect();
414 # Check if any errors occured while connecting to the database server.
416 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
418 # A database connection error has occured so return
421 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
425 # Select the database.
427 $kiriwrite_dbmodule->selectdb({ DatabaseName => $pagedatabase });
429 # Check if any errors had occured while selecting the database.
431 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
433 # The database does not exist, so return an error.
435 kiriwrite_error("databasemissingfile");
437 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
439 # The database has invalid permissions set, so return
442 kiriwrite_error("databaseinvalidpermissions");
446 # Check if the database has write permissions.
448 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($pagedatabase, 1, 1);
450 if ($database_permissions eq 1){
452 # The database permissions are invalid so return an error.
454 kiriwrite_error("databaseinvalidpermissions");
458 # Get information about the database.
460 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
462 # Check if any error occured while getting the database information.
464 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
466 # A database error has occured so return an error and
467 # also the extended error information.
469 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
473 # Connect to the template database.
475 $kiriwrite_dbmodule->connecttemplate();
477 # Check if any errors occured while connecting to the template database.
479 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
481 # The template database does not exist so set the template
484 $template_warningmessage = $kiriwrite_lang->{pages}->{notemplatedatabase};
485 $template_warning = 1;
487 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
489 # The template database has invalid permissions set so write
490 # the template warning message.
492 $template_warningmessage = $kiriwrite_lang->{pages}->{templatepermissionserror};
493 $template_warning = 1;
497 if ($template_warning eq 0){
499 # Get the list of templates available.
501 @templates_list = $kiriwrite_dbmodule->gettemplatelist();
503 # Check if any errors had occured.
505 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
507 # A database error occured while getting the list
508 # of templates so return a warning message with the
509 # extended error information.
511 $template_warningmessage = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1));
512 $template_warning = 1;
516 if ($template_warning eq 0){
518 # Check to see if there are any templates in the templates
521 my $template_filename = "";
522 my $template_name = "";
524 foreach $template (@templates_list){
526 # Get information about the template.
528 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
530 # Check if any error occured while getting the template information.
532 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
534 # A database error has occured, so return an error.
536 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
538 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
540 # The template does not exist, so process the next template.
546 # Get the template filename and name.
548 $template_filename = $template_info{"TemplateFilename"};
549 $template_name = $template_info{"TemplateName"};
551 $template_list{$template_count}{Filename} = $template_filename;
552 $template_list{$template_count}{Name} = $template_name;
558 # Check if the final template list is blank.
560 if (!%template_list){
562 # The template list is blank so write the template
565 $template_warningmessage = $kiriwrite_lang->{pages}->{notemplatesavailable};
573 my $database_name = $database_info{"DatabaseName"};
575 # Disconnect from the template database.
577 $kiriwrite_dbmodule->disconnecttemplate();
579 # Disconnect from the database server.
581 $kiriwrite_dbmodule->disconnect();
583 # write out the form for adding a page.
585 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{addpage}, { Style => "pageheader" });
586 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
587 $kiriwrite_presmodule->addhiddendata("mode", "page");
588 $kiriwrite_presmodule->addhiddendata("action", "add");
589 $kiriwrite_presmodule->addhiddendata("database", $pagedatabase);
590 $kiriwrite_presmodule->addhiddendata("confirm", "1");
591 $kiriwrite_presmodule->addlinebreak();
592 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
594 $kiriwrite_presmodule->startheader();
595 $kiriwrite_presmodule->addcell("tablecellheader");
596 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{setting});
597 $kiriwrite_presmodule->endcell();
598 $kiriwrite_presmodule->addcell("tablecellheader");
599 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{value});
600 $kiriwrite_presmodule->endcell();
601 $kiriwrite_presmodule->endheader();
603 $kiriwrite_presmodule->startrow();
604 $kiriwrite_presmodule->addcell("tablecell1");
605 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{database});
606 $kiriwrite_presmodule->endcell();
607 $kiriwrite_presmodule->addcell("tablecell2");
608 $kiriwrite_presmodule->addtext($database_name);
609 $kiriwrite_presmodule->endcell();
610 $kiriwrite_presmodule->endrow();
612 $kiriwrite_presmodule->startrow();
613 $kiriwrite_presmodule->addcell("tablecell1");
614 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagename});
615 $kiriwrite_presmodule->endcell();
616 $kiriwrite_presmodule->addcell("tablecell2");
617 $kiriwrite_presmodule->addinputbox("pagename", { Size => 64, MaxLength => 512 });
618 $kiriwrite_presmodule->endcell();
619 $kiriwrite_presmodule->endrow();
621 $kiriwrite_presmodule->startrow();
622 $kiriwrite_presmodule->addcell("tablecell1");
623 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedescription});
624 $kiriwrite_presmodule->endcell();
625 $kiriwrite_presmodule->addcell("tablecell2");
626 $kiriwrite_presmodule->addinputbox("pagedescription", { Size => 64, MaxLength => 512 });
627 $kiriwrite_presmodule->endcell();
628 $kiriwrite_presmodule->endrow();
630 $kiriwrite_presmodule->startrow();
631 $kiriwrite_presmodule->addcell("tablecell1");
632 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
633 $kiriwrite_presmodule->endcell();
634 $kiriwrite_presmodule->addcell("tablecell2");
635 $kiriwrite_presmodule->addinputbox("pagesection", { Size => 64, MaxLength => 256 });
636 $kiriwrite_presmodule->endcell();
637 $kiriwrite_presmodule->endrow();
639 $kiriwrite_presmodule->startrow();
640 $kiriwrite_presmodule->addcell("tablecell1");
641 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
642 $kiriwrite_presmodule->endcell();
643 $kiriwrite_presmodule->addcell("tablecell2");
645 # Check if the template warning value has been set
646 # and write the error message in place of the templates
649 if ($template_warning eq 1){
651 $kiriwrite_presmodule->addhiddendata("pagetemplate", "!none");
652 $kiriwrite_presmodule->addtext($template_warningmessage);
660 $kiriwrite_presmodule->addselectbox("pagetemplate");
662 foreach $template_file (keys %template_list){
664 $page_filename = $template_list{$template_file}{Filename};
665 $page_name = $template_list{$template_file}{Name};
666 $kiriwrite_presmodule->addoption($page_name . " (" . $page_filename . ")", { Value => $page_filename });
672 $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
673 $kiriwrite_presmodule->endselectbox();
677 $kiriwrite_presmodule->endcell();
678 $kiriwrite_presmodule->endrow();
680 $kiriwrite_presmodule->startrow();
681 $kiriwrite_presmodule->addcell("tablecell1");
682 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagefilename});
683 $kiriwrite_presmodule->endcell();
684 $kiriwrite_presmodule->addcell("tablecell2");
685 $kiriwrite_presmodule->addinputbox("pagefilename", { Size => 64, MaxLength => 256 });
686 $kiriwrite_presmodule->endcell();
687 $kiriwrite_presmodule->endrow();
689 $kiriwrite_presmodule->startrow();
690 $kiriwrite_presmodule->addcell("tablecell1");
691 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagecontent});
692 $kiriwrite_presmodule->endcell();
693 $kiriwrite_presmodule->addcell("tablecell2");
694 $kiriwrite_presmodule->addtextbox("pagecontent", { Columns => 50, Rows => 10 });
695 $kiriwrite_presmodule->addlinebreak();
696 $kiriwrite_presmodule->addlinebreak();
697 $kiriwrite_presmodule->startbox("datalist");
698 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
699 $kiriwrite_presmodule->addlinebreak();
700 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
701 $kiriwrite_presmodule->addlinebreak();
702 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
703 $kiriwrite_presmodule->addlinebreak();
704 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
705 $kiriwrite_presmodule->addlinebreak();
706 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
707 $kiriwrite_presmodule->addlinebreak();
708 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
709 $kiriwrite_presmodule->addlinebreak();
710 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
711 $kiriwrite_presmodule->addlinebreak();
712 $kiriwrite_presmodule->endbox();
713 $kiriwrite_presmodule->endcell();
714 $kiriwrite_presmodule->endrow();
716 $kiriwrite_presmodule->startrow();
717 $kiriwrite_presmodule->addcell("tablecell1");
718 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
719 $kiriwrite_presmodule->endcell();
720 $kiriwrite_presmodule->addcell("tablecell2");
721 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", Selected => 1, LineBreak => 1});
722 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", Selected => 0, LineBreak => 1});
723 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", Selected => 0, LineBreak => 1});
724 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", Selected => 0, LineBreak => 1});
725 $kiriwrite_presmodule->endcell();
726 $kiriwrite_presmodule->endrow();
728 $kiriwrite_presmodule->endtable();
730 $kiriwrite_presmodule->addlinebreak();
731 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{addpagebutton});
732 $kiriwrite_presmodule->addtext(" | ");
733 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
734 $kiriwrite_presmodule->addtext(" | ");
735 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $pagedatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
736 $kiriwrite_presmodule->endform();
738 return $kiriwrite_presmodule->grab();
742 # The confirm value is something else than '1' or '0' so
745 kiriwrite_error("invalidvalue");
753 sub kiriwrite_page_delete{
754 #################################################################################
755 # kiriwrite_page_delete: Deletes a (single) page from a database. #
759 # kiriwrite_page_delete(database, page, [confirm]); #
761 # database Specifies the database to delete from. #
762 # page Specifies the page to delete. #
763 # confirm Confirms the action to delete the page. #
764 #################################################################################
766 my ($database, $page, $confirm) = @_;
768 # Check if the database filename is valid and return an error if
771 my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
773 if ($pagedatabase_filename_check eq 1){
775 # The database filename is blank, so return an error.
777 kiriwrite_error("blankdatabasepageadd");
779 } elsif ($pagedatabase_filename_check eq 2){
781 # The database filename is invalid, so return an error.
783 kiriwrite_error("databasefilenameinvalid");
787 # Check the length the database name and return an error if it's
790 my $pagedatabase_length_check = kiriwrite_variablecheck($database, "maxlength", 32, 1);
792 if ($pagedatabase_length_check eq 1){
794 # The database name is too long, so return an error.
796 kiriwrite_error("databasefilenametoolong");
800 # Check if the page name is specified is blank and return an error if
805 # The page name is blank, so return an error.
807 kiriwrite_error("blankfilename");
811 # If the confirm value is blank, then set the confirm value to 0.
821 # The action to delete the selected page from the database
822 # has been confirmed.
824 # Connect to the database server.
826 $kiriwrite_dbmodule->connect();
828 # Check if any errors occured while connecting to the database server.
830 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
832 # A database connection error has occured so return
835 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
839 # Select the database to delete the page from.
841 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
843 # Check if any errors had occured while selecting the database.
845 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
847 # The database does not exist, so return an error.
849 kiriwrite_error("databasemissingfile");
851 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
853 # The database has invalid permissions set, so return
856 kiriwrite_error("databaseinvalidpermissions");
860 # Check if the database has write permissions.
862 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
864 if ($database_permissions eq 1){
866 # The database permissions are invalid so return an error.
868 kiriwrite_error("databaseinvalidpermissions");
872 # Get the information about the database.
874 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
876 # Check if any error occured while getting the database information.
878 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
880 # A database error has occured so return an error and
881 # also the extended error information.
883 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
887 # Get the information about the page that is going to be deleted.
889 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
891 # Check if any errors occured while getting the page information.
893 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
895 # A database error has occured so return an error and
896 # also the extended error information.
898 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
900 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
902 # The page does not exist, so return an error.
904 kiriwrite_error("pagefilenamedoesnotexist");
908 # Delete the page from the database.
910 $kiriwrite_dbmodule->deletepage({ PageFilename => $page });
912 # Check if any errors occured while deleting the page from the database.
914 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
916 # A database error has occured so return an error and
917 # also the extended error information.
919 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
921 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
923 # The page does not exist, so return an error.
925 kiriwrite_error("pagefilenamedoesnotexist");
929 # Get the database name and page name.
931 my $database_name = $database_info{"DatabaseName"};
932 my $page_name = $page_info{"PageName"};
934 # Disconnect from the database server.
936 $kiriwrite_dbmodule->disconnect();
938 # Write out a message saying that the selected page from
939 # the database has been deleted.
941 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedeleted}, { Style => "pageheader" });
942 $kiriwrite_presmodule->addlinebreak();
943 $kiriwrite_presmodule->addlinebreak();
944 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagedeletedmessage}, $page_name, $database_name));
945 $kiriwrite_presmodule->addlinebreak();
946 $kiriwrite_presmodule->addlinebreak();
947 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
949 return $kiriwrite_presmodule->grab();
951 } elsif ($confirm eq 0){
953 # Connect to the database server.
955 $kiriwrite_dbmodule->connect();
957 # Check if any errors occured while connecting to the database server.
959 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
961 # A database connection error has occured so return
964 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
968 # Select the database.
970 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
972 # Check if any errors had occured while selecting the database.
974 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
976 # The database does not exist, so return an error.
978 kiriwrite_error("databasemissingfile");
980 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
982 # The database has invalid permissions set, so return
985 kiriwrite_error("databaseinvalidpermissions");
989 # Get information about the database.
991 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
993 # Check if any errors occured while getting the database information.
995 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
997 # A database error has occured so return an error and
998 # also the extended error information.
1000 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1004 # Get information about the page that is going to be deleted.
1006 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
1008 # Check if any errors occured while getting the page information.
1010 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1012 # A database error has occured so return an error and
1013 # also the extended error information.
1015 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1017 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1019 # The page does not exist, so return an error.
1021 kiriwrite_error("pagefilenamedoesnotexist");
1025 my $database_name = $database_info{"DatabaseName"};
1026 my $page_name = $page_info{"PageName"};
1028 # Disconnect from the database server.
1030 $kiriwrite_dbmodule->disconnect();
1032 # Write a message asking the user to confirm the deletion of the
1035 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletepage}, $page_name), { Style => "pageheader" });
1036 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1037 $kiriwrite_presmodule->addhiddendata("mode", "page");
1038 $kiriwrite_presmodule->addhiddendata("action", "delete");
1039 $kiriwrite_presmodule->addhiddendata("database", $database);
1040 $kiriwrite_presmodule->addhiddendata("page", $page);
1041 $kiriwrite_presmodule->addhiddendata("confirm", "1");
1042 $kiriwrite_presmodule->addlinebreak();
1043 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletepagemessage}, $page_name, $database_name));
1044 $kiriwrite_presmodule->addlinebreak();
1045 $kiriwrite_presmodule->addlinebreak();
1046 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{deletepagebutton});
1047 $kiriwrite_presmodule->addtext(" | ");
1048 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{deletepagesreturnlink}, $database_name)});
1049 $kiriwrite_presmodule->endform();
1051 return $kiriwrite_presmodule->grab();
1055 # Another page deletion type was specified, so return an error.
1057 kiriwrite_error("invalidoption");
1063 sub kiriwrite_page_edit{
1064 #################################################################################
1065 # kiriwrite_page_edit: Edits a page from a database. #
1069 # kiriwrite_page_edit(database, filename, newname, newfilename, newdescription, #
1070 # newsection, newtemplate, newsettings, newpagecontent #
1073 # database Specifies the database to edit from. #
1074 # filename Specifies the filename to use. #
1075 # newfilename Specifies the new page filename to use. #
1076 # newname Specifies the new page name to use. #
1077 # newdescription Specifies the new description for the page. #
1078 # newsection Specifies the new section name to use. #
1079 # newtemplate Specifies the new template filename to use. #
1080 # newsettings Specifies the new page settings to use. #
1081 # newpagecontent Specifies the new page content to use. #
1082 # confirm Confirms the action to edit the page. #
1083 #################################################################################
1085 # Get the values that have been passed to the subroutine.
1087 my ($database, $pagefilename, $pagenewfilename, $pagenewtitle, $pagenewdescription, $pagenewsection, $pagenewtemplate, $pagenewsettings, $pagenewcontent, $confirm) = @_;
1089 # Check if the confirm value is blank and if it is, then set it to '0'.
1097 # Check if the confirm value is more than one character long and if it
1098 # is then return an error.
1100 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
1102 # Check if the database filename is valid and return an error if
1105 my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
1107 if ($pagedatabase_filename_check eq 1){
1109 # The database filename is blank, so return an error.
1111 kiriwrite_error("blankdatabasepageadd");
1113 } elsif ($pagedatabase_filename_check eq 2){
1115 # The database filename is invalid, so return an error.
1117 kiriwrite_error("databasefilenameinvalid");
1121 # Check the length the database name and return an error if it's
1124 my $pagedatabase_length_check = kiriwrite_variablecheck($database, "maxlength", 32, 1);
1126 if ($pagedatabase_length_check eq 1){
1128 # The database name is too long, so return an error.
1130 kiriwrite_error("databasefilenametoolong");
1134 # Check if the page identification number is blank (which it shouldn't
1135 # be) and if it is, then return an error.
1137 if (!$pagefilename){
1139 kiriwrite_error("blankfilename");
1143 # Check if the confirm value is '1' and if it is, edit the specified
1144 # page in the database.
1148 # Check if the new page filename is blank.
1150 if (!$pagenewfilename){
1152 # The page filename is blank so return an error.
1154 kiriwrite_error("pagefilenameblank");
1158 # The action to edit a page has been confirmed so check the
1159 # variables recieved are UTF8 compiliant before converting.
1161 kiriwrite_variablecheck($database, "utf8", 0, 0);
1162 kiriwrite_variablecheck($pagefilename, "utf8", 0, 0);
1163 kiriwrite_variablecheck($pagenewfilename, "utf8", 0, 0);
1164 kiriwrite_variablecheck($pagenewtitle, "utf8", 0, 0);
1165 kiriwrite_variablecheck($pagenewdescription, "utf8", 0, 0);
1166 kiriwrite_variablecheck($pagenewsection, "utf8", 0, 0);
1167 kiriwrite_variablecheck($pagenewsettings, "utf8", 0, 0);
1168 kiriwrite_variablecheck($pagenewtemplate, "utf8", 0, 0);
1169 kiriwrite_variablecheck($pagenewcontent, "utf8", 0, 0);
1171 # Convert the variables into proper UTF8 variables.
1173 $database = kiriwrite_utf8convert($database);
1174 $pagefilename = kiriwrite_utf8convert($pagefilename);
1175 $pagenewfilename = kiriwrite_utf8convert($pagenewfilename);
1176 $pagenewtitle = kiriwrite_utf8convert($pagenewtitle);
1177 $pagenewdescription = kiriwrite_utf8convert($pagenewdescription);
1178 $pagenewsection = kiriwrite_utf8convert($pagenewsection);
1179 $pagenewsettings = kiriwrite_utf8convert($pagenewsettings);
1180 $pagenewtemplate = kiriwrite_utf8convert($pagenewtemplate);
1181 $pagenewcontent = kiriwrite_utf8convert($pagenewcontent);
1183 # Check the lengths of the variables.
1185 my $pagenewfilename_maxlength_check = kiriwrite_variablecheck($pagenewfilename, "maxlength", 256, 1);
1186 my $pagenewtitle_maxlength_check = kiriwrite_variablecheck($pagenewtitle, "maxlength", 512, 1);
1187 my $pagenewdescription_maxlength_check = kiriwrite_variablecheck($pagenewdescription, "maxlength", 512, 1);
1188 my $pagenewsection_maxlength_check = kiriwrite_variablecheck($pagenewsection, "maxlength", 256, 1);
1189 my $pagenewsettings_maxlength_check = kiriwrite_variablecheck($pagenewsettings, "maxlength", 1, 1);
1190 my $pagenewtemplate_maxlength_check = kiriwrite_variablecheck($pagenewtemplate, "maxlength", 64, 1);
1192 # Check each result to see if the length of the variable
1193 # is valid and return an error if it isn't.
1195 if ($pagenewfilename_maxlength_check eq 1){
1197 # The new page filename given is too long, so return an error.
1199 kiriwrite_error("pagefilenametoolong");
1203 if ($pagenewtitle_maxlength_check eq 1){
1205 # The new page title given is too long, so return an error.
1207 kiriwrite_error("pagetitletoolong");
1211 if ($pagenewdescription_maxlength_check eq 1){
1213 # The new page description given is too long, so return an error.
1215 kiriwrite_error("pagedescriptiontoolong");
1219 if ($pagenewsection_maxlength_check eq 1){
1221 # The new page section given is too long, so return an error.
1223 kiriwrite_error("pagesectiontoolong");
1227 if ($pagenewsettings_maxlength_check eq 1){
1229 # The new page settings given is too long, so return an error.
1231 kiriwrite_error("pagesettingstoolong");
1235 if ($pagenewtemplate_maxlength_check eq 1){
1237 # The new page template given is too long, so return an error.
1239 kiriwrite_error("pagetemplatefilenametoolong");
1243 # Check if the new page filename and new page settings
1246 my $pagenewfilename_filename_check = kiriwrite_variablecheck($pagenewfilename, "page_filename", 0, 1);
1247 my $pagenewsettings_settings_check = kiriwrite_variablecheck($pagenewsettings, "pagesetting", 0, 1);
1248 my $pagetemplate_filename_check = 0;
1250 if ($pagenewtemplate ne "!none"){
1252 # A template is being used so check the filename of the
1255 $pagetemplate_filename_check = kiriwrite_variablecheck($pagenewtemplate, "page_filename", 0, 1);
1259 # Check each result to see if the variables have passed
1260 # their tests and return an error if they haven't.
1262 if ($pagenewfilename_filename_check ne 0){
1264 # The new page filename is invalid, so return an error.
1266 kiriwrite_error("pagefilenameinvalid");
1270 if ($pagenewsettings_settings_check eq 1){
1272 # The new page settings is invalid, so return an error.
1274 kiriwrite_error("pagesettingsinvalid");
1278 if ($pagetemplate_filename_check eq 1){
1280 # The template filename given is invalid, so return an error
1282 kiriwrite_error("templatefilenameinvalid");
1286 # Connect to the database server.
1288 $kiriwrite_dbmodule->connect();
1290 # Check if any errors occured while connecting to the database server.
1292 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1294 # A database connection error has occured so return
1297 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1301 # Select the database.
1303 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1305 # Check if any errors had occured while selecting the database.
1307 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1309 # The database does not exist, so return an error.
1311 kiriwrite_error("databasemissingfile");
1313 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1315 # The database has invalid permissions set, so return
1318 kiriwrite_error("databaseinvalidpermissions");
1322 # Check if the database has write permissions.
1324 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
1326 if ($database_permissions eq 1){
1328 # The database permissions are invalid so return an error.
1330 kiriwrite_error("databaseinvalidpermissions");
1334 # Get the database information.
1336 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1338 # Check if any errors had occured while getting the database information.
1340 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1342 # A database error has occured so return an error and
1343 # also the extended error information.
1345 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1349 my $database_name = $database_info{"DatabaseName"};
1351 # Edit the selected page.
1353 $kiriwrite_dbmodule->editpage({ PageFilename => $pagefilename, PageNewFilename => $pagenewfilename, PageNewName => $pagenewtitle, PageNewDescription => $pagenewdescription, PageNewSection => $pagenewsection, PageNewTemplate => $pagenewtemplate, PageNewContent => $pagenewcontent, PageNewSettings => $pagenewsettings });
1355 # Check if any errors occured while editing the page.
1357 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1359 # A database error has occured so return an error and
1360 # also the extended error information.
1362 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1364 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1366 # The pages does not exist in the database.
1368 kiriwrite_error("pagefilenamedoesnotexist");
1372 # Disconnect from the database server.
1374 $kiriwrite_dbmodule->disconnect();
1376 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{editedpage}, { Style => "pageheader" });
1377 $kiriwrite_presmodule->addlinebreak();
1378 $kiriwrite_presmodule->addlinebreak();
1379 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{editedpagemessage}, $pagenewtitle));
1380 $kiriwrite_presmodule->addlinebreak();
1381 $kiriwrite_presmodule->addlinebreak();
1382 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
1384 return $kiriwrite_presmodule->grab();
1386 } elsif ($confirm eq 0) {
1388 # Connect to the database server.
1390 $kiriwrite_dbmodule->connect();
1392 # Check if any errors occured while connecting to the database server.
1394 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1396 # A database connection error has occured so return
1399 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1403 # Select the database.
1405 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1407 # Check if any errors had occured while selecting the database.
1409 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1411 # The database does not exist, so return an error.
1413 kiriwrite_error("databasemissingfile");
1415 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1417 # The database has invalid permissions set, so return
1420 kiriwrite_error("databaseinvalidpermissions");
1424 # Get the information about the database.
1426 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1428 # Check if any errors had occured while getting the database information.
1430 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1432 # A database error has occured so return an error and
1433 # also the extended error information.
1435 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1439 my $database_name = $database_info{"DatabaseName"};
1441 # Get the page info.
1443 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $pagefilename });
1445 # Check if any errors occured while getting the page information.
1447 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1449 # A database error has occured so return an error and
1450 # also the extended error information.
1452 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1454 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1456 # The page does not exist, so return an error.
1458 kiriwrite_error("pagefilenamedoesnotexist");
1462 # Get the values from the hash.
1464 my $data_filename = $page_info{"PageFilename"};
1465 my $data_name = $page_info{"PageName"};
1466 my $data_description = $page_info{"PageDescription"};
1467 my $data_section = $page_info{"PageSection"};
1468 my $data_template = $page_info{"PageTemplate"};
1469 my $data_content = $page_info{"PageContent"};
1470 my $data_settings = $page_info{"PageSettings"};
1471 my $data_lastmodified = $page_info{"PageLastModified"};
1473 my $template_warning;
1479 my @database_templates;
1480 my @template_filenames;
1482 my $template_filename;
1484 my $template_count = 0;
1485 my $template_found = 0;
1487 tie(%template_list, 'Tie::IxHash');
1489 # Connect to the template database.
1491 $kiriwrite_dbmodule->connecttemplate();
1493 # Check if any errors occured while connecting to the template database.
1495 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
1497 # The template database does not exist so set the template
1500 $template_warning = $kiriwrite_lang->{pages}->{notemplatedatabasekeep};
1502 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
1504 # The template database has invalid permissions set so write
1505 # the template warning message.
1507 $template_warning = $kiriwrite_lang->{pages}->{templatepermissionserrorkeep};
1511 if (!$template_warning){
1513 # Get the list of available templates.
1515 @template_filenames = $kiriwrite_dbmodule->gettemplatelist();
1517 # Check if any errors had occured.
1519 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1521 # A database error occured while getting the list
1522 # of templates so return an error with the
1523 # extended error information.
1525 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrorkeep} , $kiriwrite_dbmodule->geterror(1));
1529 if (!$template_warning){
1531 foreach $template_filename (@template_filenames){
1533 # Get the information about each template.
1535 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
1537 # Check if any errors occured while getting the template information.
1539 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1541 # A template database error has occured so return a warning message
1542 # with the extended error information.
1544 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrorkeep} , $kiriwrite_dbmodule->geterror(1));
1547 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
1549 # The template does not exist so process the next template.
1555 # Append the template name and filename to the list of available templates.
1557 $template_list{$template_count}{Filename} = $template_info{"TemplateFilename"};
1558 $template_list{$template_count}{Name} = $template_info{"TemplateName"};
1560 # Append the template filename and name and make it the selected
1561 # template if that is the template the page is using.
1563 if ($data_template eq $template_filename && !$template_found){
1565 $template_list{$template_count}{Selected} = 1;
1566 $template_found = 1;
1570 $template_list{$template_count}{Selected} = 0;
1582 # Check if certain values are undefined and if they
1583 # are then set them blank (defined).
1589 if (!$data_description){
1590 $data_description = "";
1593 if (!$data_section){
1597 if (!$data_template){
1598 $data_template = "";
1602 if (!$data_content){
1606 if (!$data_settings){
1607 $data_settings = "";
1610 if (!$data_lastmodified){
1611 $data_lastmodified = "";
1614 # Begin writing out the form for editing the selected page.
1616 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{editpage}, $data_name), { Style => "pageheader" });
1617 $kiriwrite_presmodule->addlinebreak();
1618 $kiriwrite_presmodule->addlinebreak();
1620 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1621 $kiriwrite_presmodule->addhiddendata("mode", "page");
1622 $kiriwrite_presmodule->addhiddendata("action", "edit");
1623 $kiriwrite_presmodule->addhiddendata("database", $database);
1624 $kiriwrite_presmodule->addhiddendata("page", $pagefilename);
1625 $kiriwrite_presmodule->addhiddendata("confirm", 1);
1627 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
1629 $kiriwrite_presmodule->startheader();
1630 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
1631 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
1632 $kiriwrite_presmodule->endheader();
1634 $kiriwrite_presmodule->startrow();
1635 $kiriwrite_presmodule->addcell("tablecell1");
1636 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{database});
1637 $kiriwrite_presmodule->endcell();
1638 $kiriwrite_presmodule->addcell("tablecell2");
1639 $kiriwrite_presmodule->addtext($database_name);
1640 $kiriwrite_presmodule->endcell();
1641 $kiriwrite_presmodule->endrow();
1643 $kiriwrite_presmodule->startrow();
1644 $kiriwrite_presmodule->addcell("tablecell1");
1645 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagename});
1646 $kiriwrite_presmodule->endcell();
1647 $kiriwrite_presmodule->addcell("tablecell2");
1648 $kiriwrite_presmodule->addinputbox("pagename", { Size => 64, MaxLength => 256, Value => $data_name });
1649 $kiriwrite_presmodule->endcell();
1650 $kiriwrite_presmodule->endrow();
1652 $kiriwrite_presmodule->startrow();
1653 $kiriwrite_presmodule->addcell("tablecell1");
1654 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedescription});
1655 $kiriwrite_presmodule->endcell();
1656 $kiriwrite_presmodule->addcell("tablecell2");
1657 $kiriwrite_presmodule->addinputbox("pagedescription", { Size => 64, MaxLength => 256, Value => $data_description });
1658 $kiriwrite_presmodule->endcell();
1659 $kiriwrite_presmodule->endrow();
1661 $kiriwrite_presmodule->startrow();
1662 $kiriwrite_presmodule->addcell("tablecell1");
1663 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
1664 $kiriwrite_presmodule->endcell();
1665 $kiriwrite_presmodule->addcell("tablecell2");
1666 $kiriwrite_presmodule->addinputbox("pagesection", { Size => 64, MaxLength => 256, Value => $data_section });
1667 $kiriwrite_presmodule->endcell();
1668 $kiriwrite_presmodule->endrow();
1670 $kiriwrite_presmodule->startrow();
1671 $kiriwrite_presmodule->addcell("tablecell1");
1672 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
1673 $kiriwrite_presmodule->endcell();
1674 $kiriwrite_presmodule->addcell("tablecell2");
1676 # Check if any template warnings have occured.
1678 if ($template_warning){
1680 $kiriwrite_presmodule->addtext($template_warning);
1681 $kiriwrite_presmodule->addlinebreak();
1685 $kiriwrite_presmodule->addselectbox("pagetemplate");
1687 # Process the list of templates, select one if the
1688 # template filename for the page matches, else give
1689 # an option for the user to keep the current template
1692 $template_count = 0;
1694 foreach $template_file (keys %template_list){
1696 if ($template_list{$template_count}{Selected}){
1698 $kiriwrite_presmodule->addoption($template_list{$template_count}{Name} . " (" . $template_list{$template_count}{Filename} . ")", { Value => $template_list{$template_count}{Filename}, Selected => 1 });
1702 $kiriwrite_presmodule->addoption($template_list{$template_count}{Name} . " (" . $template_list{$template_count}{Filename} . ")", { Value => $template_list{$template_count}{Filename} });
1710 if ($data_template eq "!none"){
1712 $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
1713 $template_found = 1;
1717 $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none" });
1721 if ($template_found eq 0 && $data_template ne "!none"){
1723 # The template with the filename given was not found.
1725 $kiriwrite_presmodule->addoption(kiriwrite_language($kiriwrite_lang->{pages}->{keeptemplatefilename}, $data_template), { Value => $data_template, Selected => 1, Style => "warningoption" });
1729 # Disconnect from the template database.
1731 $kiriwrite_dbmodule->disconnecttemplate();
1733 # Disconnect from the database server.
1735 $kiriwrite_dbmodule->disconnect();
1737 $kiriwrite_presmodule->endselectbox();
1739 $kiriwrite_presmodule->endcell();
1740 $kiriwrite_presmodule->endrow();
1742 $kiriwrite_presmodule->startrow();
1743 $kiriwrite_presmodule->addcell("tablecell1");
1744 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagefilename});
1745 $kiriwrite_presmodule->endcell();
1746 $kiriwrite_presmodule->addcell("tablecell2");
1747 $kiriwrite_presmodule->addinputbox("pagefilename", { Size => 64, MaxLength => 256, Value => $data_filename });
1748 $kiriwrite_presmodule->endcell();
1749 $kiriwrite_presmodule->endrow();
1751 $kiriwrite_presmodule->startrow();
1752 $kiriwrite_presmodule->addcell("tablecell1");
1753 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagecontent});
1754 $kiriwrite_presmodule->endcell();
1755 $kiriwrite_presmodule->addcell("tablecell2");
1756 $kiriwrite_presmodule->addtextbox("pagecontent", { Columns => 50, Rows => 10, Value => $data_content });
1757 $kiriwrite_presmodule->addlinebreak();
1758 $kiriwrite_presmodule->addlinebreak();
1759 $kiriwrite_presmodule->startbox("datalist");
1760 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
1761 $kiriwrite_presmodule->addlinebreak();
1762 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
1763 $kiriwrite_presmodule->addlinebreak();
1764 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
1765 $kiriwrite_presmodule->addlinebreak();
1766 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
1767 $kiriwrite_presmodule->addlinebreak();
1768 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
1769 $kiriwrite_presmodule->addlinebreak();
1770 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
1771 $kiriwrite_presmodule->addlinebreak();
1772 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
1773 $kiriwrite_presmodule->addlinebreak();
1774 $kiriwrite_presmodule->endbox();
1775 $kiriwrite_presmodule->endcell();
1776 $kiriwrite_presmodule->endrow();
1778 $kiriwrite_presmodule->startrow();
1779 $kiriwrite_presmodule->addcell("tablecell1");
1780 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
1781 $kiriwrite_presmodule->endcell();
1782 $kiriwrite_presmodule->addcell("tablecell2");
1784 # Check if the page settings value is set to a
1785 # certain number and select that option based
1786 # on the number else set the value to 0.
1788 if ($data_settings eq 1){
1789 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", Selected => 1, LineBreak => 1});
1791 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", LineBreak => 1});
1794 if ($data_settings eq 2){
1795 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", Selected => 1, LineBreak => 1});
1797 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", LineBreak => 1});
1800 if ($data_settings eq 3){
1801 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", Selected => 1, LineBreak => 1});
1803 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", LineBreak => 1});
1806 if ($data_settings eq 0 || ($data_settings ne 1 && $data_settings ne 2 && $data_settings ne 3)){
1807 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", Selected => 1, LineBreak => 1});
1809 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", LineBreak => 1});
1812 $kiriwrite_presmodule->endcell();
1813 $kiriwrite_presmodule->endrow();
1814 $kiriwrite_presmodule->endtable();
1816 $kiriwrite_presmodule->addlinebreak();
1817 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{editpagebutton});
1818 $kiriwrite_presmodule->addtext(" | ");
1819 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
1820 $kiriwrite_presmodule->addtext(" | ");
1821 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) } );
1823 $kiriwrite_presmodule->endform();
1825 return $kiriwrite_presmodule->grab();
1829 # The confirm value is a value other than '0' and '1' so
1832 kiriwrite_error("invalidvalue");
1838 sub kiriwrite_page_multidelete{
1839 #################################################################################
1840 # kiriwrite_page_multidelete: Delete mulitple pages from the database. #
1844 # kiriwrite_page_multidelete(database, confirm, filelist); #
1846 # database Specifies the database to delete multiple pages from. #
1847 # confirm Confirms the action to delete the selected pages from the #
1849 # filelist The list of files to delete from the selected database. #
1850 #################################################################################
1852 # Get the information passed to the subroutine.
1854 my ($database, $confirm, @filelist) = @_;
1856 # Check if the database name is blank and return an error if
1861 # The database name is blank so return an error.
1863 kiriwrite_error("databasenameblank");
1867 # Check if the file list array has any values and return
1868 # an error if it doesn't.
1872 # The page list really is blank so return
1875 kiriwrite_error("nopagesselected");
1878 # Check if the database filename is valid and return an error if
1881 my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
1883 if ($pagedatabase_filename_check eq 1){
1885 # The database filename is blank, so return an error.
1887 kiriwrite_error("blankdatabasepageadd");
1889 } elsif ($pagedatabase_filename_check eq 2){
1891 # The database filename is invalid, so return an error.
1893 kiriwrite_error("databasefilenameinvalid");
1897 # Check the length the database name and return an error if it's
1900 my $pagedatabase_length_check = kiriwrite_variablecheck($database, "maxlength", 32, 1);
1902 if ($pagedatabase_length_check eq 1){
1904 # The database name is too long, so return an error.
1906 kiriwrite_error("databasefilenametoolong");
1910 # Check if the confirm value is blank and if it is, then
1915 # The confirm value is blank so set the confirm value
1924 # The action to delete multiple pages from the database has
1927 # Connect to the database server.
1929 $kiriwrite_dbmodule->connect();
1931 # Check if any errors occured while connecting to the database server.
1933 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1935 # A database connection error has occured so return
1938 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1942 # Select the database.
1944 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1946 # Check if any errors occured while selecting the database.
1948 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1950 # The database does not exist, so return an error.
1952 kiriwrite_error("databasemissingfile");
1954 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1956 # The database has invalid permissions set, so return
1959 kiriwrite_error("databaseinvalidpermissions");
1963 # Check if the database has read and write permissions.
1965 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
1967 if ($database_permissions eq 1){
1969 # The database permissions are invalid so return an error.
1971 kiriwrite_error("databaseinvalidpermissions");
1975 # Get information about the database.
1977 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1979 # Check if any errors had occured while getting the database
1982 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1984 # A database error has occured so return an error and
1985 # also the extended error information.
1987 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1991 my $database_name = $database_info{"DatabaseName"};
1993 # Define some variables for later.
1997 my $filelist_filename;
2004 tie (%deleted_list, 'Tie::IxHash');
2006 my $deleted_list = "";
2008 foreach $filelist_filename (@filelist){
2010 # Get the page information.
2012 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2014 # Check if any errors occured.
2016 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2018 # A database error has occured so return an error and
2019 # also the extended error information.
2021 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2023 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2025 # The page does not exist, so process the next page.
2031 # Add the page to the list of deleted pages.
2033 $deleted_list{$page_count}{Filename} = $page_info{"PageFilename"};
2034 $deleted_list{$page_count}{Name} = $page_info{"PageName"};
2038 $kiriwrite_dbmodule->deletepage({ PageFilename => $filelist_filename });
2040 # Check if any errors occured while deleting the page from the database.
2042 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2044 # A database error has occured so return an error and
2045 # also the extended error information.
2047 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2049 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2051 # The page does not exist, so process the next page.
2062 # Disconnect from the database server.
2064 $kiriwrite_dbmodule->disconnect();
2066 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{selectedpagesdeleted}, { Style => "pageheader" });
2067 $kiriwrite_presmodule->addlinebreak();
2068 $kiriwrite_presmodule->addlinebreak();
2069 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{selectedpagesdeletedmessage}, $database_name));
2070 $kiriwrite_presmodule->addlinebreak();
2071 $kiriwrite_presmodule->addlinebreak();
2072 $kiriwrite_presmodule->startbox("datalist");
2074 foreach $page (keys %deleted_list){
2076 if (!$deleted_list{$page}{Name}){
2077 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2078 $kiriwrite_presmodule->addtext(" (" . $deleted_list{$page}{Filename} . ")");
2081 $kiriwrite_presmodule->addtext($deleted_list{$page}{Name} . " (" . $deleted_list{$page}{Filename} . ")");
2084 $kiriwrite_presmodule->addlinebreak();
2087 $kiriwrite_presmodule->endbox();
2088 $kiriwrite_presmodule->addlinebreak();
2089 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
2090 $kiriwrite_presmodule->endform();
2092 return $kiriwrite_presmodule->grab();
2094 } elsif ($confirm eq 0){
2096 # The action to delete multiple pages from the database has
2097 # not been confirmed, so write a form asking the user to confirm
2098 # the deletion of those pages.
2100 # Connect to the database server.
2102 $kiriwrite_dbmodule->connect();
2104 # Check if any errors occured while connecting to the database server.
2106 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2108 # A database connection error has occured so return
2111 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2115 # Select the database.
2117 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2119 # Check if any errors occured while selecting the database.
2121 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2123 # The database does not exist, so return an error.
2125 kiriwrite_error("databasemissingfile");
2127 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2129 # The database has invalid permissions set, so return
2132 kiriwrite_error("databaseinvalidpermissions");
2136 # Check if the database has read and write permissions.
2138 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2140 if ($database_permissions eq 1){
2142 # The database permissions are invalid so return an error.
2144 kiriwrite_error("databaseinvalidpermissions");
2148 # Get information about the database.
2150 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2152 # Check if any errors had occured while getting the database
2155 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2157 # A database error has occured so return an error and
2158 # also the extended error information.
2160 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2164 my $database_name = $database_info{"DatabaseName"};
2166 # Define some variables for later.
2172 my $filelist_filename;
2173 my $filelist_filename_sql;
2176 tie(%delete_list, 'Tie::IxHash');
2178 # Process each filename given.
2180 foreach $filelist_filename (@filelist){
2182 # Get the page information.
2184 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2186 # Check if any errors occured.
2188 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2190 # A database error has occured so return an error and
2191 # also the extended error information.
2193 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2195 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2197 # The page does not exist, so process the next page.
2203 # Add the page file name and name to the list
2204 # of pages to delete.
2206 $delete_list{$pageseek}{Filename} = $page_info{"PageFilename"};
2207 $delete_list{$pageseek}{Name} = $page_info{"PageName"};
2209 # Increment the page seek counter and reset the
2216 # Disconnect from the database server.
2218 $kiriwrite_dbmodule->disconnect();
2220 # Check if any files were selected and return
2221 # an error if there wasn't.
2223 if ($pageseek eq 0){
2225 # No pages were selected so return an error.
2227 kiriwrite_error("nopagesselected");
2231 # Write the form for displaying pages.
2233 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{deletemultiplepages}, { Style => "pageheader" });
2234 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
2235 $kiriwrite_presmodule->addhiddendata("mode", "page");
2236 $kiriwrite_presmodule->addhiddendata("action", "multidelete");
2237 $kiriwrite_presmodule->addhiddendata("database", $database);
2238 $kiriwrite_presmodule->addhiddendata("confirm", "1");
2239 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
2243 foreach $page (keys %delete_list){
2245 $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
2246 $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $delete_list{$page}{Filename});
2252 $kiriwrite_presmodule->addlinebreak();
2253 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletemultiplemessage}, $database_name));
2254 $kiriwrite_presmodule->addlinebreak();
2255 $kiriwrite_presmodule->addlinebreak();
2256 $kiriwrite_presmodule->startbox("datalist");
2258 foreach $page (keys %delete_list){
2260 if (!$delete_list{$page}{Name}){
2261 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2262 $kiriwrite_presmodule->addtext(" (" . $delete_list{$page}{Filename} . ")");
2264 $kiriwrite_presmodule->addtext($delete_list{$page}{Name} . " (" . $delete_list{$page}{Filename} . ")");
2266 $kiriwrite_presmodule->addlinebreak();
2270 $kiriwrite_presmodule->endbox();
2271 $kiriwrite_presmodule->addlinebreak();
2272 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{deletepagesbutton});
2273 $kiriwrite_presmodule->addtext(" | ");
2274 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{deletepagesreturnlink}, $database_name)});
2275 $kiriwrite_presmodule->endform();
2277 return $kiriwrite_presmodule->grab();
2281 # A confirm value other than 0 or 1 is given, so
2284 kiriwrite_error("invaildvalue");
2290 sub kiriwrite_page_multimove{
2291 #################################################################################
2292 # kiriwrite_page_multimove: Move several pages from one database to another #
2297 # kiriwrite_page_multimove(database, newdatabase, confirm, filelist); #
2299 # database Specifies the database to move the selected pages from. #
2300 # newdatabase Specifies the database to move the selected pages to. #
2301 # confirm Confirms the action to move the pages from one database to #
2303 # filelist Specifies the list of pages to move. #
2304 #################################################################################
2306 # Get the values that were passed to the subroutine.
2308 my ($database, $newdatabase, $confirm, @filelist) = @_;
2310 # Check if the database filename is valid and return
2311 # an error if it isn't.
2313 my $newpagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
2315 if ($newpagedatabase_filename_check eq 1){
2317 # The database filename is blank, so return an error.
2319 kiriwrite_error("blankdatabasepageadd");
2321 } elsif ($newpagedatabase_filename_check eq 2){
2323 # The database filename is invalid, so return an error.
2325 kiriwrite_error("databasefilenameinvalid");
2329 # Check if the file list is blank and return an error
2334 # The file list really is blank so return
2337 kiriwrite_error("nopagesselected");
2341 # Check if the confirm value is blank and if it is then
2342 # set the confirm value to 0.
2352 # The action to move several pages from one database
2353 # to another has been confirmed.
2355 # Check if the database that the pages are moving from
2356 # is the same as the database the pages are moving to.
2357 # Return an error if it is.
2359 if ($database eq $newdatabase){
2361 # The database that the pages are moving from
2362 # and the database the pages are moving to
2363 # is the same, so return an error.
2365 kiriwrite_error("databasemovesame");
2369 # Check if the new database filename is valid and return an error if
2372 my $newpagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
2374 if ($newpagedatabase_filename_check eq 1){
2376 # The database filename is blank, so return an error.
2378 kiriwrite_error("blankdatabasepageadd");
2380 } elsif ($newpagedatabase_filename_check eq 2){
2382 # The database filename is invalid, so return an error.
2384 kiriwrite_error("databasefilenameinvalid");
2388 # Connect to the database server.
2390 $kiriwrite_dbmodule->connect();
2392 # Check if any errors occured while connecting to the database server.
2394 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2396 # A database connection error has occured so return
2399 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2403 # Select the database the pages are going to be moved from.
2405 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2407 # Check if any errors had occured while selecting the database.
2409 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2411 # The database does not exist, so return an error.
2413 kiriwrite_error("oldmovedatabasedoesnotexist");
2415 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2417 # The database has invalid permissions set, so return
2420 kiriwrite_error("oldmovedatabasefileinvalidpermissions");
2424 # Check if the database has read and write permissions.
2426 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2428 if ($database_permissions eq 1){
2430 # The database permissions are invalid so return an error.
2432 kiriwrite_error("databaseinvalidpermissions");
2436 # Select the database the pages are going to be moved to.
2438 $kiriwrite_dbmodule->selectseconddb({ DatabaseName => $newdatabase });
2440 # Check if any errors had occured while selecting the database.
2442 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2444 # The database does not exist, so return an error.
2446 kiriwrite_error("newmovedatabasedoesnotexist");
2448 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2450 # The database has invalid permissions set, so return
2453 kiriwrite_error("newmovedatabasefileinvalidpermissions");
2457 # Check if the database has read and write permissions.
2459 $database_permissions = $kiriwrite_dbmodule->dbpermissions($newdatabase, 1, 1);
2461 if ($database_permissions eq 1){
2463 # The database permissions are invalid so return an error.
2465 kiriwrite_error("databaseinvalidpermissions");
2469 # Define some values for later.
2477 my $olddatabase_name;
2478 my $newdatabase_name;
2485 my $warning_count = 0;
2487 tie(%moved_list, 'Tie::IxHash');
2488 tie(%warning_list, 'Tie::IxHash');
2490 # Get information about the database that the selected pages are moving from.
2492 my %olddatabase_info = $kiriwrite_dbmodule->getdatabaseinfo();
2494 # Check if any errors had occured while getting the database
2497 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2499 # A database error has occured so return an error and
2500 # also the extended error information.
2502 kiriwrite_error("oldmovedatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
2506 $olddatabase_name = $olddatabase_info{"DatabaseName"};
2508 # Get information about the database that the selected pages are moving to.
2510 my %newdatabase_info = $kiriwrite_dbmodule->getseconddatabaseinfo();
2512 # Check if any errors had occured while getting the database
2515 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2517 # A database error has occured so return an error and
2518 # also the extended error information.
2520 kiriwrite_error("newmovedatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
2524 $newdatabase_name = $newdatabase_info{"DatabaseName"};
2526 # Get each file in the old database, get the page values,
2527 # put them into the new database and delete the pages
2528 # from the old database.
2530 foreach $filename (@filelist){
2532 # Get the page information.
2534 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
2536 # Check if any errors occured.
2538 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2540 # A database error has occured so write a warning message and
2541 # also the extended error information.
2543 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2547 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2549 # The page does not exist, so process the next page.
2551 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{pagedoesnotexist}, $filename);
2557 # Move the selected page.
2559 $kiriwrite_dbmodule->movepage({ PageFilename => $filename });
2561 # Check if any errors occured while moving the page.
2563 if ($kiriwrite_dbmodule->geterror eq "OldDatabaseError"){
2565 # A database error has occured while moving the pages from
2566 # the old database, so write a warning message.
2568 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovefrompageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2572 } elsif ($kiriwrite_dbmodule->geterror eq "NewDatabaseError"){
2574 # A database error has occured while moving the pages to
2575 # the new database, so write a warning message.
2577 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovetopageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2581 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2583 # The page with the filename given in the database that
2584 # the page is to be moved from doesn't exist so write
2585 # a warning message.
2587 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovefrompagenotexist}, $filename);
2591 } elsif ($kiriwrite_dbmodule->geterror eq "PageAlreadyExists"){
2593 # The page with the filename given in the database that
2594 # the page is to be moved to already exists so write a
2597 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovetopageexists}, $filename);
2603 $moved_list{$move_count}{Filename} = $page_info{"PageFilename"};
2604 $moved_list{$move_count}{Name} = $page_info{"PageName"};
2610 # Disconnect from the database server.
2612 $kiriwrite_dbmodule->disconnect();
2614 # Write out a message saying that the pages were moved (if any)
2615 # to the new database (and any warnings given).
2617 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepages}, { Style => "pageheader" });
2618 $kiriwrite_presmodule->addlinebreak();
2619 $kiriwrite_presmodule->addlinebreak();
2623 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{movedpagesmessage}, $olddatabase_name, $newdatabase_name));
2624 $kiriwrite_presmodule->addlinebreak();
2625 $kiriwrite_presmodule->addlinebreak();
2627 $kiriwrite_presmodule->startbox("datalist");
2628 foreach $page (keys %moved_list){
2629 if (!$moved_list{$page}{Name}){
2630 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2631 $kiriwrite_presmodule->addtext(" (" . $moved_list{$page}{Filename} . ")");
2633 $kiriwrite_presmodule->addtext($moved_list{$page}{Name} . " (" . $moved_list{$page}{Filename} . ")");
2636 $kiriwrite_presmodule->addlinebreak();
2638 $kiriwrite_presmodule->endbox();
2642 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagesmoved}, $olddatabase_name, $newdatabase_name));
2643 $kiriwrite_presmodule->addlinebreak();
2644 $kiriwrite_presmodule->addlinebreak();
2650 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{errormessages});
2651 $kiriwrite_presmodule->addlinebreak();
2652 $kiriwrite_presmodule->addlinebreak();
2653 $kiriwrite_presmodule->startbox("datalist");
2654 foreach $warning (keys %warning_list){
2655 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
2656 $kiriwrite_presmodule->addlinebreak();
2658 $kiriwrite_presmodule->endbox();
2662 $kiriwrite_presmodule->addlinebreak();
2663 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $olddatabase_name)});
2664 $kiriwrite_presmodule->addtext(" | ");
2665 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $newdatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{viewpagelist}, $newdatabase_name)});
2667 return $kiriwrite_presmodule->grab();
2669 } elsif ($confirm eq 0) {
2671 # The action to move several pages from one database
2672 # to another has not been confirmed so write a form.
2674 # Connect to the database server.
2676 $kiriwrite_dbmodule->connect();
2678 # Check if any errors occured while connecting to the database server.
2680 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2682 # A database connection error has occured so return
2685 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2689 # Select the database.
2691 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2693 # Check if any errors occured while selecting the database.
2695 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2697 # The database does not exist, so return an error.
2699 kiriwrite_error("databasemissingfile");
2701 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2703 # The database has invalid permissions set, so return
2706 kiriwrite_error("databaseinvalidpermissions");
2710 # Check if the database has read and write permissions.
2712 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2714 if ($database_permissions eq 1){
2716 # The database permissions are invalid so return an error.
2718 kiriwrite_error("databaseinvalidpermissions");
2722 # Get information about the database.
2724 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2726 # Check if any errors had occured while getting the database
2729 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2731 # A database error has occured so return an error and
2732 # also the extended error information.
2734 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2738 my $database_name = $database_info{"DatabaseName"};
2740 # Define some values for later.
2749 my $filelist_filename;
2754 # Process each filename given.
2756 tie (%move_list, 'Tie::IxHash');
2757 tie (%db_list, 'Tie::IxHash');
2759 foreach $filelist_filename (@filelist){
2761 # Get the page information.
2763 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2765 # Check if any errors occured.
2767 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2769 # A database error has occured so return an error and
2770 # also the extended error information.
2772 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2774 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2776 # The page does not exist, so process the next page.
2782 # Add the page name and file name to the list of
2785 $move_list{$pageseek}{Filename} = $page_info{"PageFilename"};
2786 $move_list{$pageseek}{Name} = $page_info{"PageName"};
2788 # Increment the page seek counter and reset the
2795 # Check if any pages exust and return an error if
2798 if ($pageseek eq 0){
2800 # None of the selected pages exist, so return
2803 kiriwrite_error("nopagesselected");
2807 # Get the list of databases.
2809 my @database_list = $kiriwrite_dbmodule->getdblist();
2811 # Check if any errors occured while trying to get the list of databases.
2813 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
2815 # The database directory is missing so return an error.
2817 kiriwrite_error("datadirectorymissing");
2819 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
2821 # The database directory has invalid permissions set so return
2824 kiriwrite_error("datadirectoryinvalidpermissions");
2828 # Get the information about each database (the short name and friendly name).
2830 foreach $data_file (@database_list){
2832 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
2834 # Check if any errors occured while selecting the database.
2836 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2838 # The database does not exist, so process the next
2843 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2845 # The database has invalid permissions set, so process
2846 # the next database.
2852 # Get the database information.
2854 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2856 # Check if any errors had occured while getting the database
2859 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2861 # A database error has occured so process the next
2868 # Check if the database name is undefined and if it is
2869 # then set it blank.
2871 if (!$database_name){
2872 $database_name = "";
2875 # Append the database to the list of databases available.
2877 $db_list{$dbseek}{Filename} = $data_file;
2878 $db_list{$dbseek}{Name} = $database_info{"DatabaseName"};
2884 # Disconnect from the database server.
2886 $kiriwrite_dbmodule->disconnect();
2888 # Write out the form.
2890 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepages}, { Style => "pageheader" });
2891 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
2892 $kiriwrite_presmodule->addhiddendata("mode", "page");
2893 $kiriwrite_presmodule->addhiddendata("action", "multimove");
2894 $kiriwrite_presmodule->addhiddendata("database", $database);
2895 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
2896 $kiriwrite_presmodule->addhiddendata("confirm", "1");
2898 # Write the page form data.
2902 foreach $page (keys %move_list){
2903 $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
2904 $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $move_list{$page}{Filename});
2908 $kiriwrite_presmodule->addlinebreak();
2909 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{movepagesmessage}, $database_name));
2910 $kiriwrite_presmodule->addlinebreak();
2911 $kiriwrite_presmodule->addlinebreak();
2912 $kiriwrite_presmodule->startbox("datalist");
2914 foreach $page (keys %move_list){
2915 if (!$move_list{$page}{Name}){
2916 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2917 $kiriwrite_presmodule->addtext(" (" . $move_list{$page}{Filename} . ")");
2919 $kiriwrite_presmodule->addtext($move_list{$page}{Name} . " (" . $move_list{$page}{Filename} . ")");
2921 $kiriwrite_presmodule->addlinebreak();
2924 $kiriwrite_presmodule->endbox();
2925 $kiriwrite_presmodule->addlinebreak();
2926 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepagesto});
2928 $kiriwrite_presmodule->addselectbox("newdatabase");
2930 foreach $db_name (keys %db_list){
2931 $kiriwrite_presmodule->addoption($db_list{$db_name}{Name} . " (" . $db_list{$db_name}{Filename} . ")", { Value => $db_list{$db_name}{Filename}});
2934 $kiriwrite_presmodule->endselectbox();
2935 $kiriwrite_presmodule->addlinebreak();
2936 $kiriwrite_presmodule->addlinebreak();
2937 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{movepagesbutton});
2938 $kiriwrite_presmodule->addtext(" | ");
2939 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
2940 $kiriwrite_presmodule->endform();
2942 return $kiriwrite_presmodule->grab();
2946 # The confirm value is other than 0 or 1, so return
2949 kiriwrite_error("invalidvariable");
2957 sub kiriwrite_page_multicopy{
2958 #################################################################################
2959 # kiriwrite_page_multicopy: Copy several pages from one database to another #
2964 # kiriwrite_page_multicopy(database, newdatabase, confirm, filelist); #
2966 # database Specifies the database to copy the selected pages from. #
2967 # newdatabase Specifies the database to copy the selected page to. #
2968 # confirm Confirms the action to copy the pages. #
2969 # filelist A list of filenames to copy in an array. #
2970 #################################################################################
2972 # Get the values that were passed to the subroutine.
2974 my ($database, $newdatabase, $confirm, @filelist) = @_;
2976 # Check if the file list is blank and return an error
2981 # The file list really is blank so return
2984 kiriwrite_error("nopagesselected");
2988 # Check if the confirm value is blank and if it is then
2989 # set the confirm value to 0.
2997 # Check if the database filename is valid and return an error if
3000 my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
3002 if ($pagedatabase_filename_check eq 1){
3004 # The database filename is blank, so return an error.
3006 kiriwrite_error("blankdatabasepageadd");
3008 } elsif ($pagedatabase_filename_check eq 2){
3010 # The database filename is invalid, so return an error.
3012 kiriwrite_error("databasefilenameinvalid");
3018 # The action to copy several pages from one database
3019 # to another has been confirmed.
3021 # Check if the database that the pages are copied from
3022 # is the same as the database the pages are copied to.
3023 # Return an error if it is.
3025 if ($database eq $newdatabase){
3027 # The database that the pages are being copied from
3028 # and the database that the pages are copied to
3029 # is the same, so return an error.
3031 kiriwrite_error("databasecopysame");
3035 # Check if the new database filename is valid and return an error if
3038 my $pagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
3040 if ($pagedatabase_filename_check eq 1){
3042 # The database filename is blank, so return an error.
3044 kiriwrite_error("blankdatabasepageadd");
3046 } elsif ($pagedatabase_filename_check eq 2){
3048 # The database filename is invalid, so return an error.
3050 kiriwrite_error("databasefilenameinvalid");
3054 # Connect to the database server.
3056 $kiriwrite_dbmodule->connect();
3058 # Check if any errors occured while connecting to the database server.
3060 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3062 # A database connection error has occured so return
3065 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3069 # Select the database the pages are going to be copied from.
3071 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3073 # Check if any errors had occured while selecting the database.
3075 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3077 # The database does not exist, so return an error.
3079 kiriwrite_error("oldcopydatabasedoesnotexist");
3081 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3083 # The database has invalid permissions set, so return
3086 kiriwrite_error("oldcopydatabasefileinvalidpermissions");
3090 # Select the database the pages are going to be copied to.
3092 $kiriwrite_dbmodule->selectseconddb({ DatabaseName => $newdatabase });
3094 # Check if any errors had occured while selecting the database.
3096 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3098 # The database does not exist, so return an error.
3100 kiriwrite_error("newcopydatabasedoesnotexist");
3102 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3104 # The database has invalid permissions set, so return
3107 kiriwrite_error("newcopydatabasefileinvalidpermissions");
3111 # Check if the database has read and write permissions.
3113 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($newdatabase, 1, 1);
3115 if ($database_permissions eq 1){
3117 # The database permissions are invalid so return an error.
3119 kiriwrite_error("databaseinvalidpermissions");
3123 # Define some values for later.
3129 my @olddatabase_info;
3130 my @olddatabase_page;
3131 my @newdatabase_info;
3132 my @newdatabase_page;
3138 my $olddatabase_database_handle;
3139 my $olddatabase_string_handle;
3140 my $olddatabase_name;
3141 my $newdatabase_database_handle;
3142 my $newdatabase_string_handle;
3143 my $newdatabase_name;
3148 my $page_filename_sql;
3151 my $page_description;
3152 my $page_description_sql;
3154 my $page_section_sql;
3156 my $page_template_sql;
3160 my $page_settings_sql;
3161 my $page_lastmodified;
3162 my $page_lastmodified_sql;
3165 my $warning_count = 0;
3169 tie(%copied_list, 'Tie::IxHash');
3170 tie(%warning_list, 'Tie::IxHash');
3172 # Get information about the database that the selected pages are moving from.
3174 my %olddatabase_info = $kiriwrite_dbmodule->getdatabaseinfo();
3176 # Check if any errors had occured while getting the database
3179 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3181 # A database error has occured so return an error and
3182 # also the extended error information.
3184 kiriwrite_error("oldcopydatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
3188 $olddatabase_name = $olddatabase_info{"DatabaseName"};
3190 # Get information about the database that the selected pages are moving to.
3192 my %newdatabase_info = $kiriwrite_dbmodule->getseconddatabaseinfo();
3194 # Check if any errors had occured while getting the database
3197 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3199 # A database error has occured so return an error and
3200 # also the extended error information.
3202 kiriwrite_error("newcopydatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
3206 $newdatabase_name = $newdatabase_info{"DatabaseName"};
3208 # Check if the database filename is valid and return an error if
3211 my $newpagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
3213 if ($newpagedatabase_filename_check eq 1){
3215 # The database filename is blank, so return an error.
3217 kiriwrite_error("blankdatabasepageadd");
3219 } elsif ($newpagedatabase_filename_check eq 2){
3221 # The database filename is invalid, so return an error.
3223 kiriwrite_error("databasefilenameinvalid");
3227 foreach $filename (@filelist){
3229 # Get the page information.
3231 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3233 # Check if any errors occured.
3235 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3237 # A database error has occured so return an error and
3238 # also the extended error information.
3240 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3244 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3246 # The page does not exist, so process the next page.
3248 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfrompageerror}, $filename);
3254 $kiriwrite_dbmodule->copypage({ PageFilename => $filename });
3256 # Check if any errors occured while copying the page.
3258 if ($kiriwrite_dbmodule->geterror eq "OldDatabaseError"){
3260 # A database error has occured while copying the pages from
3261 # the old database, so write a warning message.
3263 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfromdatabaseerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3267 } elsif ($kiriwrite_dbmodule->geterror eq "NewDatabaseError"){
3269 # A database error has occured while copying the pages to
3270 # the new database, so write a warning message.
3272 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopytodatabaseerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3276 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3278 # The page with the filename given in the database that
3279 # the page is to be copied from doesn't exist so write
3280 # a warning message.
3282 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfrompagenotexist}, $filename);
3286 } elsif ($kiriwrite_dbmodule->geterror eq "PageAlreadyExists"){
3288 # The page with the filename given in the database that
3289 # the page is to be copied to already exists so write a
3292 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopytopageexists}, $filename);
3298 # Append the copied page (filename and name) to the list of
3301 $copied_list{$page_seek}{Filename} = $filename;
3302 $copied_list{$page_seek}{Name} = $page_info{"PageName"};
3307 # Disconnect from the database server.
3309 $kiriwrite_dbmodule->disconnect();
3311 # Write out a message saying that the pages were moved (if any)
3312 # to the new database (and any warnings given).
3314 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypages}, { Style => "pageheader" });
3315 $kiriwrite_presmodule->addlinebreak();
3316 $kiriwrite_presmodule->addlinebreak();
3320 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{copypagesresultmessage}, $olddatabase_name, $newdatabase_name));
3321 $kiriwrite_presmodule->addlinebreak();
3322 $kiriwrite_presmodule->addlinebreak();
3323 $kiriwrite_presmodule->startbox("datalist");
3324 foreach $page (keys %copied_list){
3325 if (!$copied_list{$page}{Name}){
3326 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
3327 $kiriwrite_presmodule->addtext(" (" . $copied_list{$page}{Filename} . ")");
3329 $kiriwrite_presmodule->addtext($copied_list{$page}{Name} . " (" . $copied_list{$page}{Filename} . ")");
3331 $kiriwrite_presmodule->addlinebreak();
3333 $kiriwrite_presmodule->endbox();
3337 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagescopied}, $olddatabase_name, $newdatabase_name));
3343 $kiriwrite_presmodule->addlinebreak();
3344 $kiriwrite_presmodule->addlinebreak();
3345 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypageswarnings});
3346 $kiriwrite_presmodule->addlinebreak();
3347 $kiriwrite_presmodule->addlinebreak();
3348 $kiriwrite_presmodule->startbox("datalist");
3349 foreach $warning (keys %warning_list){
3350 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
3351 $kiriwrite_presmodule->addlinebreak();
3353 $kiriwrite_presmodule->endbox();
3357 $kiriwrite_presmodule->addlinebreak();
3358 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $olddatabase_name)});
3359 $kiriwrite_presmodule->addtext(" | ");
3360 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $newdatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{viewpagelist}, $newdatabase_name)});
3361 $kiriwrite_presmodule->endform();
3363 return $kiriwrite_presmodule->grab();
3365 } elsif ($confirm eq 0) {
3367 # The action to copy several pages from one database
3368 # to another has not been confirmed so write a form.
3370 # Connect to the database server.
3372 $kiriwrite_dbmodule->connect();
3374 # Check if any errors occured while connecting to the database server.
3376 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3378 # A database connection error has occured so return
3381 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3385 # Select the database to copy the pages from.
3387 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3389 # Check if any errors occured while selecting the database.
3391 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3393 # The database does not exist, so return an error.
3395 kiriwrite_error("databasemissingfile");
3397 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3399 # The database has invalid permissions set, so return
3402 kiriwrite_error("databaseinvalidpermissions");
3406 # Get information about the database.
3408 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3410 # Check if any errors had occured while getting the database
3413 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3415 # A database error has occured so return an error and
3416 # also the extended error information.
3418 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3422 my $database_name = $database_info{"DatabaseName"};
3424 # Define some values for later.
3438 tie(%copy_list, 'Tie::IxHash');
3439 tie(%db_list, 'Tie::IxHash');
3441 # Process each filename given.
3443 foreach $filename (@filelist){
3445 # Get the page information.
3447 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3449 # Check if any errors occured.
3451 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3453 # A database error has occured so return an error and
3454 # also the extended error information.
3456 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3458 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3460 # The page does not exist, so process the next page.
3466 # Add the page name and file name to the list of
3469 $copy_list{$pageseek}{Filename} = $page_info{"PageFilename"};
3470 $copy_list{$pageseek}{Name} = $page_info{"PageName"};
3472 # Increment the page seek counter.
3478 # Check if any pages exust and return an error if
3481 if ($pageseek eq 0){
3483 # None of the selected pages exist, so return
3486 kiriwrite_error("nopagesselected");
3490 # Get the database filenames and names.
3492 my @database_list = $kiriwrite_dbmodule->getdblist();
3494 # Check if any errors occured while trying to get the list of databases.
3496 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
3498 # The database directory is missing so return an error.
3500 kiriwrite_error("datadirectorymissing");
3502 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
3504 # The database directory has invalid permissions set so return
3507 kiriwrite_error("datadirectoryinvalidpermissions");
3511 # Process each database to get the database name.
3513 foreach $data_file (@database_list){
3515 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
3517 # Check if any errors occured while selecting the database.
3519 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3521 # The database does not exist, so process the next
3526 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3528 # The database has invalid permissions set, so process
3529 # the next database.
3535 # Get the database information.
3537 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3539 # Check if any errors had occured while getting the database
3542 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3544 # A database error has occured so process the next
3551 # Check if the database name is undefined and if it is
3552 # then set it blank.
3554 if (!$database_name){
3555 $database_name = "";
3558 # Append the database filename and name to the list of databases
3559 # to move the pages to.
3561 $db_list{$dbseek}{Filename} = $data_file;
3562 $db_list{$dbseek}{Name} = $database_info{"DatabaseName"};
3568 # Disconnect from the database server.
3570 $kiriwrite_dbmodule->disconnect();
3572 # Write out the form.
3574 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypages}, { Style => "pageheader" });
3575 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
3576 $kiriwrite_presmodule->addhiddendata("mode", "page");
3577 $kiriwrite_presmodule->addhiddendata("action", "multicopy");
3578 $kiriwrite_presmodule->addhiddendata("database", $database);
3579 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
3580 $kiriwrite_presmodule->addhiddendata("confirm", 1);
3584 foreach $page (keys %copy_list){
3585 $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
3586 $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $copy_list{$page}{Filename});
3590 $kiriwrite_presmodule->addlinebreak();
3591 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{copypagesmessage}, $database_name));
3593 $kiriwrite_presmodule->addlinebreak();
3594 $kiriwrite_presmodule->addlinebreak();
3596 $kiriwrite_presmodule->startbox("datalist");
3598 foreach $page (keys %copy_list){
3599 if (!$copy_list{$page}{Name}){
3600 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
3601 $kiriwrite_presmodule->addtext(" (" . $copy_list{$page}{Filename} . ")");
3603 $kiriwrite_presmodule->addtext($copy_list{$page}{Name} . " (" . $copy_list{$page}{Filename} . ")");
3605 $kiriwrite_presmodule->addlinebreak();
3608 $kiriwrite_presmodule->endbox();
3610 $kiriwrite_presmodule->addlinebreak();
3612 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypagesto});
3613 $kiriwrite_presmodule->addselectbox("newdatabase");
3615 foreach $dbname (keys %db_list){
3616 $kiriwrite_presmodule->addoption($db_list{$dbname}{Name} . " (" . $db_list{$dbname}{Filename} . ")", { Value => $db_list{$dbname}{Filename}});
3619 $kiriwrite_presmodule->endselectbox();
3621 $kiriwrite_presmodule->addlinebreak();
3622 $kiriwrite_presmodule->addlinebreak();
3623 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{copypagesbutton});
3624 $kiriwrite_presmodule->addtext(" | ");
3625 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
3626 $kiriwrite_presmodule->endform();
3628 return $kiriwrite_presmodule->grab();
3632 # The confirm value is other than 0 or 1, so return
3635 kiriwrite_error("invalidvariable");
3641 sub kiriwrite_page_multiedit{
3642 #################################################################################
3643 # kiriwrite_page_multiedit: Edit several pages from a database. #
3647 # kiriwrite_page_multiedit(database, newsection, altersection, newtemplate, #
3648 # altertemplate, newsettings, altersettings #
3649 # confirm, filelist); #
3651 # database Specifies the database to edit the pages from. #
3652 # newsection Specifies the new section name to use on the selected pages. #
3653 # altersection Specifies if the section name should be altered. #
3654 # newtemplate Specifies the new template filename to use on the selected #
3656 # altertemplate Specifies if the template filename should be altered. #
3657 # newsettings Specifies the new settings to use on the selected pages. #
3658 # altersettings Specifies if the settings should be altered. #
3659 # confirm Confirms the action to edit the selected pages. #
3660 # filelist The list of file names to edit. #
3661 #################################################################################
3663 # Get the values that were passed to the subroutine.
3665 my ($database, $newsection, $altersection, $newtemplate, $altertemplate, $newsettings, $altersettings, $confirm, @filelist) = @_;
3667 # Check if the file list is blank and return an error
3672 # The file list really is blank so return
3675 kiriwrite_error("nopagesselected");
3679 # Check if certain values are undefined and define them if
3682 if (!$altersection){
3684 # The alter section value is blank, so set it to
3687 $altersection = "off";
3691 if (!$altertemplate){
3693 # The alter template value is blank, so set it to
3696 $altertemplate = "off";
3700 if (!$altersettings){
3702 # The alter settings value is blank, so set it to
3705 $altersettings = "off";
3709 # Check if the database filename is valid and return an error if
3712 my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
3714 if ($pagedatabase_filename_check eq 1){
3716 # The database filename is blank, so return an error.
3718 kiriwrite_error("blankdatabasepageadd");
3720 } elsif ($pagedatabase_filename_check eq 2){
3722 # The database filename is invalid, so return an error.
3724 kiriwrite_error("databasefilenameinvalid");
3728 # Check if the confirm value is blank and if it is then
3729 # set the confirm value to 0.
3739 # The action to edit the template has been confirmed so
3740 # edit the selected pages.
3742 # Check the values recieved at UTF8 compliant before
3745 kiriwrite_variablecheck($newsection, "utf8", 0, 0);
3746 kiriwrite_variablecheck($newtemplate, "utf8", 0, 0);
3747 kiriwrite_variablecheck($newsettings, "utf8", 0, 0);
3749 # Convert the values into proper UTF8 values.
3751 $newsection = kiriwrite_utf8convert($newsection);
3752 $newtemplate = kiriwrite_utf8convert($newtemplate);
3753 $newsettings = kiriwrite_utf8convert($newsettings);
3755 # Check the length of the variables.
3757 kiriwrite_variablecheck($altersection, "maxlength", 3, 0);
3758 kiriwrite_variablecheck($altertemplate, "maxlength", 3, 0);
3759 kiriwrite_variablecheck($altersettings, "maxlength", 3, 0);
3760 my $newsection_maxlength_check = kiriwrite_variablecheck($newsection, "maxlength", 256, 1);
3761 my $newtemplate_maxlength_check = kiriwrite_variablecheck($newtemplate, "maxlength", 256, 1);
3762 my $newtemplate_filename_check = kiriwrite_variablecheck($newtemplate, "filename", 0, 1);
3763 my $newsettings_maxlength_check = kiriwrite_variablecheck($newsettings, "maxlength", 1, 1);
3764 my $newsettings_settings_check = kiriwrite_variablecheck($newsettings, "pagesetting", 0, 1);
3766 # Check the values and return an error if needed.
3768 if ($newsection_maxlength_check eq 1 && $altersection eq "on"){
3770 # The new section name is too long, so return an
3773 kiriwrite_error("pagesectiontoolong");
3777 if ($newtemplate_maxlength_check eq 1 && $altertemplate eq "on"){
3779 # The new template name is too long, so return an
3782 kiriwrite_error("templatefilenametoolong");
3786 # Check if the template filename is set to !skip or !none
3787 # and skip this check if it is.
3789 if ($newtemplate eq "!skip" || $newtemplate eq "!none"){
3791 # Skip this check as the template filename is
3795 if ($newtemplate_filename_check eq 1 && $altertemplate eq "on" || $newtemplate_filename_check eq 2 && $altertemplate eq "on"){
3797 # The new template filename is invalid, so return
3800 kiriwrite_error("templatefilenameinvalid");
3805 if ($newsettings_maxlength_check eq 1 && $altertemplate eq "on"){
3807 # The new settings value is too long, so return
3810 kiriwrite_error("pagesettingstoolong");
3814 if ($newsettings_settings_check eq 1 && $altersettings eq "on"){
3816 # The new settings value is invalid, so return
3819 kiriwrite_error("pagesettingsinvalid");
3823 # Define some values for later.
3835 my $warning_count = 0;
3837 tie(%edited_list, 'Tie::IxHash');
3838 tie(%warning_list, 'Tie::IxHash');
3840 # Check if the template filename is !skip and
3841 # set the alter template value to off if it
3844 if ($newtemplate eq "!skip"){
3846 $altertemplate = "off";
3850 # Check if all values are not selected and return
3851 # an error if they are.
3853 if ($altersection ne "on" && $altertemplate ne "on" && $altersettings ne "on"){
3855 # All values are not selected so return
3858 kiriwrite_error("noeditvaluesselected");
3862 # Connect to the database server.
3864 $kiriwrite_dbmodule->connect();
3866 # Check if any errors occured while connecting to the database server.
3868 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3870 # A database connection error has occured so return
3873 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3877 # Select the database.
3879 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3881 # Check if any errors occured while selecting the database.
3883 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3885 # The database does not exist, so return an error.
3887 kiriwrite_error("databasemissingfile");
3889 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3891 # The database has invalid permissions set, so return
3894 kiriwrite_error("databaseinvalidpermissions");
3898 # Check if the database has read and write permissions.
3900 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
3902 if ($database_permissions eq 1){
3904 # The database permissions are invalid so return an error.
3906 kiriwrite_error("databaseinvalidpermissions");
3910 # Get information about the database.
3912 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3914 # Check if any errors had occured while getting the database
3917 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3919 # A database error has occured so return an error and
3920 # also the extended error information.
3922 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3926 my $database_name = $database_info{"DatabaseName"};
3928 # Edit the selected pages.
3930 foreach $filename (@filelist){
3932 # Get the page information.
3934 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3936 # Check if any errors occured.
3938 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3940 # A database error has occured so write a warning message.
3942 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3944 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3946 # The page does not exist, so write a warning message.
3948 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepagedoesnotexist}, $filename);
3954 # Check if the page section should be altered.
3956 if ($altersection eq "on"){
3958 # Change the section name.
3960 $page_info{"PageSection"} = $newsection;
3964 # Check if the page template should be altered.
3966 if ($altertemplate eq "on"){
3968 # Change the page template filename.
3970 $page_info{"PageTemplate"} = $newtemplate;
3974 # Check if the page settings should be altered.
3976 if ($altersettings eq "on"){
3978 # Change the page settings value.
3980 $page_info{"PageSettings"} = $newsettings;
3984 # Edit the selected page.
3986 $kiriwrite_dbmodule->editpage({ PageFilename => $page_info{"PageFilename"}, PageNewFilename => $page_info{"PageFilename"}, PageNewName => $page_info{"PageName"}, PageNewDescription => $page_info{"PageDescription"}, PageNewSection => $page_info{"PageSection"}, PageNewTemplate => $page_info{"PageTemplate"}, PageNewContent => $page_info{"PageContent"}, PageNewSettings => $page_info{"PageSettings"} });
3988 # Check if any errors occured while editing the page.
3990 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3992 # A database error has occured so write a warning message
3993 # with the extended error information.
3995 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3999 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4001 # The pages does not exist in the database.
4003 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepagedoesnotexist}, $filename);
4009 # The page has been edited so write a message saying that the page
4012 $edited_list{$pageedited}{Filename} = $page_info{"PageFilename"};
4013 $edited_list{$pageedited}{Name} = $page_info{"PageName"};
4015 # Increment the counter of edited pages.
4021 # Disconnect from the database server.
4023 $kiriwrite_dbmodule->disconnect();
4025 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multiedit}, { Style => "pageheader" });
4026 $kiriwrite_presmodule->addlinebreak();
4027 $kiriwrite_presmodule->addlinebreak();
4029 # Check if the counter of edited pages is 0 and if it is
4030 # then write a message saying that no pages were edited
4031 # else write a message listing all of the pages edited.
4033 if ($pageedited eq 0){
4035 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagesedited}, $database_name));
4039 # Write out the message saying that the selected pages
4042 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagesedited}, $database_name));
4043 $kiriwrite_presmodule->addlinebreak();
4044 $kiriwrite_presmodule->addlinebreak();
4045 $kiriwrite_presmodule->startbox("datalist");
4047 foreach $page (keys %edited_list){
4049 # Check if the page name is not blank.
4051 if (!$edited_list{$page}{Name}){
4053 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{pages}->{noname});
4054 $kiriwrite_presmodule->addtext(" (" . $edited_list{$page}{Filename} . ")");
4058 $kiriwrite_presmodule->addtext($edited_list{$page}{Name});
4059 $kiriwrite_presmodule->addtext(" (" . $edited_list{$page}{Filename} . ")");
4063 $kiriwrite_presmodule->addlinebreak();
4066 $kiriwrite_presmodule->endbox();
4070 # Check if any warnings have occured and write a message
4071 # if any warnings did occur.
4075 # One or several warnings have occured so
4078 $kiriwrite_presmodule->addlinebreak();
4079 $kiriwrite_presmodule->addlinebreak();
4080 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{editedpageswarnings});
4081 $kiriwrite_presmodule->addlinebreak();
4082 $kiriwrite_presmodule->addlinebreak();
4083 $kiriwrite_presmodule->startbox("datalist");
4084 foreach $warning (keys %warning_list) {
4085 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
4086 $kiriwrite_presmodule->addlinebreak();
4088 $kiriwrite_presmodule->endbox();
4092 # Write a link going back to the page list for
4093 # the selected database.
4095 $kiriwrite_presmodule->addlinebreak();
4096 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
4098 return $kiriwrite_presmodule->grab();
4100 } elsif ($confirm eq 0){
4102 # The action to edit the template has not been confirmed
4103 # so write a form out instead.
4105 # Connect to the database server.
4107 $kiriwrite_dbmodule->connect();
4109 # Check if any errors occured while connecting to the database server.
4111 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4113 # A database connection error has occured so return
4116 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4120 # Select the database.
4122 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
4124 # Check if any errors occured while selecting the database.
4126 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4128 # The database does not exist, so return an error.
4130 kiriwrite_error("databasemissingfile");
4132 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4134 # The database has invalid permissions set, so return
4137 kiriwrite_error("databaseinvalidpermissions");
4141 # Check if the database has read and write permissions.
4143 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
4145 if ($database_permissions eq 1){
4147 # The database permissions are invalid so return an error.
4149 kiriwrite_error("databaseinvalidpermissions");
4153 # Get information about the database.
4155 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4157 # Check if any errors had occured while getting the database
4160 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4162 # A database error has occured so return an error and
4163 # also the extended error information.
4165 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4169 my $database_name = $database_info{"DatabaseName"};
4171 # Define some variables for later.
4179 my $filelist_filename;
4186 my $template_filename;
4187 my $template_warning;
4188 my $templateseek = 0;
4190 tie(%edit_list, 'Tie::IxHash');
4191 tie(%template_list, 'Tie::IxHash');
4193 # Get the information about each page that is going
4196 foreach $filelist_filename (@filelist){
4198 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
4200 # Check if any errors occured.
4202 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4204 # A database error has occured so return an error and
4205 # also the extended error information.
4207 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4209 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4211 # The page does not exist, so process the next page.
4217 # Add the page name and file name to the list of
4220 $edit_list{$pageseek}{Filename} = $page_info{"PageFilename"};
4221 $edit_list{$pageseek}{Name} = $page_info{"PageName"};
4223 # Increment the page seek counter and reset the
4230 # Check if any pages were found in the database and return
4233 if ($pageseek eq 0){
4235 # No pages were found so return an error.
4237 kiriwrite_error("nopagesselected");
4241 # Connect to the template database.
4243 $kiriwrite_dbmodule->connecttemplate();
4245 # Check if any errors had occured.
4247 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
4249 # The template database does not exist so write a warning
4252 $template_warning = $kiriwrite_lang->{pages}->{templatedatabasenotexistmultieditkeep};
4254 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
4256 # The template database has invalid permissions set so
4259 $template_warning = $kiriwrite_lang->{pages}->{templatedatabasepermissionsinvalidmultieditkeep};
4263 if (!$template_warning){
4265 # Get the list of templates available.
4267 @templates_list = $kiriwrite_dbmodule->gettemplatelist();
4269 # Check if any errors had occured.
4271 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
4273 # A database error occured while getting the list
4274 # of templates so write a warning message with the
4275 # extended error information.
4277 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrormultieditkeep}, $kiriwrite_dbmodule->geterror(1));
4281 if (!$template_warning){
4283 foreach $template_filename (@templates_list){
4285 # Get the template data.
4287 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
4289 # Check if any error occured while getting the template information.
4291 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
4293 # A database error has occured, so write a warning message with
4294 # the extended error information.
4296 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrormultieditkeep}, $kiriwrite_dbmodule->geterror(1));
4298 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
4300 # The template does not exist, so process the next page.
4306 # Add the template to the list of templates.
4308 $template_list{$templateseek}{Filename} = $template_info{"TemplateFilename"};
4309 $template_list{$templateseek}{Name} = $template_info{"TemplateName"};
4319 # Disconnect from the template database.
4321 $kiriwrite_dbmodule->disconnecttemplate();
4323 # Disconnect from the database server.
4325 $kiriwrite_dbmodule->disconnect();
4327 # Write a form for editing the selected pages.
4329 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multiedit}, { Style => "pageheader" });
4330 $kiriwrite_presmodule->addlinebreak();
4331 $kiriwrite_presmodule->addlinebreak();
4332 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
4333 $kiriwrite_presmodule->addhiddendata("mode", "page");
4334 $kiriwrite_presmodule->addhiddendata("action", "multiedit");
4335 $kiriwrite_presmodule->addhiddendata("database", $database);
4336 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
4337 $kiriwrite_presmodule->addhiddendata("confirm", 1);
4341 foreach $page (keys %edit_list){
4342 $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
4343 $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $edit_list{$page}{Filename});
4347 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{multieditmessage}, $database_name));
4348 $kiriwrite_presmodule->addlinebreak();
4349 $kiriwrite_presmodule->addlinebreak();
4350 $kiriwrite_presmodule->startbox("datalist");
4352 foreach $page (keys %edit_list){
4353 if (!$edit_list{$page}{Name}){
4354 $kiriwrite_presmodule->additalictext("No Name");
4355 $kiriwrite_presmodule->addtext(" (" . $edit_list{$page}{Filename} . ")");
4357 $kiriwrite_presmodule->addtext($edit_list{$page}{Name} . " (" . $edit_list{$page}{Filename} . ")");
4360 $kiriwrite_presmodule->addlinebreak();
4363 $kiriwrite_presmodule->endbox();
4364 $kiriwrite_presmodule->addlinebreak();
4365 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multieditmessagevalues});
4366 $kiriwrite_presmodule->addlinebreak();
4367 $kiriwrite_presmodule->addlinebreak();
4368 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
4370 $kiriwrite_presmodule->startheader();
4371 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{alter}, { Style => "tablecellheader" });
4372 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
4373 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
4374 $kiriwrite_presmodule->endheader();
4376 $kiriwrite_presmodule->startrow();
4377 $kiriwrite_presmodule->addcell("tablecell1");
4378 $kiriwrite_presmodule->addcheckbox("altersection");
4379 $kiriwrite_presmodule->endcell();
4380 $kiriwrite_presmodule->addcell("tablecell1");
4381 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
4382 $kiriwrite_presmodule->endcell();
4383 $kiriwrite_presmodule->addcell("tablecell1");
4384 $kiriwrite_presmodule->addinputbox("newsection", { Size => 64, MaxLength => 256 });
4385 $kiriwrite_presmodule->endcell();
4386 $kiriwrite_presmodule->endrow();
4388 $kiriwrite_presmodule->startrow();
4389 $kiriwrite_presmodule->addcell("tablecell2");
4390 $kiriwrite_presmodule->addcheckbox("altertemplate");
4391 $kiriwrite_presmodule->endcell();
4392 $kiriwrite_presmodule->addcell("tablecell2");
4393 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
4394 $kiriwrite_presmodule->endcell();
4396 $kiriwrite_presmodule->addcell("tablecell2");
4398 if ($template_warning){
4400 $kiriwrite_presmodule->addhiddendata("newtemplate", "!skip");
4401 $kiriwrite_presmodule->addtext($template_warning);
4405 $kiriwrite_presmodule->addselectbox("newtemplate");
4407 foreach $template (keys %template_list){
4409 $kiriwrite_presmodule->addoption($template_list{$template}{Name} . " (" . $template_list{$template}{Filename} . ")", { Value => $template_list{$template}{Filename}});
4413 $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
4414 $kiriwrite_presmodule->endselectbox();
4417 $kiriwrite_presmodule->endcell();
4418 $kiriwrite_presmodule->endrow();
4420 $kiriwrite_presmodule->startrow();
4421 $kiriwrite_presmodule->addcell("tablecell1");
4422 $kiriwrite_presmodule->addcheckbox("altersettings");
4423 $kiriwrite_presmodule->endcell();
4424 $kiriwrite_presmodule->addcell("tablecell1");
4425 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
4426 $kiriwrite_presmodule->endcell();
4427 $kiriwrite_presmodule->addcell("tablecell1");
4428 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => 1 , Selected => 1});
4429 $kiriwrite_presmodule->addlinebreak();
4430 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => 2 });
4431 $kiriwrite_presmodule->addlinebreak();
4432 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => 3 });
4433 $kiriwrite_presmodule->addlinebreak();
4434 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => 0 });
4435 $kiriwrite_presmodule->endcell();
4436 $kiriwrite_presmodule->endrow();
4438 $kiriwrite_presmodule->endtable();
4439 $kiriwrite_presmodule->addlinebreak();
4440 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{editpagesbutton});
4441 $kiriwrite_presmodule->addtext(" | ");
4442 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
4443 $kiriwrite_presmodule->addtext(" | ");
4444 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
4445 $kiriwrite_presmodule->endform();
4447 return $kiriwrite_presmodule->grab();
4451 # The confirm value is something else other than
4452 # 1 or 0, so return an error.
4454 kiriwrite_error("invalidvariable");
4460 sub kiriwrite_page_list{
4461 #################################################################################
4462 # kiriwrite_page_list: Lists pages from an database. #
4466 # kiriwrite_page_list([database]); #
4468 # database Specifies the database to retrieve the pages from. #
4469 #################################################################################
4471 # Get the database file name from what was passed to the subroutine.
4473 my ($database_file) = @_;
4475 # Check if the database_file variable is empty, if it is then print out a
4476 # select box asking the user to select a database from the list.
4478 if (!$database_file) {
4480 # Define the variables required for this section.
4484 my @databasefilenames;
4487 my $dbfilename = "";
4490 my $data_file_length = 0;
4491 my $data_file_friendly = "";
4492 my $database_name = "";
4493 my $file_permissions = "";
4495 # Connect to the database server.
4497 $kiriwrite_dbmodule->connect();
4499 # Check if any errors occured while connecting to the database server.
4501 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4503 # A database connection error has occured so return
4506 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4510 # Open the data directory and get all of the databases.
4512 @database_list = $kiriwrite_dbmodule->getdblist();
4514 # Check if any errors occured while trying to get the list of databases.
4516 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
4518 # The database directory is missing so return an error.
4520 kiriwrite_error("datadirectorymissing");
4522 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
4524 # The database directory has invalid permissions set so return
4527 kiriwrite_error("datadirectoryinvalidpermissions");
4531 # Get the information about each database (the short name and friendly name).
4533 foreach $data_file (@database_list){
4535 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
4537 # Check if any errors occured while selecting the database.
4539 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4541 # The database does not exist, so process the next
4546 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4548 # The database has invalid permissions set, so process
4549 # the next database.
4555 # Get the database information.
4557 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4559 # Check if any errors had occured while getting the database
4562 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4564 # A database error has occured, so process the next
4571 # Set the database name.
4573 $database_name = $database_info{"DatabaseName"};
4575 # Check if the database name is undefined and if it is
4576 # then set it blank.
4578 if (!$database_name){
4579 $database_name = "";
4582 # Append the database to the list of databases available.
4584 push(@databasefilenames, $data_file);
4585 push(@databasenames, $database_name);
4589 # Disconnect from the database server.
4591 $kiriwrite_dbmodule->disconnect();
4593 # Write the page data.
4595 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{viewpages}, { Style => "pageheader" });
4596 $kiriwrite_presmodule->addlinebreak();
4597 $kiriwrite_presmodule->addlinebreak();
4598 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{nodatabaseselected});
4599 $kiriwrite_presmodule->addlinebreak();
4600 $kiriwrite_presmodule->addlinebreak();
4601 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"});
4602 $kiriwrite_presmodule->addhiddendata("mode", "page");
4603 $kiriwrite_presmodule->addhiddendata("action", "view");
4604 $kiriwrite_presmodule->addselectbox("database");
4605 foreach $dbfilename (@databasefilenames){
4606 $dbname = $databasenames[$dbseek];
4608 $kiriwrite_presmodule->addoption($dbname . " (" . $dbfilename . ")", { Value => $dbfilename });
4610 $kiriwrite_presmodule->endselectbox();
4611 $kiriwrite_presmodule->addtext(" | ");
4612 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{viewbutton});
4613 $kiriwrite_presmodule->endform();
4615 return $kiriwrite_presmodule->grab();
4622 my $pagemultioptions = "";
4624 my $tablestyle = "";
4626 my $page_filename = "";
4628 my $page_description = "";
4629 my $page_modified = "";
4631 my $tablestyletype = 0;
4633 my $db_file_notblank = 0;
4635 tie(%database_info, 'Tie::IxHash');
4636 tie(%template_info, 'Tie::IxHash');
4638 # The database_file variable is not blank, so print out a list of pages from
4639 # the selected database.
4641 # Preform a variable check on the database filename to make sure that it is
4642 # valid before using it.
4644 kiriwrite_variablecheck($database_file, "filename", "", 0);
4645 kiriwrite_variablecheck($database_file, "maxlength", 32, 0);
4647 # Connect to the database server.
4649 $kiriwrite_dbmodule->connect();
4651 # Check if any errors occured while connecting to the database server.
4653 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4655 # A database connection error has occured so return
4658 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4662 # Select the database.
4664 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_file });
4666 # Check if any errors had occured while selecting the database.
4668 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4670 # The database does not exist, so return an error.
4672 kiriwrite_error("databasemissingfile");
4674 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4676 # The database has invalid permissions set, so return
4679 kiriwrite_error("databaseinvalidpermissions");
4683 # Get information about the database.
4685 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4687 $db_name = $database_info{"DatabaseName"};
4689 # Check if any errors had occured while getting the database
4692 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4694 # A database error has occured so return an error and
4695 # also the extended error information.
4697 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4701 # Get the list of pages.
4703 @database_pages = $kiriwrite_dbmodule->getpagelist();
4705 # Check if any errors had occured while getting the list of pages.
4707 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4709 # A database error has occured so return an error and
4710 # also the extended error information.
4712 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4716 # Check if there are any page names in the database array.
4718 if (@database_pages){
4720 # Write the start of the page.
4722 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagelist}, $db_name), { Style => "pageheader" });
4723 $kiriwrite_presmodule->addlinebreak();
4724 $kiriwrite_presmodule->addlinebreak();
4725 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
4726 $kiriwrite_presmodule->addhiddendata("mode", "page");
4727 $kiriwrite_presmodule->addhiddendata("database", $database_file);
4728 $kiriwrite_presmodule->addhiddendata("type", "multiple");
4730 # Write the list of multiple selection options.
4732 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
4733 $kiriwrite_presmodule->addtext(" | ");
4734 $kiriwrite_presmodule->addbutton("action", { Value => "multidelete", Description => $kiriwrite_lang->{pages}->{deleteselectedbutton} });
4735 $kiriwrite_presmodule->addtext(" | ");
4736 $kiriwrite_presmodule->addbutton("action", { Value => "multimove", Description => $kiriwrite_lang->{pages}->{moveselectedbutton} });
4737 $kiriwrite_presmodule->addtext(" | ");
4738 $kiriwrite_presmodule->addbutton("action", { Value => "multicopy", Description => $kiriwrite_lang->{pages}->{copyselectedbutton} });
4739 $kiriwrite_presmodule->addtext(" | ");
4740 $kiriwrite_presmodule->addbutton("action", { Value => "multiedit", Description => $kiriwrite_lang->{pages}->{editselectedbutton} });
4742 $kiriwrite_presmodule->addlinebreak();
4743 $kiriwrite_presmodule->addlinebreak();
4745 # Write the table header.
4747 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
4748 $kiriwrite_presmodule->startheader();
4749 $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
4750 $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagefilename}, { Style => "tablecellheader" });
4751 $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagename}, { Style => "tablecellheader" });
4752 $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagedescription}, { Style => "tablecellheader" });
4753 $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{lastmodified}, { Style => "tablecellheader" });
4754 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
4755 $kiriwrite_presmodule->endheader();
4757 # Process each page filename and get the page information.
4759 foreach $page_filename (@database_pages){
4761 %template_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page_filename });
4763 # Check if any errors have occured.
4765 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4767 # A database error has occured so return an error and
4768 # also the extended error information.
4770 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4772 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4774 # The page does not exist, so process the next page.
4782 $page_filename = $template_info{"PageFilename"};
4783 $page_name = $template_info{"PageName"};
4784 $page_description = $template_info{"PageDescription"};
4785 $page_modified = $template_info{"PageLastModified"};
4787 # Set the table cell style.
4789 if ($tablestyletype eq 0){
4791 $tablestyle = "tablecell1";
4792 $tablestyletype = 1;
4796 $tablestyle = "tablecell2";
4797 $tablestyletype = 0;
4801 # Write out the row of data.
4803 $kiriwrite_presmodule->startrow();
4804 $kiriwrite_presmodule->addcell($tablestyle);
4805 $kiriwrite_presmodule->addhiddendata("id[" . $page_count . "]", $page_filename);
4806 $kiriwrite_presmodule->addcheckbox("name[" . $page_count . "]");
4807 $kiriwrite_presmodule->endcell();
4808 $kiriwrite_presmodule->addcell($tablestyle);
4809 $kiriwrite_presmodule->addtext($page_filename);
4810 $kiriwrite_presmodule->endcell();
4811 $kiriwrite_presmodule->addcell($tablestyle);
4815 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
4819 $kiriwrite_presmodule->addtext($page_name);
4823 $kiriwrite_presmodule->endcell();
4824 $kiriwrite_presmodule->addcell($tablestyle);
4826 if (!$page_description){
4828 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
4832 $kiriwrite_presmodule->addtext($page_description);
4836 $kiriwrite_presmodule->endcell();
4837 $kiriwrite_presmodule->addcell($tablestyle);
4839 if (!$page_modified){
4841 $kiriwrite_presmodule->additalictext("No Date");
4845 $kiriwrite_presmodule->addtext($page_modified);
4849 $kiriwrite_presmodule->endcell();
4850 $kiriwrite_presmodule->addcell($tablestyle);
4851 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=edit&database=" . $database_file . "&page=" . $page_filename, { Text => $kiriwrite_lang->{options}->{edit} });
4852 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=delete&database=" . $database_file . "&page=" . $page_filename, { Text => $kiriwrite_lang->{options}->{delete} });
4853 $kiriwrite_presmodule->endcell();
4854 $kiriwrite_presmodule->endrow();
4856 # Increment the counter.
4862 # Disconnect from the database server.
4864 $kiriwrite_dbmodule->disconnect();
4866 $kiriwrite_presmodule->addhiddendata("count", $page_count);
4867 $kiriwrite_presmodule->endtable();
4868 $kiriwrite_presmodule->endform();
4870 if (!@database_pages || !$page_count){
4872 # There were no values in the database pages array and
4873 # the page count had not been incremented so write a
4874 # message saying that there were no pages in the
4877 $kiriwrite_presmodule->clear();
4878 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagelist}, $db_name), { Style => "pageheader" });
4879 $kiriwrite_presmodule->addlinebreak();
4880 $kiriwrite_presmodule->addlinebreak();
4881 $kiriwrite_presmodule->startbox("errorbox");
4882 $kiriwrite_presmodule->enterdata($kiriwrite_lang->{pages}->{nopagesindatabase});
4883 $kiriwrite_presmodule->endbox();
4887 return $kiriwrite_presmodule->grab();
4893 sub kiriwrite_page_multipleselect{
4894 #################################################################################
4895 # kiriwrite_page_multipleselect: Gets the multiple page selections from a #
4896 # database and processes them into a single which can be used in the #
4897 # kiriwrite_page_delete. #
4901 # kiriwrite_page_multipleselect(); #
4902 #################################################################################
4904 # Load the required perl modules for this subroutine.
4906 my $query = new CGI;
4908 # Setup some variables that will be used later on.
4910 my $page_select_seek = 1;
4911 my $page_current_value = "";
4912 my $selectionlist = "";
4914 # Get the required variables from the HTTP query.
4916 my $page_count = $query->param('count');
4920 # Get the current value of the selected page's checkbox.
4922 $page_current_value = $query->param('name[' . $page_select_seek . ']');
4924 # If page_current_value is undefinied or blank, set page_current_value
4927 if (!$page_current_value){
4929 $page_current_value = "off";
4933 # Check if the page_current_value is set to 'on' if it is append the
4934 # current page seek value to the selection list.
4936 if ($page_current_value eq "on"){
4938 # Append the current seek value to the selection list.
4940 $selectionlist = $selectionlist . $page_select_seek . "|";
4944 # Increment the page selection seeking counter.
4946 $page_select_seek++;
4948 } until ($page_select_seek eq $page_count);
4950 return $selectionlist;
4954 sub kiriwrite_template_add{
4955 #################################################################################
4956 # kiriwrite_template_add: Add a template to the template folder #
4960 # kiriwrite_template_add(filename, name, description, layout, confirm); #
4962 # filename The filename of the new template. #
4963 # name The name of the template. #
4964 # description The description of the template. #
4965 # layout The layout of the new template. #
4966 # confirm Confirm the action of creating a new template. #
4967 #################################################################################
4969 # Get the variables that were passed to the subroutine.
4971 my ($templatefilename, $templatename, $templatedescription, $templatelayout, $confirm) = @_;
4973 # Check if the confirm value is blank and if it is then set confirm to 0.
4977 # The confirm value is blank, so set the value of confirm to 0.
4985 # Check (validate) each of the values.
4987 kiriwrite_variablecheck($templatename, "utf8", 0, 0);
4988 kiriwrite_variablecheck($templatedescription, "utf8", 0, 0);
4989 kiriwrite_variablecheck($templatelayout, "utf8", 0, 0);
4991 # Convert the values into proper UTF8 strings that can be used.
4993 $templatename = kiriwrite_utf8convert($templatename);
4994 $templatedescription = kiriwrite_utf8convert($templatedescription);
4995 $templatelayout = kiriwrite_utf8convert($templatelayout);
4997 # Check the length of the converted UTF8 strings.
4999 my $templatefilename_length_check = kiriwrite_variablecheck($templatefilename, "maxlength", 64, 1);
5000 my $templatename_length_check = kiriwrite_variablecheck($templatename, "maxlength", 512, 1);
5001 my $templatedescription_length_check = kiriwrite_variablecheck($templatedescription, "maxlength", 512, 1);
5002 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
5004 if ($templatefilename_length_check eq 1){
5006 # The template filename length is too long, so return an error.
5008 kiriwrite_error("templatefilenametoolong");
5012 if ($templatename_length_check eq 1){
5014 # The template name length is too long, so return an error.
5016 kiriwrite_error("templatenametoolong");
5021 if ($templatedescription_length_check eq 1){
5023 # The template description length is too long, so return an error.
5025 kiriwrite_error("templatedescriptiontoolong");
5029 # Check if the filename specified is a valid filename.
5031 kiriwrite_variablecheck($templatefilename, "filename", "", 0);
5033 # Connect to the template server.
5035 $kiriwrite_dbmodule->connect();
5037 # Connect to the template database.
5039 $kiriwrite_dbmodule->connecttemplate(1);
5041 # Check if any errors had occured.
5043 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5045 # The template database has invalid permissions set so
5048 kiriwrite_error("templatedatabaseinvalidpermissions");
5052 $kiriwrite_dbmodule->addtemplate({ TemplateFilename => $templatefilename, TemplateName => $templatename, TemplateDescription => $templatedescription, TemplateLayout => $templatelayout });
5054 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5056 # A database error has occured so return an error along
5057 # with the extended error information.
5059 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5061 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5063 # The template database has invalid permissions set so return
5066 kiriwrite_error("templatedatabaseinvalidpermissions");
5068 } elsif ($kiriwrite_dbmodule->geterror eq "TemplatePageExists"){
5070 # The template page already exists so return an error.
5072 kiriwrite_error("templatefilenameexists");
5074 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseUncreateable"){
5076 # The template databases is uncreatable so return an error.
5078 kiriwrite_error("templatedatabasenotcreated");
5082 $kiriwrite_dbmodule->disconnecttemplate();
5084 # Disconnect from the template server.
5086 $kiriwrite_dbmodule->disconnect();
5088 # Print out the confirmation message.
5090 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{addedtemplate}, { Style => "pageheader" });
5091 $kiriwrite_presmodule->addlinebreak();
5092 $kiriwrite_presmodule->addlinebreak();
5093 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{addedtemplatemessage}, $templatename));
5094 $kiriwrite_presmodule->addlinebreak();
5095 $kiriwrite_presmodule->addlinebreak();
5096 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5097 return $kiriwrite_presmodule->grab();
5100 # No confirmation was made, so print out a form for adding a template.
5102 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{addtemplate}, { Style => "pageheader" });
5103 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5104 $kiriwrite_presmodule->addhiddendata("mode", "template");
5105 $kiriwrite_presmodule->addhiddendata("action", "add");
5106 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5107 $kiriwrite_presmodule->addlinebreak();
5108 $kiriwrite_presmodule->starttable("", { CellSpacing => 0, CellPadding => 5 });
5110 $kiriwrite_presmodule->startheader();
5111 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
5112 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
5113 $kiriwrite_presmodule->endheader();
5115 $kiriwrite_presmodule->startrow();
5116 $kiriwrite_presmodule->addcell("tablecell1");
5117 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatename});
5118 $kiriwrite_presmodule->endcell();
5119 $kiriwrite_presmodule->addcell("tablecell2");
5120 $kiriwrite_presmodule->addinputbox("templatename", { Size => 64, MaxLength => 512 });
5121 $kiriwrite_presmodule->endcell();
5122 $kiriwrite_presmodule->endrow();
5124 $kiriwrite_presmodule->startrow();
5125 $kiriwrite_presmodule->addcell("tablecell1");
5126 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatedescription});
5127 $kiriwrite_presmodule->endcell();
5128 $kiriwrite_presmodule->addcell("tablecell2");
5129 $kiriwrite_presmodule->addinputbox("templatedescription", { Size => 64, MaxLength => 512 });
5130 $kiriwrite_presmodule->endcell();
5131 $kiriwrite_presmodule->endrow();
5133 $kiriwrite_presmodule->startrow();
5134 $kiriwrite_presmodule->addcell("tablecell1");
5135 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatefilename});
5136 $kiriwrite_presmodule->endcell();
5137 $kiriwrite_presmodule->addcell("tablecell2");
5138 $kiriwrite_presmodule->addinputbox("templatefilename", { Size => 32, MaxLength => 64 });
5139 $kiriwrite_presmodule->endcell();
5140 $kiriwrite_presmodule->endrow();
5142 $kiriwrite_presmodule->startrow();
5143 $kiriwrite_presmodule->addcell("tablecell1");
5144 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatelayout});
5145 $kiriwrite_presmodule->endcell();
5146 $kiriwrite_presmodule->addcell("tablecell2");
5147 $kiriwrite_presmodule->addtextbox("templatelayout", { Columns => 50, Rows => 10 });
5148 $kiriwrite_presmodule->addlinebreak();
5149 $kiriwrite_presmodule->addlinebreak();
5150 $kiriwrite_presmodule->startbox("datalist");
5151 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
5152 $kiriwrite_presmodule->addlinebreak();
5153 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagecontent});
5154 $kiriwrite_presmodule->addlinebreak();
5155 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
5156 $kiriwrite_presmodule->addlinebreak();
5157 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
5158 $kiriwrite_presmodule->addlinebreak();
5159 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
5160 $kiriwrite_presmodule->addlinebreak();
5161 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
5162 $kiriwrite_presmodule->addlinebreak();
5163 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
5164 $kiriwrite_presmodule->addlinebreak();
5165 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
5166 $kiriwrite_presmodule->addlinebreak();
5167 $kiriwrite_presmodule->endbox();
5168 $kiriwrite_presmodule->endcell();
5169 $kiriwrite_presmodule->endrow();
5170 $kiriwrite_presmodule->endtable();
5172 $kiriwrite_presmodule->addlinebreak();
5173 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{addtemplatebutton});
5174 $kiriwrite_presmodule->addtext(" | ");
5175 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
5176 $kiriwrite_presmodule->addtext(" | ");
5177 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template" , { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5179 $kiriwrite_presmodule->endform();
5181 return $kiriwrite_presmodule->grab();
5188 sub kiriwrite_template_edit{
5189 #################################################################################
5190 # kiriwrite_template_edit: Edit a template from the template folder. #
5194 # kiriwrite_template_edit(filename, [newfilename], [newname], [newdescription], #
5195 # [templatelayout], [confirm]); #
5197 # filename The current filename of the template to edit. #
5198 # newfilename The new filename of the template to edit. #
5199 # newname The new name of the template being edited. #
5200 # newdescription The new description of the template being edited. #
5201 # templatelayout The modified/altered template layout. #
5202 # confirm Confirms the action to edit a template and its #
5204 #################################################################################
5206 # Get all the variables that have been passed to the subroutine.
5208 my ($templatefilename, $templatenewfilename, $templatenewname, $templatenewdescription, $templatelayout, $confirm) = @_;
5210 # Check if the confirm variable is blank, if it is then
5211 # set confirm to '0'
5215 # confirm is uninitalised/blank, so set the value of confirm
5222 # Check if the template filename is blank and if it is, then return
5225 if (!$templatefilename){
5227 kiriwrite_error("templatefilenameblank");
5231 # Connect to the database server.
5233 $kiriwrite_dbmodule->connect();
5235 # Check if any errors occured while connecting to the database server.
5237 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5239 # A database connection error has occured so return
5242 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5248 # Check certain strings to see if they UTF8 compiliant.
5250 kiriwrite_variablecheck($templatenewname, "utf8", 0, 0);
5251 kiriwrite_variablecheck($templatenewdescription, "utf8", 0, 0);
5252 kiriwrite_variablecheck($templatelayout, "utf8", 0, 0);
5254 # Convert the values into proper UTF8 strings.
5256 $templatenewname = kiriwrite_utf8convert($templatenewname);
5257 $templatenewdescription = kiriwrite_utf8convert($templatenewdescription);
5258 $templatelayout = kiriwrite_utf8convert($templatelayout);
5260 # Check if the filenames recieved are valid filenames.
5262 kiriwrite_variablecheck($templatenewfilename, "maxlength", 64, 0);
5263 kiriwrite_variablecheck($templatenewdescription, "maxlength", 512, 0);
5264 kiriwrite_variablecheck($templatenewname, "maxlength", 512, 0);
5265 kiriwrite_variablecheck($templatefilename, "maxlength", 64, 0);
5266 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
5268 kiriwrite_variablecheck($templatefilename, "filename", "", 0);
5269 kiriwrite_variablecheck($templatenewfilename, "filename", "", 0);
5271 # Connect to the template database.
5273 $kiriwrite_dbmodule->connecttemplate();
5275 # Check if any errors had occured.
5277 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5279 # The template database has invalid permissions set so
5282 kiriwrite_error("templatedatabaseinvalidpermissions");
5286 # Edit the template.
5288 $kiriwrite_dbmodule->edittemplate({ TemplateFilename => $templatefilename, NewTemplateFilename => $templatenewfilename, NewTemplateName => $templatenewname, NewTemplateDescription => $templatenewdescription, NewTemplateLayout => $templatelayout });
5290 # Check if any error occured while editing the template.
5292 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5294 # A database error has occured, so return an error.
5296 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5298 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5300 # The template database has invalid permissions set so return
5303 kiriwrite_error("templatedatabaseinvalidpermissions");
5305 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5307 # The template does not exist, so process the next template.
5309 kiriwrite_error("templatedoesnotexist");
5313 # Disconnect from the database server.
5315 $kiriwrite_dbmodule->disconnect();
5317 # Disconnect from the template database.
5319 $kiriwrite_dbmodule->disconnecttemplate();
5321 # Append a link so that the user can return to the templates list.
5323 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{editedtemplate}, { Style => "pageheader" });
5324 $kiriwrite_presmodule->addlinebreak();
5325 $kiriwrite_presmodule->addlinebreak();
5326 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{editedtemplatemessage}, $templatenewname));
5327 $kiriwrite_presmodule->addlinebreak();
5328 $kiriwrite_presmodule->addlinebreak();
5329 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5333 # Connect to the template database.
5335 $kiriwrite_dbmodule->connecttemplate();
5337 # Check if any errors had occured.
5339 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5341 # The template database has invalid permissions set so
5344 kiriwrite_error("templatedatabaseinvalidpermissions");
5348 # Get the template information.
5350 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $templatefilename });
5352 # Check if any error occured while getting the template information.
5354 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5356 # A database error has occured, so return an error.
5358 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5360 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5362 # The template does not exist, so return an error.
5364 kiriwrite_error("templatedoesnotexist");
5368 # Disconnect from the template database.
5370 $kiriwrite_dbmodule->disconnecttemplate();
5372 # Get the values from the query results.
5374 my $template_filename = $template_info{"TemplateFilename"};
5375 my $template_name = $template_info{"TemplateName"};
5376 my $template_description = $template_info{"TemplateDescription"};
5377 my $template_layout = $template_info{"TemplateLayout"};
5378 my $template_modified = $template_info{"TemplateLastModified"};
5380 # Check if the values are undefined and set them blank
5383 if (!$template_name){
5384 $template_name = "";
5387 if (!$template_description){
5388 $template_description = "";
5391 if (!$template_layout){
5392 $template_layout = "";
5395 # Write out the form for editing an template with the current template
5396 # settings put into the correct place.
5398 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{edittemplate}, { Style => "pageheader" });
5399 $kiriwrite_presmodule->addlinebreak();
5400 $kiriwrite_presmodule->addlinebreak();
5401 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5402 $kiriwrite_presmodule->addhiddendata("mode", "template");
5403 $kiriwrite_presmodule->addhiddendata("action", "edit");
5404 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5405 $kiriwrite_presmodule->addhiddendata("template", $template_filename);
5406 $kiriwrite_presmodule->starttable("", { CellSpacing => 0, CellPadding => 5});
5408 $kiriwrite_presmodule->startheader();
5409 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
5410 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
5411 $kiriwrite_presmodule->endheader();
5413 $kiriwrite_presmodule->startrow();
5414 $kiriwrite_presmodule->addcell("tablecell1");
5415 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatename});
5416 $kiriwrite_presmodule->endcell();
5417 $kiriwrite_presmodule->addcell("tablecell2");
5418 $kiriwrite_presmodule->addinputbox("newname", { Size => 64, MaxLength => 512, Value => $template_name });
5419 $kiriwrite_presmodule->endcell();
5420 $kiriwrite_presmodule->endrow();
5422 $kiriwrite_presmodule->startrow();
5423 $kiriwrite_presmodule->addcell("tablecell1");
5424 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatedescription});
5425 $kiriwrite_presmodule->endcell();
5426 $kiriwrite_presmodule->addcell("tablecell2");
5427 $kiriwrite_presmodule->addinputbox("newdescription", { Size => 64, MaxLength => 512, Value => $template_description });
5428 $kiriwrite_presmodule->endcell();
5429 $kiriwrite_presmodule->endrow();
5431 $kiriwrite_presmodule->startrow();
5432 $kiriwrite_presmodule->addcell("tablecell1");
5433 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatefilename});
5434 $kiriwrite_presmodule->endcell();
5435 $kiriwrite_presmodule->addcell("tablecell2");
5436 $kiriwrite_presmodule->addinputbox("newfilename", { Size => 32, MaxLength => 64, Value => $template_filename });
5437 $kiriwrite_presmodule->endcell();
5438 $kiriwrite_presmodule->endrow();
5440 $kiriwrite_presmodule->startrow();
5441 $kiriwrite_presmodule->addcell("tablecell1");
5442 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatelayout});
5443 $kiriwrite_presmodule->endcell();
5444 $kiriwrite_presmodule->addcell("tablecell2");
5445 $kiriwrite_presmodule->addtextbox("newlayout", { Rows => 10, Columns => 50, Value => $template_layout});
5446 $kiriwrite_presmodule->addlinebreak();
5447 $kiriwrite_presmodule->addlinebreak();
5448 $kiriwrite_presmodule->startbox("datalist");
5449 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
5450 $kiriwrite_presmodule->addlinebreak();
5451 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagecontent});
5452 $kiriwrite_presmodule->addlinebreak();
5453 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
5454 $kiriwrite_presmodule->addlinebreak();
5455 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
5456 $kiriwrite_presmodule->addlinebreak();
5457 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
5458 $kiriwrite_presmodule->addlinebreak();
5459 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
5460 $kiriwrite_presmodule->addlinebreak();
5461 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
5462 $kiriwrite_presmodule->addlinebreak();
5463 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
5464 $kiriwrite_presmodule->addlinebreak();
5465 $kiriwrite_presmodule->endbox();
5466 $kiriwrite_presmodule->endcell();
5467 $kiriwrite_presmodule->endrow();
5469 $kiriwrite_presmodule->endtable();
5471 $kiriwrite_presmodule->addlinebreak();
5473 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{edittemplatebutton});
5474 $kiriwrite_presmodule->addtext(" | ");
5475 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
5476 $kiriwrite_presmodule->addtext(" | ");
5477 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5479 $kiriwrite_presmodule->endform();
5483 # Disconnect from the database server.
5485 $kiriwrite_dbmodule->disconnect();
5487 return $kiriwrite_presmodule->grab();
5491 sub kiriwrite_template_delete{
5492 #################################################################################
5493 # kiriwrite_template_delete: Delete a template from the template folder. #
5497 # kiriwrite_template_delete(filename, confirm); #
5499 # filename Specifies the filename of the database to delete. #
5500 # confirm Confirms the action to delete a template. #
5501 #################################################################################
5503 # Get the parameters that were passed to the subroutine.
5505 my ($template_filename, $template_confirm) = @_;
5507 if (!$template_confirm){
5508 $template_confirm = 0;
5511 # Check the length of the variables.
5512 kiriwrite_variablecheck($template_filename, "maxlength", 64, 0);
5513 kiriwrite_variablecheck($template_confirm, "maxlength", 1, 0);
5515 # Check if the template_name string is blank and if it is then
5516 # return an error (as the template_name string should not be
5519 if (!$template_filename){
5521 # The template_filename string really is blank,
5522 # so return an error saying that an empty
5523 # filename was passed (to the subroutine).
5525 kiriwrite_error("templatefilenameblank");
5529 # Check if the template_confirm string is blank and if it is, write
5530 # out a form asking the user to confirm the deletion.
5532 if ($template_confirm eq 1){
5534 # The action to delete the template from the template database has
5535 # been confirmed so delete the template.
5537 # Connect to the database server.
5539 $kiriwrite_dbmodule->connect();
5541 # Check if any errors occured while connecting to the database server.
5543 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5545 # A database connection error has occured so return
5548 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5552 # Check if the template database exists and the file permissions
5553 # are valid and return an error if they aren't.
5555 $kiriwrite_dbmodule->connecttemplate();
5557 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5559 # The template database does not exist so write a warning
5562 kiriwrite_error("templatedatabasemissing");
5564 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5566 # The template database has invalid permissions set so
5569 kiriwrite_error("templatedatabaseinvalidpermissions");
5573 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
5575 # Check if any error occured while getting the template information.
5577 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5579 # A database error has occured, so return an error.
5581 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5583 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5585 # The template does not exist, so return an error.
5587 kiriwrite_error("templatedoesnotexist");
5591 # Delete the selected template.
5593 $kiriwrite_dbmodule->deletetemplate({ TemplateFilename => $template_filename });
5595 # Check if any error occured while deleting the template.
5597 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5599 # A database error has occured, so return an error.
5601 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5603 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5605 # The template does not exist, so process the next template.
5607 kiriwrite_error("templatedoesnotexist");
5611 $kiriwrite_dbmodule->disconnecttemplate();
5613 # Get the deleted database name.
5615 my $database_template_name = $template_info{"TemplateName"};
5617 # Disconnect from the database server.
5619 $kiriwrite_dbmodule->disconnect();
5621 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{deletedtemplate}, { Style => "pageheader" });
5622 $kiriwrite_presmodule->addlinebreak();
5623 $kiriwrite_presmodule->addlinebreak();
5624 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{deletedtemplatemessage}, $database_template_name) );
5625 $kiriwrite_presmodule->addlinebreak();
5626 $kiriwrite_presmodule->addlinebreak();
5627 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5629 return $kiriwrite_presmodule->grab();
5631 } elsif ($template_confirm eq 0) {
5633 # The template confirm value is 0 (previously blank and then set to 0), so
5634 # write out a form asking the user to confirm the deletion of the template.
5636 # Connect to the database server.
5638 $kiriwrite_dbmodule->connect();
5640 # Check if any errors occured while connecting to the database server.
5642 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5644 # A database connection error has occured so return
5647 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5651 # Connect to the template database.
5653 $kiriwrite_dbmodule->connecttemplate();
5655 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5657 # The template database does not exist so write a warning
5660 kiriwrite_error("templatedatabasemissing");
5662 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5664 # The template database has invalid permissions set so
5667 kiriwrite_error("templatedatabaseinvalidpermissions");
5671 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
5673 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5675 # A database error has occured, so return an error.
5677 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5679 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5681 # The template does not exist, so return an error.
5683 kiriwrite_error("templatedoesnotexist");
5687 my $template_data_filename = $template_info{"TemplateFilename"};
5688 my $template_data_name = $template_info{"TemplateName"};
5690 $kiriwrite_dbmodule->disconnecttemplate();
5692 # Disconnect from the database server.
5694 $kiriwrite_dbmodule->disconnect();
5696 # Write out the confirmation form.
5698 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{deletetemplate}, { Style => "pageheader" });
5699 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5700 $kiriwrite_presmodule->addhiddendata("mode", "template");
5701 $kiriwrite_presmodule->addhiddendata("template", $template_filename);
5702 $kiriwrite_presmodule->addhiddendata("action", "delete");
5703 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5704 $kiriwrite_presmodule->addlinebreak();
5705 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{deletetemplatemessage}, $template_data_name, $template_data_filename));
5706 $kiriwrite_presmodule->addlinebreak();
5707 $kiriwrite_presmodule->addlinebreak();
5708 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{deletetemplatebutton});
5709 $kiriwrite_presmodule->addtext(" | ");
5710 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{deletetemplatereturntolist} });
5711 $kiriwrite_presmodule->endform();
5713 return $kiriwrite_presmodule->grab();
5717 kiriwrite_error("invalidvariable");
5723 sub kiriwrite_template_list{
5724 #################################################################################
5725 # kiriwrite_template_list: List the templates in the template folder. #
5729 # kiriwrite_template_list(); #
5730 #################################################################################
5732 # Define certain values for later.
5739 my $template_filename = "";
5740 my $template_filename_list = "";
5741 my $template_name = "";
5742 my $template_description = "";
5743 my $template_data = "";
5745 my $template_count = 0;
5747 my $template_style = 0;
5748 my $template_stylename = "";
5750 my $templatewarning = "";
5752 # Connect to the database server.
5754 $kiriwrite_dbmodule->connect();
5756 # Check if any errors occured while connecting to the database server.
5758 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5760 # A database connection error has occured so return
5763 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5767 # Connect to the template database.
5769 $kiriwrite_dbmodule->connecttemplate();
5771 # Check if any errors had occured.
5773 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5775 # The template database does not exist so write a warning
5778 $templatewarning = $kiriwrite_lang->{template}->{templatedatabasedoesnotexist};
5780 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5782 # The template database has invalid permissions set so
5785 kiriwrite_error("templatedatabaseinvalidpermissions");
5787 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5789 # A database error occured while getting the list of
5790 # templates so return an error with the extended
5791 # error information.
5793 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5797 # Get the list of template databases.
5799 if (!$templatewarning){
5801 @templates_list = $kiriwrite_dbmodule->gettemplatelist();
5805 # Check if any errors had occured.
5807 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5809 # A database error occured while getting the list
5810 # of templates so return an error with the
5811 # extended error information.
5813 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5817 # Check if any templates are in the database and if there isn't
5818 # then write a message saying that there are no templates in the
5821 if (!@templates_list && !$templatewarning){
5822 $templatewarning = $kiriwrite_lang->{template}->{notemplatesavailable};
5825 # Process the templates into a template list.
5827 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{viewtemplates}, { Style => "pageheader" });
5828 $kiriwrite_presmodule->addlinebreak();
5829 $kiriwrite_presmodule->addlinebreak();
5831 if ($templatewarning){
5833 $kiriwrite_presmodule->startbox("errorbox");
5834 $kiriwrite_presmodule->addtext($templatewarning);
5835 $kiriwrite_presmodule->endbox();
5839 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
5840 $kiriwrite_presmodule->startheader();
5841 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatefilename}, { Style => "tablecellheader" });
5842 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatename}, { Style => "tablecellheader" });
5843 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatedescription}, { Style => "tablecellheader" });
5844 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
5845 $kiriwrite_presmodule->endheader();
5847 foreach $template (@templates_list){
5849 # Get the template data.
5851 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
5853 # Check if any errors occured while trying to get the template
5856 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5858 # A database error has occured, so return an error.
5860 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5862 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5864 # The template does not exist, so process the next template.
5870 $template_filename = $template_info{"TemplateFileName"};
5871 $template_name = $template_info{"TemplateName"};
5872 $template_description = $template_info{"TemplateDescription"};
5874 # Check what style the row of table cells should be.
5876 if ($template_style eq 0){
5878 $template_stylename = "tablecell1";
5879 $template_style = 1;
5883 $template_stylename = "tablecell2";
5884 $template_style = 0;
5888 $kiriwrite_presmodule->startrow();
5889 $kiriwrite_presmodule->addcell($template_stylename);
5890 $kiriwrite_presmodule->addtext($template_info{"TemplateFilename"});
5892 # Check if the blank template value was set.
5894 if (!$template_info{"TemplateLayout"}){
5895 $kiriwrite_presmodule->additalictext(" " . "[Blank Template]");
5898 $kiriwrite_presmodule->endcell();
5899 $kiriwrite_presmodule->addcell($template_stylename);
5901 # Check if the template name is blank and if it is
5902 # write a message to say there's no name for the
5905 if (!$template_info{"TemplateName"}){
5906 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
5908 $kiriwrite_presmodule->addtext($template_info{"TemplateName"});
5911 $kiriwrite_presmodule->endcell();
5912 $kiriwrite_presmodule->addcell($template_stylename);
5914 # Check if the template description is blank and if
5915 # it is then write a message to say there's no
5916 # description for the template.
5918 if (!$template_info{"TemplateDescription"}){
5919 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
5921 $kiriwrite_presmodule->addtext($template_info{"TemplateDescription"});
5924 $kiriwrite_presmodule->endcell();
5925 $kiriwrite_presmodule->addcell($template_stylename);
5926 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template&action=edit&template=" . $template_info{"TemplateFilename"}, { Text => $kiriwrite_lang->{options}->{edit} });
5927 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template&action=delete&template=" . $template_info{"TemplateFilename"}, { Text => $kiriwrite_lang->{options}->{delete} });
5928 $kiriwrite_presmodule->endcell();
5929 $kiriwrite_presmodule->endrow();
5933 $kiriwrite_presmodule->endtable();
5934 $kiriwrite_presmodule->endform();
5938 # Disconnect from the database server.
5940 $kiriwrite_dbmodule->disconnect();
5942 $kiriwrite_dbmodule->disconnecttemplate();
5943 return $kiriwrite_presmodule->grab();
5948 sub kiriwrite_database_add{
5949 #################################################################################
5950 # kiriwrite_database_add: Creates a new database. #
5954 # kiriwrite_database_add(filename, name, description, [confirm]); #
5956 # filename Specifies the filename for the database. #
5957 # name Specifies a (friendly) name for the database. #
5958 # description Specifies a description for the database. #
5959 # confirm Confirms the action to create a database. #
5960 #################################################################################
5962 # Get the variables passed from the subroutine.
5964 my ($database_filename, $database_name, $database_description, $database_notes, $database_categories, $database_confirm) = @_;
5966 # Check if the confirm value is blank and if it is then
5967 # set the confirm value to 0.
5969 if (!$database_confirm){
5971 # The confirm value was blank so set the value to 0.
5973 $database_confirm = 0;
5977 if ($database_confirm eq 1){
5979 # The action to create a new database is confirmed.
5981 # Validate the database name and database descriptions.
5983 my $database_name_check_utf8 = kiriwrite_variablecheck($database_name, "utf8", 0, 0);
5984 my $database_description_check_utf8 = kiriwrite_variablecheck($database_description, "utf8", 0, 0);
5985 my $database_notes_check_utf8 = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
5986 my $database_categories_check_utf8 = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
5988 # Convert the UTF8 strings before checking the length of the strings.
5990 $database_name = kiriwrite_utf8convert($database_name);
5991 $database_description = kiriwrite_utf8convert($database_description);
5992 $database_notes = kiriwrite_utf8convert($database_notes);
5993 $database_categories = kiriwrite_utf8convert($database_categories);
5995 my $database_name_check_blank = kiriwrite_variablecheck($database_name, "blank", 0, 1);
5996 my $database_name_check_length = kiriwrite_variablecheck($database_name, "maxlength", 256, 1);
5997 my $database_description_check_length = kiriwrite_variablecheck($database_description, "maxlength", 512, 1);
5998 my $database_filename_check_length = kiriwrite_variablecheck($database_filename, "maxlength", 32, 1);
5999 my $database_categories_check_length = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
6001 # Check if values returned contains any values that would
6002 # result in a specific error message being returned.
6004 if ($database_name_check_length eq 1){
6006 # The length of the database name is too long, so return an error.
6007 kiriwrite_error("databasenametoolong");
6011 if ($database_description_check_length eq 1){
6013 # The database description length is too long, so return an error.
6014 kiriwrite_error("databasedescriptiontoolong");
6018 if ($database_name_check_blank eq 1){
6020 # The database name is blank, so return an error.
6021 kiriwrite_error("databasenameblank");
6025 if ($database_filename_check_length eq 1){
6027 # The database filename is to long, so return an error.
6028 kiriwrite_error("databasefilenametoolong");
6032 if ($database_categories_check_length eq 1){
6034 # The database categories is too long, so return an error.
6035 kiriwrite_error("databasecategoriestoolong");
6039 # Check if the database filename is blank and if it is then
6040 # generate a filename.
6042 if ($database_filename eq ""){
6044 # Filename is blank so generate a file name from
6045 # the database name.
6047 $database_filename = kiriwrite_processfilename($database_name);
6051 # Filename is not blank so don't generate a filename.
6055 kiriwrite_variablecheck($database_filename, "filename", "", 0);
6056 kiriwrite_variablecheck($database_filename, "maxlength", 32, 0);
6058 # Connect to the database server.
6060 $kiriwrite_dbmodule->connect();
6062 # Check if any errors occured while connecting to the database server.
6064 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6066 # A database connection error has occured so return
6069 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6073 my $database_name_final = $database_name;
6075 # Create the database.
6077 $kiriwrite_dbmodule->adddatabase({ DatabaseFilename => $database_filename, DatabaseName => $database_name, DatabaseDescription => $database_description, DatabaseNotes => $database_notes, DatabaseCategories => $database_categories, VersionMajor => $kiriwrite_version{"major"}, VersionMinor => $kiriwrite_version{"minor"}, VersionRevision => $kiriwrite_version{"revision"} });
6079 # Check if any errors have occured.
6081 if ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
6083 # A database with the filename given already exists, so
6086 kiriwrite_error("fileexists");
6088 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6090 # A database error has occured so return an error with
6091 # the extended error information.
6093 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6097 # Disconnect from the database server.
6099 $kiriwrite_dbmodule->disconnect();
6101 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
6102 $kiriwrite_presmodule->addlinebreak();
6103 $kiriwrite_presmodule->addlinebreak();
6104 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseadded} , $database_name_final));
6105 $kiriwrite_presmodule->addlinebreak();
6106 $kiriwrite_presmodule->addlinebreak();
6107 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6109 return $kiriwrite_presmodule->grab();
6113 # There is confirm value is not 1, so write a form for creating a database to
6116 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
6117 $kiriwrite_presmodule->addlinebreak();
6118 $kiriwrite_presmodule->addlinebreak();
6119 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6120 $kiriwrite_presmodule->addhiddendata("mode", "db");
6121 $kiriwrite_presmodule->addhiddendata("action", "new");
6122 $kiriwrite_presmodule->addhiddendata("confirm", "1");
6123 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
6125 $kiriwrite_presmodule->startheader();
6126 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader"});
6127 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader"});
6128 $kiriwrite_presmodule->endheader();
6130 $kiriwrite_presmodule->startrow();
6131 $kiriwrite_presmodule->addcell("tablecell1");
6132 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
6133 $kiriwrite_presmodule->endcell();
6134 $kiriwrite_presmodule->addcell("tablecell2");
6135 $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256 });
6136 $kiriwrite_presmodule->endcell();
6137 $kiriwrite_presmodule->endrow();
6139 $kiriwrite_presmodule->startrow();
6140 $kiriwrite_presmodule->addcell("tablecell1");
6141 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
6142 $kiriwrite_presmodule->endcell();
6143 $kiriwrite_presmodule->addcell("tablecell2");
6144 $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512 });
6145 $kiriwrite_presmodule->endcell();
6146 $kiriwrite_presmodule->endrow();
6148 $kiriwrite_presmodule->startrow();
6149 $kiriwrite_presmodule->addcell("tablecell1");
6150 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
6151 $kiriwrite_presmodule->endcell();
6152 $kiriwrite_presmodule->addcell("tablecell2");
6153 $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512 });
6154 $kiriwrite_presmodule->endcell();
6155 $kiriwrite_presmodule->endrow();
6157 $kiriwrite_presmodule->startrow();
6158 $kiriwrite_presmodule->addcell("tablecell1");
6159 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
6160 $kiriwrite_presmodule->endcell();
6161 $kiriwrite_presmodule->addcell("tablecell2");
6162 $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => 50, Rows => 10, WordWrap => 0 });
6163 $kiriwrite_presmodule->endcell();
6164 $kiriwrite_presmodule->endrow();
6166 $kiriwrite_presmodule->startrow();
6167 $kiriwrite_presmodule->addcell("tablecell1");
6168 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
6169 $kiriwrite_presmodule->endcell();
6170 $kiriwrite_presmodule->addcell("tablecell2");
6171 $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32 });
6172 $kiriwrite_presmodule->startlist();
6173 $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabaseautogenerate});
6174 $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasenoextensions});
6175 $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacterlength});
6176 $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacters});
6177 $kiriwrite_presmodule->endlist();
6178 $kiriwrite_presmodule->endcell();
6179 $kiriwrite_presmodule->endrow();
6181 $kiriwrite_presmodule->endtable();
6182 $kiriwrite_presmodule->addlinebreak();
6183 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{adddatabasebutton});
6184 $kiriwrite_presmodule->addtext("|");
6185 $kiriwrite_presmodule->addreset($kiriwrite_lang->{database}->{clearvaluesbutton});
6186 $kiriwrite_presmodule->addtext("| ");
6187 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6188 $kiriwrite_presmodule->endform();
6190 # Exit the subroutine taking the data in the pagadata variable with it.
6192 return $kiriwrite_presmodule->grab();
6196 sub kiriwrite_database_edit{
6197 #################################################################################
6198 # kiriwrite_database_edit: Edits an database. #
6202 # kiriwrite_database_edit(filename, name, description, newfilename, newname, #
6203 # newdescription, notes, categories, [confirm]); #
6205 # filename Specifies the filename of the database. #
6206 # name Specifies the name of the database. #
6207 # description Specifies the description of the database. #
6208 # newfilename Specifies the new filename of the database. #
6209 # newname Specifies the new name of the database. #
6210 # newdescription Specifies the new description of the database. #
6211 # notes Specifies the new notes of the database. #
6212 # categories Specifies the new categories of the database. #
6213 # confirm Confirms the action to edit a database. #
6214 #################################################################################
6216 # First, get all the variables passed to the subroutine.
6218 my ($database_shortname, $database_name, $database_description, $database_newfilename, $database_newname, $database_newdescription, $database_notes, $database_categories, $database_confirm) = @_;
6220 # Check if the database confirm value is blank and if it is
6221 # set the confirm value to 0.
6223 if (!$database_confirm){
6225 $database_confirm = 0;
6229 # Check if the confirm variable has a value in it, if it has, check again to make sure it really is the correct value (Perl moans
6230 # if $database_confirm was used directly).
6232 if ($database_confirm eq 1){
6234 # Check if the new data passes the validation tests below. First, check the length of the variables.
6236 my $database_name_check_utf8 = kiriwrite_variablecheck($database_newname, "utf8", 0, 0);
6237 my $database_description_check_utf8 = kiriwrite_variablecheck($database_newdescription, "utf8", 0, 0);
6238 my $database_notes_check_utf8 = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
6239 my $database_categories_check_utf8 = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
6241 # Convert the UTF8 strings to make sure their length is accurate.
6243 $database_newname = kiriwrite_utf8convert($database_newname);
6244 $database_newdescription = kiriwrite_utf8convert($database_newdescription);
6245 $database_notes = kiriwrite_utf8convert($database_notes);
6246 $database_categories = kiriwrite_utf8convert($database_categories);
6248 # Check if the database filename given is valid and return an error
6251 kiriwrite_variablecheck($database_shortname, "filename", "", 0);
6253 # Preform the following tests.
6255 my $database_filename_check_length = kiriwrite_variablecheck($database_newfilename, "maxlength", 32, 1);
6256 my $database_filename_letnum = kiriwrite_variablecheck($database_newfilename, "filename", 0, 0);
6257 my $database_name_check_length = kiriwrite_variablecheck($database_newname, "maxlength", 256, 1);
6258 my $database_description_check_length = kiriwrite_variablecheck($database_newdescription, "maxlength", 512, 1);
6259 my $database_categories_check_length = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
6260 my $database_name_check_blank = kiriwrite_variablecheck($database_newname, "blank", 0, 1);
6262 # Check if the data is valid and return a specific error if it doesn't.
6264 if ($database_name_check_length eq 1){
6266 # The length of the database name is too long, so return an error.
6267 kiriwrite_error("databasenametoolong");
6271 if ($database_description_check_length eq 1){
6273 # The database description length is too long, so return an error.
6274 kiriwrite_error("databasedescriptiontoolong");
6278 if ($database_name_check_blank eq 1){
6280 # The database name is blank, so return an error.
6281 kiriwrite_error("databasenameblank");
6285 if ($database_filename_check_length eq 1){
6287 # The database filename is too long, so return an error.
6288 kiriwrite_error("databasefilenametoolong");
6292 if ($database_categories_check_length eq 1){
6294 # The database categories is too long, so return an error.
6295 kiriwrite_error("databasecategoriestoolong");
6299 # Connect to the database server.
6301 $kiriwrite_dbmodule->connect();
6303 # Check if any errors occured while connecting to the database server.
6305 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6307 # A database connection error has occured so return
6310 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6316 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
6318 # Check if any errors had occured while selecting the database.
6320 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6322 # The database does not exist, so return an error.
6324 kiriwrite_error("databasemissingfile");
6326 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6328 # The database has invalid permissions set, so return
6331 kiriwrite_error("databaseinvalidpermissions");
6337 $kiriwrite_dbmodule->editdatabase({ DatabaseNewFilename => $database_newfilename, DatabaseName => $database_newname , DatabaseDescription => $database_newdescription , DatabaseNotes => $database_notes, DatabaseCategories => $database_categories });
6339 # Check if any errors had occured while using the database.
6341 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6343 # The database does not exist, so return an error.
6345 kiriwrite_error("databasemissingfile");
6347 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6349 # The database has invalid permissions set, so return
6352 kiriwrite_error("databaseinvalidpermissions");
6354 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
6356 # The database directory has invalid permissions set, so
6359 kiriwrite_error("datadirectoryinvalidpermissions");
6361 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
6363 # A database already exists with the new filename, so
6366 kiriwrite_error("databasealreadyexists");
6368 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6370 # A database error has occured so return an error with
6371 # the extended error information.
6373 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6377 # Disconnect from the server.
6379 $kiriwrite_dbmodule->disconnect();
6381 # Write out a message saying that the database has been updated.
6383 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{editeddatabase}, { Style => "pageheader" } );
6384 $kiriwrite_presmodule->addlinebreak();
6385 $kiriwrite_presmodule->addlinebreak();
6386 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseupdated}, $database_newname));
6387 $kiriwrite_presmodule->addlinebreak();
6388 $kiriwrite_presmodule->addlinebreak();
6389 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6391 return $kiriwrite_presmodule->grab();
6395 my (%database_info);
6397 # Check if the database filename given is valid and return an error
6400 # Connect to the database server.
6402 $kiriwrite_dbmodule->connect();
6404 # Check if any errors occured while connecting to the database server.
6406 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6408 # A database connection error has occured so return
6411 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6415 # Select the database.
6417 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
6419 # Check if any errors had occured while setting the database.
6421 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6423 # The database does not exist, so return an error.
6425 kiriwrite_error("databasemissingfile");
6427 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6429 # The database has invalid permissions set, so return
6432 kiriwrite_error("databaseinvalidpermissions");
6436 # Get the database information.
6438 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6440 # Check if any errors had occured while getting the database
6443 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6445 # A database error has occured so return an error and
6446 # also the extended error information.
6448 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6452 # Get the values needed from the kiriwrite_database_info table.
6454 my $database_oldname = $database_info{"DatabaseName"};
6455 my $database_olddescription = $database_info{"Description"};
6456 my $database_notes = $database_info{"Notes"};
6457 my $database_categories = $database_info{"Categories"};
6459 # Disconnect from the database server.
6461 $kiriwrite_dbmodule->disconnect();
6463 # Print out the form for editing a database's settings.
6465 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{editdatabase}, $database_oldname), { Style => "pageheader" });
6466 $kiriwrite_presmodule->addlinebreak();
6467 $kiriwrite_presmodule->addlinebreak();
6468 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6469 $kiriwrite_presmodule->addhiddendata("mode", "db");
6470 $kiriwrite_presmodule->addhiddendata("action", "edit");
6471 $kiriwrite_presmodule->addhiddendata("database", $database_shortname);
6472 $kiriwrite_presmodule->addhiddendata("confirm", "1");
6473 $kiriwrite_presmodule->addhiddendata("olddatabasename", $database_oldname);
6474 $kiriwrite_presmodule->addhiddendata("olddatabasedescription", $database_olddescription);
6476 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
6477 $kiriwrite_presmodule->startheader();
6478 $kiriwrite_presmodule->addheader("Setting", { Style => "tablecellheader" });
6479 $kiriwrite_presmodule->addheader("Value", { Style => "tablecellheader" });
6480 $kiriwrite_presmodule->endheader();
6482 $kiriwrite_presmodule->startrow();
6483 $kiriwrite_presmodule->addcell("tablecell1");
6484 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
6485 $kiriwrite_presmodule->endcell();
6486 $kiriwrite_presmodule->addcell("tablecell2");
6487 $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256, Value => $database_oldname } );
6488 $kiriwrite_presmodule->endcell();
6489 $kiriwrite_presmodule->endrow();
6491 $kiriwrite_presmodule->startrow();
6492 $kiriwrite_presmodule->addcell("tablecell1");
6493 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
6494 $kiriwrite_presmodule->endcell();
6495 $kiriwrite_presmodule->addcell("tablecell2");
6496 $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512, Value => $database_olddescription } );
6497 $kiriwrite_presmodule->endcell();
6498 $kiriwrite_presmodule->endrow();
6500 $kiriwrite_presmodule->startrow();
6501 $kiriwrite_presmodule->addcell("tablecell1");
6502 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
6503 $kiriwrite_presmodule->endcell();
6504 $kiriwrite_presmodule->addcell("tablecell2");
6505 $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512, Value => $database_categories } );
6506 $kiriwrite_presmodule->endcell();
6507 $kiriwrite_presmodule->endrow();
6509 $kiriwrite_presmodule->startrow();
6510 $kiriwrite_presmodule->addcell("tablecell1");
6511 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
6512 $kiriwrite_presmodule->endcell();
6513 $kiriwrite_presmodule->addcell("tablecell2");
6514 $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => 50, Rows => 10, Value => $database_notes } );
6515 $kiriwrite_presmodule->endcell();
6516 $kiriwrite_presmodule->endrow();
6518 $kiriwrite_presmodule->startrow();
6519 $kiriwrite_presmodule->addcell("tablecell1");
6520 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
6521 $kiriwrite_presmodule->endcell();
6522 $kiriwrite_presmodule->addcell("tablecell2");
6523 $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32, Value => $database_shortname } );
6524 $kiriwrite_presmodule->endcell();
6525 $kiriwrite_presmodule->endrow();
6527 $kiriwrite_presmodule->endtable();
6529 $kiriwrite_presmodule->addlinebreak();
6531 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{editdatabasebutton});
6532 $kiriwrite_presmodule->addtext(" | ");
6533 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
6534 $kiriwrite_presmodule->addtext(" | ");
6535 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6537 $kiriwrite_presmodule->endform();
6539 return $kiriwrite_presmodule->grab();
6543 # The interpreter should not be here. So return an error saying invalid variable.
6545 kiriwrite_error("invalidvariable");
6549 sub kiriwrite_database_delete{
6550 #################################################################################
6551 # kiriwrite_database_delete: Deletes an database. #
6555 # kiriwrite_database_delete(filename, [confirm]); #
6557 # filename Specifies the filename for the database to be deleted. #
6558 # confirm Confirms the action to delete a database. #
6559 #################################################################################
6561 my ($database_filename, $database_confirm) = @_;
6563 # Check if the confirm value is blank and if it is then set the
6564 # confirm value to 0.
6566 if (!$database_confirm){
6568 $database_confirm = 0;
6572 # Connect to the database server.
6574 $kiriwrite_dbmodule->connect();
6576 # Check if any errors occured while connecting to the database server.
6578 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6580 # A database connection error has occured so return
6583 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6587 # Check if the database filename given is valid and return an error
6590 kiriwrite_variablecheck($database_filename, "filename", "", 0);
6592 # Check if the request to delete a database has been confirmed. If it has,
6593 # then delete the database itself.
6595 if ($database_confirm eq 1){
6596 # There is a value in the confirm variable of the HTTP query.
6598 # Select the database to delete and get the database name.
6600 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
6602 # Check if any error occured while selecting the database.
6604 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6606 # The database does not exist so return an error.
6608 kiriwrite_error("databasemissingfile");
6610 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6612 # The database has invalid permissions set so return
6615 kiriwrite_error("databaseinvalidpermissions");
6619 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6621 # Check if any errors have occured while getting the database
6624 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6626 # A database error has occured so return an error with
6627 # the extended error information.
6629 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6633 my $database_name = $database_info{"DatabaseName"};
6635 # Delete the selected database.
6637 $kiriwrite_dbmodule->deletedatabase({ DatabaseName => $database_filename });
6639 # Check if any error occured while deleting the database.
6641 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6643 # The database does not exist so return an error.
6645 kiriwrite_error("databasemissingfile");
6647 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6649 # The database has invalid permissions set so return
6652 kiriwrite_error("databaseinvalidpermissions");
6656 # Disconnect from the database server.
6658 $kiriwrite_dbmodule->disconnect();
6660 # Write a message saying that the database has been deleted.
6662 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deleteddatabase}, { Style => "pageheader" });
6663 $kiriwrite_presmodule->addlinebreak();
6664 $kiriwrite_presmodule->addlinebreak();
6665 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deleteddatabasemessage}, $database_name));
6666 $kiriwrite_presmodule->addlinebreak();
6667 $kiriwrite_presmodule->addlinebreak();
6668 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6670 return $kiriwrite_presmodule->grab();
6674 # The action has not been confirmed, so write out a form asking the
6677 # Get the database name.
6679 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
6681 # Check if any error occured while selecting the database.
6683 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6685 # The database does not exist so return an error.
6687 kiriwrite_error("databasemissingfile");
6689 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6691 # The database has invalid permissions set so return
6694 kiriwrite_error("databaseinvalidpermissions");
6699 # Check if any errors have occured.
6701 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6703 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6705 # A database error has occured so return an error with
6706 # the extended error information.
6708 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6712 my $database_name = $database_info{"DatabaseName"};
6714 # Disconnect from the database server.
6716 $kiriwrite_dbmodule->disconnect();
6718 # Write out the form to ask the user to confirm the deletion of the
6719 # selected database.
6721 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deletedatabase}, { Style => "pageheader" });
6722 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6723 $kiriwrite_presmodule->addhiddendata("mode", "db");
6724 $kiriwrite_presmodule->addhiddendata("action", "delete");
6725 $kiriwrite_presmodule->addhiddendata("database", $database_filename);
6726 $kiriwrite_presmodule->addhiddendata("confirm", "1");
6727 $kiriwrite_presmodule->addlinebreak();
6728 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deletedatabasemessage}, $database_name));
6729 $kiriwrite_presmodule->addlinebreak();
6730 $kiriwrite_presmodule->addlinebreak();
6731 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{deletedatabasebutton});
6732 $kiriwrite_presmodule->addtext(" | ");
6733 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{deletedatabasereturn} });
6734 $kiriwrite_presmodule->endform();
6736 return $kiriwrite_presmodule->grab();
6740 sub kiriwrite_database_list{
6741 #################################################################################
6742 # kiriwrite_database_list: Lists the databases available. #
6746 # kiriwrite_database_list(); #
6747 #################################################################################
6749 # Connect to the database server.
6751 $kiriwrite_dbmodule->connect();
6753 # Check if any errors occured while connecting to the database server.
6755 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6757 # A database connection error has occured so return
6760 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6764 # Get the list of available databases and process any errors that
6765 # might have occured.
6767 my @database_list = $kiriwrite_dbmodule->getdblist();
6769 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
6771 # The database directory is missing so return an error.
6773 kiriwrite_error("datadirectorymissing");
6775 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
6777 # The database directory has invalid permissions set so return
6780 kiriwrite_error("datadirectoryinvalidpermissions");
6784 # Declare the following variables that are going to be used before using
6785 # the foreach function.
6787 my ($database_info, %database_info);
6789 my @permissions_list;
6790 my $database_count = 0;
6791 my $database_filename = "";
6792 my $database_filename_friendly = "";
6793 my $database_filename_length = 0;
6794 my $database_name = "";
6795 my $database_description = "";
6796 my $database_permissions = "";
6797 my $nodescription = 0;
6800 my $table_style = 0;
6801 my $table_style_name = "";
6803 # Begin creating the table for the list of databases.
6805 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
6806 $kiriwrite_presmodule->addlinebreak();
6807 $kiriwrite_presmodule->addlinebreak();
6808 $kiriwrite_presmodule->starttable("", { CellPadding => "5", CellSpacing => "0" });
6809 $kiriwrite_presmodule->startheader();
6810 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
6811 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
6812 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databaseoptions}, { Style => "tablecellheader" });
6813 $kiriwrite_presmodule->endheader();
6815 foreach $data_file (@database_list){
6817 # Select the database.
6819 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
6821 # Check if any error occured while selecting the database.
6823 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6825 # The database does not exist, so process the next
6830 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6832 # The database has invalid permissions settings, so
6833 # add the database to the list of databases with
6834 # invalid permissions set and process the next
6837 push(@permissions_list, $data_file);
6842 # Get information about the database.
6844 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6846 # Check if any error occured while getting information from the
6849 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6851 # A database error has occured, add the database and specific
6852 # error message to the list of databases with errors and
6853 # process the next database.
6855 push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
6860 $database_name = $database_info{"DatabaseName"};
6861 $database_description = $database_info{"Description"};
6863 # Check the style to be used with.
6865 if ($table_style eq 0){
6867 # Use the first style and set the style value
6868 # to use the next style, the next time the
6869 # if statement is checked.
6871 $table_style_name = "tablecell1";
6875 # Use the second style and set the style
6876 # value to use the first style, the next
6877 # time if statement is checked.
6879 $table_style_name = "tablecell2";
6883 # Create a friendly name for the database.
6885 $database_filename_friendly = $data_file;
6887 # Append the database information to the table.
6889 $kiriwrite_presmodule->startrow();
6890 $kiriwrite_presmodule->addcell($table_style_name);
6892 if (!$database_name){
6893 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
6895 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_filename_friendly, { Text => $database_name });
6898 $kiriwrite_presmodule->endcell();
6899 $kiriwrite_presmodule->addcell($table_style_name);
6901 if (!$database_description){
6902 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
6904 $kiriwrite_presmodule->addtext($database_description);
6907 $kiriwrite_presmodule->endcell();
6908 $kiriwrite_presmodule->addcell($table_style_name);
6909 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=edit&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{edit} });
6910 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=compile&type=single&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{compile} });
6911 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=delete&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{delete} });
6912 $kiriwrite_presmodule->endrow();
6920 $kiriwrite_presmodule->endtable();
6922 # Disconnect from the database server.
6924 $kiriwrite_dbmodule->disconnect();
6926 # Check if there are no valid databases are if there is no
6927 # valid databases then write a message saying that no
6928 # valid databases are available.
6930 if ($database_count eq 0){
6932 $kiriwrite_presmodule->clear();
6933 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
6934 $kiriwrite_presmodule->addlinebreak();
6935 $kiriwrite_presmodule->addlinebreak();
6936 $kiriwrite_presmodule->startbox("errorbox");
6937 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{nodatabasesavailable});
6938 $kiriwrite_presmodule->endbox();
6942 # Check if any databases with problems have appeared and if they
6943 # have, print out a message saying which databases have problems.
6945 if (@permissions_list){
6947 $kiriwrite_presmodule->addlinebreak();
6948 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
6949 $kiriwrite_presmodule->addlinebreak();
6950 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
6951 $kiriwrite_presmodule->addlinebreak();
6953 foreach $data_file (@permissions_list){
6954 $kiriwrite_presmodule->addlinebreak();
6955 $kiriwrite_presmodule->addtext($data_file);
6958 $kiriwrite_presmodule->addlinebreak();
6964 $kiriwrite_presmodule->addlinebreak();
6965 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
6966 $kiriwrite_presmodule->addlinebreak();
6967 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
6968 $kiriwrite_presmodule->addlinebreak();
6970 foreach $data_file (@error_list){
6971 $kiriwrite_presmodule->addlinebreak();
6972 $kiriwrite_presmodule->addtext($data_file);
6975 $kiriwrite_presmodule->addlinebreak();
6979 return $kiriwrite_presmodule->grab(); # Return to the main part of the script with the processed information.
6984 sub kiriwrite_filter_list{
6985 #################################################################################
6986 # kiriwrite_filter_list: Lists the filters that will be used when compiling a #
6991 # kiriwrite_filter_list(); #
6992 #################################################################################
6994 my $filtersdb_notexist = 0;
6996 # Connect to the database server.
6998 $kiriwrite_dbmodule->connect();
7000 # Check if any errors occured while connecting to the database server.
7002 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7004 # A database connection error has occured so return
7007 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7011 # Connect to the filter database.
7013 $kiriwrite_dbmodule->connectfilter();
7015 # Check if any error has occured while connecting to the filter
7018 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7020 # The filter database does not exist.
7022 $filtersdb_notexist = 1;
7024 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7026 # The filter database has invalid permissions set so return
7029 kiriwrite_error("filtersdbpermissions");
7033 # Define some variables required for processing the filters list.
7037 my @database_filters;
7038 my $blankfindfilter = 0;
7039 my $filterswarning = "";
7041 my $filter_count = 0;
7042 my $filter_style = 0;
7043 my $filter_style_name = "";
7045 tie(%filter_list, 'Tie::IxHash');
7047 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{viewfilters}, { Style => "pageheader" });
7048 $kiriwrite_presmodule->addlinebreak();
7049 $kiriwrite_presmodule->addlinebreak();
7051 # If the filter database exists then get the list of filters,
7052 # otherwise write a message saying that the filter database
7053 # does not exist and will be created when a filter is added.
7055 if ($filtersdb_notexist eq 0){
7057 # Get the list of available filters.
7059 @database_filters = $kiriwrite_dbmodule->getfilterlist();
7061 # Check if any errors occured while getting the list of filters.
7063 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7065 # A database error has occured with the filter database.
7067 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7071 # Process each filter getting the priority, find setting and
7074 foreach $filter (@database_filters){
7076 # Get the information about the filter.
7078 %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
7080 # Check if any errors occured while getting the filter information.
7082 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7084 # A database error occured while using the filter database.
7086 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7088 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7090 # The filter does not exist so process the next filter.
7096 # Check if the find filter is blank.
7098 if (!$filter_info{"FilterFind"}){
7100 # The find filter is blank, so set the value to write a warning
7101 # message saying that a find filter given is blank.
7103 $blankfindfilter = 1;
7107 $filter_list{$filter_count}{ID} = $filter_info{"FilterID"};
7108 $filter_list{$filter_count}{Priority} = $filter_info{"FilterPriority"};
7109 $filter_list{$filter_count}{Find} = $filter_info{"FilterFind"};
7110 $filter_list{$filter_count}{Replace} = $filter_info{"FilterReplace"};
7111 $filter_list{$filter_count}{Notes} = $filter_info{"FilterNotes"};
7117 # Check if there are filters in the filter database and
7118 # write a message if there isn't.
7120 if ($filter_count eq 0){
7122 # There are no filters in the filter database.
7124 $filterswarning = $kiriwrite_lang->{filter}->{nofiltersavailable};
7130 # Check if the database wasn't found and if it
7131 # wasn't then write a message saying that the
7132 # database will be created when a filter is
7135 if ($filtersdb_notexist eq 1){
7137 # The filter database doesn't exist so write
7140 $filterswarning = $kiriwrite_lang->{filter}->{filterdatabasedoesnotexist};
7145 # Check if there is a warning message and if
7146 # there is then write that warning message
7147 # else write the list of filters.
7149 if ($filterswarning){
7151 $kiriwrite_presmodule->startbox("errorbox");
7152 $kiriwrite_presmodule->addtext($filterswarning);
7153 $kiriwrite_presmodule->endbox();
7157 # The filter database exists so write out the
7160 if ($blankfindfilter eq 1){
7162 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{filter}->{warningtitle});
7163 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{blankfindfilters});
7164 $kiriwrite_presmodule->addtext();
7165 $kiriwrite_presmodule->addlinebreak();
7166 $kiriwrite_presmodule->addlinebreak();
7170 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7172 $kiriwrite_presmodule->startheader();
7173 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{priority}, { Style => "tablecellheader" });
7174 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{findsetting}, { Style => "tablecellheader" });
7175 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{replacesetting}, { Style => "tablecellheader" });
7176 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
7177 $kiriwrite_presmodule->endheader();
7179 foreach $filter (keys %filter_list){
7181 # Check which style should be used.
7183 if ($filter_style eq 0){
7185 $filter_style_name = "tablecell1";
7190 $filter_style_name = "tablecell2";
7195 $kiriwrite_presmodule->startrow();
7196 $kiriwrite_presmodule->addcell($filter_style_name);
7197 $kiriwrite_presmodule->addtext($filter_list{$filter}{Priority});
7198 $kiriwrite_presmodule->endcell();
7199 $kiriwrite_presmodule->addcell($filter_style_name);
7201 # Check if the find filter is blank.
7203 if (!$filter_list{$filter}{Find}){
7205 # The find filter is blank.
7207 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{filter}->{blankfindsetting});
7211 # The find filter is not blank.
7213 $kiriwrite_presmodule->addtext($filter_list{$filter}{Find});
7217 $kiriwrite_presmodule->endcell();
7218 $kiriwrite_presmodule->addcell($filter_style_name);
7220 # Check if the replace filter is blank.
7222 if (!$filter_list{$filter}{Replace}){
7224 # The replace filter is blank.
7226 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{filter}->{blankreplacesetting});
7230 # The replace filter is not blank.
7232 $kiriwrite_presmodule->addtext($filter_list{$filter}{Replace});
7236 $kiriwrite_presmodule->endcell();
7237 $kiriwrite_presmodule->addcell($filter_style_name);
7238 $kiriwrite_presmodule->addlink("?mode=filter&action=edit&filter=" . $filter_list{$filter}{ID}, { Text => $kiriwrite_lang->{options}->{edit} });
7239 $kiriwrite_presmodule->addlink("?mode=filter&action=delete&filter=" . $filter_list{$filter}{ID}, { Text => $kiriwrite_lang->{options}->{delete} });
7240 $kiriwrite_presmodule->endcell();
7241 $kiriwrite_presmodule->endrow();
7245 $kiriwrite_presmodule->endtable();
7249 # Disconnect from the filter database.
7251 $kiriwrite_dbmodule->disconnectfilter();
7253 # Disconnect from the database server.
7255 $kiriwrite_dbmodule->disconnect();
7257 return $kiriwrite_presmodule->grab();
7261 sub kiriwrite_filter_add{
7262 #################################################################################
7263 # kiriwrite_filter_add: Adds a filter to the filter list. #
7267 # kiriwrite_filter_add(filterfind, filterreplace, filterpriority, #
7268 # filternotes, [confirm]); #
7270 # filterfind Specifies the new word(s) to find. #
7271 # filterreplace Specifies the new word(s) to replace. #
7272 # filterpriority Specifies the new priority to use. #
7273 # filternotes Specifies the new notes to use. #
7274 # confirm Confirms the action to add a filter. #
7275 #################################################################################
7277 # Get the values that have been passed to the subroutine.
7279 my ($filter_new_find, $filter_new_replace, $filter_new_priority, $filter_new_notes, $confirm) = @_;
7281 # Check the confirm value to make sure it is no more than
7282 # one character long.
7284 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
7288 # The confirm value is undefined, so set the
7289 # value of the confirm integer to '0'.
7297 # The confirm integer is '1', so add the word
7298 # to the filter list.
7300 # First, check the variables recieved are UTF8
7303 kiriwrite_variablecheck($filter_new_find, "utf8", 0, 0);
7304 kiriwrite_variablecheck($filter_new_replace, "utf8", 0, 0);
7305 kiriwrite_variablecheck($filter_new_priority, "utf8", 0, 0);
7306 kiriwrite_variablecheck($filter_new_notes, "utf8", 0, 0);
7308 # Convert the UTF8 values so that the length can
7311 $filter_new_find = kiriwrite_utf8convert($filter_new_find);
7312 $filter_new_replace = kiriwrite_utf8convert($filter_new_replace);
7313 $filter_new_priority = kiriwrite_utf8convert($filter_new_priority);
7314 $filter_new_notes = kiriwrite_utf8convert($filter_new_notes);
7316 # Check if the find filter is blank and return an error
7319 if (!$filter_new_find){
7321 # The find filter given is blank so return an
7324 kiriwrite_error("blankfindfilter");
7328 if (!$filter_new_priority){
7330 # The filter priority is blank so set it
7333 $filter_new_priority = 1;
7337 # Check the length and contents of the values given
7338 # to make sure they are valid.
7340 my $filterfind_maxlength_check = kiriwrite_variablecheck($filter_new_find, "maxlength", 1024, 1);
7341 my $filterreplace_maxlength_check = kiriwrite_variablecheck($filter_new_replace, "maxlength", 1024, 1);
7342 my $filterpriority_maxlength_check = kiriwrite_variablecheck($filter_new_priority, "maxlength", 5, 1);
7343 my $filterpriority_numbers_check = kiriwrite_variablecheck($filter_new_priority, "numbers", 0, 1);
7345 # Check if the result of the tests to see if they
7348 if ($filterfind_maxlength_check eq 1){
7350 # The find filter is too long, so return
7353 kiriwrite_error("findfiltertoolong");
7357 if ($filterreplace_maxlength_check eq 1){
7359 # The replace filter is too long, so
7362 kiriwrite_error("replacefiltertoolong");
7366 if ($filterpriority_maxlength_check eq 1){
7368 # The length of the filter priority
7369 # given is too long, so return an
7372 kiriwrite_error("filterprioritytoolong");
7376 if ($filterpriority_numbers_check eq 1){
7378 # The priority of the filter given
7379 # contains characters other than
7382 kiriwrite_error("filterpriorityinvalidchars");
7386 # Check if the filter priority is less than 1
7387 # and more than 10000 and return an error
7390 if ($filter_new_priority < 1 || $filter_new_priority > 50000){
7392 # The filter priority is less than 1 and
7393 # more than 10000, so return an error.
7395 kiriwrite_error("filterpriorityinvalid");
7399 # Connect to the database server.
7401 $kiriwrite_dbmodule->connect();
7403 # Check if any errors occured while connecting to the database server.
7405 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7407 # A database connection error has occured so return
7410 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7414 # Connect to the filter database.
7416 $kiriwrite_dbmodule->connectfilter(1);
7418 # Check if any error has occured while connecting to the filter
7421 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7423 # The filter database does not exist.
7425 kiriwrite_error("filtersdbmissing");
7427 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7429 # The filter database has invalid permissions set so return
7432 kiriwrite_error("filtersdbpermissions");
7436 # Add the filter to the filter database.
7438 $kiriwrite_dbmodule->addfilter({ FindFilter => $filter_new_find, ReplaceFilter => $filter_new_replace, Priority => $filter_new_priority, Notes => $filter_new_notes});
7440 # Check if any errors have occured while adding the filter.
7442 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7444 # The filter database has invalid permissions set so return
7447 kiriwrite_error("filtersdbpermissions");
7449 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseUncreatable"){
7451 # The filter database is uncreatable so return an error.
7453 kiriwrite_error("filterdatabase");
7455 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7457 # A database error with the filter database has occured so return
7458 # an error with the extended error information.
7460 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7464 # Disconnect from the filter database.
7466 $kiriwrite_dbmodule->disconnectfilter();
7468 # Disconnect from the database server.
7470 $kiriwrite_dbmodule->disconnect();
7472 # Write out a message saying that the filter was added to the
7475 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{filteradded}, { Style => "pageheader" });
7476 $kiriwrite_presmodule->addlinebreak();
7477 $kiriwrite_presmodule->addlinebreak();
7478 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{filteraddedmessage});
7479 $kiriwrite_presmodule->addlinebreak();
7480 $kiriwrite_presmodule->addlinebreak();
7481 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7483 return $kiriwrite_presmodule->grab();
7485 } elsif ($confirm ne 0) {
7487 # The confirm integer is another value (which
7488 # it shouldn't be) so return an error.
7490 kiriwrite_error("invalidvalue");
7494 # The confirm integer was blank so print out a form
7495 # for adding a new filter.
7497 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{addfilter}, { Style => "pageheader" });
7498 $kiriwrite_presmodule->addlinebreak();
7499 $kiriwrite_presmodule->addlinebreak();
7500 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
7501 $kiriwrite_presmodule->addhiddendata("mode", "filter");
7502 $kiriwrite_presmodule->addhiddendata("action", "add");
7503 $kiriwrite_presmodule->addhiddendata("confirm", 1);
7504 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7506 $kiriwrite_presmodule->startheader();
7507 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
7508 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
7509 $kiriwrite_presmodule->endheader();
7511 $kiriwrite_presmodule->startrow();
7512 $kiriwrite_presmodule->addcell("tablecell1");
7513 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
7514 $kiriwrite_presmodule->endcell();
7515 $kiriwrite_presmodule->addcell("tablecell2");
7516 $kiriwrite_presmodule->addinputbox("findword", { Size => 64, MaxLength => 1024 });
7517 $kiriwrite_presmodule->endcell();
7518 $kiriwrite_presmodule->endrow();
7520 $kiriwrite_presmodule->startrow();
7521 $kiriwrite_presmodule->addcell("tablecell1");
7522 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{replacefilter});
7523 $kiriwrite_presmodule->endcell();
7524 $kiriwrite_presmodule->addcell("tablecell2");
7525 $kiriwrite_presmodule->addinputbox("replaceword", { Size => 64, MaxLength => 1024 });
7526 $kiriwrite_presmodule->endcell();
7527 $kiriwrite_presmodule->endrow();
7529 $kiriwrite_presmodule->startrow();
7530 $kiriwrite_presmodule->addcell("tablecell1");
7531 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
7532 $kiriwrite_presmodule->endcell();
7533 $kiriwrite_presmodule->addcell("tablecell2");
7534 $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5 });
7535 $kiriwrite_presmodule->startlist();
7536 $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
7537 $kiriwrite_presmodule->endlist();
7538 $kiriwrite_presmodule->endcell();
7539 $kiriwrite_presmodule->endrow();
7541 $kiriwrite_presmodule->startrow();
7542 $kiriwrite_presmodule->addcell("tablecell1");
7543 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
7544 $kiriwrite_presmodule->endcell();
7545 $kiriwrite_presmodule->addcell("tablecell2");
7546 $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10 });
7547 $kiriwrite_presmodule->endcell();
7548 $kiriwrite_presmodule->endrow();
7550 $kiriwrite_presmodule->endtable();
7552 $kiriwrite_presmodule->addlinebreak();
7553 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{addfilterbutton});
7554 $kiriwrite_presmodule->addtext(" | ");
7555 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
7556 $kiriwrite_presmodule->addtext(" | ");
7557 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7559 $kiriwrite_presmodule->endform();
7561 return $kiriwrite_presmodule->grab();
7565 sub kiriwrite_filter_edit{
7566 #################################################################################
7567 # kiriwrite_filter_edit: Edits a filter from the filter list. #
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");
7790 # Edit the selected filter in the filter database.
7792 $kiriwrite_dbmodule->editfilter({ FilterID => $filter_id, NewFindFilter => $filter_new_find, NewReplaceFilter => $filter_new_replace, NewFilterPriority => $filter_new_priority, NewFilterNotes => $filter_new_notes });
7794 # Check if any errors occured while editing the filter.
7796 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7798 # The filter database has invalid permissions set so return
7801 kiriwrite_error("filtersdbpermissions");
7803 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7805 # A database error has occured while using the filter database
7806 # so return an error.
7808 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7810 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7812 # The specified filter does not exist so return an error.
7814 kiriwrite_error("filterdoesnotexist");
7818 # Disconnect from the filter database.
7820 $kiriwrite_dbmodule->disconnectfilter();
7822 # Disconnect from the database server.
7824 $kiriwrite_dbmodule->disconnect();
7826 # Write a message saying that the filter was edited.
7828 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfilter}, { Style => "pageheader" });
7829 $kiriwrite_presmodule->addlinebreak();
7830 $kiriwrite_presmodule->addlinebreak();
7831 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfiltermessage});
7832 $kiriwrite_presmodule->addlinebreak();
7833 $kiriwrite_presmodule->addlinebreak();
7834 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist}});
7836 return $kiriwrite_presmodule->grab();
7838 } elsif ($confirm eq 0){
7840 # The action to edit a filter has not been confirmed
7841 # so write a form for editing the filter with.
7843 # Connect to the database server.
7845 $kiriwrite_dbmodule->connect();
7847 # Check if any errors occured while connecting to the database server.
7849 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7851 # A database connection error has occured so return
7854 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7858 # Connect to the database server.
7860 $kiriwrite_dbmodule->connect();
7862 # Check if any errors occured while connecting to the database server.
7864 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7866 # A database connection error has occured so return
7869 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7873 # Connect to the filter database.
7875 $kiriwrite_dbmodule->connectfilter();
7877 # Check if any error has occured while connecting to the filter
7880 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7882 # The filter database does not exist.
7884 kiriwrite_error("filtersdbmissing");
7886 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7888 # The filter database has invalid permissions set so return
7891 kiriwrite_error("filtersdbpermissions");
7895 # Get information about the filter.
7897 my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
7899 # Check if any errors occured while getting information about the filter.
7901 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7903 # A database error occured while using the filter database so
7906 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7908 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7910 # The filter does not exist so return an error.
7912 kiriwrite_error("filterdoesnotexist");
7916 # Get the required information.
7918 $filter_priority = $filter_info{"FilterPriority"};
7919 $filter_find = $filter_info{"FilterFind"};
7920 $filter_replace = $filter_info{"FilterReplace"};
7921 $filter_notes = $filter_info{"FilterNotes"};
7923 # Disconnect from the filter database.
7925 $kiriwrite_dbmodule->disconnectfilter();
7927 # Disconnect from the database server.
7929 $kiriwrite_dbmodule->disconnect();
7931 # Write out the form.
7933 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editfilter}, { Style => "pageheader" });
7934 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
7935 $kiriwrite_presmodule->addhiddendata("mode", "filter");
7936 $kiriwrite_presmodule->addhiddendata("action", "edit");
7937 $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
7938 $kiriwrite_presmodule->addhiddendata("confirm", 1);
7940 $kiriwrite_presmodule->addlinebreak();
7941 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7943 $kiriwrite_presmodule->startheader();
7944 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
7945 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
7946 $kiriwrite_presmodule->endheader();
7948 $kiriwrite_presmodule->startrow();
7949 $kiriwrite_presmodule->addcell("tablecell1");
7950 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
7951 $kiriwrite_presmodule->endcell();
7952 $kiriwrite_presmodule->addcell("tablecell2");
7953 $kiriwrite_presmodule->addinputbox("filterfind", { Size => 64, MaxLength => 1024, Value => $filter_find });
7954 $kiriwrite_presmodule->endcell();
7955 $kiriwrite_presmodule->endrow();
7957 $kiriwrite_presmodule->startrow();
7958 $kiriwrite_presmodule->addcell("tablecell1");
7959 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{replacefilter});
7960 $kiriwrite_presmodule->endcell();
7961 $kiriwrite_presmodule->addcell("tablecell2");
7962 $kiriwrite_presmodule->addinputbox("filterreplace", { Size => 64, MaxLength => 1024, Value => $filter_replace });
7963 $kiriwrite_presmodule->endcell();
7964 $kiriwrite_presmodule->endrow();
7966 $kiriwrite_presmodule->startrow();
7967 $kiriwrite_presmodule->addcell("tablecell1");
7968 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
7969 $kiriwrite_presmodule->endcell();
7970 $kiriwrite_presmodule->addcell("tablecell2");
7971 $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5, Value => $filter_priority });
7972 $kiriwrite_presmodule->startlist();
7973 $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
7974 $kiriwrite_presmodule->endlist();
7975 $kiriwrite_presmodule->endcell();
7976 $kiriwrite_presmodule->endrow();
7978 $kiriwrite_presmodule->startrow();
7979 $kiriwrite_presmodule->addcell("tablecell1");
7980 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
7981 $kiriwrite_presmodule->endcell();
7982 $kiriwrite_presmodule->addcell("tablecell2");
7983 $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10});
7984 $kiriwrite_presmodule->endcell();
7985 $kiriwrite_presmodule->endrow();
7987 $kiriwrite_presmodule->endtable();
7989 $kiriwrite_presmodule->addlinebreak();
7990 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{editfilterbutton});
7991 $kiriwrite_presmodule->addtext(" | ");
7992 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
7993 $kiriwrite_presmodule->addtext(" | ");
7994 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7996 return $kiriwrite_presmodule->grab();
8000 # A confirm value other than 0 or 1 has been
8001 # specified, so return an error.
8003 kiriwrite_error("invalidvalue");
8009 sub kiriwrite_filter_delete{
8010 #################################################################################
8011 # kiriwrite_filter_delete: Deletes a filter from the filter list. #
8015 # kiriwrite_filter_delete(number, confirm); #
8017 # number Specifies the filter line number to delete. #
8018 # confirm Confirms the deletion of the selected filter. #
8019 #################################################################################
8021 # Get the values that were passed to this subroutine.
8023 my ($filter_id, $confirm) = @_;
8025 # Check the confirm value to make sure it is no more than
8026 # one character long.
8028 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
8030 # Check if the confirm value is blank and if it is
8031 # srt the confirm value to 0.
8035 # The confirm value does not have any value
8036 # set so set it to 0.
8042 # Check if the filter identification number is blank,
8043 # contains characters other than numbers and is more
8044 # than seven characters long.
8048 # The filter identification number is blank,
8049 # so return an error.
8051 kiriwrite_error("filteridblank");
8055 my $filter_id_numbers_check = kiriwrite_variablecheck($filter_id, "numbers", 0, 1);
8057 if ($filter_id_numbers_check eq 1){
8059 # The filter identification number contains
8060 # characters other than numbers, so return
8063 kiriwrite_error("filteridinvalid");
8067 my $filter_id_maxlength_check = kiriwrite_variablecheck($filter_id, "maxlength", 7, 1);
8069 if ($filter_id_maxlength_check eq 1){
8071 # The filter identification number given
8072 # is more than seven characters long, so
8075 kiriwrite_error("filteridtoolong");
8079 # Define some values for later.
8081 my @database_filter;
8082 my $filter_exists = 0;
8084 # Check if the confirm integer has a value of '1'.
8088 # The action to delete a filter has been confirmed.
8090 # Connect to the database server.
8092 $kiriwrite_dbmodule->connect();
8094 # Check if any errors occured while connecting to the database server.
8096 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8098 # A database connection error has occured so return
8101 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8105 # Connect to the filter database.
8107 $kiriwrite_dbmodule->connectfilter();
8109 # Check if any error has occured while connecting to the filter
8112 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8114 # The filter database does not exist.
8116 kiriwrite_error("filtersdbmissing");
8118 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8120 # The filter database has invalid permissions set so return
8123 kiriwrite_error("filtersdbpermissions");
8127 # Delete the filter from the filter database.
8129 $kiriwrite_dbmodule->deletefilter({ FilterID => $filter_id });
8131 # Check if any errors occured while deleting the filter.
8133 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8135 # A database error has occured while trying to delete a filter so
8138 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8140 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8142 # The filter does not exist so return an error.
8144 kiriwrite_error("filterdoesnotexist");
8148 # Disconnect from the filter database.
8150 $kiriwrite_dbmodule->disconnectfilter();
8152 # Disconnect from the database server.
8154 $kiriwrite_dbmodule->disconnect();
8156 # Write a message saying that the filter was deleted
8157 # from the filter database.
8159 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfilter}, { Style => "pageheader" });
8160 $kiriwrite_presmodule->addlinebreak();
8161 $kiriwrite_presmodule->addlinebreak();
8162 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfiltermessage});
8163 $kiriwrite_presmodule->addlinebreak();
8164 $kiriwrite_presmodule->addlinebreak();
8165 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
8167 } elsif ($confirm eq 0) {
8169 # Connect to the database server.
8171 $kiriwrite_dbmodule->connect();
8173 # Check if any errors occured while connecting to the database server.
8175 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8177 # A database connection error has occured so return
8180 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8184 # Connect to the filter database.
8186 $kiriwrite_dbmodule->connectfilter();
8188 # Check if any error has occured while connecting to the filter
8191 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8193 # The filter database does not exist.
8195 kiriwrite_error("filtersdbmissing");
8197 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8199 # The filter database has invalid permissions set so return
8202 kiriwrite_error("filtersdbpermissions");
8206 # Get information about the filter (to check if it exists).
8208 my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
8210 # Check if any errors occured while getting information about the filter.
8212 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8214 # A database error occured while using the filter database so
8217 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8219 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8221 # The filter does not exist so return an error.
8223 kiriwrite_error("filterdoesnotexist");
8227 # Disconnect from the filter database.
8229 $kiriwrite_dbmodule->disconnectfilter();
8231 # Disconnect from the database
8233 # The confirm integer is '0', so continue write out
8234 # a form asking the user to confirm the deletion
8237 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefilter}, { Style => "pageheader" });
8238 $kiriwrite_presmodule->addlinebreak();
8239 $kiriwrite_presmodule->addlinebreak();
8240 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefiltermessage});
8241 $kiriwrite_presmodule->addlinebreak();
8242 $kiriwrite_presmodule->addlinebreak();
8243 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
8244 $kiriwrite_presmodule->addhiddendata("mode", "filter");
8245 $kiriwrite_presmodule->addhiddendata("action", "delete");
8246 $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
8247 $kiriwrite_presmodule->addhiddendata("confirm", 1);
8248 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{deletefilterbutton});
8249 $kiriwrite_presmodule->addtext(" | ");
8250 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{deletefilterreturn} });
8251 $kiriwrite_presmodule->endform();
8255 kiriwrite_error("invalidvalue");
8259 return $kiriwrite_presmodule->grab();
8263 sub kiriwrite_compile_makepages{
8264 #################################################################################
8265 # kiriwrite_compile_makepages: Compile the selected pages and place them in the #
8266 # specified output directory. #
8270 # kiriwrite_compile_makepages(type, selectedlist, confirm); #
8272 # type Specifies if single or multiple databases are to be compiled. #
8273 # confirm Specifies if the action to compile the databases should really #
8275 # selectedlist Specifies the databases to compile from as an array. #
8276 #################################################################################
8278 # Get the values that have been passed to the subroutine.
8280 my ($type, $confirm, @selectedlist) = @_;
8282 # Check if the confirm value is more than one
8285 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
8287 # Check if the confirm value is blank and if it
8288 # is then set the confirm value to 0.
8292 # The confirm value is blank, so set the
8293 # confirm value to 0.
8299 # Check if there are any databases selected
8300 # and return an error if there isn't.
8302 if (!@selectedlist){
8304 # There are no databases in the array
8305 # so return an error.
8307 kiriwrite_error("nodatabaseselected");
8311 # Check if the type given is no more than
8312 # 7 characters long.
8314 my $type_maxlength_check = kiriwrite_variablecheck($type, "maxlength", 8, 1);
8316 if ($type_maxlength_check eq 1){
8318 # The type length given is too long so
8321 kiriwrite_error("variabletoolong");
8325 # Check if the action to compile the databases
8326 # has been confirmed.
8330 # The action to compile the datavases has
8333 # Define some variables for later.
8347 my @pagedirectories;
8348 my @database_filters;
8349 my $warning_count = 0;
8350 my $error_count = 0;
8351 my $pages_count = 0;
8353 my $filters_count = 0;
8354 my $filters_find_blank_warning = 0;
8360 my $page_filename_check;
8361 my $page_filename_char = "";
8362 my $page_filename_directory;
8363 my $page_filename_length = 0;
8364 my $page_filename_seek = 0;
8365 my $page_filename_dircount = 0;
8366 my $page_filename_exists = 0;
8367 my $page_filename_permissions = 0;
8368 my $page_directory_name;
8369 my $page_directory_path;
8371 my $page_description;
8376 my $page_lastmodified;
8379 my $page_autosection;
8382 my $database_filename_check = 0;
8383 my $database_maxlength_check = 0;
8384 my $output_exists = 0;
8385 my $output_permissions = 0;
8386 my $filters_exists = 0;
8387 my $filters_permissions = 0;
8388 my $filters_skip = 0;
8390 my $templates_skip = 0;
8391 my $information_prefix = $kiriwrite_lang->{compile}->{informationprefix};
8392 my $error_prefix = $kiriwrite_lang->{compile}->{errorprefix};
8393 my $warning_prefix = $kiriwrite_lang->{compile}->{warningprefix};
8394 my $filehandle_page;
8396 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabases}, { Style => "pageheader" });
8397 $kiriwrite_presmodule->addlinebreak();
8398 $kiriwrite_presmodule->addlinebreak();
8399 $kiriwrite_presmodule->startbox("datalist");
8401 # Check if the output directory exists and has
8402 # valid permissions set.
8404 $output_exists = kiriwrite_fileexists($kiriwrite_config{'directory_data_output'});
8406 if ($output_exists ne 0){
8408 # The output directory does not exist so
8411 kiriwrite_error("outputdirectorymissing");
8415 $output_permissions = kiriwrite_filepermissions($kiriwrite_config{'directory_data_output'}, 1, 1);
8417 if ($output_permissions ne 0){
8419 # The output directory has invalid
8420 # permissions set so return an error.
8422 kiriwrite_error("outputdirectoryinvalidpermissions");
8426 # Connect to the database server.
8428 $kiriwrite_dbmodule->connect();
8430 # Check if any errors occured while connecting to the database server.
8432 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8434 # A database connection error has occured so return
8437 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8441 # Connect to the filter database.
8443 $kiriwrite_dbmodule->connectfilter();
8445 # Check if any error has occured while connecting to the filter
8448 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8450 # The filter database does not exist so write a warning message.
8452 $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{filterdatabasemissing});
8453 $kiriwrite_presmodule->addlinebreak();
8457 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8459 # The filter database has invalid permissions set so write a
8462 $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{filterdatabasepermissions});
8463 $kiriwrite_presmodule->addlinebreak();
8469 # Load the filter database (if the filters skip
8470 # value isn't set to 1).
8472 if ($filters_skip eq 0){
8474 # Get the list of available filters.
8476 @database_filters = $kiriwrite_dbmodule->getfilterlist();
8478 # Check if any errors occured while getting the list of filters.
8480 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8482 # A database error has occured with the filter database.
8484 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8485 $kiriwrite_presmodule->addlinebreak();
8490 # Check if the filters skip value is set to 0
8491 # before executing the query.
8493 if ($filters_skip eq 0){
8495 foreach $filter (@database_filters){
8497 # Get the filter information.
8499 %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
8501 # Check if any errors occured while getting the filter information.
8503 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8505 # A database error occured while using the filter database.
8507 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8508 $kiriwrite_presmodule->addlinebreak();
8512 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8514 # The filter does not exist so process the next filter.
8520 # Check if the find filter is blank and
8521 # if it is then write a warning message.
8523 if (!$filter_info{"FilterFind"}){
8525 if ($filters_find_blank_warning ne 1){
8527 $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{findfilterblank});
8528 $kiriwrite_presmodule->addlinebreak();
8529 $filters_find_blank_warning = 1;
8535 # Add each find and replace filter.
8537 $findfilter[$filters_count] = $filter_info{"FilterFind"};
8538 $replacefilter[$filters_count] = $filter_info{"FilterReplace"};
8546 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishfilterdatabase});
8547 $kiriwrite_presmodule->addlinebreak();
8553 # Disconnect from the filter database.
8555 $kiriwrite_dbmodule->disconnectfilter();
8557 # Connect to the template database.
8559 $kiriwrite_dbmodule->connecttemplate();
8561 # Check if any errors occured while connecting to the template database.
8563 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
8565 # The template database does not exist so set the template
8568 $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{templatedatabasemissing});
8569 $kiriwrite_presmodule->addlinebreak();
8570 $templates_skip = 1;
8573 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
8575 # The template database has invalid permissions set so write
8576 # the template warning message.
8578 $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{templatedatabasepermissions});
8579 $kiriwrite_presmodule->addlinebreak();
8580 $templates_skip = 1;
8585 # Check if the template skip value isn't set and if it isn't
8586 # then get the list of templates.
8588 if (!$templates_skip){
8590 @templateslist = $kiriwrite_dbmodule->gettemplatelist();
8592 # Check if any errors had occured.
8594 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
8596 # A database error occured while getting the list
8597 # of templates so return a warning message with the
8598 # extended error information.
8600 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8601 $templates_skip = 1;
8606 # Check if the template skip value isn't set and if it isn't
8607 # then process each template.
8609 if (!$templates_skip){
8611 # Process each template.
8613 foreach $template (@templateslist){
8615 # Get information about the template.
8617 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
8619 # Check if any error occured while getting the template information.
8621 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
8623 # A database error has occured, so return an error.
8625 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8628 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
8630 # The template does not exist, so process the next template.
8636 # Place each template file into the hash.
8638 $templatefiles{$template_info{"TemplateFilename"}}{template} = $template_info{"TemplateLayout"};
8639 $templatefiles{$template_info{"TemplateFilename"}}{valid} = 1;
8643 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishtemplatedatabase});
8644 $kiriwrite_presmodule->addlinebreak();
8650 # Disconnect from the template database.
8652 $kiriwrite_dbmodule->disconnecttemplate();
8654 # Process each database.
8656 foreach $database (@selectedlist){
8658 # Check if the database filename and length
8661 $kiriwrite_presmodule->addhorizontalline();
8663 $database_filename_check = kiriwrite_variablecheck($database, "page_filename", "", 1);
8664 $database_maxlength_check = kiriwrite_variablecheck($database, "maxlength", 32, 1);
8666 if ($database_filename_check ne 0){
8668 # The database filename is invalid, so process
8669 # the next database.
8671 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenameinvalidcharacters}, $database));
8672 $kiriwrite_presmodule->addlinebreak();
8678 if ($database_maxlength_check ne 0){
8680 # The database file is too long, so process the
8683 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenametoolong}, $database));
8684 $kiriwrite_presmodule->addlinebreak();
8690 # Select the database.
8692 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
8694 # Check if any errors had occured while selecting the database.
8696 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
8698 # The database does not exist, so write a warning message.
8700 $kiriwrite_presmodule->addtext($warning_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasemissing}, $database));
8701 $kiriwrite_presmodule->addlinebreak();
8705 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
8707 # The database has invalid permissions set, so write
8710 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseinvalidpermissions}, $database));
8711 $kiriwrite_presmodule->addlinebreak();
8717 # Get information about the database.
8719 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
8721 # Check if any error occured while getting the database information.
8723 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
8725 # A database error has occured so write an error.
8727 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseerror}, $database, $kiriwrite_dbmodule->geterror(1)));
8728 $kiriwrite_presmodule->addlinebreak();
8734 # Get the database name.
8736 $database_name = $database_info{"DatabaseName"};
8738 $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compilingpages}, $database_name));
8739 $kiriwrite_presmodule->addlinebreak();
8741 # Get the list of pages in the database.
8743 @databasepages = $kiriwrite_dbmodule->getpagelist();
8745 # Check if any errors occured while getting the list of pages.
8747 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
8749 # A database error has occured so return an error and
8750 # also the extended error information.
8752 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasepageerror}, $database, $kiriwrite_dbmodule->geterror(1)));
8753 $kiriwrite_presmodule->addlinebreak();
8759 foreach $page (@databasepages) {
8761 # Get information about the page.
8763 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
8765 $page_filename = $page_info{"PageFilename"};
8766 $page_name = $page_info{"PageName"};
8767 $page_description = $page_info{"PageDescription"};
8768 $page_section = $page_info{"PageSection"};
8769 $page_template = $page_info{"PageTemplate"};
8770 $page_content = $page_info{"PageContent"};
8771 $page_settings = $page_info{"PageSettings"};
8772 $page_lastmodified = $page_info{"PageLastModified"};
8774 # Check if the filename is valid.
8776 $page_filename_check = kiriwrite_variablecheck($page_filename, "page_filename", 0, 1);
8778 if ($page_filename_check ne 0){
8780 # The file name is not valid so write a
8781 # error and process the next page.
8783 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{invalidpagefilename}, $page_name));
8784 $kiriwrite_presmodule->addlinebreak();
8790 # Check if the template with the filename does not exist
8791 # in the template files hash and write a message and
8792 # process the next page.
8794 if (!$templatefiles{$page_template}{valid} && $page_template ne "!none" && $templates_skip eq 0){
8796 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatefilemissing}, $page_template, $page_name, $page_filename));
8797 $kiriwrite_presmodule->addlinebreak();
8801 $page_final = $page_content;
8803 } elsif ($page_template eq "!none"){
8805 $page_final = $page_content;
8809 $page_final = $templatefiles{$page_template}{template};
8815 $page_final =~ s/<kiriwrite:pagecontent>/$page_content/g;
8819 # Create the combined page title (if needed).
8821 if ($page_settings eq 0 || $page_settings > 3){
8823 # Don't use page name or section name.
8825 $page_final =~ s/<kiriwrite:pagetitle>//g;
8827 } elsif ($page_settings eq 1){
8829 # Use the page name and section name.
8831 $page_autotitle = "(" . $page_section . " - " . $page_name . ")";
8832 $page_title = $page_section . " - " . $page_name;
8833 $page_final =~ s/<kiriwrite:pagetitle>/$page_title/g;
8835 } elsif ($page_settings eq 2){
8837 # Use the page name only.
8839 $page_autotitle = "(" . $page_name . ")";
8840 $page_final =~ s/<kiriwrite:pagetitle>/$page_name/g;
8842 } elsif ($page_settings eq 3){
8844 # Use the section name only.
8847 $page_autotitle = "(" . $page_section . ")";
8849 $page_final =~ s/<kiriwrite:pagetitle>/$page_section/g;
8853 # Check if the section name is not blank and
8854 # place brackets inbetween if it is.
8858 $page_autosection = "(" . $page_section . ")";
8862 # Replace each <kiriwrite> value with the apporiate page
8865 $page_final =~ s/<kiriwrite:pagename>/$page_name/g;
8866 $page_final =~ s/<kiriwrite:pagedescription>/$page_description/g;
8867 $page_final =~ s/<kiriwrite:pagesection>/$page_section/g;
8868 $page_final =~ s/<kiriwrite:autosection>/$page_autosection/g;
8869 $page_final =~ s/<kiriwrite:autotitle>/$page_autotitle/g;
8871 # Process the filters on the page data.
8873 if ($filters_skip eq 0){
8877 foreach $filter_find (@findfilter){
8879 # Get the replace filter and process each
8880 # filter on the page.
8882 $filter_replace = $replacefilter[$filters_count];
8883 $page_final =~ s/$filter_find/$filter_replace/g;
8890 # Process the page filename and check what directories
8891 # need to be created.
8893 $page_filename_length = int(length($page_filename));
8897 $page_filename_char = substr($page_filename, $page_filename_seek, 1);
8899 # Check if a forward slash appears and add it to
8900 # the list of directories array.
8902 if ($page_filename_char eq '/'){
8904 # Append the directory name to the list of
8905 # directories array.
8907 $pagedirectories[$page_filename_dircount] = $page_filename_directory;
8908 $page_filename_directory = "";
8909 $page_filename_char = "";
8910 $page_filename_dircount++;
8914 # Append the character to the directory/filename.
8916 $page_filename_directory = $page_filename_directory . $page_filename_char;
8920 $page_filename_seek++;
8922 } until ($page_filename_length eq $page_filename_seek);
8924 foreach $page_directory_name (@pagedirectories){
8926 # Check if the directory name is undefined and if it
8927 # is then set it blank.
8929 if (!$page_directory_name){
8930 $page_directory_name = "";
8933 if (!$page_directory_path){
8934 $page_directory_path = "";
8937 # Check if the directory exists and create
8938 # the directory if it doesn't exist.
8940 $page_directory_path = $page_directory_path . '/' . $page_directory_name;
8942 mkdir($kiriwrite_config{"directory_data_output"} . '/' . $page_directory_path);
8946 # Check if the file already exists and if it does then check
8947 # the permissions of the file and return an error if the
8948 # permissions set are invalid.
8950 $page_filename_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"} . '/' . $page_filename);
8952 if ($page_filename_exists eq 0){
8954 # The page filename exists, so check if the permissions given are
8957 $page_filename_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"} . '/' . $page_filename, 1, 1);
8959 if ($page_filename_permissions eq 1){
8961 # The file has invalid permissions set.
8963 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pageinvalidpermissions}, $page_filename));
8964 $kiriwrite_presmodule->addlinebreak();
8967 # Reset certain values.
8969 $page_autotitle = "";
8970 $page_autosection = "";
8971 $page_filename_seek = 0;
8972 $page_filename_dircount = 0;
8974 $page_filename_directory = "";
8975 $page_directory_path = "";
8976 $page_directory_name = "";
8977 @pagedirectories = ();
8985 # Reset certain values.
8987 $page_autotitle = "";
8988 $page_autosection = "";
8989 $page_filename_seek = 0;
8990 $page_filename_dircount = 0;
8992 $page_filename_directory = "";
8993 $page_directory_path = "";
8994 $page_directory_name = "";
8995 @pagedirectories = ();
8997 # Write the file to the output directory.
8999 ($page_filename) = $page_filename =~ m/^(.*)$/g;
9000 ($kiriwrite_config{"directory_data_output"}) = $kiriwrite_config{"directory_data_output"} =~ m/^(.*)$/g;
9001 open($filehandle_page, ">:utf8 ", $kiriwrite_config{"directory_data_output"} . '/' . $page_filename) or ($kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pagenotwritten}, $page_filename, $!)), $kiriwrite_presmodule->addlinebreak(), $error_count++, next);
9009 binmode $filehandle_page, ':utf8';
9010 print $filehandle_page $page_final;
9011 close($filehandle_page);
9013 # Write a message saying the page has been compiled. Check
9014 # to see if the page name is blank and write a message
9015 # saying there's no page name.
9018 $kiriwrite_presmodule->addtext($information_prefix . ' ');
9019 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
9020 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledpageblankname}, $page_filename));
9022 $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compiledpage}, $page_name, $page_filename));
9026 $kiriwrite_presmodule->addlinebreak();
9031 # Write a message saying that the database has
9034 $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefinish}, $database_name));
9035 $kiriwrite_presmodule->addlinebreak();
9039 # Disconnect from the database server.
9041 $kiriwrite_dbmodule->disconnect();
9043 $kiriwrite_presmodule->addhorizontalline();
9044 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compileresults}, $pages_count, $error_count, $warning_count));
9045 $kiriwrite_presmodule->endbox();
9046 $kiriwrite_presmodule->addlinebreak();
9047 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9049 return $kiriwrite_presmodule->grab();
9051 } elsif ($confirm eq 0){
9053 # The action to compile the databases has
9054 # not been confirmed so check what type
9057 if ($type eq "single"){
9059 # The type is a single database selected so
9060 # process that database.
9062 # Define some variables for later.
9065 my $database_filename_check;
9066 my $database_maxlength_check;
9067 my $databasefilename;
9070 # Check that the database name and length are
9071 # valid and return an error if they aren't.
9073 $databasefilename = $selectedlist[0];
9075 # Connect to the database server.
9077 $kiriwrite_dbmodule->connect();
9079 # Check if any errors occured while connecting to the database server.
9081 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9083 # A database connection error has occured so return
9086 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9090 # Select the database.
9092 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasefilename });
9094 # Check if any errors had occured while selecting the database.
9096 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9098 # The database does not exist, so return an error.
9100 kiriwrite_error("databasemissingfile");
9102 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9104 # The database has invalid permissions set, so return
9107 kiriwrite_error("databaseinvalidpermissions");
9111 # Get information about the database.
9113 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9115 # Check if any error occured while getting the database information.
9117 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9119 # A database error has occured so return an error and
9120 # also the extended error information.
9122 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
9126 $database_name = $database_info{"DatabaseName"};
9128 # Disconnect from the database server.
9130 $kiriwrite_dbmodule->disconnect();
9132 # Write out a form asking the user to confirm if the
9133 # user wants to compile the selected database.
9135 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabase}, { Style => "pageheader" });
9136 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9137 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9138 $kiriwrite_presmodule->addhiddendata("action", "compile");
9139 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9140 $kiriwrite_presmodule->addhiddendata("id[1]", $databasefilename);
9141 $kiriwrite_presmodule->addhiddendata("name[1]", "on");
9142 $kiriwrite_presmodule->addhiddendata("confirm", 1);
9143 $kiriwrite_presmodule->addlinebreak();
9144 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledatabasemessage}, $database_name));
9145 $kiriwrite_presmodule->addlinebreak();
9146 $kiriwrite_presmodule->addlinebreak();
9147 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compiledatabasebutton});
9148 $kiriwrite_presmodule->addtext(" | ");
9149 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9151 return $kiriwrite_presmodule->grab();
9153 } elsif ($type eq "multiple"){
9155 # The type is multiple databases selected
9156 # so process each database.
9158 # Define some variables for later.
9163 my $database_filename_check;
9164 my $database_maxlength_check;
9165 my $database_count = 0;
9166 my $database_info_name;
9168 # Connect to the database server.
9170 $kiriwrite_dbmodule->connect();
9172 # Check if any errors occured while connecting to the database server.
9174 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9176 # A database connection error has occured so return
9179 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9183 foreach $databasename (@selectedlist){
9185 # Check if the database is in the database
9186 # directory and skip it if it isn't.
9188 $database_filename_check = kiriwrite_variablecheck($databasename, "filename", "", 1);
9189 $database_maxlength_check = kiriwrite_variablecheck($databasename, "maxlength", 32, 1);
9191 if ($database_filename_check ne 0 || $database_maxlength_check ne 0){
9193 # The database filename given is invalid or
9194 # the database filename given is too long
9195 # so process the next database.
9201 # Select the database to add the page to.
9203 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasename });
9205 # Check if any errors had occured while selecting the database.
9207 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9209 # The database does not exist, so process the next database.
9213 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9215 # The database has invalid permissions set, so process
9216 # the next database.
9222 # Get information about the database.
9224 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9226 # Check if any error occured while getting the database information.
9228 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9230 # A database error has occured so process the next
9237 $database_list{$database_count}{Name} = $database_info{"DatabaseName"};
9238 $database_list{$database_count}{Filename} = $databasename;
9244 # Check if any databases are available to be compiled.
9246 if ($database_count eq 0){
9248 # No databases are available to be compiled.
9250 kiriwrite_error("nodatabaseselected");
9254 # Write out the form for compiling the database.
9256 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabases}, { Style => "pageheader" });
9257 $kiriwrite_presmodule->addlinebreak();
9258 $kiriwrite_presmodule->addlinebreak();
9259 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9260 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9261 $kiriwrite_presmodule->addhiddendata("action", "compile");
9262 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9263 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9264 $kiriwrite_presmodule->addhiddendata("confirm", 1);
9265 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabasesmessage});
9266 $kiriwrite_presmodule->addlinebreak();
9267 $kiriwrite_presmodule->addlinebreak();
9268 $kiriwrite_presmodule->startbox("datalist");
9270 $database_count = 0;
9272 # write out the list of databases to compile.
9274 foreach $database (keys %database_list){
9278 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9279 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9281 # Check if the database name is undefined and if it is
9282 # then write a message saying the database name is blank.
9284 if (!$database_list{$database}{Name}){
9285 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{compile}->{blankdatabasename});
9287 $kiriwrite_presmodule->addtext($database_list{$database}{Name});
9290 $kiriwrite_presmodule->addlinebreak();
9294 $kiriwrite_presmodule->endbox();
9296 # Disconnect from the database server.
9298 $kiriwrite_dbmodule->disconnect();
9300 $kiriwrite_presmodule->addlinebreak();
9301 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselecteddatabasesbutton});
9302 $kiriwrite_presmodule->addtext(" | ");
9303 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9304 $kiriwrite_presmodule->endform();
9306 return $kiriwrite_presmodule->grab();
9310 # The type is something else other than
9311 # single or multiple, so return an error.
9313 kiriwrite_error("invalidvariable");
9319 # The confirm value is neither 0 or 1, so
9322 kiriwrite_error("invalidvariable");
9328 sub kiriwrite_compile_all{
9329 #################################################################################
9330 # kiriwrite_compile_all: Compile all of the databases in the database #
9335 # kiriwrite_compile_all(); #
9336 #################################################################################
9338 # Connect to the database server.
9340 $kiriwrite_dbmodule->connect();
9342 # Check if any errors occured while connecting to the database server.
9344 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9346 # A database connection error has occured so return
9349 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9353 # Get the list of available databases.
9355 my @database_list = $kiriwrite_dbmodule->getdblist();
9357 # Check if any errors occured while getting the databases.
9359 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9361 # The database directory is missing so return an error.
9363 kiriwrite_error("datadirectorymissing");
9365 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9367 # The database directory has invalid permissions set so return
9370 kiriwrite_error("datadirectoryinvalidpermissions");
9374 # Define some variables for later.
9377 my $database_name_filename_check;
9378 my $database_count = 0;
9380 # Check the list of databases to compile to see if it is blank,
9381 # if it is then return an error.
9383 if (!@database_list){
9385 # The list of database is blank so return an error.
9387 kiriwrite_error("nodatabasesavailable");
9391 # Write out a form for confirming the action to compile all of the databases.
9393 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabases}, { Style => "pageheader" });
9394 $kiriwrite_presmodule->addlinebreak();
9395 $kiriwrite_presmodule->addlinebreak();
9397 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9398 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9399 $kiriwrite_presmodule->addhiddendata("action", "compile");
9400 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9402 foreach $database (@database_list){
9404 # Check if the database filename is blank.
9406 if ($database eq ""){
9408 # The database filename is blank so process
9409 # the next database.
9415 # Check if the database filename is valid before
9416 # using the database.
9418 $database_name_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
9420 if ($database_name_filename_check ne 0){
9422 # The database filename is invalid so process
9423 # the next database.
9430 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database);
9431 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9435 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9437 # Disconnect from the database server.
9439 $kiriwrite_dbmodule->disconnect();
9441 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabasesmessage});
9442 $kiriwrite_presmodule->addlinebreak();
9443 $kiriwrite_presmodule->addlinebreak();
9445 $kiriwrite_presmodule->addhiddendata("confirm", 1);
9446 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compilealldatabasesbutton});
9447 $kiriwrite_presmodule->addtext(" | ");
9448 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9450 return $kiriwrite_presmodule->grab();
9454 sub kiriwrite_selectedlist{
9455 #################################################################################
9456 # kiriwrite_page_selectedlist: Get the list of selected pages to use. #
9460 # kiriwrite_page_selectedlist(); #
9461 #################################################################################
9463 # Load the required Perl modules.
9465 my $query = new CGI;
9467 my $count = $query->param('count');
9469 # Check if the list of files has a value and if not set it 0.
9477 # Define some values for later.
9486 my $final_count = 0;
9489 # Get the list of filenames.
9493 # Get the values from id[]
9497 $filename = $query->param('id[' . $seek . ']');
9498 $filename_list[$seek] = $filename;
9500 } until ($seek eq $count || $count eq 0);
9502 # Get the list of selected filenames.
9508 # Get the values from name[]
9512 $selected = $query->param('name[' . $seek . ']');
9520 $selected_list[$seek] = $selected;
9522 } until ($seek eq $count || $count eq 0);
9524 # Create a final list of filenames to be used for
9531 # Check if the selected value is on and include
9532 # the filename in the final list.
9536 $selected = $selected_list[$seek];
9538 if ($selected eq "on"){
9540 $filename = $filename_list[$seek];
9541 $final_list[$final_count] = $filename;
9546 } until ($seek eq $count || $count eq 0);
9552 sub kiriwrite_compile_list{
9553 #################################################################################
9554 # kiriwrite_compile_list: Shows a list of databases that can be compiled. #
9558 # kiriwrite_compile_list(); #
9559 #################################################################################
9561 # Define the following variables that are going to be used before using
9562 # the foreach function.
9566 my $database_count = 0;
9567 my $database_filename = "";
9568 my $database_filename_friendly = "";
9569 my $database_permissions = "";
9570 my $database_name = "";
9571 my $database_description = "";
9573 my @permissions_list;
9575 my $table_style = 0;
9576 my $table_style_name = "";
9579 tie(%database_list, 'Tie::IxHash');
9581 # Connect to the database server.
9583 $kiriwrite_dbmodule->connect();
9585 # Check if any errors occured while connecting to the database server.
9587 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9589 # A database connection error has occured so return
9592 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9596 # Get the list of available databases and process any errors that
9597 # might have occured.
9599 my @database_list = $kiriwrite_dbmodule->getdblist();
9601 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9603 # The database directory is missing so return an error.
9605 kiriwrite_error("datadirectorymissing");
9607 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9609 # The database directory has invalid permissions set so return
9612 kiriwrite_error("datadirectoryinvalidpermissions");
9616 # Begin creating the table for the list of databases.
9618 foreach $data_file (@database_list){
9620 # Select the database.
9622 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
9624 # Check if any error occured while selecting the database.
9626 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9628 # The database does not exist, so process the next
9633 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
9635 # The database has invalid permissions settings, so
9636 # add the database to the list of databases with
9637 # invalid permissions set and process the next
9640 push(@permissions_list, $data_file);
9645 # Get information about the database.
9647 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9649 # Check if any error occured while getting information from the
9652 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9654 # A database error has occured, add the database and specific
9655 # error message to the list of databases with errors and
9656 # process the next database.
9658 push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
9663 $database_name = $database_info{"DatabaseName"};
9664 $database_description = $database_info{"Description"};
9666 # Create a friendly name for the database.
9668 $database_filename_friendly = $data_file;
9670 # Append the database information to the table.
9672 $database_list{$database_count}{Filename} = $database_filename_friendly;
9673 $database_list{$database_count}{Name} = $database_name;
9674 $database_list{$database_count}{Description} = $database_description;
9680 # Check if there are no valid databases are if there is no
9681 # valid databases then write a message saying that no
9682 # valid databases are available.
9684 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilepages}, { Style => "pageheader" });
9685 $kiriwrite_presmodule->addlinebreak();
9686 $kiriwrite_presmodule->addlinebreak();
9688 if ($database_count eq 0){
9690 # There are no databases available for compiling so
9691 # write a message instead.
9693 $kiriwrite_presmodule->startbox("errorbox");
9694 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{nodatabasesavailable});
9695 $kiriwrite_presmodule->endbox();
9699 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9700 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9701 $kiriwrite_presmodule->addhiddendata("action", "compile");
9702 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9704 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
9705 $kiriwrite_presmodule->addtext(" | ");
9706 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselectedbutton});
9707 $kiriwrite_presmodule->addlinebreak();
9708 $kiriwrite_presmodule->addlinebreak();
9709 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9710 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
9712 $kiriwrite_presmodule->startheader();
9713 $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
9714 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
9715 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
9716 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
9717 $kiriwrite_presmodule->endheader();
9719 $database_count = 1;
9721 foreach $database (keys %database_list){
9723 # Check the style to be used with.
9725 if ($table_style eq 0){
9727 # Use the first style and set the style value
9728 # to use the next style, the next time the
9729 # if statement is checked.
9731 $table_style_name = "tablecell1";
9736 # Use the second style and set the style
9737 # value to use the first style, the next
9738 # time if statement is checked.
9740 $table_style_name = "tablecell2";
9744 # Add the template to the list of available
9745 # templates to compile.
9747 $kiriwrite_presmodule->startrow();
9748 $kiriwrite_presmodule->addcell($table_style_name);
9749 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9750 $kiriwrite_presmodule->addcheckbox("name[" . $database_count . "]");
9751 $kiriwrite_presmodule->endcell();
9752 $kiriwrite_presmodule->addcell($table_style_name);
9754 if (!$database_list{$database}{Name}){
9755 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile&action=compile&type=single&database=" . $database_list{$database}{Filename}, { Text => $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname}) });
9757 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_list{$database}{Filename}, { Text => $database_list{$database}{Name} });
9760 $kiriwrite_presmodule->endcell();
9761 $kiriwrite_presmodule->addcell($table_style_name);
9763 if (!$database_list{$database}{Description}){
9764 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
9766 $kiriwrite_presmodule->addtext($database_list{$database}{Description});
9769 $kiriwrite_presmodule->endcell();
9770 $kiriwrite_presmodule->addcell($table_style_name);
9771 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile&action=compile&type=single&database=" . $database_list{$database}{Filename}, { Text => $kiriwrite_lang->{options}->{compile} });
9772 $kiriwrite_presmodule->endcell();
9773 $kiriwrite_presmodule->endrow();
9779 $kiriwrite_presmodule->endtable();
9780 $kiriwrite_presmodule->endform();
9784 # Disconnect from the database server.
9786 $kiriwrite_dbmodule->disconnect();
9788 # Check if any databases with problems have appeared and if they
9789 # have, print out a message saying which databases have problems.
9791 if (@permissions_list){
9793 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
9794 $kiriwrite_presmodule->addlinebreak();
9795 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
9796 $kiriwrite_presmodule->addlinebreak();
9798 foreach $database (@permissions_list){
9800 $kiriwrite_presmodule->addlinebreak();
9801 $kiriwrite_presmodule->addtext($database);
9805 $kiriwrite_presmodule->addlinebreak();
9806 $kiriwrite_presmodule->addlinebreak();
9812 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
9813 $kiriwrite_presmodule->addlinebreak();
9814 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
9815 $kiriwrite_presmodule->addlinebreak();
9817 foreach $database (@error_list){
9819 $kiriwrite_presmodule->addlinebreak();
9820 $kiriwrite_presmodule->addtext($database);
9826 return $kiriwrite_presmodule->grab();
9830 sub kiriwrite_compile_clean{
9831 #################################################################################
9832 # kiriwrite_compile_clean: Deletes the contents of the output directory. #
9836 # kiriwrite_compile_clean(confirm); #
9838 # confirm Confirms the deletion of files from the output directory. #
9839 #################################################################################
9841 # Get the values passed to the subroutine.
9845 # Define some variables for later.
9847 my $file_permissions;
9848 my $output_directory_exists;
9849 my $output_directory_permissions;
9850 my $warning_message;
9852 # Check if the output directory exists.
9854 $output_directory_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"});
9856 if ($output_directory_exists eq 1){
9858 # The output directory does not exist so return
9861 kiriwrite_error("outputdirectorymissing");
9865 # Check if the output directory has invalid
9868 $output_directory_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"});
9870 if ($output_directory_permissions eq 1){
9872 # The output directory has invalid permissions
9873 # set, so return an error.
9875 kiriwrite_error("outputdirectoryinvalidpermissions");
9883 # The action to clean the output directory has been
9886 # Remove the list of files and directories from the
9889 $file_permissions = kiriwrite_compile_clean_helper($kiriwrite_config{"directory_data_output"}, 1);
9891 if ($file_permissions eq 1){
9893 # One of the files or directories has invalid
9894 # permissions set so write a warning message.
9898 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9900 if ($file_permissions eq 1){
9902 $kiriwrite_presmodule->addlinebreak();
9903 $kiriwrite_presmodule->addlinebreak();
9904 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{somecontentnotremoved});
9905 $kiriwrite_presmodule->addlinebreak();
9906 $kiriwrite_presmodule->addlinebreak();
9910 $kiriwrite_presmodule->addlinebreak();
9911 $kiriwrite_presmodule->addlinebreak();
9912 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{contentremoved});
9913 $kiriwrite_presmodule->addlinebreak();
9914 $kiriwrite_presmodule->addlinebreak();
9918 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9920 return $kiriwrite_presmodule->grab();
9924 # A value other than 1 is set for the confirm value
9925 # (which it shouldn't be) so return an error.
9927 kiriwrite_error("invalidvariable");
9933 # Print out a form for cleaning the output directory.
9935 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9936 $kiriwrite_presmodule->addlinebreak();
9937 $kiriwrite_presmodule->addlinebreak();
9938 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9939 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9940 $kiriwrite_presmodule->addhiddendata("action", "clean");
9941 $kiriwrite_presmodule->addhiddendata("confirm", 1);
9942 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectorymessage});
9943 $kiriwrite_presmodule->addlinebreak();
9944 $kiriwrite_presmodule->addlinebreak();
9945 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{cleanoutputdirectorybutton});
9946 $kiriwrite_presmodule->addtext(" | ");
9947 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist}});
9948 $kiriwrite_presmodule->endform();
9950 return $kiriwrite_presmodule->grab();
9954 sub kiriwrite_compile_clean_helper{
9955 #################################################################################
9956 # kiriwrite_compile_clean_helper: Helper for cleaning out the output directory. #
9957 # This command sometimes is called recursively (when a directory is found). #
9961 # kiriwrite_compile_clean_helper(directory, removedirectory, [permissions]); #
9963 # directory Specifies the directory to remove files (and #
9964 # sub-directories) from. #
9965 # keepdirectory Keeps the directory itself after all files have been #
9967 # permissions Used recursively for error checking. #
9968 #################################################################################
9970 # Get the values passed to the subroutine.
9972 my ($directory, $directory_keep, $permissions) = @_;
9974 # Check if the directory_keep is only one charater long.
9976 my $directory_file = "";
9978 my $file_permissions = 0;
9981 # Check if the file permissions value is blank.
9985 # The file permissions value is blank.
9991 # Open the directory specified, read the contents of
9992 # the directory and then close the directory.
9994 opendir(DIRECTORY, $directory);
9995 @directory_list = readdir(DIRECTORY);
9996 closedir(DIRECTORY);
9998 # Remove each file and directory.
10000 foreach $directory_file (@directory_list){
10002 # Check if the filename is '.' or '..' and if it
10003 # is skip those files.
10005 if ($directory_file eq "." || $directory_file eq ".."){
10007 # The filename is '.' or '..' so skip processing
10012 # Check if the permissions on the file or directory has
10013 # valid permissions set.
10015 $file_permissions = kiriwrite_filepermissions($directory . '/' . $directory_file, 1, 1);
10017 if ($file_permissions eq 1){
10019 # The file or directory has invalid permissions set.
10026 # Check if the filename is a directory.
10028 if (-d $directory . '/' . $directory_file){
10030 # The filename is a directory so send the directory name
10031 # and this subroutine again (recursively).
10033 kiriwrite_compile_clean_helper($directory . '/' . $directory_file, 0, $permissions);
10037 # The file is not a directory but an actual file so
10038 # remove as normal (in terms of the Perl language).
10040 ($directory) = $directory =~ m/^(.*)$/g;
10041 ($directory_file) = $directory_file =~ m/^(.*)$/g;
10043 # Check if the directory is undefined and if it is then
10050 if (!$directory_file){
10051 $directory_file = "";
10054 unlink($directory . '/' . $directory_file);
10062 # Check if the directory should be kept.
10064 if ($directory_keep eq 1){
10066 # The directory_keep value is set as 1 so the directory
10067 # specified should be kept.
10069 } elsif ($directory_keep eq 0) {
10071 # The directory_keep value is set as 0 so remove the
10072 # directory specified.
10074 ($directory) = $directory =~ m/^(.*)$/g;
10079 # A value other than 0 or 1 was specified so return
10082 kiriwrite_error('invalidvalue');
10086 return $permissions;
10090 sub kiriwrite_settings_view{
10091 #################################################################################
10092 # kiriwrite_options_view: Writes out the list of options and variables. #
10096 # kiriwrite_settings_view(); #
10097 #################################################################################
10099 # Get the settings.
10101 my $settings_directory_db = $kiriwrite_config{"directory_data_db"};
10102 my $settings_directory_output = $kiriwrite_config{"directory_data_output"};
10103 my $settings_noncgi_images = $kiriwrite_config{"directory_noncgi_images"};
10104 my $settings_system_datetime = $kiriwrite_config{"system_datetime"};
10105 my $settings_system_language = $kiriwrite_config{"system_language"};
10106 my $settings_system_presentation = $kiriwrite_config{"system_presmodule"};
10107 my $settings_system_database = $kiriwrite_config{"system_dbmodule"};
10109 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{viewsettings}, { Style => "pageheader" });
10110 $kiriwrite_presmodule->addlinebreak();
10111 $kiriwrite_presmodule->addlinebreak();
10112 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{currentsettings});
10113 $kiriwrite_presmodule->addlinebreak();
10114 $kiriwrite_presmodule->addlinebreak();
10115 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10117 $kiriwrite_presmodule->startheader();
10118 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10119 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10120 $kiriwrite_presmodule->endheader();
10122 $kiriwrite_presmodule->startrow();
10123 $kiriwrite_presmodule->addcell("tablecellheader");
10124 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10125 $kiriwrite_presmodule->endcell();
10126 $kiriwrite_presmodule->addcell("tablecellheader");
10127 $kiriwrite_presmodule->endcell();
10128 $kiriwrite_presmodule->endrow();
10130 $kiriwrite_presmodule->startrow();
10131 $kiriwrite_presmodule->addcell("tablecell1");
10132 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10133 $kiriwrite_presmodule->endcell();
10134 $kiriwrite_presmodule->addcell("tablecell2");
10135 $kiriwrite_presmodule->addtext($settings_directory_db);
10136 $kiriwrite_presmodule->endcell();
10137 $kiriwrite_presmodule->endrow();
10139 $kiriwrite_presmodule->startrow();
10140 $kiriwrite_presmodule->addcell("tablecell1");
10141 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
10142 $kiriwrite_presmodule->endcell();
10143 $kiriwrite_presmodule->addcell("tablecell2");
10144 $kiriwrite_presmodule->addtext($settings_directory_output);
10145 $kiriwrite_presmodule->endcell();
10146 $kiriwrite_presmodule->endrow();
10148 $kiriwrite_presmodule->startrow();
10149 $kiriwrite_presmodule->addcell("tablecell1");
10150 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
10151 $kiriwrite_presmodule->endcell();
10152 $kiriwrite_presmodule->addcell("tablecell2");
10153 $kiriwrite_presmodule->addtext($settings_noncgi_images);
10154 $kiriwrite_presmodule->endcell();
10155 $kiriwrite_presmodule->endrow();
10157 $kiriwrite_presmodule->startrow();
10158 $kiriwrite_presmodule->addcell("tablecellheader");
10159 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
10160 $kiriwrite_presmodule->endcell();
10161 $kiriwrite_presmodule->addcell("tablecellheader");
10162 $kiriwrite_presmodule->endcell();
10163 $kiriwrite_presmodule->endrow();
10165 $kiriwrite_presmodule->startrow();
10166 $kiriwrite_presmodule->addcell("tablecell1");
10167 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
10168 $kiriwrite_presmodule->endcell();
10169 $kiriwrite_presmodule->addcell("tablecell2");
10170 $kiriwrite_presmodule->addtext($settings_system_datetime);
10171 $kiriwrite_presmodule->endcell();
10172 $kiriwrite_presmodule->endrow();
10174 $kiriwrite_presmodule->startrow();
10175 $kiriwrite_presmodule->addcell("tablecellheader");
10176 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
10177 $kiriwrite_presmodule->endcell();
10178 $kiriwrite_presmodule->addcell("tablecellheader");
10179 $kiriwrite_presmodule->endcell();
10180 $kiriwrite_presmodule->endrow();
10182 $kiriwrite_presmodule->startrow();
10183 $kiriwrite_presmodule->addcell("tablecell1");
10184 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
10185 $kiriwrite_presmodule->endcell();
10186 $kiriwrite_presmodule->addcell("tablecell2");
10187 $kiriwrite_presmodule->addtext($settings_system_language);
10188 $kiriwrite_presmodule->endcell();
10189 $kiriwrite_presmodule->endrow();
10191 $kiriwrite_presmodule->startrow();
10192 $kiriwrite_presmodule->addcell("tablecellheader");
10193 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
10194 $kiriwrite_presmodule->endcell();
10195 $kiriwrite_presmodule->addcell("tablecellheader");
10196 $kiriwrite_presmodule->endcell();
10197 $kiriwrite_presmodule->endrow();
10199 $kiriwrite_presmodule->startrow();
10200 $kiriwrite_presmodule->addcell("tablecell1");
10201 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
10202 $kiriwrite_presmodule->endcell();
10203 $kiriwrite_presmodule->addcell("tablecell2");
10204 $kiriwrite_presmodule->addtext($settings_system_presentation);
10205 $kiriwrite_presmodule->endcell();
10206 $kiriwrite_presmodule->endrow();
10208 $kiriwrite_presmodule->startrow();
10209 $kiriwrite_presmodule->addcell("tablecell1");
10210 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
10211 $kiriwrite_presmodule->endcell();
10212 $kiriwrite_presmodule->addcell("tablecell2");
10213 $kiriwrite_presmodule->addtext($settings_system_database);
10214 $kiriwrite_presmodule->endcell();
10215 $kiriwrite_presmodule->endrow();
10217 $kiriwrite_presmodule->endtable();
10219 $kiriwrite_presmodule->addlinebreak();
10220 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{altersettings});
10222 return $kiriwrite_presmodule->grab();
10226 sub kiriwrite_settings_edit{
10227 #################################################################################
10228 # kiriwrite_settings_edit: Edits the options. #
10232 # kiriwrite_settings_edit(options); #
10234 # options Specifies the following options in any order. #
10236 # DatabaseDirectory Specifies the new database directory to use. #
10237 # OutputDirectory Specifies the new output directory to use. #
10238 # ImagesURIPath Specifies the new URI path for images. #
10239 # DateTimeFormat Specifies the new date and time format. #
10240 # SystemLanguage Specifies the new language to use for Kiriwrite. #
10241 # PrsentationModule Specifies the new presentation module to use for #
10243 # DatabaseModule Specifies the new database module to use for Kiriwrite. #
10245 # Options for server-based database modules. #
10247 # DatabaseServer Specifies the database server to use. #
10248 # DaravasePort Specifies the port the database server is running on. #
10249 # DatabaseProtocol Specifies the protocol the database server is using. #
10250 # DatabaseSQLDatabase Specifies the SQL database name to use. #
10251 # DatabaseUsername Specifies the database server username. #
10252 # DatabasePasswordKeep Keeps the current password in the configuration file. #
10253 # DatabasePassword Specifies the password for the database server username.#
10254 # DatabaseTablePrefix Specifies the prefix used for tables. #
10255 #################################################################################
10257 # Get the values that have been passed to the subroutine.
10259 my ($passedoptions) = @_;
10261 # Get the values from the hash.
10263 my $settings_dbdirectory = $passedoptions->{"DatabaseDirectory"};
10264 my $settings_outputdirectory = $passedoptions->{"OutputDirectory"};
10265 my $settings_imagesuri = $passedoptions->{"ImagesURIPath"};
10266 my $settings_datetimeformat = $passedoptions->{"DateTimeFormat"};
10267 my $settings_languagesystem = $passedoptions->{"SystemLanguage"};
10268 my $settings_presmodule = $passedoptions->{"PresentationModule"};
10269 my $settings_dbmodule = $passedoptions->{"DatabaseModule"};
10271 my $settings_database_server = $passedoptions->{"DatabaseServer"};
10272 my $settings_database_port = $passedoptions->{"DatabasePort"};
10273 my $settings_database_protocol = $passedoptions->{"DatabaseProtocol"};
10274 my $settings_database_sqldatabase = $passedoptions->{"DatabaseSQLDatabase"};
10275 my $settings_database_username = $passedoptions->{"DatabaseUsername"};
10276 my $settings_database_passwordkeep = $passedoptions->{"DatabasePasswordKeep"};
10277 my $settings_database_password = $passedoptions->{"DatabasePassword"};
10278 my $settings_database_tableprefix = $passedoptions->{"DatabaseTablePrefix"};
10280 my $confirm = $passedoptions->{"Confirm"};
10282 # Load the required Perl modules.
10284 my $xsl = XML::Simple->new();
10288 # If the confirm value is blank, then set the confirm
10295 if ($confirm eq "1"){
10297 # The action to edit the settings has been confirmed.
10298 # Start by checking each variable about to be placed
10299 # in the settings file is valid.
10301 # Deinfe some variables for later.
10303 my @kiriwrite_new_settings;
10305 # Check the length of the directory names.
10307 kiriwrite_variablecheck($settings_dbdirectory, "maxlength", 64, 0);
10308 kiriwrite_variablecheck($settings_outputdirectory, "maxlength", 64, 0);
10309 kiriwrite_variablecheck($settings_imagesuri, "maxlength", 512, 0);
10310 kiriwrite_variablecheck($settings_datetimeformat, "maxlength", 32, 0);
10312 kiriwrite_variablecheck($settings_languagesystem, "language_filename", "", 0);
10314 # Check the module names to see if they're valid.
10316 my $kiriwrite_presmodule_modulename_check = kiriwrite_variablecheck($settings_presmodule, "module", 0, 1);
10317 my $kiriwrite_dbmodule_modulename_check = kiriwrite_variablecheck($settings_dbmodule, "module", 0, 1);
10319 if ($kiriwrite_presmodule_modulename_check eq 1){
10321 # The presentation module name is blank, so return
10324 kiriwrite_error("presmoduleblank");
10328 if ($kiriwrite_presmodule_modulename_check eq 2){
10330 # The presentation module name is invalid, so return
10333 kiriwrite_error("presmoduleinvalid");
10337 if ($kiriwrite_dbmodule_modulename_check eq 1){
10339 # The database module name is blank, so return
10342 kiriwrite_error("dbmoduleblank");
10346 if ($kiriwrite_dbmodule_modulename_check eq 2){
10348 # The database module name is invalid, so return
10351 kiriwrite_error("dbmoduleinvalid");
10355 # Check if the directory names only contain letters and numbers and
10356 # return a specific error if they don't.
10358 my $kiriwrite_dbdirectory_check = kiriwrite_variablecheck($settings_dbdirectory, "directory", 0, 1);
10359 my $kiriwrite_outputdirectory_check = kiriwrite_variablecheck($settings_outputdirectory, "directory", 0, 1);
10360 kiriwrite_variablecheck($settings_datetimeformat, "datetime", 0, 0);
10362 if ($kiriwrite_dbdirectory_check eq 1){
10364 # The database directory name is blank, so return
10367 kiriwrite_error("dbdirectoryblank");
10369 } elsif ($kiriwrite_dbdirectory_check eq 2){
10371 # The database directory name is invalid, so return
10374 kiriwrite_error("dbdirectoryinvalid");
10378 if ($kiriwrite_outputdirectory_check eq 1){
10380 # The output directory name is blank, so return
10383 kiriwrite_error("outputdirectoryblank");
10385 } elsif ($kiriwrite_outputdirectory_check eq 2){
10387 # The output directory name is invalid, so return
10390 kiriwrite_error("outputdirectoryinvalid");
10394 # Check if the presentation module with the filename given exists.
10396 my $presmodule_exists = kiriwrite_fileexists("Modules/Presentation/" . $settings_presmodule . ".pm");
10398 if ($presmodule_exists eq 1){
10400 # The presentation module does not exist so return an error.
10402 kiriwrite_error("presmodulemissing");
10406 # Check if the database module with the filename given exists.
10408 my $dbmodule_exists = kiriwrite_fileexists("Modules/Database/" . $settings_dbmodule . ".pm");
10410 if ($dbmodule_exists eq 1){
10412 # The database module does not exist so return an error.
10414 kiriwrite_error("dbmodulemissing");
10418 # Check if the language filename given exists.
10420 my $languagefile_exists = kiriwrite_fileexists("lang/" . $settings_languagesystem . ".xml");
10422 if ($languagefile_exists eq 1){
10424 # The language filename given does not exist so return an error.
10426 kiriwrite_error("languagefilenamemissing");
10430 # Check the database server options to see if they are valid.
10432 my $kiriwrite_databaseserver_length_check = kiriwrite_variablecheck($settings_database_server, "maxlength", 128, 1);
10433 my $kiriwrite_databaseserver_lettersnumbers_check = kiriwrite_variablecheck($settings_database_server, "lettersnumbers", 0, 1);
10434 my $kiriwrite_databaseport_length_check = kiriwrite_variablecheck($settings_database_port, "maxlength", 5, 1);
10435 my $kiriwrite_databaseport_numbers_check = kiriwrite_variablecheck($settings_database_port, "numbers", 0, 1);
10436 my $kiriwrite_databaseport_port_check = kiriwrite_variablecheck($settings_database_port, "port", 0, 1);
10437 my $kiriwrite_databaseprotocol_length_check = kiriwrite_variablecheck($settings_database_protocol, "maxlength", 5, 1);
10438 my $kiriwrite_databaseprotocol_protocol_check = kiriwrite_variablecheck($settings_database_protocol, "serverprotocol", 0, 1);
10439 my $kiriwrite_databasename_length_check = kiriwrite_variablecheck($settings_database_sqldatabase, "maxlength", 32, 1);
10440 my $kiriwrite_databasename_lettersnumbers_check = kiriwrite_variablecheck($settings_database_sqldatabase, "lettersnumbers", 0, 1);
10441 my $kiriwrite_databaseusername_length_check = kiriwrite_variablecheck($settings_database_username, "maxlength", 16, 1);
10442 my $kiriwrite_databaseusername_lettersnumbers_check = kiriwrite_variablecheck($settings_database_username, "lettersnumbers", 0, 1);
10443 my $kiriwrite_databasepassword_length_check = kiriwrite_variablecheck($settings_database_password, "maxlength", 64, 1);
10444 my $kiriwrite_databasetableprefix_length_check = kiriwrite_variablecheck($settings_database_tableprefix, "maxlength", 16, 1);
10445 my $kiriwrite_databasetableprefix_lettersnumbers_check = kiriwrite_variablecheck($settings_database_tableprefix, "lettersnumbers", 0, 1);
10447 if ($kiriwrite_databaseserver_length_check eq 1){
10449 # The length of the database server name is too long so
10452 kiriwrite_error("servernametoolong");
10456 if ($kiriwrite_databaseserver_lettersnumbers_check eq 1){
10458 # The database server name contains characters other
10459 # than letters and numbers, so return an error.
10461 kiriwrite_error("servernameinvalid");
10465 if ($kiriwrite_databaseport_length_check eq 1){
10467 # The database port number length is too long so return
10470 kiriwrite_error("serverportnumbertoolong");
10474 if ($kiriwrite_databaseport_numbers_check eq 1){
10476 # The database port number contains characters other
10477 # than numbers so return an error.
10479 kiriwrite_error("serverportnumberinvalidcharacters");
10483 if ($kiriwrite_databaseport_port_check eq 1){
10485 # The database port number given is invalid so return
10488 kiriwrite_error("serverportnumberinvalid");
10492 if ($kiriwrite_databaseprotocol_length_check eq 1){
10494 # The database protocol name given is too long so
10497 kiriwrite_error("serverprotocolnametoolong");
10501 if ($kiriwrite_databaseprotocol_protocol_check eq 1){
10503 # The server protcol given is invalid so return
10506 kiriwrite_error("serverprotocolinvalid");
10510 if ($kiriwrite_databasename_length_check eq 1){
10512 # The SQL database name is too long so return
10515 kiriwrite_error("serverdatabasenametoolong");
10519 if ($kiriwrite_databasename_lettersnumbers_check eq 1){
10521 # The database name contains invalid characters
10522 # so return an error.
10524 kiriwrite_error("serverdatabasenameinvalid");
10528 if ($kiriwrite_databaseusername_length_check eq 1){
10530 # The database username given is too long so
10533 kiriwrite_error("serverdatabaseusernametoolong");
10537 if ($kiriwrite_databaseusername_lettersnumbers_check eq 1){
10539 # The database username contains invalid characters
10540 # so return an error.
10542 kiriwrite_error("serverdatabaseusernameinvalid");
10546 if ($kiriwrite_databasepassword_length_check eq 1){
10548 # The database password given is too long so return
10551 kiriwrite_error("serverdatabasepasswordtoolong");
10555 if ($kiriwrite_databasetableprefix_length_check eq 1){
10557 # The database table prefix given is too long so
10560 kiriwrite_error("serverdatabasetableprefixtoolong");
10564 if ($kiriwrite_databasetableprefix_lettersnumbers_check eq 1){
10566 # The database table prefix given contains invalid
10567 # characters so return an error.
10569 kiriwrite_error("serverdatabasetableprefixinvalid");
10573 # Check if the current password should be kept.
10575 if ($settings_database_passwordkeep eq "on"){
10577 # The current password in the configuration file should be used.
10579 $settings_database_password = $kiriwrite_config{"database_password"};
10583 # Write the new settings to the XML file.
10585 kiriwrite_output_xml("kiriwrite.xml", "config", { DatabaseDirectory => $settings_dbdirectory, OutputDirectory => $settings_outputdirectory, ImagesURIPath => $settings_imagesuri, DateTimeFormat => $settings_datetimeformat, SystemLanguage => $settings_languagesystem, PresentationModule => $settings_presmodule, DatabaseModule => $settings_dbmodule, DatabaseServer => $settings_database_server, DatabasePort => $settings_database_port, DatabaseProtocol => $settings_database_protocol, DatabaseSQLDatabase => $settings_database_sqldatabase, DatabaseUsername => $settings_database_username, DatabasePassword => $settings_database_password, DatabaseTablePrefix => $settings_database_tableprefix });
10587 # Write a confirmation message.
10589 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingsedited}, { Style => "pageheadeR" });
10590 $kiriwrite_presmodule->addlinebreak();
10591 $kiriwrite_presmodule->addlinebreak();
10592 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingseditedmessage});
10593 $kiriwrite_presmodule->addlinebreak();
10594 $kiriwrite_presmodule->addlinebreak();
10595 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
10597 return $kiriwrite_presmodule->grab();
10601 # Get the list of languages available.
10604 my @language_directory = "";
10606 my $language_filename = "";
10607 my $language_file_xml = "";
10608 my $language_file_systemname = "";
10609 my $language_file_localname = "";
10610 my $language_file_seek = 0;
10611 my $language_flie_dot = 0;
10612 my $language_file_length = 0;
10613 my $language_file_count = 0;
10614 my $language_file_char = "";
10615 my $language_file_friendly = "";
10616 my $language_config = $kiriwrite_config{"system_language"};
10618 tie(%language_list, 'Tie::IxHash');
10620 opendir(LANGUAGEDIR, "lang");
10621 @language_directory = grep /m*\.xml$/, readdir(LANGUAGEDIR);
10622 closedir(LANGUAGEDIR);
10624 # Process each language by loading the XML configuration file
10625 # used for each language and then get the System name and
10626 # the local name of the language.
10628 foreach $language_filename (@language_directory){
10630 # Load the language file currently selected.
10632 $language_file_xml = $xsl->XMLin("lang" . '/' . $language_filename, SuppressEmpty => 1);
10634 # Get the system name and the local name of the language.
10636 $language_file_localname = $language_file_xml -> {about} -> {name};
10638 # Check if either the system name or the local name of the language
10639 # is blank and if it is, then don't add the language to the list.
10641 if ($language_file_localname eq ""){
10643 # The system name or the local name is blank so don't add
10644 # the language to the list.
10648 # Get the 'friendly' name of the language file name (basically
10649 # remove the .xml part from the filename.
10651 $language_file_length = length($language_filename);
10655 # Get a character from the language filename and currently
10656 # set by the seek counter.
10658 $language_file_char = substr($language_filename, $language_file_seek, 1);
10660 # Check if the character is a dot and if it is then set the
10661 # last dot value to the seek counter value.
10663 if ($language_file_char eq "."){
10665 # Current chatacter is a dot so set the last dot value
10666 # to what is currently the seek counter.
10668 $language_flie_dot = $language_file_seek;
10672 # Current character is not a dot, so do nothing.
10676 # Increment the seek counter.
10678 $language_file_seek++;
10680 } until ($language_file_seek eq $language_file_length);
10682 # Reset the seek counter.
10684 $language_file_seek = 0;
10686 # Process the file name again and this time process the file
10687 # name until it reaches the last dot found.
10691 # Get the character the seek counter is currently set at.
10693 $language_file_char = substr($language_filename, $language_file_seek, 1);
10695 # Append the character to the friendly file name.
10697 $language_file_friendly = $language_file_friendly . $language_file_char;
10699 # Increment the seek counter.
10701 $language_file_seek++;
10703 } until ($language_file_seek eq $language_flie_dot);
10705 # Append the language to the available languages list.
10707 $language_list{$language_file_count}{Filename} = $language_file_friendly;
10708 $language_list{$language_file_count}{Name} = $language_file_localname;
10709 $language_file_count++;
10711 # Reset certain counters and values before continuing.
10713 $language_file_seek = 0;
10714 $language_flie_dot = 0;
10715 $language_file_length = 0;
10716 $language_file_char = "";
10717 $language_file_friendly = "";
10723 # Get the list of presentation modules available.
10725 my %presmodule_list;
10726 my @presmodule_directory;
10728 my $presmodule_file = "";
10729 my $presmodule_char = "";
10730 my $presmodule_dot = 0;
10731 my $presmodule_firstdot = 0;
10732 my $presmodule_firstdotfound = "";
10733 my $presmodule_seek = 0;
10734 my $presmodule_length = 0;
10735 my $presmodule_count = 0;
10736 my $presmodule_friendly = "";
10737 my $presmodule_selectlist = "";
10738 my $presmodule_config = $kiriwrite_config{"system_presmodule"};
10740 # Open and get the list of presentation modules (perl modules) by filtering
10743 opendir(OUTPUTSYSTEMDIR, "Modules/Presentation");
10744 @presmodule_directory = grep /m*\.pm$/, readdir(OUTPUTSYSTEMDIR);
10745 closedir(OUTPUTSYSTEMDIR);
10747 # Process each presentation module and add them to the list of available
10748 # presentation modules.
10750 foreach $presmodule_file (@presmodule_directory){
10752 # Get the length of the presentation module (perl module) filename.
10754 $presmodule_length = length($presmodule_file);
10756 # Get the friendly name of the Perl module (by getting rid of the
10757 # .pm part of the filename).
10761 $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10763 # Check if the current character is a dot and if it is then
10764 # set the last dot found number to the current seek number.
10766 if ($presmodule_char eq "."){
10768 # Put the seek value as the last dot found number.
10770 $presmodule_dot = $presmodule_seek;
10774 # Increment the seek counter.
10776 $presmodule_seek++;
10778 } until ($presmodule_seek eq $presmodule_length);
10780 # Reset the seek counter as it is going to be used again.
10782 $presmodule_seek = 0;
10784 # Get the friendly name of the Perl module by the processing the file
10785 # name to the last dot the previous 'do' tried to find.
10789 # Get the character the seek counter is currently set at.
10791 $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10793 # Append the character to the friendly name of the presentation module.
10795 $presmodule_friendly = $presmodule_friendly . $presmodule_char;
10797 # Increment the seek counter.
10799 $presmodule_seek++;
10801 } until ($presmodule_seek eq $presmodule_dot);
10803 # Append the option to tbe list of available presentation modules.
10805 $presmodule_list{$presmodule_count}{Filename} = $presmodule_friendly;
10807 # Reset the following values.
10809 $presmodule_seek = 0;
10810 $presmodule_length = 0;
10811 $presmodule_char = "";
10812 $presmodule_friendly = "";
10813 $presmodule_count++;
10817 # Get the list of database modules available.
10820 my @dbmodule_directory;
10822 my $dbmodule_file = "";
10823 my $dbmodule_char = "";
10824 my $dbmodule_dot = 0;
10825 my $dbmodule_firstdot = 0;
10826 my $dbmodule_firstdotfound = "";
10827 my $dbmodule_seek = 0;
10828 my $dbmodule_length = 0;
10829 my $dbmodule_count = 0;
10830 my $dbmodule_friendly = "";
10831 my $dbmodule_selectlist = "";
10832 my $dbmodule_config = $kiriwrite_config{"system_dbmodule"};
10834 # Open and get the list of presentation modules (perl modules) by filtering
10837 opendir(DATABASEDIR, "Modules/Database");
10838 @dbmodule_directory = grep /m*\.pm$/, readdir(DATABASEDIR);
10839 closedir(DATABASEDIR);
10841 # Process each presentation module and add them to the list of available
10842 # presentation modules.
10844 foreach $dbmodule_file (@dbmodule_directory){
10846 # Get the length of the database module (perl module) filename.
10848 $dbmodule_length = length($dbmodule_file);
10850 # Get the friendly name of the Perl module (by getting rid of the
10851 # .pm part of the filename).
10855 $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10857 # Check if the current character is a dot and if it is then
10858 # set the last dot found number to the current seek number.
10860 if ($dbmodule_char eq "."){
10862 # Put the seek value as the last dot found number.
10864 $dbmodule_dot = $dbmodule_seek;
10868 # Increment the seek counter.
10872 } until ($dbmodule_seek eq $dbmodule_length);
10874 # Reset the seek counter as it is going to be used again.
10876 $dbmodule_seek = 0;
10878 # Get the friendly name of the Perl module by the processing the file
10879 # name to the last dot the previous 'do' tried to find.
10883 # Get the character the seek counter is currently set at.
10885 $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10887 # Append the character to the friendly name of the presentation module.
10889 $dbmodule_friendly = $dbmodule_friendly . $dbmodule_char;
10891 # Increment the seek counter.
10895 } until ($dbmodule_seek eq $dbmodule_dot);
10897 # Append the option to tbe list of available database modules.
10899 $dbmodule_list{$dbmodule_count}{Filename} = $dbmodule_friendly;
10901 # Reset the following values.
10903 $dbmodule_seek = 0;
10904 $dbmodule_length = 0;
10905 $dbmodule_char = "";
10906 $dbmodule_friendly = "";
10911 # Get the directory settings.
10913 my $directory_settings_database = $kiriwrite_config{"directory_data_db"};
10914 my $directory_settings_output = $kiriwrite_config{"directory_data_output"};
10915 my $directory_settings_imagesuri = $kiriwrite_config{"directory_noncgi_images"};
10916 my $datetime_setting = $kiriwrite_config{"system_datetime"};
10918 my $database_server = $kiriwrite_config{"database_server"};
10919 my $database_port = $kiriwrite_config{"database_port"};
10920 my $database_protocol = $kiriwrite_config{"database_protocol"};
10921 my $database_sqldatabase = $kiriwrite_config{"database_sqldatabase"};
10922 my $database_username = $kiriwrite_config{"database_username"};
10923 my $database_passwordhash = $kiriwrite_config{"database_passwordhash"};
10924 my $database_password = $kiriwrite_config{"database_password"};
10925 my $database_prefix = $kiriwrite_config{"database_tableprefix"};
10927 # Print out a form for editing the settings.
10929 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{editsettings}, { Style => "pageheader" });
10930 $kiriwrite_presmodule->addlinebreak();
10931 $kiriwrite_presmodule->addlinebreak();
10932 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{setting}->{warning});
10933 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{warningmessage});
10934 $kiriwrite_presmodule->addlinebreak();
10935 $kiriwrite_presmodule->addlinebreak();
10937 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
10938 $kiriwrite_presmodule->addhiddendata("mode", "settings");
10939 $kiriwrite_presmodule->addhiddendata("action", "edit");
10940 $kiriwrite_presmodule->addhiddendata("confirm", 1);
10942 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10944 $kiriwrite_presmodule->startheader();
10945 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10946 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10947 $kiriwrite_presmodule->endheader();
10949 $kiriwrite_presmodule->startrow();
10950 $kiriwrite_presmodule->addcell("tablecellheader");
10951 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10952 $kiriwrite_presmodule->endcell();
10953 $kiriwrite_presmodule->addcell("tablecellheader");
10954 $kiriwrite_presmodule->endcell();
10955 $kiriwrite_presmodule->endrow();
10957 $kiriwrite_presmodule->startrow();
10958 $kiriwrite_presmodule->addcell("tablecell1");
10959 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10960 $kiriwrite_presmodule->endcell();
10961 $kiriwrite_presmodule->addcell("tablecell2");
10962 $kiriwrite_presmodule->addinputbox("databasedir", { Size => 32, MaxLength => 64, Value => $directory_settings_database });
10963 $kiriwrite_presmodule->endcell();
10964 $kiriwrite_presmodule->endrow();
10966 $kiriwrite_presmodule->startrow();
10967 $kiriwrite_presmodule->addcell("tablecell1");
10968 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
10969 $kiriwrite_presmodule->endcell();
10970 $kiriwrite_presmodule->addcell("tablecell2");
10971 $kiriwrite_presmodule->addinputbox("outputdir", { Size => 32, MaxLength => 64, Value => $directory_settings_output });
10972 $kiriwrite_presmodule->endcell();
10973 $kiriwrite_presmodule->endrow();
10975 $kiriwrite_presmodule->startrow();
10976 $kiriwrite_presmodule->addcell("tablecell1");
10977 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
10978 $kiriwrite_presmodule->endcell();
10979 $kiriwrite_presmodule->addcell("tablecell2");
10980 $kiriwrite_presmodule->addinputbox("imagesuripath", { Size => 32, MaxLength => 64, Value => $directory_settings_imagesuri });
10981 $kiriwrite_presmodule->endcell();
10982 $kiriwrite_presmodule->endrow();
10984 $kiriwrite_presmodule->startrow();
10985 $kiriwrite_presmodule->addcell("tablecellheader");
10986 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
10987 $kiriwrite_presmodule->endcell();
10988 $kiriwrite_presmodule->addcell("tablecellheader");
10989 $kiriwrite_presmodule->endcell();
10990 $kiriwrite_presmodule->endrow();
10992 $kiriwrite_presmodule->startrow();
10993 $kiriwrite_presmodule->addcell("tablecell1");
10994 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
10995 $kiriwrite_presmodule->endcell();
10996 $kiriwrite_presmodule->addcell("tablecell2");
10997 $kiriwrite_presmodule->addinputbox("datetime", { Size => 32, MaxLength => 64, Value => $datetime_setting });
10998 $kiriwrite_presmodule->addlinebreak();
10999 $kiriwrite_presmodule->addlinebreak();
11000 $kiriwrite_presmodule->startbox("datalist");
11002 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleday});
11003 $kiriwrite_presmodule->addlinebreak();
11004 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleday});
11005 $kiriwrite_presmodule->addlinebreak();
11006 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlemonth});
11007 $kiriwrite_presmodule->addlinebreak();
11008 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublemonth});
11009 $kiriwrite_presmodule->addlinebreak();
11010 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleyear});
11011 $kiriwrite_presmodule->addlinebreak();
11012 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleyear});
11013 $kiriwrite_presmodule->addlinebreak();
11014 $kiriwrite_presmodule->addlinebreak();
11015 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlehour});
11016 $kiriwrite_presmodule->addlinebreak();
11017 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublehour});
11018 $kiriwrite_presmodule->addlinebreak();
11019 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleminute});
11020 $kiriwrite_presmodule->addlinebreak();
11021 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleminute});
11022 $kiriwrite_presmodule->addlinebreak();
11023 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlesecond});
11024 $kiriwrite_presmodule->addlinebreak();
11025 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublesecond});
11026 $kiriwrite_presmodule->addlinebreak();
11027 $kiriwrite_presmodule->addlinebreak();
11028 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{othercharacters});
11029 $kiriwrite_presmodule->endbox();
11030 $kiriwrite_presmodule->endcell();
11031 $kiriwrite_presmodule->endrow();
11033 $kiriwrite_presmodule->startrow();
11034 $kiriwrite_presmodule->addcell("tablecellheader");
11035 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
11036 $kiriwrite_presmodule->endcell();
11037 $kiriwrite_presmodule->addcell("tablecellheader");
11038 $kiriwrite_presmodule->endcell();
11039 $kiriwrite_presmodule->endrow();
11041 $kiriwrite_presmodule->startrow();
11042 $kiriwrite_presmodule->addcell("tablecell1");
11043 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
11044 $kiriwrite_presmodule->endcell();
11045 $kiriwrite_presmodule->addcell("tablecell2");
11047 $kiriwrite_presmodule->addselectbox("language");
11049 # Process the list of available languages.
11051 foreach $language (keys %language_list){
11053 # Check if the language filename matches the filename in the configuration
11056 if ($language_list{$language}{Filename} eq $language_config){
11058 $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} , Selected => 1 });
11062 $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} });
11068 $kiriwrite_presmodule->endselectbox();
11070 $kiriwrite_presmodule->startrow();
11071 $kiriwrite_presmodule->addcell("tablecellheader");
11072 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
11073 $kiriwrite_presmodule->endcell();
11074 $kiriwrite_presmodule->addcell("tablecellheader");
11075 $kiriwrite_presmodule->endcell();
11076 $kiriwrite_presmodule->endrow();
11078 $kiriwrite_presmodule->startrow();
11079 $kiriwrite_presmodule->addcell("tablecell1");
11080 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
11081 $kiriwrite_presmodule->endcell();
11082 $kiriwrite_presmodule->addcell("tablecell2");
11084 $kiriwrite_presmodule->addselectbox("presmodule");
11086 # Process the list of available presentation modules.
11088 foreach $presmodule (keys %presmodule_list){
11090 # Check if the presentation module fileanme matches the filename in the
11091 # configuration file.
11093 if ($presmodule_list{$presmodule}{Filename} eq $presmodule_config){
11095 $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} , Selected => 1 });
11099 $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} });
11105 $kiriwrite_presmodule->endselectbox();
11107 $kiriwrite_presmodule->endcell();
11108 $kiriwrite_presmodule->endrow();
11110 $kiriwrite_presmodule->startrow();
11111 $kiriwrite_presmodule->addcell("tablecell1");
11112 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
11113 $kiriwrite_presmodule->endcell();
11114 $kiriwrite_presmodule->addcell("tablecell2");
11116 # Process the list of available database modules.
11118 $kiriwrite_presmodule->addselectbox("dbmodule");
11120 foreach $dbmodule (keys %dbmodule_list){
11122 # Check if the database module fileanme matches the filename in the
11123 # configuration file.
11125 if ($dbmodule_list{$dbmodule}{Filename} eq $dbmodule_config){
11127 $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} , Selected => 1 });
11131 $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} });
11138 $kiriwrite_presmodule->endselectbox();
11140 $kiriwrite_presmodule->endcell();
11141 $kiriwrite_presmodule->endrow();
11143 $kiriwrite_presmodule->startrow();
11144 $kiriwrite_presmodule->addcell("tablecell1");
11145 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseserver});
11146 $kiriwrite_presmodule->endcell();
11147 $kiriwrite_presmodule->addcell("tablecell2");
11148 $kiriwrite_presmodule->addinputbox("database_server", { Size => 32, MaxLength => 128, Value => $database_server });
11149 $kiriwrite_presmodule->endcell();
11150 $kiriwrite_presmodule->endrow();
11152 $kiriwrite_presmodule->startrow();
11153 $kiriwrite_presmodule->addcell("tablecell1");
11154 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseport});
11155 $kiriwrite_presmodule->endcell();
11156 $kiriwrite_presmodule->addcell("tablecell2");
11157 $kiriwrite_presmodule->addinputbox("database_port", { Size => 5, MaxLength => 5, Value => $database_port });
11158 $kiriwrite_presmodule->endcell();
11159 $kiriwrite_presmodule->endrow();
11161 $kiriwrite_presmodule->startrow();
11162 $kiriwrite_presmodule->addcell("tablecell1");
11163 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseprotocol});
11164 $kiriwrite_presmodule->endcell();
11165 $kiriwrite_presmodule->addcell("tablecell2");
11167 # Check if TCP is being used.
11169 $kiriwrite_presmodule->addselectbox("database_protocol");
11171 if ($database_protocol eq "tcp"){
11173 # The TCP protocol is selected so have the TCP option selected.
11175 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp", Selected => 1});
11179 # The TCP protocol is not selected.
11181 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp"});
11185 # Check if UDP is being used.
11187 if ($database_protocol eq "udp"){
11189 # The UDP protocol is selected so have the UDP option selected.
11191 $kiriwrite_presmodule->addoption("UDP", { Value => "udp", Selected => 1});
11195 # The UDP protocol is not selected.
11197 $kiriwrite_presmodule->addoption("UDP", { Value => "udp"});
11201 $kiriwrite_presmodule->endselectbox();
11203 $kiriwrite_presmodule->endcell();
11204 $kiriwrite_presmodule->endrow();
11206 $kiriwrite_presmodule->startrow();
11207 $kiriwrite_presmodule->addcell("tablecell1");
11208 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasename});
11209 $kiriwrite_presmodule->endcell();
11210 $kiriwrite_presmodule->addcell("tablecell2");
11211 $kiriwrite_presmodule->addinputbox("database_sqldatabase", { Size => 32, MaxLength => 32, Value => $database_sqldatabase });
11212 $kiriwrite_presmodule->endcell();
11213 $kiriwrite_presmodule->endrow();
11215 $kiriwrite_presmodule->startrow();
11216 $kiriwrite_presmodule->addcell("tablecell1");
11217 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseusername});
11218 $kiriwrite_presmodule->endcell();
11219 $kiriwrite_presmodule->addcell("tablecell2");
11220 $kiriwrite_presmodule->addinputbox("database_username", { Size => 16, MaxLength => 16, Value => $database_username });
11221 $kiriwrite_presmodule->endcell();
11222 $kiriwrite_presmodule->endrow();
11224 $kiriwrite_presmodule->startrow();
11225 $kiriwrite_presmodule->addcell("tablecell1");
11226 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasepassword});
11227 $kiriwrite_presmodule->endcell();
11228 $kiriwrite_presmodule->addcell("tablecell2");
11229 $kiriwrite_presmodule->addinputbox("database_password", { Size => 16, MaxLength => 64, Password => 1 });
11230 $kiriwrite_presmodule->addtext(" ");
11231 $kiriwrite_presmodule->addcheckbox("database_password_keep", { OptionDescription => "Keep the current password", Checked => 1 });
11232 $kiriwrite_presmodule->endcell();
11233 $kiriwrite_presmodule->endrow();
11235 $kiriwrite_presmodule->startrow();
11236 $kiriwrite_presmodule->addcell("tablecell1");
11237 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{tableprefix});
11238 $kiriwrite_presmodule->endcell();
11239 $kiriwrite_presmodule->addcell("tablecell2");
11240 $kiriwrite_presmodule->addinputbox("database_tableprefix", { Size => 16, MaxLength => 16, Value => $database_prefix });
11241 $kiriwrite_presmodule->endcell();
11242 $kiriwrite_presmodule->endrow();
11244 $kiriwrite_presmodule->endtable();
11246 $kiriwrite_presmodule->addlinebreak();
11247 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{setting}->{changesettingsbutton});
11248 $kiriwrite_presmodule->addtext(" | ");
11249 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
11250 $kiriwrite_presmodule->addtext(" | ");
11251 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
11253 $kiriwrite_presmodule->endform();
11255 return $kiriwrite_presmodule->grab();
11259 sub kiriwrite_settings_load{
11260 #################################################################################
11261 # kiriwrite_settings_load: Load the configuration settings into the global #
11266 # kiriwrite_settings_load(); #
11267 #################################################################################
11269 # Load the required Perl modules.
11271 use XML::Simple qw(XMLin);
11272 my $xsl = XML::Simple->new();
11274 # Check if the Kiriwrite configuration file exists before using it and
11275 # return an critical error if it doesn't exist.
11277 my $kiriwrite_conf_exist = kiriwrite_fileexists("kiriwrite.xml");
11279 if ($kiriwrite_conf_exist eq 1){
11281 # The configuration really does not exist so return an critical error.
11283 kiriwrite_critical("configfilemissing");
11287 # Check if the Kiriwrite configuration file has valid permission settings
11288 # before using it and return an critical error if it doesn't have the
11289 # valid permission settings.
11291 my $kiriwrite_conf_permissions = kiriwrite_filepermissions("kiriwrite.xml", 1, 0);
11293 if ($kiriwrite_conf_permissions eq 1){
11295 # The permission settings for the Kiriwrite configuration file are
11296 # invalid, so return an critical error.
11298 kiriwrite_critical("configfileinvalidpermissions");
11302 # Converts the XML file into meaningful data for later on in this subroutine.
11304 my $kiriwrite_conf_file = 'kiriwrite.xml';
11305 my $kiriwrite_conf_data = $xsl->XMLin($kiriwrite_conf_file, SuppressEmpty => 1);
11307 # Go and fetch the settings and place them into a hash (that is global).
11309 %kiriwrite_config = (
11311 "directory_data_db" => $kiriwrite_conf_data->{settings}->{directories}->{database},
11312 "directory_data_output" => $kiriwrite_conf_data->{settings}->{directories}->{output},
11313 "directory_noncgi_images" => $kiriwrite_conf_data->{settings}->{directories}->{images},
11315 "system_language" => $kiriwrite_conf_data->{settings}->{language}->{lang},
11316 "system_presmodule" => $kiriwrite_conf_data->{settings}->{system}->{presentation},
11317 "system_dbmodule" => $kiriwrite_conf_data->{settings}->{system}->{database},
11318 "system_datetime" => $kiriwrite_conf_data->{settings}->{system}->{datetime},
11320 "database_server" => $kiriwrite_conf_data->{settings}->{database}->{server},
11321 "database_port" => $kiriwrite_conf_data->{settings}->{database}->{port},
11322 "database_protocol" => $kiriwrite_conf_data->{settings}->{database}->{protocol},
11323 "database_sqldatabase" => $kiriwrite_conf_data->{settings}->{database}->{database},
11324 "database_username" => $kiriwrite_conf_data->{settings}->{database}->{username},
11325 "database_password" => $kiriwrite_conf_data->{settings}->{database}->{password},
11326 "database_tableprefix" => $kiriwrite_conf_data->{settings}->{database}->{prefix}
11330 # Do a validation check on all of the variables that were loaded into the global configuration hash.
11332 kiriwrite_variablecheck($kiriwrite_config{"directory_data_db"}, "maxlength", 64, 0);
11333 kiriwrite_variablecheck($kiriwrite_config{"directory_data_output"}, "maxlength", 64, 0);
11334 kiriwrite_variablecheck($kiriwrite_config{"directory_noncgi_images"}, "maxlength", 512, 0);
11335 kiriwrite_variablecheck($kiriwrite_config{"directory_data_template"}, "maxlength", 64, 0);
11337 my $kiriwrite_config_language_filename = kiriwrite_variablecheck($kiriwrite_config{"system_language"}, "language_filename", "", 1);
11338 my $kiriwrite_config_presmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_presmodule"}, "module", 0, 1);
11339 my $kiriwrite_config_dbmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_dbmodule"}, "module", 0, 1);
11341 # Check if the language filename is valid and return an critical error if
11344 if ($kiriwrite_config_language_filename eq 1){
11346 # The language filename is blank so return an critical error.
11348 kiriwrite_critical("languagefilenameblank");
11350 } elsif ($kiriwrite_config_language_filename eq 2){
11352 # The language filename is invalid so return an critical error.
11354 kiriwrite_critical("languagefilenameinvalid");
11358 # Check if the presentation and database module names are valid and return a critical
11359 # error if they aren't.
11361 if ($kiriwrite_config_presmodule_filename eq 1){
11363 # The presentation module filename given is blank so return an
11366 kiriwrite_critical("presmoduleblank");
11370 if ($kiriwrite_config_presmodule_filename eq 2){
11372 # The presentation module filename is invalid so return an
11375 kiriwrite_critical("presmoduleinvalid");
11379 if ($kiriwrite_config_dbmodule_filename eq 1){
11381 # The database module filename given is blank so return an
11384 kiriwrite_critical("dbmoduleblank");
11388 if ($kiriwrite_config_dbmodule_filename eq 2){
11390 # The database module filename given is invalid so return
11391 # an critical error.
11393 kiriwrite_critical("dbmoduleinvalid");
11397 # Check if the language file does exist before loading it and return an critical error
11398 # if it does not exist.
11400 my $kiriwrite_config_language_fileexists = kiriwrite_fileexists("lang/" . $kiriwrite_config{"system_language"} . ".xml");
11402 if ($kiriwrite_config_language_fileexists eq 1){
11404 # Language file does not exist so return an critical error.
11406 kiriwrite_critical("languagefilemissing");
11410 # Check if the language file has valid permission settings and return an critical error if
11411 # the language file has invalid permissions settings.
11413 my $kiriwrite_config_language_filepermissions = kiriwrite_filepermissions("lang/" . $kiriwrite_config{"system_language"} . ".xml", 1, 0);
11415 if ($kiriwrite_config_language_filepermissions eq 1){
11417 # Language file contains invalid permissions so return an critical error.
11419 kiriwrite_critical("languagefilepermissions");
11423 # Load the language file.
11425 $kiriwrite_lang = $xsl->XMLin("lang/" . $kiriwrite_config{"system_language"} . ".xml", SuppressEmpty => 1);
11427 # Check if the presentation module does exist before loading it and return an critical error
11428 # if the presentation module does not exist.
11430 my $kiriwrite_config_presmodule_fileexists = kiriwrite_fileexists("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm");
11432 if ($kiriwrite_config_presmodule_fileexists eq 1){
11434 # Presentation module does not exist so return an critical error.
11436 kiriwrite_critical("presmodulemissing");
11440 # Check if the presentation module does have the valid permission settings and return a
11441 # critical error if the presentation module contains invalid permission settings.
11443 my $kiriwrite_config_presmodule_permissions = kiriwrite_filepermissions("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm", 1, 0);
11445 if ($kiriwrite_config_presmodule_permissions eq 1){
11447 # Presentation module contains invalid permissions so return an critical error.
11449 kiriwrite_critical("presmoduleinvalidpermissions");
11453 # Check if the database module does exist before loading it and return an critical error
11454 # if the database module does not exist.
11456 my $kiriwrite_config_dbmodule_fileexists = kiriwrite_fileexists("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm");
11458 if ($kiriwrite_config_dbmodule_fileexists eq 1){
11460 # Database module does not exist so return an critical error.
11462 kiriwrite_critical("dbmodulemissing");
11466 # Check if the database module does have the valid permission settings and return an
11467 # critical error if the database module contains invalid permission settings.
11469 my $kiriwrite_config_dbmodule_permissions = kiriwrite_filepermissions("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm", 1, 0);
11471 if ($kiriwrite_config_dbmodule_permissions eq 1){
11473 # Presentation module contains invalid permissions so return an critical error.
11475 kiriwrite_critical("dbmoduleinvalidpermissions");
11479 # Include the Modules directory.
11481 use lib "Modules/";
11483 # Load the presentation module.
11485 my $presmodulename = "Presentation::" . $kiriwrite_config{"system_presmodule"};
11486 ($presmodulename) = $presmodulename =~ m/^(.*)$/g;
11487 eval "use " . $presmodulename;
11488 $presmodulename = "Kiriwrite::Presentation::" . $kiriwrite_config{"system_presmodule"};
11489 $kiriwrite_presmodule = $presmodulename->new();
11491 # Load the database module.
11493 my $dbmodulename = "Database::" . $kiriwrite_config{"system_dbmodule"};
11494 ($dbmodulename) = $dbmodulename =~ m/^(.*)$/g;
11495 eval "use " . $dbmodulename;
11496 $dbmodulename = "Kiriwrite::Database::" . $kiriwrite_config{"system_dbmodule"};
11497 $kiriwrite_dbmodule = $dbmodulename->new();
11499 # Load the following settings to the database module.
11501 $kiriwrite_dbmodule->loadsettings({ Directory => $kiriwrite_config{"directory_data_db"}, DateTime => $kiriwrite_config{"system_datetime"}, Server => $kiriwrite_config{"database_server"}, Port => $kiriwrite_config{"database_port"}, Protocol => $kiriwrite_config{"database_protocol"}, Database => $kiriwrite_config{"database_sqldatabase"}, Username => $kiriwrite_config{"database_username"}, Password => $kiriwrite_config{"database_password"}, TablePrefix => $kiriwrite_config{"database_tableprefix"} });
11507 sub kiriwrite_variablecheck{
11508 #################################################################################
11509 # kiriwrite_variablecheck: Checks the variables for any invalid characters. #
11513 # kiriwrite_variablecheck(variablename, type, length, noerror); #
11515 # variablename Specifies the variable to be checked. #
11516 # type Specifies what type the variable is. #
11517 # option Specifies the maximum/minimum length of the variable #
11518 # (if minlength/maxlength is used) or if the filename should be #
11519 # checked to see if it is blank. #
11520 # noerror Specifies if Kiriwrite should return an error or not on #
11521 # certain values. #
11522 #################################################################################
11524 # Get the values that were passed to the subroutine.
11526 my ($variable_data, $variable_type, $variable_option, $variable_noerror) = @_;
11528 if ($variable_type eq "numbers"){
11530 # Check for numbers and return an error if there is anything else than numebrs.
11532 my $variable_data_validated = $variable_data; # Copy the variable_data to variable_data_validated.
11533 $variable_data_validated =~ tr/0-9//d; # Take away all of the numbers and from the variable.
11534 # If it only contains numbers then it should be blank.
11536 if ($variable_data_validated eq ""){
11537 # The validated variable is blank. So continue to the end of this section where the return function should be.
11539 # The variable is not blank, so check if the no error value is set
11542 if ($variable_noerror eq 1){
11544 # The validated variable is not blank and the noerror
11545 # value is set to 1. So return an value of 1.
11546 # (meaning that the data is invalid).
11550 } elsif ($variable_noerror eq 0) {
11552 # The validated variable is not blank and the noerror
11553 # value is set to 0.
11555 kiriwrite_error("invalidvariable");
11559 # The variable noerror value is something else
11560 # pther than 1 or 0. So return an error.
11562 kiriwrite_error("invalidvariable");
11570 } elsif ($variable_type eq "lettersnumbers"){
11572 # Check for letters and numbers and return an error if there is anything else other
11573 # than letters and numbers.
11575 my $variable_data_validated = $variable_data; # Copy the variable_data to variable_data_validated
11576 $variable_data_validated =~ tr/a-zA-Z0-9.//d;
11577 $variable_data_validated =~ s/\s//g;
11579 if ($variable_data_validated eq ""){
11580 # The validated variable is blank. So continue to the end of this section where the return function should be.
11582 # The variable is not blank, so check if the no error value is set
11585 if ($variable_noerror eq 1){
11587 # The validated variable is not blank and the noerror
11588 # value is set to 1. So return an value of 1.
11589 # (meaning that the data is invalid).
11593 } elsif ($variable_noerror eq 0) {
11595 # The validated variable is not blank and the noerror
11596 # value is set to 0.
11598 kiriwrite_error("invalidvariable");
11602 # The variable noerror value is something else
11603 # pther than 1 or 0. So return an error.
11605 kiriwrite_error("invalidvariable");
11613 } elsif ($variable_type eq "maxlength"){
11614 # Check for the length of the variable, return an error if it is longer than the length specified.
11616 # Check if the variable_data string is blank, if it is then set the variable_data_length
11619 my $variable_data_length = 0;
11621 if (!$variable_data){
11623 # Set variable_data_length to '0'.
11624 $variable_data_length = 0;
11628 # Get the length of the variable recieved.
11629 $variable_data_length = length($variable_data);
11635 if ($variable_data_length > $variable_option){
11637 # The variable length is longer than it should be so check if
11638 # the no error value is set 1.
11640 if ($variable_noerror eq 1){
11642 # The no error value is set to 1, so return an
11643 # value of 1 (meaning tha the variable is
11644 # too long to be used).
11648 } elsif ($variable_noerror eq 0){
11650 # The no error value is set to 0, so return
11653 kiriwrite_error("variabletoolong");
11657 # The no error value is something else other
11658 # than 0 or 1, so return an error.
11660 kiriwrite_error("variabletoolong");
11666 # The variable length is exactly or shorter than specified, so continue to end of this section where
11667 # the return function should be.
11673 } elsif ($variable_type eq "blank"){
11674 # Check if the variable is blank and if it is blank, then return an error.
11676 if (!$variable_data){
11678 # The variable data really is blank, so check what
11679 # the no error value is set.
11681 if ($variable_noerror eq 1){
11683 # The no error value is set to 1, so return
11684 # a value of 1 (saying that the variable was
11689 } elsif ($variable_noerror eq 0){
11691 # The no error value is set to 0, so return
11694 kiriwrite_error("blankvariable");
11698 # The no error value is something else other
11699 # than 0 or 1, so return an error.
11701 kiriwrite_error("invalidvariable");
11709 } elsif ($variable_type eq "filename"){
11710 # Check for letters and numbers, if anything else than letters and numbers is there (including spaces) return
11713 # Check if the filename passed is blank, if it is then return with an error.
11715 if ($variable_data eq ""){
11717 # The filename specified is blank, so check what the
11718 # noerror value is set.
11720 if ($variable_noerror eq 1){
11722 # The no error value is set to 1 so return
11723 # a value of 1 (meaning that the filename
11728 } elsif ($variable_noerror eq 0){
11730 # The no error value is set to 1 so return
11733 kiriwrite_error("blankfilename");
11737 # The no error value is something else other
11738 # than 0 or 1, so return an error.
11740 kiriwrite_error("invalidvariable");
11749 my $variable_data_validated = $variable_data;
11750 $variable_data_validated =~ tr/a-zA-Z0-9\.//d;
11752 # Check if the validated data variable is blank, if it is
11753 # then continue to the end of this section where the return
11754 # function should be, otherwise return an error.
11756 if ($variable_data_validated eq ""){
11758 # The validated data variable is blank, meaning that
11759 # it only contained letters and numbers.
11763 # The validated data variable is not blank, meaning
11764 # that it contains something else, so return an error
11767 if ($variable_noerror eq 1){
11769 # The no error value is set to 1 so return
11770 # an value of 2. (meaning that the filename
11776 } elsif ($variable_noerror eq 0){
11778 # The no error value is set to 0 so return
11781 kiriwrite_error("invalidfilename");
11785 # The no error value is something else other
11786 # than 0 or 1 so return an error.
11788 kiriwrite_error("invalidvariable");
11796 } elsif ($variable_type eq "filenameindir"){
11797 # Check if the filename is in the directory and return an
11798 # error if it isn't.
11800 if ($variable_data eq ""){
11802 # The filename specified is blank, so check what the
11803 # noerror value is set.
11805 if ($variable_noerror eq 1){
11807 # The no error value is set to 1 so return
11808 # a value of 1 (meaning that the filename
11813 } elsif ($variable_noerror eq 0){
11815 # The no error value is set to 1 so return
11818 kiriwrite_error("blankfilename");
11822 # The no error value is something else other
11823 # than 0 or 1, so return an error.
11825 kiriwrite_error("invalidvariable");
11834 # Set the following variables for later on.
11836 my $variable_data_length = 0;
11837 my $variable_data_char = "";
11838 my $variable_data_validated = "";
11839 my $variable_data_seek = 0;
11840 my $variable_database_list = "";
11841 my $variable_database_listcurrent = "";
11842 my $variable_data_firstlevel = 1;
11844 # Get the length of the variable recieved.
11846 $variable_data_length = length($variable_data);
11848 # Check if the database filename contains the directory command
11849 # for up a directory level and if it is, return an error
11850 # or return with a number.
11854 # Get a character from the filename passed to this subroutine.
11856 $variable_data_char = substr($variable_data, $variable_data_seek, 1);
11858 # Check if the current character is the forward slash character.
11860 if ($variable_data_char eq "/"){
11862 # Check if the current directory is blank (and on the first level), or if the
11863 # current directory contains two dots or one dot, if it does return an error.
11865 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
11867 # Check if the noerror value is set to 1, if it is return an
11868 # number, else return an proper error.
11870 if ($variable_noerror eq 1){
11872 # Page filename contains invalid characters and
11873 # the no error value is set to 1 so return a
11874 # value of 2 (meaning that the page filename
11879 } elsif ($variable_noerror eq 0) {
11881 # Page filename contains invalid characters and
11882 # the no error value is set to 0 so return an
11885 kiriwrite_error("invalidfilename");
11889 # The no error value is something else other
11890 # than 0 or 1 so return an error.
11892 kiriwrite_error("invalidvariable");
11898 # Append the forward slash, clear the current directory name and set
11899 # the first directory level value to 0.
11901 $variable_database_list = $variable_database_list . $variable_data_char;
11902 $variable_database_listcurrent = "";
11903 $variable_data_firstlevel = 0;
11907 # Append the current character to the directory name and to the current
11910 $variable_database_list = $variable_database_list . $variable_data_char;
11911 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
11915 # Increment the seek counter.
11917 $variable_data_seek++;
11919 } until ($variable_data_seek eq $variable_data_length);
11923 } elsif ($variable_type eq "datetime"){
11924 # Check if the date and time setting format is valid.
11926 if ($variable_data eq ""){
11928 if ($variable_noerror eq 1){
11930 # The no error value is set to 1 so return
11931 # a value of 1 (meaning that the date and
11932 # time format was blank).
11936 } elsif ($variable_noerror eq 0){
11938 # The no error value is set to 1 so return
11941 kiriwrite_error("blankdatetimeformat");
11945 # The no error value is something else other
11946 # than 0 or 1, so return an error.
11948 kiriwrite_error("invalidvariable");
11954 my $variable_data_validated = $variable_data;
11955 $variable_data_validated =~ tr|dDmMyYhms/():[ ]||d;
11957 if ($variable_data_validated eq ""){
11959 # The date and time format is valid. So
11964 # The validated data variable is not blank, meaning
11965 # that it contains something else, so return an error
11968 if ($variable_noerror eq 1){
11970 # The no error value is set to 1 so return
11971 # an value of 2. (meaning that the date and
11972 # time format was invalid).
11976 } elsif ($variable_noerror eq 0){
11978 # The no error value is set to 0 so return
11981 kiriwrite_error("invaliddatetimeformat");
11985 # The no error value is something else other
11986 # than 0 or 1 so return an error.
11988 kiriwrite_error("invalidvariable");
11996 } elsif ($variable_type eq "directory"){
11997 # Check if the directory only contains letters and numbers and
11998 # return an error if anything else appears.
12000 my $variable_data_validated = $variable_data;
12001 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12003 if ($variable_data eq ""){
12005 if ($variable_noerror eq 1){
12007 # The no error value is set to 1 so return
12008 # a value of 1 (meaning that the directory
12013 } elsif ($variable_noerror eq 0){
12015 # The no error value is set to 1 so return
12018 kiriwrite_error("blankdirectory");
12022 # The no error value is something else other
12023 # than 0 or 1, so return an error.
12025 kiriwrite_error("invalidvariable");
12031 if ($variable_data_validated eq ""){
12033 # The validated data variable is blank, meaning that
12034 # it only contains letters and numbers.
12038 # The validated data variable is not blank, meaning
12039 # that it contains something else, so return an error
12042 if ($variable_noerror eq 1){
12044 # The no error value is set to 1 so return
12045 # an value of 2. (meaning that the directory
12046 # name is invalid).
12050 } elsif ($variable_noerror eq 0){
12052 # The no error value is set to 0 so return
12055 kiriwrite_error("invaliddirectory");
12059 # The no error value is something else other
12060 # than 0 or 1 so return an error.
12062 kiriwrite_error("invalidvariable");
12070 } elsif ($variable_type eq "language_filename"){
12072 # The variable type is a language filename type.
12073 # Check if the language file name is blank and
12074 # if it is then return an error (or value).
12076 if ($variable_data eq ""){
12078 # The language filename is blank so check the
12079 # no error value and return an error (or value).
12081 if ($variable_noerror eq 1){
12083 # Language filename is blank and the no error value
12084 # is set as 1, so return a value of 1 (saying that
12085 # the language filename is blank).
12089 } elsif ($variable_noerror eq 0) {
12091 # Language filename is blank and the no error value
12092 # is not set as 1, so return an error.
12094 kiriwrite_critical("languagefilenameblank");
12098 # The noerror value is something else other
12099 # than 0 or 1 so return an error.
12101 kiriwrite_error("invalidvariable");
12107 # Set the following variables for later on.
12109 my $variable_data_length = 0;
12110 my $variable_data_char = "";
12111 my $variable_data_seek = 0;
12113 # Get the length of the language file name.
12115 $variable_data_length = length($variable_data);
12119 # Get a character from the language filename passed to this
12120 # subroutine and the character the seek counter value is set
12123 $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12125 # Check if the language filename contains a forward slash or a dot,
12126 # if the selected character is a forward slash then return an error
12129 if ($variable_data_char eq "/" || $variable_data_char eq "."){
12131 # The language filename contains a forward slash or
12132 # a dot so depending on the no error value, return
12133 # an error or a value.
12135 if ($variable_noerror eq 1){
12137 # Language filename contains a forward slash or a dot
12138 # and the no error value has been set to 1, so return
12139 # an value of 2 (saying that the language file name is
12144 } elsif ($variable_noerror eq 0) {
12146 # Language filename contains a forward slash and the no
12147 # error value has not been set to 1, so return an error.
12149 kiriwrite_critical("languagefilenameinvalid");
12153 # The noerror value is something else other than
12154 # 1 or 0 so return an error.
12156 kiriwrite_error("invalidvariable");
12162 # Increment the seek counter.
12164 $variable_data_seek++;
12166 } until ($variable_data_seek eq $variable_data_length);
12170 } elsif ($variable_type eq "pagesetting"){
12172 # The variable type is a page setting, so check if the page
12173 # setting has one of the valid options.
12175 if ($variable_data eq 0 || $variable_data eq 1 || $variable_data eq 2 || $variable_data eq 3){
12177 # The variable is one of the options above, so continue
12178 # to the end of this section.
12182 # The variable is not one of the options above, so check
12183 # and see if a error or a value should be returned.
12185 if ($variable_noerror eq 1){
12187 # The page setting is invalid and the no error
12188 # value is set 1, so return a value of 1
12189 # (saying that the page setting value is
12194 } elsif ($variable_noerror eq 0) {
12196 # Page setting is invalid and the no error value
12197 # is not 1, so return an error.
12199 kiriwrite_error("invalidvariable");
12203 # The no error value is something else other
12204 # than 0 or 1 so return an error.
12206 kiriwrite_error("invalidvariable");
12214 } elsif ($variable_type eq "page_filename"){
12216 # The variable type is a page filename type. Check
12217 # if the data is empty and if it is then return an
12218 # error (or value).
12220 if ($variable_data eq ""){
12222 # The filename is blank so check the no error
12223 # value and depending on it return an value
12226 if ($variable_noerror eq 1){
12228 # Page filename is blank and the no error value
12229 # is set as 1, so return a value of 1 (saying
12230 # the filename is blank).
12234 } elsif ($variable_noerror eq 0) {
12236 # Page filename is blank and the no error value
12237 # is not 1, so return an error.
12239 kiriwrite_error("emptypagefilename");
12243 # The no error value is something else other
12244 # than 0 or 1 so return an error.
12246 kiriwrite_error("invalidvariable");
12251 # Set the following variables for later on.
12254 my $variable_data_length = 0;
12255 my $variable_data_slash = 0;
12256 my $variable_data_char = "";
12257 my $variable_data_validated = "";
12258 my $variable_data_seek = 0;
12259 my $variable_database_list = "";
12260 my $variable_database_listcurrent = "";
12261 my $variable_data_firstlevel = 1;
12263 # Get the length of the filename.
12265 $variable_data_length = length($variable_data);
12267 # Check that only valid characters should be appearing in
12270 $variable_data_validated = $variable_data;
12271 $variable_data_validated =~ tr|a-zA-Z0-9\.\/\-_||d;
12273 if ($variable_data_validated ne ""){
12275 # The validated variable is not blank, meaning the
12276 # variable contains invalid characters, so return
12279 if ($variable_noerror eq 1){
12281 # Page filename contains invalid characters and
12282 # the no error value is set to 1 so return a
12283 # value of 2 (meaning that the page filename
12288 } elsif ($variable_noerror eq 0) {
12290 # Page filename contains invalid characters and
12291 # the no error value is set to 0 so return an
12294 kiriwrite_error("invalidfilename");
12298 # The no error value is something else other
12299 # than 0 or 1 so return an error.
12301 kiriwrite_error("invalidvariable");
12307 # Check if the page filename contains the directory command
12308 # for up a directory level and if it is, return an error
12309 # or return with a number.
12313 # Get a character from the filename passed to this subroutine.
12315 $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12317 # Check if the current character is the forward slash character.
12319 if ($variable_data_char eq "/"){
12321 # Check if the current directory is blank (and on the first level), or if the
12322 # current directory contains two dots or one dot, if it does return an error.
12324 $variable_data_slash = 1;
12326 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
12328 # Check if the noerror value is set to 1, if it is return an
12329 # number, else return an proper error.
12331 if ($variable_noerror eq 1){
12333 # Page filename contains invalid characters and
12334 # the no error value is set to 1 so return a
12335 # value of 2 (meaning that the page filename
12340 } elsif ($variable_noerror eq 0) {
12342 # Page filename contains invalid characters and
12343 # the no error value is set to 0 so return an
12346 kiriwrite_error("invalidfilename");
12350 # The no error value is something else other
12351 # than 0 or 1 so return an error.
12353 kiriwrite_error("invalidvariable");
12359 # Append the forward slash, clear the current directory name and set
12360 # the first directory level value to 0.
12362 $variable_database_list = $variable_database_list . $variable_data_char;
12363 $variable_database_listcurrent = "";
12364 $variable_data_firstlevel = 0;
12368 # Append the current character to the directory name and to the current
12371 $variable_data_slash = 0;
12373 $variable_database_list = $variable_database_list . $variable_data_char;
12374 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
12378 # Increment the seek counter.
12380 $variable_data_seek++;
12382 } until ($variable_data_seek eq $variable_data_length);
12384 # Check if the last character is a slash and return an
12387 if ($variable_data_slash eq 1){
12389 if ($variable_noerror eq 1){
12391 # Last character is a slash and the no error
12392 # value is set to 1 so return a value of 2
12393 # (meaning that the page filename is invalid).
12397 } elsif ($variable_noerror eq 0) {
12399 # Page filename contains a slash for the last
12400 # character and the no error value is set to 0
12401 # so return an error.
12403 kiriwrite_error("invalidfilename");
12407 # The no error value is something else other
12408 # than 0 or 1 so return an error.
12410 kiriwrite_error("invalidvariable");
12418 } elsif ($variable_type eq "module"){
12420 # The variable type is a presentation module filename.
12422 # Check if the variable_data is blank and if it is
12425 if ($variable_data eq ""){
12427 # The presentation module is blank so check if an error
12428 # value should be returned or a number should be
12431 if ($variable_noerror eq 1){
12433 # Module name is blank and the no error value
12434 # is set to 1 so return a value of 2 (meaning
12435 # that the page filename is blank).
12439 } elsif ($variable_noerror eq 0) {
12441 # Module name contains is blank and the no error
12442 # value is set to 0 so return an error.
12444 kiriwrite_critical("moduleblank");
12448 # The no error value is something else other
12449 # than 0 or 1 so return an error.
12451 kiriwrite_critical("invalidvalue");
12459 my $variable_data_validated = $variable_data;
12460 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12462 if ($variable_data_validated eq ""){
12466 if ($variable_noerror eq 1){
12468 # Module name contains invalid characters and
12469 # the no error value is set to 1 so return a
12470 # value of 2 (meaning that the page filename
12475 } elsif ($variable_noerror eq 0) {
12477 # Module name contains invalid characters and
12478 # the no error value is set to 0 so return an
12481 kiriwrite_critical("moduleinvalid");
12485 # The no error value is something else other
12486 # than 0 or 1 so return an error.
12488 kiriwrite_error("invalidvalue");
12496 } elsif ($variable_type eq "utf8"){
12498 # The variable type is a UTF8 string.
12500 if (!$variable_data){
12502 $variable_data = "";
12506 # Check if the string is a valid UTF8 string.
12508 if ($variable_data =~ m/^(
12509 [\x09\x0A\x0D\x20-\x7E] # ASCII
12510 | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
12511 | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
12512 | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
12513 | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
12514 | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
12515 | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
12516 | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
12519 # The UTF-8 string is valid.
12523 # The UTF-8 string is not valid, check if the no error
12524 # value is set to 1 and return an error if it isn't.
12526 if ($variable_noerror eq 1){
12528 # The no error value has been set to 1, so return
12529 # a value of 1 (meaning that the UTF-8 string is
12534 } elsif ($variable_noerror eq 0) {
12536 # The no error value has been set to 0, so return
12539 kiriwrite_error("invalidutf8");
12543 # The no error value is something else other than 0
12544 # or 1, so return an error.
12546 kiriwrite_error("invalidoption");
12554 } elsif ($variable_type eq "serverprotocol"){
12556 # Check if the server protocol is TCP or UDP and return
12557 # an error if it isn't.
12559 if ($variable_data ne "tcp" && $variable_data ne "udp"){
12561 # The protocol given is not valid, check if the no
12562 # error value is set to 1 and return an error if it isn't.
12564 if ($variable_noerror eq 1){
12566 # The no error value has been set to 1, so return a
12567 # value of 1 (meaning that the server protocol is
12572 } elsif ($variable_noerror eq 0){
12574 # The no error value has been set to 0, so return
12577 kiriwrite_error("serverprotocolinvalid");
12581 # The no error value is something else other than 0
12582 # or 1, so return an error.
12584 kiriwrite_error("invalidoption");
12592 } elsif ($variable_type eq "port"){
12594 # Check if the port number given is less than 0 or more than 65535
12595 # and return an error if it is.
12597 if ($variable_data < 0 || $variable_data > 65535){
12599 # The port number is less than 0 and more than 65535 so
12600 # check if the no error value is set to 1 and return an
12601 # error if it isn't.
12603 if ($variable_noerror eq 1){
12605 # The no error value has been set to 1, so return a
12606 # value of 1 (meaning that the port number is invalid).
12610 } elsif ($variable_noerror eq 0){
12612 # The no error value has been set to 0, so return
12615 kiriwrite_error("serverportnumberinvalid");
12619 # The no error value is something else other than 0
12620 # or 1, so return an error.
12622 kiriwrite_error("invalidoption");
12632 # Another type than the valid ones above has been specified so return an error specifying an invalid option.
12633 kiriwrite_error("invalidoption");
12637 sub kiriwrite_output_header{
12638 #################################################################################
12639 # kiriwrite_output_header: Outputs the header to the browser/stdout/console. #
12643 # kiriwrite_output_header(mimetype); #
12645 # mimetype Specifies the mime type of the header. #
12646 #################################################################################
12648 # Print a header saying that the page expires immediately since the
12649 # date is set in the past.
12651 #print "Expires: Sunday, 01-Jan-06 00:00:00 GMT\n";
12652 #print "Content-Type: text/html; charset=utf-8\n";
12654 print header(-Expires=>'Sunday, 01-Jan-06 00:00:00 GMT', -charset=>'utf-8');
12658 sub kiriwrite_processfilename{
12659 #################################################################################
12660 # kiriwrite_processfilename: Processes a name and turns it into a filename that #
12661 # can be used by Kiriwrite. #
12665 # kiriwrite_processfilename(text); #
12667 # text Specifies the text to be used in the process for creating a new #
12669 #################################################################################
12671 # Get the values that have been passed to the subroutine.
12673 my ($process_text) = @_;
12675 # Define some variables that will be used later on.
12677 my $processed_stageone = "";
12678 my $processed_stagetwo = "";
12679 my $processed_length = "";
12680 my $processed_char = "";
12681 my $processed_seek = 0;
12682 my $processed_filename = "";
12684 # Set the first stage value of the processed filename to the
12685 # process filename and then filter it out to only contain
12686 # numbers and letters (no spaces) and then convert the
12687 # capitals to small letters.
12689 $processed_stageone = $process_text;
12690 $processed_stageone =~ tr#a-zA-Z0-9##cd;
12691 $processed_stageone =~ tr/A-Z/a-z/;
12693 # Now set the second stage value of the processed filename
12694 # to the first stage value of the processed filename and
12695 # then limit the filename down to 32 characters.
12697 $processed_stagetwo = $processed_stageone;
12698 $processed_length = length($processed_stagetwo);
12700 # Process the second stage filename into the final
12701 # filename and do so until the seek counter is 32
12702 # or reaches the length of the second stage filename.
12706 # Get the character that is the seek counter
12709 $processed_char = substr($processed_stagetwo, $processed_seek, 1);
12711 # Append to the final processed filename.
12713 $processed_filename = $processed_filename . $processed_char;
12715 # Increment the seek counter.
12719 } until ($processed_seek eq 32 || $processed_seek eq $processed_length);
12721 return $processed_filename;
12725 sub kiriwrite_language{
12726 #################################################################################
12727 # kiriwrite_language: Process language strings that need certain text inserted. #
12731 # kiriwrite_language(string, [text, text, ...]); #
12733 # string Specifies the string to process. #
12734 # text Specifies the text to pass to the string (can be repeated many #
12736 #################################################################################
12738 my $string = shift;
12741 foreach $item (@_){
12743 $string =~ s/%s/$item/;
12751 sub kiriwrite_error{
12752 #################################################################################
12753 # kiriwrite_error: Prints out an error message. #
12757 # kiriwrite_error(errortype, errorext); #
12759 # errortype Specifies the type of error that occured. #
12760 # errorext Specifies the extended error information. #
12761 #################################################################################
12763 # Get the error type from the subroutine.
12765 my ($error_type, $error_extended) = @_;
12767 # Disconnect from the database server.
12769 if ($kiriwrite_dbmodule){
12770 $kiriwrite_dbmodule->disconnect();
12773 # Load the list of error messages.
12775 my ($kiriwrite_error, %kiriwrite_error);
12777 %kiriwrite_error = (
12779 # Catch all error message.
12780 "generic" => $kiriwrite_lang->{error}->{generic},
12782 # Standard error messages.
12783 "blankfilename" => $kiriwrite_lang->{error}->{blankfilename},
12784 "blankvariable" => $kiriwrite_lang->{error}->{blankvariable},
12785 "fileexists" => $kiriwrite_lang->{error}->{fileexists},
12786 "internalerror" => $kiriwrite_lang->{error}->{internalerror},
12787 "invalidoption" => $kiriwrite_lang->{error}->{invalidoption},
12788 "invalidaction" => $kiriwrite_lang->{error}->{invalidaction},
12789 "invalidfilename" => $kiriwrite_lang->{error}->{invalidfilename},
12790 "invalidmode" => $kiriwrite_lang->{error}->{invalidmode},
12791 "invalidutf8" => $kiriwrite_lang->{error}->{invalidutf8},
12792 "invalidvariable" => $kiriwrite_lang->{error}->{invalidvariable},
12793 "variabletoolong" => $kiriwrite_lang->{error}->{variabletoolong},
12795 # Specific error messages.
12796 "blankcompiletype" => $kiriwrite_lang->{error}->{blankcompiletype},
12797 "blankdatabasepageadd" => $kiriwrite_lang->{error}->{blankdatabasepageadd},
12798 "blankdirectory" => $kiriwrite_lang->{error}->{blankdirectory},
12799 "blankfindfilter" => $kiriwrite_lang->{error}->{blankfindfilter},
12800 "blankdatetimeformat" => $kiriwrite_lang->{error}->{blankdatetimeformat},
12801 "databaseconnectionerror" => $kiriwrite_lang->{error}->{databaseconnectionerror},
12802 "databasecategoriestoolong" => $kiriwrite_lang->{error}->{databasecategoriestoolong},
12803 "databasecopysame" => $kiriwrite_lang->{error}->{databasecopysame},
12804 "databasealreadyexists" => $kiriwrite_lang->{error}->{databasealreadyexists},
12805 "datadirectorymissing" => $kiriwrite_lang->{error}->{datadirectorymissing},
12806 "datadirectoryinvalidpermissions" => $kiriwrite_lang->{error}->{datadirectoryinvalidpermissions},
12807 "databasedescriptiontoolong" => $kiriwrite_lang->{error}->{databasedescriptiontoolong},
12808 "databasefilenameinvalid" => $kiriwrite_lang->{error}->{databasefilenameinvalid},
12809 "databasefilenametoolong" => $kiriwrite_lang->{error}->{databasefilenametoolong},
12810 "databaseerror" => $kiriwrite_lang->{error}->{databaseerror},
12811 "databaseinvalidpermissions" => $kiriwrite_lang->{error}->{databaseinvalidpermissions},
12812 "databasenameinvalid" => $kiriwrite_lang->{error}->{databasenameinvalid},
12813 "databasenametoolong" => $kiriwrite_lang->{error}->{databasenametoolong},
12814 "databasenameblank" => $kiriwrite_lang->{error}->{databasenameblank},
12815 "databasemissingfile" => $kiriwrite_lang->{error}->{databasemissingfile},
12816 "databasemovemissingfile" => $kiriwrite_lang->{error}->{databasemovemissingfile},
12817 "databasenorename" => $kiriwrite_lang->{error}->{databasenorename},
12818 "databasemovesame" => $kiriwrite_lang->{error}->{databasemovesame},
12819 "dbmoduleblank" => $kiriwrite_lang->{error}->{dbmoduleblank},
12820 "dbmoduleinvalid" => $kiriwrite_lang->{error}->{dbmoduleinvalid},
12821 "dbdirectoryblank" => $kiriwrite_lang->{error}->{dbdirectoryblank},
12822 "dbdirectoryinvalid" => $kiriwrite_lang->{error}->{dbdirectoryinvalid},
12823 "dbmodulemissing" => $kiriwrite_lang->{error}->{dbmodulemissing},
12824 "filtersdatabasenotcreated" => $kiriwrite_lang->{error}->{filtersdatabasenotcreated},
12825 "filtersdbdatabaseerror" => $kiriwrite_lang->{error}->{filtersdbdatabaseerror},
12826 "filtersdbpermissions" => $kiriwrite_lang->{error}->{filtersdbpermissions},
12827 "filtersdbmissing" => $kiriwrite_lang->{error}->{filtersdbmissing},
12828 "filteridblank" => $kiriwrite_lang->{error}->{filteridblank},
12829 "filterdoesnotexist" => $kiriwrite_lang->{error}->{filterdoesnotexist},
12830 "filteridinvalid" => $kiriwrite_lang->{error}->{filteridinvalid},
12831 "filteridtoolong" => $kiriwrite_lang->{error}->{filteridtoolong},
12832 "findfiltertoolong" => $kiriwrite_lang->{error}->{findfiltertoolong},
12833 "filterpriorityinvalid" => $kiriwrite_lang->{error}->{filterpriorityinvalid},
12834 "filterpriorityinvalidchars" => $kiriwrite_lang->{error}->{filterpriorityinvalidchars},
12835 "filterprioritytoolong" => $kiriwrite_lang->{error}->{filterprioritytoolong},
12836 "invalidcompiletype" => $kiriwrite_lang->{error}->{invalidcompiletype},
12837 "invalidpagenumber" => $kiriwrite_lang->{error}->{invalidpagenumber},
12838 "nopagesselected" => $kiriwrite_lang->{error}->{nopagesselected},
12839 "invaliddirectory" => $kiriwrite_lang->{error}->{invaliddirectory},
12840 "invaliddatetimeformat" => $kiriwrite_lang->{error}->{invaliddatetimeformat},
12841 "invalidlanguagefilename" => $kiriwrite_lang->{error}->{invalidlanguagefilename},
12842 "languagefilenamemissing" => $kiriwrite_lang->{error}->{languagefilenamemissing},
12843 "moduleblank" => $kiriwrite_lang->{error}->{moduleblank},
12844 "moduleinvalid" => $kiriwrite_lang->{error}->{moduleinvalid},
12845 "newcopydatabasedatabaseerror" => $kiriwrite_lang->{error}->{newcopydatabasedatabaseerror},
12846 "newcopydatabasedoesnotexist" => $kiriwrite_lang->{error}->{newcopydatabasedoesnotexist},
12847 "newcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newcopydatabasefileinvalidpermissions},
12848 "newmovedatabasedatabaseerror" => $kiriwrite_lang->{error}->{newmovedatabasedatabaseerror},
12849 "newmovedatabasedoesnotexist" => $kiriwrite_lang->{error}->{newmovedatabasedoesnotexist},
12850 "newmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newmovedatabasefileinvalidpermissions},
12851 "nodatabasesavailable" => $kiriwrite_lang->{error}->{nodatabasesavailable},
12852 "nodatabaseselected" => $kiriwrite_lang->{error}->{nodatabaseselected},
12853 "noeditvaluesselected" => $kiriwrite_lang->{error}->{noeditvaluesselected},
12854 "oldcopydatabasedatabaseerror" => $kiriwrite_lang->{error}->{oldcopydatabasedatabaseerror},
12855 "oldcopydatabasedoesnotexist" => $kiriwrite_lang->{error}->{oldcopydatabasedoesnotexist},
12856 "oldcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldcopydatabasefileinvalidpermissions},
12857 "oldmovedatabasedatabaseerror" => $kiriwrite_lang->{error}->{oldmovedatabasedatabaseerror},
12858 "oldmovedatabasedoesnotexist" => $kiriwrite_lang->{error}->{oldmovedatabasedoesnotexist},
12859 "oldmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldmovedatabasefileinvalidpermissions},
12860 "outputdirectoryblank" => $kiriwrite_lang->{error}->{outputdirectoryblank},
12861 "outputdirectoryinvalid" => $kiriwrite_lang->{error}->{outputdirectoryinvalid},
12862 "outputdirectorymissing" => $kiriwrite_lang->{error}->{outputdirectorymissing},
12863 "outputdirectoryinvalidpermissions" => $kiriwrite_lang->{error}->{outputdirectoryinvalidpermissions},
12864 "presmoduleblank" => $kiriwrite_lang->{error}->{presmoduleblank},
12865 "presmoduleinvalid" => $kiriwrite_lang->{error}->{presmoduleinvalid},
12866 "presmodulemissing" => $kiriwrite_lang->{error}->{presmodulemissing},
12867 "pagefilenamedoesnotexist" => $kiriwrite_lang->{error}->{pagefilenamedoesnotexist},
12868 "pagefilenameexists" => $kiriwrite_lang->{error}->{pagefilenameexists},
12869 "pagefilenameinvalid" => $kiriwrite_lang->{error}->{pagefilenameinvalid},
12870 "pagefilenametoolong" => $kiriwrite_lang->{error}->{pagefilenametoolong},
12871 "pagefilenameblank" => $kiriwrite_lang->{error}->{pagefilenameblank},
12872 "pagetitletoolong" => $kiriwrite_lang->{error}->{pagetitletoolong},
12873 "pagedescriptiontoolong" => $kiriwrite_lang->{error}->{pagedescriptiontoolong},
12874 "pagesectiontoolong" => $kiriwrite_lang->{error}->{pagesectiontoolong},
12875 "pagedatabasefilenametoolong" => $kiriwrite_lang->{error}->{pagedatabasefilenametoolong},
12876 "pagesettingstoolong" => $kiriwrite_lang->{error}->{pagesettingstoolong},
12877 "pagesettingsinvalid" => $kiriwrite_lang->{error}->{pagesettingsinvalid},
12878 "pagetemplatefilenametoolong" => $kiriwrite_lang->{error}->{pagetemplatefilenametoolong},
12879 "replacefiltertoolong" => $kiriwrite_lang->{error}->{replacefiltertoolong},
12880 "servernameinvalid" => $kiriwrite_lang->{error}->{servernameinvalid},
12881 "servernametoolong" => $kiriwrite_lang->{error}->{servernametoolong},
12882 "serverdatabasenameinvalid" => $kiriwrite_lang->{error}->{serverdatabasenameinvalid},
12883 "serverdatabasenametoolong" => $kiriwrite_lang->{error}->{serverdatabasenametoolong},
12884 "serverdatabaseusernameinvalid" => $kiriwrite_lang->{error}->{serverdatabaseusernameinvalid},
12885 "serverdatabaseusernametoolong" => $kiriwrite_lang->{error}->{serverdatabaseusernametoolong},
12886 "serverdatabasepasswordtoolong" => $kiriwrite_lang->{error}->{serverdatabasepasswordtoolong},
12887 "serverdatabasetableprefixinvalid" => $kiriwrite_lang->{error}->{serverdatabasetableprefixinvalid},
12888 "serverdatabasetableprefixtoolong" => $kiriwrite_lang->{error}->{serverdatabasetableprefixtoolong},
12889 "serverportnumberinvalid" => $kiriwrite_lang->{error}->{serverportnumberinvalid},
12890 "serverportnumberinvalidcharacters" => $kiriwrite_lang->{error}->{serverportnumberinvalidcharacters},
12891 "serverportnumbertoolong" => $kiriwrite_lang->{error}->{serverportnumbertoolong},
12892 "serverprotocolnametoolong" => $kiriwrite_lang->{error}->{serverprotocolnametoolong},
12893 "serverprotocolinvalid" => $kiriwrite_lang->{error}->{serverprotocolinvalid},
12894 "templatenameblank" => $kiriwrite_lang->{error}->{templatenameblank},
12895 "templatefilenameexists" => $kiriwrite_lang->{error}->{templatefilenameexists},
12896 "templatefilenameinvalid" => $kiriwrite_lang->{error}->{templatefilenameinvalid},
12897 "templatedatabaseerror" => $kiriwrite_lang->{error}->{templatedatabaseerror},
12898 "templatedatabaseinvalidpermissions" => $kiriwrite_lang->{error}->{templatedatabaseinvalidpermissions},
12899 "templatedatabaseinvalidformat" => $kiriwrite_lang->{error}->{templatedatabaseinvalidformat},
12900 "templatedirectoryblank" => $kiriwrite_lang->{error}->{templatedirectoryblank},
12901 "templatedirectoryinvalid" => $kiriwrite_lang->{error}->{templatedirectoryinvalid},
12902 "templatedatabasenotcreated" => $kiriwrite_lang->{error}->{templatedatabasenotcreated},
12903 "templatefilenametoolong" => $kiriwrite_lang->{error}->{templatefilenametoolong},
12904 "templatenametoolong" => $kiriwrite_lang->{error}->{templatenametoolong},
12905 "templatedescriptiontoolong" => $kiriwrite_lang->{error}->{templatedescriptiontoolong},
12906 "templatedatabasemissing" => $kiriwrite_lang->{error}->{templatedatabasemissing},
12907 "templatedoesnotexist" => $kiriwrite_lang->{error}->{templatedoesnotexist},
12908 "templatefilenameblank" => $kiriwrite_lang->{error}->{templatefilenameblank},
12912 # Check if the specified error is blank and if it is
12913 # use the generic error messsage.
12915 if (!$kiriwrite_error{$error_type}){
12916 $error_type = "generic";
12919 $kiriwrite_presmodule->clear();
12921 $kiriwrite_presmodule->startbox("errorbox");
12922 $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{error}, { Style => "errorheader" });
12923 $kiriwrite_presmodule->addlinebreak();
12924 $kiriwrite_presmodule->addtext($kiriwrite_error{$error_type}, { Style => "errortext" });
12926 # Check to see if extended error information was passed.
12928 if ($error_extended){
12930 # Write the extended error information.
12932 $kiriwrite_presmodule->addlinebreak();
12933 $kiriwrite_presmodule->addlinebreak();
12934 $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{extendederror});
12935 $kiriwrite_presmodule->addlinebreak();
12936 $kiriwrite_presmodule->addlinebreak();
12937 $kiriwrite_presmodule->startbox("datalist");
12938 $kiriwrite_presmodule->addtext($error_extended);
12939 $kiriwrite_presmodule->endbox();
12943 $kiriwrite_presmodule->endbox();
12945 kiriwrite_output_header;
12946 kiriwrite_output_page($kiriwrite_lang->{error}->{error}, $kiriwrite_presmodule->grab(), "none");
12952 sub kiriwrite_fileexists{
12953 #################################################################################
12954 # kiriwrite_fileexists: Check if a file exists and returns a value depending on #
12955 # if the file exists or not. #
12959 # kiriwrite_fileexists(filename); #
12961 # filename Specifies the file name to check if it exists or not. #
12962 #################################################################################
12964 # Get the value that was passed to the subroutine.
12966 my ($filename) = @_;
12968 # Check if the filename exists, if it does, return a value of 0, else
12969 # return a value of 1, meaning that the file was not found.
12973 # Specified file does exist so return a value of 0.
12979 # Specified file does not exist so return a value of 1.
12987 sub kiriwrite_filepermissions{
12988 #################################################################################
12989 # kiriwrite_filepermissions: Check if the file permissions of a file and return #
12990 # either a 1 saying that the permissions are valid or return a 0 saying that #
12991 # the permissions are invalid. #
12995 # kiriwrite_filepermissions(filename, [read], [write], [filemissingskip]); #
12997 # filename Specifies the filename to check for permissions. #
12998 # read Preform check that the file is readable. #
12999 # write Preform check that the file is writeable. #
13000 # filemissingskip Skip the check of seeing if it can read or write if the #
13001 # file is missing. #
13002 #################################################################################
13004 # Get the values that was passed to the subroutine.
13006 my ($filename, $readpermission, $writepermission, $ignorechecks) = @_;
13008 # Check to make sure that the read permission and write permission values
13009 # are only 1 character long.
13011 kiriwrite_variablecheck($readpermission, "maxlength", 1, 0);
13012 kiriwrite_variablecheck($writepermission, "maxlength", 1, 0);
13013 kiriwrite_variablecheck($ignorechecks, "maxlength", 1, 0);
13015 my $ignorechecks_result = 0;
13017 # Check if the file should be ignored for read and write checking if
13018 # it doesn't exist.
13020 if ($ignorechecks){
13024 # The file exists so the checks are to be done.
13026 $ignorechecks_result = 0;
13030 # The file does not exist so the checks don't need to
13031 # be done to prevent false positives.
13033 $ignorechecks_result = 1;
13039 $ignorechecks_result = 0;
13043 # Check if the file should be checked to see if it can be read.
13045 if ($readpermission && $ignorechecks_result eq 0){
13047 # The file should be checked to see if it does contain read permissions
13048 # and return a 0 if it is invalid.
13052 # The file is readable, so do nothing.
13056 # The file is not readable, so return 1.
13064 # Check if the file should be checked to see if it can be written.
13066 if ($writepermission && $ignorechecks_result eq 0){
13068 # The file should be checked to see if it does contain write permissions
13069 # and return a 0 if it is invalid.
13073 # The file is writeable, so do nothing.
13077 # The file is not writeable, so return 1.
13085 # No problems have occured, so return 0.
13091 sub kiriwrite_utf8convert{
13092 #################################################################################
13093 # kiriwrite_utf8convert: Properly converts values into UTF-8 and make sure #
13094 # that the size of the string is correct when doing input validation. #
13098 # utfstring # The UTF-8 string to convert. #
13099 #################################################################################
13101 # Get the values passed to the subroutine.
13103 my ($utfstring) = @_;
13105 # Load the Encode perl module.
13107 use Encode qw(decode_utf8);
13109 # Convert the string.
13111 my $finalutf8 = Encode::decode_utf8( $utfstring );
13117 sub kiriwrite_critical{
13118 #################################################################################
13119 # kiriwrite_critical: Displays an critical error message that cannot be #
13120 # normally by the kiriwrite_error subroutine. #
13124 # errortype Specifies the type of critical error that has occured. #
13125 #################################################################################
13127 # Get the value that was passed to the subroutine.
13129 my ($error_type) = @_;
13133 # Get the error type from the errortype string.
13137 # Generic critical error message.
13139 "generic" => "A critical error has occured but the error is not known to Kiriwrite.",
13141 # Specific critical error messages.
13143 "configfilemissing" => "The Kiriwrite configuration file is missing! Running the installer script for Kiriwrite is recommended.",
13144 "configfileinvalidpermissions" => "The Kiriwrite configuration file has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13145 "dbmodulemissing" => "The database module is missing! Running the installer script for Kiriwrite is recommended.",
13146 "dbmoduleinvalidpermissions" => "The database module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13147 "dbmoduleinvalid" => "The database module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13148 "invalidvalue" => "An invalid value was passed.",
13149 "languagefilenameblank" => "The language filename given is blank! Running the installer script for Kiriwrite is recommended.",
13150 "languagefilenameinvalid" => "The language filename given is invalid! Running the installer script for Kiriwrite is recommended.",
13151 "languagefilemissing" => "The language filename given does not exist. Running the installer script for Kiriwrite is recommended.",
13152 "languagefilenameinvalidpermissions" => "The language file with the filename given has invalid permissions set. Please set the valid permission settings for the language file.",
13153 "presmodulemissing" => "The presentation module is missing! Running the installer script for Kiriwrite is recommended.",
13154 "presmoduleinvalidpermissions" => "The presentation module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the presentation module.",
13155 "presmoduleinvalid" => "The presentation module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13158 if (!$error_list{$error_type}){
13160 $error_type = "generic";
13165 print "Critical Error: " . $error_list{$error_type};
13170 sub kiriwrite_output_page{
13171 #################################################################################
13172 # kiriwrite_output_page: Outputs the page to the browser/stdout/console. #
13176 # kiriwrite_output_page(pagetitle, pagedata, menutype); #
13178 # pagetitle Specifies the page title. #
13179 # pagedata Specifies the page data. #
13180 # menutype Prints out which menu to use. #
13181 #################################################################################
13183 my ($pagetitle, $pagedata, $menutype) = @_;
13185 # Open the script page template and load it into the scriptpage variable,
13186 # while declaring the variable.
13188 open (my $filehandle_scriptpage, "<:utf8", 'page.html');
13189 my @scriptpage = <$filehandle_scriptpage>;
13190 binmode $filehandle_scriptpage, ':utf8';
13191 close ($filehandle_scriptpage);
13193 # Define the variables required.
13195 my $scriptpageline = "";
13196 my $pageoutput = "";
13197 my $menuoutput = "";
13199 $kiriwrite_presmodule->clear();
13201 # Print out the main menu for Kiriwrite.
13203 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{menu}->{viewdatabases} });
13204 $kiriwrite_presmodule->addtext(" | ");
13205 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page", { Text => $kiriwrite_lang->{menu}->{viewpages} });
13206 $kiriwrite_presmodule->addtext(" | ");
13207 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{menu}->{viewfilters} });
13208 $kiriwrite_presmodule->addtext(" | ");
13209 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{menu}->{viewtemplates} });
13210 $kiriwrite_presmodule->addtext(" | ");
13211 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{menu}->{compilepages} });
13212 $kiriwrite_presmodule->addtext(" | ");
13213 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{menu}->{viewsettings} });
13214 $kiriwrite_presmodule->addlinebreak();
13216 # Check what menu is going to be printed along with the default 'top' menu.
13218 if ($menutype eq "database"){
13220 # If the menu type is database then print out the database sub-menu.
13222 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{database}->{submenu}->{viewdatabases} });
13223 $kiriwrite_presmodule->addtext(" | ");
13224 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=new", { Text => $kiriwrite_lang->{database}->{submenu}->{adddatabase} });
13226 } elsif ($menutype eq "pages"){
13227 # If the menu type is pages then print out the pages sub-menu.
13229 # First, fetch the database name from the HTTP query string.
13231 my $query = new CGI;
13232 my $db_filename = $query->param('database');
13234 # Check if a value has been placed in the db_filename string.
13236 if (!$db_filename){
13238 # As the database filename is blank, don't add an option to add a page.
13242 # A database file has been specified so add an option to add a page to
13243 # the selected database.
13245 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page&action=add&database=" . $db_filename, { Text => $kiriwrite_lang->{pages}->{submenu}->{addpage} });
13249 } elsif ($menutype eq "filter"){
13251 # If the menu type is filters then print out the filter sub-menu.
13253 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{submenu}->{showfilters} });
13254 $kiriwrite_presmodule->addtext(" | ");
13255 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter&action=add", { Text => $kiriwrite_lang->{filter}->{submenu}->{addfilter} });
13257 } elsif ($menutype eq "settings"){
13259 # If the menu type is options then print out the options sub-menu.
13261 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{submenu}->{viewsettings} });
13262 $kiriwrite_presmodule->addtext(" | ");
13263 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings&action=edit", { Text => $kiriwrite_lang->{setting}->{submenu}->{editsettings} });
13265 } elsif ($menutype eq "template"){
13267 # If the menu type is template then print out the template sub-menu.
13269 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{template}->{submenu}->{showtemplates} });
13270 $kiriwrite_presmodule->addtext(" | ");
13271 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template&action=add", { Text => $kiriwrite_lang->{template}->{submenu}->{addtemplate} });
13273 } elsif ($menutype eq "compile"){
13275 # If the menu type is compile then print out the compile sub-menu.
13277 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{submenu}->{listdatabases} });
13278 $kiriwrite_presmodule->addtext(" | ");
13279 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=all", { Text => $kiriwrite_lang->{compile}->{submenu}->{compileall} });
13280 $kiriwrite_presmodule->addtext(" | ");
13281 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=clean", { Text => $kiriwrite_lang->{compile}->{submenu}->{cleanoutputdirectory} });
13285 $menuoutput = $kiriwrite_presmodule->grab();
13287 # Find <kiriwrite> tages and replace with the apporiate variables.
13289 foreach $scriptpageline (@scriptpage){
13291 $scriptpageline =~ s/<kiriwrite:menu>/$menuoutput/g;
13292 $scriptpageline =~ s/<kiriwrite:imagespath>/$kiriwrite_config{"directory_noncgi_images"}/g;
13293 $scriptpageline =~ s/<kiriwrite:pagedata>/$pagedata/g;
13295 # Check if page title specified is blank, otherwise add a page title
13298 if ($pagetitle eq ""){
13299 $scriptpageline =~ s/<kiriwrite:title>//g;
13301 $scriptpageline =~ s/<kiriwrite:title>/ ($pagetitle)/g;
13306 # Append processed line to the pageoutput variable.
13308 $pageoutput = $pageoutput . $scriptpageline;
13312 binmode STDOUT, ':utf8';
13320 sub kiriwrite_output_xml{
13321 #################################################################################
13322 # kiriwrite_output_xml: Outputs several types of data to an XML file #
13326 # kiriwrite_output_xml(filename, type, settings); #
13328 # filename Specifies the filename of the XML file. #
13329 # type Specifies the type of the XML file to be written. #
13330 # settings Specifies the following settings in any order. #
13332 # Settings for Kiriwrite configuration files: #
13334 # DatabaseDirectory Specifies the new database directory to use. #
13335 # OutputDirectory Specifies the new output directory to use. #
13336 # ImagesURIPath Specifies the new URI path for images. #
13337 # DateTimeFormat Specifies the new date and time format. #
13338 # SystemLanguage Specifies the new language to use for Kiriwrite. #
13339 # PrsentationModule Specifies the new presentation module to use for #
13341 # DatabaseModule Specifies the new database module to use for Kiriwrite. #
13342 # DatabaseServer Specifies the database server to use. #
13343 # DaravasePort Specifies the port the database server is running on. #
13344 # DatabaseProtocol Specifies the protocol the database server is using. #
13345 # DatabaseSQLDatabase Specifies the SQL database name to use. #
13346 # DatabaseUsername Specifies the database server username. #
13347 # DatabasePassword Specifies the password for the database server username.#
13348 # DatabaseTablePrefix Specifies the table prefix to use. #
13349 #################################################################################
13351 # Get the variables passed from the subroutine.
13353 my $xml_filename = shift;
13354 my $xml_type = shift;
13355 my ($passedsettings) = @_;
13357 # Check if filename is blank, if it is then return an error.
13359 if ($xml_filename eq ""){
13360 # Filename is blank, return an error.
13361 kiriwrite_error("blankfilename");
13364 # Validate the XML filename to make sure nothing supicious is being passed.
13366 kiriwrite_variablecheck($xml_filename, "maxlength", 64, 0);
13367 kiriwrite_variablecheck($xml_filename, "filename", "", 0);
13369 # Check what type of XML data to output.
13371 if ($xml_type eq "config") {
13373 # The type of XML data to output is a Kiriwrite configuration file.
13375 # Get the data from the hash.
13377 my $settings_databasedir = $passedsettings->{"DatabaseDirectory"};
13378 my $settings_outputdir = $passedsettings->{"OutputDirectory"};
13379 my $settings_imagesuri = $passedsettings->{"ImagesURIPath"};
13380 my $settings_datetime = $passedsettings->{"DateTimeFormat"};
13381 my $settings_systemlanguage = $passedsettings->{"SystemLanguage"};
13382 my $settings_presmodule = $passedsettings->{"PresentationModule"};
13383 my $settings_dbmodule = $passedsettings->{"DatabaseModule"};
13385 my $settings_database_server = $passedsettings->{"DatabaseServer"};
13386 my $settings_database_port = $passedsettings->{"DatabasePort"};
13387 my $settings_database_protocol = $passedsettings->{"DatabaseProtocol"};
13388 my $settings_database_sqldatabase = $passedsettings->{"DatabaseSQLDatabase"};
13389 my $settings_database_username = $passedsettings->{"DatabaseUsername"};
13390 my $settings_database_password = $passedsettings->{"DatabasePassword"};
13391 my $settings_database_tableprefix = $passedsettings->{"DatabaseTablePrefix"};
13393 # Convert the password to make sure it can be read properly.
13395 $settings_database_password =~ s/\0//g;
13396 $settings_database_password =~ s/</</g;
13397 $settings_database_password =~ s/>/>/g;
13399 # Convert the less than and greater than characters are there and
13402 $settings_imagesuri =~ s/</</g;
13403 $settings_imagesuri =~ s/>/>/g;
13405 # Create the XML data layout.
13407 my $xmldata = "<?xml version=\"1.0\"?>\r\n\r\n<kiriwrite-config>\r\n";
13409 $xmldata = $xmldata . "<!-- This file was automatically generated by Kiriwrite, please feel free to edit to your own needs. -->\r\n";
13410 $xmldata = $xmldata . "\t<settings>\r\n\t\t<directories>\r\n";
13412 $xmldata = $xmldata . "\t\t\t<database>" . $settings_databasedir . "</database>\r\n";
13413 $xmldata = $xmldata . "\t\t\t<output>" . $settings_outputdir . "</output>\r\n";
13414 $xmldata = $xmldata . "\t\t\t<images>" . $settings_imagesuri . "</images>\r\n";
13415 $xmldata = $xmldata . "\t\t</directories>\r\n";
13417 $xmldata = $xmldata . "\t\t<language>\r\n";
13418 $xmldata = $xmldata . "\t\t\t<lang>" . $settings_systemlanguage . "</lang>\r\n";
13419 $xmldata = $xmldata . "\t\t</language>\r\n";
13421 $xmldata = $xmldata . "\t\t<system>\r\n";
13422 $xmldata = $xmldata . "\t\t\t<presentation>" . $settings_presmodule . "</presentation>\r\n";
13423 $xmldata = $xmldata . "\t\t\t<database>" . $settings_dbmodule . "</database>\r\n";
13424 $xmldata = $xmldata . "\t\t\t<datetime>" . $settings_datetime . "</datetime>\r\n";
13425 $xmldata = $xmldata . "\t\t</system>\r\n";
13427 $xmldata = $xmldata . "\t\t<database>\r\n";
13428 $xmldata = $xmldata . "\t\t\t<server>" . $settings_database_server . "</server>\r\n";
13429 $xmldata = $xmldata . "\t\t\t<port>" . $settings_database_port . "</port>\r\n";
13430 $xmldata = $xmldata . "\t\t\t<protocol>" . $settings_database_protocol . "</protocol>\r\n";
13431 $xmldata = $xmldata . "\t\t\t<database>" . $settings_database_sqldatabase . "</database>\r\n";
13432 $xmldata = $xmldata . "\t\t\t<username>" . $settings_database_username . "</username>\r\n";
13433 $xmldata = $xmldata . "\t\t\t<password>" . $settings_database_password . "</password>\r\n";
13434 $xmldata = $xmldata . "\t\t\t<prefix>" . $settings_database_tableprefix . "</prefix>\r\n";
13435 $xmldata = $xmldata . "\t\t</database>\r\n";
13437 $xmldata = $xmldata . "\t</settings>\r\n";
13439 $xmldata = $xmldata . "</kiriwrite-config>";
13441 # Open the Kiriwrite XML configuration file and write the new settings to the
13442 # configuration file.
13444 open(my $filehandle_xmlconfig, "> ", "kiriwrite.xml");
13445 print $filehandle_xmlconfig $xmldata;
13446 close($filehandle_xmlconfig);
13450 # The type of XML data is something else that is not supported by
13451 # Kiriwrite, so return an error.
13453 kiriwrite_error("invalidoption");
13461 #################################################################################
13462 # End listing the functions needed. #
13463 #################################################################################
13465 #################################################################################
13466 # Begin proper script execution. #
13467 #################################################################################
13469 kiriwrite_settings_load; # Load the configuration options.
13471 my $query = new CGI; # Easily fetch variables from the HTTP string.
13475 # Check if a mode has been specified and if a mode has been specified, continue
13476 # and work out what mode has been specified.
13478 if ($query->param('mode')){
13479 my $http_query_mode = $query->param('mode');
13481 if ($http_query_mode eq "db"){
13483 # If mode is 'db' (database), then check what action is required.
13485 if ($query->param('action')){
13486 # An action has been specified, so find out what action has been specified.
13488 my $http_query_action = $query->param('action');
13490 if ($http_query_action eq "edit"){
13491 # The edit action (which mean edit the settings for the selected database) has been specified,
13492 # get the database name and check if the action to edit an database has been confirmed.
13494 if ($query->param('database')){
13495 # If there is a value in the database variable check if it is a valid database. Otherwise,
13498 my $http_query_database = $query->param('database');
13500 # Check if a value for confirm has been specified, if there is, check if it is the correct
13501 # value, otherwise return an error.
13503 if ($query->param('confirm')){
13504 # A value for confirm has been specified, find out what value it is. If the value is correct
13505 # then edit the database settings, otherwise return an error.
13507 my $http_query_confirm = $query->param('confirm');
13509 if ($http_query_confirm eq 1){
13510 # Value is correct, collect the variables to pass onto the database variable.
13512 # Get the variables from the HTTP query.
13514 my $newdatabasename = $query->param('databasename');
13515 my $newdatabasedescription = $query->param('databasedescription');
13516 my $newdatabasefilename = $query->param('databasefilename');
13517 my $databasename = $query->param('olddatabasename');
13518 my $databasedescription = $query->param('olddatabasedescription');
13519 my $databaseshortname = $query->param('database');
13520 my $databasenotes = $query->param('databasenotes');
13521 my $databasecategories = $query->param('databasecategories');
13523 # Check the permissions of the database configuration file and return
13524 # an error if the database permissions are invalid.
13526 # Pass the variables to the database editing subroutine.
13528 my $pagedata = kiriwrite_database_edit($databaseshortname, $databasename, $databasedescription, $newdatabasefilename, $newdatabasename, $newdatabasedescription, $databasenotes, $databasecategories, 1);
13530 kiriwrite_output_header;
13531 kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13535 # Value is incorrect, return and error.
13536 kiriwrite_error("invalidvariable");
13541 # Display the form for editing an database.
13542 my $pagedata = kiriwrite_database_edit($http_query_database);
13544 kiriwrite_output_header;
13545 kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13550 # If there is no value in the database variable, then return an error.
13551 kiriwrite_error("invalidvariable");
13555 } elsif ($http_query_action eq "delete"){
13557 # Action equested is to delete a database, find out if the user has already confirmed deletion of the database
13558 # and if the deletion of the database has been confirmed, delete the database.
13560 if ($query->param('confirm')){
13562 # User has confirmed to delete a database, pass the parameters to the kiriwrite_database_delete
13565 my $database_filename = $query->param('database');
13566 my $database_confirm = $query->param('confirm');
13567 my $pagedata = kiriwrite_database_delete($database_filename, $database_confirm);
13569 kiriwrite_output_header;
13570 kiriwrite_output_page($kiriwrite_lang->{database}->{deleteddatabase}, $pagedata, "database");
13576 # User has clicked on the delete link (thus hasn't confirmed the action to delete a database).
13578 my $database_filename = $query->param('database');
13579 my $pagedata = kiriwrite_database_delete($database_filename);
13581 kiriwrite_output_header;
13582 kiriwrite_output_page($kiriwrite_lang->{database}->{deletedatabase}, $pagedata, "database");
13586 } elsif ($http_query_action eq "new"){
13588 # Action requested is to create a new database, find out if the user has already entered the information needed
13589 # to create a database and see if the user has confirmed the action, otherwise printout a form for adding a
13592 my $http_query_confirm = $query->param('confirm');
13594 # Check if the confirm value is correct.
13596 if ($http_query_confirm){
13597 if ($http_query_confirm eq 1){
13599 # User has confirmed to create a database, pass the parameters to the
13600 # kiriwrite_database_add subroutine.
13602 my $http_query_confirm = $query->param('confirm');
13604 my $database_name = $query->param('databasename');
13605 my $database_description = $query->param('databasedescription');
13606 my $database_filename = $query->param('databasefilename');
13607 my $database_notes = $query->param('databasenotes');
13608 my $database_categories = $query->param('databasecategories');
13610 my $pagedata = kiriwrite_database_add($database_filename, $database_name, $database_description, $database_notes, $database_categories, $http_query_confirm);
13612 kiriwrite_output_header;
13613 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13618 # The confirm value is something else other than 1 (which it shouldn't be), so
13624 # User has clicked on the 'Add Database' link.
13626 my $pagedata = kiriwrite_database_add;
13628 kiriwrite_output_header;
13629 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13633 # Another option has been specified, so return an error.
13635 kiriwrite_error("invalidaction");
13639 # No action has been specified, do the default action of displaying a list
13642 my $pagedata = kiriwrite_database_list;
13644 kiriwrite_output_header; # Output the header to browser/console/stdout.
13645 kiriwrite_output_page("", $pagedata, "database"); # Output the page to browser/console/stdout.
13646 exit; # End the script.
13648 } elsif ($http_query_mode eq "page"){
13650 # If mode is 'page', then check what action is required.
13652 if ($query->param('action')){
13653 my $http_query_action = $query->param('action');
13655 # Check if the action requested matches with one of the options below. If it does,
13656 # go to that section, otherwise return an error.
13658 if ($http_query_action eq "view"){
13660 # The action selected was to view pages from a database,
13662 my $database_name = $query->param('database');
13663 my $pagedata = kiriwrite_page_list($database_name);
13665 kiriwrite_output_header; # Output the header to browser/console/stdout.
13666 kiriwrite_output_page($kiriwrite_lang->{pages}->{viewingdatabase}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13667 exit; # End the script.
13669 } elsif ($http_query_action eq "add"){
13671 # The action selected was to add a page to the selected database.
13673 my $http_query_confirm = $query->param('confirm');
13675 if (!$http_query_confirm){
13677 $http_query_confirm = 0;
13681 if ($http_query_confirm eq 1){
13683 my $http_query_database = $query->param('database');
13684 my $http_query_filename = $query->param('pagefilename');
13685 my $http_query_name = $query->param('pagename');
13686 my $http_query_description = $query->param('pagedescription');
13687 my $http_query_section = $query->param('pagesection');
13688 my $http_query_template = $query->param('pagetemplate');
13689 my $http_query_settings = $query->param('pagesettings');
13690 my $http_query_content = $query->param('pagecontent');
13692 my $pagedata = kiriwrite_page_add($http_query_database, $http_query_filename, $http_query_name, $http_query_description, $http_query_section, $http_query_template, $http_query_settings, $http_query_content, $http_query_confirm);
13694 kiriwrite_output_header; # Output the header to browser/console/stdout.
13695 kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13696 exit; # End the script.
13700 my $http_query_database = $query->param('database');
13701 my $pagedata = kiriwrite_page_add($http_query_database);
13703 kiriwrite_output_header; # Output the header to browser/console/stdout.
13704 kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13705 exit; # End the script.
13707 } elsif ($http_query_action eq "edit"){
13709 # The action selected was to edit a page from a database.
13711 my $http_query_confirm = $query->param('confirm');
13713 if (!$http_query_confirm){
13715 $http_query_confirm = 0;
13719 if ($http_query_confirm eq 1){
13721 # Get the needed values from the HTTP query.
13723 my $http_query_database = $query->param('database');
13724 my $http_query_filename = $query->param('page');
13725 my $http_query_newfilename = $query->param('pagefilename');
13726 my $http_query_name = $query->param('pagename');
13727 my $http_query_description = $query->param('pagedescription');
13728 my $http_query_section = $query->param('pagesection');
13729 my $http_query_template = $query->param('pagetemplate');
13730 my $http_query_settings = $query->param('pagesettings');
13731 my $http_query_content = $query->param('pagecontent');
13733 # Pass the values to the editing pages subroutine.
13735 my $pagedata = kiriwrite_page_edit($http_query_database, $http_query_filename, $http_query_newfilename, $http_query_name, $http_query_description, $http_query_section, $http_query_template, $http_query_settings, $http_query_content, $http_query_confirm);
13737 kiriwrite_output_header; # Output the header to browser/console/stdout.
13738 kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13739 exit; # End the script.
13743 # Get the needed values from the HTTP query.
13745 my $http_query_database = $query->param('database');
13746 my $http_query_filename = $query->param('page');
13748 # Pass the values to the editing pages subroutine.
13750 my $pagedata = kiriwrite_page_edit($http_query_database, $http_query_filename);
13752 kiriwrite_output_header; # Output the header to browser/console/stdout.
13753 kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13754 exit; # End the script.
13757 } elsif ($http_query_action eq "delete"){
13759 # The action selected was to delete a page from a database.
13761 my $http_query_database = $query->param('database');
13762 my $http_query_page = $query->param('page');
13763 my $http_query_confirm = $query->param('confirm');
13766 my $selectionlist = "";
13768 if ($http_query_confirm){
13770 # The action has been confirmed, so try to delete the selected page
13771 # from the database.
13773 $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page, $http_query_confirm);
13775 kiriwrite_output_header; # Output the header to browser/console/stdout.
13776 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13777 exit; # End the script.
13781 $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page);
13783 kiriwrite_output_header; # Output the header to browser/console/stdout.
13784 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13785 exit; # End the script.
13788 } elsif ($http_query_action eq "multidelete"){
13790 # The action selected was to delete multiple pages from a
13793 my $http_query_database = $query->param('database');
13794 my $http_query_confirm = $query->param('confirm');
13799 if ($http_query_confirm){
13801 # The action to delete multiple pages from the selected
13802 # database has been confirmed.
13804 @filelist = kiriwrite_selectedlist();
13805 $pagedata = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13807 kiriwrite_output_header; # Output the header to browser/console/stdout.
13808 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13809 exit; # End the script.
13813 # Get the list of selected pages and pass them to the
13814 # multiple page delete subroutine.
13816 @filelist = kiriwrite_selectedlist();
13817 $pagedata = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13819 kiriwrite_output_header; # Output the header to browser/console/stdout.
13820 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13821 exit; # End the script.
13823 } elsif ($http_query_action eq "multimove"){
13825 # The action selected was to move multiple pages from a
13828 my $http_query_database = $query->param('database');
13829 my $http_query_newdatabase = $query->param('newdatabase');
13830 my $http_query_confirm = $query->param('confirm');
13835 if ($http_query_confirm){
13837 # The action to move multiple pages from the selected
13838 # database has been confirmed.
13840 @filelist = kiriwrite_selectedlist();
13841 $pagedata = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13843 kiriwrite_output_header; # Output the header to browser/console/stdout.
13844 kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13845 exit; # End the script.
13849 # Get the list of selected pages and pass them to the
13850 # multiple page move subroutine.
13852 @filelist = kiriwrite_selectedlist();
13853 $pagedata = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13855 kiriwrite_output_header; # Output the header to browser/console/stdout.
13856 kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13857 exit; # End the script.
13859 } elsif ($http_query_action eq "multicopy"){
13861 # The action selected was to copy multiple pages from a
13864 my $http_query_database = $query->param('database');
13865 my $http_query_newdatabase = $query->param('newdatabase');
13866 my $http_query_confirm = $query->param('confirm');
13871 if ($http_query_confirm){
13873 # The action to copy multiple pages from the selected
13874 # database has been confirmed.
13876 @filelist = kiriwrite_selectedlist();
13877 $pagedata = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13879 kiriwrite_output_header; # Output the header to browser/console/stdout.
13880 kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13881 exit; # End the script.
13885 # Get the list of selected pages and pass them to the
13886 # multiple page copy subroutine.
13888 @filelist = kiriwrite_selectedlist();
13889 $pagedata = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13891 kiriwrite_output_header; # Output the header to browser/console/stdout.
13892 kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13893 exit; # End the script.
13895 } elsif ($http_query_action eq "multiedit"){
13897 # The action selected was to edit multiple pages from a
13900 my $http_query_database = $query->param('database');
13901 my $http_query_newsection = $query->param('newsection');
13902 my $http_query_altersection = $query->param('altersection');
13903 my $http_query_newtemplate = $query->param('newtemplate');
13904 my $http_query_altertemplate = $query->param('altertemplate');
13905 my $http_query_newsettings = $query->param('newsettings');
13906 my $http_query_altersettings = $query->param('altersettings');
13907 my $http_query_confirm = $query->param('confirm');
13912 if (!$http_query_confirm){
13914 @filelist = kiriwrite_selectedlist();
13915 $pagedata = kiriwrite_page_multiedit($http_query_database, $http_query_newsection, $http_query_altersection, $http_query_newtemplate, $http_query_altertemplate, $http_query_newsettings, $http_query_altersettings, $http_query_confirm, @filelist);
13917 kiriwrite_output_header; # Output the header to browser/console/stdout.
13918 kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13923 # Get the list of selected pages and pass them to the
13924 # multiple page edit subroutine.
13926 @filelist = kiriwrite_selectedlist();
13927 $pagedata = kiriwrite_page_multiedit($http_query_database, $http_query_newsection, $http_query_altersection, $http_query_newtemplate, $http_query_altertemplate, $http_query_newsettings, $http_query_altersettings, $http_query_confirm, @filelist);
13929 kiriwrite_output_header; # Output the header to browser/console/stdout.
13930 kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13931 exit; # End the script.
13934 kiriwrite_error("invalidaction");
13939 # If there the action option is left blank, then print out a form where the database
13940 # can be selected to view pages from.
13942 my $pagedata = kiriwrite_page_list;
13944 kiriwrite_output_header; # Output the header to browser/console/stdout.
13945 kiriwrite_output_page($kiriwrite_lang->{pages}->{databaseselecttitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13946 exit; # End the script.
13950 # No action has been specified, do the default action of listing pages from
13951 # the first database found in the directory.
13953 } elsif ($http_query_mode eq "filter"){
13955 # If there's a value for action in the HTTP query, then
13956 # get that value that is in the HTTP query.
13958 if ($query->param('action')){
13960 # There is a value for action in the HTTP query,
13961 # so get the value from it.
13963 my $http_query_action = $query->param('action');
13965 if ($http_query_action eq "add"){
13967 # The action the user requested is to add a filter to the
13970 # Check if there is a value in confirm and if there is
13971 # then pass it on to the new find and replace words
13972 # to add to the filter database.
13974 my $http_query_confirm = $query->param('confirm');
13976 if ($http_query_confirm){
13978 # There is a value in http_query_confirm, so pass on the
13979 # new find and replace words so that they can be added
13980 # to the filter database.
13982 my $http_query_findwords = $query->param('findword');
13983 my $http_query_replacewords = $query->param('replaceword');
13984 my $http_query_priority = $query->param('priority');
13985 my $http_query_notes = $query->param('notes');
13987 my $pagedata = kiriwrite_filter_add($http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
13989 kiriwrite_output_header; # Output the header to browser/console/stdout.
13990 kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
13991 exit; # End the script.
13995 my $pagedata = kiriwrite_filter_add();
13997 kiriwrite_output_header; # Output the header to browser/console/stdout.
13998 kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
13999 exit; # End the script.
14001 } elsif ($http_query_action eq "edit"){
14003 # The action the user requested is to edit an filter from
14004 # the filter database.
14006 my $http_query_number = $query->param('filter');
14007 my $http_query_confirm = $query->param('confirm');
14009 if ($http_query_confirm){
14011 # There is a value in http_query_confirm, so pass on the
14012 # new find and replace words so that the filter database
14015 my $http_query_findwords = $query->param('filterfind');
14016 my $http_query_replacewords = $query->param('filterreplace');
14017 my $http_query_priority = $query->param('priority');
14018 my $http_query_notes = $query->param('notes');
14020 my $pagedata = kiriwrite_filter_edit($http_query_number, $http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
14022 kiriwrite_output_header; # Output the header to browser/console/stdout.
14023 kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14024 exit; # End the script.
14028 my $pagedata = kiriwrite_filter_edit($http_query_number);
14030 kiriwrite_output_header; # Output the header to browser/console/stdout.
14031 kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14032 exit; # End the script.
14034 } elsif ($http_query_action eq "delete"){
14036 # The action the user requested is to delete an filter
14037 # from the filter database.
14039 my $http_query_number = $query->param('filter');
14040 my $http_query_confirm = $query->param('confirm');
14042 if ($http_query_confirm){
14044 my $pagedata = kiriwrite_filter_delete($http_query_number, $http_query_confirm);
14046 kiriwrite_output_header; # Output the header to browser/console/stdout.
14047 kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14048 exit; # End the script
14052 my $pagedata = kiriwrite_filter_delete($http_query_number);
14054 kiriwrite_output_header; # Output the header to browser/console/stdout.
14055 kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14056 exit; # End the script.
14060 # Another action was requested that was not one of
14061 # the ones prcedding this catch all, so return
14062 # an error saying that an invalid option was
14065 kiriwrite_error("invalidaction");
14071 my $pagedata = kiriwrite_filter_list();
14073 kiriwrite_output_header; # Output the header to browser/console/stdout.
14074 kiriwrite_output_page($kiriwrite_lang->{filter}->{viewfilters}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14075 exit; # End the script.
14081 } elsif ($http_query_mode eq "template"){
14083 # Check if an action has been specified in the HTTP query.
14085 if ($query->param('action')){
14087 # An action has been specified in the HTTP query.
14089 my $http_query_action = $query->param('action');
14091 if ($http_query_action eq "delete"){
14092 # Get the required parameters from the HTTP query.
14094 my $http_query_template = $query->param('template');
14095 my $http_query_confirm = $query->param('confirm');
14097 # Check if a value for confirm has been specified (it shouldn't)
14100 if (!$http_query_confirm){
14101 # The confirm parameter of the HTTP query is blank, so
14102 # write out a form asking the user to confirm the deletion
14103 # of the selected template.
14105 my $pagedata = kiriwrite_template_delete($http_query_template);
14107 kiriwrite_output_header; # Output the header to browser/console/stdout.
14108 kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14109 exit; # End the script.
14113 my $pagedata = kiriwrite_template_delete($http_query_template, $http_query_confirm);
14115 kiriwrite_output_header; # Output the header to browser/console/stdout.
14116 kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14117 exit; # End the script.
14121 } elsif ($http_query_action eq "add") {
14123 # Get the variables from the HTTP query in preperation for processing.
14125 my $http_query_confirm = $query->param('confirm');
14126 my $http_query_templatelayout = $query->param('templatelayout');
14127 my $http_query_templatename = $query->param('templatename');
14128 my $http_query_templatedescription = $query->param('templatedescription');
14129 my $http_query_templatefilename = $query->param('templatefilename');
14131 # Check if there is a confirmed value in the http_query_confirm variable.
14133 if (!$http_query_confirm){
14135 # Since there is no confirm value, print out a form for creating a new
14138 my $pagedata = kiriwrite_template_add();
14140 kiriwrite_output_header; # Output the header to browser/console/stdout.
14141 kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14142 exit; # End the script.
14146 # A value in the http_query_confirm value is specified, so pass the
14147 # variables onto the kiriwrite_template_add subroutine.
14149 my $pagedata = kiriwrite_template_add($http_query_templatefilename, $http_query_templatename, $http_query_templatedescription, $http_query_templatelayout, $http_query_confirm);
14151 kiriwrite_output_header; # Output the header to browser/console/stdout.
14152 kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14153 exit; # End the script.
14157 } elsif ($http_query_action eq "edit") {
14159 # Get the required parameters from the HTTP query.
14161 my $http_query_templatefile = $query->param('template');
14162 my $http_query_confirm = $query->param('confirm');
14164 # Check to see if http_query_confirm has a value of '1' in it and
14165 # if it does, edit the template using the settings providied.
14167 if (!$http_query_confirm){
14169 # Since there is no confirm value, open the template configuration
14170 # file and the template file itself then print out the data on to
14173 my $pagedata = kiriwrite_template_edit($http_query_templatefile);
14174 kiriwrite_output_header; # Output the header to browser/console/stdout.
14175 kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14176 exit; # End the script.
14178 } elsif ($http_query_confirm eq 1) {
14180 # Since there is a confirm value of 1, the user has confirm the
14181 # action of editing of a template so get the other variables
14182 # that were also sent and pass the variables to the subroutine.
14184 my $http_query_newfilename = $query->param('newfilename');
14185 my $http_query_newname = $query->param('newname');
14186 my $http_query_newdescription = $query->param('newdescription');
14187 my $http_query_newlayout = $query->param('newlayout');
14189 my $pagedata = kiriwrite_template_edit($http_query_templatefile, $http_query_newfilename, $http_query_newname, $http_query_newdescription, $http_query_newlayout, $http_query_confirm);
14190 kiriwrite_output_header; # Output the header to browser/console/stdout.
14191 kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14192 exit; # End the script.
14196 # Another confirm value is there instead of '0' or '1'. Return
14197 # an error saying it is invalid.
14199 kiriwrite_error("invalidvariable");
14205 # Another action was specified and was not one of the ones above, so
14208 kiriwrite_error("invalidaction");
14214 # If the action option is left blank, then print out a form where the list
14215 # of templates are available.
14217 my $pagedata = kiriwrite_template_list;
14219 kiriwrite_output_header; # Output the header to browser/console/stdout.
14220 kiriwrite_output_page($kiriwrite_lang->{template}->{viewtemplates}, $pagedata, "template"); # Output the page to browser/console/stdout.
14221 exit; # End the script.
14225 } elsif ($http_query_mode eq "compile"){
14227 # The mode selected is to compile pages from databases.
14229 # If the action option is left blank, then print out a form where the list
14230 # of databases to compile are available.
14232 if ($query->param('action')){
14234 my $http_query_action = $query->param('action');
14236 if ($http_query_action eq "compile"){
14238 # The specified action is to compile the pages, check if the
14239 # action to compile the page has been confirmed.
14241 my $http_query_confirm = $query->param('confirm');
14242 my $http_query_type = $query->param('type');
14244 # If it is blank, set the confirm value to 0.
14246 if (!$http_query_confirm){
14248 # The http_query_confirm variable is uninitalised, so place a
14249 # '0' (meaning an unconfirmed action).
14251 $http_query_confirm = 0;
14255 # If the compile type is blank then return an error.
14257 if (!$http_query_type){
14259 # Compile type is blank so return an error.
14261 kiriwrite_error("blankcompiletype");
14265 if ($http_query_type eq "multiple"){
14267 if ($http_query_confirm eq 1){
14269 # The action to compile the pages has been confirmed so
14270 # compile the pages.
14272 my @selectedlist = kiriwrite_selectedlist();
14273 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14275 kiriwrite_output_header; # Output the header to browser/console/stdout.
14276 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14277 exit; # End the script.
14281 # The action to compile the pages has not been confirmed
14282 # so write a form asking the user to confirm the action
14283 # of compiling the pages.
14285 my @selectedlist = kiriwrite_selectedlist();
14286 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14288 kiriwrite_output_header; # Output the header to browser/console/stdout.
14289 kiriwrite_output_page($kiriwrite_lang->{compile}->{compileselecteddatabases}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14290 exit; # End the script.
14294 } elsif ($http_query_type eq "single"){
14296 my $http_query_database = $query->param('database');
14298 $selectedlist[0] = $http_query_database;
14299 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14301 kiriwrite_output_header; # Output the header to browser/console/stdout.
14302 kiriwrite_output_page($kiriwrite_lang->{compile}->{compiledatabase}, $pagedata, "compile");
14303 exit; # End the script.
14307 kiriwrite_error("invalidcompiletype");
14311 } elsif ($http_query_action eq "all"){
14313 # The selected action is to compile all of the databases
14314 # in the database directory. Check if the action to
14315 # compile all of the databases has been confirmed.
14317 my $http_query_confirm = $query->param('confirm');
14319 if (!$http_query_confirm){
14321 # The http_query_confirm variable is uninitalised, so place a
14322 # '0' (meaning an unconfirmed action).
14324 $http_query_confirm = 0;
14328 if ($http_query_confirm eq 1){
14330 # The action to compile all the databases has been confirmed.
14334 my $pagedata = kiriwrite_compile_all();
14336 kiriwrite_output_header; # Output the header to browser/console/stdout.
14337 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilealldatabases}, $pagedata, "compile");
14340 } elsif ($http_query_action eq "clean") {
14342 # The selected action is to clean the output directory.
14343 # Check if the action to clean the output directory
14344 # has been confirmed.
14346 my $http_query_confirm = $query->param('confirm');
14348 if (!$http_query_confirm){
14350 # The http_query_confirm variable is uninitalised, so place a
14351 # '0' (meaning an unconfirmed action).
14353 $http_query_confirm = 0;
14357 if ($http_query_confirm eq 1){
14359 # The action to clean the output directory has been confirmed.
14361 my $pagedata = kiriwrite_compile_clean($http_query_confirm);
14363 kiriwrite_output_header; # Output the header to browser/console/stdout.
14364 kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14365 exit; # End the script.
14369 # The action to clean the output directory is not
14370 # confirmed, so write a page asking the user
14371 # to confirm cleaning the output directory.
14373 my $pagedata = kiriwrite_compile_clean();
14375 kiriwrite_output_header; # Output the header to browser/console/stdout.
14376 kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14377 exit; # End the script.
14381 # The action specified was something else other than those
14382 # above, so return an error.
14384 kiriwrite_error("invalidaction");
14389 my $pagedata = kiriwrite_compile_list;
14391 kiriwrite_output_header; # Output the header to browser/console/stdout.
14392 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14393 exit; # End the script.
14395 } elsif ($http_query_mode eq "settings"){
14397 # The mode selected is view (and change settings).
14399 # If the action value has been left blank, then view the list of
14400 # current settings.
14402 if ($query->param('action')){
14403 my $http_query_action = $query->param('action');
14405 if ($http_query_action eq "edit"){
14407 # The action specified is to edit the settings. Check if the action
14408 # to edit the settings has been confirmed.
14410 my $http_query_confirm = $query->param('confirm');
14412 if (!$http_query_confirm){
14414 # The confirm value is blank, so set it to 0.
14416 $http_query_confirm = 0;
14420 if ($http_query_confirm eq 1){
14422 # The action to edit the settings has been confirmed. Get the
14423 # required settings from the HTTP query.
14425 my $http_query_database = $query->param('databasedir');
14426 my $http_query_output = $query->param('outputdir');
14427 my $http_query_imagesuri = $query->param('imagesuripath');
14428 my $http_query_datetimeformat = $query->param('datetime');
14429 my $http_query_systemlanguage = $query->param('language');
14430 my $http_query_presmodule = $query->param('presmodule');
14431 my $http_query_dbmodule = $query->param('dbmodule');
14433 my $http_query_database_server = $query->param('database_server');
14434 my $http_query_database_port = $query->param('database_port');
14435 my $http_query_database_protocol = $query->param('database_protocol');
14436 my $http_query_database_sqldatabase = $query->param('database_sqldatabase');
14437 my $http_query_database_username = $query->param('database_username');
14438 my $http_query_database_passwordkeep = $query->param('database_password_keep');
14439 my $http_query_database_password = $query->param('database_password');
14440 my $http_query_database_tableprefix = $query->param('database_tableprefix');
14442 my $pagedata = kiriwrite_settings_edit({ DatabaseDirectory => $http_query_database, OutputDirectory => $http_query_output, ImagesURIPath => $http_query_imagesuri, DateTimeFormat => $http_query_datetimeformat, SystemLanguage => $http_query_systemlanguage, PresentationModule => $http_query_presmodule, DatabaseModule => $http_query_dbmodule, DatabaseServer => $http_query_database_server, DatabasePort => $http_query_database_port, DatabaseProtocol => $http_query_database_protocol, DatabaseSQLDatabase => $http_query_database_sqldatabase, DatabaseUsername => $http_query_database_username, DatabasePasswordKeep => $http_query_database_passwordkeep, DatabasePassword => $http_query_database_password, DatabaseTablePrefix => $http_query_database_tableprefix, Confirm => 1 });
14444 kiriwrite_output_header; # Output the header to browser/console/stdout.
14445 kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings"); # Output the page to browser/console/stdout.
14446 exit; # End the script.
14450 # The action to edit the settings has not been confirmed.
14452 my $pagedata = kiriwrite_settings_edit;
14454 kiriwrite_output_header; # Output the header to browser/console/stdout.
14455 kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings"); # Output the page to browser/console/stdout.
14456 exit; # End the script.
14460 # The action specified was something else other than those
14461 # above, so return an error.
14463 kiriwrite_error("invalidaction");
14469 # No action has been specified, so print out the list of settings currently being used.
14471 my $pagedata = kiriwrite_settings_view;
14473 kiriwrite_output_header; # Output the header to browser/console/stdout.
14474 kiriwrite_output_page($kiriwrite_lang->{setting}->{viewsettings}, $pagedata, "settings"); # Output the page to browser/console/stdout.
14475 exit; # End the script.
14478 # Another mode has been specified than the ones above, so return an error saying that
14479 # an invalid option was specified.
14481 kiriwrite_error("invalidmode");
14486 # No mode has been specified, so print the default "first-run" view of the
14489 my $pagedata = kiriwrite_database_list;
14491 kiriwrite_output_header; # Output the header to browser/console/stdout.
14492 kiriwrite_output_page("", $pagedata, "database"); # Output the page to browser/console/stdout.
14493 exit; # End the script.
14505 Web-based webpage compiler.
14509 Steve Brokenshire <sbrokenshire@xestia.co.uk>
14513 This perl script is intended to be used on a web server which has CGI with Perl support or with mod_perl support.
14515 =head1 DOCUMENTATION
14517 For more information on how to use Kiriwrite, please see the documentation that was included with Kiriwrite.
14519 - From the Xestia Documentation website: http://documentation.xestia.co.uk and click on the Kiriwrite link on the page.
14521 - From the Documentation directory from the Kiriwrite source packages (.tar/.tar.gz/.tar.bz2).
14523 - In the /usr/share/doc/kiriwrite directory if you installed the distribution-specific packages (and also have access to the server itself).