+ # Check the confirm value to make sure it is no more than
+ # one character long.
+
+ kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
+
+ # Check if the confirm value is blank and if it is
+ # srt the confirm value to 0.
+
+ if (!$confirm){
+
+ # The confirm value does not have any value
+ # set so set it to 0.
+
+ $confirm = 0;
+
+ }
+
+ # Check if the filter identification number is blank,
+ # contains characters other than numbers and is more
+ # than seven characters long.
+
+ if (!$filter_id){
+
+ # The filter identification number is blank,
+ # so return an error.
+
+ kiriwrite_error("filteridblank");
+
+ }
+
+ my $filter_id_numbers_check = kiriwrite_variablecheck($filter_id, "numbers", 0, 1);
+
+ if ($filter_id_numbers_check eq 1){
+
+ # The filter identification number contains
+ # characters other than numbers, so return
+ # an error.
+
+ kiriwrite_error("filteridinvalid");
+
+ }
+
+ my $filter_id_maxlength_check = kiriwrite_variablecheck($filter_id, "maxlength", 7, 1);
+
+ if ($filter_id_maxlength_check eq 1){
+
+ # The filter identification number given
+ # is more than seven characters long, so
+ # return an error.
+
+ kiriwrite_error("filteridtoolong");
+
+ }
+
+ my $filter_priority;
+ my $filter_find;
+ my $filter_replace;
+ my $filter_notes;
+
+ # Check if the action to edit a filter has been
+ # confirmed.
+
+ if ($confirm eq 1){
+
+ # The action to edit a filter has been confirmed so
+ # edit the selected filter.
+
+ # First, check the variables recieved are UTF8
+ # copliant.
+
+ kiriwrite_variablecheck($filter_new_find, "utf8", 0, 0);
+ kiriwrite_variablecheck($filter_new_replace, "utf8", 0, 0);
+ kiriwrite_variablecheck($filter_new_priority, "utf8", 0, 0);
+ kiriwrite_variablecheck($filter_new_notes, "utf8", 0, 0);
+
+ # Convert the UTF8 values so that the length can
+ # checked properly.
+
+ $filter_find = kiriwrite_utf8convert($filter_new_find);
+ $filter_replace = kiriwrite_utf8convert($filter_new_replace);
+ $filter_priority = kiriwrite_utf8convert($filter_new_priority);
+ $filter_notes = kiriwrite_utf8convert($filter_new_notes);
+
+ # Check if the find filter is blank and return an error
+ # if it is.
+
+ if (!$filter_new_find){
+
+ # The find filter given is blank so return an
+ # error.
+
+ kiriwrite_error("blankfindfilter");
+
+ }
+
+ if (!$filter_new_priority){
+
+ # The filter priority is blank so set it
+ # to 1.
+
+ $filter_new_priority = 1;
+
+ }
+
+ # Check the length and contents of the values given
+ # to make sure they are valid.
+
+ my $filterfind_maxlength_check = kiriwrite_variablecheck($filter_new_find, "maxlength", 1024, 1);
+ my $filterreplace_maxlength_check = kiriwrite_variablecheck($filter_new_replace, "maxlength", 1024, 1);
+ my $filterpriority_maxlength_check = kiriwrite_variablecheck($filter_new_priority, "maxlength", 5, 1);
+ my $filterpriority_numbers_check = kiriwrite_variablecheck($filter_new_priority, "numbers", 0, 1);
+
+ # Check if the result of the tests to see if they
+ # are valid.
+
+ if ($filterfind_maxlength_check eq 1){
+
+ # The find filter is too long, so return
+ # an error.
+
+ kiriwrite_error("findfiltertoolong");
+
+ }
+
+ if ($filterreplace_maxlength_check eq 1){
+
+ # The replace filter is too long, so
+ # return an error.
+
+ kiriwrite_error("replacefiltertoolong");
+
+ }
+
+ if ($filterpriority_maxlength_check eq 1){
+
+ # The length of the filter priority
+ # given is too long, so return an
+ # error.
+
+ kiriwrite_error("filterprioritytoolong");
+
+ }
+
+ if ($filterpriority_numbers_check eq 1){
+
+ # The priority of the filter given
+ # contains characters other than
+ # numbers.
+
+ kiriwrite_error("filterpriorityinvalidchars");
+
+ }
+
+ # Check if the filter priority is less than 1
+ # and more than 10000 and return an error
+ # if it is.
+
+ if ($filter_new_priority < 1 || $filter_new_priority > 50000){
+
+ # The filter priority is less than 1 and
+ # more than 10000, so return an error.
+
+ kiriwrite_error("filterpriorityinvalid");
+
+ }
+
+ # Connect to the database server.
+
+ $kiriwrite_dbmodule->connect();
+
+ # Check if any errors occured while connecting to the database server.
+
+ if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
+
+ # A database connection error has occured so return
+ # an error.
+
+ kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
+
+ }
+
+ # Connect to the filters database.
+
+ $kiriwrite_dbmodule->connectfilter();
+
+ # Check if any error has occured while connecting to the filter
+ # database.
+
+ if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
+
+ # The filter database does not exist.
+
+ kiriwrite_error("filtersdbmissing");
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
+
+ # The filter database has invalid permissions set so return
+ # an error.
+
+ kiriwrite_error("filtersdbpermissions");
+
+ }
+
+ # Edit the selected filter in the filter database.
+
+ $kiriwrite_dbmodule->editfilter({ FilterID => $filter_id, NewFindFilter => $filter_new_find, NewReplaceFilter => $filter_new_replace, NewFilterPriority => $filter_new_priority, NewFilterNotes => $filter_new_notes });
+
+ # Check if any errors occured while editing the filter.
+
+ if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
+
+ # The filter database has invalid permissions set so return
+ # an error.
+
+ kiriwrite_error("filtersdbpermissions");
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
+
+ # A database error has occured while using the filters database
+ # so return an error.
+
+ kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
+
+ # The specified filter does not exist so return an error.
+
+ kiriwrite_error("filterdoesnotexist");
+
+ }
+
+ # Disconnect from the filter database.
+
+ $kiriwrite_dbmodule->disconnectfilter();
+
+ # Disconnect from the database server.
+
+ $kiriwrite_dbmodule->disconnect();
+
+ # Write a message saying that the filter was edited.
+
+ $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfilter}, { Style => "pageheader" });
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editedfiltermessage});
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist}});
+
+ return $kiriwrite_presmodule->grab();
+
+ } elsif ($confirm eq 0){
+
+ # The action to edit a filter has not been confirmed
+ # so write a form for editing the filter with.
+
+ # Connect to the database server.
+
+ $kiriwrite_dbmodule->connect();
+
+ # Check if any errors occured while connecting to the database server.
+
+ if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
+
+ # A database connection error has occured so return
+ # an error.
+
+ kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
+
+ }
+
+ # Connect to the database server.
+
+ $kiriwrite_dbmodule->connect();
+
+ # Check if any errors occured while connecting to the database server.
+
+ if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
+
+ # A database connection error has occured so return
+ # an error.
+
+ kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
+
+ }
+
+ # Connect to the filters database.
+
+ $kiriwrite_dbmodule->connectfilter();
+
+ # Check if any error has occured while connecting to the filter
+ # database.
+
+ if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
+
+ # The filter database does not exist.
+
+ kiriwrite_error("filtersdbmissing");
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
+
+ # The filter database has invalid permissions set so return
+ # an error.
+
+ kiriwrite_error("filtersdbpermissions");
+
+ }
+
+ # Get information about the filter.
+
+ my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
+
+ # Check if any errors occured while getting information about the filter.
+
+ if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
+
+ # A database error occured while using the filter database so
+ # return an error.
+
+ kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
+
+ # The filter does not exist so return an error.
+
+ kiriwrite_error("filterdoesnotexist");
+
+ }
+
+ # Get the required information.
+
+ $filter_priority = $filter_info{"FilterPriority"};
+ $filter_find = $filter_info{"FilterFind"};
+ $filter_replace = $filter_info{"FilterReplace"};
+ $filter_notes = $filter_info{"FilterNotes"};
+
+ # Disconnect from the filter database.
+
+ $kiriwrite_dbmodule->disconnectfilter();
+
+ # Disconnect from the database server.
+
+ $kiriwrite_dbmodule->disconnect();
+
+ # Write out the form.
+
+ $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{editfilter}, { Style => "pageheader" });
+ $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
+ $kiriwrite_presmodule->addhiddendata("mode", "filter");
+ $kiriwrite_presmodule->addhiddendata("action", "edit");
+ $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
+ $kiriwrite_presmodule->addhiddendata("confirm", 1);
+
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
+
+ $kiriwrite_presmodule->startheader();
+ $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader" });
+ $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader" });
+ $kiriwrite_presmodule->endheader();
+
+ $kiriwrite_presmodule->startrow();
+ $kiriwrite_presmodule->addcell("tablecell1");
+ $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{findfilter});
+ $kiriwrite_presmodule->endcell();
+ $kiriwrite_presmodule->addcell("tablecell2");
+ $kiriwrite_presmodule->addinputbox("filterfind", { Size => 64, MaxLength => 1024, Value => $filter_find });
+ $kiriwrite_presmodule->endcell();
+ $kiriwrite_presmodule->endrow();
+
+ $kiriwrite_presmodule->startrow();
+ $kiriwrite_presmodule->addcell("tablecell1");
+ $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{replacefilter});
+ $kiriwrite_presmodule->endcell();
+ $kiriwrite_presmodule->addcell("tablecell2");
+ $kiriwrite_presmodule->addinputbox("filterreplace", { Size => 64, MaxLength => 1024, Value => $filter_replace });
+ $kiriwrite_presmodule->endcell();
+ $kiriwrite_presmodule->endrow();
+
+ $kiriwrite_presmodule->startrow();
+ $kiriwrite_presmodule->addcell("tablecell1");
+ $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{priority});
+ $kiriwrite_presmodule->endcell();
+ $kiriwrite_presmodule->addcell("tablecell2");
+ $kiriwrite_presmodule->addinputbox("priority", { Size => 5, MaxLength => 5, Value => $filter_priority });
+ $kiriwrite_presmodule->startlist();
+ $kiriwrite_presmodule->additem($kiriwrite_lang->{filter}->{noprioritygiven});
+ $kiriwrite_presmodule->endlist();
+ $kiriwrite_presmodule->endcell();
+ $kiriwrite_presmodule->endrow();
+
+ $kiriwrite_presmodule->startrow();
+ $kiriwrite_presmodule->addcell("tablecell1");
+ $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{notes});
+ $kiriwrite_presmodule->endcell();
+ $kiriwrite_presmodule->addcell("tablecell2");
+ $kiriwrite_presmodule->addtextbox("notes", { Columns => 50, Rows => 10});
+ $kiriwrite_presmodule->endcell();
+ $kiriwrite_presmodule->endrow();
+
+ $kiriwrite_presmodule->endtable();
+
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{editfilterbutton});
+ $kiriwrite_presmodule->addtext(" | ");
+ $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
+ $kiriwrite_presmodule->addtext(" | ");
+ $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
+
+ return $kiriwrite_presmodule->grab();
+
+ } else {
+
+ # A confirm value other than 0 or 1 has been
+ # specified, so return an error.
+
+ kiriwrite_error("invalidvalue");
+
+ }
+
+}
+
+sub kiriwrite_filter_delete{
+#################################################################################
+# kiriwrite_filter_delete: Deletes a filter from the filter list. #
+# #
+# Usage: #
+# #
+# kiriwrite_filter_delete(number, confirm); #
+# #
+# number Specifies the filter line number to delete. #
+# confirm Confirms the deletion of the selected filter. #
+#################################################################################
+
+ # Get the values that were passed to this subroutine.
+
+ my ($filter_id, $confirm) = @_;
+
+ # Check the confirm value to make sure it is no more than
+ # one character long.
+
+ kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
+
+ # Check if the confirm value is blank and if it is
+ # srt the confirm value to 0.
+
+ if (!$confirm){
+
+ # The confirm value does not have any value
+ # set so set it to 0.
+
+ $confirm = 0;
+
+ }
+
+ # Check if the filter identification number is blank,
+ # contains characters other than numbers and is more
+ # than seven characters long.
+
+ if (!$filter_id){
+
+ # The filter identification number is blank,
+ # so return an error.
+
+ kiriwrite_error("filteridblank");
+
+ }
+
+ my $filter_id_numbers_check = kiriwrite_variablecheck($filter_id, "numbers", 0, 1);
+
+ if ($filter_id_numbers_check eq 1){
+
+ # The filter identification number contains
+ # characters other than numbers, so return
+ # an error.
+
+ kiriwrite_error("filteridinvalid");
+
+ }
+
+ my $filter_id_maxlength_check = kiriwrite_variablecheck($filter_id, "maxlength", 7, 1);
+
+ if ($filter_id_maxlength_check eq 1){
+
+ # The filter identification number given
+ # is more than seven characters long, so
+ # return an error.
+
+ kiriwrite_error("filteridtoolong");
+
+ }
+
+ # Define some values for later.
+
+ my @database_filter;
+ my $filter_exists = 0;
+
+ # Check if the confirm integer has a value of '1'.
+
+ if ($confirm eq 1){
+
+ # The action to delete a filter has been confirmed.
+
+ # Connect to the database server.
+
+ $kiriwrite_dbmodule->connect();
+
+ # Check if any errors occured while connecting to the database server.
+
+ if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
+
+ # A database connection error has occured so return
+ # an error.
+
+ kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
+
+ }
+
+ # Connect to the filter database.
+
+ $kiriwrite_dbmodule->connectfilter();
+
+ # Check if any error has occured while connecting to the filter
+ # database.
+
+ if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
+
+ # The filter database does not exist.
+
+ kiriwrite_error("filtersdbmissing");
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
+
+ # The filter database has invalid permissions set so return
+ # an error.
+
+ kiriwrite_error("filtersdbpermissions");
+
+ }
+
+ # Delete the filter from the filter database.
+
+ $kiriwrite_dbmodule->deletefilter({ FilterID => $filter_id });
+
+ # Check if any errors occured while deleting the filter.
+
+ if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
+
+ # A database error has occured while trying to delete a filter so
+ # return an error.
+
+ kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
+
+ # The filter does not exist so return an error.
+
+ kiriwrite_error("filterdoesnotexist");
+
+ }
+
+ # Disconnect from the filter database.
+
+ $kiriwrite_dbmodule->disconnectfilter();
+
+ # Disconnect from the database server.
+
+ $kiriwrite_dbmodule->disconnect();
+
+ # Write a message saying that the filter was deleted
+ # from the filters database.
+
+ $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfilter}, { Style => "pageheader" });
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletedfiltermessage});
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{returnfilterlist} });
+
+ } elsif ($confirm eq 0) {
+
+ # Connect to the database server.
+
+ $kiriwrite_dbmodule->connect();
+
+ # Check if any errors occured while connecting to the database server.
+
+ if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
+
+ # A database connection error has occured so return
+ # an error.
+
+ kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
+
+ }
+
+ # Connect to the filter database.
+
+ $kiriwrite_dbmodule->connectfilter();
+
+ # Check if any error has occured while connecting to the filter
+ # database.
+
+ if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
+
+ # The filter database does not exist.
+
+ kiriwrite_error("filtersdbmissing");
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
+
+ # The filter database has invalid permissions set so return
+ # an error.
+
+ kiriwrite_error("filtersdbpermissions");
+
+ }
+
+ # Get information about the filter (to check if it exists).
+
+ my %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter_id });
+
+ # Check if any errors occured while getting information about the filter.
+
+ if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
+
+ # A database error occured while using the filter database so
+ # return an error.
+
+ kiriwrite_error("filtersdbdatabaseerror", $kiriwrite_dbmodule->geterror(1));
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
+
+ # The filter does not exist so return an error.
+
+ kiriwrite_error("filterdoesnotexist");
+
+ }
+
+ # Disconnect from the filter database.
+
+ $kiriwrite_dbmodule->disconnectfilter();
+
+ # Disconnect from the database
+
+ # The confirm integer is '0', so continue write out
+ # a form asking the user to confirm the deletion
+ # pf the filter.
+
+ $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefilter}, { Style => "pageheader" });
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addtext($kiriwrite_lang->{filter}->{deletefiltermessage});
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
+ $kiriwrite_presmodule->addhiddendata("mode", "filter");
+ $kiriwrite_presmodule->addhiddendata("action", "delete");
+ $kiriwrite_presmodule->addhiddendata("filter", $filter_id);
+ $kiriwrite_presmodule->addhiddendata("confirm", 1);
+ $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{filter}->{deletefilterbutton});
+ $kiriwrite_presmodule->addtext(" | ");
+ $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=filter", { Text => $kiriwrite_lang->{filter}->{deletefilterreturn} });
+ $kiriwrite_presmodule->endform();
+
+ } else {
+
+ kiriwrite_error("invalidvalue");
+
+ }
+
+ return $kiriwrite_presmodule->grab();
+
+}
+
+sub kiriwrite_compile_makepages{
+#################################################################################
+# kiriwrite_compile_makepages: Compile the selected pages and place them in the #
+# specified output directory. #
+# #
+# Usage: #
+# #
+# kiriwrite_compile_makepages(type, selectedlist, confirm); #
+# #
+# type Specifies if single or multiple databases are to be compiled. #
+# confirm Specifies if the action to compile the databases should really #
+# be done. #
+# selectedlist Specifies the databases to compile from as an array. #
+#################################################################################
+
+ # Get the values that have been passed to the subroutine.
+
+ my ($type, $confirm, @selectedlist) = @_;
+
+ # Check if the confirm value is more than one
+ # character long.
+
+ kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
+
+ # Check if the confirm value is blank and if it
+ # is then set the confirm value to 0.
+
+ if (!$confirm){
+
+ # The confirm value is blank, so set the
+ # confirm value to 0.
+
+ $confirm = 0;
+
+ }
+
+ # Check if there are any databases selected
+ # and return an error if there isn't.
+
+ if (!@selectedlist){
+
+ # There are no databases in the array
+ # so return an error.
+
+ kiriwrite_error("nodatabaseselected");
+
+ }
+
+ # Check if the type given is no more than
+ # 7 characters long.
+
+ my $type_maxlength_check = kiriwrite_variablecheck($type, "maxlength", 8, 1);
+
+ if ($type_maxlength_check eq 1){
+
+ # The type length given is too long so
+ # return an error.
+
+ kiriwrite_error("variabletoolong");
+
+ }
+
+ # Check if the action to compile the databases
+ # has been confirmed.
+
+ if ($confirm eq 1){
+
+ # The action to compile the datavases has
+ # been confirmed.
+
+ # Define some variables for later.
+
+ my %database_info;
+ my %filter_info;
+ my %template_info;
+ my %page_info;
+ my %templatefiles;
+ my @page_filenames;
+ my @databaseinfo;
+ my @databasepages;
+ my @filterslist;
+ my @findfilter;
+ my @replacefilter;
+ my @templateslist;
+ my @pagedirectories;
+ my @database_filters;
+ my $warning_count = 0;
+ my $error_count = 0;
+ my $pages_count = 0;
+ my $filter;
+ my $filters_count = 0;
+ my $filters_find_blank_warning = 0;
+ my $filter_find;
+ my $filter_replace;
+ my $database;
+ my $database_name;
+ my $page_filename;
+ my $page_filename_check;
+ my $page_filename_char = "";
+ my $page_filename_directory;
+ my $page_filename_length = 0;
+ my $page_filename_seek = 0;
+ my $page_filename_dircount = 0;
+ my $page_filename_exists = 0;
+ my $page_filename_permissions = 0;
+ my $page_directory_name;
+ my $page_directory_path;
+ my $page_name;
+ my $page_description;
+ my $page_section;
+ my $page_template;
+ my $page_content;
+ my $page_settings;
+ my $page_lastmodified;
+ my $page_title;
+ my $page_final;
+ my $page_autosection;
+ my $page_autotitle;
+ my $page;
+ my $database_filename_check = 0;
+ my $database_maxlength_check = 0;
+ my $output_exists = 0;
+ my $output_permissions = 0;
+ my $filters_exists = 0;
+ my $filters_permissions = 0;
+ my $filters_skip = 0;
+ my $template;
+ my $templates_skip = 0;
+ my $information_prefix = $kiriwrite_lang->{compile}->{informationprefix};
+ my $error_prefix = $kiriwrite_lang->{compile}->{errorprefix};
+ my $warning_prefix = $kiriwrite_lang->{compile}->{warningprefix};
+ my $filehandle_page;
+
+ $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabases}, { Style => "pageheader" });
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->startbox("datalist");
+
+ # Check if the output directory exists and has
+ # valid permissions set.
+
+ $output_exists = kiriwrite_fileexists($kiriwrite_config{'directory_data_output'});
+
+ if ($output_exists ne 0){
+
+ # The output directory does not exist so
+ # return an error.
+
+ kiriwrite_error("outputdirectorymissing");
+
+ }
+
+ $output_permissions = kiriwrite_filepermissions($kiriwrite_config{'directory_data_output'}, 1, 1);
+
+ if ($output_permissions ne 0){
+
+ # The output directory has invalid
+ # permissions set so return an error.
+
+ kiriwrite_error("outputdirectoryinvalidpermissions");
+
+ }
+
+ # Connect to the database server.
+
+ $kiriwrite_dbmodule->connect();
+
+ # Check if any errors occured while connecting to the database server.
+
+ if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
+
+ # A database connection error has occured so return
+ # an error.
+
+ kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
+
+ }
+
+ # Connect to the filter database.
+
+ $kiriwrite_dbmodule->connectfilter();
+
+ # Check if any error has occured while connecting to the filter
+ # database.
+
+ if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
+
+ # The filter database does not exist so write a warning message.
+
+ $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{filterdatabasemissing});
+ $kiriwrite_presmodule->addlinebreak();
+ $filters_skip = 1;
+ $warning_count++;
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
+
+ # The filter database has invalid permissions set so write a
+ # an error message.
+
+ $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{filterdatabasepermissions});
+ $kiriwrite_presmodule->addlinebreak();
+ $filters_skip = 1;
+ $error_count++;
+
+ }
+
+ # Load the filters database (if the filters skip
+ # value isn't set to 1).
+
+ if ($filters_skip eq 0){
+
+ # Get the list of available filters.
+
+ @database_filters = $kiriwrite_dbmodule->getfilterlist();
+
+ # Check if any errors occured while getting the list of filters.
+
+ if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
+
+ # A database error has occured with the filters database.
+
+ $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
+ $kiriwrite_presmodule->addlinebreak();
+ $error_count++;
+
+ }
+
+ # Check if the filters skip value is set to 0
+ # before executing the query.
+
+ if ($filters_skip eq 0){
+
+ foreach $filter (@database_filters){
+
+ # Get the filter information.
+
+ %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter });
+
+ # Check if any errors occured while getting the filter information.
+
+ if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
+
+ # A database error occured while using the filter database.
+
+ $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
+ $kiriwrite_presmodule->addlinebreak();
+ $error_count++;
+ next;
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
+
+ # The filter does not exist so process the next filter.
+
+ next;
+
+ }
+
+ # Check if the find filter is blank and
+ # if it is then write a warning message.
+
+ if (!$filter_info{"FilterFind"}){
+
+ if ($filters_find_blank_warning ne 1){
+
+ $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{findfilterblank});
+ $kiriwrite_presmodule->addlinebreak();
+ $filters_find_blank_warning = 1;
+ }
+ next;
+
+ } else {
+
+ # Add each find and replace filter.
+
+ $findfilter[$filters_count] = $filter_info{"FilterFind"};
+ $replacefilter[$filters_count] = $filter_info{"FilterReplace"};
+
+ }
+
+ $filters_count++;
+
+ }
+
+ $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishfilterdatabase});
+ $kiriwrite_presmodule->addlinebreak();
+
+ }
+
+ }
+
+ # Disconnect from the filter database.
+
+ $kiriwrite_dbmodule->disconnectfilter();
+
+ # Connect to the template database.
+
+ $kiriwrite_dbmodule->connecttemplate();
+
+ # Check if any errors occured while connecting to the template database.
+
+ if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
+
+ # The template database does not exist so set the template
+ # warning message.
+
+ $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{templatedatabasemissing});
+ $kiriwrite_presmodule->addlinebreak();
+ $templates_skip = 1;
+ $warning_count++;
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
+
+ # The template database has invalid permissions set so write
+ # the template warning message.
+
+ $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{templatedatabasepermissions});
+ $kiriwrite_presmodule->addlinebreak();
+ $templates_skip = 1;
+ $error_count++;
+
+ }
+
+ # Check if the template skip value isn't set and if it isn't
+ # then get the list of templates.
+
+ if (!$templates_skip){
+
+ @templateslist = $kiriwrite_dbmodule->gettemplatelist();
+
+ # Check if any errors had occured.
+
+ if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
+
+ # A database error occured while getting the list
+ # of templates so return a warning message with the
+ # extended error information.
+
+ $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
+ $templates_skip = 1;
+ $error_count++;
+
+ }
+
+ # Check if the template skip value isn't set and if it isn't
+ # then process each template.
+
+ if (!$templates_skip){
+
+ # Process each template.
+
+ foreach $template (@templateslist){
+
+ # Get information about the template.
+
+ %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
+
+ # Check if any error occured while getting the template information.
+
+ if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
+
+ # A database error has occured, so return an error.
+
+ $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
+ $error_count++;
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
+
+ # The template does not exist, so process the next template.
+
+ next;
+
+ }
+
+ # Place each template file into the hash.
+
+ $templatefiles{$template_info{"TemplateFilename"}}{template} = $template_info{"TemplateFilename"};
+ $templatefiles{$template_info{"TemplateFilename"}}{valid} = 1;
+
+ }
+
+ $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishtemplatedatabase});
+ $kiriwrite_presmodule->addlinebreak();
+
+ }
+
+ }
+
+ # Disconnect from the template database.
+
+ $kiriwrite_dbmodule->disconnecttemplate();
+
+ # Process each database.
+
+ foreach $database (@selectedlist){
+
+ # Check if the database filename and length
+ # are valid.
+
+ $kiriwrite_presmodule->addhorizontalline();
+
+ $database_filename_check = kiriwrite_variablecheck($database, "page_filename", "", 1);
+ $database_maxlength_check = kiriwrite_variablecheck($database, "maxlength", 32, 1);
+
+ if ($database_filename_check ne 0){
+
+ # The database filename is invalid, so process
+ # the next database.
+
+ $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenameinvalidcharacters}, $database));
+ $kiriwrite_presmodule->addlinebreak();
+ $error_count++;
+ next;
+
+ }
+
+ if ($database_maxlength_check ne 0){
+
+ # The database file is too long, so process the
+ # next database.
+
+ $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenametoolong}, $database));
+ $kiriwrite_presmodule->addlinebreak();
+ $error_count++;
+ next;
+
+ }
+
+ # Select the database.
+
+ $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
+
+ # Check if any errors had occured while selecting the database.
+
+ if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
+
+ # The database does not exist, so write a warning message.
+
+ $kiriwrite_presmodule->addtext($warning_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasemissing}, $database));
+ $kiriwrite_presmodule->addlinebreak();
+ $warning_count++;
+ next;
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
+
+ # The database has invalid permissions set, so write
+ # an error message.
+
+ $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseinvalidpermissions}, $database));
+ $kiriwrite_presmodule->addlinebreak();
+ $error_count++;
+ next;
+
+ }
+
+ # Get information about the database.
+
+ my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
+
+ # Check if any error occured while getting the database information.
+
+ if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
+
+ # A database error has occured so write an error.
+
+ $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseerror}, $database, $kiriwrite_dbmodule->geterror(1)));
+ $kiriwrite_presmodule->addlinebreak();
+ $error_count++;
+ next;
+
+ };
+
+ # Get the database name.
+
+ $database_name = $database_info{"DatabaseName"};
+
+ $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compilingpages}, $database_name));
+ $kiriwrite_presmodule->addlinebreak();
+
+ # Get the list of pages in the database.
+
+ @databasepages = $kiriwrite_dbmodule->getpagelist();
+
+ # Check if any errors occured while getting the list of pages.
+
+ if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
+
+ # A database error has occured so return an error and
+ # also the extended error information.
+
+ $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasepageerror}, $database, $kiriwrite_dbmodule->geterror(1)));
+ $kiriwrite_presmodule->addlinebreak();
+ $error_count++;
+ next;
+
+ }
+
+ foreach $page (@databasepages) {
+
+ # Get information about the page.
+
+ %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
+
+ $page_filename = $page_info{"PageFilename"};
+ $page_name = $page_info{"PageName"};
+ $page_description = $page_info{"PageDescription"};
+ $page_section = $page_info{"PageSection"};
+ $page_template = $page_info{"PageTemplate"};
+ $page_content = $page_info{"PageContent"};
+ $page_settings = $page_info{"PageSettings"};
+ $page_lastmodified = $page_info{"PageLastModified"};
+
+ # Check if the filename is valid.
+
+ $page_filename_check = kiriwrite_variablecheck($page_filename, "page_filename", 0, 1);
+
+ if ($page_filename_check ne 0){
+
+ # The file name is not valid so write a
+ # error and process the next page.
+
+ $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{invalidpagefilename}, $page_name));
+ $kiriwrite_presmodule->addlinebreak();
+ $error_count++;
+ next;
+
+ }
+
+ # Check if the template with the filename does not exist
+ # in the template files hash and write a message and
+ # process the next page.
+
+ if (!$templatefiles{$page_template}{valid} && $page_template ne "!none" && $templates_skip eq 0){
+
+ $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatefilemissing}, $page_template, $page_name, $page_filename));
+ $kiriwrite_presmodule->addlinebreak();
+ $error_count++;
+ next;
+
+ $page_final = $page_content;
+
+ } elsif ($page_template eq "!none"){
+
+ $page_final = $page_content;
+
+ } else {
+
+ if ($page_content){
+
+ $page_final = $templatefiles{$page_template}{template};
+ $page_final =~ s/<kiriwrite:pagecontent>/$page_content/g;
+
+ }
+
+ }
+
+ # Create the combined page title (if needed).
+
+ if ($page_settings eq 0 || $page_settings > 3){
+
+ # Don't use page name or section name.
+
+ $page_final =~ s/<kiriwrite:pagetitle>//g;
+
+ } elsif ($page_settings eq 1){
+
+ # Use the page name and section name.
+
+ $page_autotitle = "(" . $page_section . " - " . $page_name . ")";
+ $page_title = $page_section . " - " . $page_name;
+ $page_final =~ s/<kiriwrite:pagetitle>/$page_title/g;
+
+ } elsif ($page_settings eq 2){
+
+ # Use the page name only.
+
+ $page_autotitle = "(" . $page_name . ")";
+ $page_final =~ s/<kiriwrite:pagetitle>/$page_name/g;
+
+ } elsif ($page_settings eq 3){
+
+ # Use the section name only.
+
+ if ($page_section){
+ $page_autotitle = "(" . $page_section . ")";
+ }
+ $page_final =~ s/<kiriwrite:pagetitle>/$page_section/g;
+
+ }
+
+ # Check if the section name is not blank and
+ # place brackets inbetween if it is.
+
+ if ($page_section){
+
+ $page_autosection = "(" . $page_section . ")";
+
+ }
+
+ # Replace each <kiriwrite> value with the apporiate page
+ # values.
+
+ $page_final =~ s/<kiriwrite:pagename>/$page_name/g;
+ $page_final =~ s/<kiriwrite:pagedescription>/$page_description/g;
+ $page_final =~ s/<kiriwrite:pagesection>/$page_section/g;
+ $page_final =~ s/<kiriwrite:autosection>/$page_autosection/g;
+ $page_final =~ s/<kiriwrite:autotitle>/$page_autotitle/g;
+
+ # Process the filters on the page data.
+
+ if ($filters_skip eq 0){
+
+ $filters_count = 0;
+
+ foreach $filter_find (@findfilter){
+
+ # Get the replace filter and process each
+ # filter on the page.
+
+ $filter_replace = $replacefilter[$filters_count];
+ $page_final =~ s/$filter_find/$filter_replace/g;
+ $filters_count++;
+
+ }
+
+ }
+
+ # Process the page filename and check what directories
+ # need to be created.
+
+ $page_filename_length = int(length($page_filename));
+
+ do {
+
+ $page_filename_char = substr($page_filename, $page_filename_seek, 1);
+
+ # Check if a forward slash appears and add it to
+ # the list of directories array.
+
+ if ($page_filename_char eq '/'){
+
+ # Append the directory name to the list of
+ # directories array.
+
+ $pagedirectories[$page_filename_dircount] = $page_filename_directory;
+ $page_filename_directory = "";
+ $page_filename_char = "";
+ $page_filename_dircount++;
+
+ } else {
+
+ # Append the character to the directory/filename.
+
+ $page_filename_directory = $page_filename_directory . $page_filename_char;
+
+ }
+
+ $page_filename_seek++;
+
+ } until ($page_filename_length eq $page_filename_seek);
+
+ foreach $page_directory_name (@pagedirectories){
+
+ # Check if the directory name is undefined and if it
+ # is then set it blank.
+
+ if (!$page_directory_name){
+ $page_directory_name = "";
+ }
+
+ if (!$page_directory_path){
+ $page_directory_path = "";
+ }
+
+ # Check if the directory exists and create
+ # the directory if it doesn't exist.
+
+ $page_directory_path = $page_directory_path . '/' . $page_directory_name;
+
+ mkdir($kiriwrite_config{"directory_data_output"} . '/' . $page_directory_path);
+
+ }
+
+ # Check if the file already exists and if it does then check
+ # the permissions of the file and return an error if the
+ # permissions set are invalid.
+
+ $page_filename_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"} . '/' . $page_filename);
+
+ if ($page_filename_exists eq 0){
+
+ # The page filename exists, so check if the permissions given are
+ # valid.
+
+ $page_filename_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"} . '/' . $page_filename, 1, 1);
+
+ if ($page_filename_permissions eq 1){
+
+ # The file has invalid permissions set.
+
+ $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pageinvalidpermissions}, $page_filename));
+ $kiriwrite_presmodule->addlinebreak();
+ $error_count++;
+
+ # Reset certain values.
+
+ $page_autotitle = "";
+ $page_autosection = "";
+ $page_filename_seek = 0;
+ $page_filename_dircount = 0;
+
+ $page_filename_directory = "";
+ $page_directory_path = "";
+ $page_directory_name = "";
+ @pagedirectories = ();
+
+ next;
+
+ }
+
+ }
+
+ # Reset certain values.
+
+ $page_autotitle = "";
+ $page_autosection = "";
+ $page_filename_seek = 0;
+ $page_filename_dircount = 0;
+
+ $page_filename_directory = "";
+ $page_directory_path = "";
+ $page_directory_name = "";
+ @pagedirectories = ();
+
+ # Write the file to the output directory.
+
+ ($page_filename) = $page_filename =~ m/^(.*)$/g;
+ ($kiriwrite_config{"directory_data_output"}) = $kiriwrite_config{"directory_data_output"} =~ m/^(.*)$/g;
+ open($filehandle_page, ">:utf8 ", $kiriwrite_config{"directory_data_output"} . '/' . $page_filename) or ($kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pagenotwritten}, $page_filename, $!)), $kiriwrite_presmodule->addlinebreak(), $error_count++, next);
+ binmode $filehandle_page, ':utf8';
+ print $filehandle_page $page_final;
+ close($filehandle_page);
+
+ # Write a message saying the page has been compiled. Check
+ # to see if the page name is blank and write a message
+ # saying there's no page name.
+
+ if (!$page_name){
+ $kiriwrite_presmodule->addtext($information_prefix . ' ');
+ $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
+ $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledpageblankname}, $page_filename));
+ } else {
+ $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compiledpage}, $page_name, $page_filename));
+ }
+
+
+ $kiriwrite_presmodule->addlinebreak();
+ $pages_count++;
+
+ }
+
+ # Write a message saying that the database has
+ # been processed.
+
+ $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefinish}, $database_name));
+ $kiriwrite_presmodule->addlinebreak();
+
+ }
+
+ # Disconnect from the database server.
+
+ $kiriwrite_dbmodule->disconnect();
+
+ $kiriwrite_presmodule->addhorizontalline();
+ $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compileresults}, $pages_count, $error_count, $warning_count));
+ $kiriwrite_presmodule->endbox();
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
+
+ return $kiriwrite_presmodule->grab();
+
+ } elsif ($confirm eq 0){
+
+ # The action to compile the databases has
+ # not been confirmed so check what type
+ # is being used.
+
+ if ($type eq "single"){
+
+ # The type is a single database selected so
+ # process that database.
+
+ # Define some variables for later.
+
+ my %database_info;
+ my $database_filename_check;
+ my $database_maxlength_check;
+ my $databasefilename;
+ my $database_name;
+
+ # Check that the database name and length are
+ # valid and return an error if they aren't.
+
+ $databasefilename = $selectedlist[0];
+
+ # Connect to the database server.
+
+ $kiriwrite_dbmodule->connect();
+
+ # Check if any errors occured while connecting to the database server.
+
+ if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
+
+ # A database connection error has occured so return
+ # an error.
+
+ kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
+
+ }
+
+ # Select the database.
+
+ $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasefilename });
+
+ # Check if any errors had occured while selecting the database.
+
+ if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
+
+ # The database does not exist, so return an error.
+
+ kiriwrite_error("databasemissingfile");
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
+
+ # The database has invalid permissions set, so return
+ # an error.
+
+ kiriwrite_error("databaseinvalidpermissions");
+
+ }
+
+ # Get information about the database.
+
+ %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
+
+ # Check if any error occured while getting the database information.
+
+ if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
+
+ # A database error has occured so return an error and
+ # also the extended error information.
+
+ kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
+
+ };
+
+ $database_name = $database_info{"DatabaseName"};
+
+ # Disconnect from the database server.
+
+ $kiriwrite_dbmodule->disconnect();
+
+ # Write out a form asking the user to confirm if the
+ # user wants to compile the selected database.
+
+ $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabase}, { Style => "pageheader" });
+ $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
+ $kiriwrite_presmodule->addhiddendata("mode", "compile");
+ $kiriwrite_presmodule->addhiddendata("action", "compile");
+ $kiriwrite_presmodule->addhiddendata("type", "multiple");
+ $kiriwrite_presmodule->addhiddendata("id[1]", $databasefilename);
+ $kiriwrite_presmodule->addhiddendata("name[1]", "on");
+ $kiriwrite_presmodule->addhiddendata("confirm", 1);
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledatabasemessage}, $database_name));
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compiledatabasebutton});
+ $kiriwrite_presmodule->addtext(" | ");
+ $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
+
+ return $kiriwrite_presmodule->grab();
+
+ } elsif ($type eq "multiple"){
+
+ # The type is multiple databases selected
+ # so process each database.
+
+ # Define some variables for later.
+
+ my %database_list;
+ my $databasename;
+ my $database;
+ my $database_filename_check;
+ my $database_maxlength_check;
+ my $database_count = 0;
+ my $database_info_name;
+
+ # Connect to the database server.
+
+ $kiriwrite_dbmodule->connect();
+
+ # Check if any errors occured while connecting to the database server.
+
+ if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
+
+ # A database connection error has occured so return
+ # an error.
+
+ kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
+
+ }
+
+ foreach $databasename (@selectedlist){
+
+ # Check if the database is in the database
+ # directory and skip it if it isn't.
+
+ $database_filename_check = kiriwrite_variablecheck($databasename, "filename", "", 1);
+ $database_maxlength_check = kiriwrite_variablecheck($databasename, "maxlength", 32, 1);
+
+ if ($database_filename_check ne 0 || $database_maxlength_check ne 0){
+
+ # The database filename given is invalid or
+ # the database filename given is too long
+ # so process the next database.
+
+ next;
+
+ }
+
+ # Select the database to add the page to.
+
+ $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasename });
+
+ # Check if any errors had occured while selecting the database.
+
+ if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
+
+ # The database does not exist, so process the next database.
+
+ next;
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
+
+ # The database has invalid permissions set, so process
+ # the next database.
+
+ next;
+
+ }
+
+ # Get information about the database.
+
+ my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
+
+ # Check if any error occured while getting the database information.
+
+ if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
+
+ # A database error has occured so process the next
+ # database.
+
+ next;
+
+ };
+
+ $database_list{$database_count}{Name} = $database_info{"DatabaseName"};
+ $database_list{$database_count}{Filename} = $databasename;
+
+ $database_count++;
+
+ }
+
+ # Check if any databases are available to be compiled.
+
+ if ($database_count eq 0){
+
+ # No databases are available to be compiled.
+
+ kiriwrite_error("nodatabaseselected");
+
+ }
+
+ # Write out the form for compiling the database.
+
+ $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabases}, { Style => "pageheader" });
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
+ $kiriwrite_presmodule->addhiddendata("mode", "compile");
+ $kiriwrite_presmodule->addhiddendata("action", "compile");
+ $kiriwrite_presmodule->addhiddendata("type", "multiple");
+ $kiriwrite_presmodule->addhiddendata("count", $database_count);
+ $kiriwrite_presmodule->addhiddendata("confirm", 1);
+ $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabasesmessage});
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->startbox("datalist");
+
+ $database_count = 0;
+
+ # write out the list of databases to compile.
+
+ foreach $database (keys %database_list){
+
+ $database_count++;
+
+ $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
+ $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
+
+ # Check if the database name is undefined and if it is
+ # then write a message saying the database name is blank.
+
+ if (!$database_list{$database}{Name}){
+ $kiriwrite_presmodule->additalictext($kiriwrite_lang->{compile}->{blankdatabasename});
+ } else {
+ $kiriwrite_presmodule->addtext($database_list{$database}{Name});
+ }
+
+ $kiriwrite_presmodule->addlinebreak();
+
+ }
+
+ $kiriwrite_presmodule->endbox();
+
+ # Disconnect from the database server.
+
+ $kiriwrite_dbmodule->disconnect();
+
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselecteddatabasesbutton});
+ $kiriwrite_presmodule->addtext(" | ");
+ $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
+ $kiriwrite_presmodule->endform();
+
+ return $kiriwrite_presmodule->grab();
+
+ } else {
+
+ # The type is something else other than
+ # single or multiple, so return an error.
+
+ kiriwrite_error("invalidvariable");
+
+ }
+
+ } else {
+
+ # The confirm value is neither 0 or 1, so
+ # return an error.
+
+ kiriwrite_error("invalidvariable");
+
+ }
+
+}
+
+sub kiriwrite_compile_all{
+#################################################################################
+# kiriwrite_compile_all: Compile all of the databases in the database #
+# directory. #
+# #
+# Usage: #
+# #
+# kiriwrite_compile_all(); #
+#################################################################################
+
+ # Connect to the database server.
+
+ $kiriwrite_dbmodule->connect();
+
+ # Check if any errors occured while connecting to the database server.
+
+ if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
+
+ # A database connection error has occured so return
+ # an error.
+
+ kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
+
+ }
+
+ # Get the list of available databases.
+
+ my @database_list = $kiriwrite_dbmodule->getdblist();
+
+ # Check if any errors occured while getting the databases.
+
+ if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
+
+ # The database directory is missing so return an error.
+
+ kiriwrite_error("datadirectorymissing");
+
+ } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
+
+ # The database directory has invalid permissions set so return
+ # an error.
+
+ kiriwrite_error("datadirectoryinvalidpermissions");
+
+ }
+
+ # Define some variables for later.
+
+ my $database;
+ my $database_name_filename_check;
+ my $database_count = 0;
+
+ # Check the list of databases to compile to see if it is blank,
+ # if it is then return an error.
+
+ if (!@database_list){
+
+ # The list of database is blank so return an error.
+
+ kiriwrite_error("nodatabasesavailable");
+
+ }
+
+ # Write out a form for confirming the action to compile all of the databases.
+
+ $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabases}, { Style => "pageheader" });
+ $kiriwrite_presmodule->addlinebreak();
+ $kiriwrite_presmodule->addlinebreak();
+
+ $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
+ $kiriwrite_presmodule->addhiddendata("mode", "compile");
+ $kiriwrite_presmodule->addhiddendata("action", "compile");
+ $kiriwrite_presmodule->addhiddendata("type", "multiple");
+
+ foreach $database (@database_list){
+
+ # Check if the database filename is blank.
+
+ if ($database eq ""){
+
+ # The database filename is blank so process
+ # the next database.
+
+ next;
+
+ }
+
+ # Check if the database filename is valid before
+ # using the database.
+
+ $database_name_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
+
+ if ($database_name_filename_check ne 0){
+
+ # The database filename is invalid so process
+ # the next database.
+
+ next;
+
+ }
+
+ $database_count++;
+ $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database);
+ $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
+
+ }