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->startbox();
588 $kiriwrite_presmodule->addhiddendata("mode", "page");
589 $kiriwrite_presmodule->addhiddendata("action", "add");
590 $kiriwrite_presmodule->addhiddendata("database", $pagedatabase);
591 $kiriwrite_presmodule->addhiddendata("confirm", "1");
592 $kiriwrite_presmodule->addlinebreak();
593 $kiriwrite_presmodule->endbox();
594 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
596 $kiriwrite_presmodule->startheader();
597 $kiriwrite_presmodule->addcell("tablecellheader");
598 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{setting});
599 $kiriwrite_presmodule->endcell();
600 $kiriwrite_presmodule->addcell("tablecellheader");
601 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{value});
602 $kiriwrite_presmodule->endcell();
603 $kiriwrite_presmodule->endheader();
605 $kiriwrite_presmodule->startrow();
606 $kiriwrite_presmodule->addcell("tablecell1");
607 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{database});
608 $kiriwrite_presmodule->endcell();
609 $kiriwrite_presmodule->addcell("tablecell2");
610 $kiriwrite_presmodule->addtext($database_name);
611 $kiriwrite_presmodule->endcell();
612 $kiriwrite_presmodule->endrow();
614 $kiriwrite_presmodule->startrow();
615 $kiriwrite_presmodule->addcell("tablecell1");
616 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagename});
617 $kiriwrite_presmodule->endcell();
618 $kiriwrite_presmodule->addcell("tablecell2");
619 $kiriwrite_presmodule->addinputbox("pagename", { Size => 64, MaxLength => 512 });
620 $kiriwrite_presmodule->endcell();
621 $kiriwrite_presmodule->endrow();
623 $kiriwrite_presmodule->startrow();
624 $kiriwrite_presmodule->addcell("tablecell1");
625 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedescription});
626 $kiriwrite_presmodule->endcell();
627 $kiriwrite_presmodule->addcell("tablecell2");
628 $kiriwrite_presmodule->addinputbox("pagedescription", { Size => 64, MaxLength => 512 });
629 $kiriwrite_presmodule->endcell();
630 $kiriwrite_presmodule->endrow();
632 $kiriwrite_presmodule->startrow();
633 $kiriwrite_presmodule->addcell("tablecell1");
634 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
635 $kiriwrite_presmodule->endcell();
636 $kiriwrite_presmodule->addcell("tablecell2");
637 $kiriwrite_presmodule->addinputbox("pagesection", { Size => 64, MaxLength => 256 });
638 $kiriwrite_presmodule->endcell();
639 $kiriwrite_presmodule->endrow();
641 $kiriwrite_presmodule->startrow();
642 $kiriwrite_presmodule->addcell("tablecell1");
643 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
644 $kiriwrite_presmodule->endcell();
645 $kiriwrite_presmodule->addcell("tablecell2");
647 # Check if the template warning value has been set
648 # and write the error message in place of the templates
651 if ($template_warning eq 1){
653 $kiriwrite_presmodule->addhiddendata("pagetemplate", "!none");
654 $kiriwrite_presmodule->addtext($template_warningmessage);
662 $kiriwrite_presmodule->addselectbox("pagetemplate");
664 foreach $template_file (keys %template_list){
666 $page_filename = $template_list{$template_file}{Filename};
667 $page_name = $template_list{$template_file}{Name};
668 $kiriwrite_presmodule->addoption($page_name . " (" . $page_filename . ")", { Value => $page_filename });
674 $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
675 $kiriwrite_presmodule->endselectbox();
679 $kiriwrite_presmodule->endcell();
680 $kiriwrite_presmodule->endrow();
682 $kiriwrite_presmodule->startrow();
683 $kiriwrite_presmodule->addcell("tablecell1");
684 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagefilename});
685 $kiriwrite_presmodule->endcell();
686 $kiriwrite_presmodule->addcell("tablecell2");
687 $kiriwrite_presmodule->addinputbox("pagefilename", { Size => 64, MaxLength => 256 });
688 $kiriwrite_presmodule->endcell();
689 $kiriwrite_presmodule->endrow();
691 $kiriwrite_presmodule->startrow();
692 $kiriwrite_presmodule->addcell("tablecell1");
693 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagecontent});
694 $kiriwrite_presmodule->endcell();
695 $kiriwrite_presmodule->addcell("tablecell2");
696 $kiriwrite_presmodule->addtextbox("pagecontent", { Columns => 50, Rows => 10 });
697 $kiriwrite_presmodule->addlinebreak();
698 $kiriwrite_presmodule->addlinebreak();
699 $kiriwrite_presmodule->startbox("datalist");
700 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
701 $kiriwrite_presmodule->addlinebreak();
702 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
703 $kiriwrite_presmodule->addlinebreak();
704 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
705 $kiriwrite_presmodule->addlinebreak();
706 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
707 $kiriwrite_presmodule->addlinebreak();
708 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
709 $kiriwrite_presmodule->addlinebreak();
710 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
711 $kiriwrite_presmodule->addlinebreak();
712 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
713 $kiriwrite_presmodule->addlinebreak();
714 $kiriwrite_presmodule->endbox();
715 $kiriwrite_presmodule->endcell();
716 $kiriwrite_presmodule->endrow();
718 $kiriwrite_presmodule->startrow();
719 $kiriwrite_presmodule->addcell("tablecell1");
720 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
721 $kiriwrite_presmodule->endcell();
722 $kiriwrite_presmodule->addcell("tablecell2");
723 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", Selected => 1, LineBreak => 1});
724 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", Selected => 0, LineBreak => 1});
725 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", Selected => 0, LineBreak => 1});
726 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", Selected => 0, LineBreak => 1});
727 $kiriwrite_presmodule->endcell();
728 $kiriwrite_presmodule->endrow();
730 $kiriwrite_presmodule->endtable();
732 $kiriwrite_presmodule->startbox();
733 $kiriwrite_presmodule->addlinebreak();
734 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{addpagebutton});
735 $kiriwrite_presmodule->addtext(" | ");
736 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
737 $kiriwrite_presmodule->addtext(" | ");
738 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $pagedatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
739 $kiriwrite_presmodule->endbox();
740 $kiriwrite_presmodule->endform();
743 return $kiriwrite_presmodule->grab();
747 # The confirm value is something else than '1' or '0' so
750 kiriwrite_error("invalidvalue");
758 sub kiriwrite_page_delete{
759 #################################################################################
760 # kiriwrite_page_delete: Deletes a (single) page from a database. #
764 # kiriwrite_page_delete(database, page, [confirm]); #
766 # database Specifies the database to delete from. #
767 # page Specifies the page to delete. #
768 # confirm Confirms the action to delete the page. #
769 #################################################################################
771 my ($database, $page, $confirm) = @_;
773 # Check if the database filename is valid and return an error if
776 my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
778 if ($pagedatabase_filename_check eq 1){
780 # The database filename is blank, so return an error.
782 kiriwrite_error("blankdatabasepageadd");
784 } elsif ($pagedatabase_filename_check eq 2){
786 # The database filename is invalid, so return an error.
788 kiriwrite_error("databasefilenameinvalid");
792 # Check the length the database name and return an error if it's
795 my $pagedatabase_length_check = kiriwrite_variablecheck($database, "maxlength", 32, 1);
797 if ($pagedatabase_length_check eq 1){
799 # The database name is too long, so return an error.
801 kiriwrite_error("databasefilenametoolong");
805 # Check if the page name is specified is blank and return an error if
810 # The page name is blank, so return an error.
812 kiriwrite_error("blankfilename");
816 # If the confirm value is blank, then set the confirm value to 0.
826 # The action to delete the selected page from the database
827 # has been confirmed.
829 # Connect to the database server.
831 $kiriwrite_dbmodule->connect();
833 # Check if any errors occured while connecting to the database server.
835 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
837 # A database connection error has occured so return
840 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
844 # Select the database to delete the page from.
846 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
848 # Check if any errors had occured while selecting the database.
850 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
852 # The database does not exist, so return an error.
854 kiriwrite_error("databasemissingfile");
856 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
858 # The database has invalid permissions set, so return
861 kiriwrite_error("databaseinvalidpermissions");
865 # Check if the database has write permissions.
867 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
869 if ($database_permissions eq 1){
871 # The database permissions are invalid so return an error.
873 kiriwrite_error("databaseinvalidpermissions");
877 # Get the information about the database.
879 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
881 # Check if any error occured while getting the database information.
883 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
885 # A database error has occured so return an error and
886 # also the extended error information.
888 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
892 # Get the information about the page that is going to be deleted.
894 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
896 # Check if any errors occured while getting the page information.
898 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
900 # A database error has occured so return an error and
901 # also the extended error information.
903 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
905 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
907 # The page does not exist, so return an error.
909 kiriwrite_error("pagefilenamedoesnotexist");
913 # Delete the page from the database.
915 $kiriwrite_dbmodule->deletepage({ PageFilename => $page });
917 # Check if any errors occured while deleting the page from the database.
919 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
921 # A database error has occured so return an error and
922 # also the extended error information.
924 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
926 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
928 # The page does not exist, so return an error.
930 kiriwrite_error("pagefilenamedoesnotexist");
934 # Get the database name and page name.
936 my $database_name = $database_info{"DatabaseName"};
937 my $page_name = $page_info{"PageName"};
939 # Disconnect from the database server.
941 $kiriwrite_dbmodule->disconnect();
943 # Write out a message saying that the selected page from
944 # the database has been deleted.
946 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedeleted}, { Style => "pageheader" });
947 $kiriwrite_presmodule->addlinebreak();
948 $kiriwrite_presmodule->addlinebreak();
949 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagedeletedmessage}, $page_name, $database_name));
950 $kiriwrite_presmodule->addlinebreak();
951 $kiriwrite_presmodule->addlinebreak();
952 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
954 return $kiriwrite_presmodule->grab();
956 } elsif ($confirm eq 0){
958 # Connect to the database server.
960 $kiriwrite_dbmodule->connect();
962 # Check if any errors occured while connecting to the database server.
964 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
966 # A database connection error has occured so return
969 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
973 # Select the database.
975 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
977 # Check if any errors had occured while selecting the database.
979 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
981 # The database does not exist, so return an error.
983 kiriwrite_error("databasemissingfile");
985 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
987 # The database has invalid permissions set, so return
990 kiriwrite_error("databaseinvalidpermissions");
994 # Get information about the database.
996 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
998 # Check if any errors occured while getting the database information.
1000 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1002 # A database error has occured so return an error and
1003 # also the extended error information.
1005 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1009 # Get information about the page that is going to be deleted.
1011 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
1013 # Check if any errors occured while getting the page information.
1015 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1017 # A database error has occured so return an error and
1018 # also the extended error information.
1020 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1022 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1024 # The page does not exist, so return an error.
1026 kiriwrite_error("pagefilenamedoesnotexist");
1030 my $database_name = $database_info{"DatabaseName"};
1031 my $page_name = $page_info{"PageName"};
1033 # Disconnect from the database server.
1035 $kiriwrite_dbmodule->disconnect();
1037 # Write a message asking the user to confirm the deletion of the
1040 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletepage}, $page_name), { Style => "pageheader" });
1041 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1042 $kiriwrite_presmodule->startbox();
1043 $kiriwrite_presmodule->addhiddendata("mode", "page");
1044 $kiriwrite_presmodule->addhiddendata("action", "delete");
1045 $kiriwrite_presmodule->addhiddendata("database", $database);
1046 $kiriwrite_presmodule->addhiddendata("page", $page);
1047 $kiriwrite_presmodule->addhiddendata("confirm", "1");
1048 $kiriwrite_presmodule->addlinebreak();
1049 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletepagemessage}, $page_name, $database_name));
1050 $kiriwrite_presmodule->addlinebreak();
1051 $kiriwrite_presmodule->addlinebreak();
1052 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{deletepagebutton});
1053 $kiriwrite_presmodule->addtext(" | ");
1054 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{deletepagesreturnlink}, $database_name)});
1055 $kiriwrite_presmodule->endbox();
1056 $kiriwrite_presmodule->endform();
1058 return $kiriwrite_presmodule->grab();
1062 # Another page deletion type was specified, so return an error.
1064 kiriwrite_error("invalidoption");
1070 sub kiriwrite_page_edit{
1071 #################################################################################
1072 # kiriwrite_page_edit: Edits a page from a database. #
1076 # kiriwrite_page_edit(database, filename, newfilename, newname, newdescription, #
1077 # newsection, newtemplate, newsettings, newpagecontent #
1080 # database Specifies the database to edit from. #
1081 # filename Specifies the filename to use. #
1082 # newfilename Specifies the new page filename to use. #
1083 # newname Specifies the new page name to use. #
1084 # newdescription Specifies the new description for the page. #
1085 # newsection Specifies the new section name to use. #
1086 # newtemplate Specifies the new template filename to use. #
1087 # newsettings Specifies the new page settings to use. #
1088 # newpagecontent Specifies the new page content to use. #
1089 # confirm Confirms the action to edit the page. #
1090 #################################################################################
1092 # Get the values that have been passed to the subroutine.
1094 my ($database, $pagefilename, $pagenewfilename, $pagenewtitle, $pagenewdescription, $pagenewsection, $pagenewtemplate, $pagenewsettings, $pagenewcontent, $confirm) = @_;
1096 # Check if the confirm value is blank and if it is, then set it to '0'.
1104 # Check if the confirm value is more than one character long and if it
1105 # is then return an error.
1107 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
1109 # Check if the database filename is valid and return an error if
1112 my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
1114 if ($pagedatabase_filename_check eq 1){
1116 # The database filename is blank, so return an error.
1118 kiriwrite_error("blankdatabasepageadd");
1120 } elsif ($pagedatabase_filename_check eq 2){
1122 # The database filename is invalid, so return an error.
1124 kiriwrite_error("databasefilenameinvalid");
1128 # Check the length the database name and return an error if it's
1131 my $pagedatabase_length_check = kiriwrite_variablecheck($database, "maxlength", 32, 1);
1133 if ($pagedatabase_length_check eq 1){
1135 # The database name is too long, so return an error.
1137 kiriwrite_error("databasefilenametoolong");
1141 # Check if the page identification number is blank (which it shouldn't
1142 # be) and if it is, then return an error.
1144 if (!$pagefilename){
1146 kiriwrite_error("blankfilename");
1150 # Check if the confirm value is '1' and if it is, edit the specified
1151 # page in the database.
1155 # Check if the new page filename is blank.
1157 if (!$pagenewfilename){
1159 # The page filename is blank so return an error.
1161 kiriwrite_error("pagefilenameblank");
1165 # The action to edit a page has been confirmed so check the
1166 # variables recieved are UTF8 compiliant before converting.
1168 kiriwrite_variablecheck($database, "utf8", 0, 0);
1169 kiriwrite_variablecheck($pagefilename, "utf8", 0, 0);
1170 kiriwrite_variablecheck($pagenewfilename, "utf8", 0, 0);
1171 kiriwrite_variablecheck($pagenewtitle, "utf8", 0, 0);
1172 kiriwrite_variablecheck($pagenewdescription, "utf8", 0, 0);
1173 kiriwrite_variablecheck($pagenewsection, "utf8", 0, 0);
1174 kiriwrite_variablecheck($pagenewsettings, "utf8", 0, 0);
1175 kiriwrite_variablecheck($pagenewtemplate, "utf8", 0, 0);
1176 kiriwrite_variablecheck($pagenewcontent, "utf8", 0, 0);
1178 # Convert the variables into proper UTF8 variables.
1180 $database = kiriwrite_utf8convert($database);
1181 $pagefilename = kiriwrite_utf8convert($pagefilename);
1182 $pagenewfilename = kiriwrite_utf8convert($pagenewfilename);
1183 $pagenewtitle = kiriwrite_utf8convert($pagenewtitle);
1184 $pagenewdescription = kiriwrite_utf8convert($pagenewdescription);
1185 $pagenewsection = kiriwrite_utf8convert($pagenewsection);
1186 $pagenewsettings = kiriwrite_utf8convert($pagenewsettings);
1187 $pagenewtemplate = kiriwrite_utf8convert($pagenewtemplate);
1188 $pagenewcontent = kiriwrite_utf8convert($pagenewcontent);
1190 # Check the lengths of the variables.
1192 my $pagenewfilename_maxlength_check = kiriwrite_variablecheck($pagenewfilename, "maxlength", 256, 1);
1193 my $pagenewtitle_maxlength_check = kiriwrite_variablecheck($pagenewtitle, "maxlength", 512, 1);
1194 my $pagenewdescription_maxlength_check = kiriwrite_variablecheck($pagenewdescription, "maxlength", 512, 1);
1195 my $pagenewsection_maxlength_check = kiriwrite_variablecheck($pagenewsection, "maxlength", 256, 1);
1196 my $pagenewsettings_maxlength_check = kiriwrite_variablecheck($pagenewsettings, "maxlength", 1, 1);
1197 my $pagenewtemplate_maxlength_check = kiriwrite_variablecheck($pagenewtemplate, "maxlength", 64, 1);
1199 # Check each result to see if the length of the variable
1200 # is valid and return an error if it isn't.
1202 if ($pagenewfilename_maxlength_check eq 1){
1204 # The new page filename given is too long, so return an error.
1206 kiriwrite_error("pagefilenametoolong");
1210 if ($pagenewtitle_maxlength_check eq 1){
1212 # The new page title given is too long, so return an error.
1214 kiriwrite_error("pagetitletoolong");
1218 if ($pagenewdescription_maxlength_check eq 1){
1220 # The new page description given is too long, so return an error.
1222 kiriwrite_error("pagedescriptiontoolong");
1226 if ($pagenewsection_maxlength_check eq 1){
1228 # The new page section given is too long, so return an error.
1230 kiriwrite_error("pagesectiontoolong");
1234 if ($pagenewsettings_maxlength_check eq 1){
1236 # The new page settings given is too long, so return an error.
1238 kiriwrite_error("pagesettingstoolong");
1242 if ($pagenewtemplate_maxlength_check eq 1){
1244 # The new page template given is too long, so return an error.
1246 kiriwrite_error("pagetemplatefilenametoolong");
1250 # Check if the new page filename and new page settings
1253 my $pagenewfilename_filename_check = kiriwrite_variablecheck($pagenewfilename, "page_filename", 0, 1);
1254 my $pagenewsettings_settings_check = kiriwrite_variablecheck($pagenewsettings, "pagesetting", 0, 1);
1255 my $pagetemplate_filename_check = 0;
1257 if ($pagenewtemplate ne "!none"){
1259 # A template is being used so check the filename of the
1262 $pagetemplate_filename_check = kiriwrite_variablecheck($pagenewtemplate, "page_filename", 0, 1);
1266 # Check each result to see if the variables have passed
1267 # their tests and return an error if they haven't.
1269 if ($pagenewfilename_filename_check ne 0){
1271 # The new page filename is invalid, so return an error.
1273 kiriwrite_error("pagefilenameinvalid");
1277 if ($pagenewsettings_settings_check eq 1){
1279 # The new page settings is invalid, so return an error.
1281 kiriwrite_error("pagesettingsinvalid");
1285 if ($pagetemplate_filename_check eq 1){
1287 # The template filename given is invalid, so return an error
1289 kiriwrite_error("templatefilenameinvalid");
1293 # Connect to the database server.
1295 $kiriwrite_dbmodule->connect();
1297 # Check if any errors occured while connecting to the database server.
1299 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1301 # A database connection error has occured so return
1304 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1308 # Select the database.
1310 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1312 # Check if any errors had occured while selecting the database.
1314 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1316 # The database does not exist, so return an error.
1318 kiriwrite_error("databasemissingfile");
1320 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1322 # The database has invalid permissions set, so return
1325 kiriwrite_error("databaseinvalidpermissions");
1329 # Check if the database has write permissions.
1331 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
1333 if ($database_permissions eq 1){
1335 # The database permissions are invalid so return an error.
1337 kiriwrite_error("databaseinvalidpermissions");
1341 # Get the database information.
1343 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1345 # Check if any errors had occured while getting the database information.
1347 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1349 # A database error has occured so return an error and
1350 # also the extended error information.
1352 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1356 my $database_name = $database_info{"DatabaseName"};
1358 # Edit the selected page.
1360 $kiriwrite_dbmodule->editpage({ PageFilename => $pagefilename, PageNewFilename => $pagenewfilename, PageNewName => $pagenewtitle, PageNewDescription => $pagenewdescription, PageNewSection => $pagenewsection, PageNewTemplate => $pagenewtemplate, PageNewContent => $pagenewcontent, PageNewSettings => $pagenewsettings });
1362 # Check if any errors occured while editing the page.
1364 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1366 # A database error has occured so return an error and
1367 # also the extended error information.
1369 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1371 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1373 # The pages does not exist in the database.
1375 kiriwrite_error("pagefilenamedoesnotexist");
1377 } elsif ($kiriwrite_dbmodule->geterror eq "PageExists"){
1379 # A page already exists with the new filename.
1381 kiriwrite_error("pagefilenameexists");
1385 # Disconnect from the database server.
1387 $kiriwrite_dbmodule->disconnect();
1389 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{editedpage}, { Style => "pageheader" });
1390 $kiriwrite_presmodule->addlinebreak();
1391 $kiriwrite_presmodule->addlinebreak();
1392 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{editedpagemessage}, $pagenewtitle));
1393 $kiriwrite_presmodule->addlinebreak();
1394 $kiriwrite_presmodule->addlinebreak();
1395 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
1397 return $kiriwrite_presmodule->grab();
1399 } elsif ($confirm eq 0) {
1401 # Connect to the database server.
1403 $kiriwrite_dbmodule->connect();
1405 # Check if any errors occured while connecting to the database server.
1407 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1409 # A database connection error has occured so return
1412 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1416 # Select the database.
1418 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1420 # Check if any errors had occured while selecting the database.
1422 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1424 # The database does not exist, so return an error.
1426 kiriwrite_error("databasemissingfile");
1428 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1430 # The database has invalid permissions set, so return
1433 kiriwrite_error("databaseinvalidpermissions");
1437 # Get the information about the database.
1439 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1441 # Check if any errors had occured while getting the database information.
1443 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1445 # A database error has occured so return an error and
1446 # also the extended error information.
1448 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1452 my $database_name = $database_info{"DatabaseName"};
1454 # Get the page info.
1456 my %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $pagefilename });
1458 # Check if any errors occured while getting the page information.
1460 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1462 # A database error has occured so return an error and
1463 # also the extended error information.
1465 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1467 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
1469 # The page does not exist, so return an error.
1471 kiriwrite_error("pagefilenamedoesnotexist");
1475 # Get the values from the hash.
1477 my $data_filename = $page_info{"PageFilename"};
1478 my $data_name = $page_info{"PageName"};
1479 my $data_description = $page_info{"PageDescription"};
1480 my $data_section = $page_info{"PageSection"};
1481 my $data_template = $page_info{"PageTemplate"};
1482 my $data_content = $page_info{"PageContent"};
1483 my $data_settings = $page_info{"PageSettings"};
1484 my $data_lastmodified = $page_info{"PageLastModified"};
1486 my $template_warning;
1492 my @database_templates;
1493 my @template_filenames;
1495 my $template_filename;
1497 my $template_count = 0;
1498 my $template_found = 0;
1500 tie(%template_list, 'Tie::IxHash');
1502 # Connect to the template database.
1504 $kiriwrite_dbmodule->connecttemplate();
1506 # Check if any errors occured while connecting to the template database.
1508 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
1510 # The template database does not exist so set the template
1513 $template_warning = $kiriwrite_lang->{pages}->{notemplatedatabasekeep};
1515 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
1517 # The template database has invalid permissions set so write
1518 # the template warning message.
1520 $template_warning = $kiriwrite_lang->{pages}->{templatepermissionserrorkeep};
1524 if (!$template_warning){
1526 # Get the list of available templates.
1528 @template_filenames = $kiriwrite_dbmodule->gettemplatelist();
1530 # Check if any errors had occured.
1532 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1534 # A database error occured while getting the list
1535 # of templates so return an error with the
1536 # extended error information.
1538 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrorkeep} , $kiriwrite_dbmodule->geterror(1));
1542 if (!$template_warning){
1544 foreach $template_filename (@template_filenames){
1546 # Get the information about each template.
1548 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
1550 # Check if any errors occured while getting the template information.
1552 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1554 # A template database error has occured so return a warning message
1555 # with the extended error information.
1557 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrorkeep} , $kiriwrite_dbmodule->geterror(1));
1560 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
1562 # The template does not exist so process the next template.
1568 # Append the template name and filename to the list of available templates.
1570 $template_list{$template_count}{Filename} = $template_info{"TemplateFilename"};
1571 $template_list{$template_count}{Name} = $template_info{"TemplateName"};
1573 # Append the template filename and name and make it the selected
1574 # template if that is the template the page is using.
1576 if ($data_template eq $template_filename && !$template_found){
1578 $template_list{$template_count}{Selected} = 1;
1579 $template_found = 1;
1583 $template_list{$template_count}{Selected} = 0;
1595 # Check if certain values are undefined and if they
1596 # are then set them blank (defined).
1602 if (!$data_description){
1603 $data_description = "";
1606 if (!$data_section){
1610 if (!$data_template){
1611 $data_template = "";
1615 if (!$data_content){
1619 if (!$data_settings){
1620 $data_settings = "";
1623 if (!$data_lastmodified){
1624 $data_lastmodified = "";
1627 # Begin writing out the form for editing the selected page.
1629 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{editpage}, $data_name), { Style => "pageheader" });
1630 $kiriwrite_presmodule->addlinebreak();
1631 $kiriwrite_presmodule->addlinebreak();
1633 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1634 $kiriwrite_presmodule->startbox();
1635 $kiriwrite_presmodule->addhiddendata("mode", "page");
1636 $kiriwrite_presmodule->addhiddendata("action", "edit");
1637 $kiriwrite_presmodule->addhiddendata("database", $database);
1638 $kiriwrite_presmodule->addhiddendata("page", $pagefilename);
1639 $kiriwrite_presmodule->addhiddendata("confirm", 1);
1640 $kiriwrite_presmodule->endbox();
1642 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
1644 $kiriwrite_presmodule->startheader();
1645 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
1646 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
1647 $kiriwrite_presmodule->endheader();
1649 $kiriwrite_presmodule->startrow();
1650 $kiriwrite_presmodule->addcell("tablecell1");
1651 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{database});
1652 $kiriwrite_presmodule->endcell();
1653 $kiriwrite_presmodule->addcell("tablecell2");
1654 $kiriwrite_presmodule->addtext($database_name);
1655 $kiriwrite_presmodule->endcell();
1656 $kiriwrite_presmodule->endrow();
1658 $kiriwrite_presmodule->startrow();
1659 $kiriwrite_presmodule->addcell("tablecell1");
1660 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagename});
1661 $kiriwrite_presmodule->endcell();
1662 $kiriwrite_presmodule->addcell("tablecell2");
1663 $kiriwrite_presmodule->addinputbox("pagename", { Size => 64, MaxLength => 256, Value => $data_name });
1664 $kiriwrite_presmodule->endcell();
1665 $kiriwrite_presmodule->endrow();
1667 $kiriwrite_presmodule->startrow();
1668 $kiriwrite_presmodule->addcell("tablecell1");
1669 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagedescription});
1670 $kiriwrite_presmodule->endcell();
1671 $kiriwrite_presmodule->addcell("tablecell2");
1672 $kiriwrite_presmodule->addinputbox("pagedescription", { Size => 64, MaxLength => 256, Value => $data_description });
1673 $kiriwrite_presmodule->endcell();
1674 $kiriwrite_presmodule->endrow();
1676 $kiriwrite_presmodule->startrow();
1677 $kiriwrite_presmodule->addcell("tablecell1");
1678 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
1679 $kiriwrite_presmodule->endcell();
1680 $kiriwrite_presmodule->addcell("tablecell2");
1681 $kiriwrite_presmodule->addinputbox("pagesection", { Size => 64, MaxLength => 256, Value => $data_section });
1682 $kiriwrite_presmodule->endcell();
1683 $kiriwrite_presmodule->endrow();
1685 $kiriwrite_presmodule->startrow();
1686 $kiriwrite_presmodule->addcell("tablecell1");
1687 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
1688 $kiriwrite_presmodule->endcell();
1689 $kiriwrite_presmodule->addcell("tablecell2");
1691 # Check if any template warnings have occured.
1693 if ($template_warning){
1695 $kiriwrite_presmodule->addtext($template_warning);
1696 $kiriwrite_presmodule->addlinebreak();
1700 $kiriwrite_presmodule->addselectbox("pagetemplate");
1702 # Process the list of templates, select one if the
1703 # template filename for the page matches, else give
1704 # an option for the user to keep the current template
1707 $template_count = 0;
1709 foreach $template_file (keys %template_list){
1711 if ($template_list{$template_count}{Selected}){
1713 $kiriwrite_presmodule->addoption($template_list{$template_count}{Name} . " (" . $template_list{$template_count}{Filename} . ")", { Value => $template_list{$template_count}{Filename}, Selected => 1 });
1717 $kiriwrite_presmodule->addoption($template_list{$template_count}{Name} . " (" . $template_list{$template_count}{Filename} . ")", { Value => $template_list{$template_count}{Filename} });
1725 if ($data_template eq "!none"){
1727 $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
1728 $template_found = 1;
1732 $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none" });
1736 if ($template_found eq 0 && $data_template ne "!none"){
1738 # The template with the filename given was not found.
1740 $kiriwrite_presmodule->addoption(kiriwrite_language($kiriwrite_lang->{pages}->{keeptemplatefilename}, $data_template), { Value => $data_template, Selected => 1, Style => "warningoption" });
1744 # Disconnect from the template database.
1746 $kiriwrite_dbmodule->disconnecttemplate();
1748 # Disconnect from the database server.
1750 $kiriwrite_dbmodule->disconnect();
1752 $kiriwrite_presmodule->endselectbox();
1754 $kiriwrite_presmodule->endcell();
1755 $kiriwrite_presmodule->endrow();
1757 $kiriwrite_presmodule->startrow();
1758 $kiriwrite_presmodule->addcell("tablecell1");
1759 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagefilename});
1760 $kiriwrite_presmodule->endcell();
1761 $kiriwrite_presmodule->addcell("tablecell2");
1762 $kiriwrite_presmodule->addinputbox("pagefilename", { Size => 64, MaxLength => 256, Value => $data_filename });
1763 $kiriwrite_presmodule->endcell();
1764 $kiriwrite_presmodule->endrow();
1766 $kiriwrite_presmodule->startrow();
1767 $kiriwrite_presmodule->addcell("tablecell1");
1768 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagecontent});
1769 $kiriwrite_presmodule->endcell();
1770 $kiriwrite_presmodule->addcell("tablecell2");
1771 $kiriwrite_presmodule->addtextbox("pagecontent", { Columns => 50, Rows => 10, Value => $data_content });
1772 $kiriwrite_presmodule->addlinebreak();
1773 $kiriwrite_presmodule->addlinebreak();
1774 $kiriwrite_presmodule->startbox("datalist");
1775 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
1776 $kiriwrite_presmodule->addlinebreak();
1777 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
1778 $kiriwrite_presmodule->addlinebreak();
1779 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
1780 $kiriwrite_presmodule->addlinebreak();
1781 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
1782 $kiriwrite_presmodule->addlinebreak();
1783 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
1784 $kiriwrite_presmodule->addlinebreak();
1785 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
1786 $kiriwrite_presmodule->addlinebreak();
1787 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
1788 $kiriwrite_presmodule->addlinebreak();
1789 $kiriwrite_presmodule->endbox();
1790 $kiriwrite_presmodule->endcell();
1791 $kiriwrite_presmodule->endrow();
1793 $kiriwrite_presmodule->startrow();
1794 $kiriwrite_presmodule->addcell("tablecell1");
1795 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
1796 $kiriwrite_presmodule->endcell();
1797 $kiriwrite_presmodule->addcell("tablecell2");
1799 # Check if the page settings value is set to a
1800 # certain number and select that option based
1801 # on the number else set the value to 0.
1803 if ($data_settings eq 1){
1804 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", Selected => 1, LineBreak => 1});
1806 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => "1", LineBreak => 1});
1809 if ($data_settings eq 2){
1810 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", Selected => 1, LineBreak => 1});
1812 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => "2", LineBreak => 1});
1815 if ($data_settings eq 3){
1816 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", Selected => 1, LineBreak => 1});
1818 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => "3", LineBreak => 1});
1821 if ($data_settings eq 0 || ($data_settings ne 1 && $data_settings ne 2 && $data_settings ne 3)){
1822 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", Selected => 1, LineBreak => 1});
1824 $kiriwrite_presmodule->addradiobox("pagesettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => "0", LineBreak => 1});
1827 $kiriwrite_presmodule->endcell();
1828 $kiriwrite_presmodule->endrow();
1829 $kiriwrite_presmodule->endtable();
1831 $kiriwrite_presmodule->startbox();
1832 $kiriwrite_presmodule->addlinebreak();
1833 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{editpagebutton});
1834 $kiriwrite_presmodule->addtext(" | ");
1835 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
1836 $kiriwrite_presmodule->addtext(" | ");
1837 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) } );
1838 $kiriwrite_presmodule->endbox();
1840 $kiriwrite_presmodule->endform();
1842 return $kiriwrite_presmodule->grab();
1846 # The confirm value is a value other than '0' and '1' so
1849 kiriwrite_error("invalidvalue");
1855 sub kiriwrite_page_multidelete{
1856 #################################################################################
1857 # kiriwrite_page_multidelete: Delete mulitple pages from the database. #
1861 # kiriwrite_page_multidelete(database, confirm, filelist); #
1863 # database Specifies the database to delete multiple pages from. #
1864 # confirm Confirms the action to delete the selected pages from the #
1866 # filelist The list of files to delete from the selected database. #
1867 #################################################################################
1869 # Get the information passed to the subroutine.
1871 my ($database, $confirm, @filelist) = @_;
1873 # Check if the database name is blank and return an error if
1878 # The database name is blank so return an error.
1880 kiriwrite_error("databasenameblank");
1884 # Check if the file list array has any values and return
1885 # an error if it doesn't.
1889 # The page list really is blank so return
1892 kiriwrite_error("nopagesselected");
1895 # Check if the database filename is valid and return an error if
1898 my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
1900 if ($pagedatabase_filename_check eq 1){
1902 # The database filename is blank, so return an error.
1904 kiriwrite_error("blankdatabasepageadd");
1906 } elsif ($pagedatabase_filename_check eq 2){
1908 # The database filename is invalid, so return an error.
1910 kiriwrite_error("databasefilenameinvalid");
1914 # Check the length the database name and return an error if it's
1917 my $pagedatabase_length_check = kiriwrite_variablecheck($database, "maxlength", 32, 1);
1919 if ($pagedatabase_length_check eq 1){
1921 # The database name is too long, so return an error.
1923 kiriwrite_error("databasefilenametoolong");
1927 # Check if the confirm value is blank and if it is, then
1932 # The confirm value is blank so set the confirm value
1941 # The action to delete multiple pages from the database has
1944 # Connect to the database server.
1946 $kiriwrite_dbmodule->connect();
1948 # Check if any errors occured while connecting to the database server.
1950 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1952 # A database connection error has occured so return
1955 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1959 # Select the database.
1961 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
1963 # Check if any errors occured while selecting the database.
1965 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1967 # The database does not exist, so return an error.
1969 kiriwrite_error("databasemissingfile");
1971 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1973 # The database has invalid permissions set, so return
1976 kiriwrite_error("databaseinvalidpermissions");
1980 # Check if the database has read and write permissions.
1982 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
1984 if ($database_permissions eq 1){
1986 # The database permissions are invalid so return an error.
1988 kiriwrite_error("databaseinvalidpermissions");
1992 # Get information about the database.
1994 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1996 # Check if any errors had occured while getting the database
1999 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2001 # A database error has occured so return an error and
2002 # also the extended error information.
2004 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2008 my $database_name = $database_info{"DatabaseName"};
2010 # Define some variables for later.
2014 my $filelist_filename;
2021 tie (%deleted_list, 'Tie::IxHash');
2023 my $deleted_list = "";
2025 foreach $filelist_filename (@filelist){
2027 # Get the page information.
2029 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2031 # Check if any errors occured.
2033 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2035 # A database error has occured so return an error and
2036 # also the extended error information.
2038 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2040 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2042 # The page does not exist, so process the next page.
2048 # Add the page to the list of deleted pages.
2050 $deleted_list{$page_count}{Filename} = $page_info{"PageFilename"};
2051 $deleted_list{$page_count}{Name} = $page_info{"PageName"};
2055 $kiriwrite_dbmodule->deletepage({ PageFilename => $filelist_filename });
2057 # Check if any errors occured while deleting the page from the database.
2059 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2061 # A database error has occured so return an error and
2062 # also the extended error information.
2064 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2066 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2068 # The page does not exist, so process the next page.
2079 # Disconnect from the database server.
2081 $kiriwrite_dbmodule->disconnect();
2083 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{selectedpagesdeleted}, { Style => "pageheader" });
2084 $kiriwrite_presmodule->addlinebreak();
2085 $kiriwrite_presmodule->addlinebreak();
2086 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{selectedpagesdeletedmessage}, $database_name));
2087 $kiriwrite_presmodule->addlinebreak();
2088 $kiriwrite_presmodule->addlinebreak();
2089 $kiriwrite_presmodule->startbox("datalist");
2091 foreach $page (keys %deleted_list){
2093 if (!$deleted_list{$page}{Name}){
2094 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2095 $kiriwrite_presmodule->addtext(" (" . $deleted_list{$page}{Filename} . ")");
2098 $kiriwrite_presmodule->addtext($deleted_list{$page}{Name} . " (" . $deleted_list{$page}{Filename} . ")");
2101 $kiriwrite_presmodule->addlinebreak();
2104 $kiriwrite_presmodule->endbox();
2105 $kiriwrite_presmodule->addlinebreak();
2106 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
2108 return $kiriwrite_presmodule->grab();
2110 } elsif ($confirm eq 0){
2112 # The action to delete multiple pages from the database has
2113 # not been confirmed, so write a form asking the user to confirm
2114 # the deletion of those pages.
2116 # Connect to the database server.
2118 $kiriwrite_dbmodule->connect();
2120 # Check if any errors occured while connecting to the database server.
2122 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2124 # A database connection error has occured so return
2127 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2131 # Select the database.
2133 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2135 # Check if any errors occured while selecting the database.
2137 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2139 # The database does not exist, so return an error.
2141 kiriwrite_error("databasemissingfile");
2143 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2145 # The database has invalid permissions set, so return
2148 kiriwrite_error("databaseinvalidpermissions");
2152 # Check if the database has read and write permissions.
2154 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2156 if ($database_permissions eq 1){
2158 # The database permissions are invalid so return an error.
2160 kiriwrite_error("databaseinvalidpermissions");
2164 # Get information about the database.
2166 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2168 # Check if any errors had occured while getting the database
2171 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2173 # A database error has occured so return an error and
2174 # also the extended error information.
2176 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2180 my $database_name = $database_info{"DatabaseName"};
2182 # Define some variables for later.
2188 my $filelist_filename;
2189 my $filelist_filename_sql;
2192 tie(%delete_list, 'Tie::IxHash');
2194 # Process each filename given.
2196 foreach $filelist_filename (@filelist){
2198 # Get the page information.
2200 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2202 # Check if any errors occured.
2204 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2206 # A database error has occured so return an error and
2207 # also the extended error information.
2209 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2211 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2213 # The page does not exist, so process the next page.
2219 # Add the page file name and name to the list
2220 # of pages to delete.
2222 $delete_list{$pageseek}{Filename} = $page_info{"PageFilename"};
2223 $delete_list{$pageseek}{Name} = $page_info{"PageName"};
2225 # Increment the page seek counter and reset the
2232 # Disconnect from the database server.
2234 $kiriwrite_dbmodule->disconnect();
2236 # Check if any files were selected and return
2237 # an error if there wasn't.
2239 if ($pageseek eq 0){
2241 # No pages were selected so return an error.
2243 kiriwrite_error("nopagesselected");
2247 # Write the form for displaying pages.
2249 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{deletemultiplepages}, { Style => "pageheader" });
2250 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
2251 $kiriwrite_presmodule->startbox();
2252 $kiriwrite_presmodule->addhiddendata("mode", "page");
2253 $kiriwrite_presmodule->addhiddendata("action", "multidelete");
2254 $kiriwrite_presmodule->addhiddendata("database", $database);
2255 $kiriwrite_presmodule->addhiddendata("confirm", "1");
2256 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
2260 foreach $page (keys %delete_list){
2262 $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
2263 $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $delete_list{$page}{Filename});
2269 $kiriwrite_presmodule->addlinebreak();
2270 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{deletemultiplemessage}, $database_name));
2271 $kiriwrite_presmodule->addlinebreak();
2272 $kiriwrite_presmodule->addlinebreak();
2273 $kiriwrite_presmodule->startbox("datalist");
2275 foreach $page (keys %delete_list){
2277 if (!$delete_list{$page}{Name}){
2278 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2279 $kiriwrite_presmodule->addtext(" (" . $delete_list{$page}{Filename} . ")");
2281 $kiriwrite_presmodule->addtext($delete_list{$page}{Name} . " (" . $delete_list{$page}{Filename} . ")");
2283 $kiriwrite_presmodule->addlinebreak();
2287 $kiriwrite_presmodule->endbox();
2288 $kiriwrite_presmodule->addlinebreak();
2289 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{deletepagesbutton});
2290 $kiriwrite_presmodule->addtext(" | ");
2291 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{deletepagesreturnlink}, $database_name)});
2292 $kiriwrite_presmodule->endbox();
2293 $kiriwrite_presmodule->endform();
2295 return $kiriwrite_presmodule->grab();
2299 # A confirm value other than 0 or 1 is given, so
2302 kiriwrite_error("invaildvalue");
2308 sub kiriwrite_page_multimove{
2309 #################################################################################
2310 # kiriwrite_page_multimove: Move several pages from one database to another #
2315 # kiriwrite_page_multimove(database, newdatabase, confirm, filelist); #
2317 # database Specifies the database to move the selected pages from. #
2318 # newdatabase Specifies the database to move the selected pages to. #
2319 # confirm Confirms the action to move the pages from one database to #
2321 # filelist Specifies the list of pages to move. #
2322 #################################################################################
2324 # Get the values that were passed to the subroutine.
2326 my ($database, $newdatabase, $confirm, @filelist) = @_;
2328 # Check if the database filename is valid and return
2329 # an error if it isn't.
2331 my $newpagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
2333 if ($newpagedatabase_filename_check eq 1){
2335 # The database filename is blank, so return an error.
2337 kiriwrite_error("blankdatabasepageadd");
2339 } elsif ($newpagedatabase_filename_check eq 2){
2341 # The database filename is invalid, so return an error.
2343 kiriwrite_error("databasefilenameinvalid");
2347 # Check if the file list is blank and return an error
2352 # The file list really is blank so return
2355 kiriwrite_error("nopagesselected");
2359 # Check if the confirm value is blank and if it is then
2360 # set the confirm value to 0.
2370 # The action to move several pages from one database
2371 # to another has been confirmed.
2373 # Check if the database that the pages are moving from
2374 # is the same as the database the pages are moving to.
2375 # Return an error if it is.
2377 if ($database eq $newdatabase){
2379 # The database that the pages are moving from
2380 # and the database the pages are moving to
2381 # is the same, so return an error.
2383 kiriwrite_error("databasemovesame");
2387 # Check if the new database filename is valid and return an error if
2390 my $newpagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
2392 if ($newpagedatabase_filename_check eq 1){
2394 # The database filename is blank, so return an error.
2396 kiriwrite_error("blankdatabasepageadd");
2398 } elsif ($newpagedatabase_filename_check eq 2){
2400 # The database filename is invalid, so return an error.
2402 kiriwrite_error("databasefilenameinvalid");
2406 # Connect to the database server.
2408 $kiriwrite_dbmodule->connect();
2410 # Check if any errors occured while connecting to the database server.
2412 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2414 # A database connection error has occured so return
2417 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2421 # Select the database the pages are going to be moved from.
2423 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2425 # Check if any errors had occured while selecting the database.
2427 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2429 # The database does not exist, so return an error.
2431 kiriwrite_error("oldmovedatabasedoesnotexist");
2433 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2435 # The database has invalid permissions set, so return
2438 kiriwrite_error("oldmovedatabasefileinvalidpermissions");
2442 # Check if the database has read and write permissions.
2444 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2446 if ($database_permissions eq 1){
2448 # The database permissions are invalid so return an error.
2450 kiriwrite_error("databaseinvalidpermissions");
2454 # Select the database the pages are going to be moved to.
2456 $kiriwrite_dbmodule->selectseconddb({ DatabaseName => $newdatabase });
2458 # Check if any errors had occured while selecting the database.
2460 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2462 # The database does not exist, so return an error.
2464 kiriwrite_error("newmovedatabasedoesnotexist");
2466 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2468 # The database has invalid permissions set, so return
2471 kiriwrite_error("newmovedatabasefileinvalidpermissions");
2475 # Check if the database has read and write permissions.
2477 $database_permissions = $kiriwrite_dbmodule->dbpermissions($newdatabase, 1, 1);
2479 if ($database_permissions eq 1){
2481 # The database permissions are invalid so return an error.
2483 kiriwrite_error("databaseinvalidpermissions");
2487 # Define some values for later.
2495 my $olddatabase_name;
2496 my $newdatabase_name;
2503 my $warning_count = 0;
2505 tie(%moved_list, 'Tie::IxHash');
2506 tie(%warning_list, 'Tie::IxHash');
2508 # Get information about the database that the selected pages are moving from.
2510 my %olddatabase_info = $kiriwrite_dbmodule->getdatabaseinfo();
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("oldmovedatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
2524 $olddatabase_name = $olddatabase_info{"DatabaseName"};
2526 # Get information about the database that the selected pages are moving to.
2528 my %newdatabase_info = $kiriwrite_dbmodule->getseconddatabaseinfo();
2530 # Check if any errors had occured while getting the database
2533 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2535 # A database error has occured so return an error and
2536 # also the extended error information.
2538 kiriwrite_error("newmovedatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
2542 $newdatabase_name = $newdatabase_info{"DatabaseName"};
2544 # Get each file in the old database, get the page values,
2545 # put them into the new database and delete the pages
2546 # from the old database.
2548 foreach $filename (@filelist){
2550 # Get the page information.
2552 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
2554 # Check if any errors occured.
2556 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2558 # A database error has occured so write a warning message and
2559 # also the extended error information.
2561 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2565 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2567 # The page does not exist, so process the next page.
2569 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{pagedoesnotexist}, $filename);
2575 # Move the selected page.
2577 $kiriwrite_dbmodule->movepage({ PageFilename => $filename });
2579 # Check if any errors occured while moving the page.
2581 if ($kiriwrite_dbmodule->geterror eq "OldDatabaseError"){
2583 # A database error has occured while moving the pages from
2584 # the old database, so write a warning message.
2586 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovefrompageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2590 } elsif ($kiriwrite_dbmodule->geterror eq "NewDatabaseError"){
2592 # A database error has occured while moving the pages to
2593 # the new database, so write a warning message.
2595 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovetopageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
2599 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2601 # The page with the filename given in the database that
2602 # the page is to be moved from doesn't exist so write
2603 # a warning message.
2605 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovefrompagenotexist}, $filename);
2609 } elsif ($kiriwrite_dbmodule->geterror eq "PageAlreadyExists"){
2611 # The page with the filename given in the database that
2612 # the page is to be moved to already exists so write a
2615 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasemovetopageexists}, $filename);
2621 $moved_list{$move_count}{Filename} = $page_info{"PageFilename"};
2622 $moved_list{$move_count}{Name} = $page_info{"PageName"};
2628 # Disconnect from the database server.
2630 $kiriwrite_dbmodule->disconnect();
2632 # Write out a message saying that the pages were moved (if any)
2633 # to the new database (and any warnings given).
2635 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepages}, { Style => "pageheader" });
2636 $kiriwrite_presmodule->addlinebreak();
2637 $kiriwrite_presmodule->addlinebreak();
2641 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{movedpagesmessage}, $olddatabase_name, $newdatabase_name));
2642 $kiriwrite_presmodule->addlinebreak();
2643 $kiriwrite_presmodule->addlinebreak();
2645 $kiriwrite_presmodule->startbox("datalist");
2646 foreach $page (keys %moved_list){
2647 if (!$moved_list{$page}{Name}){
2648 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2649 $kiriwrite_presmodule->addtext(" (" . $moved_list{$page}{Filename} . ")");
2651 $kiriwrite_presmodule->addtext($moved_list{$page}{Name} . " (" . $moved_list{$page}{Filename} . ")");
2654 $kiriwrite_presmodule->addlinebreak();
2656 $kiriwrite_presmodule->endbox();
2660 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagesmoved}, $olddatabase_name, $newdatabase_name));
2661 $kiriwrite_presmodule->addlinebreak();
2662 $kiriwrite_presmodule->addlinebreak();
2668 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{errormessages});
2669 $kiriwrite_presmodule->addlinebreak();
2670 $kiriwrite_presmodule->addlinebreak();
2671 $kiriwrite_presmodule->startbox("datalist");
2672 foreach $warning (keys %warning_list){
2673 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
2674 $kiriwrite_presmodule->addlinebreak();
2676 $kiriwrite_presmodule->endbox();
2680 $kiriwrite_presmodule->addlinebreak();
2681 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $olddatabase_name)});
2682 $kiriwrite_presmodule->addtext(" | ");
2683 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $newdatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{viewpagelist}, $newdatabase_name)});
2685 return $kiriwrite_presmodule->grab();
2687 } elsif ($confirm eq 0) {
2689 # The action to move several pages from one database
2690 # to another has not been confirmed so write a form.
2692 # Connect to the database server.
2694 $kiriwrite_dbmodule->connect();
2696 # Check if any errors occured while connecting to the database server.
2698 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
2700 # A database connection error has occured so return
2703 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
2707 # Select the database.
2709 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
2711 # Check if any errors occured while selecting the database.
2713 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2715 # The database does not exist, so return an error.
2717 kiriwrite_error("databasemissingfile");
2719 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2721 # The database has invalid permissions set, so return
2724 kiriwrite_error("databaseinvalidpermissions");
2728 # Check if the database has read and write permissions.
2730 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
2732 if ($database_permissions eq 1){
2734 # The database permissions are invalid so return an error.
2736 kiriwrite_error("databaseinvalidpermissions");
2740 # Get information about the database.
2742 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2744 # Check if any errors had occured while getting the database
2747 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2749 # A database error has occured so return an error and
2750 # also the extended error information.
2752 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2756 my $database_name = $database_info{"DatabaseName"};
2758 # Define some values for later.
2767 my $filelist_filename;
2772 # Process each filename given.
2774 tie (%move_list, 'Tie::IxHash');
2775 tie (%db_list, 'Tie::IxHash');
2777 foreach $filelist_filename (@filelist){
2779 # Get the page information.
2781 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
2783 # Check if any errors occured.
2785 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2787 # A database error has occured so return an error and
2788 # also the extended error information.
2790 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
2792 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
2794 # The page does not exist, so process the next page.
2800 # Add the page name and file name to the list of
2803 $move_list{$pageseek}{Filename} = $page_info{"PageFilename"};
2804 $move_list{$pageseek}{Name} = $page_info{"PageName"};
2806 # Increment the page seek counter and reset the
2813 # Check if any pages exust and return an error if
2816 if ($pageseek eq 0){
2818 # None of the selected pages exist, so return
2821 kiriwrite_error("nopagesselected");
2825 # Get the list of databases.
2827 my @database_list = $kiriwrite_dbmodule->getdblist();
2829 # Check if any errors occured while trying to get the list of databases.
2831 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
2833 # The database directory is missing so return an error.
2835 kiriwrite_error("datadirectorymissing");
2837 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
2839 # The database directory has invalid permissions set so return
2842 kiriwrite_error("datadirectoryinvalidpermissions");
2846 # Get the information about each database (the short name and friendly name).
2848 foreach $data_file (@database_list){
2850 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
2852 # Check if any errors occured while selecting the database.
2854 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
2856 # The database does not exist, so process the next
2861 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
2863 # The database has invalid permissions set, so process
2864 # the next database.
2870 # Get the database information.
2872 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
2874 # Check if any errors had occured while getting the database
2877 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
2879 # A database error has occured so process the next
2886 # Check if the database name is undefined and if it is
2887 # then set it blank.
2889 if (!$database_name){
2890 $database_name = "";
2893 # Append the database to the list of databases available.
2895 $db_list{$dbseek}{Filename} = $data_file;
2896 $db_list{$dbseek}{Name} = $database_info{"DatabaseName"};
2902 # Disconnect from the database server.
2904 $kiriwrite_dbmodule->disconnect();
2906 # Write out the form.
2908 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepages}, { Style => "pageheader" });
2909 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
2910 $kiriwrite_presmodule->startbox();
2911 $kiriwrite_presmodule->addhiddendata("mode", "page");
2912 $kiriwrite_presmodule->addhiddendata("action", "multimove");
2913 $kiriwrite_presmodule->addhiddendata("database", $database);
2914 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
2915 $kiriwrite_presmodule->addhiddendata("confirm", "1");
2917 # Write the page form data.
2921 foreach $page (keys %move_list){
2922 $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
2923 $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $move_list{$page}{Filename});
2927 $kiriwrite_presmodule->addlinebreak();
2928 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{movepagesmessage}, $database_name));
2929 $kiriwrite_presmodule->addlinebreak();
2930 $kiriwrite_presmodule->addlinebreak();
2931 $kiriwrite_presmodule->startbox("datalist");
2933 foreach $page (keys %move_list){
2934 if (!$move_list{$page}{Name}){
2935 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
2936 $kiriwrite_presmodule->addtext(" (" . $move_list{$page}{Filename} . ")");
2938 $kiriwrite_presmodule->addtext($move_list{$page}{Name} . " (" . $move_list{$page}{Filename} . ")");
2940 $kiriwrite_presmodule->addlinebreak();
2943 $kiriwrite_presmodule->endbox();
2944 $kiriwrite_presmodule->addlinebreak();
2945 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{movepagesto});
2947 $kiriwrite_presmodule->addselectbox("newdatabase");
2949 foreach $db_name (keys %db_list){
2950 $kiriwrite_presmodule->addoption($db_list{$db_name}{Name} . " (" . $db_list{$db_name}{Filename} . ")", { Value => $db_list{$db_name}{Filename}});
2953 $kiriwrite_presmodule->endselectbox();
2954 $kiriwrite_presmodule->addlinebreak();
2955 $kiriwrite_presmodule->addlinebreak();
2956 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{movepagesbutton});
2957 $kiriwrite_presmodule->addtext(" | ");
2958 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name)});
2959 $kiriwrite_presmodule->endbox();
2960 $kiriwrite_presmodule->endform();
2962 return $kiriwrite_presmodule->grab();
2966 # The confirm value is other than 0 or 1, so return
2969 kiriwrite_error("invalidvariable");
2977 sub kiriwrite_page_multicopy{
2978 #################################################################################
2979 # kiriwrite_page_multicopy: Copy several pages from one database to another #
2984 # kiriwrite_page_multicopy(database, newdatabase, confirm, filelist); #
2986 # database Specifies the database to copy the selected pages from. #
2987 # newdatabase Specifies the database to copy the selected page to. #
2988 # confirm Confirms the action to copy the pages. #
2989 # filelist A list of filenames to copy in an array. #
2990 #################################################################################
2992 # Get the values that were passed to the subroutine.
2994 my ($database, $newdatabase, $confirm, @filelist) = @_;
2996 # Check if the file list is blank and return an error
3001 # The file list really is blank so return
3004 kiriwrite_error("nopagesselected");
3008 # Check if the confirm value is blank and if it is then
3009 # set the confirm value to 0.
3017 # Check if the database filename is valid and return an error if
3020 my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
3022 if ($pagedatabase_filename_check eq 1){
3024 # The database filename is blank, so return an error.
3026 kiriwrite_error("blankdatabasepageadd");
3028 } elsif ($pagedatabase_filename_check eq 2){
3030 # The database filename is invalid, so return an error.
3032 kiriwrite_error("databasefilenameinvalid");
3038 # The action to copy several pages from one database
3039 # to another has been confirmed.
3041 # Check if the database that the pages are copied from
3042 # is the same as the database the pages are copied to.
3043 # Return an error if it is.
3045 if ($database eq $newdatabase){
3047 # The database that the pages are being copied from
3048 # and the database that the pages are copied to
3049 # is the same, so return an error.
3051 kiriwrite_error("databasecopysame");
3055 # Check if the new database filename is valid and return an error if
3058 my $pagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
3060 if ($pagedatabase_filename_check eq 1){
3062 # The database filename is blank, so return an error.
3064 kiriwrite_error("blankdatabasepageadd");
3066 } elsif ($pagedatabase_filename_check eq 2){
3068 # The database filename is invalid, so return an error.
3070 kiriwrite_error("databasefilenameinvalid");
3074 # Connect to the database server.
3076 $kiriwrite_dbmodule->connect();
3078 # Check if any errors occured while connecting to the database server.
3080 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3082 # A database connection error has occured so return
3085 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3089 # Select the database the pages are going to be copied from.
3091 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3093 # Check if any errors had occured while selecting the database.
3095 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3097 # The database does not exist, so return an error.
3099 kiriwrite_error("oldcopydatabasedoesnotexist");
3101 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3103 # The database has invalid permissions set, so return
3106 kiriwrite_error("oldcopydatabasefileinvalidpermissions");
3110 # Select the database the pages are going to be copied to.
3112 $kiriwrite_dbmodule->selectseconddb({ DatabaseName => $newdatabase });
3114 # Check if any errors had occured while selecting the database.
3116 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3118 # The database does not exist, so return an error.
3120 kiriwrite_error("newcopydatabasedoesnotexist");
3122 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3124 # The database has invalid permissions set, so return
3127 kiriwrite_error("newcopydatabasefileinvalidpermissions");
3131 # Check if the database has read and write permissions.
3133 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($newdatabase, 1, 1);
3135 if ($database_permissions eq 1){
3137 # The database permissions are invalid so return an error.
3139 kiriwrite_error("databaseinvalidpermissions");
3143 # Define some values for later.
3149 my @olddatabase_info;
3150 my @olddatabase_page;
3151 my @newdatabase_info;
3152 my @newdatabase_page;
3158 my $olddatabase_database_handle;
3159 my $olddatabase_string_handle;
3160 my $olddatabase_name;
3161 my $newdatabase_database_handle;
3162 my $newdatabase_string_handle;
3163 my $newdatabase_name;
3168 my $page_filename_sql;
3171 my $page_description;
3172 my $page_description_sql;
3174 my $page_section_sql;
3176 my $page_template_sql;
3180 my $page_settings_sql;
3181 my $page_lastmodified;
3182 my $page_lastmodified_sql;
3185 my $warning_count = 0;
3189 tie(%copied_list, 'Tie::IxHash');
3190 tie(%warning_list, 'Tie::IxHash');
3192 # Get information about the database that the selected pages are moving from.
3194 my %olddatabase_info = $kiriwrite_dbmodule->getdatabaseinfo();
3196 # Check if any errors had occured while getting the database
3199 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3201 # A database error has occured so return an error and
3202 # also the extended error information.
3204 kiriwrite_error("oldcopydatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
3208 $olddatabase_name = $olddatabase_info{"DatabaseName"};
3210 # Get information about the database that the selected pages are moving to.
3212 my %newdatabase_info = $kiriwrite_dbmodule->getseconddatabaseinfo();
3214 # Check if any errors had occured while getting the database
3217 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3219 # A database error has occured so return an error and
3220 # also the extended error information.
3222 kiriwrite_error("newcopydatabasedatabaseerror", $kiriwrite_dbmodule->geterror(1));
3226 $newdatabase_name = $newdatabase_info{"DatabaseName"};
3228 # Check if the database filename is valid and return an error if
3231 my $newpagedatabase_filename_check = kiriwrite_variablecheck($newdatabase, "filename", 0, 1);
3233 if ($newpagedatabase_filename_check eq 1){
3235 # The database filename is blank, so return an error.
3237 kiriwrite_error("blankdatabasepageadd");
3239 } elsif ($newpagedatabase_filename_check eq 2){
3241 # The database filename is invalid, so return an error.
3243 kiriwrite_error("databasefilenameinvalid");
3247 foreach $filename (@filelist){
3249 # Get the page information.
3251 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3253 # Check if any errors occured.
3255 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3257 # A database error has occured so return an error and
3258 # also the extended error information.
3260 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3264 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3266 # The page does not exist, so process the next page.
3268 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfrompageerror}, $filename);
3274 $kiriwrite_dbmodule->copypage({ PageFilename => $filename });
3276 # Check if any errors occured while copying the page.
3278 if ($kiriwrite_dbmodule->geterror eq "OldDatabaseError"){
3280 # A database error has occured while copying the pages from
3281 # the old database, so write a warning message.
3283 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfromdatabaseerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3287 } elsif ($kiriwrite_dbmodule->geterror eq "NewDatabaseError"){
3289 # A database error has occured while copying the pages to
3290 # the new database, so write a warning message.
3292 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopytodatabaseerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3296 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3298 # The page with the filename given in the database that
3299 # the page is to be copied from doesn't exist so write
3300 # a warning message.
3302 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopyfrompagenotexist}, $filename);
3306 } elsif ($kiriwrite_dbmodule->geterror eq "PageAlreadyExists"){
3308 # The page with the filename given in the database that
3309 # the page is to be copied to already exists so write a
3312 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasecopytopageexists}, $filename);
3318 # Append the copied page (filename and name) to the list of
3321 $copied_list{$page_seek}{Filename} = $filename;
3322 $copied_list{$page_seek}{Name} = $page_info{"PageName"};
3327 # Disconnect from the database server.
3329 $kiriwrite_dbmodule->disconnect();
3331 # Write out a message saying that the pages were moved (if any)
3332 # to the new database (and any warnings given).
3334 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypages}, { Style => "pageheader" });
3335 $kiriwrite_presmodule->addlinebreak();
3336 $kiriwrite_presmodule->addlinebreak();
3340 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{copypagesresultmessage}, $olddatabase_name, $newdatabase_name));
3341 $kiriwrite_presmodule->addlinebreak();
3342 $kiriwrite_presmodule->addlinebreak();
3343 $kiriwrite_presmodule->startbox("datalist");
3344 foreach $page (keys %copied_list){
3345 if (!$copied_list{$page}{Name}){
3346 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
3347 $kiriwrite_presmodule->addtext(" (" . $copied_list{$page}{Filename} . ")");
3349 $kiriwrite_presmodule->addtext($copied_list{$page}{Name} . " (" . $copied_list{$page}{Filename} . ")");
3351 $kiriwrite_presmodule->addlinebreak();
3353 $kiriwrite_presmodule->endbox();
3357 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagescopied}, $olddatabase_name, $newdatabase_name));
3363 $kiriwrite_presmodule->addlinebreak();
3364 $kiriwrite_presmodule->addlinebreak();
3365 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypageswarnings});
3366 $kiriwrite_presmodule->addlinebreak();
3367 $kiriwrite_presmodule->addlinebreak();
3368 $kiriwrite_presmodule->startbox("datalist");
3369 foreach $warning (keys %warning_list){
3370 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
3371 $kiriwrite_presmodule->addlinebreak();
3373 $kiriwrite_presmodule->endbox();
3377 $kiriwrite_presmodule->addlinebreak();
3378 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $olddatabase_name)});
3379 $kiriwrite_presmodule->addtext(" | ");
3380 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $newdatabase, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{viewpagelist}, $newdatabase_name)});
3382 return $kiriwrite_presmodule->grab();
3384 } elsif ($confirm eq 0) {
3386 # The action to copy several pages from one database
3387 # to another has not been confirmed so write a form.
3389 # Connect to the database server.
3391 $kiriwrite_dbmodule->connect();
3393 # Check if any errors occured while connecting to the database server.
3395 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3397 # A database connection error has occured so return
3400 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3404 # Select the database to copy the pages from.
3406 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3408 # Check if any errors occured while selecting the database.
3410 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3412 # The database does not exist, so return an error.
3414 kiriwrite_error("databasemissingfile");
3416 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3418 # The database has invalid permissions set, so return
3421 kiriwrite_error("databaseinvalidpermissions");
3425 # Get information about the database.
3427 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3429 # Check if any errors had occured while getting the database
3432 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3434 # A database error has occured so return an error and
3435 # also the extended error information.
3437 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3441 my $database_name = $database_info{"DatabaseName"};
3443 # Define some values for later.
3457 tie(%copy_list, 'Tie::IxHash');
3458 tie(%db_list, 'Tie::IxHash');
3460 # Process each filename given.
3462 foreach $filename (@filelist){
3464 # Get the page information.
3466 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3468 # Check if any errors occured.
3470 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3472 # A database error has occured so return an error and
3473 # also the extended error information.
3475 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3477 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3479 # The page does not exist, so process the next page.
3485 # Add the page name and file name to the list of
3488 $copy_list{$pageseek}{Filename} = $page_info{"PageFilename"};
3489 $copy_list{$pageseek}{Name} = $page_info{"PageName"};
3491 # Increment the page seek counter.
3497 # Check if any pages exust and return an error if
3500 if ($pageseek eq 0){
3502 # None of the selected pages exist, so return
3505 kiriwrite_error("nopagesselected");
3509 # Get the database filenames and names.
3511 my @database_list = $kiriwrite_dbmodule->getdblist();
3513 # Check if any errors occured while trying to get the list of databases.
3515 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
3517 # The database directory is missing so return an error.
3519 kiriwrite_error("datadirectorymissing");
3521 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
3523 # The database directory has invalid permissions set so return
3526 kiriwrite_error("datadirectoryinvalidpermissions");
3530 # Process each database to get the database name.
3532 foreach $data_file (@database_list){
3534 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
3536 # Check if any errors occured while selecting the database.
3538 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3540 # The database does not exist, so process the next
3545 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3547 # The database has invalid permissions set, so process
3548 # the next database.
3554 # Get the database information.
3556 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3558 # Check if any errors had occured while getting the database
3561 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3563 # A database error has occured so process the next
3570 # Check if the database name is undefined and if it is
3571 # then set it blank.
3573 if (!$database_name){
3574 $database_name = "";
3577 # Append the database filename and name to the list of databases
3578 # to move the pages to.
3580 $db_list{$dbseek}{Filename} = $data_file;
3581 $db_list{$dbseek}{Name} = $database_info{"DatabaseName"};
3587 # Disconnect from the database server.
3589 $kiriwrite_dbmodule->disconnect();
3591 # Write out the form.
3593 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypages}, { Style => "pageheader" });
3594 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
3595 $kiriwrite_presmodule->startbox();
3596 $kiriwrite_presmodule->addhiddendata("mode", "page");
3597 $kiriwrite_presmodule->addhiddendata("action", "multicopy");
3598 $kiriwrite_presmodule->addhiddendata("database", $database);
3599 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
3600 $kiriwrite_presmodule->addhiddendata("confirm", 1);
3604 foreach $page (keys %copy_list){
3605 $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
3606 $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $copy_list{$page}{Filename});
3610 $kiriwrite_presmodule->addlinebreak();
3611 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{copypagesmessage}, $database_name));
3613 $kiriwrite_presmodule->addlinebreak();
3614 $kiriwrite_presmodule->addlinebreak();
3616 $kiriwrite_presmodule->startbox("datalist");
3618 foreach $page (keys %copy_list){
3619 if (!$copy_list{$page}{Name}){
3620 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
3621 $kiriwrite_presmodule->addtext(" (" . $copy_list{$page}{Filename} . ")");
3623 $kiriwrite_presmodule->addtext($copy_list{$page}{Name} . " (" . $copy_list{$page}{Filename} . ")");
3625 $kiriwrite_presmodule->addlinebreak();
3628 $kiriwrite_presmodule->endbox();
3630 $kiriwrite_presmodule->addlinebreak();
3632 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{copypagesto});
3633 $kiriwrite_presmodule->addselectbox("newdatabase");
3635 foreach $dbname (keys %db_list){
3636 $kiriwrite_presmodule->addoption($db_list{$dbname}{Name} . " (" . $db_list{$dbname}{Filename} . ")", { Value => $db_list{$dbname}{Filename}});
3639 $kiriwrite_presmodule->endselectbox();
3641 $kiriwrite_presmodule->addlinebreak();
3642 $kiriwrite_presmodule->addlinebreak();
3643 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{copypagesbutton});
3644 $kiriwrite_presmodule->addtext(" | ");
3645 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
3647 $kiriwrite_presmodule->endbox();
3648 $kiriwrite_presmodule->endform();
3650 return $kiriwrite_presmodule->grab();
3654 # The confirm value is other than 0 or 1, so return
3657 kiriwrite_error("invalidvariable");
3663 sub kiriwrite_page_multiedit{
3664 #################################################################################
3665 # kiriwrite_page_multiedit: Edit several pages from a database. #
3669 # kiriwrite_page_multiedit(database, newsection, altersection, newtemplate, #
3670 # altertemplate, newsettings, altersettings #
3671 # confirm, filelist); #
3673 # database Specifies the database to edit the pages from. #
3674 # newsection Specifies the new section name to use on the selected pages. #
3675 # altersection Specifies if the section name should be altered. #
3676 # newtemplate Specifies the new template filename to use on the selected #
3678 # altertemplate Specifies if the template filename should be altered. #
3679 # newsettings Specifies the new settings to use on the selected pages. #
3680 # altersettings Specifies if the settings should be altered. #
3681 # confirm Confirms the action to edit the selected pages. #
3682 # filelist The list of file names to edit. #
3683 #################################################################################
3685 # Get the values that were passed to the subroutine.
3687 my ($database, $newsection, $altersection, $newtemplate, $altertemplate, $newsettings, $altersettings, $confirm, @filelist) = @_;
3689 # Check if the file list is blank and return an error
3694 # The file list really is blank so return
3697 kiriwrite_error("nopagesselected");
3701 # Check if certain values are undefined and define them if
3704 if (!$altersection){
3706 # The alter section value is blank, so set it to
3709 $altersection = "off";
3713 if (!$altertemplate){
3715 # The alter template value is blank, so set it to
3718 $altertemplate = "off";
3722 if (!$altersettings){
3724 # The alter settings value is blank, so set it to
3727 $altersettings = "off";
3731 # Check if the database filename is valid and return an error if
3734 my $pagedatabase_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
3736 if ($pagedatabase_filename_check eq 1){
3738 # The database filename is blank, so return an error.
3740 kiriwrite_error("blankdatabasepageadd");
3742 } elsif ($pagedatabase_filename_check eq 2){
3744 # The database filename is invalid, so return an error.
3746 kiriwrite_error("databasefilenameinvalid");
3750 # Check if the confirm value is blank and if it is then
3751 # set the confirm value to 0.
3761 # The action to edit the template has been confirmed so
3762 # edit the selected pages.
3764 # Check the values recieved at UTF8 compliant before
3767 kiriwrite_variablecheck($newsection, "utf8", 0, 0);
3768 kiriwrite_variablecheck($newtemplate, "utf8", 0, 0);
3769 kiriwrite_variablecheck($newsettings, "utf8", 0, 0);
3771 # Convert the values into proper UTF8 values.
3773 $newsection = kiriwrite_utf8convert($newsection);
3774 $newtemplate = kiriwrite_utf8convert($newtemplate);
3775 $newsettings = kiriwrite_utf8convert($newsettings);
3777 # Check the length of the variables.
3779 kiriwrite_variablecheck($altersection, "maxlength", 3, 0);
3780 kiriwrite_variablecheck($altertemplate, "maxlength", 3, 0);
3781 kiriwrite_variablecheck($altersettings, "maxlength", 3, 0);
3782 my $newsection_maxlength_check = kiriwrite_variablecheck($newsection, "maxlength", 256, 1);
3783 my $newtemplate_maxlength_check = kiriwrite_variablecheck($newtemplate, "maxlength", 256, 1);
3784 my $newtemplate_filename_check = kiriwrite_variablecheck($newtemplate, "filename", 0, 1);
3785 my $newsettings_maxlength_check = kiriwrite_variablecheck($newsettings, "maxlength", 1, 1);
3786 my $newsettings_settings_check = kiriwrite_variablecheck($newsettings, "pagesetting", 0, 1);
3788 # Check the values and return an error if needed.
3790 if ($newsection_maxlength_check eq 1 && $altersection eq "on"){
3792 # The new section name is too long, so return an
3795 kiriwrite_error("pagesectiontoolong");
3799 if ($newtemplate_maxlength_check eq 1 && $altertemplate eq "on"){
3801 # The new template name is too long, so return an
3804 kiriwrite_error("templatefilenametoolong");
3808 # Check if the template filename is set to !skip or !none
3809 # and skip this check if it is.
3811 if ($newtemplate eq "!skip" || $newtemplate eq "!none"){
3813 # Skip this check as the template filename is
3817 if ($newtemplate_filename_check eq 1 && $altertemplate eq "on" || $newtemplate_filename_check eq 2 && $altertemplate eq "on"){
3819 # The new template filename is invalid, so return
3822 kiriwrite_error("templatefilenameinvalid");
3827 if ($newsettings_maxlength_check eq 1 && $altertemplate eq "on"){
3829 # The new settings value is too long, so return
3832 kiriwrite_error("pagesettingstoolong");
3836 if ($newsettings_settings_check eq 1 && $altersettings eq "on"){
3838 # The new settings value is invalid, so return
3841 kiriwrite_error("pagesettingsinvalid");
3845 # Define some values for later.
3857 my $warning_count = 0;
3859 tie(%edited_list, 'Tie::IxHash');
3860 tie(%warning_list, 'Tie::IxHash');
3862 # Check if the template filename is !skip and
3863 # set the alter template value to off if it
3866 if ($newtemplate eq "!skip"){
3868 $altertemplate = "off";
3872 # Check if all values are not selected and return
3873 # an error if they are.
3875 if ($altersection ne "on" && $altertemplate ne "on" && $altersettings ne "on"){
3877 # All values are not selected so return
3880 kiriwrite_error("noeditvaluesselected");
3884 # Connect to the database server.
3886 $kiriwrite_dbmodule->connect();
3888 # Check if any errors occured while connecting to the database server.
3890 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
3892 # A database connection error has occured so return
3895 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
3899 # Select the database.
3901 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
3903 # Check if any errors occured while selecting the database.
3905 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
3907 # The database does not exist, so return an error.
3909 kiriwrite_error("databasemissingfile");
3911 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
3913 # The database has invalid permissions set, so return
3916 kiriwrite_error("databaseinvalidpermissions");
3920 # Check if the database has read and write permissions.
3922 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
3924 if ($database_permissions eq 1){
3926 # The database permissions are invalid so return an error.
3928 kiriwrite_error("databaseinvalidpermissions");
3932 # Get information about the database.
3934 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
3936 # Check if any errors had occured while getting the database
3939 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3941 # A database error has occured so return an error and
3942 # also the extended error information.
3944 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
3948 my $database_name = $database_info{"DatabaseName"};
3950 # Edit the selected pages.
3952 foreach $filename (@filelist){
3954 # Get the page information.
3956 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filename });
3958 # Check if any errors occured.
3960 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
3962 # A database error has occured so write a warning message.
3964 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
3966 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
3968 # The page does not exist, so write a warning message.
3970 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepagedoesnotexist}, $filename);
3976 # Check if the page section should be altered.
3978 if ($altersection eq "on"){
3980 # Change the section name.
3982 $page_info{"PageSection"} = $newsection;
3986 # Check if the page template should be altered.
3988 if ($altertemplate eq "on"){
3990 # Change the page template filename.
3992 $page_info{"PageTemplate"} = $newtemplate;
3996 # Check if the page settings should be altered.
3998 if ($altersettings eq "on"){
4000 # Change the page settings value.
4002 $page_info{"PageSettings"} = $newsettings;
4006 # Edit the selected page.
4008 $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"} });
4010 # Check if any errors occured while editing the page.
4012 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4014 # A database error has occured so write a warning message
4015 # with the extended error information.
4017 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepageerror}, $filename, $kiriwrite_dbmodule->geterror(1));
4021 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4023 # The pages does not exist in the database.
4025 $warning_list{$warning_count}{Message} = kiriwrite_language($kiriwrite_lang->{pages}->{databasepagedoesnotexist}, $filename);
4029 } elsif ($kiriwrite_dbmodule->geterror eq "PageExists"){
4031 # A page already exists with the new filename.
4033 kiriwrite_error("pagefilenameexists");
4037 # The page has been edited so write a message saying that the page
4040 $edited_list{$pageedited}{Filename} = $page_info{"PageFilename"};
4041 $edited_list{$pageedited}{Name} = $page_info{"PageName"};
4043 # Increment the counter of edited pages.
4049 # Disconnect from the database server.
4051 $kiriwrite_dbmodule->disconnect();
4053 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multiedit}, { Style => "pageheader" });
4054 $kiriwrite_presmodule->addlinebreak();
4055 $kiriwrite_presmodule->addlinebreak();
4057 # Check if the counter of edited pages is 0 and if it is
4058 # then write a message saying that no pages were edited
4059 # else write a message listing all of the pages edited.
4061 if ($pageedited eq 0){
4063 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{nopagesedited}, $database_name));
4067 # Write out the message saying that the selected pages
4070 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagesedited}, $database_name));
4071 $kiriwrite_presmodule->addlinebreak();
4072 $kiriwrite_presmodule->addlinebreak();
4073 $kiriwrite_presmodule->startbox("datalist");
4075 foreach $page (keys %edited_list){
4077 # Check if the page name is not blank.
4079 if (!$edited_list{$page}{Name}){
4081 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
4082 $kiriwrite_presmodule->addtext(" (" . $edited_list{$page}{Filename} . ")");
4086 $kiriwrite_presmodule->addtext($edited_list{$page}{Name});
4087 $kiriwrite_presmodule->addtext(" (" . $edited_list{$page}{Filename} . ")");
4091 $kiriwrite_presmodule->addlinebreak();
4094 $kiriwrite_presmodule->endbox();
4098 # Check if any warnings have occured and write a message
4099 # if any warnings did occur.
4103 # One or several warnings have occured so
4106 $kiriwrite_presmodule->addlinebreak();
4107 $kiriwrite_presmodule->addlinebreak();
4108 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{editedpageswarnings});
4109 $kiriwrite_presmodule->addlinebreak();
4110 $kiriwrite_presmodule->addlinebreak();
4111 $kiriwrite_presmodule->startbox("datalist");
4112 foreach $warning (keys %warning_list) {
4113 $kiriwrite_presmodule->addtext($warning_list{$warning}{Message});
4114 $kiriwrite_presmodule->addlinebreak();
4116 $kiriwrite_presmodule->endbox();
4120 # Write a link going back to the page list for
4121 # the selected database.
4123 $kiriwrite_presmodule->addlinebreak();
4124 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
4126 return $kiriwrite_presmodule->grab();
4128 } elsif ($confirm eq 0){
4130 # The action to edit the template has not been confirmed
4131 # so write a form out instead.
4133 # Connect to the database server.
4135 $kiriwrite_dbmodule->connect();
4137 # Check if any errors occured while connecting to the database server.
4139 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4141 # A database connection error has occured so return
4144 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4148 # Select the database.
4150 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
4152 # Check if any errors occured while selecting the database.
4154 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4156 # The database does not exist, so return an error.
4158 kiriwrite_error("databasemissingfile");
4160 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4162 # The database has invalid permissions set, so return
4165 kiriwrite_error("databaseinvalidpermissions");
4169 # Check if the database has read and write permissions.
4171 my $database_permissions = $kiriwrite_dbmodule->dbpermissions($database, 1, 1);
4173 if ($database_permissions eq 1){
4175 # The database permissions are invalid so return an error.
4177 kiriwrite_error("databaseinvalidpermissions");
4181 # Get information about the database.
4183 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4185 # Check if any errors had occured while getting the database
4188 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4190 # A database error has occured so return an error and
4191 # also the extended error information.
4193 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4197 my $database_name = $database_info{"DatabaseName"};
4199 # Define some variables for later.
4207 my $filelist_filename;
4214 my $template_filename;
4215 my $template_warning;
4216 my $templateseek = 0;
4218 tie(%edit_list, 'Tie::IxHash');
4219 tie(%template_list, 'Tie::IxHash');
4221 # Get the information about each page that is going
4224 foreach $filelist_filename (@filelist){
4226 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $filelist_filename });
4228 # Check if any errors occured.
4230 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4232 # A database error has occured so return an error and
4233 # also the extended error information.
4235 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4237 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4239 # The page does not exist, so process the next page.
4245 # Add the page name and file name to the list of
4248 $edit_list{$pageseek}{Filename} = $page_info{"PageFilename"};
4249 $edit_list{$pageseek}{Name} = $page_info{"PageName"};
4251 # Increment the page seek counter and reset the
4258 # Check if any pages were found in the database and return
4261 if ($pageseek eq 0){
4263 # No pages were found so return an error.
4265 kiriwrite_error("nopagesselected");
4269 # Connect to the template database.
4271 $kiriwrite_dbmodule->connecttemplate();
4273 # Check if any errors had occured.
4275 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
4277 # The template database does not exist so write a warning
4280 $template_warning = $kiriwrite_lang->{pages}->{templatedatabasenotexistmultieditkeep};
4282 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
4284 # The template database has invalid permissions set so
4287 $template_warning = $kiriwrite_lang->{pages}->{templatedatabasepermissionsinvalidmultieditkeep};
4291 if (!$template_warning){
4293 # Get the list of templates available.
4295 @templates_list = $kiriwrite_dbmodule->gettemplatelist();
4297 # Check if any errors had occured.
4299 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
4301 # A database error occured while getting the list
4302 # of templates so write a warning message with the
4303 # extended error information.
4305 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrormultieditkeep}, $kiriwrite_dbmodule->geterror(1));
4309 if (!$template_warning){
4311 foreach $template_filename (@templates_list){
4313 # Get the template data.
4315 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
4317 # Check if any error occured while getting the template information.
4319 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
4321 # A database error has occured, so write a warning message with
4322 # the extended error information.
4324 $template_warning = kiriwrite_language($kiriwrite_lang->{pages}->{templatedatabaseerrormultieditkeep}, $kiriwrite_dbmodule->geterror(1));
4326 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
4328 # The template does not exist, so process the next page.
4334 # Add the template to the list of templates.
4336 $template_list{$templateseek}{Filename} = $template_info{"TemplateFilename"};
4337 $template_list{$templateseek}{Name} = $template_info{"TemplateName"};
4347 # Disconnect from the template database.
4349 $kiriwrite_dbmodule->disconnecttemplate();
4351 # Disconnect from the database server.
4353 $kiriwrite_dbmodule->disconnect();
4355 # Write a form for editing the selected pages.
4357 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multiedit}, { Style => "pageheader" });
4358 $kiriwrite_presmodule->addlinebreak();
4359 $kiriwrite_presmodule->addlinebreak();
4360 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
4361 $kiriwrite_presmodule->startbox();
4362 $kiriwrite_presmodule->addhiddendata("mode", "page");
4363 $kiriwrite_presmodule->addhiddendata("action", "multiedit");
4364 $kiriwrite_presmodule->addhiddendata("database", $database);
4365 $kiriwrite_presmodule->addhiddendata("count", $pageseek);
4366 $kiriwrite_presmodule->addhiddendata("confirm", 1);
4370 foreach $page (keys %edit_list){
4371 $kiriwrite_presmodule->addhiddendata("name[" . $pageseek . "]", "on");
4372 $kiriwrite_presmodule->addhiddendata("id[" . $pageseek . "]", $edit_list{$page}{Filename});
4376 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{multieditmessage}, $database_name));
4377 $kiriwrite_presmodule->addlinebreak();
4378 $kiriwrite_presmodule->addlinebreak();
4379 $kiriwrite_presmodule->startbox("datalist");
4381 foreach $page (keys %edit_list){
4382 if (!$edit_list{$page}{Name}){
4383 $kiriwrite_presmodule->additalictext("No Name");
4384 $kiriwrite_presmodule->addtext(" (" . $edit_list{$page}{Filename} . ")");
4386 $kiriwrite_presmodule->addtext($edit_list{$page}{Name} . " (" . $edit_list{$page}{Filename} . ")");
4389 $kiriwrite_presmodule->addlinebreak();
4392 $kiriwrite_presmodule->endbox();
4393 $kiriwrite_presmodule->addlinebreak();
4394 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{multieditmessagevalues});
4395 $kiriwrite_presmodule->addlinebreak();
4396 $kiriwrite_presmodule->addlinebreak();
4397 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
4399 $kiriwrite_presmodule->startheader();
4400 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{alter}, { Style => "tablecellheader" });
4401 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
4402 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
4403 $kiriwrite_presmodule->endheader();
4405 $kiriwrite_presmodule->startrow();
4406 $kiriwrite_presmodule->addcell("tablecell1");
4407 $kiriwrite_presmodule->addcheckbox("altersection");
4408 $kiriwrite_presmodule->endcell();
4409 $kiriwrite_presmodule->addcell("tablecell1");
4410 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesection});
4411 $kiriwrite_presmodule->endcell();
4412 $kiriwrite_presmodule->addcell("tablecell1");
4413 $kiriwrite_presmodule->addinputbox("newsection", { Size => 64, MaxLength => 256 });
4414 $kiriwrite_presmodule->endcell();
4415 $kiriwrite_presmodule->endrow();
4417 $kiriwrite_presmodule->startrow();
4418 $kiriwrite_presmodule->addcell("tablecell2");
4419 $kiriwrite_presmodule->addcheckbox("altertemplate");
4420 $kiriwrite_presmodule->endcell();
4421 $kiriwrite_presmodule->addcell("tablecell2");
4422 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagetemplate});
4423 $kiriwrite_presmodule->endcell();
4425 $kiriwrite_presmodule->addcell("tablecell2");
4427 if ($template_warning){
4429 $kiriwrite_presmodule->addhiddendata("newtemplate", "!skip");
4430 $kiriwrite_presmodule->addtext($template_warning);
4434 $kiriwrite_presmodule->addselectbox("newtemplate");
4436 foreach $template (keys %template_list){
4438 $kiriwrite_presmodule->addoption($template_list{$template}{Name} . " (" . $template_list{$template}{Filename} . ")", { Value => $template_list{$template}{Filename}});
4442 $kiriwrite_presmodule->addoption($kiriwrite_lang->{pages}->{usenotemplate}, { Value => "!none", Selected => 1 });
4443 $kiriwrite_presmodule->endselectbox();
4446 $kiriwrite_presmodule->endcell();
4447 $kiriwrite_presmodule->endrow();
4449 $kiriwrite_presmodule->startrow();
4450 $kiriwrite_presmodule->addcell("tablecell1");
4451 $kiriwrite_presmodule->addcheckbox("altersettings");
4452 $kiriwrite_presmodule->endcell();
4453 $kiriwrite_presmodule->addcell("tablecell1");
4454 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{pagesettings});
4455 $kiriwrite_presmodule->endcell();
4456 $kiriwrite_presmodule->addcell("tablecell1");
4457 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usepageandsection}, Value => 1 , Selected => 1});
4458 $kiriwrite_presmodule->addlinebreak();
4459 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usepagename}, Value => 2 });
4460 $kiriwrite_presmodule->addlinebreak();
4461 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{usesectionname}, Value => 3 });
4462 $kiriwrite_presmodule->addlinebreak();
4463 $kiriwrite_presmodule->addradiobox("newsettings", { Description => $kiriwrite_lang->{pages}->{nopagesection}, Value => 0 });
4464 $kiriwrite_presmodule->endcell();
4465 $kiriwrite_presmodule->endrow();
4467 $kiriwrite_presmodule->endtable();
4468 $kiriwrite_presmodule->addlinebreak();
4469 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{editpagesbutton});
4470 $kiriwrite_presmodule->addtext(" | ");
4471 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
4472 $kiriwrite_presmodule->addtext(" | ");
4473 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database, { Text => kiriwrite_language($kiriwrite_lang->{pages}->{returnpagelist}, $database_name) });
4474 $kiriwrite_presmodule->endbox();
4475 $kiriwrite_presmodule->endform();
4477 return $kiriwrite_presmodule->grab();
4481 # The confirm value is something else other than
4482 # 1 or 0, so return an error.
4484 kiriwrite_error("invalidvariable");
4490 sub kiriwrite_page_list{
4491 #################################################################################
4492 # kiriwrite_page_list: Lists pages from an database. #
4496 # kiriwrite_page_list([database]); #
4498 # database Specifies the database to retrieve the pages from. #
4499 #################################################################################
4501 # Get the database file name from what was passed to the subroutine.
4503 my ($database_file) = @_;
4505 # Check if the database_file variable is empty, if it is then print out a
4506 # select box asking the user to select a database from the list.
4508 if (!$database_file) {
4510 # Define the variables required for this section.
4514 my @databasefilenames;
4517 my $dbfilename = "";
4520 my $data_file_length = 0;
4521 my $data_file_friendly = "";
4522 my $database_name = "";
4523 my $file_permissions = "";
4525 # Connect to the database server.
4527 $kiriwrite_dbmodule->connect();
4529 # Check if any errors occured while connecting to the database server.
4531 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4533 # A database connection error has occured so return
4536 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4540 # Open the data directory and get all of the databases.
4542 @database_list = $kiriwrite_dbmodule->getdblist();
4544 # Check if any errors occured while trying to get the list of databases.
4546 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
4548 # The database directory is missing so return an error.
4550 kiriwrite_error("datadirectorymissing");
4552 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
4554 # The database directory has invalid permissions set so return
4557 kiriwrite_error("datadirectoryinvalidpermissions");
4561 # Get the information about each database (the short name and friendly name).
4563 foreach $data_file (@database_list){
4565 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
4567 # Check if any errors occured while selecting the database.
4569 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4571 # The database does not exist, so process the next
4576 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4578 # The database has invalid permissions set, so process
4579 # the next database.
4585 # Get the database information.
4587 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4589 # Check if any errors had occured while getting the database
4592 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4594 # A database error has occured, so process the next
4601 # Set the database name.
4603 $database_name = $database_info{"DatabaseName"};
4605 # Check if the database name is undefined and if it is
4606 # then set it blank.
4608 if (!$database_name){
4609 $database_name = "";
4612 # Append the database to the list of databases available.
4614 push(@databasefilenames, $data_file);
4615 push(@databasenames, $database_name);
4619 # Disconnect from the database server.
4621 $kiriwrite_dbmodule->disconnect();
4623 # Write the page data.
4625 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{viewpages}, { Style => "pageheader" });
4626 $kiriwrite_presmodule->addlinebreak();
4627 $kiriwrite_presmodule->addlinebreak();
4628 $kiriwrite_presmodule->addtext($kiriwrite_lang->{pages}->{nodatabaseselected});
4629 $kiriwrite_presmodule->addlinebreak();
4630 $kiriwrite_presmodule->addlinebreak();
4631 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"});
4632 $kiriwrite_presmodule->startbox();
4633 $kiriwrite_presmodule->addhiddendata("mode", "page");
4634 $kiriwrite_presmodule->addhiddendata("action", "view");
4635 $kiriwrite_presmodule->addselectbox("database");
4636 foreach $dbfilename (@databasefilenames){
4637 $dbname = $databasenames[$dbseek];
4639 $kiriwrite_presmodule->addoption($dbname . " (" . $dbfilename . ")", { Value => $dbfilename });
4641 $kiriwrite_presmodule->endselectbox();
4642 $kiriwrite_presmodule->addtext(" | ");
4643 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{pages}->{viewbutton});
4644 $kiriwrite_presmodule->endbox();
4645 $kiriwrite_presmodule->endform();
4647 return $kiriwrite_presmodule->grab();
4654 my $pagemultioptions = "";
4656 my $tablestyle = "";
4658 my $page_filename = "";
4660 my $page_description = "";
4661 my $page_modified = "";
4663 my $tablestyletype = 0;
4665 my $db_file_notblank = 0;
4667 tie(%database_info, 'Tie::IxHash');
4668 tie(%page_info, 'Tie::IxHash');
4670 # The database_file variable is not blank, so print out a list of pages from
4671 # the selected database.
4673 # Preform a variable check on the database filename to make sure that it is
4674 # valid before using it.
4676 kiriwrite_variablecheck($database_file, "filename", "", 0);
4677 kiriwrite_variablecheck($database_file, "maxlength", 32, 0);
4679 # Connect to the database server.
4681 $kiriwrite_dbmodule->connect();
4683 # Check if any errors occured while connecting to the database server.
4685 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
4687 # A database connection error has occured so return
4690 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
4694 # Select the database.
4696 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_file });
4698 # Check if any errors had occured while selecting the database.
4700 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
4702 # The database does not exist, so return an error.
4704 kiriwrite_error("databasemissingfile");
4706 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
4708 # The database has invalid permissions set, so return
4711 kiriwrite_error("databaseinvalidpermissions");
4715 # Get information about the database.
4717 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
4719 $db_name = $database_info{"DatabaseName"};
4721 # Check if any errors had occured while getting the database
4724 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4726 # A database error has occured so return an error and
4727 # also the extended error information.
4729 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4733 # Get the list of pages.
4735 @database_pages = $kiriwrite_dbmodule->getpagelist();
4737 # Check if any errors had occured while getting the list of pages.
4739 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4741 # A database error has occured so return an error and
4742 # also the extended error information.
4744 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4748 # Check if there are any page names in the database array.
4750 if (@database_pages){
4752 # Write the start of the page.
4754 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagelist}, $db_name), { Style => "pageheader" });
4755 $kiriwrite_presmodule->addlinebreak();
4756 $kiriwrite_presmodule->addlinebreak();
4757 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
4758 $kiriwrite_presmodule->startbox();
4759 $kiriwrite_presmodule->addhiddendata("mode", "page");
4760 $kiriwrite_presmodule->addhiddendata("database", $database_file);
4761 $kiriwrite_presmodule->addhiddendata("type", "multiple");
4763 # Write the list of multiple selection options.
4765 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
4766 $kiriwrite_presmodule->addtext(" | ");
4767 $kiriwrite_presmodule->addbutton("action", { Value => "multidelete", Description => $kiriwrite_lang->{pages}->{deleteselectedbutton} });
4768 $kiriwrite_presmodule->addtext(" | ");
4769 $kiriwrite_presmodule->addbutton("action", { Value => "multimove", Description => $kiriwrite_lang->{pages}->{moveselectedbutton} });
4770 $kiriwrite_presmodule->addtext(" | ");
4771 $kiriwrite_presmodule->addbutton("action", { Value => "multicopy", Description => $kiriwrite_lang->{pages}->{copyselectedbutton} });
4772 $kiriwrite_presmodule->addtext(" | ");
4773 $kiriwrite_presmodule->addbutton("action", { Value => "multiedit", Description => $kiriwrite_lang->{pages}->{editselectedbutton} });
4775 $kiriwrite_presmodule->addlinebreak();
4776 $kiriwrite_presmodule->addlinebreak();
4777 $kiriwrite_presmodule->endbox();
4779 # Write the table header.
4781 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
4782 $kiriwrite_presmodule->startheader();
4783 $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
4784 $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagefilename}, { Style => "tablecellheader" });
4785 $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagename}, { Style => "tablecellheader" });
4786 $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{pagedescription}, { Style => "tablecellheader" });
4787 $kiriwrite_presmodule->addheader($kiriwrite_lang->{pages}->{lastmodified}, { Style => "tablecellheader" });
4788 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
4789 $kiriwrite_presmodule->endheader();
4791 # Process each page filename and get the page information.
4793 foreach $page_filename (@database_pages){
4795 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page_filename, Reduced => 1 });
4797 # Check if any errors have occured.
4799 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
4801 # A database error has occured so return an error and
4802 # also the extended error information.
4804 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
4806 } elsif ($kiriwrite_dbmodule->geterror eq "PageDoesNotExist"){
4808 # The page does not exist, so process the next page.
4816 $page_filename = $page_info{"PageFilename"};
4817 $page_name = $page_info{"PageName"};
4818 $page_description = $page_info{"PageDescription"};
4819 $page_modified = $page_info{"PageLastModified"};
4821 # Set the table cell style.
4823 if ($tablestyletype eq 0){
4825 $tablestyle = "tablecell1";
4826 $tablestyletype = 1;
4830 $tablestyle = "tablecell2";
4831 $tablestyletype = 0;
4835 # Write out the row of data.
4837 $kiriwrite_presmodule->startrow();
4838 $kiriwrite_presmodule->addcell($tablestyle);
4839 $kiriwrite_presmodule->addhiddendata("id[" . $page_count . "]", $page_filename);
4840 $kiriwrite_presmodule->addcheckbox("name[" . $page_count . "]");
4841 $kiriwrite_presmodule->endcell();
4842 $kiriwrite_presmodule->addcell($tablestyle);
4843 $kiriwrite_presmodule->addtext($page_filename);
4844 $kiriwrite_presmodule->endcell();
4845 $kiriwrite_presmodule->addcell($tablestyle);
4849 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
4853 $kiriwrite_presmodule->addtext($page_name);
4857 $kiriwrite_presmodule->endcell();
4858 $kiriwrite_presmodule->addcell($tablestyle);
4860 if (!$page_description){
4862 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
4866 $kiriwrite_presmodule->addtext($page_description);
4870 $kiriwrite_presmodule->endcell();
4871 $kiriwrite_presmodule->addcell($tablestyle);
4873 if (!$page_modified){
4875 $kiriwrite_presmodule->additalictext("No Date");
4879 $kiriwrite_presmodule->addtext($page_modified);
4883 $kiriwrite_presmodule->endcell();
4884 $kiriwrite_presmodule->addcell($tablestyle);
4885 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=edit&database=" . $database_file . "&page=" . $page_filename, { Text => $kiriwrite_lang->{options}->{edit} });
4886 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=delete&database=" . $database_file . "&page=" . $page_filename, { Text => $kiriwrite_lang->{options}->{delete} });
4887 $kiriwrite_presmodule->endcell();
4888 $kiriwrite_presmodule->endrow();
4890 # Increment the counter.
4896 # Disconnect from the database server.
4898 $kiriwrite_dbmodule->disconnect();
4900 $kiriwrite_presmodule->endtable();
4901 $kiriwrite_presmodule->startbox();
4902 $kiriwrite_presmodule->addhiddendata("count", $page_count);
4903 $kiriwrite_presmodule->endbox();
4904 $kiriwrite_presmodule->endform();
4906 if (!@database_pages || !$page_count){
4908 # There were no values in the database pages array and
4909 # the page count had not been incremented so write a
4910 # message saying that there were no pages in the
4913 $kiriwrite_presmodule->clear();
4914 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{pages}->{pagelist}, $db_name), { Style => "pageheader" });
4915 $kiriwrite_presmodule->addlinebreak();
4916 $kiriwrite_presmodule->addlinebreak();
4917 $kiriwrite_presmodule->startbox("errorbox");
4918 $kiriwrite_presmodule->enterdata($kiriwrite_lang->{pages}->{nopagesindatabase});
4919 $kiriwrite_presmodule->endbox();
4923 return $kiriwrite_presmodule->grab();
4929 sub kiriwrite_template_add{
4930 #################################################################################
4931 # kiriwrite_template_add: Add a template to the template folder #
4935 # kiriwrite_template_add(filename, name, description, layout, confirm); #
4937 # filename The filename of the new template. #
4938 # name The name of the template. #
4939 # description The description of the template. #
4940 # layout The layout of the new template. #
4941 # confirm Confirm the action of creating a new template. #
4942 #################################################################################
4944 # Get the variables that were passed to the subroutine.
4946 my ($templatefilename, $templatename, $templatedescription, $templatelayout, $confirm) = @_;
4948 # Check if the confirm value is blank and if it is then set confirm to 0.
4952 # The confirm value is blank, so set the value of confirm to 0.
4960 # Check (validate) each of the values.
4962 kiriwrite_variablecheck($templatename, "utf8", 0, 0);
4963 kiriwrite_variablecheck($templatedescription, "utf8", 0, 0);
4964 kiriwrite_variablecheck($templatelayout, "utf8", 0, 0);
4966 # Convert the values into proper UTF8 strings that can be used.
4968 $templatename = kiriwrite_utf8convert($templatename);
4969 $templatedescription = kiriwrite_utf8convert($templatedescription);
4970 $templatelayout = kiriwrite_utf8convert($templatelayout);
4972 # Check the length of the converted UTF8 strings.
4974 my $templatefilename_length_check = kiriwrite_variablecheck($templatefilename, "maxlength", 64, 1);
4975 my $templatename_length_check = kiriwrite_variablecheck($templatename, "maxlength", 512, 1);
4976 my $templatedescription_length_check = kiriwrite_variablecheck($templatedescription, "maxlength", 512, 1);
4977 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
4979 if ($templatefilename_length_check eq 1){
4981 # The template filename length is too long, so return an error.
4983 kiriwrite_error("templatefilenametoolong");
4987 if ($templatename_length_check eq 1){
4989 # The template name length is too long, so return an error.
4991 kiriwrite_error("templatenametoolong");
4996 if ($templatedescription_length_check eq 1){
4998 # The template description length is too long, so return an error.
5000 kiriwrite_error("templatedescriptiontoolong");
5004 # Check if the filename specified is a valid filename.
5006 kiriwrite_variablecheck($templatefilename, "filename", "", 0);
5008 # Connect to the template server.
5010 $kiriwrite_dbmodule->connect();
5012 # Connect to the template database.
5014 $kiriwrite_dbmodule->connecttemplate(1);
5016 # Check if any errors had occured.
5018 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5020 # The template database has invalid permissions set so
5023 kiriwrite_error("templatedatabaseinvalidpermissions");
5027 $kiriwrite_dbmodule->addtemplate({ TemplateFilename => $templatefilename, TemplateName => $templatename, TemplateDescription => $templatedescription, TemplateLayout => $templatelayout });
5029 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5031 # A database error has occured so return an error along
5032 # with the extended error information.
5034 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5036 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5038 # The template database has invalid permissions set so return
5041 kiriwrite_error("templatedatabaseinvalidpermissions");
5043 } elsif ($kiriwrite_dbmodule->geterror eq "TemplatePageExists"){
5045 # The template page already exists so return an error.
5047 kiriwrite_error("templatefilenameexists");
5049 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseUncreateable"){
5051 # The template databases is uncreatable so return an error.
5053 kiriwrite_error("templatedatabasenotcreated");
5057 $kiriwrite_dbmodule->disconnecttemplate();
5059 # Disconnect from the template server.
5061 $kiriwrite_dbmodule->disconnect();
5063 # Print out the confirmation message.
5065 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{addedtemplate}, { Style => "pageheader" });
5066 $kiriwrite_presmodule->addlinebreak();
5067 $kiriwrite_presmodule->addlinebreak();
5068 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{addedtemplatemessage}, $templatename));
5069 $kiriwrite_presmodule->addlinebreak();
5070 $kiriwrite_presmodule->addlinebreak();
5071 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5072 return $kiriwrite_presmodule->grab();
5075 # No confirmation was made, so print out a form for adding a template.
5077 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{addtemplate}, { Style => "pageheader" });
5078 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5079 $kiriwrite_presmodule->startbox();
5080 $kiriwrite_presmodule->addhiddendata("mode", "template");
5081 $kiriwrite_presmodule->addhiddendata("action", "add");
5082 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5083 $kiriwrite_presmodule->addlinebreak();
5084 $kiriwrite_presmodule->starttable("", { CellSpacing => 0, CellPadding => 5 });
5086 $kiriwrite_presmodule->startheader();
5087 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
5088 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
5089 $kiriwrite_presmodule->endheader();
5091 $kiriwrite_presmodule->startrow();
5092 $kiriwrite_presmodule->addcell("tablecell1");
5093 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatename});
5094 $kiriwrite_presmodule->endcell();
5095 $kiriwrite_presmodule->addcell("tablecell2");
5096 $kiriwrite_presmodule->addinputbox("templatename", { Size => 64, MaxLength => 512 });
5097 $kiriwrite_presmodule->endcell();
5098 $kiriwrite_presmodule->endrow();
5100 $kiriwrite_presmodule->startrow();
5101 $kiriwrite_presmodule->addcell("tablecell1");
5102 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatedescription});
5103 $kiriwrite_presmodule->endcell();
5104 $kiriwrite_presmodule->addcell("tablecell2");
5105 $kiriwrite_presmodule->addinputbox("templatedescription", { Size => 64, MaxLength => 512 });
5106 $kiriwrite_presmodule->endcell();
5107 $kiriwrite_presmodule->endrow();
5109 $kiriwrite_presmodule->startrow();
5110 $kiriwrite_presmodule->addcell("tablecell1");
5111 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatefilename});
5112 $kiriwrite_presmodule->endcell();
5113 $kiriwrite_presmodule->addcell("tablecell2");
5114 $kiriwrite_presmodule->addinputbox("templatefilename", { Size => 32, MaxLength => 64 });
5115 $kiriwrite_presmodule->endcell();
5116 $kiriwrite_presmodule->endrow();
5118 $kiriwrite_presmodule->startrow();
5119 $kiriwrite_presmodule->addcell("tablecell1");
5120 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatelayout});
5121 $kiriwrite_presmodule->endcell();
5122 $kiriwrite_presmodule->addcell("tablecell2");
5123 $kiriwrite_presmodule->addtextbox("templatelayout", { Columns => 50, Rows => 10 });
5124 $kiriwrite_presmodule->addlinebreak();
5125 $kiriwrite_presmodule->addlinebreak();
5126 $kiriwrite_presmodule->startbox("datalist");
5127 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
5128 $kiriwrite_presmodule->addlinebreak();
5129 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagecontent});
5130 $kiriwrite_presmodule->addlinebreak();
5131 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
5132 $kiriwrite_presmodule->addlinebreak();
5133 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
5134 $kiriwrite_presmodule->addlinebreak();
5135 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
5136 $kiriwrite_presmodule->addlinebreak();
5137 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
5138 $kiriwrite_presmodule->addlinebreak();
5139 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
5140 $kiriwrite_presmodule->addlinebreak();
5141 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
5142 $kiriwrite_presmodule->addlinebreak();
5143 $kiriwrite_presmodule->endbox();
5144 $kiriwrite_presmodule->endcell();
5145 $kiriwrite_presmodule->endrow();
5146 $kiriwrite_presmodule->endtable();
5148 $kiriwrite_presmodule->addlinebreak();
5149 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{addtemplatebutton});
5150 $kiriwrite_presmodule->addtext(" | ");
5151 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
5152 $kiriwrite_presmodule->addtext(" | ");
5153 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template" , { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5155 $kiriwrite_presmodule->endbox();
5156 $kiriwrite_presmodule->endform();
5158 return $kiriwrite_presmodule->grab();
5165 sub kiriwrite_template_edit{
5166 #################################################################################
5167 # kiriwrite_template_edit: Edit a template from the template folder. #
5171 # kiriwrite_template_edit(filename, [newfilename], [newname], [newdescription], #
5172 # [templatelayout], [confirm]); #
5174 # filename The current filename of the template to edit. #
5175 # newfilename The new filename of the template to edit. #
5176 # newname The new name of the template being edited. #
5177 # newdescription The new description of the template being edited. #
5178 # templatelayout The modified/altered template layout. #
5179 # confirm Confirms the action to edit a template and its #
5181 #################################################################################
5183 # Get all the variables that have been passed to the subroutine.
5185 my ($templatefilename, $templatenewfilename, $templatenewname, $templatenewdescription, $templatelayout, $confirm) = @_;
5187 # Check if the confirm variable is blank, if it is then
5188 # set confirm to '0'
5192 # confirm is uninitalised/blank, so set the value of confirm
5199 # Check if the template filename is blank and if it is, then return
5202 if (!$templatefilename){
5204 kiriwrite_error("templatefilenameblank");
5208 # Connect to the database server.
5210 $kiriwrite_dbmodule->connect();
5212 # Check if any errors occured while connecting to the database server.
5214 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5216 # A database connection error has occured so return
5219 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5225 # Check certain strings to see if they UTF8 compiliant.
5227 kiriwrite_variablecheck($templatenewname, "utf8", 0, 0);
5228 kiriwrite_variablecheck($templatenewdescription, "utf8", 0, 0);
5229 kiriwrite_variablecheck($templatelayout, "utf8", 0, 0);
5231 # Convert the values into proper UTF8 strings.
5233 $templatenewname = kiriwrite_utf8convert($templatenewname);
5234 $templatenewdescription = kiriwrite_utf8convert($templatenewdescription);
5235 $templatelayout = kiriwrite_utf8convert($templatelayout);
5237 # Check if the filenames recieved are valid filenames.
5239 kiriwrite_variablecheck($templatenewfilename, "maxlength", 64, 0);
5240 kiriwrite_variablecheck($templatenewdescription, "maxlength", 512, 0);
5241 kiriwrite_variablecheck($templatenewname, "maxlength", 512, 0);
5242 kiriwrite_variablecheck($templatefilename, "maxlength", 64, 0);
5243 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
5245 kiriwrite_variablecheck($templatefilename, "filename", "", 0);
5246 kiriwrite_variablecheck($templatenewfilename, "filename", "", 0);
5248 # Connect to the template database.
5250 $kiriwrite_dbmodule->connecttemplate();
5252 # Check if any errors had occured.
5254 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5256 # The template database has invalid permissions set so
5259 kiriwrite_error("templatedatabaseinvalidpermissions");
5263 # Edit the template.
5265 $kiriwrite_dbmodule->edittemplate({ TemplateFilename => $templatefilename, NewTemplateFilename => $templatenewfilename, NewTemplateName => $templatenewname, NewTemplateDescription => $templatenewdescription, NewTemplateLayout => $templatelayout });
5267 # Check if any error occured while editing the template.
5269 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5271 # A database error has occured, so return an error.
5273 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5275 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5277 # The template database has invalid permissions set so return
5280 kiriwrite_error("templatedatabaseinvalidpermissions");
5282 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5284 # The template does not exist, so process the next template.
5286 kiriwrite_error("templatedoesnotexist");
5290 # Disconnect from the database server.
5292 $kiriwrite_dbmodule->disconnect();
5294 # Disconnect from the template database.
5296 $kiriwrite_dbmodule->disconnecttemplate();
5298 # Append a link so that the user can return to the templates list.
5300 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{editedtemplate}, { Style => "pageheader" });
5301 $kiriwrite_presmodule->addlinebreak();
5302 $kiriwrite_presmodule->addlinebreak();
5303 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{editedtemplatemessage}, $templatenewname));
5304 $kiriwrite_presmodule->addlinebreak();
5305 $kiriwrite_presmodule->addlinebreak();
5306 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5310 # Connect to the template database.
5312 $kiriwrite_dbmodule->connecttemplate();
5314 # Check if any errors had occured.
5316 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5318 # The template database has invalid permissions set so
5321 kiriwrite_error("templatedatabaseinvalidpermissions");
5325 # Get the template information.
5327 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $templatefilename });
5329 # Check if any error occured while getting the template information.
5331 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5333 # A database error has occured, so return an error.
5335 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5337 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5339 # The template does not exist, so return an error.
5341 kiriwrite_error("templatedoesnotexist");
5345 # Disconnect from the template database.
5347 $kiriwrite_dbmodule->disconnecttemplate();
5349 # Get the values from the query results.
5351 my $template_filename = $template_info{"TemplateFilename"};
5352 my $template_name = $template_info{"TemplateName"};
5353 my $template_description = $template_info{"TemplateDescription"};
5354 my $template_layout = $template_info{"TemplateLayout"};
5355 my $template_modified = $template_info{"TemplateLastModified"};
5357 # Check if the values are undefined and set them blank
5360 if (!$template_name){
5361 $template_name = "";
5364 if (!$template_description){
5365 $template_description = "";
5368 if (!$template_layout){
5369 $template_layout = "";
5372 # Write out the form for editing an template with the current template
5373 # settings put into the correct place.
5375 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{edittemplate}, { Style => "pageheader" });
5376 $kiriwrite_presmodule->addlinebreak();
5377 $kiriwrite_presmodule->addlinebreak();
5378 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5379 $kiriwrite_presmodule->startbox();
5380 $kiriwrite_presmodule->addhiddendata("mode", "template");
5381 $kiriwrite_presmodule->addhiddendata("action", "edit");
5382 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5383 $kiriwrite_presmodule->addhiddendata("template", $template_filename);
5384 $kiriwrite_presmodule->starttable("", { CellSpacing => 0, CellPadding => 5});
5386 $kiriwrite_presmodule->startheader();
5387 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
5388 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
5389 $kiriwrite_presmodule->endheader();
5391 $kiriwrite_presmodule->startrow();
5392 $kiriwrite_presmodule->addcell("tablecell1");
5393 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatename});
5394 $kiriwrite_presmodule->endcell();
5395 $kiriwrite_presmodule->addcell("tablecell2");
5396 $kiriwrite_presmodule->addinputbox("newname", { Size => 64, MaxLength => 512, Value => $template_name });
5397 $kiriwrite_presmodule->endcell();
5398 $kiriwrite_presmodule->endrow();
5400 $kiriwrite_presmodule->startrow();
5401 $kiriwrite_presmodule->addcell("tablecell1");
5402 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatedescription});
5403 $kiriwrite_presmodule->endcell();
5404 $kiriwrite_presmodule->addcell("tablecell2");
5405 $kiriwrite_presmodule->addinputbox("newdescription", { Size => 64, MaxLength => 512, Value => $template_description });
5406 $kiriwrite_presmodule->endcell();
5407 $kiriwrite_presmodule->endrow();
5409 $kiriwrite_presmodule->startrow();
5410 $kiriwrite_presmodule->addcell("tablecell1");
5411 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatefilename});
5412 $kiriwrite_presmodule->endcell();
5413 $kiriwrite_presmodule->addcell("tablecell2");
5414 $kiriwrite_presmodule->addinputbox("newfilename", { Size => 32, MaxLength => 64, Value => $template_filename });
5415 $kiriwrite_presmodule->endcell();
5416 $kiriwrite_presmodule->endrow();
5418 $kiriwrite_presmodule->startrow();
5419 $kiriwrite_presmodule->addcell("tablecell1");
5420 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{templatelayout});
5421 $kiriwrite_presmodule->endcell();
5422 $kiriwrite_presmodule->addcell("tablecell2");
5423 $kiriwrite_presmodule->addtextbox("newlayout", { Rows => 10, Columns => 50, Value => $template_layout});
5424 $kiriwrite_presmodule->addlinebreak();
5425 $kiriwrite_presmodule->addlinebreak();
5426 $kiriwrite_presmodule->startbox("datalist");
5427 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{common}->{tags});
5428 $kiriwrite_presmodule->addlinebreak();
5429 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagecontent});
5430 $kiriwrite_presmodule->addlinebreak();
5431 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagetitle});
5432 $kiriwrite_presmodule->addlinebreak();
5433 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagename});
5434 $kiriwrite_presmodule->addlinebreak();
5435 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagedescription});
5436 $kiriwrite_presmodule->addlinebreak();
5437 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pagesection});
5438 $kiriwrite_presmodule->addlinebreak();
5439 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautosection});
5440 $kiriwrite_presmodule->addlinebreak();
5441 $kiriwrite_presmodule->addtext($kiriwrite_lang->{common}->{pageautotitle});
5442 $kiriwrite_presmodule->addlinebreak();
5443 $kiriwrite_presmodule->endbox();
5444 $kiriwrite_presmodule->endcell();
5445 $kiriwrite_presmodule->endrow();
5447 $kiriwrite_presmodule->endtable();
5449 $kiriwrite_presmodule->addlinebreak();
5451 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{edittemplatebutton});
5452 $kiriwrite_presmodule->addtext(" | ");
5453 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
5454 $kiriwrite_presmodule->addtext(" | ");
5455 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5457 $kiriwrite_presmodule->endbox();
5458 $kiriwrite_presmodule->endform();
5462 # Disconnect from the database server.
5464 $kiriwrite_dbmodule->disconnect();
5466 return $kiriwrite_presmodule->grab();
5470 sub kiriwrite_template_delete{
5471 #################################################################################
5472 # kiriwrite_template_delete: Delete a template from the template folder. #
5476 # kiriwrite_template_delete(filename, confirm); #
5478 # filename Specifies the filename of the database to delete. #
5479 # confirm Confirms the action to delete a template. #
5480 #################################################################################
5482 # Get the parameters that were passed to the subroutine.
5484 my ($template_filename, $template_confirm) = @_;
5486 if (!$template_confirm){
5487 $template_confirm = 0;
5490 # Check the length of the variables.
5491 kiriwrite_variablecheck($template_filename, "maxlength", 64, 0);
5492 kiriwrite_variablecheck($template_confirm, "maxlength", 1, 0);
5494 # Check if the template_name string is blank and if it is then
5495 # return an error (as the template_name string should not be
5498 if (!$template_filename){
5500 # The template_filename string really is blank,
5501 # so return an error saying that an empty
5502 # filename was passed (to the subroutine).
5504 kiriwrite_error("templatefilenameblank");
5508 # Check if the template_confirm string is blank and if it is, write
5509 # out a form asking the user to confirm the deletion.
5511 if ($template_confirm eq 1){
5513 # The action to delete the template from the template database has
5514 # been confirmed so delete the template.
5516 # Connect to the database server.
5518 $kiriwrite_dbmodule->connect();
5520 # Check if any errors occured while connecting to the database server.
5522 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5524 # A database connection error has occured so return
5527 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5531 # Check if the template database exists and the file permissions
5532 # are valid and return an error if they aren't.
5534 $kiriwrite_dbmodule->connecttemplate();
5536 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5538 # The template database does not exist so write a warning
5541 kiriwrite_error("templatedatabasemissing");
5543 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5545 # The template database has invalid permissions set so
5548 kiriwrite_error("templatedatabaseinvalidpermissions");
5552 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
5554 # Check if any error occured while getting the template information.
5556 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5558 # A database error has occured, so return an error.
5560 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5562 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5564 # The template does not exist, so return an error.
5566 kiriwrite_error("templatedoesnotexist");
5570 # Delete the selected template.
5572 $kiriwrite_dbmodule->deletetemplate({ TemplateFilename => $template_filename });
5574 # Check if any error occured while deleting the template.
5576 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5578 # A database error has occured, so return an error.
5580 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5582 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5584 # The template does not exist, so process the next template.
5586 kiriwrite_error("templatedoesnotexist");
5590 $kiriwrite_dbmodule->disconnecttemplate();
5592 # Get the deleted database name.
5594 my $database_template_name = $template_info{"TemplateName"};
5596 # Disconnect from the database server.
5598 $kiriwrite_dbmodule->disconnect();
5600 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{deletedtemplate}, { Style => "pageheader" });
5601 $kiriwrite_presmodule->addlinebreak();
5602 $kiriwrite_presmodule->addlinebreak();
5603 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{deletedtemplatemessage}, $database_template_name) );
5604 $kiriwrite_presmodule->addlinebreak();
5605 $kiriwrite_presmodule->addlinebreak();
5606 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{returntemplatelist} });
5608 return $kiriwrite_presmodule->grab();
5610 } elsif ($template_confirm eq 0) {
5612 # The template confirm value is 0 (previously blank and then set to 0), so
5613 # write out a form asking the user to confirm the deletion of the template.
5615 # Connect to the database server.
5617 $kiriwrite_dbmodule->connect();
5619 # Check if any errors occured while connecting to the database server.
5621 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5623 # A database connection error has occured so return
5626 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5630 # Connect to the template database.
5632 $kiriwrite_dbmodule->connecttemplate();
5634 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5636 # The template database does not exist so write a warning
5639 kiriwrite_error("templatedatabasemissing");
5641 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5643 # The template database has invalid permissions set so
5646 kiriwrite_error("templatedatabaseinvalidpermissions");
5650 my %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_filename });
5652 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5654 # A database error has occured, so return an error.
5656 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5658 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5660 # The template does not exist, so return an error.
5662 kiriwrite_error("templatedoesnotexist");
5666 my $template_data_filename = $template_info{"TemplateFilename"};
5667 my $template_data_name = $template_info{"TemplateName"};
5669 $kiriwrite_dbmodule->disconnecttemplate();
5671 # Disconnect from the database server.
5673 $kiriwrite_dbmodule->disconnect();
5675 # Write out the confirmation form.
5677 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{deletetemplate}, { Style => "pageheader" });
5678 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
5679 $kiriwrite_presmodule->startbox();
5680 $kiriwrite_presmodule->addhiddendata("mode", "template");
5681 $kiriwrite_presmodule->addhiddendata("template", $template_filename);
5682 $kiriwrite_presmodule->addhiddendata("action", "delete");
5683 $kiriwrite_presmodule->addhiddendata("confirm", 1);
5684 $kiriwrite_presmodule->addlinebreak();
5685 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{template}->{deletetemplatemessage}, $template_data_name, $template_data_filename));
5686 $kiriwrite_presmodule->addlinebreak();
5687 $kiriwrite_presmodule->addlinebreak();
5688 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{template}->{deletetemplatebutton});
5689 $kiriwrite_presmodule->addtext(" | ");
5690 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template", { Text => $kiriwrite_lang->{template}->{deletetemplatereturntolist} });
5691 $kiriwrite_presmodule->endbox();
5692 $kiriwrite_presmodule->endform();
5694 return $kiriwrite_presmodule->grab();
5698 kiriwrite_error("invalidvariable");
5704 sub kiriwrite_template_list{
5705 #################################################################################
5706 # kiriwrite_template_list: List the templates in the template folder. #
5710 # kiriwrite_template_list(); #
5711 #################################################################################
5713 # Define certain values for later.
5720 my $template_filename = "";
5721 my $template_filename_list = "";
5722 my $template_name = "";
5723 my $template_description = "";
5724 my $template_data = "";
5726 my $template_count = 0;
5728 my $template_style = 0;
5729 my $template_stylename = "";
5731 my $templatewarning = "";
5733 # Connect to the database server.
5735 $kiriwrite_dbmodule->connect();
5737 # Check if any errors occured while connecting to the database server.
5739 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
5741 # A database connection error has occured so return
5744 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
5748 # Connect to the template database.
5750 $kiriwrite_dbmodule->connecttemplate();
5752 # Check if any errors had occured.
5754 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
5756 # The template database does not exist so write a warning
5759 $templatewarning = $kiriwrite_lang->{template}->{templatedatabasedoesnotexist};
5761 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
5763 # The template database has invalid permissions set so
5766 kiriwrite_error("templatedatabaseinvalidpermissions");
5768 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5770 # A database error occured while getting the list of
5771 # templates so return an error with the extended
5772 # error information.
5774 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5778 # Get the list of template databases.
5780 if (!$templatewarning){
5782 @templates_list = $kiriwrite_dbmodule->gettemplatelist();
5786 # Check if any errors had occured.
5788 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5790 # A database error occured while getting the list
5791 # of templates so return an error with the
5792 # extended error information.
5794 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5798 # Check if any templates are in the database and if there isn't
5799 # then write a message saying that there are no templates in the
5802 if (!@templates_list && !$templatewarning){
5803 $templatewarning = $kiriwrite_lang->{template}->{notemplatesavailable};
5806 # Process the templates into a template list.
5808 $kiriwrite_presmodule->addtext($kiriwrite_lang->{template}->{viewtemplates}, { Style => "pageheader" });
5809 $kiriwrite_presmodule->addlinebreak();
5810 $kiriwrite_presmodule->addlinebreak();
5812 if ($templatewarning){
5814 $kiriwrite_presmodule->startbox("errorbox");
5815 $kiriwrite_presmodule->addtext($templatewarning);
5816 $kiriwrite_presmodule->endbox();
5820 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
5821 $kiriwrite_presmodule->startheader();
5822 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatefilename}, { Style => "tablecellheader" });
5823 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatename}, { Style => "tablecellheader" });
5824 $kiriwrite_presmodule->addheader($kiriwrite_lang->{template}->{templatedescription}, { Style => "tablecellheader" });
5825 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
5826 $kiriwrite_presmodule->endheader();
5828 foreach $template (@templates_list){
5830 # Get the template data.
5832 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
5834 # Check if any errors occured while trying to get the template
5837 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
5839 # A database error has occured, so return an error.
5841 kiriwrite_error("templatedatabaseerror", $kiriwrite_dbmodule->geterror(1));
5843 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
5845 # The template does not exist, so process the next template.
5851 $template_filename = $template_info{"TemplateFileName"};
5852 $template_name = $template_info{"TemplateName"};
5853 $template_description = $template_info{"TemplateDescription"};
5855 # Check what style the row of table cells should be.
5857 if ($template_style eq 0){
5859 $template_stylename = "tablecell1";
5860 $template_style = 1;
5864 $template_stylename = "tablecell2";
5865 $template_style = 0;
5869 $kiriwrite_presmodule->startrow();
5870 $kiriwrite_presmodule->addcell($template_stylename);
5871 $kiriwrite_presmodule->addtext($template_info{"TemplateFilename"});
5873 # Check if the blank template value was set.
5875 if (!$template_info{"TemplateLayout"}){
5876 $kiriwrite_presmodule->additalictext(" " . "[Blank Template]");
5879 $kiriwrite_presmodule->endcell();
5880 $kiriwrite_presmodule->addcell($template_stylename);
5882 # Check if the template name is blank and if it is
5883 # write a message to say there's no name for the
5886 if (!$template_info{"TemplateName"}){
5887 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
5889 $kiriwrite_presmodule->addtext($template_info{"TemplateName"});
5892 $kiriwrite_presmodule->endcell();
5893 $kiriwrite_presmodule->addcell($template_stylename);
5895 # Check if the template description is blank and if
5896 # it is then write a message to say there's no
5897 # description for the template.
5899 if (!$template_info{"TemplateDescription"}){
5900 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
5902 $kiriwrite_presmodule->addtext($template_info{"TemplateDescription"});
5905 $kiriwrite_presmodule->endcell();
5906 $kiriwrite_presmodule->addcell($template_stylename);
5907 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template&action=edit&template=" . $template_info{"TemplateFilename"}, { Text => $kiriwrite_lang->{options}->{edit} });
5908 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=template&action=delete&template=" . $template_info{"TemplateFilename"}, { Text => $kiriwrite_lang->{options}->{delete} });
5909 $kiriwrite_presmodule->endcell();
5910 $kiriwrite_presmodule->endrow();
5914 $kiriwrite_presmodule->endtable();
5918 # Disconnect from the database server.
5920 $kiriwrite_dbmodule->disconnect();
5922 $kiriwrite_dbmodule->disconnecttemplate();
5923 return $kiriwrite_presmodule->grab();
5928 sub kiriwrite_database_add{
5929 #################################################################################
5930 # kiriwrite_database_add: Creates a new database. #
5934 # kiriwrite_database_add(filename, name, description, notes, categories, #
5937 # filename Specifies the filename for the database. #
5938 # name Specifies a (friendly) name for the database. #
5939 # description Specifies a description for the database. #
5940 # notes Specifies the notes for the database. #
5941 # categories Specifies the categories for the database. #
5942 # confirm Confirms the action to create a database. #
5943 #################################################################################
5945 # Get the variables passed from the subroutine.
5947 my ($database_filename, $database_name, $database_description, $database_notes, $database_categories, $database_confirm) = @_;
5949 # Check if the confirm value is blank and if it is then
5950 # set the confirm value to 0.
5952 if (!$database_confirm){
5954 # The confirm value was blank so set the value to 0.
5956 $database_confirm = 0;
5960 if ($database_confirm eq 1){
5962 # The action to create a new database is confirmed.
5964 # Validate the database name and database descriptions.
5966 my $database_name_check_utf8 = kiriwrite_variablecheck($database_name, "utf8", 0, 0);
5967 my $database_description_check_utf8 = kiriwrite_variablecheck($database_description, "utf8", 0, 0);
5968 my $database_notes_check_utf8 = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
5969 my $database_categories_check_utf8 = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
5971 # Convert the UTF8 strings before checking the length of the strings.
5973 $database_name = kiriwrite_utf8convert($database_name);
5974 $database_description = kiriwrite_utf8convert($database_description);
5975 $database_notes = kiriwrite_utf8convert($database_notes);
5976 $database_categories = kiriwrite_utf8convert($database_categories);
5978 my $database_name_check_blank = kiriwrite_variablecheck($database_name, "blank", 0, 1);
5979 my $database_name_check_length = kiriwrite_variablecheck($database_name, "maxlength", 256, 1);
5980 my $database_description_check_length = kiriwrite_variablecheck($database_description, "maxlength", 512, 1);
5981 my $database_filename_check_length = kiriwrite_variablecheck($database_filename, "maxlength", 32, 1);
5982 my $database_categories_check_length = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
5984 # Check if values returned contains any values that would
5985 # result in a specific error message being returned.
5987 if ($database_name_check_length eq 1){
5989 # The length of the database name is too long, so return an error.
5990 kiriwrite_error("databasenametoolong");
5994 if ($database_description_check_length eq 1){
5996 # The database description length is too long, so return an error.
5997 kiriwrite_error("databasedescriptiontoolong");
6001 if ($database_name_check_blank eq 1){
6003 # The database name is blank, so return an error.
6004 kiriwrite_error("databasenameblank");
6008 if ($database_filename_check_length eq 1){
6010 # The database filename is to long, so return an error.
6011 kiriwrite_error("databasefilenametoolong");
6015 if ($database_categories_check_length eq 1){
6017 # The database categories is too long, so return an error.
6018 kiriwrite_error("databasecategoriestoolong");
6022 # Check if the database filename is blank and if it is then
6023 # generate a filename.
6025 if ($database_filename eq ""){
6027 # Filename is blank so generate a file name from
6028 # the database name.
6030 $database_filename = kiriwrite_processfilename($database_name);
6034 # Filename is not blank so don't generate a filename.
6038 kiriwrite_variablecheck($database_filename, "filename", "", 0);
6039 kiriwrite_variablecheck($database_filename, "maxlength", 32, 0);
6041 # Connect to the database server.
6043 $kiriwrite_dbmodule->connect();
6045 # Check if any errors occured while connecting to the database server.
6047 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6049 # A database connection error has occured so return
6052 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6056 my $database_name_final = $database_name;
6058 # Create the database.
6060 $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"} });
6062 # Check if any errors have occured.
6064 if ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
6066 # A database with the filename given already exists, so
6069 kiriwrite_error("fileexists");
6071 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6073 # A database error has occured so return an error with
6074 # the extended error information.
6076 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6080 # Disconnect from the database server.
6082 $kiriwrite_dbmodule->disconnect();
6084 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
6085 $kiriwrite_presmodule->addlinebreak();
6086 $kiriwrite_presmodule->addlinebreak();
6087 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseadded} , $database_name_final));
6088 $kiriwrite_presmodule->addlinebreak();
6089 $kiriwrite_presmodule->addlinebreak();
6090 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6092 return $kiriwrite_presmodule->grab();
6096 # There is confirm value is not 1, so write a form for creating a database to
6099 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
6100 $kiriwrite_presmodule->addlinebreak();
6101 $kiriwrite_presmodule->addlinebreak();
6102 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6103 $kiriwrite_presmodule->startbox();
6104 $kiriwrite_presmodule->addhiddendata("mode", "db");
6105 $kiriwrite_presmodule->addhiddendata("action", "new");
6106 $kiriwrite_presmodule->addhiddendata("confirm", "1");
6107 $kiriwrite_presmodule->endbox();
6108 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
6110 $kiriwrite_presmodule->startheader();
6111 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader"});
6112 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader"});
6113 $kiriwrite_presmodule->endheader();
6115 $kiriwrite_presmodule->startrow();
6116 $kiriwrite_presmodule->addcell("tablecell1");
6117 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
6118 $kiriwrite_presmodule->endcell();
6119 $kiriwrite_presmodule->addcell("tablecell2");
6120 $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256 });
6121 $kiriwrite_presmodule->endcell();
6122 $kiriwrite_presmodule->endrow();
6124 $kiriwrite_presmodule->startrow();
6125 $kiriwrite_presmodule->addcell("tablecell1");
6126 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
6127 $kiriwrite_presmodule->endcell();
6128 $kiriwrite_presmodule->addcell("tablecell2");
6129 $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512 });
6130 $kiriwrite_presmodule->endcell();
6131 $kiriwrite_presmodule->endrow();
6133 $kiriwrite_presmodule->startrow();
6134 $kiriwrite_presmodule->addcell("tablecell1");
6135 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
6136 $kiriwrite_presmodule->endcell();
6137 $kiriwrite_presmodule->addcell("tablecell2");
6138 $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512 });
6139 $kiriwrite_presmodule->endcell();
6140 $kiriwrite_presmodule->endrow();
6142 $kiriwrite_presmodule->startrow();
6143 $kiriwrite_presmodule->addcell("tablecell1");
6144 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
6145 $kiriwrite_presmodule->endcell();
6146 $kiriwrite_presmodule->addcell("tablecell2");
6147 $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => 50, Rows => 10, WordWrap => 0 });
6148 $kiriwrite_presmodule->endcell();
6149 $kiriwrite_presmodule->endrow();
6151 $kiriwrite_presmodule->startrow();
6152 $kiriwrite_presmodule->addcell("tablecell1");
6153 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
6154 $kiriwrite_presmodule->endcell();
6155 $kiriwrite_presmodule->addcell("tablecell2");
6156 $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32 });
6157 $kiriwrite_presmodule->startlist();
6158 $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabaseautogenerate});
6159 $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasenoextensions});
6160 $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacterlength});
6161 $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacters});
6162 $kiriwrite_presmodule->endlist();
6163 $kiriwrite_presmodule->endcell();
6164 $kiriwrite_presmodule->endrow();
6166 $kiriwrite_presmodule->endtable();
6167 $kiriwrite_presmodule->startbox();
6168 $kiriwrite_presmodule->addlinebreak();
6169 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{adddatabasebutton});
6170 $kiriwrite_presmodule->addtext("|");
6171 $kiriwrite_presmodule->addreset($kiriwrite_lang->{database}->{clearvaluesbutton});
6172 $kiriwrite_presmodule->addtext("| ");
6173 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6174 $kiriwrite_presmodule->endbox();
6175 $kiriwrite_presmodule->endform();
6177 # Exit the subroutine taking the data in the pagadata variable with it.
6179 return $kiriwrite_presmodule->grab();
6183 sub kiriwrite_database_edit{
6184 #################################################################################
6185 # kiriwrite_database_edit: Edits an database. #
6189 # kiriwrite_database_edit(filename, newfilename, newname, newdescription, #
6190 # notes, categories, [confirm]); #
6192 # filename Specifies the filename of the database. #
6193 # newfilename Specifies the new filename of the database. #
6194 # newname Specifies the new name of the database. #
6195 # newdescription Specifies the new description of the database. #
6196 # notes Specifies the new notes of the database. #
6197 # categories Specifies the new categories of the database. #
6198 # confirm Confirms the action to edit a database. #
6199 #################################################################################
6201 # First, get all the variables passed to the subroutine.
6203 my ($database_shortname, $database_newfilename, $database_newname, $database_newdescription, $database_notes, $database_categories, $database_confirm) = @_;
6205 # Check if the database confirm value is blank and if it is
6206 # set the confirm value to 0.
6208 if (!$database_confirm){
6210 $database_confirm = 0;
6214 # Check if the database filename given is valid and return an error
6217 kiriwrite_variablecheck($database_shortname, "filename", "", 0);
6219 # 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
6220 # if $database_confirm was used directly).
6222 if ($database_confirm eq 1){
6224 # Check if the new data passes the validation tests below. First, check the length of the variables.
6226 my $database_name_check_utf8 = kiriwrite_variablecheck($database_newname, "utf8", 0, 0);
6227 my $database_description_check_utf8 = kiriwrite_variablecheck($database_newdescription, "utf8", 0, 0);
6228 my $database_notes_check_utf8 = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
6229 my $database_categories_check_utf8 = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
6231 # Convert the UTF8 strings to make sure their length is accurate.
6233 $database_newname = kiriwrite_utf8convert($database_newname);
6234 $database_newdescription = kiriwrite_utf8convert($database_newdescription);
6235 $database_notes = kiriwrite_utf8convert($database_notes);
6236 $database_categories = kiriwrite_utf8convert($database_categories);
6238 # Preform the following tests.
6240 my $database_filename_check_length = kiriwrite_variablecheck($database_newfilename, "maxlength", 32, 1);
6241 my $database_filename_letnum = kiriwrite_variablecheck($database_newfilename, "filename", 0, 0);
6242 my $database_name_check_length = kiriwrite_variablecheck($database_newname, "maxlength", 256, 1);
6243 my $database_description_check_length = kiriwrite_variablecheck($database_newdescription, "maxlength", 512, 1);
6244 my $database_categories_check_length = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
6245 my $database_name_check_blank = kiriwrite_variablecheck($database_newname, "blank", 0, 1);
6247 # Check if the data is valid and return a specific error if it doesn't.
6249 if ($database_name_check_length eq 1){
6251 # The length of the database name is too long, so return an error.
6252 kiriwrite_error("databasenametoolong");
6256 if ($database_description_check_length eq 1){
6258 # The database description length is too long, so return an error.
6259 kiriwrite_error("databasedescriptiontoolong");
6263 if ($database_name_check_blank eq 1){
6265 # The database name is blank, so return an error.
6266 kiriwrite_error("databasenameblank");
6270 if ($database_filename_check_length eq 1){
6272 # The database filename is too long, so return an error.
6273 kiriwrite_error("databasefilenametoolong");
6277 if ($database_categories_check_length eq 1){
6279 # The database categories is too long, so return an error.
6280 kiriwrite_error("databasecategoriestoolong");
6284 # Connect to the database server.
6286 $kiriwrite_dbmodule->connect();
6288 # Check if any errors occured while connecting to the database server.
6290 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6292 # A database connection error has occured so return
6295 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6301 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
6303 # Check if any errors had occured while selecting the database.
6305 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6307 # The database does not exist, so return an error.
6309 kiriwrite_error("databasemissingfile");
6311 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6313 # The database has invalid permissions set, so return
6316 kiriwrite_error("databaseinvalidpermissions");
6322 $kiriwrite_dbmodule->editdatabase({ DatabaseNewFilename => $database_newfilename, DatabaseName => $database_newname , DatabaseDescription => $database_newdescription , DatabaseNotes => $database_notes, DatabaseCategories => $database_categories });
6324 # Check if any errors had occured while using the database.
6326 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6328 # The database does not exist, so return an error.
6330 kiriwrite_error("databasemissingfile");
6332 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6334 # The database has invalid permissions set, so return
6337 kiriwrite_error("databaseinvalidpermissions");
6339 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
6341 # The database directory has invalid permissions set, so
6344 kiriwrite_error("datadirectoryinvalidpermissions");
6346 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
6348 # A database already exists with the new filename, so
6351 kiriwrite_error("databasealreadyexists");
6353 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6355 # A database error has occured so return an error with
6356 # the extended error information.
6358 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6362 # Disconnect from the server.
6364 $kiriwrite_dbmodule->disconnect();
6366 # Write out a message saying that the database has been updated.
6368 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{editeddatabase}, { Style => "pageheader" } );
6369 $kiriwrite_presmodule->addlinebreak();
6370 $kiriwrite_presmodule->addlinebreak();
6371 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseupdated}, $database_newname));
6372 $kiriwrite_presmodule->addlinebreak();
6373 $kiriwrite_presmodule->addlinebreak();
6374 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6376 return $kiriwrite_presmodule->grab();
6380 my (%database_info);
6382 # Check if the database filename given is valid and return an error
6385 # Connect to the database server.
6387 $kiriwrite_dbmodule->connect();
6389 # Check if any errors occured while connecting to the database server.
6391 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6393 # A database connection error has occured so return
6396 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6400 # Select the database.
6402 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
6404 # Check if any errors had occured while setting the database.
6406 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6408 # The database does not exist, so return an error.
6410 kiriwrite_error("databasemissingfile");
6412 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
6414 # The database has invalid permissions set, so return
6417 kiriwrite_error("databaseinvalidpermissions");
6421 # Get the database information.
6423 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6425 # Check if any errors had occured while getting the database
6428 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6430 # A database error has occured so return an error and
6431 # also the extended error information.
6433 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6437 # Get the values needed from the kiriwrite_database_info table.
6439 my $database_oldname = $database_info{"DatabaseName"};
6440 my $database_olddescription = $database_info{"Description"};
6441 my $database_notes = $database_info{"Notes"};
6442 my $database_categories = $database_info{"Categories"};
6444 # Disconnect from the database server.
6446 $kiriwrite_dbmodule->disconnect();
6448 # Print out the form for editing a database's settings.
6450 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{editdatabase}, $database_oldname), { Style => "pageheader" });
6451 $kiriwrite_presmodule->addlinebreak();
6452 $kiriwrite_presmodule->addlinebreak();
6453 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6454 $kiriwrite_presmodule->startbox();
6455 $kiriwrite_presmodule->addhiddendata("mode", "db");
6456 $kiriwrite_presmodule->addhiddendata("action", "edit");
6457 $kiriwrite_presmodule->addhiddendata("database", $database_shortname);
6458 $kiriwrite_presmodule->addhiddendata("confirm", "1");
6459 $kiriwrite_presmodule->endbox();
6461 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
6462 $kiriwrite_presmodule->startheader();
6463 $kiriwrite_presmodule->addheader("Setting", { Style => "tablecellheader" });
6464 $kiriwrite_presmodule->addheader("Value", { Style => "tablecellheader" });
6465 $kiriwrite_presmodule->endheader();
6467 $kiriwrite_presmodule->startrow();
6468 $kiriwrite_presmodule->addcell("tablecell1");
6469 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
6470 $kiriwrite_presmodule->endcell();
6471 $kiriwrite_presmodule->addcell("tablecell2");
6472 $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256, Value => $database_oldname } );
6473 $kiriwrite_presmodule->endcell();
6474 $kiriwrite_presmodule->endrow();
6476 $kiriwrite_presmodule->startrow();
6477 $kiriwrite_presmodule->addcell("tablecell1");
6478 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
6479 $kiriwrite_presmodule->endcell();
6480 $kiriwrite_presmodule->addcell("tablecell2");
6481 $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512, Value => $database_olddescription } );
6482 $kiriwrite_presmodule->endcell();
6483 $kiriwrite_presmodule->endrow();
6485 $kiriwrite_presmodule->startrow();
6486 $kiriwrite_presmodule->addcell("tablecell1");
6487 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
6488 $kiriwrite_presmodule->endcell();
6489 $kiriwrite_presmodule->addcell("tablecell2");
6490 $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512, Value => $database_categories } );
6491 $kiriwrite_presmodule->endcell();
6492 $kiriwrite_presmodule->endrow();
6494 $kiriwrite_presmodule->startrow();
6495 $kiriwrite_presmodule->addcell("tablecell1");
6496 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
6497 $kiriwrite_presmodule->endcell();
6498 $kiriwrite_presmodule->addcell("tablecell2");
6499 $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => 50, Rows => 10, Value => $database_notes } );
6500 $kiriwrite_presmodule->endcell();
6501 $kiriwrite_presmodule->endrow();
6503 $kiriwrite_presmodule->startrow();
6504 $kiriwrite_presmodule->addcell("tablecell1");
6505 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
6506 $kiriwrite_presmodule->endcell();
6507 $kiriwrite_presmodule->addcell("tablecell2");
6508 $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32, Value => $database_shortname } );
6509 $kiriwrite_presmodule->endcell();
6510 $kiriwrite_presmodule->endrow();
6512 $kiriwrite_presmodule->endtable();
6514 $kiriwrite_presmodule->startbox();
6515 $kiriwrite_presmodule->addlinebreak();
6516 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{editdatabasebutton});
6517 $kiriwrite_presmodule->addtext(" | ");
6518 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
6519 $kiriwrite_presmodule->addtext(" | ");
6520 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6521 $kiriwrite_presmodule->endbox();
6522 $kiriwrite_presmodule->endform();
6524 return $kiriwrite_presmodule->grab();
6528 # The interpreter should not be here. So return an error saying invalid variable.
6530 kiriwrite_error("invalidvariable");
6534 sub kiriwrite_database_delete{
6535 #################################################################################
6536 # kiriwrite_database_delete: Deletes an database. #
6540 # kiriwrite_database_delete(filename, [confirm]); #
6542 # filename Specifies the filename for the database to be deleted. #
6543 # confirm Confirms the action to delete a database. #
6544 #################################################################################
6546 my ($database_filename, $database_confirm) = @_;
6548 # Check if the confirm value is blank and if it is then set the
6549 # confirm value to 0.
6551 if (!$database_confirm){
6553 $database_confirm = 0;
6557 # Connect to the database server.
6559 $kiriwrite_dbmodule->connect();
6561 # Check if any errors occured while connecting to the database server.
6563 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6565 # A database connection error has occured so return
6568 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6572 # Check if the database filename given is valid and return an error
6575 kiriwrite_variablecheck($database_filename, "filename", "", 0);
6577 # Check if the request to delete a database has been confirmed. If it has,
6578 # then delete the database itself.
6580 if ($database_confirm eq 1){
6581 # There is a value in the confirm variable of the HTTP query.
6583 # Select the database to delete and get the database name.
6585 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
6587 # Check if any error occured while selecting the database.
6589 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6591 # The database does not exist so return an error.
6593 kiriwrite_error("databasemissingfile");
6595 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6597 # The database has invalid permissions set so return
6600 kiriwrite_error("databaseinvalidpermissions");
6604 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6606 # Check if any errors have occured while getting the database
6609 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6611 # A database error has occured so return an error with
6612 # the extended error information.
6614 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6618 my $database_name = $database_info{"DatabaseName"};
6620 # Delete the selected database.
6622 $kiriwrite_dbmodule->deletedatabase({ DatabaseName => $database_filename });
6624 # Check if any error occured while deleting the database.
6626 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6628 # The database does not exist so return an error.
6630 kiriwrite_error("databasemissingfile");
6632 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6634 # The database has invalid permissions set so return
6637 kiriwrite_error("databaseinvalidpermissions");
6641 # Disconnect from the database server.
6643 $kiriwrite_dbmodule->disconnect();
6645 # Write a message saying that the database has been deleted.
6647 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deleteddatabase}, { Style => "pageheader" });
6648 $kiriwrite_presmodule->addlinebreak();
6649 $kiriwrite_presmodule->addlinebreak();
6650 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deleteddatabasemessage}, $database_name));
6651 $kiriwrite_presmodule->addlinebreak();
6652 $kiriwrite_presmodule->addlinebreak();
6653 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
6655 return $kiriwrite_presmodule->grab();
6659 # The action has not been confirmed, so write out a form asking the
6662 # Get the database name.
6664 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
6666 # Check if any error occured while selecting the database.
6668 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6670 # The database does not exist so return an error.
6672 kiriwrite_error("databasemissingfile");
6674 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6676 # The database has invalid permissions set so return
6679 kiriwrite_error("databaseinvalidpermissions");
6684 # Check if any errors have occured.
6686 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6688 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6690 # A database error has occured so return an error with
6691 # the extended error information.
6693 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
6697 my $database_name = $database_info{"DatabaseName"};
6699 # Disconnect from the database server.
6701 $kiriwrite_dbmodule->disconnect();
6703 # Write out the form to ask the user to confirm the deletion of the
6704 # selected database.
6706 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deletedatabase}, { Style => "pageheader" });
6707 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
6708 $kiriwrite_presmodule->startbox();
6709 $kiriwrite_presmodule->addhiddendata("mode", "db");
6710 $kiriwrite_presmodule->addhiddendata("action", "delete");
6711 $kiriwrite_presmodule->addhiddendata("database", $database_filename);
6712 $kiriwrite_presmodule->addhiddendata("confirm", "1");
6713 $kiriwrite_presmodule->addlinebreak();
6714 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deletedatabasemessage}, $database_name));
6715 $kiriwrite_presmodule->addlinebreak();
6716 $kiriwrite_presmodule->addlinebreak();
6717 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{deletedatabasebutton});
6718 $kiriwrite_presmodule->addtext(" | ");
6719 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{deletedatabasereturn} });
6720 $kiriwrite_presmodule->endbox();
6721 $kiriwrite_presmodule->endform();
6723 return $kiriwrite_presmodule->grab();
6727 sub kiriwrite_database_list{
6728 #################################################################################
6729 # kiriwrite_database_list: Lists the databases available. #
6733 # kiriwrite_database_list(); #
6734 #################################################################################
6736 # Connect to the database server.
6738 $kiriwrite_dbmodule->connect();
6740 # Check if any errors occured while connecting to the database server.
6742 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6744 # A database connection error has occured so return
6747 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6751 # Get the list of available databases and process any errors that
6752 # might have occured.
6754 my @database_list = $kiriwrite_dbmodule->getdblist();
6756 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
6758 # The database directory is missing so return an error.
6760 kiriwrite_error("datadirectorymissing");
6762 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
6764 # The database directory has invalid permissions set so return
6767 kiriwrite_error("datadirectoryinvalidpermissions");
6771 # Declare the following variables that are going to be used before using
6772 # the foreach function.
6774 my ($database_info, %database_info);
6776 my @permissions_list;
6777 my $database_count = 0;
6778 my $database_filename = "";
6779 my $database_filename_friendly = "";
6780 my $database_filename_length = 0;
6781 my $database_name = "";
6782 my $database_description = "";
6783 my $database_permissions = "";
6784 my $nodescription = 0;
6787 my $table_style = 0;
6788 my $table_style_name = "";
6790 # Begin creating the table for the list of databases.
6792 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
6793 $kiriwrite_presmodule->addlinebreak();
6794 $kiriwrite_presmodule->addlinebreak();
6795 $kiriwrite_presmodule->starttable("", { CellPadding => "5", CellSpacing => "0" });
6796 $kiriwrite_presmodule->startheader();
6797 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
6798 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
6799 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databaseoptions}, { Style => "tablecellheader" });
6800 $kiriwrite_presmodule->endheader();
6802 foreach $data_file (@database_list){
6804 # Select the database.
6806 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
6808 # Check if any error occured while selecting the database.
6810 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
6812 # The database does not exist, so process the next
6817 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
6819 # The database has invalid permissions settings, so
6820 # add the database to the list of databases with
6821 # invalid permissions set and process the next
6824 push(@permissions_list, $data_file);
6829 # Get information about the database.
6831 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
6833 # Check if any error occured while getting information from the
6836 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
6838 # A database error has occured, add the database and specific
6839 # error message to the list of databases with errors and
6840 # process the next database.
6842 push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
6847 $database_name = $database_info{"DatabaseName"};
6848 $database_description = $database_info{"Description"};
6850 # Check the style to be used with.
6852 if ($table_style eq 0){
6854 # Use the first style and set the style value
6855 # to use the next style, the next time the
6856 # if statement is checked.
6858 $table_style_name = "tablecell1";
6862 # Use the second style and set the style
6863 # value to use the first style, the next
6864 # time if statement is checked.
6866 $table_style_name = "tablecell2";
6870 # Create a friendly name for the database.
6872 $database_filename_friendly = $data_file;
6874 # Append the database information to the table.
6876 $kiriwrite_presmodule->startrow();
6877 $kiriwrite_presmodule->addcell($table_style_name);
6879 if (!$database_name){
6880 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
6882 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_filename_friendly, { Text => $database_name });
6885 $kiriwrite_presmodule->endcell();
6886 $kiriwrite_presmodule->addcell($table_style_name);
6888 if (!$database_description){
6889 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
6891 $kiriwrite_presmodule->addtext($database_description);
6894 $kiriwrite_presmodule->endcell();
6895 $kiriwrite_presmodule->addcell($table_style_name);
6896 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=edit&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{edit} });
6897 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=compile&type=single&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{compile} });
6898 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=delete&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{delete} });
6899 $kiriwrite_presmodule->endrow();
6907 $kiriwrite_presmodule->endtable();
6909 # Disconnect from the database server.
6911 $kiriwrite_dbmodule->disconnect();
6913 # Check if there are no valid databases are if there is no
6914 # valid databases then write a message saying that no
6915 # valid databases are available.
6917 if ($database_count eq 0){
6919 $kiriwrite_presmodule->clear();
6920 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
6921 $kiriwrite_presmodule->addlinebreak();
6922 $kiriwrite_presmodule->addlinebreak();
6923 $kiriwrite_presmodule->startbox("errorbox");
6924 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{nodatabasesavailable});
6925 $kiriwrite_presmodule->endbox();
6929 # Check if any databases with problems have appeared and if they
6930 # have, print out a message saying which databases have problems.
6932 if (@permissions_list){
6934 $kiriwrite_presmodule->addlinebreak();
6935 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
6936 $kiriwrite_presmodule->addlinebreak();
6937 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
6938 $kiriwrite_presmodule->addlinebreak();
6940 foreach $data_file (@permissions_list){
6941 $kiriwrite_presmodule->addlinebreak();
6942 $kiriwrite_presmodule->addtext($data_file);
6945 $kiriwrite_presmodule->addlinebreak();
6951 $kiriwrite_presmodule->addlinebreak();
6952 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
6953 $kiriwrite_presmodule->addlinebreak();
6954 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
6955 $kiriwrite_presmodule->addlinebreak();
6957 foreach $data_file (@error_list){
6958 $kiriwrite_presmodule->addlinebreak();
6959 $kiriwrite_presmodule->addtext($data_file);
6962 $kiriwrite_presmodule->addlinebreak();
6966 return $kiriwrite_presmodule->grab(); # Return to the main part of the script with the processed information.
6971 sub kiriwrite_filter_list{
6972 #################################################################################
6973 # kiriwrite_filter_list: Lists the filters that will be used when compiling a #
6978 # kiriwrite_filter_list(); #
6979 #################################################################################
6981 my $filtersdb_notexist = 0;
6983 # Connect to the database server.
6985 $kiriwrite_dbmodule->connect();
6987 # Check if any errors occured while connecting to the database server.
6989 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
6991 # A database connection error has occured so return
6994 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
6998 # Connect to the filter database.
7000 $kiriwrite_dbmodule->connectfilter();
7002 # Check if any error has occured while connecting to the filter
7005 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7007 # The filter database does not exist.
7009 $filtersdb_notexist = 1;
7011 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7013 # The filter database has invalid permissions set so return
7016 kiriwrite_error("filtersdbpermissions");
7018 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7020 # A database error has occured with the filter database.
7022 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7026 # Define some variables required for processing the filters list.
7030 my @database_filters;
7031 my $blankfindfilter = 0;
7032 my $filterswarning = "";
7034 my $filter_count = 0;
7035 my $filter_style = 0;
7036 my $filter_style_name = "";
7038 tie(%filter_list, 'Tie::IxHash');
7040 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{viewfilters}, { Style => "pageheader" });
7041 $kiriwrite_presmodule->addlinebreak();
7042 $kiriwrite_presmodule->addlinebreak();
7044 # If the filter database exists then get the list of filters,
7045 # otherwise write a message saying that the filter database
7046 # does not exist and will be created when a filter is added.
7048 if ($filtersdb_notexist eq 0){
7050 # Get the list of available filters.
7052 @database_filters = $kiriwrite_dbmodule->getfilterlist();
7054 # Check if any errors occured while getting the list of filters.
7056 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7058 # A database error has occured with the filter database.
7060 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7064 # Process each filter getting the priority, find setting and
7067 foreach $filter (@database_filters){
7069 # Get the information about the filter.
7071 %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
7073 # Check if any errors occured while getting the filter information.
7075 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7077 # A database error occured while using the filter database.
7079 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7081 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7083 # The filter does not exist so process the next filter.
7089 # Check if the find filter is blank.
7091 if (!$filter_info{"FilterFind"}){
7093 # The find filter is blank, so set the value to write a warning
7094 # message saying that a find filter given is blank.
7096 $blankfindfilter = 1;
7100 $filter_list{$filter_count}{ID} = $filter_info{"FilterID"};
7101 $filter_list{$filter_count}{Priority} = $filter_info{"FilterPriority"};
7102 $filter_list{$filter_count}{Find} = $filter_info{"FilterFind"};
7103 $filter_list{$filter_count}{Replace} = $filter_info{"FilterReplace"};
7104 $filter_list{$filter_count}{Notes} = $filter_info{"FilterNotes"};
7110 # Check if there are filters in the filter database and
7111 # write a message if there isn't.
7113 if ($filter_count eq 0){
7115 # There are no filters in the filter database.
7117 $filterswarning = $kiriwrite_lang->{filter}->{nofiltersavailable};
7123 # Check if the database wasn't found and if it
7124 # wasn't then write a message saying that the
7125 # database will be created when a filter is
7128 if ($filtersdb_notexist eq 1){
7130 # The filter database doesn't exist so write
7133 $filterswarning = $kiriwrite_lang->{filter}->{filterdatabasedoesnotexist};
7138 # Check if there is a warning message and if
7139 # there is then write that warning message
7140 # else write the list of filters.
7142 if ($filterswarning){
7144 $kiriwrite_presmodule->startbox("errorbox");
7145 $kiriwrite_presmodule->addtext($filterswarning);
7146 $kiriwrite_presmodule->endbox();
7150 # The filter database exists so write out the
7153 if ($blankfindfilter eq 1){
7155 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{filter}->{warningtitle});
7156 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{blankfindfilters});
7157 $kiriwrite_presmodule->addtext();
7158 $kiriwrite_presmodule->addlinebreak();
7159 $kiriwrite_presmodule->addlinebreak();
7163 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7165 $kiriwrite_presmodule->startheader();
7166 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{priority}, { Style => "tablecellheader" });
7167 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{findsetting}, { Style => "tablecellheader" });
7168 $kiriwrite_presmodule->addheader($kiriwrite_lang->{filter}->{replacesetting}, { Style => "tablecellheader" });
7169 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
7170 $kiriwrite_presmodule->endheader();
7172 foreach $filter (keys %filter_list){
7174 # Check which style should be used.
7176 if ($filter_style eq 0){
7178 $filter_style_name = "tablecell1";
7183 $filter_style_name = "tablecell2";
7188 $kiriwrite_presmodule->startrow();
7189 $kiriwrite_presmodule->addcell($filter_style_name);
7190 $kiriwrite_presmodule->addtext($filter_list{$filter}{Priority});
7191 $kiriwrite_presmodule->endcell();
7192 $kiriwrite_presmodule->addcell($filter_style_name);
7194 # Check if the find filter is blank.
7196 if (!$filter_list{$filter}{Find}){
7198 # The find filter is blank.
7200 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{filter}->{blankfindsetting});
7204 # The find filter is not blank.
7206 $kiriwrite_presmodule->addtext($filter_list{$filter}{Find});
7210 $kiriwrite_presmodule->endcell();
7211 $kiriwrite_presmodule->addcell($filter_style_name);
7213 # Check if the replace filter is blank.
7215 if (!$filter_list{$filter}{Replace}){
7217 # The replace filter is blank.
7219 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{filter}->{blankreplacesetting});
7223 # The replace filter is not blank.
7225 $kiriwrite_presmodule->addtext($filter_list{$filter}{Replace});
7229 $kiriwrite_presmodule->endcell();
7230 $kiriwrite_presmodule->addcell($filter_style_name);
7231 $kiriwrite_presmodule->addlink("?mode=filter&action=edit&filter=" . $filter_list{$filter}{ID}, { Text => $kiriwrite_lang->{options}->{edit} });
7232 $kiriwrite_presmodule->addlink("?mode=filter&action=delete&filter=" . $filter_list{$filter}{ID}, { Text => $kiriwrite_lang->{options}->{delete} });
7233 $kiriwrite_presmodule->endcell();
7234 $kiriwrite_presmodule->endrow();
7238 $kiriwrite_presmodule->endtable();
7242 # Disconnect from the filter database.
7244 $kiriwrite_dbmodule->disconnectfilter();
7246 # Disconnect from the database server.
7248 $kiriwrite_dbmodule->disconnect();
7250 return $kiriwrite_presmodule->grab();
7254 sub kiriwrite_filter_add{
7255 #################################################################################
7256 # kiriwrite_filter_add: Adds a filter to the filter list. #
7260 # kiriwrite_filter_add(filterfind, filterreplace, filterpriority, #
7261 # filternotes, [confirm]); #
7263 # filterfind Specifies the new word(s) to find. #
7264 # filterreplace Specifies the new word(s) to replace. #
7265 # filterpriority Specifies the new priority to use. #
7266 # filternotes Specifies the new notes to use. #
7267 # confirm Confirms the action to add a filter. #
7268 #################################################################################
7270 # Get the values that have been passed to the subroutine.
7272 my ($filter_new_find, $filter_new_replace, $filter_new_priority, $filter_new_notes, $confirm) = @_;
7274 # Check the confirm value to make sure it is no more than
7275 # one character long.
7277 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
7281 # The confirm value is undefined, so set the
7282 # value of the confirm integer to '0'.
7290 # The confirm integer is '1', so add the word
7291 # to the filter list.
7293 # First, check the variables recieved are UTF8
7296 kiriwrite_variablecheck($filter_new_find, "utf8", 0, 0);
7297 kiriwrite_variablecheck($filter_new_replace, "utf8", 0, 0);
7298 kiriwrite_variablecheck($filter_new_priority, "utf8", 0, 0);
7299 kiriwrite_variablecheck($filter_new_notes, "utf8", 0, 0);
7301 # Convert the UTF8 values so that the length can
7304 $filter_new_find = kiriwrite_utf8convert($filter_new_find);
7305 $filter_new_replace = kiriwrite_utf8convert($filter_new_replace);
7306 $filter_new_priority = kiriwrite_utf8convert($filter_new_priority);
7307 $filter_new_notes = kiriwrite_utf8convert($filter_new_notes);
7309 # Check if the find filter is blank and return an error
7312 if (!$filter_new_find){
7314 # The find filter given is blank so return an
7317 kiriwrite_error("blankfindfilter");
7321 if (!$filter_new_priority){
7323 # The filter priority is blank so set it
7326 $filter_new_priority = 1;
7330 # Check the length and contents of the values given
7331 # to make sure they are valid.
7333 my $filterfind_maxlength_check = kiriwrite_variablecheck($filter_new_find, "maxlength", 1024, 1);
7334 my $filterreplace_maxlength_check = kiriwrite_variablecheck($filter_new_replace, "maxlength", 1024, 1);
7335 my $filterpriority_maxlength_check = kiriwrite_variablecheck($filter_new_priority, "maxlength", 5, 1);
7336 my $filterpriority_numbers_check = kiriwrite_variablecheck($filter_new_priority, "numbers", 0, 1);
7338 # Check if the result of the tests to see if they
7341 if ($filterfind_maxlength_check eq 1){
7343 # The find filter is too long, so return
7346 kiriwrite_error("findfiltertoolong");
7350 if ($filterreplace_maxlength_check eq 1){
7352 # The replace filter is too long, so
7355 kiriwrite_error("replacefiltertoolong");
7359 if ($filterpriority_maxlength_check eq 1){
7361 # The length of the filter priority
7362 # given is too long, so return an
7365 kiriwrite_error("filterprioritytoolong");
7369 if ($filterpriority_numbers_check eq 1){
7371 # The priority of the filter given
7372 # contains characters other than
7375 kiriwrite_error("filterpriorityinvalidchars");
7379 # Check if the filter priority is less than 1
7380 # and more than 10000 and return an error
7383 if ($filter_new_priority < 1 || $filter_new_priority > 50000){
7385 # The filter priority is less than 1 and
7386 # more than 10000, so return an error.
7388 kiriwrite_error("filterpriorityinvalid");
7392 # Connect to the database server.
7394 $kiriwrite_dbmodule->connect();
7396 # Check if any errors occured while connecting to the database server.
7398 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7400 # A database connection error has occured so return
7403 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7407 # Connect to the filter database.
7409 $kiriwrite_dbmodule->connectfilter(1);
7411 # Check if any error has occured while connecting to the filter
7414 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7416 # The filter database does not exist.
7418 kiriwrite_error("filtersdbmissing");
7420 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7422 # The filter database has invalid permissions set so return
7425 kiriwrite_error("filtersdbpermissions");
7429 # Add the filter to the filter database.
7431 $kiriwrite_dbmodule->addfilter({ FindFilter => $filter_new_find, ReplaceFilter => $filter_new_replace, Priority => $filter_new_priority, Notes => $filter_new_notes});
7433 # Check if any errors have occured while adding the filter.
7435 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7437 # The filter database has invalid permissions set so return
7440 kiriwrite_error("filtersdbpermissions");
7442 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseUncreatable"){
7444 # The filter database is uncreatable so return an error.
7446 kiriwrite_error("filterdatabase");
7448 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7450 # A database error with the filter database has occured so return
7451 # an error with the extended error information.
7453 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7457 # Disconnect from the filter database.
7459 $kiriwrite_dbmodule->disconnectfilter();
7461 # Disconnect from the database server.
7463 $kiriwrite_dbmodule->disconnect();
7465 # Write out a message saying that the filter was added to the
7468 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{filteradded}, { Style => "pageheader" });
7469 $kiriwrite_presmodule->addlinebreak();
7470 $kiriwrite_presmodule->addlinebreak();
7471 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{filteraddedmessage});
7472 $kiriwrite_presmodule->addlinebreak();
7473 $kiriwrite_presmodule->addlinebreak();
7474 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7476 return $kiriwrite_presmodule->grab();
7478 } elsif ($confirm ne 0) {
7480 # The confirm integer is another value (which
7481 # it shouldn't be) so return an error.
7483 kiriwrite_error("invalidvalue");
7487 # The confirm integer was blank so print out a form
7488 # for adding a new filter.
7490 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{addfilter}, { Style => "pageheader" });
7491 $kiriwrite_presmodule->addlinebreak();
7492 $kiriwrite_presmodule->addlinebreak();
7493 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
7494 $kiriwrite_presmodule->startbox();
7495 $kiriwrite_presmodule->addhiddendata("mode", "filter");
7496 $kiriwrite_presmodule->addhiddendata("action", "add");
7497 $kiriwrite_presmodule->addhiddendata("confirm", 1);
7498 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7500 $kiriwrite_presmodule->startheader();
7501 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
7502 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
7503 $kiriwrite_presmodule->endheader();
7505 $kiriwrite_presmodule->startrow();
7506 $kiriwrite_presmodule->addcell("tablecell1");
7507 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
7508 $kiriwrite_presmodule->endcell();
7509 $kiriwrite_presmodule->addcell("tablecell2");
7510 $kiriwrite_presmodule->addinputbox("findword", { Size => 64, MaxLength => 1024 });
7511 $kiriwrite_presmodule->endcell();
7512 $kiriwrite_presmodule->endrow();
7514 $kiriwrite_presmodule->startrow();
7515 $kiriwrite_presmodule->addcell("tablecell1");
7516 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{replacefilter});
7517 $kiriwrite_presmodule->endcell();
7518 $kiriwrite_presmodule->addcell("tablecell2");
7519 $kiriwrite_presmodule->addinputbox("replaceword", { Size => 64, MaxLength => 1024 });
7520 $kiriwrite_presmodule->endcell();
7521 $kiriwrite_presmodule->endrow();
7523 $kiriwrite_presmodule->startrow();
7524 $kiriwrite_presmodule->addcell("tablecell1");
7525 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
7526 $kiriwrite_presmodule->endcell();
7527 $kiriwrite_presmodule->addcell("tablecell2");
7528 $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5 });
7529 $kiriwrite_presmodule->startlist();
7530 $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
7531 $kiriwrite_presmodule->endlist();
7532 $kiriwrite_presmodule->endcell();
7533 $kiriwrite_presmodule->endrow();
7535 $kiriwrite_presmodule->startrow();
7536 $kiriwrite_presmodule->addcell("tablecell1");
7537 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
7538 $kiriwrite_presmodule->endcell();
7539 $kiriwrite_presmodule->addcell("tablecell2");
7540 $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10 });
7541 $kiriwrite_presmodule->endcell();
7542 $kiriwrite_presmodule->endrow();
7544 $kiriwrite_presmodule->endtable();
7546 $kiriwrite_presmodule->addlinebreak();
7547 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{addfilterbutton});
7548 $kiriwrite_presmodule->addtext(" | ");
7549 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{clearvalues});
7550 $kiriwrite_presmodule->addtext(" | ");
7551 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
7553 $kiriwrite_presmodule->endbox();
7554 $kiriwrite_presmodule->endform();
7556 return $kiriwrite_presmodule->grab();
7560 sub kiriwrite_filter_edit{
7561 #################################################################################
7562 # kiriwrite_filter_edit: Edits a filter from the filter list. #
7566 # kiriwrite_filter_edit(filternumber, newfilterfind, newfilterreplace, #
7567 # newfilterpriority, newfilternotes, confirm); #
7569 # filterid Specifies the filter number (line number) in the #
7570 # filter database. #
7571 # newfilterfind Specifies the new word to find. #
7572 # newfilterreplace Specifies the new word to replace. #
7573 # newfilterpriority Specifies the new filter priority. #
7574 # newfilternotes Specifies the new filter notes. #
7575 # confirm Confirms the action to edit a filter. #
7576 #################################################################################
7578 # Get the values that have been passed to the subroutine.
7580 my ($filter_id, $filter_new_find, $filter_new_replace, $filter_new_priority, $filter_new_notes, $confirm) = @_;
7582 # Check the confirm value to make sure it is no more than
7583 # one character long.
7585 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
7587 # Check if the confirm value is blank and if it is
7588 # srt the confirm value to 0.
7592 # The confirm value does not have any value
7593 # set so set it to 0.
7599 # Check if the filter identification number is blank,
7600 # contains characters other than numbers and is more
7601 # than seven characters long.
7605 # The filter identification number is blank,
7606 # so return an error.
7608 kiriwrite_error("filteridblank");
7612 my $filter_id_numbers_check = kiriwrite_variablecheck($filter_id, "numbers", 0, 1);
7614 if ($filter_id_numbers_check eq 1){
7616 # The filter identification number contains
7617 # characters other than numbers, so return
7620 kiriwrite_error("filteridinvalid");
7624 my $filter_id_maxlength_check = kiriwrite_variablecheck($filter_id, "maxlength", 7, 1);
7626 if ($filter_id_maxlength_check eq 1){
7628 # The filter identification number given
7629 # is more than seven characters long, so
7632 kiriwrite_error("filteridtoolong");
7636 my $filter_priority;
7641 # Check if the action to edit a filter has been
7646 # The action to edit a filter has been confirmed so
7647 # edit the selected filter.
7649 # First, check the variables recieved are UTF8
7652 kiriwrite_variablecheck($filter_new_find, "utf8", 0, 0);
7653 kiriwrite_variablecheck($filter_new_replace, "utf8", 0, 0);
7654 kiriwrite_variablecheck($filter_new_priority, "utf8", 0, 0);
7655 kiriwrite_variablecheck($filter_new_notes, "utf8", 0, 0);
7657 # Convert the UTF8 values so that the length can
7660 $filter_find = kiriwrite_utf8convert($filter_new_find);
7661 $filter_replace = kiriwrite_utf8convert($filter_new_replace);
7662 $filter_priority = kiriwrite_utf8convert($filter_new_priority);
7663 $filter_notes = kiriwrite_utf8convert($filter_new_notes);
7665 # Check if the find filter is blank and return an error
7668 if (!$filter_new_find){
7670 # The find filter given is blank so return an
7673 kiriwrite_error("blankfindfilter");
7677 if (!$filter_new_priority){
7679 # The filter priority is blank so set it
7682 $filter_new_priority = 1;
7686 # Check the length and contents of the values given
7687 # to make sure they are valid.
7689 my $filterfind_maxlength_check = kiriwrite_variablecheck($filter_new_find, "maxlength", 1024, 1);
7690 my $filterreplace_maxlength_check = kiriwrite_variablecheck($filter_new_replace, "maxlength", 1024, 1);
7691 my $filterpriority_maxlength_check = kiriwrite_variablecheck($filter_new_priority, "maxlength", 5, 1);
7692 my $filterpriority_numbers_check = kiriwrite_variablecheck($filter_new_priority, "numbers", 0, 1);
7694 # Check if the result of the tests to see if they
7697 if ($filterfind_maxlength_check eq 1){
7699 # The find filter is too long, so return
7702 kiriwrite_error("findfiltertoolong");
7706 if ($filterreplace_maxlength_check eq 1){
7708 # The replace filter is too long, so
7711 kiriwrite_error("replacefiltertoolong");
7715 if ($filterpriority_maxlength_check eq 1){
7717 # The length of the filter priority
7718 # given is too long, so return an
7721 kiriwrite_error("filterprioritytoolong");
7725 if ($filterpriority_numbers_check eq 1){
7727 # The priority of the filter given
7728 # contains characters other than
7731 kiriwrite_error("filterpriorityinvalidchars");
7735 # Check if the filter priority is less than 1
7736 # and more than 10000 and return an error
7739 if ($filter_new_priority < 1 || $filter_new_priority > 50000){
7741 # The filter priority is less than 1 and
7742 # more than 10000, so return an error.
7744 kiriwrite_error("filterpriorityinvalid");
7748 # Connect to the database server.
7750 $kiriwrite_dbmodule->connect();
7752 # Check if any errors occured while connecting to the database server.
7754 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7756 # A database connection error has occured so return
7759 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7763 # Connect to the filter database.
7765 $kiriwrite_dbmodule->connectfilter();
7767 # Check if any error has occured while connecting to the filter
7770 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7772 # The filter database does not exist.
7774 kiriwrite_error("filtersdbmissing");
7776 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7778 # The filter database has invalid permissions set so return
7781 kiriwrite_error("filtersdbpermissions");
7783 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7785 # A database error has occured with the filter database.
7787 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7791 # Edit the selected filter in the filter database.
7793 $kiriwrite_dbmodule->editfilter({ FilterID => $filter_id, NewFindFilter => $filter_new_find, NewReplaceFilter => $filter_new_replace, NewFilterPriority => $filter_new_priority, NewFilterNotes => $filter_new_notes });
7795 # Check if any errors occured while editing the filter.
7797 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7799 # The filter database has invalid permissions set so return
7802 kiriwrite_error("filtersdbpermissions");
7804 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7806 # A database error has occured while using the filter database
7807 # so return an error.
7809 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7811 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7813 # The specified filter does not exist so return an error.
7815 kiriwrite_error("filterdoesnotexist");
7819 # Disconnect from the filter database.
7821 $kiriwrite_dbmodule->disconnectfilter();
7823 # Disconnect from the database server.
7825 $kiriwrite_dbmodule->disconnect();
7827 # Write a message saying that the filter was edited.
7829 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfilter}, { Style => "pageheader" });
7830 $kiriwrite_presmodule->addlinebreak();
7831 $kiriwrite_presmodule->addlinebreak();
7832 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfiltermessage});
7833 $kiriwrite_presmodule->addlinebreak();
7834 $kiriwrite_presmodule->addlinebreak();
7835 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist}});
7837 return $kiriwrite_presmodule->grab();
7839 } elsif ($confirm eq 0){
7841 # The action to edit a filter has not been confirmed
7842 # so write a form for editing the filter with.
7844 # Connect to the database server.
7846 $kiriwrite_dbmodule->connect();
7848 # Check if any errors occured while connecting to the database server.
7850 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7852 # A database connection error has occured so return
7855 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7859 # Connect to the database server.
7861 $kiriwrite_dbmodule->connect();
7863 # Check if any errors occured while connecting to the database server.
7865 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
7867 # A database connection error has occured so return
7870 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
7874 # Connect to the filter database.
7876 $kiriwrite_dbmodule->connectfilter();
7878 # Check if any error has occured while connecting to the filter
7881 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
7883 # The filter database does not exist.
7885 kiriwrite_error("filtersdbmissing");
7887 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
7889 # The filter database has invalid permissions set so return
7892 kiriwrite_error("filtersdbpermissions");
7894 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7896 # A database error has occured with the filter database.
7898 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7902 # Get information about the filter.
7904 my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
7906 # Check if any errors occured while getting information about the filter.
7908 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
7910 # A database error occured while using the filter database so
7913 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
7915 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
7917 # The filter does not exist so return an error.
7919 kiriwrite_error("filterdoesnotexist");
7923 # Get the required information.
7925 $filter_priority = $filter_info{"FilterPriority"};
7926 $filter_find = $filter_info{"FilterFind"};
7927 $filter_replace = $filter_info{"FilterReplace"};
7928 $filter_notes = $filter_info{"FilterNotes"};
7930 # Disconnect from the filter database.
7932 $kiriwrite_dbmodule->disconnectfilter();
7934 # Disconnect from the database server.
7936 $kiriwrite_dbmodule->disconnect();
7938 # Write out the form.
7940 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editfilter}, { Style => "pageheader" });
7941 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
7942 $kiriwrite_presmodule->startbox();
7943 $kiriwrite_presmodule->addhiddendata("mode", "filter");
7944 $kiriwrite_presmodule->addhiddendata("action", "edit");
7945 $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
7946 $kiriwrite_presmodule->addhiddendata("confirm", 1);
7948 $kiriwrite_presmodule->addlinebreak();
7949 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
7951 $kiriwrite_presmodule->startheader();
7952 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
7953 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
7954 $kiriwrite_presmodule->endheader();
7956 $kiriwrite_presmodule->startrow();
7957 $kiriwrite_presmodule->addcell("tablecell1");
7958 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
7959 $kiriwrite_presmodule->endcell();
7960 $kiriwrite_presmodule->addcell("tablecell2");
7961 $kiriwrite_presmodule->addinputbox("filterfind", { Size => 64, MaxLength => 1024, Value => $filter_find });
7962 $kiriwrite_presmodule->endcell();
7963 $kiriwrite_presmodule->endrow();
7965 $kiriwrite_presmodule->startrow();
7966 $kiriwrite_presmodule->addcell("tablecell1");
7967 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{replacefilter});
7968 $kiriwrite_presmodule->endcell();
7969 $kiriwrite_presmodule->addcell("tablecell2");
7970 $kiriwrite_presmodule->addinputbox("filterreplace", { Size => 64, MaxLength => 1024, Value => $filter_replace });
7971 $kiriwrite_presmodule->endcell();
7972 $kiriwrite_presmodule->endrow();
7974 $kiriwrite_presmodule->startrow();
7975 $kiriwrite_presmodule->addcell("tablecell1");
7976 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
7977 $kiriwrite_presmodule->endcell();
7978 $kiriwrite_presmodule->addcell("tablecell2");
7979 $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5, Value => $filter_priority });
7980 $kiriwrite_presmodule->startlist();
7981 $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
7982 $kiriwrite_presmodule->endlist();
7983 $kiriwrite_presmodule->endcell();
7984 $kiriwrite_presmodule->endrow();
7986 $kiriwrite_presmodule->startrow();
7987 $kiriwrite_presmodule->addcell("tablecell1");
7988 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
7989 $kiriwrite_presmodule->endcell();
7990 $kiriwrite_presmodule->addcell("tablecell2");
7991 $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10});
7992 $kiriwrite_presmodule->endcell();
7993 $kiriwrite_presmodule->endrow();
7995 $kiriwrite_presmodule->endtable();
7997 $kiriwrite_presmodule->addlinebreak();
7998 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{editfilterbutton});
7999 $kiriwrite_presmodule->addtext(" | ");
8000 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
8001 $kiriwrite_presmodule->addtext(" | ");
8002 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
8003 $kiriwrite_presmodule->endbox();
8004 $kiriwrite_presmodule->endform();
8006 return $kiriwrite_presmodule->grab();
8010 # A confirm value other than 0 or 1 has been
8011 # specified, so return an error.
8013 kiriwrite_error("invalidvalue");
8019 sub kiriwrite_filter_delete{
8020 #################################################################################
8021 # kiriwrite_filter_delete: Deletes a filter from the filter list. #
8025 # kiriwrite_filter_delete(filterid, confirm); #
8027 # filterid Specifies the filter line number to delete. #
8028 # confirm Confirms the deletion of the selected filter. #
8029 #################################################################################
8031 # Get the values that were passed to this subroutine.
8033 my ($filter_id, $confirm) = @_;
8035 # Check the confirm value to make sure it is no more than
8036 # one character long.
8038 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
8040 # Check if the confirm value is blank and if it is
8041 # srt the confirm value to 0.
8045 # The confirm value does not have any value
8046 # set so set it to 0.
8052 # Check if the filter identification number is blank,
8053 # contains characters other than numbers and is more
8054 # than seven characters long.
8058 # The filter identification number is blank,
8059 # so return an error.
8061 kiriwrite_error("filteridblank");
8065 my $filter_id_numbers_check = kiriwrite_variablecheck($filter_id, "numbers", 0, 1);
8067 if ($filter_id_numbers_check eq 1){
8069 # The filter identification number contains
8070 # characters other than numbers, so return
8073 kiriwrite_error("filteridinvalid");
8077 my $filter_id_maxlength_check = kiriwrite_variablecheck($filter_id, "maxlength", 7, 1);
8079 if ($filter_id_maxlength_check eq 1){
8081 # The filter identification number given
8082 # is more than seven characters long, so
8085 kiriwrite_error("filteridtoolong");
8089 # Define some values for later.
8091 my @database_filter;
8092 my $filter_exists = 0;
8094 # Check if the confirm integer has a value of '1'.
8098 # The action to delete a filter has been confirmed.
8100 # Connect to the database server.
8102 $kiriwrite_dbmodule->connect();
8104 # Check if any errors occured while connecting to the database server.
8106 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8108 # A database connection error has occured so return
8111 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8115 # Connect to the filter database.
8117 $kiriwrite_dbmodule->connectfilter();
8119 # Check if any error has occured while connecting to the filter
8122 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8124 # The filter database does not exist.
8126 kiriwrite_error("filtersdbmissing");
8128 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8130 # The filter database has invalid permissions set so return
8133 kiriwrite_error("filtersdbpermissions");
8135 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8137 # A database error has occured with the filter database.
8139 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8143 # Delete the filter from the filter database.
8145 $kiriwrite_dbmodule->deletefilter({ FilterID => $filter_id });
8147 # Check if any errors occured while deleting the filter.
8149 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8151 # A database error has occured while trying to delete a filter so
8154 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8156 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8158 # The filter does not exist so return an error.
8160 kiriwrite_error("filterdoesnotexist");
8164 # Disconnect from the filter database.
8166 $kiriwrite_dbmodule->disconnectfilter();
8168 # Disconnect from the database server.
8170 $kiriwrite_dbmodule->disconnect();
8172 # Write a message saying that the filter was deleted
8173 # from the filter database.
8175 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfilter}, { Style => "pageheader" });
8176 $kiriwrite_presmodule->addlinebreak();
8177 $kiriwrite_presmodule->addlinebreak();
8178 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfiltermessage});
8179 $kiriwrite_presmodule->addlinebreak();
8180 $kiriwrite_presmodule->addlinebreak();
8181 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
8183 } elsif ($confirm eq 0) {
8185 # Connect to the database server.
8187 $kiriwrite_dbmodule->connect();
8189 # Check if any errors occured while connecting to the database server.
8191 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8193 # A database connection error has occured so return
8196 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8200 # Connect to the filter database.
8202 $kiriwrite_dbmodule->connectfilter();
8204 # Check if any error has occured while connecting to the filter
8207 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8209 # The filter database does not exist.
8211 kiriwrite_error("filtersdbmissing");
8213 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8215 # The filter database has invalid permissions set so return
8218 kiriwrite_error("filtersdbpermissions");
8220 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8222 # A database error has occured with the filter database.
8224 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8228 # Get information about the filter (to check if it exists).
8230 my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
8232 # Check if any errors occured while getting information about the filter.
8234 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8236 # A database error occured while using the filter database so
8239 kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
8241 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8243 # The filter does not exist so return an error.
8245 kiriwrite_error("filterdoesnotexist");
8249 # Disconnect from the filter database.
8251 $kiriwrite_dbmodule->disconnectfilter();
8253 # Disconnect from the database
8255 # The confirm integer is '0', so continue write out
8256 # a form asking the user to confirm the deletion
8259 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefilter}, { Style => "pageheader" });
8260 $kiriwrite_presmodule->addlinebreak();
8261 $kiriwrite_presmodule->addlinebreak();
8262 $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefiltermessage});
8263 $kiriwrite_presmodule->addlinebreak();
8264 $kiriwrite_presmodule->addlinebreak();
8265 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
8266 $kiriwrite_presmodule->startbox();
8267 $kiriwrite_presmodule->addhiddendata("mode", "filter");
8268 $kiriwrite_presmodule->addhiddendata("action", "delete");
8269 $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
8270 $kiriwrite_presmodule->addhiddendata("confirm", 1);
8271 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{deletefilterbutton});
8272 $kiriwrite_presmodule->addtext(" | ");
8273 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{deletefilterreturn} });
8274 $kiriwrite_presmodule->endbox();
8275 $kiriwrite_presmodule->endform();
8279 kiriwrite_error("invalidvalue");
8283 return $kiriwrite_presmodule->grab();
8287 sub kiriwrite_compile_makepages{
8288 #################################################################################
8289 # kiriwrite_compile_makepages: Compile the selected pages and place them in the #
8290 # specified output directory. #
8294 # kiriwrite_compile_makepages(type, selectedlist, confirm); #
8296 # type Specifies if single or multiple databases are to be compiled. #
8297 # confirm Specifies if the action to compile the databases should really #
8299 # selectedlist Specifies the databases to compile from as an array. #
8300 #################################################################################
8302 # Get the values that have been passed to the subroutine.
8304 my ($type, $confirm, @selectedlist) = @_;
8306 # Check if the confirm value is more than one
8309 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
8311 # Check if the confirm value is blank and if it
8312 # is then set the confirm value to 0.
8316 # The confirm value is blank, so set the
8317 # confirm value to 0.
8323 # Check if there are any databases selected
8324 # and return an error if there isn't.
8326 if (!@selectedlist){
8328 # There are no databases in the array
8329 # so return an error.
8331 kiriwrite_error("nodatabaseselected");
8335 # Check if the type given is no more than
8336 # 7 characters long.
8338 my $type_maxlength_check = kiriwrite_variablecheck($type, "maxlength", 8, 1);
8340 if ($type_maxlength_check eq 1){
8342 # The type length given is too long so
8345 kiriwrite_error("variabletoolong");
8349 # Check if the action to compile the databases
8350 # has been confirmed.
8354 # The action to compile the datavases has
8357 # Define some variables for later.
8371 my @pagedirectories;
8372 my @database_filters;
8373 my $warning_count = 0;
8374 my $error_count = 0;
8375 my $pages_count = 0;
8377 my $filters_count = 0;
8378 my $filters_find_blank_warning = 0;
8384 my $page_filename_check;
8385 my $page_filename_char = "";
8386 my $page_filename_directory;
8387 my $page_filename_length = 0;
8388 my $page_filename_seek = 0;
8389 my $page_filename_dircount = 0;
8390 my $page_filename_exists = 0;
8391 my $page_filename_permissions = 0;
8392 my $page_directory_name;
8393 my $page_directory_path;
8395 my $page_description;
8400 my $page_lastmodified;
8403 my $page_autosection;
8406 my $database_filename_check = 0;
8407 my $database_maxlength_check = 0;
8408 my $output_exists = 0;
8409 my $output_permissions = 0;
8410 my $filters_exists = 0;
8411 my $filters_permissions = 0;
8412 my $filters_skip = 0;
8414 my $templates_skip = 0;
8415 my $information_prefix = $kiriwrite_lang->{compile}->{informationprefix};
8416 my $error_prefix = $kiriwrite_lang->{compile}->{errorprefix};
8417 my $warning_prefix = $kiriwrite_lang->{compile}->{warningprefix};
8418 my $filehandle_page;
8420 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabases}, { Style => "pageheader" });
8421 $kiriwrite_presmodule->addlinebreak();
8422 $kiriwrite_presmodule->addlinebreak();
8423 $kiriwrite_presmodule->startbox("datalist");
8425 # Check if the output directory exists and has
8426 # valid permissions set.
8428 $output_exists = kiriwrite_fileexists($kiriwrite_config{'directory_data_output'});
8430 if ($output_exists ne 0){
8432 # The output directory does not exist so
8435 kiriwrite_error("outputdirectorymissing");
8439 $output_permissions = kiriwrite_filepermissions($kiriwrite_config{'directory_data_output'}, 1, 1);
8441 if ($output_permissions ne 0){
8443 # The output directory has invalid
8444 # permissions set so return an error.
8446 kiriwrite_error("outputdirectoryinvalidpermissions");
8450 # Connect to the database server.
8452 $kiriwrite_dbmodule->connect();
8454 # Check if any errors occured while connecting to the database server.
8456 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
8458 # A database connection error has occured so return
8461 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
8465 # Connect to the filter database.
8467 $kiriwrite_dbmodule->connectfilter();
8469 # Check if any error has occured while connecting to the filter
8472 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
8474 # The filter database does not exist so write a warning message.
8476 $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{filterdatabasemissing});
8477 $kiriwrite_presmodule->addlinebreak();
8481 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
8483 # The filter database has invalid permissions set so write a
8486 $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{filterdatabasepermissions});
8487 $kiriwrite_presmodule->addlinebreak();
8493 # Load the filter database (if the filters skip
8494 # value isn't set to 1).
8496 if ($filters_skip eq 0){
8498 # Get the list of available filters.
8500 @database_filters = $kiriwrite_dbmodule->getfilterlist();
8502 # Check if any errors occured while getting the list of filters.
8504 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8506 # A database error has occured with the filter database.
8508 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8509 $kiriwrite_presmodule->addlinebreak();
8514 # Check if the filters skip value is set to 0
8515 # before executing the query.
8517 if ($filters_skip eq 0){
8519 foreach $filter (@database_filters){
8521 # Get the filter information.
8523 %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
8525 # Check if any errors occured while getting the filter information.
8527 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
8529 # A database error occured while using the filter database.
8531 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8532 $kiriwrite_presmodule->addlinebreak();
8536 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
8538 # The filter does not exist so process the next filter.
8544 # Check if the find filter is blank and
8545 # if it is then write a warning message.
8547 if (!$filter_info{"FilterFind"}){
8549 if ($filters_find_blank_warning ne 1){
8551 $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{findfilterblank});
8552 $kiriwrite_presmodule->addlinebreak();
8553 $filters_find_blank_warning = 1;
8559 # Add each find and replace filter.
8561 $findfilter[$filters_count] = $filter_info{"FilterFind"};
8562 $replacefilter[$filters_count] = $filter_info{"FilterReplace"};
8570 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishfilterdatabase});
8571 $kiriwrite_presmodule->addlinebreak();
8577 # Disconnect from the filter database.
8579 $kiriwrite_dbmodule->disconnectfilter();
8581 # Connect to the template database.
8583 $kiriwrite_dbmodule->connecttemplate();
8585 # Check if any errors occured while connecting to the template database.
8587 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
8589 # The template database does not exist so set the template
8592 $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{templatedatabasemissing});
8593 $kiriwrite_presmodule->addlinebreak();
8594 $templates_skip = 1;
8597 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
8599 # The template database has invalid permissions set so write
8600 # the template warning message.
8602 $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{templatedatabasepermissions});
8603 $kiriwrite_presmodule->addlinebreak();
8604 $templates_skip = 1;
8609 # Check if the template skip value isn't set and if it isn't
8610 # then get the list of templates.
8612 if (!$templates_skip){
8614 @templateslist = $kiriwrite_dbmodule->gettemplatelist();
8616 # Check if any errors had occured.
8618 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
8620 # A database error occured while getting the list
8621 # of templates so return a warning message with the
8622 # extended error information.
8624 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8625 $templates_skip = 1;
8630 # Check if the template skip value isn't set and if it isn't
8631 # then process each template.
8633 if (!$templates_skip){
8635 # Process each template.
8637 foreach $template (@templateslist){
8639 # Get information about the template.
8641 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
8643 # Check if any error occured while getting the template information.
8645 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
8647 # A database error has occured, so return an error.
8649 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
8652 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
8654 # The template does not exist, so process the next template.
8660 # Place each template file into the hash.
8662 $templatefiles{$template_info{"TemplateFilename"}}{template} = $template_info{"TemplateLayout"};
8663 $templatefiles{$template_info{"TemplateFilename"}}{valid} = 1;
8667 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishtemplatedatabase});
8668 $kiriwrite_presmodule->addlinebreak();
8674 # Disconnect from the template database.
8676 $kiriwrite_dbmodule->disconnecttemplate();
8678 # Process each database.
8680 foreach $database (@selectedlist){
8682 # Check if the database filename and length
8685 $kiriwrite_presmodule->addhorizontalline();
8687 $database_filename_check = kiriwrite_variablecheck($database, "page_filename", "", 1);
8688 $database_maxlength_check = kiriwrite_variablecheck($database, "maxlength", 32, 1);
8690 if ($database_filename_check ne 0){
8692 # The database filename is invalid, so process
8693 # the next database.
8695 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenameinvalidcharacters}, $database));
8696 $kiriwrite_presmodule->addlinebreak();
8702 if ($database_maxlength_check ne 0){
8704 # The database file is too long, so process the
8707 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenametoolong}, $database));
8708 $kiriwrite_presmodule->addlinebreak();
8714 # Select the database.
8716 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
8718 # Check if any errors had occured while selecting the database.
8720 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
8722 # The database does not exist, so write a warning message.
8724 $kiriwrite_presmodule->addtext($warning_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasemissing}, $database));
8725 $kiriwrite_presmodule->addlinebreak();
8729 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
8731 # The database has invalid permissions set, so write
8734 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseinvalidpermissions}, $database));
8735 $kiriwrite_presmodule->addlinebreak();
8741 # Get information about the database.
8743 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
8745 # Check if any error occured while getting the database information.
8747 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
8749 # A database error has occured so write an error.
8751 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseerror}, $database, $kiriwrite_dbmodule->geterror(1)));
8752 $kiriwrite_presmodule->addlinebreak();
8758 # Get the database name.
8760 $database_name = $database_info{"DatabaseName"};
8762 $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compilingpages}, $database_name));
8763 $kiriwrite_presmodule->addlinebreak();
8765 # Get the list of pages in the database.
8767 @databasepages = $kiriwrite_dbmodule->getpagelist();
8769 # Check if any errors occured while getting the list of pages.
8771 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
8773 # A database error has occured so return an error and
8774 # also the extended error information.
8776 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasepageerror}, $database, $kiriwrite_dbmodule->geterror(1)));
8777 $kiriwrite_presmodule->addlinebreak();
8783 foreach $page (@databasepages) {
8785 # Get information about the page.
8787 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
8789 $page_filename = $page_info{"PageFilename"};
8790 $page_name = $page_info{"PageName"};
8791 $page_description = $page_info{"PageDescription"};
8792 $page_section = $page_info{"PageSection"};
8793 $page_template = $page_info{"PageTemplate"};
8794 $page_content = $page_info{"PageContent"};
8795 $page_settings = $page_info{"PageSettings"};
8796 $page_lastmodified = $page_info{"PageLastModified"};
8798 # Check if the filename is valid.
8800 $page_filename_check = kiriwrite_variablecheck($page_filename, "page_filename", 0, 1);
8802 if ($page_filename_check ne 0){
8804 # The file name is not valid so write a
8805 # error and process the next page.
8807 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{invalidpagefilename}, $page_name));
8808 $kiriwrite_presmodule->addlinebreak();
8814 # Check if the template with the filename does not exist
8815 # in the template files hash and write a message and
8816 # process the next page.
8818 if (!$templatefiles{$page_template}{valid} && $page_template ne "!none" && $templates_skip eq 0){
8820 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatefilemissing}, $page_template, $page_name, $page_filename));
8821 $kiriwrite_presmodule->addlinebreak();
8825 $page_final = $page_content;
8827 } elsif ($page_template eq "!none"){
8829 $page_final = $page_content;
8833 $page_final = $templatefiles{$page_template}{template};
8839 $page_final =~ s/<kiriwrite:pagecontent>/$page_content/g;
8843 # Create the combined page title (if needed).
8845 if ($page_settings eq 0 || $page_settings > 3){
8847 # Don't use page name or section name.
8849 $page_final =~ s/<kiriwrite:pagetitle>//g;
8851 } elsif ($page_settings eq 1){
8853 # Use the page name and section name.
8855 $page_autotitle = "(" . $page_section . " - " . $page_name . ")";
8856 $page_title = $page_section . " - " . $page_name;
8857 $page_final =~ s/<kiriwrite:pagetitle>/$page_title/g;
8859 } elsif ($page_settings eq 2){
8861 # Use the page name only.
8863 $page_autotitle = "(" . $page_name . ")";
8864 $page_final =~ s/<kiriwrite:pagetitle>/$page_name/g;
8866 } elsif ($page_settings eq 3){
8868 # Use the section name only.
8871 $page_autotitle = "(" . $page_section . ")";
8873 $page_final =~ s/<kiriwrite:pagetitle>/$page_section/g;
8877 # Check if the section name is not blank and
8878 # place brackets inbetween if it is.
8882 $page_autosection = "(" . $page_section . ")";
8886 # Replace each <kiriwrite> value with the apporiate page
8889 $page_final =~ s/<kiriwrite:pagename>/$page_name/g;
8890 $page_final =~ s/<kiriwrite:pagedescription>/$page_description/g;
8891 $page_final =~ s/<kiriwrite:pagesection>/$page_section/g;
8892 $page_final =~ s/<kiriwrite:autosection>/$page_autosection/g;
8893 $page_final =~ s/<kiriwrite:autotitle>/$page_autotitle/g;
8895 # Process the filters on the page data.
8897 if ($filters_skip eq 0){
8901 foreach $filter_find (@findfilter){
8903 # Get the replace filter and process each
8904 # filter on the page.
8906 $filter_replace = $replacefilter[$filters_count];
8907 $page_final =~ s/$filter_find/$filter_replace/g;
8914 # Process the page filename and check what directories
8915 # need to be created.
8917 $page_filename_length = int(length($page_filename));
8921 $page_filename_char = substr($page_filename, $page_filename_seek, 1);
8923 # Check if a forward slash appears and add it to
8924 # the list of directories array.
8926 if ($page_filename_char eq '/'){
8928 # Append the directory name to the list of
8929 # directories array.
8931 $pagedirectories[$page_filename_dircount] = $page_filename_directory;
8932 $page_filename_directory = "";
8933 $page_filename_char = "";
8934 $page_filename_dircount++;
8938 # Append the character to the directory/filename.
8940 $page_filename_directory = $page_filename_directory . $page_filename_char;
8944 $page_filename_seek++;
8946 } until ($page_filename_length eq $page_filename_seek);
8948 foreach $page_directory_name (@pagedirectories){
8950 # Check if the directory name is undefined and if it
8951 # is then set it blank.
8953 if (!$page_directory_name){
8954 $page_directory_name = "";
8957 if (!$page_directory_path){
8958 $page_directory_path = "";
8961 # Check if the directory exists and create
8962 # the directory if it doesn't exist.
8964 $page_directory_path = $page_directory_path . '/' . $page_directory_name;
8966 mkdir($kiriwrite_config{"directory_data_output"} . '/' . $page_directory_path);
8970 # Check if the file already exists and if it does then check
8971 # the permissions of the file and return an error if the
8972 # permissions set are invalid.
8974 $page_filename_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"} . '/' . $page_filename);
8976 if ($page_filename_exists eq 0){
8978 # The page filename exists, so check if the permissions given are
8981 $page_filename_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"} . '/' . $page_filename, 1, 1);
8983 if ($page_filename_permissions eq 1){
8985 # The file has invalid permissions set.
8987 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pageinvalidpermissions}, $page_filename));
8988 $kiriwrite_presmodule->addlinebreak();
8991 # Reset certain values.
8993 $page_autotitle = "";
8994 $page_autosection = "";
8995 $page_filename_seek = 0;
8996 $page_filename_dircount = 0;
8998 $page_filename_directory = "";
8999 $page_directory_path = "";
9000 $page_directory_name = "";
9001 @pagedirectories = ();
9009 # Reset certain values.
9011 $page_autotitle = "";
9012 $page_autosection = "";
9013 $page_filename_seek = 0;
9014 $page_filename_dircount = 0;
9016 $page_filename_directory = "";
9017 $page_directory_path = "";
9018 $page_directory_name = "";
9019 @pagedirectories = ();
9021 # Write the file to the output directory.
9023 ($page_filename) = $page_filename =~ m/^(.*)$/g;
9024 ($kiriwrite_config{"directory_data_output"}) = $kiriwrite_config{"directory_data_output"} =~ m/^(.*)$/g;
9026 open($filehandle_page, "> ", $kiriwrite_config{"directory_data_output"} . '/' . $page_filename) or ($kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pagenotwritten}, $page_filename, $!)), $kiriwrite_presmodule->addlinebreak(), $error_count++, next);
9034 binmode $filehandle_page, ':utf8';
9035 print $filehandle_page $page_final;
9036 close($filehandle_page);
9038 # Write a message saying the page has been compiled. Check
9039 # to see if the page name is blank and write a message
9040 # saying there's no page name.
9043 $kiriwrite_presmodule->addtext($information_prefix . ' ');
9044 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
9045 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledpageblankname}, $page_filename));
9047 $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compiledpage}, $page_name, $page_filename));
9051 $kiriwrite_presmodule->addlinebreak();
9056 # Write a message saying that the database has
9059 $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefinish}, $database_name));
9060 $kiriwrite_presmodule->addlinebreak();
9064 # Disconnect from the database server.
9066 $kiriwrite_dbmodule->disconnect();
9068 $kiriwrite_presmodule->addhorizontalline();
9069 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compileresults}, $pages_count, $error_count, $warning_count));
9070 $kiriwrite_presmodule->endbox();
9071 $kiriwrite_presmodule->addlinebreak();
9072 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9074 return $kiriwrite_presmodule->grab();
9076 } elsif ($confirm eq 0){
9078 # The action to compile the databases has
9079 # not been confirmed so check what type
9082 if ($type eq "single"){
9084 # The type is a single database selected so
9085 # process that database.
9087 # Define some variables for later.
9090 my $database_filename_check;
9091 my $database_maxlength_check;
9092 my $databasefilename;
9095 # Check that the database name and length are
9096 # valid and return an error if they aren't.
9098 $databasefilename = $selectedlist[0];
9100 # Connect to the database server.
9102 $kiriwrite_dbmodule->connect();
9104 # Check if any errors occured while connecting to the database server.
9106 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9108 # A database connection error has occured so return
9111 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9115 # Select the database.
9117 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasefilename });
9119 # Check if any errors had occured while selecting the database.
9121 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9123 # The database does not exist, so return an error.
9125 kiriwrite_error("databasemissingfile");
9127 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9129 # The database has invalid permissions set, so return
9132 kiriwrite_error("databaseinvalidpermissions");
9136 # Get information about the database.
9138 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9140 # Check if any error occured while getting the database information.
9142 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9144 # A database error has occured so return an error and
9145 # also the extended error information.
9147 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
9151 $database_name = $database_info{"DatabaseName"};
9153 # Disconnect from the database server.
9155 $kiriwrite_dbmodule->disconnect();
9157 # Write out a form asking the user to confirm if the
9158 # user wants to compile the selected database.
9160 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabase}, { Style => "pageheader" });
9161 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9162 $kiriwrite_presmodule->startbox();
9163 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9164 $kiriwrite_presmodule->addhiddendata("action", "compile");
9165 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9166 $kiriwrite_presmodule->addhiddendata("id[1]", $databasefilename);
9167 $kiriwrite_presmodule->addhiddendata("name[1]", "on");
9168 $kiriwrite_presmodule->addhiddendata("confirm", 1);
9169 $kiriwrite_presmodule->addlinebreak();
9170 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledatabasemessage}, $database_name));
9171 $kiriwrite_presmodule->addlinebreak();
9172 $kiriwrite_presmodule->addlinebreak();
9173 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compiledatabasebutton});
9174 $kiriwrite_presmodule->addtext(" | ");
9175 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9176 $kiriwrite_presmodule->endbox();
9177 $kiriwrite_presmodule->endform();
9179 return $kiriwrite_presmodule->grab();
9181 } elsif ($type eq "multiple"){
9183 # The type is multiple databases selected
9184 # so process each database.
9186 # Define some variables for later.
9191 my $database_filename_check;
9192 my $database_maxlength_check;
9193 my $database_count = 0;
9194 my $database_info_name;
9196 # Connect to the database server.
9198 $kiriwrite_dbmodule->connect();
9200 # Check if any errors occured while connecting to the database server.
9202 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9204 # A database connection error has occured so return
9207 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9211 foreach $databasename (@selectedlist){
9213 # Check if the database is in the database
9214 # directory and skip it if it isn't.
9216 $database_filename_check = kiriwrite_variablecheck($databasename, "filename", "", 1);
9217 $database_maxlength_check = kiriwrite_variablecheck($databasename, "maxlength", 32, 1);
9219 if ($database_filename_check ne 0 || $database_maxlength_check ne 0){
9221 # The database filename given is invalid or
9222 # the database filename given is too long
9223 # so process the next database.
9229 # Select the database to add the page to.
9231 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasename });
9233 # Check if any errors had occured while selecting the database.
9235 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9237 # The database does not exist, so process the next database.
9241 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
9243 # The database has invalid permissions set, so process
9244 # the next database.
9250 # Get information about the database.
9252 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9254 # Check if any error occured while getting the database information.
9256 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9258 # A database error has occured so process the next
9265 $database_list{$database_count}{Name} = $database_info{"DatabaseName"};
9266 $database_list{$database_count}{Filename} = $databasename;
9272 # Check if any databases are available to be compiled.
9274 if ($database_count eq 0){
9276 # No databases are available to be compiled.
9278 kiriwrite_error("nodatabaseselected");
9282 # Write out the form for compiling the database.
9284 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabases}, { Style => "pageheader" });
9285 $kiriwrite_presmodule->addlinebreak();
9286 $kiriwrite_presmodule->addlinebreak();
9287 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9288 $kiriwrite_presmodule->startbox();
9289 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9290 $kiriwrite_presmodule->addhiddendata("action", "compile");
9291 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9292 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9293 $kiriwrite_presmodule->addhiddendata("confirm", 1);
9294 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabasesmessage});
9295 $kiriwrite_presmodule->addlinebreak();
9296 $kiriwrite_presmodule->addlinebreak();
9297 $kiriwrite_presmodule->startbox("datalist");
9299 $database_count = 0;
9301 # write out the list of databases to compile.
9303 foreach $database (keys %database_list){
9307 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9308 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9310 # Check if the database name is undefined and if it is
9311 # then write a message saying the database name is blank.
9313 if (!$database_list{$database}{Name}){
9314 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{compile}->{blankdatabasename});
9316 $kiriwrite_presmodule->addtext($database_list{$database}{Name});
9319 $kiriwrite_presmodule->addlinebreak();
9323 $kiriwrite_presmodule->endbox();
9325 # Disconnect from the database server.
9327 $kiriwrite_dbmodule->disconnect();
9329 $kiriwrite_presmodule->addlinebreak();
9330 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselecteddatabasesbutton});
9331 $kiriwrite_presmodule->addtext(" | ");
9332 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9333 $kiriwrite_presmodule->endbox();
9334 $kiriwrite_presmodule->endform();
9336 return $kiriwrite_presmodule->grab();
9340 # The type is something else other than
9341 # single or multiple, so return an error.
9343 kiriwrite_error("invalidvariable");
9349 # The confirm value is neither 0 or 1, so
9352 kiriwrite_error("invalidvariable");
9358 sub kiriwrite_compile_all{
9359 #################################################################################
9360 # kiriwrite_compile_all: Compile all of the databases in the database #
9365 # kiriwrite_compile_all(); #
9366 #################################################################################
9368 # Connect to the database server.
9370 $kiriwrite_dbmodule->connect();
9372 # Check if any errors occured while connecting to the database server.
9374 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9376 # A database connection error has occured so return
9379 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9383 # Get the list of available databases.
9385 my @database_list = $kiriwrite_dbmodule->getdblist();
9387 # Check if any errors occured while getting the databases.
9389 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9391 # The database directory is missing so return an error.
9393 kiriwrite_error("datadirectorymissing");
9395 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9397 # The database directory has invalid permissions set so return
9400 kiriwrite_error("datadirectoryinvalidpermissions");
9404 # Define some variables for later.
9407 my $database_name_filename_check;
9408 my $database_count = 0;
9410 # Check the list of databases to compile to see if it is blank,
9411 # if it is then return an error.
9413 if (!@database_list){
9415 # The list of database is blank so return an error.
9417 kiriwrite_error("nodatabasesavailable");
9421 # Write out a form for confirming the action to compile all of the databases.
9423 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabases}, { Style => "pageheader" });
9424 $kiriwrite_presmodule->addlinebreak();
9425 $kiriwrite_presmodule->addlinebreak();
9427 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9428 $kiriwrite_presmodule->startbox();
9429 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9430 $kiriwrite_presmodule->addhiddendata("action", "compile");
9431 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9433 foreach $database (@database_list){
9435 # Check if the database filename is blank.
9437 if ($database eq ""){
9439 # The database filename is blank so process
9440 # the next database.
9446 # Check if the database filename is valid before
9447 # using the database.
9449 $database_name_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
9451 if ($database_name_filename_check ne 0){
9453 # The database filename is invalid so process
9454 # the next database.
9461 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database);
9462 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
9466 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9468 # Disconnect from the database server.
9470 $kiriwrite_dbmodule->disconnect();
9472 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabasesmessage});
9473 $kiriwrite_presmodule->addlinebreak();
9474 $kiriwrite_presmodule->addlinebreak();
9476 $kiriwrite_presmodule->addhiddendata("confirm", 1);
9477 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compilealldatabasesbutton});
9478 $kiriwrite_presmodule->addtext(" | ");
9479 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9480 $kiriwrite_presmodule->endbox();
9481 $kiriwrite_presmodule->endform();
9483 return $kiriwrite_presmodule->grab();
9487 sub kiriwrite_selectedlist{
9488 #################################################################################
9489 # kiriwrite_page_selectedlist: Get the list of selected pages to use. #
9493 # kiriwrite_page_selectedlist(); #
9494 #################################################################################
9496 # Load the required Perl modules.
9498 my $query = new CGI;
9500 my $count = $query->param('count');
9502 # Check if the list of files has a value and if not set it 0.
9510 # Define some values for later.
9519 my $final_count = 0;
9522 # Get the list of filenames.
9526 # Get the values from id[]
9530 $filename = $query->param('id[' . $seek . ']');
9531 $filename_list[$seek] = $filename;
9533 } until ($seek eq $count || $count eq 0);
9535 # Get the list of selected filenames.
9541 # Get the values from name[]
9545 $selected = $query->param('name[' . $seek . ']');
9553 $selected_list[$seek] = $selected;
9555 } until ($seek eq $count || $count eq 0);
9557 # Create a final list of filenames to be used for
9564 # Check if the selected value is on and include
9565 # the filename in the final list.
9569 $selected = $selected_list[$seek];
9571 if ($selected eq "on"){
9573 $filename = $filename_list[$seek];
9574 $final_list[$final_count] = $filename;
9579 } until ($seek eq $count || $count eq 0);
9585 sub kiriwrite_compile_list{
9586 #################################################################################
9587 # kiriwrite_compile_list: Shows a list of databases that can be compiled. #
9591 # kiriwrite_compile_list(); #
9592 #################################################################################
9594 # Define the following variables that are going to be used before using
9595 # the foreach function.
9599 my $database_count = 0;
9600 my $database_filename = "";
9601 my $database_filename_friendly = "";
9602 my $database_permissions = "";
9603 my $database_name = "";
9604 my $database_description = "";
9606 my @permissions_list;
9608 my $table_style = 0;
9609 my $table_style_name = "";
9612 tie(%database_list, 'Tie::IxHash');
9614 # Connect to the database server.
9616 $kiriwrite_dbmodule->connect();
9618 # Check if any errors occured while connecting to the database server.
9620 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
9622 # A database connection error has occured so return
9625 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
9629 # Get the list of available databases and process any errors that
9630 # might have occured.
9632 my @database_list = $kiriwrite_dbmodule->getdblist();
9634 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
9636 # The database directory is missing so return an error.
9638 kiriwrite_error("datadirectorymissing");
9640 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
9642 # The database directory has invalid permissions set so return
9645 kiriwrite_error("datadirectoryinvalidpermissions");
9649 # Begin creating the table for the list of databases.
9651 foreach $data_file (@database_list){
9653 # Select the database.
9655 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
9657 # Check if any error occured while selecting the database.
9659 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
9661 # The database does not exist, so process the next
9666 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
9668 # The database has invalid permissions settings, so
9669 # add the database to the list of databases with
9670 # invalid permissions set and process the next
9673 push(@permissions_list, $data_file);
9678 # Get information about the database.
9680 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
9682 # Check if any error occured while getting information from the
9685 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
9687 # A database error has occured, add the database and specific
9688 # error message to the list of databases with errors and
9689 # process the next database.
9691 push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
9696 $database_name = $database_info{"DatabaseName"};
9697 $database_description = $database_info{"Description"};
9699 # Create a friendly name for the database.
9701 $database_filename_friendly = $data_file;
9703 # Append the database information to the table.
9705 $database_list{$database_count}{Filename} = $database_filename_friendly;
9706 $database_list{$database_count}{Name} = $database_name;
9707 $database_list{$database_count}{Description} = $database_description;
9713 # Check if there are no valid databases are if there is no
9714 # valid databases then write a message saying that no
9715 # valid databases are available.
9717 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilepages}, { Style => "pageheader" });
9718 $kiriwrite_presmodule->addlinebreak();
9719 $kiriwrite_presmodule->addlinebreak();
9721 if ($database_count eq 0){
9723 # There are no databases available for compiling so
9724 # write a message instead.
9726 $kiriwrite_presmodule->startbox("errorbox");
9727 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{nodatabasesavailable});
9728 $kiriwrite_presmodule->endbox();
9732 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9733 $kiriwrite_presmodule->startbox();
9734 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9735 $kiriwrite_presmodule->addhiddendata("action", "compile");
9736 $kiriwrite_presmodule->addhiddendata("type", "multiple");
9738 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
9739 $kiriwrite_presmodule->addtext(" | ");
9740 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselectedbutton});
9741 $kiriwrite_presmodule->addlinebreak();
9742 $kiriwrite_presmodule->addlinebreak();
9743 $kiriwrite_presmodule->addhiddendata("count", $database_count);
9744 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
9746 $kiriwrite_presmodule->startheader();
9747 $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
9748 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
9749 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
9750 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
9751 $kiriwrite_presmodule->endheader();
9753 $database_count = 1;
9755 foreach $database (keys %database_list){
9757 # Check the style to be used with.
9759 if ($table_style eq 0){
9761 # Use the first style and set the style value
9762 # to use the next style, the next time the
9763 # if statement is checked.
9765 $table_style_name = "tablecell1";
9770 # Use the second style and set the style
9771 # value to use the first style, the next
9772 # time if statement is checked.
9774 $table_style_name = "tablecell2";
9778 # Add the template to the list of available
9779 # templates to compile.
9781 $kiriwrite_presmodule->startrow();
9782 $kiriwrite_presmodule->addcell($table_style_name);
9783 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
9784 $kiriwrite_presmodule->addcheckbox("name[" . $database_count . "]");
9785 $kiriwrite_presmodule->endcell();
9786 $kiriwrite_presmodule->addcell($table_style_name);
9788 if (!$database_list{$database}{Name}){
9789 $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}) });
9791 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_list{$database}{Filename}, { Text => $database_list{$database}{Name} });
9794 $kiriwrite_presmodule->endcell();
9795 $kiriwrite_presmodule->addcell($table_style_name);
9797 if (!$database_list{$database}{Description}){
9798 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
9800 $kiriwrite_presmodule->addtext($database_list{$database}{Description});
9803 $kiriwrite_presmodule->endcell();
9804 $kiriwrite_presmodule->addcell($table_style_name);
9805 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile&action=compile&type=single&database=" . $database_list{$database}{Filename}, { Text => $kiriwrite_lang->{options}->{compile} });
9806 $kiriwrite_presmodule->endcell();
9807 $kiriwrite_presmodule->endrow();
9813 $kiriwrite_presmodule->endtable();
9814 $kiriwrite_presmodule->endbox();
9815 $kiriwrite_presmodule->endform();
9819 # Disconnect from the database server.
9821 $kiriwrite_dbmodule->disconnect();
9823 # Check if any databases with problems have appeared and if they
9824 # have, print out a message saying which databases have problems.
9826 if (@permissions_list){
9828 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
9829 $kiriwrite_presmodule->addlinebreak();
9830 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
9831 $kiriwrite_presmodule->addlinebreak();
9833 foreach $database (@permissions_list){
9835 $kiriwrite_presmodule->addlinebreak();
9836 $kiriwrite_presmodule->addtext($database);
9840 $kiriwrite_presmodule->addlinebreak();
9841 $kiriwrite_presmodule->addlinebreak();
9847 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
9848 $kiriwrite_presmodule->addlinebreak();
9849 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
9850 $kiriwrite_presmodule->addlinebreak();
9852 foreach $database (@error_list){
9854 $kiriwrite_presmodule->addlinebreak();
9855 $kiriwrite_presmodule->addtext($database);
9861 return $kiriwrite_presmodule->grab();
9865 sub kiriwrite_compile_clean{
9866 #################################################################################
9867 # kiriwrite_compile_clean: Deletes the contents of the output directory. #
9871 # kiriwrite_compile_clean(confirm); #
9873 # confirm Confirms the deletion of files from the output directory. #
9874 #################################################################################
9876 # Get the values passed to the subroutine.
9880 # Define some variables for later.
9882 my $file_permissions;
9883 my $output_directory_exists;
9884 my $output_directory_permissions;
9885 my $warning_message;
9887 # Check if the output directory exists.
9889 $output_directory_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"});
9891 if ($output_directory_exists eq 1){
9893 # The output directory does not exist so return
9896 kiriwrite_error("outputdirectorymissing");
9900 # Check if the output directory has invalid
9903 $output_directory_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"});
9905 if ($output_directory_permissions eq 1){
9907 # The output directory has invalid permissions
9908 # set, so return an error.
9910 kiriwrite_error("outputdirectoryinvalidpermissions");
9918 # The action to clean the output directory has been
9921 # Remove the list of files and directories from the
9924 $file_permissions = kiriwrite_compile_clean_helper($kiriwrite_config{"directory_data_output"}, 1);
9926 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9928 if ($file_permissions eq 1){
9930 $kiriwrite_presmodule->addlinebreak();
9931 $kiriwrite_presmodule->addlinebreak();
9932 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{somecontentnotremoved});
9933 $kiriwrite_presmodule->addlinebreak();
9934 $kiriwrite_presmodule->addlinebreak();
9938 $kiriwrite_presmodule->addlinebreak();
9939 $kiriwrite_presmodule->addlinebreak();
9940 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{contentremoved});
9941 $kiriwrite_presmodule->addlinebreak();
9942 $kiriwrite_presmodule->addlinebreak();
9946 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
9948 return $kiriwrite_presmodule->grab();
9952 # A value other than 1 is set for the confirm value
9953 # (which it shouldn't be) so return an error.
9955 kiriwrite_error("invalidvariable");
9961 # Print out a form for cleaning the output directory.
9963 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
9964 $kiriwrite_presmodule->addlinebreak();
9965 $kiriwrite_presmodule->addlinebreak();
9966 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
9967 $kiriwrite_presmodule->startbox();
9968 $kiriwrite_presmodule->addhiddendata("mode", "compile");
9969 $kiriwrite_presmodule->addhiddendata("action", "clean");
9970 $kiriwrite_presmodule->addhiddendata("confirm", 1);
9971 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectorymessage});
9972 $kiriwrite_presmodule->addlinebreak();
9973 $kiriwrite_presmodule->addlinebreak();
9974 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{cleanoutputdirectorybutton});
9975 $kiriwrite_presmodule->addtext(" | ");
9976 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist}});
9977 $kiriwrite_presmodule->endbox();
9978 $kiriwrite_presmodule->endform();
9980 return $kiriwrite_presmodule->grab();
9984 sub kiriwrite_compile_clean_helper{
9985 #################################################################################
9986 # kiriwrite_compile_clean_helper: Helper for cleaning out the output directory. #
9987 # This command sometimes is called recursively (when a directory is found). #
9991 # kiriwrite_compile_clean_helper(directory, removedirectory, [permissions]); #
9993 # directory Specifies the directory to remove files (and #
9994 # sub-directories) from. #
9995 # keepdirectory Keeps the directory itself after all files have been #
9997 # permissions Used recursively for error checking. #
9998 #################################################################################
10000 # Get the values passed to the subroutine.
10002 my ($directory, $directory_keep, $permissions) = @_;
10004 # Check if the directory_keep is only one charater long.
10006 my $directory_file = "";
10007 my @directory_list;
10008 my $file_permissions = 0;
10011 # Check if the file permissions value is blank.
10013 if (!$permissions){
10015 # The file permissions value is blank.
10021 # Open the directory specified, read the contents of
10022 # the directory and then close the directory.
10024 opendir(DIRECTORY, $directory);
10025 @directory_list = readdir(DIRECTORY);
10026 closedir(DIRECTORY);
10028 # Remove each file and directory.
10030 foreach $directory_file (@directory_list){
10032 # Check if the filename is '.' or '..' and if it
10033 # is skip those files.
10035 if ($directory_file eq "." || $directory_file eq ".."){
10037 # The filename is '.' or '..' so skip processing
10042 # Check if the permissions on the file or directory has
10043 # valid permissions set.
10045 $file_permissions = kiriwrite_filepermissions($directory . '/' . $directory_file, 1, 1);
10047 if ($file_permissions eq 1){
10049 # The file or directory has invalid permissions set.
10056 # Check if the filename is a directory.
10058 if (-d $directory . '/' . $directory_file){
10060 # The filename is a directory so send the directory name
10061 # and this subroutine again (recursively).
10063 kiriwrite_compile_clean_helper($directory . '/' . $directory_file, 0, $permissions);
10067 # The file is not a directory but an actual file so
10068 # remove as normal (in terms of the Perl language).
10070 ($directory) = $directory =~ m/^(.*)$/g;
10071 ($directory_file) = $directory_file =~ m/^(.*)$/g;
10073 # Check if the directory is undefined and if it is then
10080 if (!$directory_file){
10081 $directory_file = "";
10084 unlink($directory . '/' . $directory_file);
10092 # Check if the directory should be kept.
10094 if ($directory_keep eq 1){
10096 # The directory_keep value is set as 1 so the directory
10097 # specified should be kept.
10099 } elsif ($directory_keep eq 0) {
10101 # The directory_keep value is set as 0 so remove the
10102 # directory specified.
10104 ($directory) = $directory =~ m/^(.*)$/g;
10109 # A value other than 0 or 1 was specified so return
10112 kiriwrite_error('invalidvalue');
10116 return $permissions;
10120 sub kiriwrite_settings_view{
10121 #################################################################################
10122 # kiriwrite_options_view: Writes out the list of options and variables. #
10126 # kiriwrite_settings_view(); #
10127 #################################################################################
10129 # Get the settings.
10131 my $settings_directory_db = $kiriwrite_config{"directory_data_db"};
10132 my $settings_directory_output = $kiriwrite_config{"directory_data_output"};
10133 my $settings_noncgi_images = $kiriwrite_config{"directory_noncgi_images"};
10134 my $settings_system_datetime = $kiriwrite_config{"system_datetime"};
10135 my $settings_system_language = $kiriwrite_config{"system_language"};
10136 my $settings_system_presentation = $kiriwrite_config{"system_presmodule"};
10137 my $settings_system_database = $kiriwrite_config{"system_dbmodule"};
10139 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{viewsettings}, { Style => "pageheader" });
10140 $kiriwrite_presmodule->addlinebreak();
10141 $kiriwrite_presmodule->addlinebreak();
10142 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{currentsettings});
10143 $kiriwrite_presmodule->addlinebreak();
10144 $kiriwrite_presmodule->addlinebreak();
10145 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10147 $kiriwrite_presmodule->startheader();
10148 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10149 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10150 $kiriwrite_presmodule->endheader();
10152 $kiriwrite_presmodule->startrow();
10153 $kiriwrite_presmodule->addcell("tablecellheader");
10154 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10155 $kiriwrite_presmodule->endcell();
10156 $kiriwrite_presmodule->addcell("tablecellheader");
10157 $kiriwrite_presmodule->endcell();
10158 $kiriwrite_presmodule->endrow();
10160 $kiriwrite_presmodule->startrow();
10161 $kiriwrite_presmodule->addcell("tablecell1");
10162 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10163 $kiriwrite_presmodule->endcell();
10164 $kiriwrite_presmodule->addcell("tablecell2");
10165 $kiriwrite_presmodule->addtext($settings_directory_db);
10166 $kiriwrite_presmodule->endcell();
10167 $kiriwrite_presmodule->endrow();
10169 $kiriwrite_presmodule->startrow();
10170 $kiriwrite_presmodule->addcell("tablecell1");
10171 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
10172 $kiriwrite_presmodule->endcell();
10173 $kiriwrite_presmodule->addcell("tablecell2");
10174 $kiriwrite_presmodule->addtext($settings_directory_output);
10175 $kiriwrite_presmodule->endcell();
10176 $kiriwrite_presmodule->endrow();
10178 $kiriwrite_presmodule->startrow();
10179 $kiriwrite_presmodule->addcell("tablecell1");
10180 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
10181 $kiriwrite_presmodule->endcell();
10182 $kiriwrite_presmodule->addcell("tablecell2");
10183 $kiriwrite_presmodule->addtext($settings_noncgi_images);
10184 $kiriwrite_presmodule->endcell();
10185 $kiriwrite_presmodule->endrow();
10187 $kiriwrite_presmodule->startrow();
10188 $kiriwrite_presmodule->addcell("tablecellheader");
10189 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
10190 $kiriwrite_presmodule->endcell();
10191 $kiriwrite_presmodule->addcell("tablecellheader");
10192 $kiriwrite_presmodule->endcell();
10193 $kiriwrite_presmodule->endrow();
10195 $kiriwrite_presmodule->startrow();
10196 $kiriwrite_presmodule->addcell("tablecell1");
10197 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
10198 $kiriwrite_presmodule->endcell();
10199 $kiriwrite_presmodule->addcell("tablecell2");
10200 $kiriwrite_presmodule->addtext($settings_system_datetime);
10201 $kiriwrite_presmodule->endcell();
10202 $kiriwrite_presmodule->endrow();
10204 $kiriwrite_presmodule->startrow();
10205 $kiriwrite_presmodule->addcell("tablecellheader");
10206 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
10207 $kiriwrite_presmodule->endcell();
10208 $kiriwrite_presmodule->addcell("tablecellheader");
10209 $kiriwrite_presmodule->endcell();
10210 $kiriwrite_presmodule->endrow();
10212 $kiriwrite_presmodule->startrow();
10213 $kiriwrite_presmodule->addcell("tablecell1");
10214 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
10215 $kiriwrite_presmodule->endcell();
10216 $kiriwrite_presmodule->addcell("tablecell2");
10217 $kiriwrite_presmodule->addtext($settings_system_language);
10218 $kiriwrite_presmodule->endcell();
10219 $kiriwrite_presmodule->endrow();
10221 $kiriwrite_presmodule->startrow();
10222 $kiriwrite_presmodule->addcell("tablecellheader");
10223 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
10224 $kiriwrite_presmodule->endcell();
10225 $kiriwrite_presmodule->addcell("tablecellheader");
10226 $kiriwrite_presmodule->endcell();
10227 $kiriwrite_presmodule->endrow();
10229 $kiriwrite_presmodule->startrow();
10230 $kiriwrite_presmodule->addcell("tablecell1");
10231 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
10232 $kiriwrite_presmodule->endcell();
10233 $kiriwrite_presmodule->addcell("tablecell2");
10234 $kiriwrite_presmodule->addtext($settings_system_presentation);
10235 $kiriwrite_presmodule->endcell();
10236 $kiriwrite_presmodule->endrow();
10238 $kiriwrite_presmodule->startrow();
10239 $kiriwrite_presmodule->addcell("tablecell1");
10240 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
10241 $kiriwrite_presmodule->endcell();
10242 $kiriwrite_presmodule->addcell("tablecell2");
10243 $kiriwrite_presmodule->addtext($settings_system_database);
10244 $kiriwrite_presmodule->endcell();
10245 $kiriwrite_presmodule->endrow();
10247 $kiriwrite_presmodule->endtable();
10249 $kiriwrite_presmodule->addlinebreak();
10250 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{altersettings});
10252 return $kiriwrite_presmodule->grab();
10256 sub kiriwrite_settings_edit{
10257 #################################################################################
10258 # kiriwrite_settings_edit: Edits the options. #
10262 # kiriwrite_settings_edit(options); #
10264 # options Specifies the following options in any order. #
10266 # DatabaseDirectory Specifies the new database directory to use. #
10267 # OutputDirectory Specifies the new output directory to use. #
10268 # ImagesURIPath Specifies the new URI path for images. #
10269 # DateTimeFormat Specifies the new date and time format. #
10270 # SystemLanguage Specifies the new language to use for Kiriwrite. #
10271 # PrsentationModule Specifies the new presentation module to use for #
10273 # DatabaseModule Specifies the new database module to use for Kiriwrite. #
10275 # Options for server-based database modules. #
10277 # DatabaseServer Specifies the database server to use. #
10278 # DaravasePort Specifies the port the database server is running on. #
10279 # DatabaseProtocol Specifies the protocol the database server is using. #
10280 # DatabaseSQLDatabase Specifies the SQL database name to use. #
10281 # DatabaseUsername Specifies the database server username. #
10282 # DatabasePasswordKeep Keeps the current password in the configuration file. #
10283 # DatabasePassword Specifies the password for the database server username.#
10284 # DatabaseTablePrefix Specifies the prefix used for tables. #
10285 #################################################################################
10287 # Get the values that have been passed to the subroutine.
10289 my ($passedoptions) = @_;
10291 # Get the values from the hash.
10293 my $settings_dbdirectory = $passedoptions->{"DatabaseDirectory"};
10294 my $settings_outputdirectory = $passedoptions->{"OutputDirectory"};
10295 my $settings_imagesuri = $passedoptions->{"ImagesURIPath"};
10296 my $settings_datetimeformat = $passedoptions->{"DateTimeFormat"};
10297 my $settings_languagesystem = $passedoptions->{"SystemLanguage"};
10298 my $settings_presmodule = $passedoptions->{"PresentationModule"};
10299 my $settings_dbmodule = $passedoptions->{"DatabaseModule"};
10301 my $settings_database_server = $passedoptions->{"DatabaseServer"};
10302 my $settings_database_port = $passedoptions->{"DatabasePort"};
10303 my $settings_database_protocol = $passedoptions->{"DatabaseProtocol"};
10304 my $settings_database_sqldatabase = $passedoptions->{"DatabaseSQLDatabase"};
10305 my $settings_database_username = $passedoptions->{"DatabaseUsername"};
10306 my $settings_database_passwordkeep = $passedoptions->{"DatabasePasswordKeep"};
10307 my $settings_database_password = $passedoptions->{"DatabasePassword"};
10308 my $settings_database_tableprefix = $passedoptions->{"DatabaseTablePrefix"};
10310 my $confirm = $passedoptions->{"Confirm"};
10312 # Load the required Perl modules.
10314 my $xsl = XML::Simple->new();
10318 # If the confirm value is blank, then set the confirm
10325 if ($confirm eq "1"){
10327 # The action to edit the settings has been confirmed.
10328 # Start by checking each variable about to be placed
10329 # in the settings file is valid.
10331 # Deinfe some variables for later.
10333 my @kiriwrite_new_settings;
10335 # Check the length of the directory names.
10337 kiriwrite_variablecheck($settings_dbdirectory, "maxlength", 64, 0);
10338 kiriwrite_variablecheck($settings_outputdirectory, "maxlength", 64, 0);
10339 kiriwrite_variablecheck($settings_imagesuri, "maxlength", 512, 0);
10340 kiriwrite_variablecheck($settings_datetimeformat, "maxlength", 32, 0);
10342 kiriwrite_variablecheck($settings_languagesystem, "language_filename", "", 0);
10344 # Check the module names to see if they're valid.
10346 my $kiriwrite_presmodule_modulename_check = kiriwrite_variablecheck($settings_presmodule, "module", 0, 1);
10347 my $kiriwrite_dbmodule_modulename_check = kiriwrite_variablecheck($settings_dbmodule, "module", 0, 1);
10349 if ($kiriwrite_presmodule_modulename_check eq 1){
10351 # The presentation module name is blank, so return
10354 kiriwrite_error("presmoduleblank");
10358 if ($kiriwrite_presmodule_modulename_check eq 2){
10360 # The presentation module name is invalid, so return
10363 kiriwrite_error("presmoduleinvalid");
10367 if ($kiriwrite_dbmodule_modulename_check eq 1){
10369 # The database module name is blank, so return
10372 kiriwrite_error("dbmoduleblank");
10376 if ($kiriwrite_dbmodule_modulename_check eq 2){
10378 # The database module name is invalid, so return
10381 kiriwrite_error("dbmoduleinvalid");
10385 # Check if the directory names only contain letters and numbers and
10386 # return a specific error if they don't.
10388 my $kiriwrite_dbdirectory_check = kiriwrite_variablecheck($settings_dbdirectory, "directory", 0, 1);
10389 my $kiriwrite_outputdirectory_check = kiriwrite_variablecheck($settings_outputdirectory, "directory", 0, 1);
10390 kiriwrite_variablecheck($settings_datetimeformat, "datetime", 0, 0);
10392 if ($kiriwrite_dbdirectory_check eq 1){
10394 # The database directory name is blank, so return
10397 kiriwrite_error("dbdirectoryblank");
10399 } elsif ($kiriwrite_dbdirectory_check eq 2){
10401 # The database directory name is invalid, so return
10404 kiriwrite_error("dbdirectoryinvalid");
10408 if ($kiriwrite_outputdirectory_check eq 1){
10410 # The output directory name is blank, so return
10413 kiriwrite_error("outputdirectoryblank");
10415 } elsif ($kiriwrite_outputdirectory_check eq 2){
10417 # The output directory name is invalid, so return
10420 kiriwrite_error("outputdirectoryinvalid");
10424 # Check if the presentation module with the filename given exists.
10426 my $presmodule_exists = kiriwrite_fileexists("Modules/Presentation/" . $settings_presmodule . ".pm");
10428 if ($presmodule_exists eq 1){
10430 # The presentation module does not exist so return an error.
10432 kiriwrite_error("presmodulemissing");
10436 # Check if the database module with the filename given exists.
10438 my $dbmodule_exists = kiriwrite_fileexists("Modules/Database/" . $settings_dbmodule . ".pm");
10440 if ($dbmodule_exists eq 1){
10442 # The database module does not exist so return an error.
10444 kiriwrite_error("dbmodulemissing");
10448 # Check if the language filename given exists.
10450 my $languagefile_exists = kiriwrite_fileexists("lang/" . $settings_languagesystem . ".xml");
10452 if ($languagefile_exists eq 1){
10454 # The language filename given does not exist so return an error.
10456 kiriwrite_error("languagefilenamemissing");
10460 # Check the database server options to see if they are valid.
10462 my $kiriwrite_databaseserver_length_check = kiriwrite_variablecheck($settings_database_server, "maxlength", 128, 1);
10463 my $kiriwrite_databaseserver_lettersnumbers_check = kiriwrite_variablecheck($settings_database_server, "lettersnumbers", 0, 1);
10464 my $kiriwrite_databaseport_length_check = kiriwrite_variablecheck($settings_database_port, "maxlength", 5, 1);
10465 my $kiriwrite_databaseport_numbers_check = kiriwrite_variablecheck($settings_database_port, "numbers", 0, 1);
10466 my $kiriwrite_databaseport_port_check = kiriwrite_variablecheck($settings_database_port, "port", 0, 1);
10467 my $kiriwrite_databaseprotocol_length_check = kiriwrite_variablecheck($settings_database_protocol, "maxlength", 5, 1);
10468 my $kiriwrite_databaseprotocol_protocol_check = kiriwrite_variablecheck($settings_database_protocol, "serverprotocol", 0, 1);
10469 my $kiriwrite_databasename_length_check = kiriwrite_variablecheck($settings_database_sqldatabase, "maxlength", 32, 1);
10470 my $kiriwrite_databasename_lettersnumbers_check = kiriwrite_variablecheck($settings_database_sqldatabase, "lettersnumbers", 0, 1);
10471 my $kiriwrite_databaseusername_length_check = kiriwrite_variablecheck($settings_database_username, "maxlength", 16, 1);
10472 my $kiriwrite_databaseusername_lettersnumbers_check = kiriwrite_variablecheck($settings_database_username, "lettersnumbers", 0, 1);
10473 my $kiriwrite_databasepassword_length_check = kiriwrite_variablecheck($settings_database_password, "maxlength", 64, 1);
10474 my $kiriwrite_databasetableprefix_length_check = kiriwrite_variablecheck($settings_database_tableprefix, "maxlength", 16, 1);
10475 my $kiriwrite_databasetableprefix_lettersnumbers_check = kiriwrite_variablecheck($settings_database_tableprefix, "lettersnumbers", 0, 1);
10477 if ($kiriwrite_databaseserver_length_check eq 1){
10479 # The length of the database server name is too long so
10482 kiriwrite_error("servernametoolong");
10486 if ($kiriwrite_databaseserver_lettersnumbers_check eq 1){
10488 # The database server name contains characters other
10489 # than letters and numbers, so return an error.
10491 kiriwrite_error("servernameinvalid");
10495 if ($kiriwrite_databaseport_length_check eq 1){
10497 # The database port number length is too long so return
10500 kiriwrite_error("serverportnumbertoolong");
10504 if ($kiriwrite_databaseport_numbers_check eq 1){
10506 # The database port number contains characters other
10507 # than numbers so return an error.
10509 kiriwrite_error("serverportnumberinvalidcharacters");
10513 if ($kiriwrite_databaseport_port_check eq 1){
10515 # The database port number given is invalid so return
10518 kiriwrite_error("serverportnumberinvalid");
10522 if ($kiriwrite_databaseprotocol_length_check eq 1){
10524 # The database protocol name given is too long so
10527 kiriwrite_error("serverprotocolnametoolong");
10531 if ($kiriwrite_databaseprotocol_protocol_check eq 1){
10533 # The server protcol given is invalid so return
10536 kiriwrite_error("serverprotocolinvalid");
10540 if ($kiriwrite_databasename_length_check eq 1){
10542 # The SQL database name is too long so return
10545 kiriwrite_error("serverdatabasenametoolong");
10549 if ($kiriwrite_databasename_lettersnumbers_check eq 1){
10551 # The database name contains invalid characters
10552 # so return an error.
10554 kiriwrite_error("serverdatabasenameinvalid");
10558 if ($kiriwrite_databaseusername_length_check eq 1){
10560 # The database username given is too long so
10563 kiriwrite_error("serverdatabaseusernametoolong");
10567 if ($kiriwrite_databaseusername_lettersnumbers_check eq 1){
10569 # The database username contains invalid characters
10570 # so return an error.
10572 kiriwrite_error("serverdatabaseusernameinvalid");
10576 if ($kiriwrite_databasepassword_length_check eq 1){
10578 # The database password given is too long so return
10581 kiriwrite_error("serverdatabasepasswordtoolong");
10585 if ($kiriwrite_databasetableprefix_length_check eq 1){
10587 # The database table prefix given is too long so
10590 kiriwrite_error("serverdatabasetableprefixtoolong");
10594 if ($kiriwrite_databasetableprefix_lettersnumbers_check eq 1){
10596 # The database table prefix given contains invalid
10597 # characters so return an error.
10599 kiriwrite_error("serverdatabasetableprefixinvalid");
10603 # Check if the current password should be kept.
10605 if ($settings_database_passwordkeep eq "on"){
10607 # The current password in the configuration file should be used.
10609 $settings_database_password = $kiriwrite_config{"database_password"};
10613 # Write the new settings to the XML file.
10615 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 });
10617 # Write a confirmation message.
10619 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingsedited}, { Style => "pageheader" });
10620 $kiriwrite_presmodule->addlinebreak();
10621 $kiriwrite_presmodule->addlinebreak();
10622 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{settingseditedmessage});
10623 $kiriwrite_presmodule->addlinebreak();
10624 $kiriwrite_presmodule->addlinebreak();
10625 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
10627 return $kiriwrite_presmodule->grab();
10631 # Get the list of languages available.
10634 my @language_directory = "";
10636 my $language_filename = "";
10637 my $language_file_xml = "";
10638 my $language_file_systemname = "";
10639 my $language_file_localname = "";
10640 my $language_file_seek = 0;
10641 my $language_flie_dot = 0;
10642 my $language_file_length = 0;
10643 my $language_file_count = 0;
10644 my $language_file_char = "";
10645 my $language_file_friendly = "";
10646 my $language_config = $kiriwrite_config{"system_language"};
10648 tie(%language_list, 'Tie::IxHash');
10650 opendir(LANGUAGEDIR, "lang");
10651 @language_directory = grep /m*\.xml$/, readdir(LANGUAGEDIR);
10652 closedir(LANGUAGEDIR);
10654 # Process each language by loading the XML configuration file
10655 # used for each language and then get the System name and
10656 # the local name of the language.
10658 foreach $language_filename (@language_directory){
10660 # Load the language file currently selected.
10662 $language_file_xml = $xsl->XMLin("lang" . '/' . $language_filename, SuppressEmpty => 1);
10664 # Get the system name and the local name of the language.
10666 $language_file_localname = $language_file_xml -> {about} -> {name};
10668 # Check if either the system name or the local name of the language
10669 # is blank and if it is, then don't add the language to the list.
10671 if ($language_file_localname eq ""){
10673 # The system name or the local name is blank so don't add
10674 # the language to the list.
10678 # Get the 'friendly' name of the language file name (basically
10679 # remove the .xml part from the filename.
10681 $language_file_length = length($language_filename);
10685 # Get a character from the language filename and currently
10686 # set by the seek counter.
10688 $language_file_char = substr($language_filename, $language_file_seek, 1);
10690 # Check if the character is a dot and if it is then set the
10691 # last dot value to the seek counter value.
10693 if ($language_file_char eq "."){
10695 # Current chatacter is a dot so set the last dot value
10696 # to what is currently the seek counter.
10698 $language_flie_dot = $language_file_seek;
10702 # Current character is not a dot, so do nothing.
10706 # Increment the seek counter.
10708 $language_file_seek++;
10710 } until ($language_file_seek eq $language_file_length);
10712 # Reset the seek counter.
10714 $language_file_seek = 0;
10716 # Process the file name again and this time process the file
10717 # name until it reaches the last dot found.
10721 # Get the character the seek counter is currently set at.
10723 $language_file_char = substr($language_filename, $language_file_seek, 1);
10725 # Append the character to the friendly file name.
10727 $language_file_friendly = $language_file_friendly . $language_file_char;
10729 # Increment the seek counter.
10731 $language_file_seek++;
10733 } until ($language_file_seek eq $language_flie_dot);
10735 # Append the language to the available languages list.
10737 $language_list{$language_file_count}{Filename} = $language_file_friendly;
10738 $language_list{$language_file_count}{Name} = $language_file_localname;
10739 $language_file_count++;
10741 # Reset certain counters and values before continuing.
10743 $language_file_seek = 0;
10744 $language_flie_dot = 0;
10745 $language_file_length = 0;
10746 $language_file_char = "";
10747 $language_file_friendly = "";
10753 # Get the list of presentation modules available.
10755 my %presmodule_list;
10756 my @presmodule_directory;
10758 my $presmodule_file = "";
10759 my $presmodule_char = "";
10760 my $presmodule_dot = 0;
10761 my $presmodule_firstdot = 0;
10762 my $presmodule_firstdotfound = "";
10763 my $presmodule_seek = 0;
10764 my $presmodule_length = 0;
10765 my $presmodule_count = 0;
10766 my $presmodule_friendly = "";
10767 my $presmodule_selectlist = "";
10768 my $presmodule_config = $kiriwrite_config{"system_presmodule"};
10770 # Open and get the list of presentation modules (perl modules) by filtering
10773 opendir(OUTPUTSYSTEMDIR, "Modules/Presentation");
10774 @presmodule_directory = grep /m*\.pm$/, readdir(OUTPUTSYSTEMDIR);
10775 closedir(OUTPUTSYSTEMDIR);
10777 # Process each presentation module and add them to the list of available
10778 # presentation modules.
10780 foreach $presmodule_file (@presmodule_directory){
10782 # Get the length of the presentation module (perl module) filename.
10784 $presmodule_length = length($presmodule_file);
10786 # Get the friendly name of the Perl module (by getting rid of the
10787 # .pm part of the filename).
10791 $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10793 # Check if the current character is a dot and if it is then
10794 # set the last dot found number to the current seek number.
10796 if ($presmodule_char eq "."){
10798 # Put the seek value as the last dot found number.
10800 $presmodule_dot = $presmodule_seek;
10804 # Increment the seek counter.
10806 $presmodule_seek++;
10808 } until ($presmodule_seek eq $presmodule_length);
10810 # Reset the seek counter as it is going to be used again.
10812 $presmodule_seek = 0;
10814 # Get the friendly name of the Perl module by the processing the file
10815 # name to the last dot the previous 'do' tried to find.
10819 # Get the character the seek counter is currently set at.
10821 $presmodule_char = substr($presmodule_file, $presmodule_seek, 1);
10823 # Append the character to the friendly name of the presentation module.
10825 $presmodule_friendly = $presmodule_friendly . $presmodule_char;
10827 # Increment the seek counter.
10829 $presmodule_seek++;
10831 } until ($presmodule_seek eq $presmodule_dot);
10833 # Append the option to tbe list of available presentation modules.
10835 $presmodule_list{$presmodule_count}{Filename} = $presmodule_friendly;
10837 # Reset the following values.
10839 $presmodule_seek = 0;
10840 $presmodule_length = 0;
10841 $presmodule_char = "";
10842 $presmodule_friendly = "";
10843 $presmodule_count++;
10847 # Get the list of database modules available.
10850 my @dbmodule_directory;
10852 my $dbmodule_file = "";
10853 my $dbmodule_char = "";
10854 my $dbmodule_dot = 0;
10855 my $dbmodule_firstdot = 0;
10856 my $dbmodule_firstdotfound = "";
10857 my $dbmodule_seek = 0;
10858 my $dbmodule_length = 0;
10859 my $dbmodule_count = 0;
10860 my $dbmodule_friendly = "";
10861 my $dbmodule_selectlist = "";
10862 my $dbmodule_config = $kiriwrite_config{"system_dbmodule"};
10864 # Open and get the list of presentation modules (perl modules) by filtering
10867 opendir(DATABASEDIR, "Modules/Database");
10868 @dbmodule_directory = grep /m*\.pm$/, readdir(DATABASEDIR);
10869 closedir(DATABASEDIR);
10871 # Process each presentation module and add them to the list of available
10872 # presentation modules.
10874 foreach $dbmodule_file (@dbmodule_directory){
10876 # Get the length of the database module (perl module) filename.
10878 $dbmodule_length = length($dbmodule_file);
10880 # Get the friendly name of the Perl module (by getting rid of the
10881 # .pm part of the filename).
10885 $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10887 # Check if the current character is a dot and if it is then
10888 # set the last dot found number to the current seek number.
10890 if ($dbmodule_char eq "."){
10892 # Put the seek value as the last dot found number.
10894 $dbmodule_dot = $dbmodule_seek;
10898 # Increment the seek counter.
10902 } until ($dbmodule_seek eq $dbmodule_length);
10904 # Reset the seek counter as it is going to be used again.
10906 $dbmodule_seek = 0;
10908 # Get the friendly name of the Perl module by the processing the file
10909 # name to the last dot the previous 'do' tried to find.
10913 # Get the character the seek counter is currently set at.
10915 $dbmodule_char = substr($dbmodule_file, $dbmodule_seek, 1);
10917 # Append the character to the friendly name of the presentation module.
10919 $dbmodule_friendly = $dbmodule_friendly . $dbmodule_char;
10921 # Increment the seek counter.
10925 } until ($dbmodule_seek eq $dbmodule_dot);
10927 # Append the option to tbe list of available database modules.
10929 $dbmodule_list{$dbmodule_count}{Filename} = $dbmodule_friendly;
10931 # Reset the following values.
10933 $dbmodule_seek = 0;
10934 $dbmodule_length = 0;
10935 $dbmodule_char = "";
10936 $dbmodule_friendly = "";
10941 # Get the directory settings.
10943 my $directory_settings_database = $kiriwrite_config{"directory_data_db"};
10944 my $directory_settings_output = $kiriwrite_config{"directory_data_output"};
10945 my $directory_settings_imagesuri = $kiriwrite_config{"directory_noncgi_images"};
10946 my $datetime_setting = $kiriwrite_config{"system_datetime"};
10948 my $database_server = $kiriwrite_config{"database_server"};
10949 my $database_port = $kiriwrite_config{"database_port"};
10950 my $database_protocol = $kiriwrite_config{"database_protocol"};
10951 my $database_sqldatabase = $kiriwrite_config{"database_sqldatabase"};
10952 my $database_username = $kiriwrite_config{"database_username"};
10953 my $database_passwordhash = $kiriwrite_config{"database_passwordhash"};
10954 my $database_password = $kiriwrite_config{"database_password"};
10955 my $database_prefix = $kiriwrite_config{"database_tableprefix"};
10957 # Print out a form for editing the settings.
10959 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{editsettings}, { Style => "pageheader" });
10960 $kiriwrite_presmodule->addlinebreak();
10961 $kiriwrite_presmodule->addlinebreak();
10962 $kiriwrite_presmodule->addboldtext($kiriwrite_lang->{setting}->{warning});
10963 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{warningmessage});
10964 $kiriwrite_presmodule->addlinebreak();
10965 $kiriwrite_presmodule->addlinebreak();
10967 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
10968 $kiriwrite_presmodule->startbox();
10969 $kiriwrite_presmodule->addhiddendata("mode", "settings");
10970 $kiriwrite_presmodule->addhiddendata("action", "edit");
10971 $kiriwrite_presmodule->addhiddendata("confirm", 1);
10973 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
10975 $kiriwrite_presmodule->startheader();
10976 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
10977 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
10978 $kiriwrite_presmodule->endheader();
10980 $kiriwrite_presmodule->startrow();
10981 $kiriwrite_presmodule->addcell("tablecellheader");
10982 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{directories});
10983 $kiriwrite_presmodule->endcell();
10984 $kiriwrite_presmodule->addcell("tablecellheader");
10985 $kiriwrite_presmodule->endcell();
10986 $kiriwrite_presmodule->endrow();
10988 $kiriwrite_presmodule->startrow();
10989 $kiriwrite_presmodule->addcell("tablecell1");
10990 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasedirectory});
10991 $kiriwrite_presmodule->endcell();
10992 $kiriwrite_presmodule->addcell("tablecell2");
10993 $kiriwrite_presmodule->addinputbox("databasedir", { Size => 32, MaxLength => 64, Value => $directory_settings_database });
10994 $kiriwrite_presmodule->endcell();
10995 $kiriwrite_presmodule->endrow();
10997 $kiriwrite_presmodule->startrow();
10998 $kiriwrite_presmodule->addcell("tablecell1");
10999 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{outputdirectory});
11000 $kiriwrite_presmodule->endcell();
11001 $kiriwrite_presmodule->addcell("tablecell2");
11002 $kiriwrite_presmodule->addinputbox("outputdir", { Size => 32, MaxLength => 64, Value => $directory_settings_output });
11003 $kiriwrite_presmodule->endcell();
11004 $kiriwrite_presmodule->endrow();
11006 $kiriwrite_presmodule->startrow();
11007 $kiriwrite_presmodule->addcell("tablecell1");
11008 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{imagesuripath});
11009 $kiriwrite_presmodule->endcell();
11010 $kiriwrite_presmodule->addcell("tablecell2");
11011 $kiriwrite_presmodule->addinputbox("imagesuripath", { Size => 32, MaxLength => 64, Value => $directory_settings_imagesuri });
11012 $kiriwrite_presmodule->endcell();
11013 $kiriwrite_presmodule->endrow();
11015 $kiriwrite_presmodule->startrow();
11016 $kiriwrite_presmodule->addcell("tablecellheader");
11017 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{date});
11018 $kiriwrite_presmodule->endcell();
11019 $kiriwrite_presmodule->addcell("tablecellheader");
11020 $kiriwrite_presmodule->endcell();
11021 $kiriwrite_presmodule->endrow();
11023 $kiriwrite_presmodule->startrow();
11024 $kiriwrite_presmodule->addcell("tablecell1");
11025 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{dateformat});
11026 $kiriwrite_presmodule->endcell();
11027 $kiriwrite_presmodule->addcell("tablecell2");
11028 $kiriwrite_presmodule->addinputbox("datetime", { Size => 32, MaxLength => 64, Value => $datetime_setting });
11029 $kiriwrite_presmodule->addlinebreak();
11030 $kiriwrite_presmodule->addlinebreak();
11031 $kiriwrite_presmodule->startbox("datalist");
11033 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleday});
11034 $kiriwrite_presmodule->addlinebreak();
11035 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleday});
11036 $kiriwrite_presmodule->addlinebreak();
11037 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlemonth});
11038 $kiriwrite_presmodule->addlinebreak();
11039 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublemonth});
11040 $kiriwrite_presmodule->addlinebreak();
11041 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleyear});
11042 $kiriwrite_presmodule->addlinebreak();
11043 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleyear});
11044 $kiriwrite_presmodule->addlinebreak();
11045 $kiriwrite_presmodule->addlinebreak();
11046 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlehour});
11047 $kiriwrite_presmodule->addlinebreak();
11048 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublehour});
11049 $kiriwrite_presmodule->addlinebreak();
11050 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singleminute});
11051 $kiriwrite_presmodule->addlinebreak();
11052 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doubleminute});
11053 $kiriwrite_presmodule->addlinebreak();
11054 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{singlesecond});
11055 $kiriwrite_presmodule->addlinebreak();
11056 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{doublesecond});
11057 $kiriwrite_presmodule->addlinebreak();
11058 $kiriwrite_presmodule->addlinebreak();
11059 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{othercharacters});
11060 $kiriwrite_presmodule->endbox();
11061 $kiriwrite_presmodule->endcell();
11062 $kiriwrite_presmodule->endrow();
11064 $kiriwrite_presmodule->startrow();
11065 $kiriwrite_presmodule->addcell("tablecellheader");
11066 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{language});
11067 $kiriwrite_presmodule->endcell();
11068 $kiriwrite_presmodule->addcell("tablecellheader");
11069 $kiriwrite_presmodule->endcell();
11070 $kiriwrite_presmodule->endrow();
11072 $kiriwrite_presmodule->startrow();
11073 $kiriwrite_presmodule->addcell("tablecell1");
11074 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{systemlanguage});
11075 $kiriwrite_presmodule->endcell();
11076 $kiriwrite_presmodule->addcell("tablecell2");
11078 $kiriwrite_presmodule->addselectbox("language");
11080 # Process the list of available languages.
11082 foreach $language (keys %language_list){
11084 # Check if the language filename matches the filename in the configuration
11087 if ($language_list{$language}{Filename} eq $language_config){
11089 $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} , Selected => 1 });
11093 $kiriwrite_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} });
11099 $kiriwrite_presmodule->endselectbox();
11101 $kiriwrite_presmodule->startrow();
11102 $kiriwrite_presmodule->addcell("tablecellheader");
11103 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{modules});
11104 $kiriwrite_presmodule->endcell();
11105 $kiriwrite_presmodule->addcell("tablecellheader");
11106 $kiriwrite_presmodule->endcell();
11107 $kiriwrite_presmodule->endrow();
11109 $kiriwrite_presmodule->startrow();
11110 $kiriwrite_presmodule->addcell("tablecell1");
11111 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{presentationmodule});
11112 $kiriwrite_presmodule->endcell();
11113 $kiriwrite_presmodule->addcell("tablecell2");
11115 $kiriwrite_presmodule->addselectbox("presmodule");
11117 # Process the list of available presentation modules.
11119 foreach $presmodule (keys %presmodule_list){
11121 # Check if the presentation module fileanme matches the filename in the
11122 # configuration file.
11124 if ($presmodule_list{$presmodule}{Filename} eq $presmodule_config){
11126 $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} , Selected => 1 });
11130 $kiriwrite_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} });
11136 $kiriwrite_presmodule->endselectbox();
11138 $kiriwrite_presmodule->endcell();
11139 $kiriwrite_presmodule->endrow();
11141 $kiriwrite_presmodule->startrow();
11142 $kiriwrite_presmodule->addcell("tablecell1");
11143 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasemodule});
11144 $kiriwrite_presmodule->endcell();
11145 $kiriwrite_presmodule->addcell("tablecell2");
11147 # Process the list of available database modules.
11149 $kiriwrite_presmodule->addselectbox("dbmodule");
11151 foreach $dbmodule (keys %dbmodule_list){
11153 # Check if the database module fileanme matches the filename in the
11154 # configuration file.
11156 if ($dbmodule_list{$dbmodule}{Filename} eq $dbmodule_config){
11158 $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} , Selected => 1 });
11162 $kiriwrite_presmodule->addoption($dbmodule_list{$dbmodule}{Filename}, { Value => $dbmodule_list{$dbmodule}{Filename} });
11169 $kiriwrite_presmodule->endselectbox();
11171 $kiriwrite_presmodule->endcell();
11172 $kiriwrite_presmodule->endrow();
11174 $kiriwrite_presmodule->startrow();
11175 $kiriwrite_presmodule->addcell("tablecell1");
11176 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseserver});
11177 $kiriwrite_presmodule->endcell();
11178 $kiriwrite_presmodule->addcell("tablecell2");
11179 $kiriwrite_presmodule->addinputbox("database_server", { Size => 32, MaxLength => 128, Value => $database_server });
11180 $kiriwrite_presmodule->endcell();
11181 $kiriwrite_presmodule->endrow();
11183 $kiriwrite_presmodule->startrow();
11184 $kiriwrite_presmodule->addcell("tablecell1");
11185 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseport});
11186 $kiriwrite_presmodule->endcell();
11187 $kiriwrite_presmodule->addcell("tablecell2");
11188 $kiriwrite_presmodule->addinputbox("database_port", { Size => 5, MaxLength => 5, Value => $database_port });
11189 $kiriwrite_presmodule->endcell();
11190 $kiriwrite_presmodule->endrow();
11192 $kiriwrite_presmodule->startrow();
11193 $kiriwrite_presmodule->addcell("tablecell1");
11194 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseprotocol});
11195 $kiriwrite_presmodule->endcell();
11196 $kiriwrite_presmodule->addcell("tablecell2");
11198 # Check if TCP is being used.
11200 $kiriwrite_presmodule->addselectbox("database_protocol");
11202 if ($database_protocol eq "tcp"){
11204 # The TCP protocol is selected so have the TCP option selected.
11206 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp", Selected => 1});
11210 # The TCP protocol is not selected.
11212 $kiriwrite_presmodule->addoption("TCP", { Value => "tcp"});
11216 # Check if UDP is being used.
11218 if ($database_protocol eq "udp"){
11220 # The UDP protocol is selected so have the UDP option selected.
11222 $kiriwrite_presmodule->addoption("UDP", { Value => "udp", Selected => 1});
11226 # The UDP protocol is not selected.
11228 $kiriwrite_presmodule->addoption("UDP", { Value => "udp"});
11232 $kiriwrite_presmodule->endselectbox();
11234 $kiriwrite_presmodule->endcell();
11235 $kiriwrite_presmodule->endrow();
11237 $kiriwrite_presmodule->startrow();
11238 $kiriwrite_presmodule->addcell("tablecell1");
11239 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasename});
11240 $kiriwrite_presmodule->endcell();
11241 $kiriwrite_presmodule->addcell("tablecell2");
11242 $kiriwrite_presmodule->addinputbox("database_sqldatabase", { Size => 32, MaxLength => 32, Value => $database_sqldatabase });
11243 $kiriwrite_presmodule->endcell();
11244 $kiriwrite_presmodule->endrow();
11246 $kiriwrite_presmodule->startrow();
11247 $kiriwrite_presmodule->addcell("tablecell1");
11248 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databaseusername});
11249 $kiriwrite_presmodule->endcell();
11250 $kiriwrite_presmodule->addcell("tablecell2");
11251 $kiriwrite_presmodule->addinputbox("database_username", { Size => 16, MaxLength => 16, Value => $database_username });
11252 $kiriwrite_presmodule->endcell();
11253 $kiriwrite_presmodule->endrow();
11255 $kiriwrite_presmodule->startrow();
11256 $kiriwrite_presmodule->addcell("tablecell1");
11257 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{databasepassword});
11258 $kiriwrite_presmodule->endcell();
11259 $kiriwrite_presmodule->addcell("tablecell2");
11260 $kiriwrite_presmodule->addinputbox("database_password", { Size => 16, MaxLength => 64, Password => 1 });
11261 $kiriwrite_presmodule->addtext(" ");
11262 $kiriwrite_presmodule->addcheckbox("database_password_keep", { OptionDescription => "Keep the current password", Checked => 1 });
11263 $kiriwrite_presmodule->endcell();
11264 $kiriwrite_presmodule->endrow();
11266 $kiriwrite_presmodule->startrow();
11267 $kiriwrite_presmodule->addcell("tablecell1");
11268 $kiriwrite_presmodule->addtext($kiriwrite_lang->{setting}->{tableprefix});
11269 $kiriwrite_presmodule->endcell();
11270 $kiriwrite_presmodule->addcell("tablecell2");
11271 $kiriwrite_presmodule->addinputbox("database_tableprefix", { Size => 16, MaxLength => 16, Value => $database_prefix });
11272 $kiriwrite_presmodule->endcell();
11273 $kiriwrite_presmodule->endrow();
11275 $kiriwrite_presmodule->endtable();
11277 $kiriwrite_presmodule->addlinebreak();
11278 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{setting}->{changesettingsbutton});
11279 $kiriwrite_presmodule->addtext(" | ");
11280 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
11281 $kiriwrite_presmodule->addtext(" | ");
11282 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{returnsettingslist} });
11283 $kiriwrite_presmodule->endbox();
11284 $kiriwrite_presmodule->endform();
11286 return $kiriwrite_presmodule->grab();
11290 sub kiriwrite_settings_load{
11291 #################################################################################
11292 # kiriwrite_settings_load: Load the configuration settings into the global #
11297 # kiriwrite_settings_load(); #
11298 #################################################################################
11300 # Load the required Perl modules.
11302 use XML::Simple qw(XMLin);
11303 my $xsl = XML::Simple->new();
11305 # Check if the Kiriwrite configuration file exists before using it and
11306 # return an critical error if it doesn't exist.
11308 my $kiriwrite_conf_exist = kiriwrite_fileexists("kiriwrite.xml");
11310 if ($kiriwrite_conf_exist eq 1){
11312 # The configuration really does not exist so return an critical error.
11314 kiriwrite_critical("configfilemissing");
11318 # Check if the Kiriwrite configuration file has valid permission settings
11319 # before using it and return an critical error if it doesn't have the
11320 # valid permission settings.
11322 my $kiriwrite_conf_permissions = kiriwrite_filepermissions("kiriwrite.xml", 1, 0);
11324 if ($kiriwrite_conf_permissions eq 1){
11326 # The permission settings for the Kiriwrite configuration file are
11327 # invalid, so return an critical error.
11329 kiriwrite_critical("configfileinvalidpermissions");
11333 # Converts the XML file into meaningful data for later on in this subroutine.
11335 my $kiriwrite_conf_file = 'kiriwrite.xml';
11336 my $kiriwrite_conf_data = $xsl->XMLin($kiriwrite_conf_file, SuppressEmpty => 1);
11338 # Go and fetch the settings and place them into a hash (that is global).
11340 %kiriwrite_config = (
11342 "directory_data_db" => $kiriwrite_conf_data->{settings}->{directories}->{database},
11343 "directory_data_output" => $kiriwrite_conf_data->{settings}->{directories}->{output},
11344 "directory_noncgi_images" => $kiriwrite_conf_data->{settings}->{directories}->{images},
11346 "system_language" => $kiriwrite_conf_data->{settings}->{language}->{lang},
11347 "system_presmodule" => $kiriwrite_conf_data->{settings}->{system}->{presentation},
11348 "system_dbmodule" => $kiriwrite_conf_data->{settings}->{system}->{database},
11349 "system_datetime" => $kiriwrite_conf_data->{settings}->{system}->{datetime},
11351 "database_server" => $kiriwrite_conf_data->{settings}->{database}->{server},
11352 "database_port" => $kiriwrite_conf_data->{settings}->{database}->{port},
11353 "database_protocol" => $kiriwrite_conf_data->{settings}->{database}->{protocol},
11354 "database_sqldatabase" => $kiriwrite_conf_data->{settings}->{database}->{database},
11355 "database_username" => $kiriwrite_conf_data->{settings}->{database}->{username},
11356 "database_password" => $kiriwrite_conf_data->{settings}->{database}->{password},
11357 "database_tableprefix" => $kiriwrite_conf_data->{settings}->{database}->{prefix}
11361 # Do a validation check on all of the variables that were loaded into the global configuration hash.
11363 kiriwrite_variablecheck($kiriwrite_config{"directory_data_db"}, "maxlength", 64, 0);
11364 kiriwrite_variablecheck($kiriwrite_config{"directory_data_output"}, "maxlength", 64, 0);
11365 kiriwrite_variablecheck($kiriwrite_config{"directory_noncgi_images"}, "maxlength", 512, 0);
11366 kiriwrite_variablecheck($kiriwrite_config{"directory_data_template"}, "maxlength", 64, 0);
11368 my $kiriwrite_config_language_filename = kiriwrite_variablecheck($kiriwrite_config{"system_language"}, "language_filename", "", 1);
11369 my $kiriwrite_config_presmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_presmodule"}, "module", 0, 1);
11370 my $kiriwrite_config_dbmodule_filename = kiriwrite_variablecheck($kiriwrite_config{"system_dbmodule"}, "module", 0, 1);
11372 # Check if the language filename is valid and return an critical error if
11375 if ($kiriwrite_config_language_filename eq 1){
11377 # The language filename is blank so return an critical error.
11379 kiriwrite_critical("languagefilenameblank");
11381 } elsif ($kiriwrite_config_language_filename eq 2){
11383 # The language filename is invalid so return an critical error.
11385 kiriwrite_critical("languagefilenameinvalid");
11389 # Check if the presentation and database module names are valid and return a critical
11390 # error if they aren't.
11392 if ($kiriwrite_config_presmodule_filename eq 1){
11394 # The presentation module filename given is blank so return an
11397 kiriwrite_critical("presmoduleblank");
11401 if ($kiriwrite_config_presmodule_filename eq 2){
11403 # The presentation module filename is invalid so return an
11406 kiriwrite_critical("presmoduleinvalid");
11410 if ($kiriwrite_config_dbmodule_filename eq 1){
11412 # The database module filename given is blank so return an
11415 kiriwrite_critical("dbmoduleblank");
11419 if ($kiriwrite_config_dbmodule_filename eq 2){
11421 # The database module filename given is invalid so return
11422 # an critical error.
11424 kiriwrite_critical("dbmoduleinvalid");
11428 # Check if the language file does exist before loading it and return an critical error
11429 # if it does not exist.
11431 my $kiriwrite_config_language_fileexists = kiriwrite_fileexists("lang/" . $kiriwrite_config{"system_language"} . ".xml");
11433 if ($kiriwrite_config_language_fileexists eq 1){
11435 # Language file does not exist so return an critical error.
11437 kiriwrite_critical("languagefilemissing");
11441 # Check if the language file has valid permission settings and return an critical error if
11442 # the language file has invalid permissions settings.
11444 my $kiriwrite_config_language_filepermissions = kiriwrite_filepermissions("lang/" . $kiriwrite_config{"system_language"} . ".xml", 1, 0);
11446 if ($kiriwrite_config_language_filepermissions eq 1){
11448 # Language file contains invalid permissions so return an critical error.
11450 kiriwrite_critical("languagefilepermissions");
11454 # Load the language file.
11456 $kiriwrite_lang = $xsl->XMLin("lang/" . $kiriwrite_config{"system_language"} . ".xml", SuppressEmpty => 1);
11458 # Check if the presentation module does exist before loading it and return an critical error
11459 # if the presentation module does not exist.
11461 my $kiriwrite_config_presmodule_fileexists = kiriwrite_fileexists("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm");
11463 if ($kiriwrite_config_presmodule_fileexists eq 1){
11465 # Presentation module does not exist so return an critical error.
11467 kiriwrite_critical("presmodulemissing");
11471 # Check if the presentation module does have the valid permission settings and return a
11472 # critical error if the presentation module contains invalid permission settings.
11474 my $kiriwrite_config_presmodule_permissions = kiriwrite_filepermissions("Modules/Presentation/" . $kiriwrite_config{"system_presmodule"} . ".pm", 1, 0);
11476 if ($kiriwrite_config_presmodule_permissions eq 1){
11478 # Presentation module contains invalid permissions so return an critical error.
11480 kiriwrite_critical("presmoduleinvalidpermissions");
11484 # Check if the database module does exist before loading it and return an critical error
11485 # if the database module does not exist.
11487 my $kiriwrite_config_dbmodule_fileexists = kiriwrite_fileexists("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm");
11489 if ($kiriwrite_config_dbmodule_fileexists eq 1){
11491 # Database module does not exist so return an critical error.
11493 kiriwrite_critical("dbmodulemissing");
11497 # Check if the database module does have the valid permission settings and return an
11498 # critical error if the database module contains invalid permission settings.
11500 my $kiriwrite_config_dbmodule_permissions = kiriwrite_filepermissions("Modules/Database/" . $kiriwrite_config{"system_dbmodule"} . ".pm", 1, 0);
11502 if ($kiriwrite_config_dbmodule_permissions eq 1){
11504 # Presentation module contains invalid permissions so return an critical error.
11506 kiriwrite_critical("dbmoduleinvalidpermissions");
11510 # Include the Modules directory.
11512 use lib "Modules/";
11514 # Load the presentation module.
11516 my $presmodulename = "Presentation::" . $kiriwrite_config{"system_presmodule"};
11517 ($presmodulename) = $presmodulename =~ m/^(.*)$/g;
11518 eval "use " . $presmodulename;
11519 $presmodulename = "Kiriwrite::Presentation::" . $kiriwrite_config{"system_presmodule"};
11520 $kiriwrite_presmodule = $presmodulename->new();
11522 # Load the database module.
11524 my $dbmodulename = "Database::" . $kiriwrite_config{"system_dbmodule"};
11525 ($dbmodulename) = $dbmodulename =~ m/^(.*)$/g;
11526 eval "use " . $dbmodulename;
11527 $dbmodulename = "Kiriwrite::Database::" . $kiriwrite_config{"system_dbmodule"};
11528 $kiriwrite_dbmodule = $dbmodulename->new();
11530 # Load the following settings to the database module.
11532 $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"} });
11538 sub kiriwrite_variablecheck{
11539 #################################################################################
11540 # kiriwrite_variablecheck: Checks the variables for any invalid characters. #
11544 # kiriwrite_variablecheck(variable, type, length, noerror); #
11546 # variable Specifies the variable to be checked. #
11547 # type Specifies what type the variable is. #
11548 # option Specifies the maximum/minimum length of the variable #
11549 # (if minlength/maxlength is used) or if the filename should be #
11550 # checked to see if it is blank. #
11551 # noerror Specifies if Kiriwrite should return an error or not on #
11552 # certain values. #
11553 #################################################################################
11555 # Get the values that were passed to the subroutine.
11557 my ($variable_data, $variable_type, $variable_option, $variable_noerror) = @_;
11559 if ($variable_type eq "numbers"){
11561 # Check for numbers and return an error if there is anything else than numebrs.
11563 my $variable_data_validated = $variable_data; # Copy the variable_data to variable_data_validated.
11564 $variable_data_validated =~ tr/0-9//d; # Take away all of the numbers and from the variable.
11565 # If it only contains numbers then it should be blank.
11567 if ($variable_data_validated eq ""){
11568 # The validated variable is blank. So continue to the end of this section where the return function should be.
11570 # The variable is not blank, so check if the no error value is set
11573 if ($variable_noerror eq 1){
11575 # The validated variable is not blank and the noerror
11576 # value is set to 1. So return an value of 1.
11577 # (meaning that the data is invalid).
11581 } elsif ($variable_noerror eq 0) {
11583 # The validated variable is not blank and the noerror
11584 # value is set to 0.
11586 kiriwrite_error("invalidvariable");
11590 # The variable noerror value is something else
11591 # pther than 1 or 0. So return an error.
11593 kiriwrite_error("invalidvariable");
11601 } elsif ($variable_type eq "lettersnumbers"){
11603 # Check for letters and numbers and return an error if there is anything else other
11604 # than letters and numbers.
11606 my $variable_data_validated = $variable_data; # Copy the variable_data to variable_data_validated
11607 $variable_data_validated =~ tr/a-zA-Z0-9.//d;
11608 $variable_data_validated =~ s/\s//g;
11610 if ($variable_data_validated eq ""){
11611 # The validated variable is blank. So continue to the end of this section where the return function should be.
11613 # The variable is not blank, so check if the no error value is set
11616 if ($variable_noerror eq 1){
11618 # The validated variable is not blank and the noerror
11619 # value is set to 1. So return an value of 1.
11620 # (meaning that the data is invalid).
11624 } elsif ($variable_noerror eq 0) {
11626 # The validated variable is not blank and the noerror
11627 # value is set to 0.
11629 kiriwrite_error("invalidvariable");
11633 # The variable noerror value is something else
11634 # pther than 1 or 0. So return an error.
11636 kiriwrite_error("invalidvariable");
11644 } elsif ($variable_type eq "maxlength"){
11645 # Check for the length of the variable, return an error if it is longer than the length specified.
11647 # Check if the variable_data string is blank, if it is then set the variable_data_length
11650 my $variable_data_length = 0;
11652 if (!$variable_data){
11654 # Set variable_data_length to '0'.
11655 $variable_data_length = 0;
11659 # Get the length of the variable recieved.
11660 $variable_data_length = length($variable_data);
11666 if ($variable_data_length > $variable_option){
11668 # The variable length is longer than it should be so check if
11669 # the no error value is set 1.
11671 if ($variable_noerror eq 1){
11673 # The no error value is set to 1, so return an
11674 # value of 1 (meaning tha the variable is
11675 # too long to be used).
11679 } elsif ($variable_noerror eq 0){
11681 # The no error value is set to 0, so return
11684 kiriwrite_error("variabletoolong");
11688 # The no error value is something else other
11689 # than 0 or 1, so return an error.
11691 kiriwrite_error("variabletoolong");
11697 # The variable length is exactly or shorter than specified, so continue to end of this section where
11698 # the return function should be.
11704 } elsif ($variable_type eq "blank"){
11705 # Check if the variable is blank and if it is blank, then return an error.
11707 if (!$variable_data){
11709 # The variable data really is blank, so check what
11710 # the no error value is set.
11712 if ($variable_noerror eq 1){
11714 # The no error value is set to 1, so return
11715 # a value of 1 (saying that the variable was
11720 } elsif ($variable_noerror eq 0){
11722 # The no error value is set to 0, so return
11725 kiriwrite_error("blankvariable");
11729 # The no error value is something else other
11730 # than 0 or 1, so return an error.
11732 kiriwrite_error("invalidvariable");
11740 } elsif ($variable_type eq "filename"){
11741 # Check for letters and numbers, if anything else than letters and numbers is there (including spaces) return
11744 # Check if the filename passed is blank, if it is then return with an error.
11746 if ($variable_data eq ""){
11748 # The filename specified is blank, so check what the
11749 # noerror value is set.
11751 if ($variable_noerror eq 1){
11753 # The no error value is set to 1 so return
11754 # a value of 1 (meaning that the filename
11759 } elsif ($variable_noerror eq 0){
11761 # The no error value is set to 1 so return
11764 kiriwrite_error("blankfilename");
11768 # The no error value is something else other
11769 # than 0 or 1, so return an error.
11771 kiriwrite_error("invalidvariable");
11780 my $variable_data_validated = $variable_data;
11781 $variable_data_validated =~ tr/a-zA-Z0-9\.//d;
11783 # Check if the validated data variable is blank, if it is
11784 # then continue to the end of this section where the return
11785 # function should be, otherwise return an error.
11787 if ($variable_data_validated eq ""){
11789 # The validated data variable is blank, meaning that
11790 # it only contained letters and numbers.
11794 # The validated data variable is not blank, meaning
11795 # that it contains something else, so return an error
11798 if ($variable_noerror eq 1){
11800 # The no error value is set to 1 so return
11801 # an value of 2. (meaning that the filename
11807 } elsif ($variable_noerror eq 0){
11809 # The no error value is set to 0 so return
11812 kiriwrite_error("invalidfilename");
11816 # The no error value is something else other
11817 # than 0 or 1 so return an error.
11819 kiriwrite_error("invalidvariable");
11827 } elsif ($variable_type eq "filenameindir"){
11828 # Check if the filename is in the directory and return an
11829 # error if it isn't.
11831 if ($variable_data eq ""){
11833 # The filename specified is blank, so check what the
11834 # noerror value is set.
11836 if ($variable_noerror eq 1){
11838 # The no error value is set to 1 so return
11839 # a value of 1 (meaning that the filename
11844 } elsif ($variable_noerror eq 0){
11846 # The no error value is set to 1 so return
11849 kiriwrite_error("blankfilename");
11853 # The no error value is something else other
11854 # than 0 or 1, so return an error.
11856 kiriwrite_error("invalidvariable");
11865 # Set the following variables for later on.
11867 my $variable_data_length = 0;
11868 my $variable_data_char = "";
11869 my $variable_data_validated = "";
11870 my $variable_data_seek = 0;
11871 my $variable_database_list = "";
11872 my $variable_database_listcurrent = "";
11873 my $variable_data_firstlevel = 1;
11875 # Get the length of the variable recieved.
11877 $variable_data_length = length($variable_data);
11879 # Check if the database filename contains the directory command
11880 # for up a directory level and if it is, return an error
11881 # or return with a number.
11885 # Get a character from the filename passed to this subroutine.
11887 $variable_data_char = substr($variable_data, $variable_data_seek, 1);
11889 # Check if the current character is the forward slash character.
11891 if ($variable_data_char eq "/"){
11893 # Check if the current directory is blank (and on the first level), or if the
11894 # current directory contains two dots or one dot, if it does return an error.
11896 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
11898 # Check if the noerror value is set to 1, if it is return an
11899 # number, else return an proper error.
11901 if ($variable_noerror eq 1){
11903 # Page filename contains invalid characters and
11904 # the no error value is set to 1 so return a
11905 # value of 2 (meaning that the page filename
11910 } elsif ($variable_noerror eq 0) {
11912 # Page filename contains invalid characters and
11913 # the no error value is set to 0 so return an
11916 kiriwrite_error("invalidfilename");
11920 # The no error value is something else other
11921 # than 0 or 1 so return an error.
11923 kiriwrite_error("invalidvariable");
11929 # Append the forward slash, clear the current directory name and set
11930 # the first directory level value to 0.
11932 $variable_database_list = $variable_database_list . $variable_data_char;
11933 $variable_database_listcurrent = "";
11934 $variable_data_firstlevel = 0;
11938 # Append the current character to the directory name and to the current
11941 $variable_database_list = $variable_database_list . $variable_data_char;
11942 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
11946 # Increment the seek counter.
11948 $variable_data_seek++;
11950 } until ($variable_data_seek eq $variable_data_length);
11954 } elsif ($variable_type eq "datetime"){
11955 # Check if the date and time setting format is valid.
11957 if ($variable_data eq ""){
11959 if ($variable_noerror eq 1){
11961 # The no error value is set to 1 so return
11962 # a value of 1 (meaning that the date and
11963 # time format was blank).
11967 } elsif ($variable_noerror eq 0){
11969 # The no error value is set to 1 so return
11972 kiriwrite_error("blankdatetimeformat");
11976 # The no error value is something else other
11977 # than 0 or 1, so return an error.
11979 kiriwrite_error("invalidvariable");
11985 my $variable_data_validated = $variable_data;
11986 $variable_data_validated =~ tr|dDmMyYhms/():[ ]||d;
11988 if ($variable_data_validated eq ""){
11990 # The date and time format is valid. So
11995 # The validated data variable is not blank, meaning
11996 # that it contains something else, so return an error
11999 if ($variable_noerror eq 1){
12001 # The no error value is set to 1 so return
12002 # an value of 2. (meaning that the date and
12003 # time format was invalid).
12007 } elsif ($variable_noerror eq 0){
12009 # The no error value is set to 0 so return
12012 kiriwrite_error("invaliddatetimeformat");
12016 # The no error value is something else other
12017 # than 0 or 1 so return an error.
12019 kiriwrite_error("invalidvariable");
12027 } elsif ($variable_type eq "directory"){
12028 # Check if the directory only contains letters and numbers and
12029 # return an error if anything else appears.
12031 my $variable_data_validated = $variable_data;
12032 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12034 if ($variable_data eq ""){
12036 if ($variable_noerror eq 1){
12038 # The no error value is set to 1 so return
12039 # a value of 1 (meaning that the directory
12044 } elsif ($variable_noerror eq 0){
12046 # The no error value is set to 1 so return
12049 kiriwrite_error("blankdirectory");
12053 # The no error value is something else other
12054 # than 0 or 1, so return an error.
12056 kiriwrite_error("invalidvariable");
12062 if ($variable_data_validated eq ""){
12064 # The validated data variable is blank, meaning that
12065 # it only contains letters and numbers.
12069 # The validated data variable is not blank, meaning
12070 # that it contains something else, so return an error
12073 if ($variable_noerror eq 1){
12075 # The no error value is set to 1 so return
12076 # an value of 2. (meaning that the directory
12077 # name is invalid).
12081 } elsif ($variable_noerror eq 0){
12083 # The no error value is set to 0 so return
12086 kiriwrite_error("invaliddirectory");
12090 # The no error value is something else other
12091 # than 0 or 1 so return an error.
12093 kiriwrite_error("invalidvariable");
12101 } elsif ($variable_type eq "language_filename"){
12103 # The variable type is a language filename type.
12104 # Check if the language file name is blank and
12105 # if it is then return an error (or value).
12107 if ($variable_data eq ""){
12109 # The language filename is blank so check the
12110 # no error value and return an error (or value).
12112 if ($variable_noerror eq 1){
12114 # Language filename is blank and the no error value
12115 # is set as 1, so return a value of 1 (saying that
12116 # the language filename is blank).
12120 } elsif ($variable_noerror eq 0) {
12122 # Language filename is blank and the no error value
12123 # is not set as 1, so return an error.
12125 kiriwrite_critical("languagefilenameblank");
12129 # The noerror value is something else other
12130 # than 0 or 1 so return an error.
12132 kiriwrite_error("invalidvariable");
12138 # Set the following variables for later on.
12140 my $variable_data_length = 0;
12141 my $variable_data_char = "";
12142 my $variable_data_seek = 0;
12144 # Get the length of the language file name.
12146 $variable_data_length = length($variable_data);
12150 # Get a character from the language filename passed to this
12151 # subroutine and the character the seek counter value is set
12154 $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12156 # Check if the language filename contains a forward slash or a dot,
12157 # if the selected character is a forward slash then return an error
12160 if ($variable_data_char eq "/" || $variable_data_char eq "."){
12162 # The language filename contains a forward slash or
12163 # a dot so depending on the no error value, return
12164 # an error or a value.
12166 if ($variable_noerror eq 1){
12168 # Language filename contains a forward slash or a dot
12169 # and the no error value has been set to 1, so return
12170 # an value of 2 (saying that the language file name is
12175 } elsif ($variable_noerror eq 0) {
12177 # Language filename contains a forward slash and the no
12178 # error value has not been set to 1, so return an error.
12180 kiriwrite_critical("languagefilenameinvalid");
12184 # The noerror value is something else other than
12185 # 1 or 0 so return an error.
12187 kiriwrite_error("invalidvariable");
12193 # Increment the seek counter.
12195 $variable_data_seek++;
12197 } until ($variable_data_seek eq $variable_data_length);
12201 } elsif ($variable_type eq "pagesetting"){
12203 # The variable type is a page setting, so check if the page
12204 # setting has one of the valid options.
12206 if ($variable_data eq 0 || $variable_data eq 1 || $variable_data eq 2 || $variable_data eq 3){
12208 # The variable is one of the options above, so continue
12209 # to the end of this section.
12213 # The variable is not one of the options above, so check
12214 # and see if a error or a value should be returned.
12216 if ($variable_noerror eq 1){
12218 # The page setting is invalid and the no error
12219 # value is set 1, so return a value of 1
12220 # (saying that the page setting value is
12225 } elsif ($variable_noerror eq 0) {
12227 # Page setting is invalid and the no error value
12228 # is not 1, so return an error.
12230 kiriwrite_error("invalidvariable");
12234 # The no error value is something else other
12235 # than 0 or 1 so return an error.
12237 kiriwrite_error("invalidvariable");
12245 } elsif ($variable_type eq "page_filename"){
12247 # The variable type is a page filename type. Check
12248 # if the data is empty and if it is then return an
12249 # error (or value).
12251 if ($variable_data eq ""){
12253 # The filename is blank so check the no error
12254 # value and depending on it return an value
12257 if ($variable_noerror eq 1){
12259 # Page filename is blank and the no error value
12260 # is set as 1, so return a value of 1 (saying
12261 # the filename is blank).
12265 } elsif ($variable_noerror eq 0) {
12267 # Page filename is blank and the no error value
12268 # is not 1, so return an error.
12270 kiriwrite_error("emptypagefilename");
12274 # The no error value is something else other
12275 # than 0 or 1 so return an error.
12277 kiriwrite_error("invalidvariable");
12282 # Set the following variables for later on.
12285 my $variable_data_length = 0;
12286 my $variable_data_slash = 0;
12287 my $variable_data_char = "";
12288 my $variable_data_validated = "";
12289 my $variable_data_seek = 0;
12290 my $variable_database_list = "";
12291 my $variable_database_listcurrent = "";
12292 my $variable_data_firstlevel = 1;
12294 # Get the length of the filename.
12296 $variable_data_length = length($variable_data);
12298 # Check that only valid characters should be appearing in
12301 $variable_data_validated = $variable_data;
12302 $variable_data_validated =~ tr|a-zA-Z0-9\.\/\-_||d;
12304 if ($variable_data_validated ne ""){
12306 # The validated variable is not blank, meaning the
12307 # variable contains invalid characters, so return
12310 if ($variable_noerror eq 1){
12312 # Page filename contains invalid characters and
12313 # the no error value is set to 1 so return a
12314 # value of 2 (meaning that the page filename
12319 } elsif ($variable_noerror eq 0) {
12321 # Page filename contains invalid characters and
12322 # the no error value is set to 0 so return an
12325 kiriwrite_error("invalidfilename");
12329 # The no error value is something else other
12330 # than 0 or 1 so return an error.
12332 kiriwrite_error("invalidvariable");
12338 # Check if the page filename contains the directory command
12339 # for up a directory level and if it is, return an error
12340 # or return with a number.
12344 # Get a character from the filename passed to this subroutine.
12346 $variable_data_char = substr($variable_data, $variable_data_seek, 1);
12348 # Check if the current character is the forward slash character.
12350 if ($variable_data_char eq "/"){
12352 # Check if the current directory is blank (and on the first level), or if the
12353 # current directory contains two dots or one dot, if it does return an error.
12355 $variable_data_slash = 1;
12357 if ($variable_database_listcurrent eq "" && $variable_data_firstlevel eq 1 || $variable_database_listcurrent eq ".." || $variable_database_listcurrent eq "."){
12359 # Check if the noerror value is set to 1, if it is return an
12360 # number, else return an proper error.
12362 if ($variable_noerror eq 1){
12364 # Page filename contains invalid characters and
12365 # the no error value is set to 1 so return a
12366 # value of 2 (meaning that the page filename
12371 } elsif ($variable_noerror eq 0) {
12373 # Page filename contains invalid characters and
12374 # the no error value is set to 0 so return an
12377 kiriwrite_error("invalidfilename");
12381 # The no error value is something else other
12382 # than 0 or 1 so return an error.
12384 kiriwrite_error("invalidvariable");
12390 # Append the forward slash, clear the current directory name and set
12391 # the first directory level value to 0.
12393 $variable_database_list = $variable_database_list . $variable_data_char;
12394 $variable_database_listcurrent = "";
12395 $variable_data_firstlevel = 0;
12399 # Append the current character to the directory name and to the current
12402 $variable_data_slash = 0;
12404 $variable_database_list = $variable_database_list . $variable_data_char;
12405 $variable_database_listcurrent = $variable_database_listcurrent . $variable_data_char;
12409 # Increment the seek counter.
12411 $variable_data_seek++;
12413 } until ($variable_data_seek eq $variable_data_length);
12415 # Check if the last character is a slash and return an
12418 if ($variable_data_slash eq 1){
12420 if ($variable_noerror eq 1){
12422 # Last character is a slash and the no error
12423 # value is set to 1 so return a value of 2
12424 # (meaning that the page filename is invalid).
12428 } elsif ($variable_noerror eq 0) {
12430 # Page filename contains a slash for the last
12431 # character and the no error value is set to 0
12432 # so return an error.
12434 kiriwrite_error("invalidfilename");
12438 # The no error value is something else other
12439 # than 0 or 1 so return an error.
12441 kiriwrite_error("invalidvariable");
12449 } elsif ($variable_type eq "module"){
12451 # The variable type is a presentation module filename.
12453 # Check if the variable_data is blank and if it is
12456 if ($variable_data eq ""){
12458 # The presentation module is blank so check if an error
12459 # value should be returned or a number should be
12462 if ($variable_noerror eq 1){
12464 # Module name is blank and the no error value
12465 # is set to 1 so return a value of 2 (meaning
12466 # that the page filename is blank).
12470 } elsif ($variable_noerror eq 0) {
12472 # Module name contains is blank and the no error
12473 # value is set to 0 so return an error.
12475 kiriwrite_critical("moduleblank");
12479 # The no error value is something else other
12480 # than 0 or 1 so return an error.
12482 kiriwrite_critical("invalidvalue");
12490 my $variable_data_validated = $variable_data;
12491 $variable_data_validated =~ tr/a-zA-Z0-9//d;
12493 if ($variable_data_validated eq ""){
12497 if ($variable_noerror eq 1){
12499 # Module name contains invalid characters and
12500 # the no error value is set to 1 so return a
12501 # value of 2 (meaning that the page filename
12506 } elsif ($variable_noerror eq 0) {
12508 # Module name contains invalid characters and
12509 # the no error value is set to 0 so return an
12512 kiriwrite_critical("moduleinvalid");
12516 # The no error value is something else other
12517 # than 0 or 1 so return an error.
12519 kiriwrite_error("invalidvalue");
12527 } elsif ($variable_type eq "utf8"){
12529 # The variable type is a UTF8 string.
12531 if (!$variable_data){
12533 $variable_data = "";
12537 # Check if the string is a valid UTF8 string.
12539 if ($variable_data =~ m/^(
12540 [\x09\x0A\x0D\x20-\x7E] # ASCII
12541 | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
12542 | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
12543 | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
12544 | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
12545 | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
12546 | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
12547 | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
12550 # The UTF-8 string is valid.
12554 # The UTF-8 string is not valid, check if the no error
12555 # value is set to 1 and return an error if it isn't.
12557 if ($variable_noerror eq 1){
12559 # The no error value has been set to 1, so return
12560 # a value of 1 (meaning that the UTF-8 string is
12565 } elsif ($variable_noerror eq 0) {
12567 # The no error value has been set to 0, so return
12570 kiriwrite_error("invalidutf8");
12574 # The no error value is something else other than 0
12575 # or 1, so return an error.
12577 kiriwrite_error("invalidoption");
12585 } elsif ($variable_type eq "serverprotocol"){
12587 # Check if the server protocol is TCP or UDP and return
12588 # an error if it isn't.
12590 if ($variable_data ne "tcp" && $variable_data ne "udp"){
12592 # The protocol given is not valid, check if the no
12593 # error value is set to 1 and return an error if it isn't.
12595 if ($variable_noerror eq 1){
12597 # The no error value has been set to 1, so return a
12598 # value of 1 (meaning that the server protocol is
12603 } elsif ($variable_noerror eq 0){
12605 # The no error value has been set to 0, so return
12608 kiriwrite_error("serverprotocolinvalid");
12612 # The no error value is something else other than 0
12613 # or 1, so return an error.
12615 kiriwrite_error("invalidoption");
12623 } elsif ($variable_type eq "port"){
12625 # Check if the port number given is less than 0 or more than 65535
12626 # and return an error if it is.
12628 if ($variable_data < 0 || $variable_data > 65535){
12630 # The port number is less than 0 and more than 65535 so
12631 # check if the no error value is set to 1 and return an
12632 # error if it isn't.
12634 if ($variable_noerror eq 1){
12636 # The no error value has been set to 1, so return a
12637 # value of 1 (meaning that the port number is invalid).
12641 } elsif ($variable_noerror eq 0){
12643 # The no error value has been set to 0, so return
12646 kiriwrite_error("serverportnumberinvalid");
12650 # The no error value is something else other than 0
12651 # or 1, so return an error.
12653 kiriwrite_error("invalidoption");
12663 # Another type than the valid ones above has been specified so return an error specifying an invalid option.
12664 kiriwrite_error("invalidoption");
12668 sub kiriwrite_output_header{
12669 #################################################################################
12670 # kiriwrite_output_header: Outputs the header to the browser/stdout/console. #
12674 # kiriwrite_output_header(); #
12675 #################################################################################
12677 # Print a header saying that the page expires immediately since the
12678 # date is set in the past.
12680 print header(-Expires=>'Sunday, 01-Jan-06 00:00:00 GMT', -charset=>'utf-8');
12684 sub kiriwrite_processfilename{
12685 #################################################################################
12686 # kiriwrite_processfilename: Processes a name and turns it into a filename that #
12687 # can be used by Kiriwrite. #
12691 # kiriwrite_processfilename(text); #
12693 # text Specifies the text to be used in the process for creating a new #
12695 #################################################################################
12697 # Get the values that have been passed to the subroutine.
12699 my ($process_text) = @_;
12701 # Define some variables that will be used later on.
12703 my $processed_stageone = "";
12704 my $processed_stagetwo = "";
12705 my $processed_length = "";
12706 my $processed_char = "";
12707 my $processed_seek = 0;
12708 my $processed_filename = "";
12710 # Set the first stage value of the processed filename to the
12711 # process filename and then filter it out to only contain
12712 # numbers and letters (no spaces) and then convert the
12713 # capitals to small letters.
12715 $processed_stageone = $process_text;
12716 $processed_stageone =~ tr#a-zA-Z0-9##cd;
12717 $processed_stageone =~ tr/A-Z/a-z/;
12719 # Now set the second stage value of the processed filename
12720 # to the first stage value of the processed filename and
12721 # then limit the filename down to 32 characters.
12723 $processed_stagetwo = $processed_stageone;
12724 $processed_length = length($processed_stagetwo);
12726 # Process the second stage filename into the final
12727 # filename and do so until the seek counter is 32
12728 # or reaches the length of the second stage filename.
12732 # Get the character that is the seek counter
12735 $processed_char = substr($processed_stagetwo, $processed_seek, 1);
12737 # Append to the final processed filename.
12739 $processed_filename = $processed_filename . $processed_char;
12741 # Increment the seek counter.
12745 } until ($processed_seek eq 32 || $processed_seek eq $processed_length);
12747 return $processed_filename;
12751 sub kiriwrite_language{
12752 #################################################################################
12753 # kiriwrite_language: Process language strings that needs certain text inserted.#
12757 # kiriwrite_language(string, [text, text, ...]); #
12759 # string Specifies the string to process. #
12760 # text Specifies the text to pass to the string (can be repeated many #
12762 #################################################################################
12764 my $string = shift;
12767 foreach $item (@_){
12769 $string =~ s/%s/$item/;
12777 sub kiriwrite_error{
12778 #################################################################################
12779 # kiriwrite_error: Prints out an error message. #
12783 # kiriwrite_error(errortype, errorext); #
12785 # errortype Specifies the type of error that occured. #
12786 # errorext Specifies the extended error information. #
12787 #################################################################################
12789 # Get the error type from the subroutine.
12791 my ($error_type, $error_extended) = @_;
12793 # Disconnect from the database server.
12795 if ($kiriwrite_dbmodule){
12796 $kiriwrite_dbmodule->disconnect();
12799 # Load the list of error messages.
12801 my ($kiriwrite_error, %kiriwrite_error);
12803 %kiriwrite_error = (
12805 # Catch all error message.
12806 "generic" => $kiriwrite_lang->{error}->{generic},
12808 # Standard error messages.
12809 "blankfilename" => $kiriwrite_lang->{error}->{blankfilename},
12810 "blankvariable" => $kiriwrite_lang->{error}->{blankvariable},
12811 "fileexists" => $kiriwrite_lang->{error}->{fileexists},
12812 "internalerror" => $kiriwrite_lang->{error}->{internalerror},
12813 "invalidoption" => $kiriwrite_lang->{error}->{invalidoption},
12814 "invalidaction" => $kiriwrite_lang->{error}->{invalidaction},
12815 "invalidfilename" => $kiriwrite_lang->{error}->{invalidfilename},
12816 "invalidmode" => $kiriwrite_lang->{error}->{invalidmode},
12817 "invalidutf8" => $kiriwrite_lang->{error}->{invalidutf8},
12818 "invalidvariable" => $kiriwrite_lang->{error}->{invalidvariable},
12819 "variabletoolong" => $kiriwrite_lang->{error}->{variabletoolong},
12821 # Specific error messages.
12822 "blankcompiletype" => $kiriwrite_lang->{error}->{blankcompiletype},
12823 "blankdatabasepageadd" => $kiriwrite_lang->{error}->{blankdatabasepageadd},
12824 "blankdirectory" => $kiriwrite_lang->{error}->{blankdirectory},
12825 "blankfindfilter" => $kiriwrite_lang->{error}->{blankfindfilter},
12826 "blankdatetimeformat" => $kiriwrite_lang->{error}->{blankdatetimeformat},
12827 "databaseconnectionerror" => $kiriwrite_lang->{error}->{databaseconnectionerror},
12828 "databasecategoriestoolong" => $kiriwrite_lang->{error}->{databasecategoriestoolong},
12829 "databasecopysame" => $kiriwrite_lang->{error}->{databasecopysame},
12830 "databasealreadyexists" => $kiriwrite_lang->{error}->{databasealreadyexists},
12831 "datadirectorymissing" => $kiriwrite_lang->{error}->{datadirectorymissing},
12832 "datadirectoryinvalidpermissions" => $kiriwrite_lang->{error}->{datadirectoryinvalidpermissions},
12833 "databasedescriptiontoolong" => $kiriwrite_lang->{error}->{databasedescriptiontoolong},
12834 "databasefilenameinvalid" => $kiriwrite_lang->{error}->{databasefilenameinvalid},
12835 "databasefilenametoolong" => $kiriwrite_lang->{error}->{databasefilenametoolong},
12836 "databaseerror" => $kiriwrite_lang->{error}->{databaseerror},
12837 "databaseinvalidpermissions" => $kiriwrite_lang->{error}->{databaseinvalidpermissions},
12838 "databasenameinvalid" => $kiriwrite_lang->{error}->{databasenameinvalid},
12839 "databasenametoolong" => $kiriwrite_lang->{error}->{databasenametoolong},
12840 "databasenameblank" => $kiriwrite_lang->{error}->{databasenameblank},
12841 "databasemissingfile" => $kiriwrite_lang->{error}->{databasemissingfile},
12842 "databasemovemissingfile" => $kiriwrite_lang->{error}->{databasemovemissingfile},
12843 "databasenorename" => $kiriwrite_lang->{error}->{databasenorename},
12844 "databasemovesame" => $kiriwrite_lang->{error}->{databasemovesame},
12845 "dbmoduleblank" => $kiriwrite_lang->{error}->{dbmoduleblank},
12846 "dbmoduleinvalid" => $kiriwrite_lang->{error}->{dbmoduleinvalid},
12847 "dbdirectoryblank" => $kiriwrite_lang->{error}->{dbdirectoryblank},
12848 "dbdirectoryinvalid" => $kiriwrite_lang->{error}->{dbdirectoryinvalid},
12849 "dbmodulemissing" => $kiriwrite_lang->{error}->{dbmodulemissing},
12850 "filtersdatabasenotcreated" => $kiriwrite_lang->{error}->{filtersdatabasenotcreated},
12851 "filtersdbdatabaseerror" => $kiriwrite_lang->{error}->{filtersdbdatabaseerror},
12852 "filtersdbpermissions" => $kiriwrite_lang->{error}->{filtersdbpermissions},
12853 "filtersdbmissing" => $kiriwrite_lang->{error}->{filtersdbmissing},
12854 "filteridblank" => $kiriwrite_lang->{error}->{filteridblank},
12855 "filterdoesnotexist" => $kiriwrite_lang->{error}->{filterdoesnotexist},
12856 "filteridinvalid" => $kiriwrite_lang->{error}->{filteridinvalid},
12857 "filteridtoolong" => $kiriwrite_lang->{error}->{filteridtoolong},
12858 "findfiltertoolong" => $kiriwrite_lang->{error}->{findfiltertoolong},
12859 "filterpriorityinvalid" => $kiriwrite_lang->{error}->{filterpriorityinvalid},
12860 "filterpriorityinvalidchars" => $kiriwrite_lang->{error}->{filterpriorityinvalidchars},
12861 "filterprioritytoolong" => $kiriwrite_lang->{error}->{filterprioritytoolong},
12862 "invalidcompiletype" => $kiriwrite_lang->{error}->{invalidcompiletype},
12863 "invalidpagenumber" => $kiriwrite_lang->{error}->{invalidpagenumber},
12864 "nopagesselected" => $kiriwrite_lang->{error}->{nopagesselected},
12865 "invaliddirectory" => $kiriwrite_lang->{error}->{invaliddirectory},
12866 "invaliddatetimeformat" => $kiriwrite_lang->{error}->{invaliddatetimeformat},
12867 "invalidlanguagefilename" => $kiriwrite_lang->{error}->{invalidlanguagefilename},
12868 "languagefilenamemissing" => $kiriwrite_lang->{error}->{languagefilenamemissing},
12869 "moduleblank" => $kiriwrite_lang->{error}->{moduleblank},
12870 "moduleinvalid" => $kiriwrite_lang->{error}->{moduleinvalid},
12871 "newcopydatabasedatabaseerror" => $kiriwrite_lang->{error}->{newcopydatabasedatabaseerror},
12872 "newcopydatabasedoesnotexist" => $kiriwrite_lang->{error}->{newcopydatabasedoesnotexist},
12873 "newcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newcopydatabasefileinvalidpermissions},
12874 "newmovedatabasedatabaseerror" => $kiriwrite_lang->{error}->{newmovedatabasedatabaseerror},
12875 "newmovedatabasedoesnotexist" => $kiriwrite_lang->{error}->{newmovedatabasedoesnotexist},
12876 "newmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{newmovedatabasefileinvalidpermissions},
12877 "nodatabasesavailable" => $kiriwrite_lang->{error}->{nodatabasesavailable},
12878 "nodatabaseselected" => $kiriwrite_lang->{error}->{nodatabaseselected},
12879 "noeditvaluesselected" => $kiriwrite_lang->{error}->{noeditvaluesselected},
12880 "oldcopydatabasedatabaseerror" => $kiriwrite_lang->{error}->{oldcopydatabasedatabaseerror},
12881 "oldcopydatabasedoesnotexist" => $kiriwrite_lang->{error}->{oldcopydatabasedoesnotexist},
12882 "oldcopydatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldcopydatabasefileinvalidpermissions},
12883 "oldmovedatabasedatabaseerror" => $kiriwrite_lang->{error}->{oldmovedatabasedatabaseerror},
12884 "oldmovedatabasedoesnotexist" => $kiriwrite_lang->{error}->{oldmovedatabasedoesnotexist},
12885 "oldmovedatabasefileinvalidpermissions" => $kiriwrite_lang->{error}->{oldmovedatabasefileinvalidpermissions},
12886 "outputdirectoryblank" => $kiriwrite_lang->{error}->{outputdirectoryblank},
12887 "outputdirectoryinvalid" => $kiriwrite_lang->{error}->{outputdirectoryinvalid},
12888 "outputdirectorymissing" => $kiriwrite_lang->{error}->{outputdirectorymissing},
12889 "outputdirectoryinvalidpermissions" => $kiriwrite_lang->{error}->{outputdirectoryinvalidpermissions},
12890 "presmoduleblank" => $kiriwrite_lang->{error}->{presmoduleblank},
12891 "presmoduleinvalid" => $kiriwrite_lang->{error}->{presmoduleinvalid},
12892 "presmodulemissing" => $kiriwrite_lang->{error}->{presmodulemissing},
12893 "pagefilenamedoesnotexist" => $kiriwrite_lang->{error}->{pagefilenamedoesnotexist},
12894 "pagefilenameexists" => $kiriwrite_lang->{error}->{pagefilenameexists},
12895 "pagefilenameinvalid" => $kiriwrite_lang->{error}->{pagefilenameinvalid},
12896 "pagefilenametoolong" => $kiriwrite_lang->{error}->{pagefilenametoolong},
12897 "pagefilenameblank" => $kiriwrite_lang->{error}->{pagefilenameblank},
12898 "pagetitletoolong" => $kiriwrite_lang->{error}->{pagetitletoolong},
12899 "pagedescriptiontoolong" => $kiriwrite_lang->{error}->{pagedescriptiontoolong},
12900 "pagesectiontoolong" => $kiriwrite_lang->{error}->{pagesectiontoolong},
12901 "pagedatabasefilenametoolong" => $kiriwrite_lang->{error}->{pagedatabasefilenametoolong},
12902 "pagesettingstoolong" => $kiriwrite_lang->{error}->{pagesettingstoolong},
12903 "pagesettingsinvalid" => $kiriwrite_lang->{error}->{pagesettingsinvalid},
12904 "pagetemplatefilenametoolong" => $kiriwrite_lang->{error}->{pagetemplatefilenametoolong},
12905 "replacefiltertoolong" => $kiriwrite_lang->{error}->{replacefiltertoolong},
12906 "servernameinvalid" => $kiriwrite_lang->{error}->{servernameinvalid},
12907 "servernametoolong" => $kiriwrite_lang->{error}->{servernametoolong},
12908 "serverdatabasenameinvalid" => $kiriwrite_lang->{error}->{serverdatabasenameinvalid},
12909 "serverdatabasenametoolong" => $kiriwrite_lang->{error}->{serverdatabasenametoolong},
12910 "serverdatabaseusernameinvalid" => $kiriwrite_lang->{error}->{serverdatabaseusernameinvalid},
12911 "serverdatabaseusernametoolong" => $kiriwrite_lang->{error}->{serverdatabaseusernametoolong},
12912 "serverdatabasepasswordtoolong" => $kiriwrite_lang->{error}->{serverdatabasepasswordtoolong},
12913 "serverdatabasetableprefixinvalid" => $kiriwrite_lang->{error}->{serverdatabasetableprefixinvalid},
12914 "serverdatabasetableprefixtoolong" => $kiriwrite_lang->{error}->{serverdatabasetableprefixtoolong},
12915 "serverportnumberinvalid" => $kiriwrite_lang->{error}->{serverportnumberinvalid},
12916 "serverportnumberinvalidcharacters" => $kiriwrite_lang->{error}->{serverportnumberinvalidcharacters},
12917 "serverportnumbertoolong" => $kiriwrite_lang->{error}->{serverportnumbertoolong},
12918 "serverprotocolnametoolong" => $kiriwrite_lang->{error}->{serverprotocolnametoolong},
12919 "serverprotocolinvalid" => $kiriwrite_lang->{error}->{serverprotocolinvalid},
12920 "templatenameblank" => $kiriwrite_lang->{error}->{templatenameblank},
12921 "templatefilenameexists" => $kiriwrite_lang->{error}->{templatefilenameexists},
12922 "templatefilenameinvalid" => $kiriwrite_lang->{error}->{templatefilenameinvalid},
12923 "templatedatabaseerror" => $kiriwrite_lang->{error}->{templatedatabaseerror},
12924 "templatedatabaseinvalidpermissions" => $kiriwrite_lang->{error}->{templatedatabaseinvalidpermissions},
12925 "templatedatabaseinvalidformat" => $kiriwrite_lang->{error}->{templatedatabaseinvalidformat},
12926 "templatedirectoryblank" => $kiriwrite_lang->{error}->{templatedirectoryblank},
12927 "templatedirectoryinvalid" => $kiriwrite_lang->{error}->{templatedirectoryinvalid},
12928 "templatedatabasenotcreated" => $kiriwrite_lang->{error}->{templatedatabasenotcreated},
12929 "templatefilenametoolong" => $kiriwrite_lang->{error}->{templatefilenametoolong},
12930 "templatenametoolong" => $kiriwrite_lang->{error}->{templatenametoolong},
12931 "templatedescriptiontoolong" => $kiriwrite_lang->{error}->{templatedescriptiontoolong},
12932 "templatedatabasemissing" => $kiriwrite_lang->{error}->{templatedatabasemissing},
12933 "templatedoesnotexist" => $kiriwrite_lang->{error}->{templatedoesnotexist},
12934 "templatefilenameblank" => $kiriwrite_lang->{error}->{templatefilenameblank},
12938 # Check if the specified error is blank and if it is
12939 # use the generic error messsage.
12941 if (!$kiriwrite_error{$error_type}){
12942 $error_type = "generic";
12945 $kiriwrite_presmodule->clear();
12947 $kiriwrite_presmodule->startbox("errorbox");
12948 $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{error}, { Style => "errorheader" });
12949 $kiriwrite_presmodule->addlinebreak();
12950 $kiriwrite_presmodule->addtext($kiriwrite_error{$error_type}, { Style => "errortext" });
12952 # Check to see if extended error information was passed.
12954 if ($error_extended){
12956 # Write the extended error information.
12958 $kiriwrite_presmodule->addlinebreak();
12959 $kiriwrite_presmodule->addlinebreak();
12960 $kiriwrite_presmodule->addtext($kiriwrite_lang->{error}->{extendederror});
12961 $kiriwrite_presmodule->addlinebreak();
12962 $kiriwrite_presmodule->addlinebreak();
12963 $kiriwrite_presmodule->startbox("datalist");
12964 $kiriwrite_presmodule->addtext($error_extended);
12965 $kiriwrite_presmodule->endbox();
12969 $kiriwrite_presmodule->endbox();
12971 kiriwrite_output_header;
12972 kiriwrite_output_page($kiriwrite_lang->{error}->{error}, $kiriwrite_presmodule->grab(), "none");
12978 sub kiriwrite_fileexists{
12979 #################################################################################
12980 # kiriwrite_fileexists: Check if a file exists and returns a value depending on #
12981 # if the file exists or not. #
12985 # kiriwrite_fileexists(filename); #
12987 # filename Specifies the file name to check if it exists or not. #
12988 #################################################################################
12990 # Get the value that was passed to the subroutine.
12992 my ($filename) = @_;
12994 # Check if the filename exists, if it does, return a value of 0, else
12995 # return a value of 1, meaning that the file was not found.
12999 # Specified file does exist so return a value of 0.
13005 # Specified file does not exist so return a value of 1.
13013 sub kiriwrite_filepermissions{
13014 #################################################################################
13015 # kiriwrite_filepermissions: Check if the file permissions of a file and return #
13016 # either a 1 saying that the permissions are valid or return a 0 saying that #
13017 # the permissions are invalid. #
13021 # kiriwrite_filepermissions(filename, [read], [write], [filemissingskip]); #
13023 # filename Specifies the filename to check for permissions. #
13024 # read Preform check that the file is readable. #
13025 # write Preform check that the file is writeable. #
13026 # filemissingskip Skip the check of seeing if it can read or write if the #
13027 # file is missing. #
13028 #################################################################################
13030 # Get the values that was passed to the subroutine.
13032 my ($filename, $readpermission, $writepermission, $ignorechecks) = @_;
13034 # Check to make sure that the read permission and write permission values
13035 # are only 1 character long.
13037 kiriwrite_variablecheck($readpermission, "maxlength", 1, 0);
13038 kiriwrite_variablecheck($writepermission, "maxlength", 1, 0);
13039 kiriwrite_variablecheck($ignorechecks, "maxlength", 1, 0);
13041 my $ignorechecks_result = 0;
13043 # Check if the file should be ignored for read and write checking if
13044 # it doesn't exist.
13046 if ($ignorechecks){
13050 # The file exists so the checks are to be done.
13052 $ignorechecks_result = 0;
13056 # The file does not exist so the checks don't need to
13057 # be done to prevent false positives.
13059 $ignorechecks_result = 1;
13065 $ignorechecks_result = 0;
13069 # Check if the file should be checked to see if it can be read.
13071 if ($readpermission && $ignorechecks_result eq 0){
13073 # The file should be checked to see if it does contain read permissions
13074 # and return a 0 if it is invalid.
13078 # The file is readable, so do nothing.
13082 # The file is not readable, so return 1.
13090 # Check if the file should be checked to see if it can be written.
13092 if ($writepermission && $ignorechecks_result eq 0){
13094 # The file should be checked to see if it does contain write permissions
13095 # and return a 0 if it is invalid.
13099 # The file is writeable, so do nothing.
13103 # The file is not writeable, so return 1.
13111 # No problems have occured, so return 0.
13117 sub kiriwrite_utf8convert{
13118 #################################################################################
13119 # kiriwrite_utf8convert: Properly converts values into UTF-8 values. #
13123 # utfstring # The UTF-8 string to convert. #
13124 #################################################################################
13126 # Get the values passed to the subroutine.
13128 my ($utfstring) = @_;
13130 # Load the Encode perl module.
13132 use Encode qw(decode_utf8);
13134 # Convert the string.
13136 my $finalutf8 = Encode::decode_utf8( $utfstring );
13142 sub kiriwrite_critical{
13143 #################################################################################
13144 # kiriwrite_critical: Displays an critical error message that cannot be #
13145 # normally by the kiriwrite_error subroutine. #
13149 # errortype Specifies the type of critical error that has occured. #
13150 #################################################################################
13152 # Get the value that was passed to the subroutine.
13154 my ($error_type) = @_;
13158 # Get the error type from the errortype string.
13162 # Generic critical error message.
13164 "generic" => "A critical error has occured but the error is not known to Kiriwrite.",
13166 # Specific critical error messages.
13168 "configfilemissing" => "The Kiriwrite configuration file is missing! Running the installer script for Kiriwrite is recommended.",
13169 "configfileinvalidpermissions" => "The Kiriwrite configuration file has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13170 "dbmodulemissing" => "The database module is missing! Running the installer script for Kiriwrite is recommended.",
13171 "dbmoduleinvalidpermissions" => "The database module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the configuration file.",
13172 "dbmoduleinvalid" => "The database module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13173 "invalidvalue" => "An invalid value was passed.",
13174 "languagefilenameblank" => "The language filename given is blank! Running the installer script for Kiriwrite is recommended.",
13175 "languagefilenameinvalid" => "The language filename given is invalid! Running the installer script for Kiriwrite is recommended.",
13176 "languagefilemissing" => "The language filename given does not exist. Running the installer script for Kiriwrite is recommended.",
13177 "languagefilenameinvalidpermissions" => "The language file with the filename given has invalid permissions set. Please set the valid permission settings for the language file.",
13178 "presmodulemissing" => "The presentation module is missing! Running the installer script for Kiriwrite is recommended.",
13179 "presmoduleinvalidpermissions" => "The presentation module cannot be used as it has invalid permission settings set! Please set the valid permission settings for the presentation module.",
13180 "presmoduleinvalid" => "The presentation module name given is invalid. Running the installer script for Kiriwrite is recommended.",
13183 if (!$error_list{$error_type}){
13185 $error_type = "generic";
13190 print "Critical Error: " . $error_list{$error_type};
13195 sub kiriwrite_output_page{
13196 #################################################################################
13197 # kiriwrite_output_page: Outputs the page to the browser/stdout/console. #
13201 # kiriwrite_output_page(pagetitle, pagedata, menutype); #
13203 # pagetitle Specifies the page title. #
13204 # pagedata Specifies the page data. #
13205 # menutype Prints out which menu to use. #
13206 #################################################################################
13208 my ($pagetitle, $pagedata, $menutype) = @_;
13210 # Open the script page template and load it into the scriptpage variable,
13211 # while declaring the variable.
13213 open (my $filehandle_scriptpage, "<:utf8", 'page.html');
13214 my @scriptpage = <$filehandle_scriptpage>;
13215 binmode $filehandle_scriptpage, ':utf8';
13216 close ($filehandle_scriptpage);
13218 # Define the variables required.
13220 my $scriptpageline = "";
13221 my $pageoutput = "";
13222 my $menuoutput = "";
13224 $kiriwrite_presmodule->clear();
13226 # Print out the main menu for Kiriwrite.
13228 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{menu}->{viewdatabases} });
13229 $kiriwrite_presmodule->addtext(" | ");
13230 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page", { Text => $kiriwrite_lang->{menu}->{viewpages} });
13231 $kiriwrite_presmodule->addtext(" | ");
13232 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{menu}->{viewfilters} });
13233 $kiriwrite_presmodule->addtext(" | ");
13234 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{menu}->{viewtemplates} });
13235 $kiriwrite_presmodule->addtext(" | ");
13236 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{menu}->{compilepages} });
13237 $kiriwrite_presmodule->addtext(" | ");
13238 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{menu}->{viewsettings} });
13239 $kiriwrite_presmodule->addlinebreak();
13241 # Check what menu is going to be printed along with the default 'top' menu.
13243 if ($menutype eq "database"){
13245 # If the menu type is database then print out the database sub-menu.
13247 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db", { Text => $kiriwrite_lang->{database}->{submenu}->{viewdatabases} });
13248 $kiriwrite_presmodule->addtext(" | ");
13249 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=new", { Text => $kiriwrite_lang->{database}->{submenu}->{adddatabase} });
13251 } elsif ($menutype eq "pages"){
13252 # If the menu type is pages then print out the pages sub-menu.
13254 # First, fetch the database name from the HTTP query string.
13256 my $query = new CGI;
13257 my $db_filename = $query->param('database');
13259 # Check if a value has been placed in the db_filename string.
13261 if (!$db_filename){
13263 # As the database filename is blank, don't add an option to add a page.
13267 # A database file has been specified so add an option to add a page to
13268 # the selected database.
13270 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=page&action=add&database=" . $db_filename, { Text => $kiriwrite_lang->{pages}->{submenu}->{addpage} });
13274 } elsif ($menutype eq "filter"){
13276 # If the menu type is filters then print out the filter sub-menu.
13278 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{submenu}->{showfilters} });
13279 $kiriwrite_presmodule->addtext(" | ");
13280 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=filter&action=add", { Text => $kiriwrite_lang->{filter}->{submenu}->{addfilter} });
13282 } elsif ($menutype eq "settings"){
13284 # If the menu type is options then print out the options sub-menu.
13286 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings", { Text => $kiriwrite_lang->{setting}->{submenu}->{viewsettings} });
13287 $kiriwrite_presmodule->addtext(" | ");
13288 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=settings&action=edit", { Text => $kiriwrite_lang->{setting}->{submenu}->{editsettings} });
13290 } elsif ($menutype eq "template"){
13292 # If the menu type is template then print out the template sub-menu.
13294 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template", { Text => $kiriwrite_lang->{template}->{submenu}->{showtemplates} });
13295 $kiriwrite_presmodule->addtext(" | ");
13296 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=template&action=add", { Text => $kiriwrite_lang->{template}->{submenu}->{addtemplate} });
13298 } elsif ($menutype eq "compile"){
13300 # If the menu type is compile then print out the compile sub-menu.
13302 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{submenu}->{listdatabases} });
13303 $kiriwrite_presmodule->addtext(" | ");
13304 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=all", { Text => $kiriwrite_lang->{compile}->{submenu}->{compileall} });
13305 $kiriwrite_presmodule->addtext(" | ");
13306 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=clean", { Text => $kiriwrite_lang->{compile}->{submenu}->{cleanoutputdirectory} });
13310 $menuoutput = $kiriwrite_presmodule->grab();
13312 # Find <kiriwrite> tages and replace with the apporiate variables.
13314 foreach $scriptpageline (@scriptpage){
13316 $scriptpageline =~ s/<kiriwrite:menu>/$menuoutput/g;
13317 $scriptpageline =~ s/<kiriwrite:imagespath>/$kiriwrite_config{"directory_noncgi_images"}/g;
13318 $scriptpageline =~ s/<kiriwrite:pagedata>/$pagedata/g;
13320 # Check if page title specified is blank, otherwise add a page title
13323 if ($pagetitle eq ""){
13324 $scriptpageline =~ s/<kiriwrite:title>//g;
13326 $scriptpageline =~ s/<kiriwrite:title>/ ($pagetitle)/g;
13331 # Append processed line to the pageoutput variable.
13333 $pageoutput = $pageoutput . $scriptpageline;
13337 binmode STDOUT, ':utf8';
13345 sub kiriwrite_output_xml{
13346 #################################################################################
13347 # kiriwrite_output_xml: Outputs several types of data to an XML file #
13351 # kiriwrite_output_xml(filename, type, settings); #
13353 # filename Specifies the filename of the XML file. #
13354 # type Specifies the type of the XML file to be written. #
13355 # settings Specifies the following settings in any order. #
13357 # Settings for Kiriwrite configuration files: #
13359 # DatabaseDirectory Specifies the new database directory to use. #
13360 # OutputDirectory Specifies the new output directory to use. #
13361 # ImagesURIPath Specifies the new URI path for images. #
13362 # DateTimeFormat Specifies the new date and time format. #
13363 # SystemLanguage Specifies the new language to use for Kiriwrite. #
13364 # PrsentationModule Specifies the new presentation module to use for #
13366 # DatabaseModule Specifies the new database module to use for Kiriwrite. #
13367 # DatabaseServer Specifies the database server to use. #
13368 # DaravasePort Specifies the port the database server is running on. #
13369 # DatabaseProtocol Specifies the protocol the database server is using. #
13370 # DatabaseSQLDatabase Specifies the SQL database name to use. #
13371 # DatabaseUsername Specifies the database server username. #
13372 # DatabasePassword Specifies the password for the database server username.#
13373 # DatabaseTablePrefix Specifies the table prefix to use. #
13374 #################################################################################
13376 # Get the variables passed from the subroutine.
13378 my $xml_filename = shift;
13379 my $xml_type = shift;
13380 my ($passedsettings) = @_;
13382 # Check if filename is blank, if it is then return an error.
13384 if ($xml_filename eq ""){
13385 # Filename is blank, return an error.
13386 kiriwrite_error("blankfilename");
13389 # Validate the XML filename to make sure nothing supicious is being passed.
13391 kiriwrite_variablecheck($xml_filename, "maxlength", 64, 0);
13392 kiriwrite_variablecheck($xml_filename, "filename", "", 0);
13394 # Check what type of XML data to output.
13396 if ($xml_type eq "config") {
13398 # The type of XML data to output is a Kiriwrite configuration file.
13400 # Get the data from the hash.
13402 my $settings_databasedir = $passedsettings->{"DatabaseDirectory"};
13403 my $settings_outputdir = $passedsettings->{"OutputDirectory"};
13404 my $settings_imagesuri = $passedsettings->{"ImagesURIPath"};
13405 my $settings_datetime = $passedsettings->{"DateTimeFormat"};
13406 my $settings_systemlanguage = $passedsettings->{"SystemLanguage"};
13407 my $settings_presmodule = $passedsettings->{"PresentationModule"};
13408 my $settings_dbmodule = $passedsettings->{"DatabaseModule"};
13410 my $settings_database_server = $passedsettings->{"DatabaseServer"};
13411 my $settings_database_port = $passedsettings->{"DatabasePort"};
13412 my $settings_database_protocol = $passedsettings->{"DatabaseProtocol"};
13413 my $settings_database_sqldatabase = $passedsettings->{"DatabaseSQLDatabase"};
13414 my $settings_database_username = $passedsettings->{"DatabaseUsername"};
13415 my $settings_database_password = $passedsettings->{"DatabasePassword"};
13416 my $settings_database_tableprefix = $passedsettings->{"DatabaseTablePrefix"};
13418 # Convert the password to make sure it can be read properly.
13420 $settings_database_password =~ s/\0//g;
13421 $settings_database_password =~ s/</</g;
13422 $settings_database_password =~ s/>/>/g;
13424 # Convert the less than and greater than characters are there and
13427 $settings_imagesuri =~ s/</</g;
13428 $settings_imagesuri =~ s/>/>/g;
13430 # Create the XML data layout.
13432 my $xmldata = "<?xml version=\"1.0\"?>\r\n\r\n<kiriwrite-config>\r\n";
13434 $xmldata = $xmldata . "<!-- This file was automatically generated by Kiriwrite, please feel free to edit to your own needs. -->\r\n";
13435 $xmldata = $xmldata . "\t<settings>\r\n\t\t<directories>\r\n";
13437 $xmldata = $xmldata . "\t\t\t<database>" . $settings_databasedir . "</database>\r\n";
13438 $xmldata = $xmldata . "\t\t\t<output>" . $settings_outputdir . "</output>\r\n";
13439 $xmldata = $xmldata . "\t\t\t<images>" . $settings_imagesuri . "</images>\r\n";
13440 $xmldata = $xmldata . "\t\t</directories>\r\n";
13442 $xmldata = $xmldata . "\t\t<language>\r\n";
13443 $xmldata = $xmldata . "\t\t\t<lang>" . $settings_systemlanguage . "</lang>\r\n";
13444 $xmldata = $xmldata . "\t\t</language>\r\n";
13446 $xmldata = $xmldata . "\t\t<system>\r\n";
13447 $xmldata = $xmldata . "\t\t\t<presentation>" . $settings_presmodule . "</presentation>\r\n";
13448 $xmldata = $xmldata . "\t\t\t<database>" . $settings_dbmodule . "</database>\r\n";
13449 $xmldata = $xmldata . "\t\t\t<datetime>" . $settings_datetime . "</datetime>\r\n";
13450 $xmldata = $xmldata . "\t\t</system>\r\n";
13452 $xmldata = $xmldata . "\t\t<database>\r\n";
13453 $xmldata = $xmldata . "\t\t\t<server>" . $settings_database_server . "</server>\r\n";
13454 $xmldata = $xmldata . "\t\t\t<port>" . $settings_database_port . "</port>\r\n";
13455 $xmldata = $xmldata . "\t\t\t<protocol>" . $settings_database_protocol . "</protocol>\r\n";
13456 $xmldata = $xmldata . "\t\t\t<database>" . $settings_database_sqldatabase . "</database>\r\n";
13457 $xmldata = $xmldata . "\t\t\t<username>" . $settings_database_username . "</username>\r\n";
13458 $xmldata = $xmldata . "\t\t\t<password>" . $settings_database_password . "</password>\r\n";
13459 $xmldata = $xmldata . "\t\t\t<prefix>" . $settings_database_tableprefix . "</prefix>\r\n";
13460 $xmldata = $xmldata . "\t\t</database>\r\n";
13462 $xmldata = $xmldata . "\t</settings>\r\n";
13464 $xmldata = $xmldata . "</kiriwrite-config>";
13466 # Open the Kiriwrite XML configuration file and write the new settings to the
13467 # configuration file.
13469 open(my $filehandle_xmlconfig, "> ", "kiriwrite.xml");
13470 print $filehandle_xmlconfig $xmldata;
13471 close($filehandle_xmlconfig);
13475 # The type of XML data is something else that is not supported by
13476 # Kiriwrite, so return an error.
13478 kiriwrite_error("invalidoption");
13486 #################################################################################
13487 # End listing the functions needed. #
13488 #################################################################################
13490 #################################################################################
13491 # Begin proper script execution. #
13492 #################################################################################
13494 kiriwrite_settings_load; # Load the configuration options.
13496 my $query = new CGI; # Easily fetch variables from the HTTP string.
13500 # Check if a mode has been specified and if a mode has been specified, continue
13501 # and work out what mode has been specified.
13503 if ($query->param('mode')){
13504 my $http_query_mode = $query->param('mode');
13506 if ($http_query_mode eq "db"){
13508 # If mode is 'db' (database), then check what action is required.
13510 if ($query->param('action')){
13511 # An action has been specified, so find out what action has been specified.
13513 my $http_query_action = $query->param('action');
13515 if ($http_query_action eq "edit"){
13516 # The edit action (which mean edit the settings for the selected database) has been specified,
13517 # get the database name and check if the action to edit an database has been confirmed.
13519 if ($query->param('database')){
13520 # If there is a value in the database variable check if it is a valid database. Otherwise,
13523 my $http_query_database = $query->param('database');
13525 # Check if a value for confirm has been specified, if there is, check if it is the correct
13526 # value, otherwise return an error.
13528 if ($query->param('confirm')){
13529 # A value for confirm has been specified, find out what value it is. If the value is correct
13530 # then edit the database settings, otherwise return an error.
13532 my $http_query_confirm = $query->param('confirm');
13534 if ($http_query_confirm eq 1){
13535 # Value is correct, collect the variables to pass onto the database variable.
13537 # Get the variables from the HTTP query.
13539 my $newdatabasename = $query->param('databasename');
13540 my $newdatabasedescription = $query->param('databasedescription');
13541 my $newdatabasefilename = $query->param('databasefilename');
13542 my $databaseshortname = $query->param('database');
13543 my $databasenotes = $query->param('databasenotes');
13544 my $databasecategories = $query->param('databasecategories');
13546 # Check the permissions of the database configuration file and return
13547 # an error if the database permissions are invalid.
13549 # Pass the variables to the database editing subroutine.
13551 my $pagedata = kiriwrite_database_edit($databaseshortname, $newdatabasefilename, $newdatabasename, $newdatabasedescription, $databasenotes, $databasecategories, 1);
13553 kiriwrite_output_header;
13554 kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13558 # Value is incorrect, return and error.
13559 kiriwrite_error("invalidvariable");
13564 # Display the form for editing an database.
13565 my $pagedata = kiriwrite_database_edit($http_query_database);
13567 kiriwrite_output_header;
13568 kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
13573 # If there is no value in the database variable, then return an error.
13574 kiriwrite_error("invalidvariable");
13578 } elsif ($http_query_action eq "delete"){
13580 # Action equested is to delete a database, find out if the user has already confirmed deletion of the database
13581 # and if the deletion of the database has been confirmed, delete the database.
13583 if ($query->param('confirm')){
13585 # User has confirmed to delete a database, pass the parameters to the kiriwrite_database_delete
13588 my $database_filename = $query->param('database');
13589 my $database_confirm = $query->param('confirm');
13590 my $pagedata = kiriwrite_database_delete($database_filename, $database_confirm);
13592 kiriwrite_output_header;
13593 kiriwrite_output_page($kiriwrite_lang->{database}->{deleteddatabase}, $pagedata, "database");
13599 # User has clicked on the delete link (thus hasn't confirmed the action to delete a database).
13601 my $database_filename = $query->param('database');
13602 my $pagedata = kiriwrite_database_delete($database_filename);
13604 kiriwrite_output_header;
13605 kiriwrite_output_page($kiriwrite_lang->{database}->{deletedatabase}, $pagedata, "database");
13609 } elsif ($http_query_action eq "new"){
13611 # Action requested is to create a new database, find out if the user has already entered the information needed
13612 # to create a database and see if the user has confirmed the action, otherwise printout a form for adding a
13615 my $http_query_confirm = $query->param('confirm');
13617 # Check if the confirm value is correct.
13619 if ($http_query_confirm){
13620 if ($http_query_confirm eq 1){
13622 # User has confirmed to create a database, pass the parameters to the
13623 # kiriwrite_database_add subroutine.
13625 my $http_query_confirm = $query->param('confirm');
13627 my $database_name = $query->param('databasename');
13628 my $database_description = $query->param('databasedescription');
13629 my $database_filename = $query->param('databasefilename');
13630 my $database_notes = $query->param('databasenotes');
13631 my $database_categories = $query->param('databasecategories');
13633 my $pagedata = kiriwrite_database_add($database_filename, $database_name, $database_description, $database_notes, $database_categories, $http_query_confirm);
13635 kiriwrite_output_header;
13636 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13641 # The confirm value is something else other than 1 (which it shouldn't be), so
13647 # User has clicked on the 'Add Database' link.
13649 my $pagedata = kiriwrite_database_add;
13651 kiriwrite_output_header;
13652 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
13656 # Another option has been specified, so return an error.
13658 kiriwrite_error("invalidaction");
13662 # No action has been specified, do the default action of displaying a list
13665 my $pagedata = kiriwrite_database_list;
13667 kiriwrite_output_header; # Output the header to browser/console/stdout.
13668 kiriwrite_output_page("", $pagedata, "database"); # Output the page to browser/console/stdout.
13669 exit; # End the script.
13671 } elsif ($http_query_mode eq "page"){
13673 # If mode is 'page', then check what action is required.
13675 if ($query->param('action')){
13676 my $http_query_action = $query->param('action');
13678 # Check if the action requested matches with one of the options below. If it does,
13679 # go to that section, otherwise return an error.
13681 if ($http_query_action eq "view"){
13683 # The action selected was to view pages from a database,
13685 my $database_name = $query->param('database');
13686 my $pagedata = kiriwrite_page_list($database_name);
13688 kiriwrite_output_header; # Output the header to browser/console/stdout.
13689 kiriwrite_output_page($kiriwrite_lang->{pages}->{viewingdatabase}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13690 exit; # End the script.
13692 } elsif ($http_query_action eq "add"){
13694 # The action selected was to add a page to the selected database.
13696 my $http_query_confirm = $query->param('confirm');
13698 if (!$http_query_confirm){
13700 $http_query_confirm = 0;
13704 if ($http_query_confirm eq 1){
13706 my $http_query_database = $query->param('database');
13707 my $http_query_filename = $query->param('pagefilename');
13708 my $http_query_name = $query->param('pagename');
13709 my $http_query_description = $query->param('pagedescription');
13710 my $http_query_section = $query->param('pagesection');
13711 my $http_query_template = $query->param('pagetemplate');
13712 my $http_query_settings = $query->param('pagesettings');
13713 my $http_query_content = $query->param('pagecontent');
13715 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);
13717 kiriwrite_output_header; # Output the header to browser/console/stdout.
13718 kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13719 exit; # End the script.
13723 my $http_query_database = $query->param('database');
13724 my $pagedata = kiriwrite_page_add($http_query_database);
13726 kiriwrite_output_header; # Output the header to browser/console/stdout.
13727 kiriwrite_output_page($kiriwrite_lang->{pages}->{addpage}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13728 exit; # End the script.
13730 } elsif ($http_query_action eq "edit"){
13732 # The action selected was to edit a page from a database.
13734 my $http_query_confirm = $query->param('confirm');
13736 if (!$http_query_confirm){
13738 $http_query_confirm = 0;
13742 if ($http_query_confirm eq 1){
13744 # Get the needed values from the HTTP query.
13746 my $http_query_database = $query->param('database');
13747 my $http_query_filename = $query->param('page');
13748 my $http_query_newfilename = $query->param('pagefilename');
13749 my $http_query_name = $query->param('pagename');
13750 my $http_query_description = $query->param('pagedescription');
13751 my $http_query_section = $query->param('pagesection');
13752 my $http_query_template = $query->param('pagetemplate');
13753 my $http_query_settings = $query->param('pagesettings');
13754 my $http_query_content = $query->param('pagecontent');
13756 # Pass the values to the editing pages subroutine.
13758 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);
13760 kiriwrite_output_header; # Output the header to browser/console/stdout.
13761 kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13762 exit; # End the script.
13766 # Get the needed values from the HTTP query.
13768 my $http_query_database = $query->param('database');
13769 my $http_query_filename = $query->param('page');
13771 # Pass the values to the editing pages subroutine.
13773 my $pagedata = kiriwrite_page_edit($http_query_database, $http_query_filename);
13775 kiriwrite_output_header; # Output the header to browser/console/stdout.
13776 kiriwrite_output_page($kiriwrite_lang->{pages}->{editpagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13777 exit; # End the script.
13780 } elsif ($http_query_action eq "delete"){
13782 # The action selected was to delete a page from a database.
13784 my $http_query_database = $query->param('database');
13785 my $http_query_page = $query->param('page');
13786 my $http_query_confirm = $query->param('confirm');
13789 my $selectionlist = "";
13791 if ($http_query_confirm){
13793 # The action has been confirmed, so try to delete the selected page
13794 # from the database.
13796 $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page, $http_query_confirm);
13798 kiriwrite_output_header; # Output the header to browser/console/stdout.
13799 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13800 exit; # End the script.
13804 $pagedata = kiriwrite_page_delete($http_query_database, $http_query_page);
13806 kiriwrite_output_header; # Output the header to browser/console/stdout.
13807 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletepagetitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13808 exit; # End the script.
13811 } elsif ($http_query_action eq "multidelete"){
13813 # The action selected was to delete multiple pages from a
13816 my $http_query_database = $query->param('database');
13817 my $http_query_confirm = $query->param('confirm');
13822 if ($http_query_confirm){
13824 # The action to delete multiple pages from the selected
13825 # database has been confirmed.
13827 @filelist = kiriwrite_selectedlist();
13828 $pagedata = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13830 kiriwrite_output_header; # Output the header to browser/console/stdout.
13831 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13832 exit; # End the script.
13836 # Get the list of selected pages and pass them to the
13837 # multiple page delete subroutine.
13839 @filelist = kiriwrite_selectedlist();
13840 $pagedata = kiriwrite_page_multidelete($http_query_database, $http_query_confirm, @filelist);
13842 kiriwrite_output_header; # Output the header to browser/console/stdout.
13843 kiriwrite_output_page($kiriwrite_lang->{pages}->{deletemultiplepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13844 exit; # End the script.
13846 } elsif ($http_query_action eq "multimove"){
13848 # The action selected was to move multiple pages from a
13851 my $http_query_database = $query->param('database');
13852 my $http_query_newdatabase = $query->param('newdatabase');
13853 my $http_query_confirm = $query->param('confirm');
13858 if ($http_query_confirm){
13860 # The action to move multiple pages from the selected
13861 # database has been confirmed.
13863 @filelist = kiriwrite_selectedlist();
13864 $pagedata = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13866 kiriwrite_output_header; # Output the header to browser/console/stdout.
13867 kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13868 exit; # End the script.
13872 # Get the list of selected pages and pass them to the
13873 # multiple page move subroutine.
13875 @filelist = kiriwrite_selectedlist();
13876 $pagedata = kiriwrite_page_multimove($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13878 kiriwrite_output_header; # Output the header to browser/console/stdout.
13879 kiriwrite_output_page($kiriwrite_lang->{pages}->{movepages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13880 exit; # End the script.
13882 } elsif ($http_query_action eq "multicopy"){
13884 # The action selected was to copy multiple pages from a
13887 my $http_query_database = $query->param('database');
13888 my $http_query_newdatabase = $query->param('newdatabase');
13889 my $http_query_confirm = $query->param('confirm');
13894 if ($http_query_confirm){
13896 # The action to copy multiple pages from the selected
13897 # database has been confirmed.
13899 @filelist = kiriwrite_selectedlist();
13900 $pagedata = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13902 kiriwrite_output_header; # Output the header to browser/console/stdout.
13903 kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13904 exit; # End the script.
13908 # Get the list of selected pages and pass them to the
13909 # multiple page copy subroutine.
13911 @filelist = kiriwrite_selectedlist();
13912 $pagedata = kiriwrite_page_multicopy($http_query_database, $http_query_newdatabase, $http_query_confirm, @filelist);
13914 kiriwrite_output_header; # Output the header to browser/console/stdout.
13915 kiriwrite_output_page($kiriwrite_lang->{pages}->{copypages}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13916 exit; # End the script.
13918 } elsif ($http_query_action eq "multiedit"){
13920 # The action selected was to edit multiple pages from a
13923 my $http_query_database = $query->param('database');
13924 my $http_query_newsection = $query->param('newsection');
13925 my $http_query_altersection = $query->param('altersection');
13926 my $http_query_newtemplate = $query->param('newtemplate');
13927 my $http_query_altertemplate = $query->param('altertemplate');
13928 my $http_query_newsettings = $query->param('newsettings');
13929 my $http_query_altersettings = $query->param('altersettings');
13930 my $http_query_confirm = $query->param('confirm');
13935 if (!$http_query_confirm){
13937 @filelist = kiriwrite_selectedlist();
13938 $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);
13940 kiriwrite_output_header; # Output the header to browser/console/stdout.
13941 kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13946 # Get the list of selected pages and pass them to the
13947 # multiple page edit subroutine.
13949 @filelist = kiriwrite_selectedlist();
13950 $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);
13952 kiriwrite_output_header; # Output the header to browser/console/stdout.
13953 kiriwrite_output_page($kiriwrite_lang->{pages}->{multiedit}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13954 exit; # End the script.
13957 kiriwrite_error("invalidaction");
13962 # If there the action option is left blank, then print out a form where the database
13963 # can be selected to view pages from.
13965 my $pagedata = kiriwrite_page_list;
13967 kiriwrite_output_header; # Output the header to browser/console/stdout.
13968 kiriwrite_output_page($kiriwrite_lang->{pages}->{databaseselecttitle}, $pagedata, "pages"); # Output the page to browser/console/stdout.
13969 exit; # End the script.
13973 # No action has been specified, do the default action of listing pages from
13974 # the first database found in the directory.
13976 } elsif ($http_query_mode eq "filter"){
13978 # If there's a value for action in the HTTP query, then
13979 # get that value that is in the HTTP query.
13981 if ($query->param('action')){
13983 # There is a value for action in the HTTP query,
13984 # so get the value from it.
13986 my $http_query_action = $query->param('action');
13988 if ($http_query_action eq "add"){
13990 # The action the user requested is to add a filter to the
13993 # Check if there is a value in confirm and if there is
13994 # then pass it on to the new find and replace words
13995 # to add to the filter database.
13997 my $http_query_confirm = $query->param('confirm');
13999 if ($http_query_confirm){
14001 # There is a value in http_query_confirm, so pass on the
14002 # new find and replace words so that they can be added
14003 # to the filter database.
14005 my $http_query_findwords = $query->param('findword');
14006 my $http_query_replacewords = $query->param('replaceword');
14007 my $http_query_priority = $query->param('priority');
14008 my $http_query_notes = $query->param('notes');
14010 my $pagedata = kiriwrite_filter_add($http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
14012 kiriwrite_output_header; # Output the header to browser/console/stdout.
14013 kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14014 exit; # End the script.
14018 my $pagedata = kiriwrite_filter_add();
14020 kiriwrite_output_header; # Output the header to browser/console/stdout.
14021 kiriwrite_output_page($kiriwrite_lang->{filter}->{addfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14022 exit; # End the script.
14024 } elsif ($http_query_action eq "edit"){
14026 # The action the user requested is to edit an filter from
14027 # the filter database.
14029 my $http_query_number = $query->param('filter');
14030 my $http_query_confirm = $query->param('confirm');
14032 if ($http_query_confirm){
14034 # There is a value in http_query_confirm, so pass on the
14035 # new find and replace words so that the filter database
14038 my $http_query_findwords = $query->param('filterfind');
14039 my $http_query_replacewords = $query->param('filterreplace');
14040 my $http_query_priority = $query->param('priority');
14041 my $http_query_notes = $query->param('notes');
14043 my $pagedata = kiriwrite_filter_edit($http_query_number, $http_query_findwords, $http_query_replacewords, $http_query_priority, $http_query_notes, $http_query_confirm);
14045 kiriwrite_output_header; # Output the header to browser/console/stdout.
14046 kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14047 exit; # End the script.
14051 my $pagedata = kiriwrite_filter_edit($http_query_number);
14053 kiriwrite_output_header; # Output the header to browser/console/stdout.
14054 kiriwrite_output_page($kiriwrite_lang->{filter}->{editfilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14055 exit; # End the script.
14057 } elsif ($http_query_action eq "delete"){
14059 # The action the user requested is to delete an filter
14060 # from the filter database.
14062 my $http_query_number = $query->param('filter');
14063 my $http_query_confirm = $query->param('confirm');
14065 if ($http_query_confirm){
14067 my $pagedata = kiriwrite_filter_delete($http_query_number, $http_query_confirm);
14069 kiriwrite_output_header; # Output the header to browser/console/stdout.
14070 kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14071 exit; # End the script
14075 my $pagedata = kiriwrite_filter_delete($http_query_number);
14077 kiriwrite_output_header; # Output the header to browser/console/stdout.
14078 kiriwrite_output_page($kiriwrite_lang->{filter}->{deletefilter}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14079 exit; # End the script.
14083 # Another action was requested that was not one of
14084 # the ones prcedding this catch all, so return
14085 # an error saying that an invalid option was
14088 kiriwrite_error("invalidaction");
14094 my $pagedata = kiriwrite_filter_list();
14096 kiriwrite_output_header; # Output the header to browser/console/stdout.
14097 kiriwrite_output_page($kiriwrite_lang->{filter}->{viewfilters}, $pagedata, "filter"); # Output the page to browser/console/stdout.
14098 exit; # End the script.
14104 } elsif ($http_query_mode eq "template"){
14106 # Check if an action has been specified in the HTTP query.
14108 if ($query->param('action')){
14110 # An action has been specified in the HTTP query.
14112 my $http_query_action = $query->param('action');
14114 if ($http_query_action eq "delete"){
14115 # Get the required parameters from the HTTP query.
14117 my $http_query_template = $query->param('template');
14118 my $http_query_confirm = $query->param('confirm');
14120 # Check if a value for confirm has been specified (it shouldn't)
14123 if (!$http_query_confirm){
14124 # The confirm parameter of the HTTP query is blank, so
14125 # write out a form asking the user to confirm the deletion
14126 # of the selected template.
14128 my $pagedata = kiriwrite_template_delete($http_query_template);
14130 kiriwrite_output_header; # Output the header to browser/console/stdout.
14131 kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14132 exit; # End the script.
14136 my $pagedata = kiriwrite_template_delete($http_query_template, $http_query_confirm);
14138 kiriwrite_output_header; # Output the header to browser/console/stdout.
14139 kiriwrite_output_page($kiriwrite_lang->{template}->{deletetemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14140 exit; # End the script.
14144 } elsif ($http_query_action eq "add") {
14146 # Get the variables from the HTTP query in preperation for processing.
14148 my $http_query_confirm = $query->param('confirm');
14149 my $http_query_templatelayout = $query->param('templatelayout');
14150 my $http_query_templatename = $query->param('templatename');
14151 my $http_query_templatedescription = $query->param('templatedescription');
14152 my $http_query_templatefilename = $query->param('templatefilename');
14154 # Check if there is a confirmed value in the http_query_confirm variable.
14156 if (!$http_query_confirm){
14158 # Since there is no confirm value, print out a form for creating a new
14161 my $pagedata = kiriwrite_template_add();
14163 kiriwrite_output_header; # Output the header to browser/console/stdout.
14164 kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14165 exit; # End the script.
14169 # A value in the http_query_confirm value is specified, so pass the
14170 # variables onto the kiriwrite_template_add subroutine.
14172 my $pagedata = kiriwrite_template_add($http_query_templatefilename, $http_query_templatename, $http_query_templatedescription, $http_query_templatelayout, $http_query_confirm);
14174 kiriwrite_output_header; # Output the header to browser/console/stdout.
14175 kiriwrite_output_page($kiriwrite_lang->{template}->{addtemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14176 exit; # End the script.
14180 } elsif ($http_query_action eq "edit") {
14182 # Get the required parameters from the HTTP query.
14184 my $http_query_templatefile = $query->param('template');
14185 my $http_query_confirm = $query->param('confirm');
14187 # Check to see if http_query_confirm has a value of '1' in it and
14188 # if it does, edit the template using the settings providied.
14190 if (!$http_query_confirm){
14192 # Since there is no confirm value, open the template configuration
14193 # file and the template file itself then print out the data on to
14196 my $pagedata = kiriwrite_template_edit($http_query_templatefile);
14197 kiriwrite_output_header; # Output the header to browser/console/stdout.
14198 kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14199 exit; # End the script.
14201 } elsif ($http_query_confirm eq 1) {
14203 # Since there is a confirm value of 1, the user has confirm the
14204 # action of editing of a template so get the other variables
14205 # that were also sent and pass the variables to the subroutine.
14207 my $http_query_newfilename = $query->param('newfilename');
14208 my $http_query_newname = $query->param('newname');
14209 my $http_query_newdescription = $query->param('newdescription');
14210 my $http_query_newlayout = $query->param('newlayout');
14212 my $pagedata = kiriwrite_template_edit($http_query_templatefile, $http_query_newfilename, $http_query_newname, $http_query_newdescription, $http_query_newlayout, $http_query_confirm);
14213 kiriwrite_output_header; # Output the header to browser/console/stdout.
14214 kiriwrite_output_page($kiriwrite_lang->{template}->{edittemplate}, $pagedata, "template"); # Output the page to browser/console/stdout.
14215 exit; # End the script.
14219 # Another confirm value is there instead of '0' or '1'. Return
14220 # an error saying it is invalid.
14222 kiriwrite_error("invalidvariable");
14228 # Another action was specified and was not one of the ones above, so
14231 kiriwrite_error("invalidaction");
14237 # If the action option is left blank, then print out a form where the list
14238 # of templates are available.
14240 my $pagedata = kiriwrite_template_list;
14242 kiriwrite_output_header; # Output the header to browser/console/stdout.
14243 kiriwrite_output_page($kiriwrite_lang->{template}->{viewtemplates}, $pagedata, "template"); # Output the page to browser/console/stdout.
14244 exit; # End the script.
14248 } elsif ($http_query_mode eq "compile"){
14250 # The mode selected is to compile pages from databases.
14252 # If the action option is left blank, then print out a form where the list
14253 # of databases to compile are available.
14255 if ($query->param('action')){
14257 my $http_query_action = $query->param('action');
14259 if ($http_query_action eq "compile"){
14261 # The specified action is to compile the pages, check if the
14262 # action to compile the page has been confirmed.
14264 my $http_query_confirm = $query->param('confirm');
14265 my $http_query_type = $query->param('type');
14267 # If it is blank, set the confirm value to 0.
14269 if (!$http_query_confirm){
14271 # The http_query_confirm variable is uninitalised, so place a
14272 # '0' (meaning an unconfirmed action).
14274 $http_query_confirm = 0;
14278 # If the compile type is blank then return an error.
14280 if (!$http_query_type){
14282 # Compile type is blank so return an error.
14284 kiriwrite_error("blankcompiletype");
14288 if ($http_query_type eq "multiple"){
14290 if ($http_query_confirm eq 1){
14292 # The action to compile the pages has been confirmed so
14293 # compile the pages.
14295 my @selectedlist = kiriwrite_selectedlist();
14296 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14298 kiriwrite_output_header; # Output the header to browser/console/stdout.
14299 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14300 exit; # End the script.
14304 # The action to compile the pages has not been confirmed
14305 # so write a form asking the user to confirm the action
14306 # of compiling the pages.
14308 my @selectedlist = kiriwrite_selectedlist();
14309 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14311 kiriwrite_output_header; # Output the header to browser/console/stdout.
14312 kiriwrite_output_page($kiriwrite_lang->{compile}->{compileselecteddatabases}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14313 exit; # End the script.
14317 } elsif ($http_query_type eq "single"){
14319 my $http_query_database = $query->param('database');
14321 $selectedlist[0] = $http_query_database;
14322 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, @selectedlist);
14324 kiriwrite_output_header; # Output the header to browser/console/stdout.
14325 kiriwrite_output_page($kiriwrite_lang->{compile}->{compiledatabase}, $pagedata, "compile");
14326 exit; # End the script.
14330 kiriwrite_error("invalidcompiletype");
14334 } elsif ($http_query_action eq "all"){
14336 # The selected action is to compile all of the databases
14337 # in the database directory. Check if the action to
14338 # compile all of the databases has been confirmed.
14340 my $http_query_confirm = $query->param('confirm');
14342 if (!$http_query_confirm){
14344 # The http_query_confirm variable is uninitalised, so place a
14345 # '0' (meaning an unconfirmed action).
14347 $http_query_confirm = 0;
14351 if ($http_query_confirm eq 1){
14353 # The action to compile all the databases has been confirmed.
14357 my $pagedata = kiriwrite_compile_all();
14359 kiriwrite_output_header; # Output the header to browser/console/stdout.
14360 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilealldatabases}, $pagedata, "compile");
14363 } elsif ($http_query_action eq "clean") {
14365 # The selected action is to clean the output directory.
14366 # Check if the action to clean the output directory
14367 # has been confirmed.
14369 my $http_query_confirm = $query->param('confirm');
14371 if (!$http_query_confirm){
14373 # The http_query_confirm variable is uninitalised, so place a
14374 # '0' (meaning an unconfirmed action).
14376 $http_query_confirm = 0;
14380 if ($http_query_confirm eq 1){
14382 # The action to clean the output directory has been confirmed.
14384 my $pagedata = kiriwrite_compile_clean($http_query_confirm);
14386 kiriwrite_output_header; # Output the header to browser/console/stdout.
14387 kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14388 exit; # End the script.
14392 # The action to clean the output directory is not
14393 # confirmed, so write a page asking the user
14394 # to confirm cleaning the output directory.
14396 my $pagedata = kiriwrite_compile_clean();
14398 kiriwrite_output_header; # Output the header to browser/console/stdout.
14399 kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14400 exit; # End the script.
14404 # The action specified was something else other than those
14405 # above, so return an error.
14407 kiriwrite_error("invalidaction");
14412 my $pagedata = kiriwrite_compile_list;
14414 kiriwrite_output_header; # Output the header to browser/console/stdout.
14415 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile"); # Output the page to browser/console/stdout.
14416 exit; # End the script.
14418 } elsif ($http_query_mode eq "settings"){
14420 # The mode selected is view (and change settings).
14422 # If the action value has been left blank, then view the list of
14423 # current settings.
14425 if ($query->param('action')){
14426 my $http_query_action = $query->param('action');
14428 if ($http_query_action eq "edit"){
14430 # The action specified is to edit the settings. Check if the action
14431 # to edit the settings has been confirmed.
14433 my $http_query_confirm = $query->param('confirm');
14435 if (!$http_query_confirm){
14437 # The confirm value is blank, so set it to 0.
14439 $http_query_confirm = 0;
14443 if ($http_query_confirm eq 1){
14445 # The action to edit the settings has been confirmed. Get the
14446 # required settings from the HTTP query.
14448 my $http_query_database = $query->param('databasedir');
14449 my $http_query_output = $query->param('outputdir');
14450 my $http_query_imagesuri = $query->param('imagesuripath');
14451 my $http_query_datetimeformat = $query->param('datetime');
14452 my $http_query_systemlanguage = $query->param('language');
14453 my $http_query_presmodule = $query->param('presmodule');
14454 my $http_query_dbmodule = $query->param('dbmodule');
14456 my $http_query_database_server = $query->param('database_server');
14457 my $http_query_database_port = $query->param('database_port');
14458 my $http_query_database_protocol = $query->param('database_protocol');
14459 my $http_query_database_sqldatabase = $query->param('database_sqldatabase');
14460 my $http_query_database_username = $query->param('database_username');
14461 my $http_query_database_passwordkeep = $query->param('database_password_keep');
14462 my $http_query_database_password = $query->param('database_password');
14463 my $http_query_database_tableprefix = $query->param('database_tableprefix');
14465 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 });
14467 kiriwrite_output_header; # Output the header to browser/console/stdout.
14468 kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings"); # Output the page to browser/console/stdout.
14469 exit; # End the script.
14473 # The action to edit the settings has not been confirmed.
14475 my $pagedata = kiriwrite_settings_edit;
14477 kiriwrite_output_header; # Output the header to browser/console/stdout.
14478 kiriwrite_output_page($kiriwrite_lang->{setting}->{editsettings}, $pagedata, "settings"); # Output the page to browser/console/stdout.
14479 exit; # End the script.
14483 # The action specified was something else other than those
14484 # above, so return an error.
14486 kiriwrite_error("invalidaction");
14492 # No action has been specified, so print out the list of settings currently being used.
14494 my $pagedata = kiriwrite_settings_view;
14496 kiriwrite_output_header; # Output the header to browser/console/stdout.
14497 kiriwrite_output_page($kiriwrite_lang->{setting}->{viewsettings}, $pagedata, "settings"); # Output the page to browser/console/stdout.
14498 exit; # End the script.
14501 # Another mode has been specified than the ones above, so return an error saying that
14502 # an invalid option was specified.
14504 kiriwrite_error("invalidmode");
14509 # No mode has been specified, so print the default "first-run" view of the
14512 my $pagedata = kiriwrite_database_list;
14514 kiriwrite_output_header; # Output the header to browser/console/stdout.
14515 kiriwrite_output_page("", $pagedata, "database"); # Output the page to browser/console/stdout.
14516 exit; # End the script.
14528 Web-based webpage compiler.
14532 Steve Brokenshire <sbrokenshire@xestia.co.uk>
14536 This perl script is intended to be used on a web server which has CGI with Perl support or with mod_perl support.
14538 =head1 DOCUMENTATION
14540 For more information on how to use Kiriwrite, please see the documentation that was included with Kiriwrite.
14542 - From the Xestia Documentation website: http://documentation.xestia.co.uk and click on the Kiriwrite link on the page.
14544 - From the Documentation directory from the Kiriwrite source packages (.tar/.tar.gz/.tar.bz2).
14546 - In the /usr/share/doc/kiriwrite directory if you installed the distribution-specific packages (and also have access to the server itself).