1 #################################################################################
2 # database.lib: Kiriwrite Database Library #
4 # This library is under the same license as the main Kiriwrite script. #
5 #################################################################################
7 # This section of the file is for when the library is called from the main
10 if ($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,
23 my $http_query_database = $form_data->{'database'};
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");
55 # Value is incorrect, return and error.
56 kiriwrite_error("invalidvariable");
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");
70 # If there is no value in the database variable, then return an error.
71 kiriwrite_error("invalidvariable");
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
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");
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");
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
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");
138 # The confirm value is something else other than 1 (which it shouldn't be), so
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");
153 # Another option has been specified, so return an error.
155 kiriwrite_error("invalidaction");
159 # No action has been specified, do the default action of displaying a list
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. #
178 # kiriwrite_database_add(filename, name, description, notes, categories, #
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;
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");
238 if ($database_description_check_length eq 1){
240 # The database description length is too long, so return an error.
241 kiriwrite_error("databasedescriptiontoolong");
245 if ($database_name_check_blank eq 1){
247 # The database name is blank, so return an error.
248 kiriwrite_error("databasenameblank");
252 if ($database_filename_check_length eq 1){
254 # The database filename is to long, so return an error.
255 kiriwrite_error("databasefilenametoolong");
259 if ($database_categories_check_length eq 1){
261 # The database categories is too long, so return an error.
262 kiriwrite_error("databasecategoriestoolong");
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
274 $database_filename = kiriwrite_processfilename($database_name);
278 # Filename is not blank so don't generate a filename.
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
296 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
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
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));
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();
340 # There is confirm value is not 1, so write a form for creating a database to
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. #
433 # kiriwrite_database_edit(filename, newfilename, newname, newdescription, #
434 # notes, categories, [confirm]); #
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;
458 # Check if the database filename given is valid and return an error
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");
500 if ($database_description_check_length eq 1){
502 # The database description length is too long, so return an error.
503 kiriwrite_error("databasedescriptiontoolong");
507 if ($database_name_check_blank eq 1){
509 # The database name is blank, so return an error.
510 kiriwrite_error("databasenameblank");
514 if ($database_filename_check_length eq 1){
516 # The database filename is too long, so return an error.
517 kiriwrite_error("databasefilenametoolong");
521 if ($database_categories_check_length eq 1){
523 # The database categories is too long, so return an error.
524 kiriwrite_error("databasecategoriestoolong");
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
539 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
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
560 kiriwrite_error("databaseinvalidpermissions");
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
581 kiriwrite_error("databaseinvalidpermissions");
583 } elsif ($kiriwrite_dbmodule->geterror eq "DataDirInvalidPermissions"){
585 # The database directory has invalid permissions set, so
588 kiriwrite_error("datadirectoryinvalidpermissions");
590 } elsif ($kiriwrite_dbmodule->geterror eq "DatabaseExists"){
592 # A database already exists with the new filename, so
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));
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();
626 # Check if the database filename given is valid and return an error
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
640 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
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
661 kiriwrite_error("databaseinvalidpermissions");
665 # Get the database information.
667 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
669 # Check if any errors had occured while getting the database
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));
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();
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. #
784 # kiriwrite_database_delete(filename, [confirm]); #
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;
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
812 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
816 # Check if the database filename given is valid and return an error
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
844 kiriwrite_error("databaseinvalidpermissions");
848 my %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
850 # Check if any errors have occured while getting the database
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));
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
881 kiriwrite_error("databaseinvalidpermissions");
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();
903 # The action has not been confirmed, so write out a form asking the
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
923 kiriwrite_error("databaseinvalidpermissions");
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));
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
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. #
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
991 kiriwrite_error("databaseconnectionerror", $kiriwrite_dbmodule->geterror(1));
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
1011 kiriwrite_error("datadirectoryinvalidpermissions");
1015 # Declare the following variables that are going to be used before using
1016 # the foreach function.
1018 my ($database_info, %database_info);
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;
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
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
1068 push(@permissions_list, $data_file);
1073 # Get information about the database.
1075 %database_info = $kiriwrite_dbmodule->getdatabaseinfo();
1077 # Check if any error occured while getting information from the
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));
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";
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";
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});
1126 $kiriwrite_presmodule->addlink($kiriwrite_env{"script_filename"} . "?mode=page&action=view&database=" . $database_filename_friendly, { Text => $database_name });
1129 $kiriwrite_presmodule->endcell();
1130 $kiriwrite_presmodule->addcell($table_style_name);
1132 if (!$database_description){
1133 $kiriwrite_presmodule->additalictext($kiriwrite_lang->{blank}->{nodescription});
1135 $kiriwrite_presmodule->addtext($database_description);
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();
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();
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);
1189 $kiriwrite_presmodule->addlinebreak();
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);
1206 $kiriwrite_presmodule->addlinebreak();
1210 return $kiriwrite_presmodule->grab(); # Return to the main part of the script with the processed information.