Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Version 0.2.0 Import. Speed of Kiriwrite optimised and other alterations
[kiriwrite/.git] / cgi-files / lib / compile.lib
1 #################################################################################
2 # compile.lib: Kiriwrite Compile Library                                        #
3 #                                                                               #
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
8 # Kiriwrite script.
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;
34                 }
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");
44                 }
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
51                                 # compile the pages.
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.
63                         } else {
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.
76                         }
78                 } elsif ($http_query_type eq "single"){
80                         my $http_query_database = $form_data->{'database'};
81                         my @selectedlist;
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.
89                 } else {
91                         kiriwrite_error("invalidcompiletype");
93                 }
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;
110                 }
112                 if ($http_query_confirm eq 1){
114                         # The action to compile all the databases has been confirmed.
116                 }
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");
122                 exit;
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;
139                 }
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.
150         
151                 }
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.
163         } else {
165                 # The action specified was something else other than those
166                 # above, so return an error.
168                 kiriwrite_error("invalidaction");
170         }
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.                                                   #
187 #                                                                               #
188 # Usage:                                                                        #
189 #                                                                               #
190 # kiriwrite_compile_makepages(type, selectedlist, confirm);                     #
191 #                                                                               #
192 # type                  Specifies if single or multiple databases are to be     #
193 #                       compiled.                                               #
194 # confirm               Specifies if the action to compile the databases should #
195 #                       really be done.                                         #
196 # override              Specifies if the template should be overriden.          #
197 # overridetemplate      Specifies the name of the template to override with.    #
198 # selectedlist          Specifies the databases to compile from as an array.    #
199 #################################################################################
201         # Get the values that have been passed to the subroutine.
203         my ($type, $confirm, $override, $override_template, @selectedlist) = @_;
205         # Check if the confirm value is more than one
206         # character long.
208         kiriwrite_variablecheck($confirm, "maxlength", 1, 0);
210         # Check if the value for enabling the override feature
211         # is "on" or blank and if it is something else then
212         # return an error.
214         if ($override eq "on"){
215         } elsif (!$override){
216         } else {
218                 # The override value is invalid so return an error.
220                 kiriwrite_error("overridetemplatevalueinvalid");
222         }
224         # Check if the override template filename is valid and
225         # return an error if it isn't.
227         kiriwrite_variablecheck($override_template, "utf8", 0, 0);
228         $override_template      = kiriwrite_utf8convert($override_template);
229         $kiriwrite_overridetemplatefilename_length_check        = kiriwrite_variablecheck($override_template, "maxlength", 64, 1);
230         $kiriwrite_overridetemplatefilename_filename_check      = kiriwrite_variablecheck($override_template, "filename", "", 1);
232         if ($kiriwrite_overridetemplatefilename_length_check eq 1){
234                 # The override template filename given is too long
235                 # so return an error.
237                 kiriwrite_error("overridetemplatetoolong");
239         }
241         if ($kiriwrite_overridetemplatefilename_filename_check eq 2 && $override_template ne "!none"){
243                 # The override template filename is invalid so
244                 # return an error.
246                 kiriwrite_error("overridetemplateinvalid");
248         }
250         # Check if the confirm value is blank and if it
251         # is then set the confirm value to 0.
253         if (!$confirm){
255                 # The confirm value is blank, so set the
256                 # confirm value to 0.
258                 $confirm = 0;
260         }
262         # Check if there are any databases selected
263         # and return an error if there isn't.
265         if (!@selectedlist){
267                 # There are no databases in the array
268                 # so return an error.
270                 kiriwrite_error("nodatabaseselected");
272         }
274         # Check if the type given is no more than
275         # 7 characters long.
277         my $type_maxlength_check = kiriwrite_variablecheck($type, "maxlength", 8, 1);
279         if ($type_maxlength_check eq 1){
281                 # The type length given is too long so
282                 # return an error.
284                 kiriwrite_error("variabletoolong");
286         }
288         # Check if the action to compile the databases
289         # has been confirmed.
291         if ($confirm eq 1){
293                 # The action to compile the datavases has
294                 # been confirmed.
296                 # Define some variables for later.
298                 my %database_info;
299                 my %filter_info;
300                 my %template_info;
301                 my %page_info;
302                 my %templatefiles;
303                 my @page_filenames;
304                 my @databaseinfo;
305                 my @databasepages;
306                 my @filterslist;
307                 my @findfilter;
308                 my @replacefilter;
309                 my @templateslist;
310                 my @pagedirectories;
311                 my @database_filters;
312                 my $warning_count               = 0;
313                 my $error_count                 = 0;
314                 my $pages_count                 = 0;
315                 my $filter;
316                 my $filters_count               = 0;
317                 my $filters_find_blank_warning  = 0;
318                 my $filter_find;
319                 my $filter_replace;
320                 my $database;
321                 my $database_name;
322                 my $page_filename;
323                 my $page_filename_check;
324                 my $page_filename_char          = "";
325                 my $page_filename_directory;
326                 my $page_filename_length        = 0;
327                 my $page_filename_seek          = 0;
328                 my $page_filename_dircount      = 0;
329                 my $page_filename_exists        = 0;
330                 my $page_filename_permissions   = 0;
331                 my $page_directory_name;
332                 my $page_directory_path;
333                 my $page_name;
334                 my $page_description;
335                 my $page_section;
336                 my $page_template;
337                 my $page_content;
338                 my $page_settings;
339                 my $page_lastmodified;
340                 my $page_title;
341                 my $page_final;
342                 my $page_autosection;
343                 my $page_autotitle;
344                 my $page;
345                 my $database_filename_check     = 0;
346                 my $database_maxlength_check    = 0;
347                 my $output_exists               = 0;
348                 my $output_permissions          = 0;
349                 my $filters_exists              = 0;
350                 my $filters_permissions         = 0;
351                 my $filters_skip                = 0;
352                 my $template;
353                 my $templates_skip              = 0;
354                 my $information_prefix          = $kiriwrite_lang->{compile}->{informationprefix};
355                 my $error_prefix                = $kiriwrite_lang->{compile}->{errorprefix};
356                 my $warning_prefix              = $kiriwrite_lang->{compile}->{warningprefix};
357                 my $filehandle_page;
359                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabases}, { Style => "pageheader" });
360                 $kiriwrite_presmodule->addlinebreak();
361                 $kiriwrite_presmodule->addlinebreak();
362                 $kiriwrite_presmodule->startbox("datalist");
364                 # Check if the output directory exists and has
365                 # valid permissions set.
367                 $output_exists          = kiriwrite_fileexists($kiriwrite_config{'directory_data_output'});
369                 if ($output_exists ne 0){
371                         # The output directory does not exist so
372                         # return an error.
374                         kiriwrite_error("outputdirectorymissing");
376                 }
378                 $output_permissions     = kiriwrite_filepermissions($kiriwrite_config{'directory_data_output'}, 1, 1);
380                 if ($output_permissions ne 0){
382                         # The output directory has invalid
383                         # permissions set so return an error.
385                         kiriwrite_error("outputdirectoryinvalidpermissions");
387                 }
389                 # Connect to the database server.
391                 $kiriwrite_dbmodule->connect();
393                 # Check if any errors occured while connecting to the database server.
395                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
397                         # A database connection error has occured so return
398                         # an error.
400                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
402                 }
404                 # Connect to the filter database.
406                 $kiriwrite_dbmodule->connectfilter();
408                 # Check if any error has occured while connecting to the filter
409                 # database.
411                 if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseDoesNotExist"){
413                         # The filter database does not exist so write a warning message.
415                         $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{filterdatabasemissing});
416                         $kiriwrite_presmodule->addlinebreak();
417                         $filters_skip = 1;
418                         $warning_count++;
420                 } elsif ($kiriwrite_dbmodule->geterror eq "FilterDatabaseInvalidPermissionsSet"){
422                         # The filter database has invalid permissions set so write a
423                         # an error message.
425                         $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{filterdatabasepermissions});
426                         $kiriwrite_presmodule->addlinebreak();
427                         $filters_skip = 1;
428                         $error_count++;
430                 }
432                 # Load the filter database (if the filters skip
433                 # value isn't set to 1).
435                 if ($filters_skip eq 0){
437                         # Get the list of available filters.
439                         @database_filters       = $kiriwrite_dbmodule->getfilterlist();
441                         # Check if any errors occured while getting the list of filters.
443                         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
445                                 # A database error has occured with the filter database.
447                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
448                                 $kiriwrite_presmodule->addlinebreak();
449                                 $error_count++;
451                         }
453                         # Check if the filters skip value is set to 0
454                         # before executing the query.
456                         if ($filters_skip eq 0){
458                                 foreach $filter (@database_filters){
460                                         # Get the filter information.
462                                         %filter_info = $kiriwrite_dbmodule->getfilterinfo({ FilterID => $filter, Reduced => 1 });
464                                         # Check if any errors occured while getting the filter information.
466                                         if ($kiriwrite_dbmodule->geterror eq "FilterDatabaseError"){
468                                                 # A database error occured while using the filter database.
470                                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{filterdatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
471                                                 $kiriwrite_presmodule->addlinebreak();
472                                                 $error_count++;
473                                                 next;
475                                         } elsif ($kiriwrite_dbmodule->geterror eq "FilterDoesNotExist"){
477                                                 # The filter does not exist so process the next filter.
479                                                 next;
481                                         }
483                                         # Check if the find filter is blank and
484                                         # if it is then write a warning message.
486                                         if (!$filter_info{"FilterFind"}){
488                                                 if ($filters_find_blank_warning ne 1){
490                                                         $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{findfilterblank});
491                                                         $kiriwrite_presmodule->addlinebreak();
492                                                         $filters_find_blank_warning = 1;
493                                                 }
494                                                 next;
496                                         } else {
498                                                 # Add each find and replace filter.
500                                                 $findfilter[$filters_count]     = $filter_info{"FilterFind"};
501                                                 $replacefilter[$filters_count]  = $filter_info{"FilterReplace"};
503                                         }
505                                         $filters_count++;
507                                 }
509                                 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishfilterdatabase});
510                                 $kiriwrite_presmodule->addlinebreak();
512                         }
514                 }
516                 # Disconnect from the filter database.
518                 $kiriwrite_dbmodule->disconnectfilter();
520                 # Connect to the template database.
522                 $kiriwrite_dbmodule->connecttemplate();
524                 # Check if any errors occured while connecting to the template database.
526                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
528                         # The template database does not exist so set the template
529                         # warning message.
531                         $kiriwrite_presmodule->addtext($warning_prefix . $kiriwrite_lang->{compile}->{templatedatabasemissing});
532                         $kiriwrite_presmodule->addlinebreak();
533                         $templates_skip = 1;
534                         $warning_count++;
536                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
538                         # The template database has invalid permissions set so write
539                         # the template warning message.
540  
541                         $kiriwrite_presmodule->addtext($error_prefix . $kiriwrite_lang->{compile}->{templatedatabasepermissions});
542                         $kiriwrite_presmodule->addlinebreak();
543                         $templates_skip = 1;
544                         $error_count++;
546                 }
548                 # Check if the template skip value isn't set and if it isn't
549                 # then get the list of templates.
551                 if (!$templates_skip){
553                         @templateslist = $kiriwrite_dbmodule->gettemplatelist();
555                         # Check if any errors had occured.
557                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
559                                 # A database error occured while getting the list
560                                 # of templates so return a warning message with the 
561                                 # extended error information.
563                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
564                                 $templates_skip = 1;
565                                 $error_count++;
567                         }
569                         # Check if the template skip value isn't set and if it isn't
570                         # then process each template.
572                         if (!$templates_skip){
574                                 # Process each template.
576                                 foreach $template (@templateslist){
578                                         # Get information about the template.
580                                         %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template });
582                                         # Check if any error occured while getting the template information.
584                                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
586                                                 # A database error has occured, so return an error.
588                                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatedatabaseerror}, $kiriwrite_dbmodule->geterror(1)));
589                                                 $error_count++;
591                                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
593                                                 # The template does not exist, so process the next template.
595                                                 next;
597                                         }
599                                         # Place each template file into the hash.
601                                         $templatefiles{$template_info{"TemplateFilename"}}{template}    = $template_info{"TemplateLayout"};
602                                         $templatefiles{$template_info{"TemplateFilename"}}{valid}       = 1;
604                                 }
606                                 $kiriwrite_presmodule->addtext($information_prefix . $kiriwrite_lang->{compile}->{finishtemplatedatabase});
607                                 $kiriwrite_presmodule->addlinebreak();
609                         }
611                 }
613                 # Disconnect from the template database.
615                 $kiriwrite_dbmodule->disconnecttemplate();
617                 # Process each database.
619                 foreach $database (@selectedlist){
621                         # Check if the database filename and length
622                         # are valid.
624                         $kiriwrite_presmodule->addhorizontalline();
626                         $database_filename_check        = kiriwrite_variablecheck($database, "page_filename", "", 1);
627                         $database_maxlength_check       = kiriwrite_variablecheck($database, "maxlength", 32, 1);
629                         if ($database_filename_check ne 0){
631                                 # The database filename is invalid, so process
632                                 # the next database.
634                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenameinvalidcharacters}, $database));
635                                 $kiriwrite_presmodule->addlinebreak();
636                                 $error_count++;
637                                 next;
639                         }
641                         if ($database_maxlength_check ne 0){
643                                 # The database file is too long, so process the
644                                 # next database.
646                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefilenametoolong}, $database));
647                                 $kiriwrite_presmodule->addlinebreak();
648                                 $error_count++;
649                                 next;
651                         }
653                         # Select the database.
655                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $database });
657                         # Check if any errors had occured while selecting the database.
659                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
661                                 # The database does not exist, so write a warning message.
663                                 $kiriwrite_presmodule->addtext($warning_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasemissing}, $database));
664                                 $kiriwrite_presmodule->addlinebreak();
665                                 $warning_count++;
666                                 next;
668                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
670                                 # The database has invalid permissions set, so write
671                                 # an error message.
673                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseinvalidpermissions}, $database));
674                                 $kiriwrite_presmodule->addlinebreak();
675                                 $error_count++;
676                                 next;
678                         }
680                         # Get information about the database.
682                         my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
684                         # Check if any error occured while getting the database information.
686                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
688                                 # A database error has occured so write an error.
690                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databaseerror}, $database, $kiriwrite_dbmodule->geterror(1)));
691                                 $kiriwrite_presmodule->addlinebreak();
692                                 $error_count++;
693                                 next;
695                         };
697                         # Get the database name.
699                         $database_name = $database_info{"DatabaseName"};
701                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compilingpages}, $database_name));
702                         $kiriwrite_presmodule->addlinebreak();
704                         # Get the list of pages in the database.
706                         @databasepages = $kiriwrite_dbmodule->getpagelist();
708                         # Check if any errors occured while getting the list of pages.
710                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
712                                 # A database error has occured so return an error and
713                                 # also the extended error information.
715                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasepageerror}, $database, $kiriwrite_dbmodule->geterror(1)));
716                                 $kiriwrite_presmodule->addlinebreak();
717                                 $error_count++;
718                                 next;
720                         }
722                         foreach $page (@databasepages) {
724                                 # Get information about the page.
726                                 %page_info = $kiriwrite_dbmodule->getpageinfo({ PageFilename => $page });
728                                 $page_filename          = $page_info{"PageFilename"};
729                                 $page_name              = $page_info{"PageName"};
730                                 $page_description       = $page_info{"PageDescription"};
731                                 $page_section           = $page_info{"PageSection"};
732                                 $page_template          = $page_info{"PageTemplate"};
733                                 $page_content           = $page_info{"PageContent"};
734                                 $page_settings          = $page_info{"PageSettings"};
735                                 $page_lastmodified      = $page_info{"PageLastModified"};
737                                 # Check if the filename is valid.
739                                 $page_filename_check = kiriwrite_variablecheck($page_filename, "page_filename", 0, 1);
741                                 if ($page_filename_check ne 0){
743                                         # The file name is not valid so write a
744                                         # error and process the next page.
746                                         $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{invalidpagefilename}, $page_name));
747                                         $kiriwrite_presmodule->addlinebreak();
748                                         $error_count++;
749                                         next;
751                                 }
753                                 # Check if the template with the filename does not exist
754                                 # in the template files hash and write a message and
755                                 # process the next page.
757                                 if ($override eq "on"){
759                                         $page_template = $override_template;
761                                 }
763                                 if (!$templatefiles{$page_template}{valid} && $page_template ne "!none" && $templates_skip eq 0){
765                                         $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{templatefilemissing}, $page_template, $page_name, $page_filename));
766                                         $kiriwrite_presmodule->addlinebreak();
767                                         $error_count++;
768                                         next;
770                                         $page_final = $page_content;
772                                 } elsif ($page_template eq "!none"){
774                                         $page_final = $page_content;
776                                 } else {
778                                         $page_final = $templatefiles{$page_template}{template};
780                                         if (!$page_final){
781                                                 $page_final = "";
782                                         }
784                                         $page_final =~ s/<kiriwrite:pagecontent>/$page_content/g;
786                                 }
788                                 # Create the combined page title (if needed).
790                                 if ($page_settings eq 0 || $page_settings > 3){
792                                         # Don't use page name or section name.
794                                         $page_final =~ s/<kiriwrite:pagetitle>//g;
796                                 } elsif ($page_settings eq 1){
798                                         # Use the page name and section name.
800                                         $page_autotitle = "(" . $page_section . " - " . $page_name . ")";
801                                         $page_title = $page_section . " - " . $page_name;
802                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_title/g;
804                                 } elsif ($page_settings eq 2){
806                                         # Use the page name only.
808                                         $page_autotitle = "(" . $page_name . ")";
809                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_name/g;
811                                 } elsif ($page_settings eq 3){
813                                         # Use the section name only.
815                                         if ($page_section){
816                                                 $page_autotitle = "(" . $page_section . ")";
817                                         }
818                                         $page_final =~ s/<kiriwrite:pagetitle>/$page_section/g;
820                                 }
822                                 # Check if the section name is not blank and
823                                 # place brackets inbetween if it is.
825                                 if ($page_section){
827                                         $page_autosection = "(" . $page_section . ")";
829                                 }
831                                 # Replace each <kiriwrite> value with the apporiate page
832                                 # values.
834                                 $page_final =~ s/<kiriwrite:pagename>/$page_name/g;
835                                 $page_final =~ s/<kiriwrite:pagedescription>/$page_description/g;
836                                 $page_final =~ s/<kiriwrite:pagesection>/$page_section/g;
837                                 $page_final =~ s/<kiriwrite:autosection>/$page_autosection/g;
838                                 $page_final =~ s/<kiriwrite:autotitle>/$page_autotitle/g;
840                                 # Process the filters on the page data.
842                                 if ($filters_skip eq 0){
844                                         $filters_count = 0;
846                                         foreach $filter_find (@findfilter){
848                                                 # Get the replace filter and process each
849                                                 # filter on the page.
851                                                 $filter_replace = $replacefilter[$filters_count];
852                                                 $page_final =~ s/$filter_find/$filter_replace/g;
853                                                 $filters_count++;
855                                         }
857                                 }
859                                 # Process the page filename and check what directories
860                                 # need to be created.
862                                 $page_filename_length = int(length($page_filename));
864                                 do {
866                                         $page_filename_char = substr($page_filename, $page_filename_seek, 1);
868                                         # Check if a forward slash appears and add it to
869                                         # the list of directories array.
871                                         if ($page_filename_char eq '/'){
873                                                 # Append the directory name to the list of
874                                                 # directories array.
876                                                 $pagedirectories[$page_filename_dircount] = $page_filename_directory;
877                                                 $page_filename_directory        = "";
878                                                 $page_filename_char             = "";
879                                                 $page_filename_dircount++;
881                                         } else {
883                                                 # Append the character to the directory/filename.
885                                                 $page_filename_directory = $page_filename_directory . $page_filename_char;
887                                         }
889                                         $page_filename_seek++;
891                                 } until ($page_filename_length eq $page_filename_seek);
893                                 foreach $page_directory_name (@pagedirectories){
895                                         # Check if the directory name is undefined and if it
896                                         # is then set it blank.
898                                         if (!$page_directory_name){
899                                                 $page_directory_name = "";
900                                         }
902                                         if (!$page_directory_path){
903                                                 $page_directory_path = "";
904                                         }
906                                         # Check if the directory exists and create 
907                                         # the directory if it doesn't exist.
909                                         $page_directory_path = $page_directory_path . '/' . $page_directory_name;
911                                         mkdir($kiriwrite_config{"directory_data_output"} . '/' . $page_directory_path);
913                                 }
915                                 # Check if the file already exists and if it does then check
916                                 # the permissions of the file and return an error if the
917                                 # permissions set are invalid.
919                                 $page_filename_exists = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"} . '/' . $page_filename);        
921                                 if ($page_filename_exists eq 0){
923                                         # The page filename exists, so check if the permissions given are
924                                         # valid.
926                                         $page_filename_permissions = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"} . '/' . $page_filename, 1, 1);
928                                         if ($page_filename_permissions eq 1){
930                                                 # The file has invalid permissions set.
932                                                 $kiriwrite_presmodule->addtext($error_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{pageinvalidpermissions}, $page_filename));
933                                                 $kiriwrite_presmodule->addlinebreak();
934                                                 $error_count++;
936                                                 # Reset certain values.
938                                                 $page_autotitle = "";
939                                                 $page_autosection = "";
940                                                 $page_filename_seek = 0;
941                                                 $page_filename_dircount = 0;
943                                                 $page_filename_directory = "";
944                                                 $page_directory_path = "";
945                                                 $page_directory_name = "";
946                                                 @pagedirectories = ();
947                                                 
948                                                 next;
950                                         }
952                                 }
954                                 # Reset certain values.
956                                 $page_autotitle = "";
957                                 $page_autosection = "";
958                                 $page_filename_seek = 0;
959                                 $page_filename_dircount = 0;
961                                 $page_filename_directory = "";
962                                 $page_directory_path = "";
963                                 $page_directory_name = "";
964                                 @pagedirectories = ();
966                                 # Write the file to the output directory.
968                                 ($page_filename) = $page_filename =~ m/^(.*)$/g;
969                                 ($kiriwrite_config{"directory_data_output"}) = $kiriwrite_config{"directory_data_output"} =~ m/^(.*)$/g;
971                                 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);
973                                 if (!$page_final){
975                                         $page_final = "";
977                                 }
979                                 binmode $filehandle_page, ':utf8';
980                                 print $filehandle_page $page_final;
981                                 close($filehandle_page);
983                                 # Write a message saying the page has been compiled. Check
984                                 # to see if the page name is blank and write a message
985                                 # saying there's no page name.
987                                 if (!$page_name){
988                                         $kiriwrite_presmodule->addtext($information_prefix . ' ');
989                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname} . ' ');
990                                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledpageblankname}, $page_filename));
991                                 } else {
992                                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{compiledpage}, $page_name, $page_filename));
993                                 }
996                                 $kiriwrite_presmodule->addlinebreak();
997                                 $pages_count++;
999                         }
1001                         # Write a message saying that the database has
1002                         # been processed.
1004                         $kiriwrite_presmodule->addtext($information_prefix . kiriwrite_language($kiriwrite_lang->{compile}->{databasefinish}, $database_name));
1005                         $kiriwrite_presmodule->addlinebreak();
1007                 }
1009                 # Disconnect from the database server.
1011                 $kiriwrite_dbmodule->disconnect();
1013                 $kiriwrite_presmodule->addhorizontalline();
1014                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compileresults}, $pages_count, $error_count, $warning_count));
1015                 $kiriwrite_presmodule->endbox();
1016                 $kiriwrite_presmodule->addlinebreak();
1017                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
1019                 return $kiriwrite_presmodule->grab();
1021         } elsif ($confirm eq 0){
1023                 # The action to compile the databases has
1024                 # not been confirmed so check what type
1025                 # is being used.
1027                 # Get the list of templates for overwriting the
1028                 # template if needed.
1030                 my $templateoverride_skip       = 0;
1031                 my $templatedbwarning           = "";
1032                 my @template_list;
1033                 my $template_filename;
1034                 my %template_info;
1035                 my %template_dblist;
1036                 tie(%template_dblist, "Tie::IxHash");
1038                 if ($type eq "single"){
1040                         # The type is a single database selected so
1041                         # process that database.
1043                         # Define some variables for later.
1045                         my %database_info; 
1046                         my $database_filename_check;
1047                         my $database_maxlength_check;
1048                         my $databasefilename;
1049                         my $database_name;
1051                         # Check that the database name and length are
1052                         # valid and return an error if they aren't.
1054                         $databasefilename = $selectedlist[0];
1056                         # Connect to the database server.
1058                         $kiriwrite_dbmodule->connect();
1060                         # Check if any errors occured while connecting to the database server.
1062                         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1064                                 # A database connection error has occured so return
1065                                 # an error.
1067                                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1069                         }
1071                         # Select the database.
1073                         $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasefilename });
1075                         # Check if any errors had occured while selecting the database.
1077                         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1079                                 # The database does not exist, so return an error.
1081                                 kiriwrite_error("databasemissingfile");
1083                         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1085                                 # The database has invalid permissions set, so return
1086                                 # an error.
1088                                 kiriwrite_error("databaseinvalidpermissions");
1090                         }
1092                         # Get information about the database.
1094                         %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1096                         # Check if any error occured while getting the database information.
1098                         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1100                                 # A database error has occured so return an error and
1101                                 # also the extended error information.
1103                                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
1105                         };
1107                         $database_name = $database_info{"DatabaseName"};
1109                         $kiriwrite_dbmodule->connecttemplate();
1111                         # Check if any errors occured while connecting to the
1112                         # template database.
1114                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
1116                                 # The template database does not exist so skip processing
1117                                 # the list of templates in the template database.
1119                                 $templateoverride_skip = 1;
1120                                 $templatedbwarning = $kiriwrite_lang->{compile}->{templatedbmissing};
1122                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
1124                                 # The template database has invalid permissions set so
1125                                 # skip processing the list of templates in the
1126                                 # template database.
1128                                 $templateoverride_skip = 1;
1129                                 $templatedbwarning = $kiriwrite_lang->{compile}->{templatedbinvalidpermissions};
1131                         }
1133                         # Get the list of available templates if no errors had
1134                         # occured.
1136                         if ($templateoverride_skip ne 1){
1138                                 @template_list = $kiriwrite_dbmodule->gettemplatelist();
1140                                 # Check if any errors occured while getting the list of templates.
1142                                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1144                                         # A template database error has occured so skip processing the
1145                                         # list of templates in the template database.
1147                                         $templateoverride_skip = 1;
1148                                         $templatedbwarning = $kiriwrite_lang->{compile}->{templatedberror};
1150                                 }
1152                                 if ($templateoverride_skip ne 1){
1154                                         foreach $template_file (@template_list){
1156                                                 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_file });
1157                                                 
1158                                                 if ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
1160                                                         next;
1162                                                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1164                                                         next;
1166                                                 }
1168                                                 $template_dblist{$template_file} = $template_info{"TemplateName"};
1170                                         }
1172                                 }
1174                         }
1176                         # Disconnect from the template database and database server.
1178                         $kiriwrite_dbmodule->disconnecttemplate();
1179                         $kiriwrite_dbmodule->disconnect();
1181                         # Write out a form asking the user to confirm if the
1182                         # user wants to compile the selected database.
1184                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compiledatabase}, { Style => "pageheader" });
1185                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1186                         $kiriwrite_presmodule->startbox();
1187                         $kiriwrite_presmodule->addhiddendata("mode", "compile");
1188                         $kiriwrite_presmodule->addhiddendata("action", "compile");
1189                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
1190                         $kiriwrite_presmodule->addhiddendata("id[1]", $databasefilename);
1191                         $kiriwrite_presmodule->addhiddendata("name[1]", "on");
1192                         $kiriwrite_presmodule->addhiddendata("confirm", 1);
1193                         $kiriwrite_presmodule->addlinebreak();
1194                         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{compile}->{compiledatabasemessage}, $database_name));
1195                         $kiriwrite_presmodule->addlinebreak();
1196                         $kiriwrite_presmodule->addlinebreak();
1198                         if ($templateoverride_skip eq 1){
1200                                 # Add message saying why template can't be overridden.
1201                                 $kiriwrite_presmodule->addtext($templatedbwarning);
1203                         } else {
1205                                 # Add overwrite template data.
1206                                 $kiriwrite_presmodule->addcheckbox("enableoverride", { OptionDescription => $kiriwrite_lang->{compile}->{overridetemplate}, LineBreak => 1 });
1207                                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{replacecurrenttemplate});
1208                                 $kiriwrite_presmodule->addselectbox("overridetemplate");
1210                                 foreach $template_file (keys %template_dblist){
1212                                         $kiriwrite_presmodule->addoption($template_dblist{$template_file} . " (" . $template_file . ")", { Value => $template_file });
1214                                 }
1216                                 $kiriwrite_presmodule->addoption($kiriwrite_lang->{compile}->{dontusetemplate}, { Value => "!none" });
1217                                 $kiriwrite_presmodule->endselectbox();
1219                         }
1221                         $kiriwrite_presmodule->addlinebreak();
1222                         $kiriwrite_presmodule->addlinebreak();
1223                         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compiledatabasebutton});
1224                         $kiriwrite_presmodule->addtext(" | ");
1225                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
1226                         $kiriwrite_presmodule->endbox();
1227                         $kiriwrite_presmodule->endform();
1229                         return $kiriwrite_presmodule->grab();
1231                 } elsif ($type eq "multiple"){
1233                         # The type is multiple databases selected
1234                         # so process each database.
1236                         # Define some variables for later.
1238                         my %database_list;
1239                         my $databasename;
1240                         my $database;
1241                         my $database_filename_check;
1242                         my $database_maxlength_check;
1243                         my $database_count = 0;
1244                         my $database_info_name;
1246                         # Connect to the database server.
1248                         $kiriwrite_dbmodule->connect();
1250                         # Check if any errors occured while connecting to the database server.
1252                         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1254                                 # A database connection error has occured so return
1255                                 # an error.
1257                                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1259                         }
1261                         foreach $databasename (@selectedlist){
1263                                 # Check if the database is in the database
1264                                 # directory and skip it if it isn't.
1265  
1266                                 $database_filename_check        = kiriwrite_variablecheck($databasename, "filename", "", 1);
1267                                 $database_maxlength_check       = kiriwrite_variablecheck($databasename, "maxlength", 32, 1);
1268  
1269                                 if ($database_filename_check ne 0 || $database_maxlength_check ne 0){
1270  
1271                                         # The database filename given is invalid or
1272                                         # the database filename given is too long
1273                                         # so process the next database.
1274  
1275                                         next;
1276  
1277                                 }
1279                                 # Select the database to add the page to.
1281                                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $databasename });
1283                                 # Check if any errors had occured while selecting the database.
1285                                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1287                                         # The database does not exist, so process the next database.
1289                                         next;
1291                                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
1293                                         # The database has invalid permissions set, so process
1294                                         # the next database.
1296                                         next;
1298                                 }
1300                                 # Get information about the database.
1302                                 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1304                                 # Check if any error occured while getting the database information.
1306                                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1308                                         # A database error has occured so process the next
1309                                         # database.
1311                                         next;
1313                                 };
1315                                 $database_list{$database_count}{Name}           = $database_info{"DatabaseName"};
1316                                 $database_list{$database_count}{Filename}       = $databasename;
1318                                 $database_count++;
1320                         }
1322                         # Check if any databases are available to be compiled.
1324                         if ($database_count eq 0){
1326                                 # No databases are available to be compiled.
1328                                 kiriwrite_error("nodatabaseselected");
1330                         }
1332                         # Write out the form for compiling the database.
1334                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabases}, { Style => "pageheader" });
1335                         $kiriwrite_presmodule->addlinebreak();
1336                         $kiriwrite_presmodule->addlinebreak();
1337                         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1338                         $kiriwrite_presmodule->startbox();
1339                         $kiriwrite_presmodule->addhiddendata("mode", "compile");
1340                         $kiriwrite_presmodule->addhiddendata("action", "compile");
1341                         $kiriwrite_presmodule->addhiddendata("type", "multiple");
1342                         $kiriwrite_presmodule->addhiddendata("count", $database_count);
1343                         $kiriwrite_presmodule->addhiddendata("confirm", 1);
1344                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compileselecteddatabasesmessage});
1345                         $kiriwrite_presmodule->addlinebreak();
1346                         $kiriwrite_presmodule->addlinebreak();
1347                         $kiriwrite_presmodule->startbox("datalist");
1349                         $database_count = 0;
1351                         # write out the list of databases to compile.
1353                         foreach $database (keys %database_list){
1355                                 $database_count++;
1357                                 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
1358                                 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
1360                                 # Check if the database name is undefined and if it is
1361                                 # then write a message saying the database name is blank.
1363                                 if (!$database_list{$database}{Name}){
1364                                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{compile}->{blankdatabasename});
1365                                 } else {
1366                                         $kiriwrite_presmodule->addtext($database_list{$database}{Name});
1367                                 }
1369                                 $kiriwrite_presmodule->addlinebreak();
1371                         }
1373                         $kiriwrite_presmodule->endbox();
1375                         $kiriwrite_presmodule->addlinebreak();
1377                         $kiriwrite_dbmodule->connecttemplate();
1379                         # Check if any errors occured while connecting to the
1380                         # template database.
1382                         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
1384                                 # The template database does not exist so skip processing
1385                                 # the list of templates in the template database.
1387                                 $templateoverride_skip = 1;
1388                                 $templatedbwarning = $kiriwrite_lang->{compile}->{templatedbmissing};
1390                         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
1392                                 # The template database has invalid permissions set so
1393                                 # skip processing the list of templates in the
1394                                 # template database.
1396                                 $templateoverride_skip = 1;
1397                                 $templatedbwarning = $kiriwrite_lang->{compile}->{templatedbinvalidpermissions};
1399                         }
1401                         # Get the list of available templates if no errors had
1402                         # occured.
1404                         if ($templateoverride_skip ne 1){
1406                                 @template_list = $kiriwrite_dbmodule->gettemplatelist();
1408                                 # Check if any errors occured while getting the list of templates.
1410                                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1412                                         # A template database error has occured so skip processing the
1413                                         # list of templates in the template database.
1415                                         $templateoverride_skip = 1;
1416                                         $templatedbwarning = $kiriwrite_lang->{compile}->{templatedberror};
1418                                 }
1420                                 if ($templateoverride_skip ne 1){
1422                                         foreach $template_file (@template_list){
1424                                                 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_file });
1425                                                 
1426                                                 if ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
1428                                                         next;
1430                                                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1432                                                         next;
1434                                                 }
1436                                                 $template_dblist{$template_file} = $template_info{"TemplateName"};
1438                                         }
1440                                 }
1442                         }
1444                         if ($templateoverride_skip eq 1){
1446                                 # Add message saying why template can't be overridden.
1447                                 $kiriwrite_presmodule->addtext($templatedbwarning);
1449                         } else {
1451                                 # Add overwrite template data.
1452                                 $kiriwrite_presmodule->addcheckbox("enableoverride", { OptionDescription => $kiriwrite_lang->{compile}->{overridetemplate}, LineBreak => 1 });
1453                                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{replacecurrenttemplate});
1454                                 $kiriwrite_presmodule->addselectbox("overridetemplate");
1456                                 foreach $template_file (keys %template_dblist){
1458                                         $kiriwrite_presmodule->addoption($template_dblist{$template_file} . " (" . $template_file . ")", { Value => $template_file });
1460                                 }
1462                                 $kiriwrite_presmodule->addoption($kiriwrite_lang->{compile}->{dontusetemplate}, { Value => "!none" });
1463                                 $kiriwrite_presmodule->endselectbox();
1465                         }
1467                         # Disconnect from the template database and database server.
1469                         $kiriwrite_dbmodule->disconnecttemplate();
1470                         $kiriwrite_dbmodule->disconnect();
1472                         $kiriwrite_presmodule->addlinebreak();
1473                         $kiriwrite_presmodule->addlinebreak();
1474                         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselecteddatabasesbutton});
1475                         $kiriwrite_presmodule->addtext(" | ");
1476                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
1477                         $kiriwrite_presmodule->endbox();
1478                         $kiriwrite_presmodule->endform();
1480                         return $kiriwrite_presmodule->grab();
1482                 } else {
1484                         # The type is something else other than
1485                         # single or multiple, so return an error.
1487                         kiriwrite_error("invalidvariable");
1489                 }
1491         } else {
1493                 # The confirm value is neither 0 or 1, so
1494                 # return an error.
1496                 kiriwrite_error("invalidvariable");
1498         }
1502 sub kiriwrite_compile_all{
1503 #################################################################################
1504 # kiriwrite_compile_all: Compile all of the databases in the database           #
1505 # directory.                                                                    #
1506 #                                                                               #
1507 # Usage:                                                                        #
1508 #                                                                               #
1509 # kiriwrite_compile_all();                                                      #
1510 #################################################################################
1512         # Connect to the database server.
1514         $kiriwrite_dbmodule->connect();
1516         # Check if any errors occured while connecting to the database server.
1518         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1520                 # A database connection error has occured so return
1521                 # an error.
1523                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1525         }
1527         # Get the list of available databases.
1529         my @database_list = $kiriwrite_dbmodule->getdblist();
1531         # Check if any errors occured while getting the databases.
1533         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
1535                 # The database directory is missing so return an error.
1537                 kiriwrite_error("datadirectorymissing");
1539         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
1541                 # The database directory has invalid permissions set so return
1542                 # an error.
1544                 kiriwrite_error("datadirectoryinvalidpermissions");
1546         }
1548         # Define some variables for later.
1550         my $database;
1551         my $database_name_filename_check;
1552         my $database_count              = 0;
1554         # Check the list of databases to compile to see if it is blank,
1555         # if it is then return an error.
1557         if (!@database_list){
1559                 # The list of database is blank so return an error.
1561                 kiriwrite_error("nodatabasesavailable");
1563         }
1565         # Write out a form for confirming the action to compile all of the databases.
1567         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabases}, { Style => "pageheader" });
1568         $kiriwrite_presmodule->addlinebreak();
1569         $kiriwrite_presmodule->addlinebreak();
1571         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1572         $kiriwrite_presmodule->startbox();
1573         $kiriwrite_presmodule->addhiddendata("mode", "compile");
1574         $kiriwrite_presmodule->addhiddendata("action", "compile");
1575         $kiriwrite_presmodule->addhiddendata("type", "multiple");
1577         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilealldatabasesmessage});
1578         $kiriwrite_presmodule->addlinebreak();
1579         $kiriwrite_presmodule->addlinebreak();
1581         foreach $database (@database_list){
1583                 # Check if the database filename is blank.
1585                 if ($database eq ""){
1587                         # The database filename is blank so process
1588                         # the next database.
1590                         next;
1592                 }
1594                 # Check if the database filename is valid before
1595                 # using the database.
1597                 $database_name_filename_check   = kiriwrite_variablecheck($database, "filename", 0, 1);
1599                 if ($database_name_filename_check ne 0){
1601                         # The database filename is invalid so process
1602                         # the next database.
1604                         next;
1606                 }
1608                 $database_count++;
1609                 $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database);
1610                 $kiriwrite_presmodule->addhiddendata("name[" . $database_count . "]", "on");
1612         }
1614         $kiriwrite_presmodule->addhiddendata("count", $database_count);
1616         my $templateoverride_skip       = 0;
1617         my $templatedbwarning           = "";
1618         my @template_list;
1619         my $template_filename;
1620         my %template_info;
1621         my %template_dblist;
1622         tie(%template_dblist, "Tie::IxHash");
1624         $kiriwrite_dbmodule->connecttemplate();
1626         # Check if any errors occured while connecting to the
1627         # template database.
1629         if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseDoesNotExist"){
1631                 # The template database does not exist so skip processing
1632                 # the list of templates in the template database.
1634                 $templateoverride_skip = 1;
1635                 $templatedbwarning = $kiriwrite_lang->{compile}->{templatedbmissing};
1637         } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseInvalidPermissionsSet"){
1639                 # The template database has invalid permissions set so
1640                 # skip processing the list of templates in the
1641                 # template database.
1643                 $templateoverride_skip = 1;
1644                 $templatedbwarning = $kiriwrite_lang->{compile}->{templatedbinvalidpermissions};
1646         }
1648         # Get the list of available templates if no errors had
1649         # occured.
1651         if ($templateoverride_skip ne 1){
1653                 @template_list = $kiriwrite_dbmodule->gettemplatelist();
1655                 # Check if any errors occured while getting the list of templates.
1657                 if ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1659                         # A template database error has occured so skip processing the
1660                         # list of templates in the template database.
1662                         $templateoverride_skip = 1;
1663                         $templatedbwarning = $kiriwrite_lang->{compile}->{templatedberror};
1665                 }
1667                 if ($templateoverride_skip ne 1){
1669                         foreach $template_file (@template_list){
1671                                 %template_info = $kiriwrite_dbmodule->gettemplateinfo({ TemplateFilename => $template_file });
1672                                 
1673                                 if ($kiriwrite_dbmodule->geterror eq "TemplateDoesNotExist"){
1675                                         next;
1677                                 } elsif ($kiriwrite_dbmodule->geterror eq "TemplateDatabaseError"){
1679                                         next;
1681                                 }
1683                                 $template_dblist{$template_file} = $template_info{"TemplateName"};
1685                         }
1687                 }
1689         }
1691         if ($templateoverride_skip eq 1){
1693                 # Add message saying why template can't be overridden.
1694                 $kiriwrite_presmodule->addtext($templatedbwarning);
1696         } else {
1698                 # Add overwrite template data.
1699                 $kiriwrite_presmodule->addcheckbox("enableoverride", { OptionDescription => $kiriwrite_lang->{compile}->{overridetemplate}, LineBreak => 1 });
1700                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{replacecurrenttemplate});
1701                 $kiriwrite_presmodule->addselectbox("overridetemplate");
1703                 foreach $template_file (keys %template_dblist){
1705                         $kiriwrite_presmodule->addoption($template_dblist{$template_file} . " (" . $template_file . ")", { Value => $template_file });
1707                 }
1709                 $kiriwrite_presmodule->addoption($kiriwrite_lang->{compile}->{dontusetemplate}, { Value => "!none" });
1710                 $kiriwrite_presmodule->endselectbox();
1712         }
1714         # Disconnect from the template database and database server.
1716         $kiriwrite_dbmodule->disconnecttemplate();
1717         $kiriwrite_dbmodule->disconnect();
1719         $kiriwrite_presmodule->addlinebreak();
1720         $kiriwrite_presmodule->addlinebreak();
1722         $kiriwrite_presmodule->addhiddendata("confirm", 1);
1723         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compilealldatabasesbutton});
1724         $kiriwrite_presmodule->addtext(" | ");
1725         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
1726         $kiriwrite_presmodule->endbox();
1727         $kiriwrite_presmodule->endform();
1729         return $kiriwrite_presmodule->grab();
1734 sub kiriwrite_compile_list{
1735 #################################################################################
1736 # kiriwrite_compile_list: Shows a list of databases that can be compiled.       #
1737 #                                                                               #
1738 # Usage:                                                                        #
1739 #                                                                               #
1740 # kiriwrite_compile_list();                                                     #
1741 #################################################################################
1743         # Define the following variables that are going to be used before using 
1744         # the foreach function.
1746         my %database_info;
1747         my %database_list;
1748         my $database_count = 0;
1749         my $database_filename = "";
1750         my $database_filename_friendly = "";
1751         my $database_permissions = "";
1752         my $database_name = "";
1753         my $database_description = "";
1754         my $data_file = "";
1755         my @permissions_list;
1756         my @error_list;
1757         my $table_style = 0;
1758         my $table_style_name = "";
1759         my $database;
1761         tie(%database_list, 'Tie::IxHash');
1763         # Connect to the database server.
1765         $kiriwrite_dbmodule->connect();
1767         # Check if any errors occured while connecting to the database server.
1769         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
1771                 # A database connection error has occured so return
1772                 # an error.
1774                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
1776         }
1778         # Get the list of available databases and process any errors that
1779         # might have occured.
1781         my @database_list = $kiriwrite_dbmodule->getdblist();
1783         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
1785                 # The database directory is missing so return an error.
1787                 kiriwrite_error("datadirectorymissing");
1789         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
1791                 # The database directory has invalid permissions set so return
1792                 # an error.
1794                 kiriwrite_error("datadirectoryinvalidpermissions");
1796         }
1798         # Begin creating the table for the list of databases.
1800         foreach $data_file (@database_list){
1802                 # Select the database.
1804                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
1806                 # Check if any error occured while selecting the database.
1808                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1810                         # The database does not exist, so process the next
1811                         # database.
1813                         next;
1815                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
1817                         # The database has invalid permissions settings, so
1818                         # add the database to the list of databases with
1819                         # invalid permissions set and process the next
1820                         # database.
1822                         push(@permissions_list, $data_file);
1823                         next;
1825                 }
1827                 # Get information about the database.
1829                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1831                 # Check if any error occured while getting information from the
1832                 # database.
1834                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1836                         # A database error has occured, add the database and specific
1837                         # error message to the list of databases with errors and
1838                         # process the next database.
1840                         push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
1841                         next;
1843                 }
1845                 $database_name          = $database_info{"DatabaseName"};
1846                 $database_description   = $database_info{"Description"};
1848                 # Create a friendly name for the database.
1850                 $database_filename_friendly = $data_file;
1852                 # Append the database information to the table.
1854                 $database_list{$database_count}{Filename}       = $database_filename_friendly;
1855                 $database_list{$database_count}{Name}           = $database_name;
1856                 $database_list{$database_count}{Description}    = $database_description;
1858                 $database_count++;
1860         }
1862         # Check if there are no valid databases are if there is no
1863         # valid databases then write a message saying that no
1864         # valid databases are available.
1866         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{compilepages}, { Style => "pageheader" });
1867         $kiriwrite_presmodule->addlinebreak();
1868         $kiriwrite_presmodule->addlinebreak();
1870         if ($database_count eq 0){
1872                 # There are no databases available for compiling so
1873                 # write a message instead.
1875                 $kiriwrite_presmodule->startbox("errorbox");
1876                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{nodatabasesavailable});
1877                 $kiriwrite_presmodule->endbox();
1879         } else {
1881                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
1882                 $kiriwrite_presmodule->startbox();
1883                 $kiriwrite_presmodule->addhiddendata("mode", "compile");
1884                 $kiriwrite_presmodule->addhiddendata("action", "compile");
1885                 $kiriwrite_presmodule->addhiddendata("type", "multiple");
1887                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{selectnone});
1888                 $kiriwrite_presmodule->addtext(" | ");
1889                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{compileselectedbutton});
1890                 $kiriwrite_presmodule->addlinebreak();
1891                 $kiriwrite_presmodule->addlinebreak();
1892                 $kiriwrite_presmodule->addhiddendata("count", $database_count);
1893                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
1895                 $kiriwrite_presmodule->startheader();
1896                 $kiriwrite_presmodule->addheader("", { Style => "tablecellheader" });
1897                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
1898                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
1899                 $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{options}, { Style => "tablecellheader" });
1900                 $kiriwrite_presmodule->endheader();
1902                 $database_count = 1;
1904                 foreach $database (keys %database_list){
1906                         # Check the style to be used with.
1908                         if ($table_style eq 0){
1910                                 # Use the first style and set the style value
1911                                 # to use the next style, the next time the
1912                                 # if statement is checked.
1914                                 $table_style_name = "tablecell1";
1915                                 $table_style = 1;
1917                         } else {
1919                                 # Use the second style and set the style
1920                                 # value to use the first style, the next
1921                                 # time if statement is checked.
1923                                 $table_style_name = "tablecell2";
1924                                 $table_style = 0;
1925                         }
1927                         # Add the template to the list of available
1928                         # templates to compile.
1930                         $kiriwrite_presmodule->startrow();
1931                         $kiriwrite_presmodule->addcell($table_style_name);
1932                         $kiriwrite_presmodule->addhiddendata("id[" . $database_count . "]", $database_list{$database}{Filename});
1933                         $kiriwrite_presmodule->addcheckbox("name[" . $database_count . "]");
1934                         $kiriwrite_presmodule->endcell();
1935                         $kiriwrite_presmodule->addcell($table_style_name);
1937                         if (!$database_list{$database}{Name}){
1938                                 $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}) });
1939                         } else {
1940                                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_list{$database}{Filename}, { Text => $database_list{$database}{Name} });
1941                         }
1943                         $kiriwrite_presmodule->endcell();
1944                         $kiriwrite_presmodule->addcell($table_style_name);
1946                         if (!$database_list{$database}{Description}){
1947                                 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
1948                         } else {
1949                                 $kiriwrite_presmodule->addtext($database_list{$database}{Description});
1950                         }
1952                         $kiriwrite_presmodule->endcell();
1953                         $kiriwrite_presmodule->addcell($table_style_name);
1954                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile&action=compile&type=single&database=" . $database_list{$database}{Filename}, { Text => $kiriwrite_lang->{options}->{compile} });
1955                         $kiriwrite_presmodule->endcell();
1956                         $kiriwrite_presmodule->endrow();
1958                         $database_count++;
1960                 }
1962                 $kiriwrite_presmodule->endtable();
1963                 $kiriwrite_presmodule->endbox();
1964                 $kiriwrite_presmodule->endform();
1966         }
1968         # Disconnect from the database server.
1970         $kiriwrite_dbmodule->disconnect();
1972         # Check if any databases with problems have appeared and if they
1973         # have, print out a message saying which databases have problems.
1975         if (@permissions_list){
1977                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
1978                 $kiriwrite_presmodule->addlinebreak();
1979                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
1980                 $kiriwrite_presmodule->addlinebreak();
1981  
1982                 foreach $database (@permissions_list){
1983  
1984                         $kiriwrite_presmodule->addlinebreak();
1985                         $kiriwrite_presmodule->addtext($database);
1986  
1987                 }
1988  
1989                 $kiriwrite_presmodule->addlinebreak();
1990                 $kiriwrite_presmodule->addlinebreak();
1992         }
1994         if (@error_list){
1996                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
1997                 $kiriwrite_presmodule->addlinebreak();
1998                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
1999                 $kiriwrite_presmodule->addlinebreak();
2001                 foreach $database (@error_list){
2003                         $kiriwrite_presmodule->addlinebreak();
2004                         $kiriwrite_presmodule->addtext($database);
2006                 }
2008         }
2010         return $kiriwrite_presmodule->grab();
2014 sub kiriwrite_compile_clean{
2015 #################################################################################
2016 # kiriwrite_compile_clean: Deletes the contents of the output directory.        #
2017 #                                                                               #
2018 # Usage:                                                                        #
2019 #                                                                               #
2020 # kiriwrite_compile_clean(confirm);                                             #
2021 #                                                                               #
2022 # confirm       Confirms the deletion of files from the output directory.       #
2023 #################################################################################
2025         # Get the values passed to the subroutine.
2027         my ($confirm) = @_;
2029         # Define some variables for later.
2031         my $file_permissions;
2032         my $output_directory_exists;
2033         my $output_directory_permissions;
2034         my $warning_message;
2036         # Check if the output directory exists.
2038         $output_directory_exists         = kiriwrite_fileexists($kiriwrite_config{"directory_data_output"});
2040         if ($output_directory_exists eq 1){
2042                 # The output directory does not exist so return
2043                 # an error.
2045                 kiriwrite_error("outputdirectorymissing");
2047         }
2049         # Check if the output directory has invalid
2050         # permissions set.
2052         $output_directory_permissions   = kiriwrite_filepermissions($kiriwrite_config{"directory_data_output"});
2054         if ($output_directory_permissions eq 1){
2056                 # The output directory has invalid permissions
2057                 # set, so return an error.
2059                 kiriwrite_error("outputdirectoryinvalidpermissions");
2061         }
2063         if ($confirm) {
2065                 if ($confirm eq 1){
2067                         # The action to clean the output directory has been
2068                         # confirmed.
2070                         # Remove the list of files and directories from the
2071                         # output directory.
2073                         $file_permissions = kiriwrite_compile_clean_helper($kiriwrite_config{"directory_data_output"}, 1);
2075                         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
2077                         if ($file_permissions eq 1){
2079                                 $kiriwrite_presmodule->addlinebreak();
2080                                 $kiriwrite_presmodule->addlinebreak();
2081                                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{somecontentnotremoved});
2082                                 $kiriwrite_presmodule->addlinebreak();
2083                                 $kiriwrite_presmodule->addlinebreak();
2085                         } else {
2087                                 $kiriwrite_presmodule->addlinebreak();
2088                                 $kiriwrite_presmodule->addlinebreak();
2089                                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{contentremoved});
2090                                 $kiriwrite_presmodule->addlinebreak();
2091                                 $kiriwrite_presmodule->addlinebreak();
2093                         }
2095                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist} });
2097                         return $kiriwrite_presmodule->grab();
2099                 } else {
2101                         # A value other than 1 is set for the confirm value
2102                         # (which it shouldn't be) so return an error.
2104                         kiriwrite_error("invalidvariable");
2106                 }
2108         }
2110         # Print out a form for cleaning the output directory.
2112         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectory}, { Style => "pageheader" });
2113         $kiriwrite_presmodule->addlinebreak();
2114         $kiriwrite_presmodule->addlinebreak();
2115         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
2116         $kiriwrite_presmodule->startbox();
2117         $kiriwrite_presmodule->addhiddendata("mode", "compile");
2118         $kiriwrite_presmodule->addhiddendata("action", "clean");
2119         $kiriwrite_presmodule->addhiddendata("confirm", 1);
2120         $kiriwrite_presmodule->addtext($kiriwrite_lang->{compile}->{cleanoutputdirectorymessage});
2121         $kiriwrite_presmodule->addlinebreak();
2122         $kiriwrite_presmodule->addlinebreak();
2123         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{compile}->{cleanoutputdirectorybutton});
2124         $kiriwrite_presmodule->addtext(" | ");
2125         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=compile", { Text => $kiriwrite_lang->{compile}->{returncompilelist}});
2126         $kiriwrite_presmodule->endbox();
2127         $kiriwrite_presmodule->endform();
2129         return $kiriwrite_presmodule->grab();
2133 sub kiriwrite_compile_clean_helper{
2134 #################################################################################
2135 # kiriwrite_compile_clean_helper: Helper for cleaning out the output directory. #
2136 # This command sometimes is called recursively (when a directory is found).     #
2137 #                                                                               #
2138 # Usage:                                                                        #
2139 #                                                                               #
2140 # kiriwrite_compile_clean_helper(directory, removedirectory, [permissions]);    #
2141 #                                                                               #
2142 # directory             Specifies the directory to remove files (and            #
2143 #                       sub-directories) from.                                  #
2144 # keepdirectory         Keeps the directory itself after all files have been    #
2145 #                       removed.                                                #
2146 # permissions           Used recursively for error checking.                    #
2147 #################################################################################
2149         # Get the values passed to the subroutine.
2151         my ($directory, $directory_keep, $permissions) = @_;
2153         # Check if the directory_keep is only one charater long.
2155         my $directory_file = "";
2156         my @directory_list;
2157         my $file_permissions = 0;
2158         my $debug = 0;
2160         # Check if the file permissions value is blank.
2162         if (!$permissions){
2164                 # The file permissions value is blank.
2166                 $permissions = 0;
2168         }
2170         # Open the directory specified, read the contents of
2171         # the directory and then close the directory.
2173         opendir(DIRECTORY, $directory);
2174         @directory_list = readdir(DIRECTORY);
2175         closedir(DIRECTORY);
2177         # Remove each file and directory.
2179         foreach $directory_file (@directory_list){
2181                 # Check if the filename is '.' or '..' and if it
2182                 # is skip those files.
2184                 if ($directory_file eq "." || $directory_file eq ".."){
2186                         # The filename is '.' or '..' so skip processing
2187                         # these files.
2189                 } else {
2191                         # Check if the permissions on the file or directory has
2192                         # valid permissions set.
2194                         $file_permissions = kiriwrite_filepermissions($directory . '/' . $directory_file, 1, 1);
2196                         if ($file_permissions eq 1){
2198                                 # The file or directory has invalid permissions set.
2200                                 $permissions = 1;
2201                                 next;
2203                         }
2205                         # Check if the filename is a directory.
2207                         if (-d $directory . '/' . $directory_file){
2209                                 # The filename is a directory so send the directory name
2210                                 # and this subroutine again (recursively).
2212                                 kiriwrite_compile_clean_helper($directory . '/' . $directory_file, 0, $permissions);
2214                         } else {
2216                                 # The file is not a directory but an actual file so
2217                                 # remove as normal (in terms of the Perl language).
2219                                 ($directory) = $directory =~ m/^(.*)$/g;
2220                                 ($directory_file) = $directory_file =~ m/^(.*)$/g;
2222                                 # Check if the directory is undefined and if it is then
2223                                 # set it to blank.
2225                                 if (!$directory){
2226                                         $directory = "";
2227                                 }
2229                                 if (!$directory_file){
2230                                         $directory_file = "";
2231                                 }
2233                                 unlink($directory . '/' . $directory_file);
2235                         }
2237                 }
2239         }
2241         # Check if the directory should be kept.
2243         if ($directory_keep eq 1){
2245                 # The directory_keep value is set as 1 so the directory
2246                 # specified should be kept.
2248         } elsif ($directory_keep eq 0) {
2250                 # The directory_keep value is set as 0 so remove the
2251                 # directory specified.
2253                 ($directory) = $directory =~ m/^(.*)$/g;
2254                 rmdir($directory);
2256         } else {
2258                 # A value other than 0 or 1 was specified so return
2259                 # an error,
2261                 kiriwrite_error('invalidvalue');
2263         }
2265         return $permissions;
2270 1; 
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy