1 #################################################################################
2 # compile.lib: Kiriwrite Compile Library #
4 # This library is under the same license as the main Kiriwrite script. #
5 #################################################################################
7 # This section of the file is for when the library is called from the main
10 # If the action option is left blank, then print out a form where the list
11 # of databases to compile are available.
13 if ($form_data->{'action'}){
15 my $http_query_action = $form_data->{'action'};
17 if ($http_query_action eq "compile"){
19 # The specified action is to compile the pages, check if the
20 # action to compile the page has been confirmed.
22 my $http_query_confirm = $form_data->{'confirm'};
23 my $http_query_type = $form_data->{'type'};
25 # If it is blank, set the confirm value to 0.
27 if (!$http_query_confirm){
29 # The http_query_confirm variable is uninitalised, so place a
30 # '0' (meaning an unconfirmed action).
32 $http_query_confirm = 0;
36 # If the compile type is blank then return an error.
38 if (!$http_query_type){
40 # Compile type is blank so return an error.
42 kiriwrite_error("blankcompiletype");
46 if ($http_query_type eq "multiple"){
48 if ($http_query_confirm eq 1){
50 # The action to compile the pages has been confirmed so
53 my $http_query_override = $form_data->{'enableoverride'};
54 my $http_query_overridetemplate = $form_data->{'overridetemplate'};
56 my @selectedlist = kiriwrite_selectedlist();
57 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, $http_query_override, $http_query_overridetemplate, @selectedlist);
59 kiriwrite_output_header; # Output the header to browser/console/stdout.
60 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile"); # Output the page to browser/console/stdout.
61 exit; # End the script.
65 # The action to compile the pages has not been confirmed
66 # so write a form asking the user to confirm the action
67 # of compiling the pages.
69 my @selectedlist = kiriwrite_selectedlist();
70 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, "", "", @selectedlist);
72 kiriwrite_output_header; # Output the header to browser/console/stdout.
73 kiriwrite_output_page($kiriwrite_lang->{compile}->{compileselecteddatabases}, $pagedata, "compile"); # Output the page to browser/console/stdout.
74 exit; # End the script.
78 } elsif ($http_query_type eq "single"){
80 my $http_query_database = $form_data->{'database'};
82 $selectedlist[0] = $http_query_database;
83 my $pagedata = kiriwrite_compile_makepages($http_query_type, $http_query_confirm, "", "", @selectedlist);
85 kiriwrite_output_header; # Output the header to browser/console/stdout.
86 kiriwrite_output_page($kiriwrite_lang->{compile}->{compiledatabase}, $pagedata, "compile");
87 exit; # End the script.
91 kiriwrite_error("invalidcompiletype");
95 } elsif ($http_query_action eq "all"){
97 # The selected action is to compile all of the databases
98 # in the database directory. Check if the action to
99 # compile all of the databases has been confirmed.
101 my $http_query_confirm = $form_data->{'confirm'};
103 if (!$http_query_confirm){
105 # The http_query_confirm variable is uninitalised, so place a
106 # '0' (meaning an unconfirmed action).
108 $http_query_confirm = 0;
112 if ($http_query_confirm eq 1){
114 # The action to compile all the databases has been confirmed.
118 my $pagedata = kiriwrite_compile_all();
120 kiriwrite_output_header; # Output the header to browser/console/stdout.
121 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilealldatabases}, $pagedata, "compile");
124 } elsif ($http_query_action eq "clean") {
126 # The selected action is to clean the output directory.
127 # Check if the action to clean the output directory
128 # has been confirmed.
130 my $http_query_confirm = $form_data->{'confirm'};
132 if (!$http_query_confirm){
134 # The http_query_confirm variable is uninitalised, so place a
135 # '0' (meaning an unconfirmed action).
137 $http_query_confirm = 0;
141 if ($http_query_confirm eq 1){
143 # The action to clean the output directory has been confirmed.
145 my $pagedata = kiriwrite_compile_clean($http_query_confirm);
147 kiriwrite_output_header; # Output the header to browser/console/stdout.
148 kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile"); # Output the page to browser/console/stdout.
149 exit; # End the script.
153 # The action to clean the output directory is not
154 # confirmed, so write a page asking the user
155 # to confirm cleaning the output directory.
157 my $pagedata = kiriwrite_compile_clean();
159 kiriwrite_output_header; # Output the header to browser/console/stdout.
160 kiriwrite_output_page($kiriwrite_lang->{compile}->{cleanoutputdirectory}, $pagedata, "compile"); # Output the page to browser/console/stdout.
161 exit; # End the script.
165 # The action specified was something else other than those
166 # above, so return an error.
168 kiriwrite_error("invalidaction");
173 my $pagedata = kiriwrite_compile_list();
175 kiriwrite_output_header; # Output the header to browser/console/stdout.
176 kiriwrite_output_page($kiriwrite_lang->{compile}->{compilepages}, $pagedata, "compile"); # Output the page to browser/console/stdout.
177 exit; # End the script.
179 #################################################################################
180 # Begin list of relevant subroutines. #
181 #################################################################################
183 sub kiriwrite_compile_makepages{
184 #################################################################################
185 # kiriwrite_compile_makepages: Compile the selected pages and place them in the #
186 # specified output directory. #
190 # kiriwrite_compile_makepages(type, selectedlist, override, overridetemplate, #
193 # type Specifies if single or multiple databases are to be #
195 # confirm Specifies if the action to compile the databases should #
197 # override Specifies if the template should be overriden. #
198 # overridetemplate Specifies the name of the template to override with. #
199 # selectedlist Specifies the databases to compile from as an array. #
200 #################################################################################
202 # Get the values that have been passed to the subroutine.
204 my ($type, $confirm, $override, $override_template, @selectedlist) = @_;
206 # Check if the confirm value is more than one
209 kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
211 # Check if the value for enabling the override feature
212 # is "on" or blank and if it is something else then
215 if ($override eq "on"){
216 } elsif (!$override){
219 # The override value is invalid so return an error.
221 kiriwrite_error("overridetemplatevalueinvalid");
225 # Check if the override template filename is valid and
226 # return an error if it isn't.
228 kiriwrite_variablecheck($override_template, "utf8", 0, 0);
229 $override_template = kiriwrite_utf8convert($override_template);
230 $kiriwrite_overridetemplatefilename_length_check = kiriwrite_variablecheck($override_template, "maxlength", 64, 1);
231 $kiriwrite_overridetemplatefilename_filename_check = kiriwrite_variablecheck($override_template, "filename", "", 1);
233 if ($kiriwrite_overridetemplatefilename_length_check eq 1){
235 # The override template filename given is too long
236 # so return an error.
238 kiriwrite_error("overridetemplatetoolong");
242 if ($kiriwrite_overridetemplatefilename_filename_check eq 2 && $override_template ne "!none"){
244 # The override template filename is invalid so
247 kiriwrite_error("overridetemplateinvalid");
251 # Check if the confirm value is blank and if it
252 # is then set the confirm value to 0.
256 # The confirm value is blank, so set the
257 # confirm value to 0.
263 # Check if there are any databases selected
264 # and return an error if there isn't.
268 # There are no databases in the array
269 # so return an error.
271 kiriwrite_error("nodatabaseselected");
275 # Check if the type given is no more than
278 my $type_maxlength_check = kiriwrite_variablecheck($type, "maxlength", 8, 1);
280 if ($type_maxlength_check eq 1){
282 # The type length given is too long so
285 kiriwrite_error("variabletoolong");
289 # Check if the action to compile the databases
290 # has been confirmed.
294 # The action to compile the datavases has
297 # Define some variables for later.
312 my @database_filters;
313 my $warning_count = 0;
317 my $filters_count = 0;
318 my $filters_find_blank_warning = 0;
324 my $page_filename_check;
325 my $page_filename_char = "";
326 my $page_filename_directory;
327 my $page_filename_length = 0;
328 my $page_filename_seek = 0;
329 my $page_filename_dircount = 0;
330 my $page_filename_exists = 0;
331 my $page_filename_permissions = 0;
332 my $page_directory_name;
333 my $page_directory_path;
335 my $page_description;
340 my $page_lastmodified;
343 my $page_autosection;
346 my $database_filename_check = 0;
347 my $database_maxlength_check = 0;
348 my $output_exists = 0;
349 my $output_permissions = 0;
350 my $filters_exists = 0;
351 my $filters_permissions = 0;
352 my $filters_skip = 0;
354 my $templates_skip = 0;
355 my $information_prefix = $kiriwrite_lang->{compile}->{informationprefix};
356 my $error_prefix = $kiriwrite_lang->{compile}->{errorprefix};
357 my $warning_prefix = $kiriwrite_lang->{compile}->{warningprefix};
360 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabases}, { Style => "pageheader" });
361 $kiriwrite_presmodule->addlinebreak();
362 $kiriwrite_presmodule->addlinebreak();
363 $kiriwrite_presmodule->startbox("datalist");
365 # Check if the output directory exists and has
366 # valid permissions set.
368 $output_exists = kiriwrite_fileexists($kiriwrite_config{'directory_data_output'});
370 if ($output_exists ne 0){
372 # The output directory does not exist so
375 kiriwrite_error("outputdirectorymissing");
379 $output_permissions = kiriwrite_filepermissions($kiriwrite_config{'directory_data_output'}, 1, 1);
381 if ($output_permissions ne 0){
383 # The output directory has invalid
384 # permissions set so return an error.
386 kiriwrite_error("outputdirectoryinvalidpermissions");
390 # Connect to the database server.
392 $kiriwrite_dbmodule->connect();
394 # Check if any errors occured while connecting to the database server.
396 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
398 # A database connection error has occured so return
401 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
405 # Connect to the filter database.
407 $kiriwrite_dbmodule->connectfilter();
409 # Check if any error has occured while connecting to the filter
412 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
414 # The filter database does not exist so write a warning message.
416 $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{filterdatabasemissing});
417 $kiriwrite_presmodule->addlinebreak();
421 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
423 # The filter database has invalid permissions set so write a
426 $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{filterdatabasepermissions});
427 $kiriwrite_presmodule->addlinebreak();
433 # Load the filter database (if the filters skip
434 # value isn't set to 1).
436 if ($filters_skip eq 0){
438 # Get the list of available filters.
440 @database_filters = $kiriwrite_dbmodule->getfilterlist();
442 # Check if any errors occured while getting the list of filters.
444 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
446 # A database error has occured with the filter database.
448 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
449 $kiriwrite_presmodule->addlinebreak();
454 # Check if the filters skip value is set to 0
455 # before executing the query.
457 if ($filters_skip eq 0){
459 foreach $filter (@database_filters){
461 # Get the filter information.
463 %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter, Reduced => 1 });
465 # Check if any errors occured while getting the filter information.
467 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
469 # A database error occured while using the filter database.
471 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
472 $kiriwrite_presmodule->addlinebreak();
476 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
478 # The filter does not exist so process the next filter.
484 # Check if the find filter is blank and
485 # if it is then write a warning message.
487 if (!$filter_info{"FilterFind"}){
489 if ($filters_find_blank_warning ne 1){
491 $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{findfilterblank});
492 $kiriwrite_presmodule->addlinebreak();
493 $filters_find_blank_warning = 1;
499 # Add each find and replace filter.
501 $findfilter[$filters_count] = $filter_info{"FilterFind"};
502 $replacefilter[$filters_count] = $filter_info{"FilterReplace"};
510 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishfilterdatabase});
511 $kiriwrite_presmodule->addlinebreak();
517 # Disconnect from the filter database.
519 $kiriwrite_dbmodule->disconnectfilter();
521 # Connect to the template database.
523 $kiriwrite_dbmodule->connecttemplate();
525 # Check if any errors occured while connecting to the template database.
527 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
529 # The template database does not exist so set the template
532 $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{templatedatabasemissing});
533 $kiriwrite_presmodule->addlinebreak();
537 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
539 # The template database has invalid permissions set so write
540 # the template warning message.
542 $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{templatedatabasepermissions});
543 $kiriwrite_presmodule->addlinebreak();
549 # Check if the template skip value isn't set and if it isn't
550 # then get the list of templates.
552 if (!$templates_skip){
554 @templateslist = $kiriwrite_dbmodule->gettemplatelist();
556 # Check if any errors had occured.
558 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
560 # A database error occured while getting the list
561 # of templates so return a warning message with the
562 # extended error information.
564 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
570 # Check if the template skip value isn't set and if it isn't
571 # then process each template.
573 if (!$templates_skip){
575 # Process each template.
577 foreach $template (@templateslist){
579 # Get information about the template.
581 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
583 # Check if any error occured while getting the template information.
585 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
587 # A database error has occured, so return an error.
589 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
592 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
594 # The template does not exist, so process the next template.
600 # Place each template file into the hash.
602 $templatefiles{$template_info{"TemplateFilename"}}{template} = $template_info{"TemplateLayout"};
603 $templatefiles{$template_info{"TemplateFilename"}}{valid} = 1;
607 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishtemplatedatabase});
608 $kiriwrite_presmodule->addlinebreak();
614 # Disconnect from the template database.
616 $kiriwrite_dbmodule->disconnecttemplate();
618 # Process each database.
620 foreach $database (@selectedlist){
622 # Check if the database filename and length
625 $kiriwrite_presmodule->addhorizontalline();
627 $database_filename_check = kiriwrite_variablecheck($database, "page_filename", "", 1);
628 $database_maxlength_check = kiriwrite_variablecheck($database, "maxlength", 32, 1);
630 if ($database_filename_check ne 0){
632 # The database filename is invalid, so process
635 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenameinvalidcharacters}, $database));
636 $kiriwrite_presmodule->addlinebreak();
642 if ($database_maxlength_check ne 0){
644 # The database file is too long, so process the
647 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenametoolong}, $database));
648 $kiriwrite_presmodule->addlinebreak();
654 # Select the database.
656 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
658 # Check if any errors had occured while selecting the database.
660 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
662 # The database does not exist, so write a warning message.
664 $kiriwrite_presmodule->addtext($warning_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasemissing}, $database));
665 $kiriwrite_presmodule->addlinebreak();
669 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
671 # The database has invalid permissions set, so write
674 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseinvalidpermissions}, $database));
675 $kiriwrite_presmodule->addlinebreak();
681 # Get information about the database.
683 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
685 # Check if any error occured while getting the database information.
687 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
689 # A database error has occured so write an error.
691 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseerror}, $database, $kiriwrite_dbmodule->geterror(1)));
692 $kiriwrite_presmodule->addlinebreak();
698 # Get the database name.
700 $database_name = $database_info{"DatabaseName"};
702 $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compilingpages}, $database_name));
703 $kiriwrite_presmodule->addlinebreak();
705 # Get the list of pages in the database.
707 @databasepages = $kiriwrite_dbmodule->getpagelist();
709 # Check if any errors occured while getting the list of pages.
711 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
713 # A database error has occured so return an error and
714 # also the extended error information.
716 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasepageerror}, $database, $kiriwrite_dbmodule->geterror(1)));
717 $kiriwrite_presmodule->addlinebreak();
723 foreach $page (@databasepages) {
725 # Get information about the page.
727 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
729 $page_filename = $page_info{"PageFilename"};
730 $page_name = $page_info{"PageName"};
731 $page_description = $page_info{"PageDescription"};
732 $page_section = $page_info{"PageSection"};
733 $page_template = $page_info{"PageTemplate"};
734 $page_content = $page_info{"PageContent"};
735 $page_settings = $page_info{"PageSettings"};
736 $page_lastmodified = $page_info{"PageLastModified"};
738 # Check if the filename is valid.
740 $page_filename_check = kiriwrite_variablecheck($page_filename, "page_filename", 0, 1);
742 if ($page_filename_check ne 0){
744 # The file name is not valid so write a
745 # error and process the next page.
747 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{invalidpagefilename}, $page_name));
748 $kiriwrite_presmodule->addlinebreak();
754 # Check if the template with the filename does not exist
755 # in the template files hash and write a message and
756 # process the next page.
758 if ($override eq "on"){
760 $page_template = $override_template;
764 if (!$templatefiles{$page_template}{valid} && $page_template ne "!none" && $templates_skip eq 0){
766 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatefilemissing}, $page_template, $page_name, $page_filename));
767 $kiriwrite_presmodule->addlinebreak();
771 $page_final = $page_content;
773 } elsif ($page_template eq "!none"){
775 $page_final = $page_content;
779 $page_final = $templatefiles{$page_template}{template};
785 $page_final =~ s/<kiriwrite:pagecontent>/$page_content/g;
789 # Create the combined page title (if needed).
791 if ($page_settings eq 0 || $page_settings > 3){
793 # Don't use page name or section name.
795 $page_final =~ s/<kiriwrite:pagetitle>//g;
797 } elsif ($page_settings eq 1){
799 # Use the page name and section name.
801 $page_autotitle = "(" . $page_section . " - " . $page_name . ")";
802 $page_title = $page_section . " - " . $page_name;
803 $page_final =~ s/<kiriwrite:pagetitle>/$page_title/g;
805 } elsif ($page_settings eq 2){
807 # Use the page name only.
809 $page_autotitle = "(" . $page_name . ")";
810 $page_final =~ s/<kiriwrite:pagetitle>/$page_name/g;
812 } elsif ($page_settings eq 3){
814 # Use the section name only.
817 $page_autotitle = "(" . $page_section . ")";
819 $page_final =~ s/<kiriwrite:pagetitle>/$page_section/g;
823 # Check if the section name is not blank and
824 # place brackets inbetween if it is.
828 $page_autosection = "(" . $page_section . ")";
832 # Replace each <kiriwrite> value with the apporiate page
835 $page_final =~ s/<kiriwrite:pagename>/$page_name/g;
836 $page_final =~ s/<kiriwrite:pagedescription>/$page_description/g;
837 $page_final =~ s/<kiriwrite:pagesection>/$page_section/g;
838 $page_final =~ s/<kiriwrite:autosection>/$page_autosection/g;
839 $page_final =~ s/<kiriwrite:autotitle>/$page_autotitle/g;
841 # Process the filters on the page data.
843 if ($filters_skip eq 0){
847 foreach $filter_find (@findfilter){
849 # Get the replace filter and process each
850 # filter on the page.
852 $filter_replace = $replacefilter[$filters_count];
853 $page_final =~ s/$filter_find/$filter_replace/g;
860 # Process the page filename and check what directories
861 # need to be created.
863 $page_filename_length = int(length($page_filename));
867 $page_filename_char = substr($page_filename, $page_filename_seek, 1);
869 # Check if a forward slash appears and add it to
870 # the list of directories array.
872 if ($page_filename_char eq '/'){
874 # Append the directory name to the list of
877 $pagedirectories[$page_filename_dircount] = $page_filename_directory;
878 $page_filename_directory = "";
879 $page_filename_char = "";
880 $page_filename_dircount++;
884 # Append the character to the directory/filename.
886 $page_filename_directory = $page_filename_directory . $page_filename_char;
890 $page_filename_seek++;
892 } until ($page_filename_length eq $page_filename_seek);
894 foreach $page_directory_name (@pagedirectories){
896 # Check if the directory name is undefined and if it
897 # is then set it blank.
899 if (!$page_directory_name){
900 $page_directory_name = "";
903 if (!$page_directory_path){
904 $page_directory_path = "";
907 # Check if the directory exists and create
908 # the directory if it doesn't exist.
910 $page_directory_path = $page_directory_path . '/' . $page_directory_name;
912 mkdir($kiriwrite_config{"directory_data_output"} . '/' . $page_directory_path);
916 # Check if the file already exists and if it does then check
917 # the permissions of the file and return an error if the
918 # permissions set are invalid.
920 $page_filename_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"} . '/' . $page_filename);
922 if ($page_filename_exists eq 0){
924 # The page filename exists, so check if the permissions given are
927 $page_filename_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"} . '/' . $page_filename, 1, 1);
929 if ($page_filename_permissions eq 1){
931 # The file has invalid permissions set.
933 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pageinvalidpermissions}, $page_filename));
934 $kiriwrite_presmodule->addlinebreak();
937 # Reset certain values.
939 $page_autotitle = "";
940 $page_autosection = "";
941 $page_filename_seek = 0;
942 $page_filename_dircount = 0;
944 $page_filename_directory = "";
945 $page_directory_path = "";
946 $page_directory_name = "";
947 @pagedirectories = ();
955 # Reset certain values.
957 $page_autotitle = "";
958 $page_autosection = "";
959 $page_filename_seek = 0;
960 $page_filename_dircount = 0;
962 $page_filename_directory = "";
963 $page_directory_path = "";
964 $page_directory_name = "";
965 @pagedirectories = ();
967 # Write the file to the output directory.
969 ($page_filename) = $page_filename =~ m/^(.*)$/g;
970 ($kiriwrite_config{"directory_data_output"}) = $kiriwrite_config{"directory_data_output"} =~ m/^(.*)$/g;
972 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);
980 binmode $filehandle_page, ':utf8';
981 print $filehandle_page $page_final;
982 close($filehandle_page);
984 # Write a message saying the page has been compiled. Check
985 # to see if the page name is blank and write a message
986 # saying there's no page name.
989 $kiriwrite_presmodule->addtext($information_prefix . ' ');
990 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname} . ' ');
991 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledpageblankname}, $page_filename));
993 $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compiledpage}, $page_name, $page_filename));
997 $kiriwrite_presmodule->addlinebreak();
1002 # Write a message saying that the database has
1005 $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefinish}, $database_name));
1006 $kiriwrite_presmodule->addlinebreak();
1010 # Disconnect from the database server.
1012 $kiriwrite_dbmodule->disconnect();
1014 $kiriwrite_presmodule->addhorizontalline();
1015 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compileresults}, $pages_count, $error_count, $warning_count));
1016 $kiriwrite_presmodule->endbox();
1017 $kiriwrite_presmodule->addlinebreak();
1018 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
1020 return $kiriwrite_presmodule->grab();
1022 } elsif ($confirm eq 0){
1024 # The action to compile the databases has
1025 # not been confirmed so check what type
1028 # Get the list of templates for overwriting the
1029 # template if needed.
1031 my $templateoverride_skip = 0;
1032 my $templatedbwarning = "";
1034 my $template_filename;
1036 my %template_dblist;
1037 tie(%template_dblist, "Tie::IxHash");
1039 if ($type eq "single"){
1041 # The type is a single database selected so
1042 # process that database.
1044 # Define some variables for later.
1047 my $database_filename_check;
1048 my $database_maxlength_check;
1049 my $databasefilename;
1052 # Check that the database name and length are
1053 # valid and return an error if they aren't.
1055 $databasefilename = $selectedlist[0];
1057 # Connect to the database server.
1059 $kiriwrite_dbmodule->connect();
1061 # Check if any errors occured while connecting to the database server.
1063 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1065 # A database connection error has occured so return
1068 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1072 # Select the database.
1074 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasefilename });
1076 # Check if any errors had occured while selecting the database.
1078 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1080 # The database does not exist, so return an error.
1082 kiriwrite_error("databasemissingfile");
1084 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1086 # The database has invalid permissions set, so return
1089 kiriwrite_error("databaseinvalidpermissions");
1093 # Get information about the database.
1095 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1097 # Check if any error occured while getting the database information.
1099 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1101 # A database error has occured so return an error and
1102 # also the extended error information.
1104 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1108 $database_name = $database_info{"DatabaseName"};
1110 $kiriwrite_dbmodule->connecttemplate();
1112 # Check if any errors occured while connecting to the
1113 # template database.
1115 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
1117 # The template database does not exist so skip processing
1118 # the list of templates in the template database.
1120 $templateoverride_skip = 1;
1121 $templatedbwarning = $kiriwrite_lang->{compile}->{templatedbmissing};
1123 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
1125 # The template database has invalid permissions set so
1126 # skip processing the list of templates in the
1127 # template database.
1129 $templateoverride_skip = 1;
1130 $templatedbwarning = $kiriwrite_lang->{compile}->{templatedbinvalidpermissions};
1134 # Get the list of available templates if no errors had
1137 if ($templateoverride_skip ne 1){
1139 @template_list = $kiriwrite_dbmodule->gettemplatelist();
1141 # Check if any errors occured while getting the list of templates.
1143 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1145 # A template database error has occured so skip processing the
1146 # list of templates in the template database.
1148 $templateoverride_skip = 1;
1149 $templatedbwarning = $kiriwrite_lang->{compile}->{templatedberror};
1153 if ($templateoverride_skip ne 1){
1155 foreach $template_file (@template_list){
1157 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_file });
1159 if ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
1163 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1169 $template_dblist{$template_file} = $template_info{"TemplateName"};
1177 # Disconnect from the template database and database server.
1179 $kiriwrite_dbmodule->disconnecttemplate();
1180 $kiriwrite_dbmodule->disconnect();
1182 # Write out a form asking the user to confirm if the
1183 # user wants to compile the selected database.
1185 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabase}, { Style => "pageheader" });
1186 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1187 $kiriwrite_presmodule->startbox();
1188 $kiriwrite_presmodule->addhiddendata("mode", "compile");
1189 $kiriwrite_presmodule->addhiddendata("action", "compile");
1190 $kiriwrite_presmodule->addhiddendata("type", "multiple");
1191 $kiriwrite_presmodule->addhiddendata("id[1]", $databasefilename);
1192 $kiriwrite_presmodule->addhiddendata("name[1]", "on");
1193 $kiriwrite_presmodule->addhiddendata("confirm", 1);
1194 $kiriwrite_presmodule->addlinebreak();
1195 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledatabasemessage}, $database_name));
1196 $kiriwrite_presmodule->addlinebreak();
1197 $kiriwrite_presmodule->addlinebreak();
1199 if ($templateoverride_skip eq 1){
1201 # Add message saying why template can't be overridden.
1202 $kiriwrite_presmodule->addtext($templatedbwarning);
1206 # Add overwrite template data.
1207 $kiriwrite_presmodule->addcheckbox("enableoverride", { OptionDescription => $kiriwrite_lang->{compile}->{overridetemplate}, LineBreak => 1 });
1208 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{replacecurrenttemplate});
1209 $kiriwrite_presmodule->addselectbox("overridetemplate");
1211 foreach $template_file (keys %template_dblist){
1213 $kiriwrite_presmodule->addoption($template_dblist{$template_file} . " (" . $template_file . ")", { Value => $template_file });
1217 $kiriwrite_presmodule->addoption($kiriwrite_lang->{compile}->{dontusetemplate}, { Value => "!none" });
1218 $kiriwrite_presmodule->endselectbox();
1222 $kiriwrite_presmodule->addlinebreak();
1223 $kiriwrite_presmodule->addlinebreak();
1224 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compiledatabasebutton});
1225 $kiriwrite_presmodule->addtext(" | ");
1226 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
1227 $kiriwrite_presmodule->endbox();
1228 $kiriwrite_presmodule->endform();
1230 return $kiriwrite_presmodule->grab();
1232 } elsif ($type eq "multiple"){
1234 # The type is multiple databases selected
1235 # so process each database.
1237 # Define some variables for later.
1242 my $database_filename_check;
1243 my $database_maxlength_check;
1244 my $database_count = 0;
1245 my $database_info_name;
1247 # Connect to the database server.
1249 $kiriwrite_dbmodule->connect();
1251 # Check if any errors occured while connecting to the database server.
1253 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1255 # A database connection error has occured so return
1258 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1262 foreach $databasename (@selectedlist){
1264 # Check if the database is in the database
1265 # directory and skip it if it isn't.
1267 $database_filename_check = kiriwrite_variablecheck($databasename, "filename", "", 1);
1268 $database_maxlength_check = kiriwrite_variablecheck($databasename, "maxlength", 32, 1);
1270 if ($database_filename_check ne 0 || $database_maxlength_check ne 0){
1272 # The database filename given is invalid or
1273 # the database filename given is too long
1274 # so process the next database.
1280 # Select the database to add the page to.
1282 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasename });
1284 # Check if any errors had occured while selecting the database.
1286 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1288 # The database does not exist, so process the next database.
1292 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1294 # The database has invalid permissions set, so process
1295 # the next database.
1301 # Get information about the database.
1303 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1305 # Check if any error occured while getting the database information.
1307 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1309 # A database error has occured so process the next
1316 $database_list{$database_count}{Name} = $database_info{"DatabaseName"};
1317 $database_list{$database_count}{Filename} = $databasename;
1323 # Check if any databases are available to be compiled.
1325 if ($database_count eq 0){
1327 # No databases are available to be compiled.
1329 kiriwrite_error("nodatabaseselected");
1333 # Write out the form for compiling the database.
1335 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabases}, { Style => "pageheader" });
1336 $kiriwrite_presmodule->addlinebreak();
1337 $kiriwrite_presmodule->addlinebreak();
1338 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1339 $kiriwrite_presmodule->startbox();
1340 $kiriwrite_presmodule->addhiddendata("mode", "compile");
1341 $kiriwrite_presmodule->addhiddendata("action", "compile");
1342 $kiriwrite_presmodule->addhiddendata("type", "multiple");
1343 $kiriwrite_presmodule->addhiddendata("count", $database_count);
1344 $kiriwrite_presmodule->addhiddendata("confirm", 1);
1345 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabasesmessage});
1346 $kiriwrite_presmodule->addlinebreak();
1347 $kiriwrite_presmodule->addlinebreak();
1348 $kiriwrite_presmodule->startbox("datalist");
1350 $database_count = 0;
1352 # write out the list of databases to compile.
1354 foreach $database (keys %database_list){
1358 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
1359 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
1361 # Check if the database name is undefined and if it is
1362 # then write a message saying the database name is blank.
1364 if (!$database_list{$database}{Name}){
1365 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{compile}->{blankdatabasename});
1367 $kiriwrite_presmodule->addtext($database_list{$database}{Name});
1370 $kiriwrite_presmodule->addlinebreak();
1374 $kiriwrite_presmodule->endbox();
1376 $kiriwrite_presmodule->addlinebreak();
1378 $kiriwrite_dbmodule->connecttemplate();
1380 # Check if any errors occured while connecting to the
1381 # template database.
1383 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
1385 # The template database does not exist so skip processing
1386 # the list of templates in the template database.
1388 $templateoverride_skip = 1;
1389 $templatedbwarning = $kiriwrite_lang->{compile}->{templatedbmissing};
1391 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
1393 # The template database has invalid permissions set so
1394 # skip processing the list of templates in the
1395 # template database.
1397 $templateoverride_skip = 1;
1398 $templatedbwarning = $kiriwrite_lang->{compile}->{templatedbinvalidpermissions};
1402 # Get the list of available templates if no errors had
1405 if ($templateoverride_skip ne 1){
1407 @template_list = $kiriwrite_dbmodule->gettemplatelist();
1409 # Check if any errors occured while getting the list of templates.
1411 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1413 # A template database error has occured so skip processing the
1414 # list of templates in the template database.
1416 $templateoverride_skip = 1;
1417 $templatedbwarning = $kiriwrite_lang->{compile}->{templatedberror};
1421 if ($templateoverride_skip ne 1){
1423 foreach $template_file (@template_list){
1425 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_file });
1427 if ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
1431 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1437 $template_dblist{$template_file} = $template_info{"TemplateName"};
1445 if ($templateoverride_skip eq 1){
1447 # Add message saying why template can't be overridden.
1448 $kiriwrite_presmodule->addtext($templatedbwarning);
1452 # Add overwrite template data.
1453 $kiriwrite_presmodule->addcheckbox("enableoverride", { OptionDescription => $kiriwrite_lang->{compile}->{overridetemplate}, LineBreak => 1 });
1454 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{replacecurrenttemplate});
1455 $kiriwrite_presmodule->addselectbox("overridetemplate");
1457 foreach $template_file (keys %template_dblist){
1459 $kiriwrite_presmodule->addoption($template_dblist{$template_file} . " (" . $template_file . ")", { Value => $template_file });
1463 $kiriwrite_presmodule->addoption($kiriwrite_lang->{compile}->{dontusetemplate}, { Value => "!none" });
1464 $kiriwrite_presmodule->endselectbox();
1468 # Disconnect from the template database and database server.
1470 $kiriwrite_dbmodule->disconnecttemplate();
1471 $kiriwrite_dbmodule->disconnect();
1473 $kiriwrite_presmodule->addlinebreak();
1474 $kiriwrite_presmodule->addlinebreak();
1475 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselecteddatabasesbutton});
1476 $kiriwrite_presmodule->addtext(" | ");
1477 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
1478 $kiriwrite_presmodule->endbox();
1479 $kiriwrite_presmodule->endform();
1481 return $kiriwrite_presmodule->grab();
1485 # The type is something else other than
1486 # single or multiple, so return an error.
1488 kiriwrite_error("invalidvariable");
1494 # The confirm value is neither 0 or 1, so
1497 kiriwrite_error("invalidvariable");
1503 sub kiriwrite_compile_all{
1504 #################################################################################
1505 # kiriwrite_compile_all: Compile all of the databases in the database #
1510 # kiriwrite_compile_all(); #
1511 #################################################################################
1513 # Connect to the database server.
1515 $kiriwrite_dbmodule->connect();
1517 # Check if any errors occured while connecting to the database server.
1519 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1521 # A database connection error has occured so return
1524 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1528 # Get the list of available databases.
1530 my @database_list = $kiriwrite_dbmodule->getdblist();
1532 # Check if any errors occured while getting the databases.
1534 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
1536 # The database directory is missing so return an error.
1538 kiriwrite_error("datadirectorymissing");
1540 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
1542 # The database directory has invalid permissions set so return
1545 kiriwrite_error("datadirectoryinvalidpermissions");
1549 # Define some variables for later.
1552 my $database_name_filename_check;
1553 my $database_count = 0;
1555 # Check the list of databases to compile to see if it is blank,
1556 # if it is then return an error.
1558 if (!@database_list){
1560 # The list of database is blank so return an error.
1562 kiriwrite_error("nodatabasesavailable");
1566 # Write out a form for confirming the action to compile all of the databases.
1568 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabases}, { Style => "pageheader" });
1569 $kiriwrite_presmodule->addlinebreak();
1570 $kiriwrite_presmodule->addlinebreak();
1572 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1573 $kiriwrite_presmodule->startbox();
1574 $kiriwrite_presmodule->addhiddendata("mode", "compile");
1575 $kiriwrite_presmodule->addhiddendata("action", "compile");
1576 $kiriwrite_presmodule->addhiddendata("type", "multiple");
1578 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabasesmessage});
1579 $kiriwrite_presmodule->addlinebreak();
1580 $kiriwrite_presmodule->addlinebreak();
1582 foreach $database (@database_list){
1584 # Check if the database filename is blank.
1586 if ($database eq ""){
1588 # The database filename is blank so process
1589 # the next database.
1595 # Check if the database filename is valid before
1596 # using the database.
1598 $database_name_filename_check = kiriwrite_variablecheck($database, "filename", 0, 1);
1600 if ($database_name_filename_check ne 0){
1602 # The database filename is invalid so process
1603 # the next database.
1610 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database);
1611 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
1615 $kiriwrite_presmodule->addhiddendata("count", $database_count);
1617 my $templateoverride_skip = 0;
1618 my $templatedbwarning = "";
1620 my $template_filename;
1622 my %template_dblist;
1623 tie(%template_dblist, "Tie::IxHash");
1625 $kiriwrite_dbmodule->connecttemplate();
1627 # Check if any errors occured while connecting to the
1628 # template database.
1630 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
1632 # The template database does not exist so skip processing
1633 # the list of templates in the template database.
1635 $templateoverride_skip = 1;
1636 $templatedbwarning = $kiriwrite_lang->{compile}->{templatedbmissing};
1638 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
1640 # The template database has invalid permissions set so
1641 # skip processing the list of templates in the
1642 # template database.
1644 $templateoverride_skip = 1;
1645 $templatedbwarning = $kiriwrite_lang->{compile}->{templatedbinvalidpermissions};
1649 # Get the list of available templates if no errors had
1652 if ($templateoverride_skip ne 1){
1654 @template_list = $kiriwrite_dbmodule->gettemplatelist();
1656 # Check if any errors occured while getting the list of templates.
1658 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1660 # A template database error has occured so skip processing the
1661 # list of templates in the template database.
1663 $templateoverride_skip = 1;
1664 $templatedbwarning = $kiriwrite_lang->{compile}->{templatedberror};
1668 if ($templateoverride_skip ne 1){
1670 foreach $template_file (@template_list){
1672 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_file });
1674 if ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
1678 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1684 $template_dblist{$template_file} = $template_info{"TemplateName"};
1692 if ($templateoverride_skip eq 1){
1694 # Add message saying why template can't be overridden.
1695 $kiriwrite_presmodule->addtext($templatedbwarning);
1699 # Add overwrite template data.
1700 $kiriwrite_presmodule->addcheckbox("enableoverride", { OptionDescription => $kiriwrite_lang->{compile}->{overridetemplate}, LineBreak => 1 });
1701 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{replacecurrenttemplate});
1702 $kiriwrite_presmodule->addselectbox("overridetemplate");
1704 foreach $template_file (keys %template_dblist){
1706 $kiriwrite_presmodule->addoption($template_dblist{$template_file} . " (" . $template_file . ")", { Value => $template_file });
1710 $kiriwrite_presmodule->addoption($kiriwrite_lang->{compile}->{dontusetemplate}, { Value => "!none" });
1711 $kiriwrite_presmodule->endselectbox();
1715 # Disconnect from the template database and database server.
1717 $kiriwrite_dbmodule->disconnecttemplate();
1718 $kiriwrite_dbmodule->disconnect();
1720 $kiriwrite_presmodule->addlinebreak();
1721 $kiriwrite_presmodule->addlinebreak();
1723 $kiriwrite_presmodule->addhiddendata("confirm", 1);
1724 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compilealldatabasesbutton});
1725 $kiriwrite_presmodule->addtext(" | ");
1726 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
1727 $kiriwrite_presmodule->endbox();
1728 $kiriwrite_presmodule->endform();
1730 return $kiriwrite_presmodule->grab();
1735 sub kiriwrite_compile_list{
1736 #################################################################################
1737 # kiriwrite_compile_list: Shows a list of databases that can be compiled. #
1741 # kiriwrite_compile_list(); #
1742 #################################################################################
1744 # Define the following variables that are going to be used before using
1745 # the foreach function.
1749 my $database_count = 0;
1750 my $database_filename = "";
1751 my $database_filename_friendly = "";
1752 my $database_permissions = "";
1753 my $database_name = "";
1754 my $database_description = "";
1756 my @permissions_list;
1758 my $table_style = 0;
1759 my $table_style_name = "";
1762 tie(%database_list, 'Tie::IxHash');
1764 # Connect to the database server.
1766 $kiriwrite_dbmodule->connect();
1768 # Check if any errors occured while connecting to the database server.
1770 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1772 # A database connection error has occured so return
1775 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1779 # Get the list of available databases and process any errors that
1780 # might have occured.
1782 my @database_list = $kiriwrite_dbmodule->getdblist();
1784 if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
1786 # The database directory is missing so return an error.
1788 kiriwrite_error("datadirectorymissing");
1790 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
1792 # The database directory has invalid permissions set so return
1795 kiriwrite_error("datadirectoryinvalidpermissions");
1799 # Begin creating the table for the list of databases.
1801 foreach $data_file (@database_list){
1803 # Select the database.
1805 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
1807 # Check if any error occured while selecting the database.
1809 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1811 # The database does not exist, so process the next
1816 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
1818 # The database has invalid permissions settings, so
1819 # add the database to the list of databases with
1820 # invalid permissions set and process the next
1823 push(@permissions_list, $data_file);
1828 # Get information about the database.
1830 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1832 # Check if any error occured while getting information from the
1835 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1837 # A database error has occured, add the database and specific
1838 # error message to the list of databases with errors and
1839 # process the next database.
1841 push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
1846 $database_name = $database_info{"DatabaseName"};
1847 $database_description = $database_info{"Description"};
1849 # Create a friendly name for the database.
1851 $database_filename_friendly = $data_file;
1853 # Append the database information to the table.
1855 $database_list{$database_count}{Filename} = $database_filename_friendly;
1856 $database_list{$database_count}{Name} = $database_name;
1857 $database_list{$database_count}{Description} = $database_description;
1863 # Check if there are no valid databases are if there is no
1864 # valid databases then write a message saying that no
1865 # valid databases are available.
1867 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilepages}, { Style => "pageheader" });
1868 $kiriwrite_presmodule->addlinebreak();
1869 $kiriwrite_presmodule->addlinebreak();
1871 if ($database_count eq 0){
1873 # There are no databases available for compiling so
1874 # write a message instead.
1876 $kiriwrite_presmodule->startbox("errorbox");
1877 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{nodatabasesavailable});
1878 $kiriwrite_presmodule->endbox();
1882 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1883 $kiriwrite_presmodule->startbox();
1884 $kiriwrite_presmodule->addhiddendata("mode", "compile");
1885 $kiriwrite_presmodule->addhiddendata("action", "compile");
1886 $kiriwrite_presmodule->addhiddendata("type", "multiple");
1888 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
1889 $kiriwrite_presmodule->addtext(" | ");
1890 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselectedbutton});
1891 $kiriwrite_presmodule->addlinebreak();
1892 $kiriwrite_presmodule->addlinebreak();
1893 $kiriwrite_presmodule->addhiddendata("count", $database_count);
1894 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
1896 $kiriwrite_presmodule->startheader();
1897 $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
1898 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
1899 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
1900 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
1901 $kiriwrite_presmodule->endheader();
1903 $database_count = 1;
1905 foreach $database (keys %database_list){
1907 # Check the style to be used with.
1909 if ($table_style eq 0){
1911 # Use the first style and set the style value
1912 # to use the next style, the next time the
1913 # if statement is checked.
1915 $table_style_name = "tablecell1";
1920 # Use the second style and set the style
1921 # value to use the first style, the next
1922 # time if statement is checked.
1924 $table_style_name = "tablecell2";
1928 # Add the template to the list of available
1929 # templates to compile.
1931 $kiriwrite_presmodule->startrow();
1932 $kiriwrite_presmodule->addcell($table_style_name);
1933 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
1934 $kiriwrite_presmodule->addcheckbox("name[" . $database_count . "]");
1935 $kiriwrite_presmodule->endcell();
1936 $kiriwrite_presmodule->addcell($table_style_name);
1938 if (!$database_list{$database}{Name}){
1939 $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}) });
1941 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_list{$database}{Filename}, { Text => $database_list{$database}{Name} });
1944 $kiriwrite_presmodule->endcell();
1945 $kiriwrite_presmodule->addcell($table_style_name);
1947 if (!$database_list{$database}{Description}){
1948 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
1950 $kiriwrite_presmodule->addtext($database_list{$database}{Description});
1953 $kiriwrite_presmodule->endcell();
1954 $kiriwrite_presmodule->addcell($table_style_name);
1955 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile&action=compile&type=single&database=" . $database_list{$database}{Filename}, { Text => $kiriwrite_lang->{options}->{compile} });
1956 $kiriwrite_presmodule->endcell();
1957 $kiriwrite_presmodule->endrow();
1963 $kiriwrite_presmodule->endtable();
1964 $kiriwrite_presmodule->endbox();
1965 $kiriwrite_presmodule->endform();
1969 # Disconnect from the database server.
1971 $kiriwrite_dbmodule->disconnect();
1973 # Check if any databases with problems have appeared and if they
1974 # have, print out a message saying which databases have problems.
1976 if (@permissions_list){
1978 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
1979 $kiriwrite_presmodule->addlinebreak();
1980 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
1981 $kiriwrite_presmodule->addlinebreak();
1983 foreach $database (@permissions_list){
1985 $kiriwrite_presmodule->addlinebreak();
1986 $kiriwrite_presmodule->addtext($database);
1990 $kiriwrite_presmodule->addlinebreak();
1991 $kiriwrite_presmodule->addlinebreak();
1997 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
1998 $kiriwrite_presmodule->addlinebreak();
1999 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
2000 $kiriwrite_presmodule->addlinebreak();
2002 foreach $database (@error_list){
2004 $kiriwrite_presmodule->addlinebreak();
2005 $kiriwrite_presmodule->addtext($database);
2011 return $kiriwrite_presmodule->grab();
2015 sub kiriwrite_compile_clean{
2016 #################################################################################
2017 # kiriwrite_compile_clean: Deletes the contents of the output directory. #
2021 # kiriwrite_compile_clean(confirm); #
2023 # confirm Confirms the deletion of files from the output directory. #
2024 #################################################################################
2026 # Get the values passed to the subroutine.
2030 # Define some variables for later.
2032 my $file_permissions;
2033 my $output_directory_exists;
2034 my $output_directory_permissions;
2035 my $warning_message;
2037 # Check if the output directory exists.
2039 $output_directory_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"});
2041 if ($output_directory_exists eq 1){
2043 # The output directory does not exist so return
2046 kiriwrite_error("outputdirectorymissing");
2050 # Check if the output directory has invalid
2053 $output_directory_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"});
2055 if ($output_directory_permissions eq 1){
2057 # The output directory has invalid permissions
2058 # set, so return an error.
2060 kiriwrite_error("outputdirectoryinvalidpermissions");
2068 # The action to clean the output directory has been
2071 # Remove the list of files and directories from the
2074 $file_permissions = kiriwrite_compile_clean_helper($kiriwrite_config{"directory_data_output"}, 1);
2076 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
2078 if ($file_permissions eq 1){
2080 $kiriwrite_presmodule->addlinebreak();
2081 $kiriwrite_presmodule->addlinebreak();
2082 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{somecontentnotremoved});
2083 $kiriwrite_presmodule->addlinebreak();
2084 $kiriwrite_presmodule->addlinebreak();
2088 $kiriwrite_presmodule->addlinebreak();
2089 $kiriwrite_presmodule->addlinebreak();
2090 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{contentremoved});
2091 $kiriwrite_presmodule->addlinebreak();
2092 $kiriwrite_presmodule->addlinebreak();
2096 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
2098 return $kiriwrite_presmodule->grab();
2102 # A value other than 1 is set for the confirm value
2103 # (which it shouldn't be) so return an error.
2105 kiriwrite_error("invalidvariable");
2111 # Print out a form for cleaning the output directory.
2113 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
2114 $kiriwrite_presmodule->addlinebreak();
2115 $kiriwrite_presmodule->addlinebreak();
2116 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
2117 $kiriwrite_presmodule->startbox();
2118 $kiriwrite_presmodule->addhiddendata("mode", "compile");
2119 $kiriwrite_presmodule->addhiddendata("action", "clean");
2120 $kiriwrite_presmodule->addhiddendata("confirm", 1);
2121 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectorymessage});
2122 $kiriwrite_presmodule->addlinebreak();
2123 $kiriwrite_presmodule->addlinebreak();
2124 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{cleanoutputdirectorybutton});
2125 $kiriwrite_presmodule->addtext(" | ");
2126 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist}});
2127 $kiriwrite_presmodule->endbox();
2128 $kiriwrite_presmodule->endform();
2130 return $kiriwrite_presmodule->grab();
2134 sub kiriwrite_compile_clean_helper{
2135 #################################################################################
2136 # kiriwrite_compile_clean_helper: Helper for cleaning out the output directory. #
2137 # This command sometimes is called recursively (when a directory is found). #
2141 # kiriwrite_compile_clean_helper(directory, removedirectory, [permissions]); #
2143 # directory Specifies the directory to remove files (and #
2144 # sub-directories) from. #
2145 # keepdirectory Keeps the directory itself after all files have been #
2147 # permissions Used recursively for error checking. #
2148 #################################################################################
2150 # Get the values passed to the subroutine.
2152 my ($directory, $directory_keep, $permissions) = @_;
2154 # Check if the directory_keep is only one charater long.
2156 my $directory_file = "";
2158 my $file_permissions = 0;
2161 # Check if the file permissions value is blank.
2165 # The file permissions value is blank.
2171 # Open the directory specified, read the contents of
2172 # the directory and then close the directory.
2174 opendir(DIRECTORY, $directory);
2175 @directory_list = readdir(DIRECTORY);
2176 closedir(DIRECTORY);
2178 # Remove each file and directory.
2180 foreach $directory_file (@directory_list){
2182 # Check if the filename is '.' or '..' and if it
2183 # is skip those files.
2185 if ($directory_file eq "." || $directory_file eq ".."){
2187 # The filename is '.' or '..' so skip processing
2192 # Check if the permissions on the file or directory has
2193 # valid permissions set.
2195 $file_permissions = kiriwrite_filepermissions($directory . '/' . $directory_file, 1, 1);
2197 if ($file_permissions eq 1){
2199 # The file or directory has invalid permissions set.
2206 # Check if the filename is a directory.
2208 if (-d $directory . '/' . $directory_file){
2210 # The filename is a directory so send the directory name
2211 # and this subroutine again (recursively).
2213 kiriwrite_compile_clean_helper($directory . '/' . $directory_file, 0, $permissions);
2217 # The file is not a directory but an actual file so
2218 # remove as normal (in terms of the Perl language).
2220 ($directory) = $directory =~ m/^(.*)$/g;
2221 ($directory_file) = $directory_file =~ m/^(.*)$/g;
2223 # Check if the directory is undefined and if it is then
2230 if (!$directory_file){
2231 $directory_file = "";
2234 unlink($directory . '/' . $directory_file);
2242 # Check if the directory should be kept.
2244 if ($directory_keep eq 1){
2246 # The directory_keep value is set as 1 so the directory
2247 # specified should be kept.
2249 } elsif ($directory_keep eq 0) {
2251 # The directory_keep value is set as 0 so remove the
2252 # directory specified.
2254 ($directory) = $directory =~ m/^(.*)$/g;
2259 # A value other than 0 or 1 was specified so return
2262 kiriwrite_error('invalidvalue');
2266 return $permissions;