Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Another minor alteration.
[kiriwrite/.git] / cgi-files / lib / database.lib
1 #################################################################################
2 # database.lib: Kiriwrite Database 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 ($form_data->{'action'}){
11         # An action has been specified, so find out what action has been specified.
13         my $http_query_action = $form_data->{'action'};
15         if ($http_query_action eq "edit"){
16                 # The edit action (which mean edit the settings for the selected database) has been specified,
17                 # get the database name and check if the action to edit an database has been confirmed.
19                 if ($form_data->{'database'}){
20                         # If there is a value in the database variable check if it is a valid database. Otherwise,
21                         # return an error.
23                         my $http_query_database = $form_data->{'database'};
24                 
25                         # Check if a value for confirm has been specified, if there is, check if it is the correct
26                         # value, otherwise return an error.
28                         if ($form_data->{'confirm'}){
29                                 # A value for confirm has been specified, find out what value it is. If the value is correct
30                                 # then edit the database settings, otherwise return an error.
32                                 my $http_query_confirm = $form_data->{'confirm'};
34                                 if ($http_query_confirm eq 1){
35                                         # Value is correct, collect the variables to pass onto the database variable.
37                                         # Get the variables from the HTTP query.
39                                         my $newdatabasename             = $form_data->{'databasename'};
40                                         my $newdatabasedescription      = $form_data->{'databasedescription'};
41                                         my $newdatabasefilename         = $form_data->{'databasefilename'};
42                                         my $databaseshortname           = $form_data->{'database'};
43                                         my $databasenotes               = $form_data->{'databasenotes'};
44                                         my $databasecategories          = $form_data->{'databasecategories'};
46                                         # Pass the variables to the database editing subroutine.
48                                         my $pagedata = kiriwrite_database_edit($databaseshortname, $newdatabasefilename, $newdatabasename, $newdatabasedescription, $databasenotes, $databasecategories, 1);
50                                         kiriwrite_output_header;
51                                         kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
52                                         exit;
54                                 } else {
55                                         # Value is incorrect, return and error.
56                                         kiriwrite_error("invalidvariable");
57                                 } 
59                         }
61                         # Display the form for editing an database.
62                         my $pagedata = kiriwrite_database_edit($http_query_database);
64                         kiriwrite_output_header;
65                         kiriwrite_output_page($kiriwrite_lang->{database}->{editdatabasetitle}, $pagedata, "database");
66                         exit;
68                 } else {
70                         # If there is no value in the database variable, then return an error.
71                         kiriwrite_error("invalidvariable");
73                 }
75         } elsif ($http_query_action eq "delete"){
77                 # Action equested is to delete a database, find out if the user has already confirmed deletion of the database
78                 # and if the deletion of the database has been confirmed, delete the database.
80                 if ($form_data->{'confirm'}){
82                         # User has confirmed to delete a database, pass the parameters to the kiriwrite_database_delete
83                         # subroutine.
85                         my $database_filename   = $form_data->{'database'};
86                         my $database_confirm    = $form_data->{'confirm'};
87                         my $pagedata = kiriwrite_database_delete($database_filename, $database_confirm);
89                         kiriwrite_output_header;
90                         kiriwrite_output_page($kiriwrite_lang->{database}->{deleteddatabase}, $pagedata, "database");
92                         exit;
94                 }
96                 # User has clicked on the delete link (thus hasn't confirmed the action to delete a database).
98                 my $database_filename = $form_data->{'database'};
99                 my $pagedata = kiriwrite_database_delete($database_filename);
101                 kiriwrite_output_header;
102                 kiriwrite_output_page($kiriwrite_lang->{database}->{deletedatabase}, $pagedata, "database");
104                 exit;
106         } elsif ($http_query_action eq "new"){
108                 # Action requested is to create a new database, find out if the user has already entered the information needed
109                 # to create a database and see if the user has confirmed the action, otherwise printout a form for adding a
110                 # database.
112                 my $http_query_confirm = $form_data->{'confirm'};
114                 # Check if the confirm value is correct.
116                 if ($http_query_confirm){
117                         if ($http_query_confirm eq 1){
119                                 # User has confirmed to create a database, pass the parameters to the 
120                                 # kiriwrite_database_add subroutine.
122                                 my $http_query_confirm = $form_data->{'confirm'};
124                                 my $database_name               = $form_data->{'databasename'};
125                                 my $database_description        = $form_data->{'databasedescription'};
126                                 my $database_filename           = $form_data->{'databasefilename'};
127                                 my $database_notes              = $form_data->{'databasenotes'};
128                                 my $database_categories         = $form_data->{'databasecategories'};
130                                 my $pagedata = kiriwrite_database_add($database_filename, $database_name, $database_description, $database_notes, $database_categories, $http_query_confirm);
132                                 kiriwrite_output_header;
133                                 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
134                                 exit;
136                         } else {
138                                 # The confirm value is something else other than 1 (which it shouldn't be), so
139                                 # return an error.
141                         }
142                 }
144                 # User has clicked on the 'Add Database' link.
146                 my $pagedata = kiriwrite_database_add();
148                 kiriwrite_output_header;
149                 kiriwrite_output_page($kiriwrite_lang->{database}->{adddatabase}, $pagedata, "database");
150                 exit;
152         } else {
153                 # Another option has been specified, so return an error.
155                 kiriwrite_error("invalidaction");
156         }
159 # No action has been specified, do the default action of displaying a list
160 # of databases.
162 my $pagedata = kiriwrite_database_list();
164 kiriwrite_output_header;                # Output the header to browser/console/stdout.
165 kiriwrite_output_page("", $pagedata, "database");       # Output the page to browser/console/stdout.
166 exit;                                   # End the script.
168 #################################################################################
169 # Begin list of relevant subroutines.                                           #
170 #################################################################################
172 sub kiriwrite_database_add{
173 #################################################################################
174 # kiriwrite_database_add: Creates a new database.                               #
175 #                                                                               #
176 # Usage:                                                                        #
177 #                                                                               #
178 # kiriwrite_database_add(filename, name, description, notes, categories,        #
179 #                               [confirm]);                                     #
180 #                                                                               #
181 # filename      Specifies the filename for the database.                        #
182 # name          Specifies a (friendly) name for the database.                   #
183 # description   Specifies a description for the database.                       #
184 # notes         Specifies the notes for the database.                           #
185 # categories    Specifies the categories for the database.                      #
186 # confirm       Confirms the action to create a database.                       #
187 #################################################################################
189         # Get the variables passed from the subroutine.
191         my ($database_filename, $database_name, $database_description, $database_notes, $database_categories, $database_confirm) = @_;
193         # Check if the confirm value is blank and if it is then
194         # set the confirm value to 0.
196         if (!$database_confirm){
198                 # The confirm value was blank so set the value to 0.
200                 $database_confirm = 0;
202         }
204         if ($database_confirm eq 1){
206                 # The action to create a new database is confirmed.
208                 # Validate the database name and database descriptions.
210                 my $database_name_check_utf8            = kiriwrite_variablecheck($database_name, "utf8", 0, 0);
211                 my $database_description_check_utf8     = kiriwrite_variablecheck($database_description, "utf8", 0, 0);
212                 my $database_notes_check_utf8           = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
213                 my $database_categories_check_utf8      = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
215                 # Convert the UTF8 strings before checking the length of the strings.
217                 $database_name                  = kiriwrite_utf8convert($database_name);
218                 $database_description           = kiriwrite_utf8convert($database_description);
219                 $database_notes                 = kiriwrite_utf8convert($database_notes);
220                 $database_categories            = kiriwrite_utf8convert($database_categories);
222                 my $database_name_check_blank           = kiriwrite_variablecheck($database_name, "blank", 0, 1);
223                 my $database_name_check_length          = kiriwrite_variablecheck($database_name, "maxlength", 256, 1);
224                 my $database_description_check_length   = kiriwrite_variablecheck($database_description, "maxlength", 512, 1);
225                 my $database_filename_check_length      = kiriwrite_variablecheck($database_filename, "maxlength", 32, 1);
226                 my $database_categories_check_length    = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
228                 # Check if values returned contains any values that would
229                 # result in a specific error message being returned.
231                 if ($database_name_check_length eq 1){
233                         # The length of the database name is too long, so return an error.
234                         kiriwrite_error("databasenametoolong");
236                 }
238                 if ($database_description_check_length eq 1){
240                         # The database description length is too long, so return an error.
241                         kiriwrite_error("databasedescriptiontoolong");
243                 }
245                 if ($database_name_check_blank eq 1){
247                         # The database name is blank, so return an error.
248                         kiriwrite_error("databasenameblank");
250                 }
252                 if ($database_filename_check_length eq 1){
254                         # The database filename is to long, so return an error.
255                         kiriwrite_error("databasefilenametoolong");
257                 }
259                 if ($database_categories_check_length eq 1){
261                         # The database categories is too long, so return an error.
262                         kiriwrite_error("databasecategoriestoolong");
264                 }
266                 # Check if the database filename is blank and if it is then
267                 # generate a filename.
269                 if ($database_filename eq ""){
271                         # Filename is blank so generate a file name from
272                         # the database name.
274                         $database_filename = kiriwrite_processfilename($database_name);
276                 } else {
278                         # Filename is not blank so don't generate a filename.
280                 }
282                 kiriwrite_variablecheck($database_filename, "filename", "", 0);
283                 kiriwrite_variablecheck($database_filename, "maxlength", 32, 0);
285                 # Connect to the database server.
287                 $kiriwrite_dbmodule->connect();
289                 # Check if any errors occured while connecting to the database server.
291                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
293                         # A database connection error has occured so return
294                         # an error.
296                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
298                 }
300                 my $database_name_final = $database_name;
302                 # Create the database.
304                 $kiriwrite_dbmodule->adddatabase({ DatabaseFilename => $database_filename, DatabaseName => $database_name, DatabaseDescription => $database_description, DatabaseNotes => $database_notes, DatabaseCategories => $database_categories, VersionMajor => $kiriwrite_version{"major"}, VersionMinor => $kiriwrite_version{"minor"}, VersionRevision => $kiriwrite_version{"revision"} });
306                 # Check if any errors have occured.
308                 if ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
310                         # A database with the filename given already exists, so
311                         # return an error.
313                         kiriwrite_error("fileexists");
315                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
317                         # A database error has occured so return an error with
318                         # the extended error information.
320                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
322                 }
324                 # Disconnect from the database server.
326                 $kiriwrite_dbmodule->disconnect();
328                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
329                 $kiriwrite_presmodule->addlinebreak();
330                 $kiriwrite_presmodule->addlinebreak();
331                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseadded} , $database_name_final));
332                 $kiriwrite_presmodule->addlinebreak();
333                 $kiriwrite_presmodule->addlinebreak();
334                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
336                 return $kiriwrite_presmodule->grab();
338         }
340         # There is confirm value is not 1, so write a form for creating a database to
341         # store pages in.
343         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{adddatabase}, { Style => "pageheader" });
344         $kiriwrite_presmodule->addlinebreak();
345         $kiriwrite_presmodule->addlinebreak();
346         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
347         $kiriwrite_presmodule->startbox();      
348         $kiriwrite_presmodule->addhiddendata("mode", "db");
349         $kiriwrite_presmodule->addhiddendata("action", "new");
350         $kiriwrite_presmodule->addhiddendata("confirm", "1");
351         $kiriwrite_presmodule->endbox();
352         $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
354         $kiriwrite_presmodule->startheader();
355         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{setting}, { Style => "tablecellheader"});
356         $kiriwrite_presmodule->addheader($kiriwrite_lang->{common}->{value}, { Style => "tablecellheader"});
357         $kiriwrite_presmodule->endheader();
359         $kiriwrite_presmodule->startrow();
360         $kiriwrite_presmodule->addcell("tablecell1");
361         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
362         $kiriwrite_presmodule->endcell();
363         $kiriwrite_presmodule->addcell("tablecell2");
364         $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256 });
365         $kiriwrite_presmodule->endcell();
366         $kiriwrite_presmodule->endrow();
368         $kiriwrite_presmodule->startrow();
369         $kiriwrite_presmodule->addcell("tablecell1");
370         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
371         $kiriwrite_presmodule->endcell();
372         $kiriwrite_presmodule->addcell("tablecell2");
373         $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512 });
374         $kiriwrite_presmodule->endcell();
375         $kiriwrite_presmodule->endrow();
377         $kiriwrite_presmodule->startrow();
378         $kiriwrite_presmodule->addcell("tablecell1");
379         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
380         $kiriwrite_presmodule->endcell();
381         $kiriwrite_presmodule->addcell("tablecell2");
382         $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512 });
383         $kiriwrite_presmodule->endcell();
384         $kiriwrite_presmodule->endrow();
386         $kiriwrite_presmodule->startrow();
387         $kiriwrite_presmodule->addcell("tablecell1");
388         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
389         $kiriwrite_presmodule->endcell();
390         $kiriwrite_presmodule->addcell("tablecell2");
391         $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => $kiriwrite_config{"display_textareacols"}, Rows => $kiriwrite_config{"display_textarearows"}, WordWrap => 0 });
392         $kiriwrite_presmodule->endcell();
393         $kiriwrite_presmodule->endrow();
395         $kiriwrite_presmodule->startrow();
396         $kiriwrite_presmodule->addcell("tablecell1");
397         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
398         $kiriwrite_presmodule->endcell();
399         $kiriwrite_presmodule->addcell("tablecell2");
400         $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32 });
401         $kiriwrite_presmodule->startlist();
402         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabaseautogenerate});
403         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasenoextensions});
404         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacterlength});
405         $kiriwrite_presmodule->additem($kiriwrite_lang->{database}->{adddatabasecharacters});
406         $kiriwrite_presmodule->endlist();
407         $kiriwrite_presmodule->endcell();
408         $kiriwrite_presmodule->endrow();
410         $kiriwrite_presmodule->endtable();
411         $kiriwrite_presmodule->startbox();
412         $kiriwrite_presmodule->addlinebreak();
413         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{adddatabasebutton});
414         $kiriwrite_presmodule->addtext("|");
415         $kiriwrite_presmodule->addreset($kiriwrite_lang->{database}->{clearvaluesbutton});
416         $kiriwrite_presmodule->addtext("| ");
417         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
418         $kiriwrite_presmodule->endbox();
419         $kiriwrite_presmodule->endform();
421         # Exit the subroutine taking the data in the pagadata variable with it.
423         return $kiriwrite_presmodule->grab();
427 sub kiriwrite_database_edit{
428 #################################################################################
429 # kiriwrite_database_edit: Edits an database.                                   #
430 #                                                                               #
431 # Usage:                                                                        #
432 #                                                                               #
433 # kiriwrite_database_edit(filename, newfilename, newname, newdescription,       #
434 #                               notes, categories, [confirm]);                  #
435 #                                                                               #
436 # filename              Specifies the filename of the database.                 #
437 # newfilename           Specifies the new filename of the database.             #
438 # newname               Specifies the new name of the database.                 #
439 # newdescription        Specifies the new description of the database.          #
440 # notes                 Specifies the new notes of the database.                #
441 # categories            Specifies the new categories of the database.           #
442 # confirm               Confirms the action to edit a database.                 #
443 #################################################################################
445         # First, get all the variables passed to the subroutine.
447         my ($database_shortname, $database_newfilename, $database_newname, $database_newdescription, $database_notes, $database_categories, $database_confirm) = @_;
449         # Check if the database confirm value is blank and if it is
450         # set the confirm value to 0.
452         if (!$database_confirm){
454                 $database_confirm = 0;
456         }
458         # Check if the database filename given is valid and return an error
459         # if it isn't.
461         kiriwrite_variablecheck($database_shortname, "filename", "", 0);
463         # Check if the confirm variable has a value in it, if it has, check again to make sure it really is the correct value (Perl moans
464         # if $database_confirm was used directly).
466         if ($database_confirm eq 1){
468                 # Check if the new data passes the validation tests below. First, check the length of the variables.
470                 my $database_name_check_utf8            = kiriwrite_variablecheck($database_newname, "utf8", 0, 0);
471                 my $database_description_check_utf8     = kiriwrite_variablecheck($database_newdescription, "utf8", 0, 0);
472                 my $database_notes_check_utf8           = kiriwrite_variablecheck($database_notes, "utf8", 0, 0);
473                 my $database_categories_check_utf8      = kiriwrite_variablecheck($database_categories, "utf8", 0, 0);
475                 # Convert the UTF8 strings to make sure their length is accurate.
477                 $database_newname               = kiriwrite_utf8convert($database_newname);
478                 $database_newdescription        = kiriwrite_utf8convert($database_newdescription);
479                 $database_notes                 = kiriwrite_utf8convert($database_notes);
480                 $database_categories            = kiriwrite_utf8convert($database_categories);
482                 # Preform the following tests.
484                 my $database_filename_check_length      = kiriwrite_variablecheck($database_newfilename, "maxlength", 32, 1);
485                 my $database_filename_letnum            = kiriwrite_variablecheck($database_newfilename, "filename", 0, 0);
486                 my $database_name_check_length          = kiriwrite_variablecheck($database_newname, "maxlength", 256, 1);
487                 my $database_description_check_length   = kiriwrite_variablecheck($database_newdescription, "maxlength", 512, 1);
488                 my $database_categories_check_length    = kiriwrite_variablecheck($database_categories, "maxlength", 512, 1);
489                 my $database_name_check_blank           = kiriwrite_variablecheck($database_newname, "blank", 0, 1);
491                 # Check if the data is valid and return a specific error if it doesn't.
493                 if ($database_name_check_length eq 1){
495                         # The length of the database name is too long, so return an error.
496                         kiriwrite_error("databasenametoolong");
498                 }
500                 if ($database_description_check_length eq 1){
502                         # The database description length is too long, so return an error.
503                         kiriwrite_error("databasedescriptiontoolong");
505                 }
507                 if ($database_name_check_blank eq 1){
509                         # The database name is blank, so return an error.
510                         kiriwrite_error("databasenameblank");
512                 }
514                 if ($database_filename_check_length eq 1){
516                         # The database filename is too long, so return an error.
517                         kiriwrite_error("databasefilenametoolong");
519                 }
521                 if ($database_categories_check_length eq 1){
523                         # The database categories is too long, so return an error.
524                         kiriwrite_error("databasecategoriestoolong");
526                 }
528                 # Connect to the database server.
530                 $kiriwrite_dbmodule->connect();
532                 # Check if any errors occured while connecting to the database server.
534                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
536                         # A database connection error has occured so return
537                         # an error.
539                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
541                 }
543                 # Get the database.
545                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
547                 # Check if any errors had occured while selecting the database.
549                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
551                         # The database does not exist, so return an error.
553                         kiriwrite_error("databasemissingfile");
555                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
557                         # The database has invalid permissions set, so return
558                         # an error.
560                         kiriwrite_error("databaseinvalidpermissions");
562                 }
564                 # FIX THIS!! >O
566                 $kiriwrite_dbmodule->editdatabase({ DatabaseNewFilename => $database_newfilename, DatabaseName => $database_newname , DatabaseDescription => $database_newdescription , DatabaseNotes => $database_notes, DatabaseCategories => $database_categories });
568                 # Check if any errors had occured while using the database.
570                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
572                         # The database does not exist, so return an error.
574                         kiriwrite_error("databasemissingfile");
576                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
578                         # The database has invalid permissions set, so return
579                         # an error.
581                         kiriwrite_error("databaseinvalidpermissions");
583                 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
585                         # The database directory has invalid permissions set, so
586                         # return an error.
588                         kiriwrite_error("datadirectoryinvalidpermissions");
590                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
592                         # A database already exists with the new filename, so
593                         # return an error.
595                         kiriwrite_error("databasealreadyexists");
597                 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
599                         # A database error has occured so return an error with
600                         # the extended error information.
602                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
604                 }
606                 # Disconnect from the server.
608                 $kiriwrite_dbmodule->disconnect();
610                 # Write out a message saying that the database has been updated.
612                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{editeddatabase}, { Style => "pageheader" } );
613                 $kiriwrite_presmodule->addlinebreak();
614                 $kiriwrite_presmodule->addlinebreak();
615                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{databaseupdated}, $database_newname));
616                 $kiriwrite_presmodule->addlinebreak();
617                 $kiriwrite_presmodule->addlinebreak();
618                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
620                 return $kiriwrite_presmodule->grab();
622         } else {
624                 my (%database_info);
626                 # Check if the database filename given is valid and return an error
627                 # if it isn't.
629                 # Connect to the database server.
631                 $kiriwrite_dbmodule->connect();
633                 # Check if any errors occured while connecting to the database server.
635                 if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
637                         # A database connection error has occured so return
638                         # an error.
640                         kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
642                 }
644                 # Select the database.
646                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_shortname });
648                 # Check if any errors had occured while setting the database.
650                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
652                         # The database does not exist, so return an error.
654                         kiriwrite_error("databasemissingfile");
656                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet"){
658                         # The database has invalid permissions set, so return
659                         # an error.
661                         kiriwrite_error("databaseinvalidpermissions");
663                 }
665                 # Get the database information.
667                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
669                 # Check if any errors had occured while getting the database
670                 # information.
672                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
674                         # A database error has occured so return an error and
675                         # also the extended error information.
677                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
679                 }
681                 # Get the values needed from the kiriwrite_database_info table.
683                 my $database_oldname            = $database_info{"DatabaseName"};
684                 my $database_olddescription     = $database_info{"Description"};
685                 my $database_notes              = $database_info{"Notes"};
686                 my $database_categories         = $database_info{"Categories"};
688                 # Disconnect from the database server.
690                 $kiriwrite_dbmodule->disconnect();
692                 # Print out the form for editing a database's settings.
694                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{editdatabase}, $database_oldname), { Style => "pageheader" });
695                 $kiriwrite_presmodule->addlinebreak();
696                 $kiriwrite_presmodule->addlinebreak();
697                 $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
698                 $kiriwrite_presmodule->startbox();
699                 $kiriwrite_presmodule->addhiddendata("mode", "db");
700                 $kiriwrite_presmodule->addhiddendata("action", "edit");
701                 $kiriwrite_presmodule->addhiddendata("database", $database_shortname);
702                 $kiriwrite_presmodule->addhiddendata("confirm", "1");
703                 $kiriwrite_presmodule->endbox();
705                 $kiriwrite_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
706                 $kiriwrite_presmodule->startheader();
707                 $kiriwrite_presmodule->addheader("Setting", { Style => "tablecellheader" });
708                 $kiriwrite_presmodule->addheader("Value", { Style => "tablecellheader" });
709                 $kiriwrite_presmodule->endheader();
711                 $kiriwrite_presmodule->startrow();
712                 $kiriwrite_presmodule->addcell("tablecell1");
713                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasename});
714                 $kiriwrite_presmodule->endcell();
715                 $kiriwrite_presmodule->addcell("tablecell2");
716                 $kiriwrite_presmodule->addinputbox("databasename", { Size => 64, MaxLength => 256, Value => $database_oldname } );
717                 $kiriwrite_presmodule->endcell();
718                 $kiriwrite_presmodule->endrow();
720                 $kiriwrite_presmodule->startrow();
721                 $kiriwrite_presmodule->addcell("tablecell1");
722                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasedescription});
723                 $kiriwrite_presmodule->endcell();
724                 $kiriwrite_presmodule->addcell("tablecell2");
725                 $kiriwrite_presmodule->addinputbox("databasedescription", { Size => 64, MaxLength => 512, Value => $database_olddescription } );
726                 $kiriwrite_presmodule->endcell();
727                 $kiriwrite_presmodule->endrow();
729                 $kiriwrite_presmodule->startrow();
730                 $kiriwrite_presmodule->addcell("tablecell1");
731                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasecategories});
732                 $kiriwrite_presmodule->endcell();
733                 $kiriwrite_presmodule->addcell("tablecell2");
734                 $kiriwrite_presmodule->addinputbox("databasecategories", { Size => 64, MaxLength => 512, Value => $database_categories } );
735                 $kiriwrite_presmodule->endcell();
736                 $kiriwrite_presmodule->endrow();
738                 $kiriwrite_presmodule->startrow();
739                 $kiriwrite_presmodule->addcell("tablecell1");
740                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasenotes});
741                 $kiriwrite_presmodule->endcell();
742                 $kiriwrite_presmodule->addcell("tablecell2");
743                 $kiriwrite_presmodule->addtextbox("databasenotes", { Columns => $kiriwrite_config{"display_textareacols"}, Rows => $kiriwrite_config{"display_textarearows"}, Value => $database_notes } );
744                 $kiriwrite_presmodule->endcell();
745                 $kiriwrite_presmodule->endrow();
747                 $kiriwrite_presmodule->startrow();
748                 $kiriwrite_presmodule->addcell("tablecell1");
749                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databasefilename});
750                 $kiriwrite_presmodule->endcell();
751                 $kiriwrite_presmodule->addcell("tablecell2");
752                 $kiriwrite_presmodule->addinputbox("databasefilename", { Size => 32, MaxLength => 32, Value => $database_shortname } );
753                 $kiriwrite_presmodule->endcell();
754                 $kiriwrite_presmodule->endrow();
756                 $kiriwrite_presmodule->endtable();
758                 $kiriwrite_presmodule->startbox();
759                 $kiriwrite_presmodule->addlinebreak();
760                 $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{editdatabasebutton});
761                 $kiriwrite_presmodule->addtext(" | ");
762                 $kiriwrite_presmodule->addreset($kiriwrite_lang->{common}->{restorecurrent});
763                 $kiriwrite_presmodule->addtext(" | ");
764                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} });
765                 $kiriwrite_presmodule->endbox();
766                 $kiriwrite_presmodule->endform();
768                 return $kiriwrite_presmodule->grab();
770         }
772         # The interpreter should not be here. So return an error saying invalid variable.
774         kiriwrite_error("invalidvariable");
778 sub kiriwrite_database_delete{
779 #################################################################################
780 # kiriwrite_database_delete: Deletes an database.                               #
781 #                                                                               #
782 # Usage:                                                                        #
783 #                                                                               #
784 # kiriwrite_database_delete(filename, [confirm]);                               #
785 #                                                                               #
786 # filename      Specifies the filename for the database to be deleted.          #
787 # confirm       Confirms the action to delete a database.                       #
788 #################################################################################
790         my ($database_filename, $database_confirm) = @_;
792         # Check if the confirm value is blank and if it is then set the
793         # confirm value to 0.
795         if (!$database_confirm){
797                 $database_confirm = 0;
799         }
801         # Connect to the database server.
803         $kiriwrite_dbmodule->connect();
805         # Check if any errors occured while connecting to the database server.
807         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
809                 # A database connection error has occured so return
810                 # an error.
812                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
814         }
816         # Check if the database filename given is valid and return an error
817         # if it isn't.
819         kiriwrite_variablecheck($database_filename, "filename", "", 0);
821         # Check if the request to delete a database has been confirmed. If it has, 
822         # then delete the database itself.
824         if ($database_confirm eq 1){
825                 # There is a value in the confirm variable of the HTTP query.
827                 # Select the database to delete and get the database name.
829                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
831                 # Check if any error occured while selecting the database.
833                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
835                         # The database does not exist so return an error.
837                         kiriwrite_error("databasemissingfile");
839                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
841                         # The database has invalid permissions set so return
842                         # an error.
844                         kiriwrite_error("databaseinvalidpermissions");
846                 }
848                 my %database_info       = $kiriwrite_dbmodule->getdatabaseinfo();
850                 # Check if any errors have occured while getting the database
851                 # name.
853                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
855                         # A database error has occured so return an error with
856                         # the extended error information.
858                         kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
860                 }
862                 my $database_name = $database_info{"DatabaseName"};
864                 # Delete the selected database.
866                 $kiriwrite_dbmodule->deletedatabase({ DatabaseName => $database_filename });
868                 # Check if any error occured while deleting the database.
870                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
872                         # The database does not exist so return an error.
874                         kiriwrite_error("databasemissingfile");
876                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
878                         # The database has invalid permissions set so return
879                         # an error.
881                         kiriwrite_error("databaseinvalidpermissions");
883                 }
885                 # Disconnect from the database server.
887                 $kiriwrite_dbmodule->disconnect();
889                 # Write a message saying that the database has been deleted.
891                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deleteddatabase}, { Style => "pageheader" });
892                 $kiriwrite_presmodule->addlinebreak();
893                 $kiriwrite_presmodule->addlinebreak();
894                 $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deleteddatabasemessage}, $database_name));
895                 $kiriwrite_presmodule->addlinebreak();
896                 $kiriwrite_presmodule->addlinebreak();
897                 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{databaselistreturnlink} }); 
899                 return $kiriwrite_presmodule->grab();
901         }
903         # The action has not been confirmed, so write out a form asking the 
904         # user to confirm.
906         # Get the database name.
908         $kiriwrite_dbmodule->selectdb({ DatabaseName => $database_filename });
910         # Check if any error occured while selecting the database.
912         if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
914                 # The database does not exist so return an error.
916                 kiriwrite_error("databasemissingfile");
918         } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
920                 # The database has invalid permissions set so return
921                 # an error.
923                 kiriwrite_error("databaseinvalidpermissions");
926         }
928         # Check if any errors have occured.
930         my %database_info       = $kiriwrite_dbmodule->getdatabaseinfo();
932         if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
934                 # A database error has occured so return an error with
935                 # the extended error information.
937                 kiriwrite_error("databaseerror", $kiriwrite_dbmodule->geterror(1));
939         }
941         my $database_name = $database_info{"DatabaseName"};
943         # Disconnect from the database server.
945         $kiriwrite_dbmodule->disconnect();
947         # Write out the form to ask the user to confirm the deletion of the 
948         # selected database.
950         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{deletedatabase}, { Style => "pageheader" });
951         $kiriwrite_presmodule->startform($kiriwrite_env{"script_filename"}, "POST");
952         $kiriwrite_presmodule->startbox();
953         $kiriwrite_presmodule->addhiddendata("mode", "db");
954         $kiriwrite_presmodule->addhiddendata("action", "delete");
955         $kiriwrite_presmodule->addhiddendata("database", $database_filename);
956         $kiriwrite_presmodule->addhiddendata("confirm", "1");
957         $kiriwrite_presmodule->addlinebreak();
958         $kiriwrite_presmodule->addtext(kiriwrite_language($kiriwrite_lang->{database}->{deletedatabasemessage}, $database_name));
959         $kiriwrite_presmodule->addlinebreak();
960         $kiriwrite_presmodule->addlinebreak();
961         $kiriwrite_presmodule->addsubmit($kiriwrite_lang->{database}->{deletedatabasebutton});
962         $kiriwrite_presmodule->addtext(" | ");
963         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=db", { Text => $kiriwrite_lang->{database}->{deletedatabasereturn} });
964         $kiriwrite_presmodule->endbox();
965         $kiriwrite_presmodule->endform();
967         return $kiriwrite_presmodule->grab();
971 sub kiriwrite_database_list{
972 #################################################################################
973 # kiriwrite_database_list: Lists the databases available.                       #
974 #                                                                               #
975 # Usage:                                                                        #
976 #                                                                               #
977 # kiriwrite_database_list();                                                    #
978 #################################################################################
980         # Connect to the database server.
982         $kiriwrite_dbmodule->connect();
984         # Check if any errors occured while connecting to the database server.
986         if ($kiriwrite_dbmodule->geterror eq "DatabaseConnectionError"){
988                 # A database connection error has occured so return
989                 # an error.
991                 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
993         }
995         # Get the list of available databases and process any errors that
996         # might have occured.
998         my @database_list = $kiriwrite_dbmodule->getdblist();
1000         if ($kiriwrite_dbmodule->geterror eq "DataDirMissing"){
1002                 # The database directory is missing so return an error.
1004                 kiriwrite_error("datadirectorymissing");
1006         } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
1008                 # The database directory has invalid permissions set so return
1009                 # an error.
1011                 kiriwrite_error("datadirectoryinvalidpermissions");
1013         }
1015         # Declare the following variables that are going to be used before using 
1016         # the foreach function.
1018         my ($database_info, %database_info);
1019         my @error_list;
1020         my @permissions_list;
1021         my $database_count = 0;
1022         my $database_filename = "";
1023         my $database_filename_friendly = "";
1024         my $database_filename_length = 0;
1025         my $database_name = "";
1026         my $database_description = "";
1027         my $database_permissions = "";
1028         my $nodescription = 0;
1029         my $noname = 0;
1030         my $data_file = "";
1031         my $table_style = 0;
1032         my $table_style_name = "";
1034         # Begin creating the table for the list of databases.
1036         $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
1037         $kiriwrite_presmodule->addlinebreak();
1038         $kiriwrite_presmodule->addlinebreak();
1039         $kiriwrite_presmodule->starttable("", { CellPadding => "5", CellSpacing => "0" });
1040         $kiriwrite_presmodule->startheader();
1041         $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasename}, { Style => "tablecellheader" });
1042         $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databasedescription}, { Style => "tablecellheader" });
1043         $kiriwrite_presmodule->addheader($kiriwrite_lang->{database}->{databaseoptions}, { Style => "tablecellheader" });
1044         $kiriwrite_presmodule->endheader();
1046         foreach $data_file (@database_list){
1048                 # Select the database.
1050                 $kiriwrite_dbmodule->selectdb({ DatabaseName => $data_file });
1052                 # Check if any error occured while selecting the database.
1054                 if ($kiriwrite_dbmodule->geterror eq "DoesNotExist"){
1056                         # The database does not exist, so process the next
1057                         # database.
1059                         next;
1061                 } elsif ($kiriwrite_dbmodule->geterror eq "InvalidPermissionsSet") {
1063                         # The database has invalid permissions settings, so
1064                         # add the database to the list of databases with
1065                         # invalid permissions set and process the next
1066                         # database.
1068                         push(@permissions_list, $data_file);
1069                         next;
1071                 }
1073                 # Get information about the database.
1075                 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1077                 # Check if any error occured while getting information from the
1078                 # database.
1080                 if ($kiriwrite_dbmodule->geterror eq "DatabaseError"){
1082                         # A database error has occured, add the database and specific
1083                         # error message to the list of databases with errors and
1084                         # process the next database.
1086                         push(@error_list, $data_file . ": " . $kiriwrite_dbmodule->geterror(1));
1087                         next;
1089                 }
1091                 $database_name          = $database_info{"DatabaseName"};
1092                 $database_description   = $database_info{"Description"};
1094                 # Check the style to be used with.
1096                 if ($table_style eq 0){
1098                         # Use the first style and set the style value
1099                         # to use the next style, the next time the
1100                         # if statement is checked.
1102                         $table_style_name = "tablecell1";
1103                         $table_style = 1;
1104                 } else {
1106                         # Use the second style and set the style
1107                         # value to use the first style, the next
1108                         # time if statement is checked.
1110                         $table_style_name = "tablecell2";
1111                         $table_style = 0;
1112                 }
1114                 # Create a friendly name for the database.
1116                 $database_filename_friendly = $data_file;
1118                 # Append the database information to the table.
1120                 $kiriwrite_presmodule->startrow();
1121                 $kiriwrite_presmodule->addcell($table_style_name);
1123                 if (!$database_name){
1124                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{noname});
1125                 } else {
1126                         $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_filename_friendly, { Text => $database_name });
1127                 }
1129                 $kiriwrite_presmodule->endcell();
1130                 $kiriwrite_presmodule->addcell($table_style_name);
1132                 if (!$database_description){
1133                         $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
1134                 } else {
1135                         $kiriwrite_presmodule->addtext($database_description);
1136                 }
1138                 $kiriwrite_presmodule->endcell();
1139                 $kiriwrite_presmodule->addcell($table_style_name);
1140                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=edit&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{edit} });
1141                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=compile&action=compile&type=single&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{compile} });
1142                 $kiriwrite_presmodule->addlink($kiriwrite_env{'script_filename'} . "?mode=db&action=delete&database=" . $database_filename_friendly, { Text => $kiriwrite_lang->{options}->{delete} });
1143                 $kiriwrite_presmodule->endrow();
1145                 $database_count++;
1146                 $nodescription = 0;
1147                 $noname = 0;
1149         }
1151         $kiriwrite_presmodule->endtable();
1153         # Disconnect from the database server.
1155         $kiriwrite_dbmodule->disconnect();
1157         # Check if there are no valid databases are if there is no
1158         # valid databases then write a message saying that no
1159         # valid databases are available.
1161         if ($database_count eq 0){
1163                 $kiriwrite_presmodule->clear();
1164                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaselist}, { Style => "pageheader" });
1165                 $kiriwrite_presmodule->addlinebreak();
1166                 $kiriwrite_presmodule->addlinebreak();
1167                 $kiriwrite_presmodule->startbox("errorbox");
1168                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{nodatabasesavailable});
1169                 $kiriwrite_presmodule->endbox();
1171         }
1173         # Check if any databases with problems have appeared and if they
1174         # have, print out a message saying which databases have problems.
1176         if (@permissions_list){
1178                 $kiriwrite_presmodule->addlinebreak();
1179                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissions}, { Style => "smallpageheader" });
1180                 $kiriwrite_presmodule->addlinebreak();
1181                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseinvalidpermissionstext});
1182                 $kiriwrite_presmodule->addlinebreak();
1184                 foreach $data_file (@permissions_list){
1185                         $kiriwrite_presmodule->addlinebreak();
1186                         $kiriwrite_presmodule->addtext($data_file);
1187                 }
1189                 $kiriwrite_presmodule->addlinebreak();
1191         }
1193         if (@error_list){
1195                 $kiriwrite_presmodule->addlinebreak();
1196                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrors}, { Style => "smallpageheader" });
1197                 $kiriwrite_presmodule->addlinebreak();
1198                 $kiriwrite_presmodule->addtext($kiriwrite_lang->{database}->{databaseerrorstext});
1199                 $kiriwrite_presmodule->addlinebreak();
1201                 foreach $data_file (@error_list){
1202                         $kiriwrite_presmodule->addlinebreak();
1203                         $kiriwrite_presmodule->addtext($data_file);
1204                 }
1206                 $kiriwrite_presmodule->addlinebreak();
1208         }
1210         return $kiriwrite_presmodule->grab();   # Return to the main part of the script with the processed information.
1212
1214 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