Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
d2c9c170e851cfbe3daa70eaa08b418d4a9427a0
[kiriwrite/.git] / cgi-files / Modules / Database / MySQL5.pm
1 #################################################################################
2 # Kiriwrite Database Module - MySQL 5.x Database Module (MySQL5.pm)             #
3 # Database module for mainipulating data in a MySQL 5.x database.               #
4 #                                                                               #
5 # Copyright (C) 2007 Steve Brokenshire <sbrokenshire@xestia.co.uk>              #
6 #                                                                               #
7 # This module is licensed under the same license as Kiriwrite which is the GPL. #
8 #                                                                               #
9 # This program is free software; you can redistribute it and/or modify it under #
10 # the terms of the GNU General Public License as published by the Free          #
11 # Software Foundation; as version 2 of the License.                             #
12 #                                                                               #
13 # This program is distributed in the hope that it will be useful, but WITHOUT   #
14 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
15 # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.#
16 #                                                                               #
17 # You should have received a copy of the GNU General Public License along with  #
18 # this program; if not, write to the Free Software Foundation, Inc., 51         #
19 # Franklin St, Fifth Floor, Boston, MA 02110-1301 USA                           #
20 ################################################################################# 
22 # Define the package (perl module) name.
24 package Kiriwrite::Database::MySQL5;
26 # Enable strict and use warnings.
28 use strict;
29 use warnings;
30 use Encode qw();
32 # Load the following Perl modules.
34 use DBI qw(:sql_types);
36 # Set the following values.
38 our $VERSION    = "0.1.0";
39 my ($options, %options);
40 my $database_handle;
41 my $string_handle;
42 my $error;
43 my $errorext;
44 my $database_filename;
45 my $second_database_filename;
47 #################################################################################
48 # Generic Subroutines.                                                          #
49 #################################################################################
51 sub new{
52 #################################################################################
53 # new: Create an instance of Kiriwrite::Database::MySQL                         #
54 #                                                                               #
55 # Usage:                                                                        #
56 #                                                                               #
57 # $dbmodule = Kiriwrite::Database::SQLite->new();                               #
58 #################################################################################
59         
60         # Get the perl module name.
62         my $class = shift;
63         my $self = {};
65         return bless($self, $class);
67 }
69 sub loadsettings{
70 #################################################################################
71 # loadsettings: Loads settings into the SQLite database module                  #
72 #                                                                               #
73 # Usage:                                                                        #
74 #                                                                               #
75 # $dbmodule->loadsettings(Directory, options);                                  #
76 #                                                                               #
77 # options       Specifies the following options (in any order).                 #
78 #                                                                               #
79 # Directory     Specifies the directory to use for getting databases.           #
80 # DateTime      Specifies the date and time format to use.                      #
81 # Server        Specifies the server to use.                                    #
82 # Database      Specifies the database to use.                                  #
83 # Username      Specifies the username to use.                                  #
84 # Password      Specifies the password to use.                                  #
85 # Port          Specifies the server port to use.                               #
86 # Protocol      Specifies the protocol to use.                                  #
87 # TablePrefix   Specifies the table prefix to use.                              #
88 #################################################################################
90         # Get the data passed to the subroutine.
92         my $class = shift;
93         my ($passedoptions)     = @_;
95         # Add the directory setting to the list of options (as it's the only
96         # one needed for this database module).
98         %options = (
99                 "Directory"     => $passedoptions->{"Directory"},
100                 "DateTime"      => $passedoptions->{"DateTime"},
101                 "Server"        => $passedoptions->{"Server"},
102                 "Database"      => $passedoptions->{"Database"},
103                 "Username"      => $passedoptions->{"Username"},
104                 "Password"      => $passedoptions->{"Password"},
105                 "Port"          => $passedoptions->{"Port"},
106                 "Protocol"      => $passedoptions->{"Protocol"},
107                 "TablePrefix"   => $passedoptions->{"TablePrefix"}
108         );
112 sub convert{
113 #################################################################################
114 # convert: Converts data into SQL formatted data.                               #
115 #                                                                               #
116 # Usage:                                                                        #
117 #                                                                               #
118 # $dbmodule->convert(data);                                                     #
119 #                                                                               #
120 # data          Specifies the data to convert.                                  #
121 #################################################################################
123         # Get the data passed to the subroutine.
125         my $class       = shift;
126         my $data        = shift;
128         if (!$data){
129                 $data = "";
130         }
132         $data =~ s/'/''/g;
133         $data =~ s/\b//g;
135         return $data;
139 sub dateconvert{
140 #################################################################################
141 # dateconvert: Converts a SQL date into a proper date.                          #
142 #                                                                               #
143 # Usage:                                                                        #
144 #                                                                               #
145 # $dbmodule->dateconvert(date);                                                 #
146 #                                                                               #
147 # date          Specifies the date to convert.                                  #
148 #################################################################################
150         # Get the date passed to the subroutine.
152         my $class       = shift;
153         my $data        = shift;
155         # Convert the date given into the proper date.
157         # Create the following varialbes to be used later.
159         my $date;
160         my $time;
161         my $day;
162         my $day_full;
163         my $month;
164         my $month_check;
165         my $month_full;
166         my $year;
167         my $year_short;
168         my $hour;
169         my $hour_full;
170         my $minute;
171         my $minute_full;
172         my $second;
173         my $second_full;
174         my $seek = 0;
175         my $timelength;
176         my $datelength;
177         my $daylength;
178         my $secondlength;
179         my $startchar = 0;
180         my $char;
181         my $length;
182         my $count = 0;
184         # Split the date and time.
186         $length = length($data);
188         if ($length > 0){
190                 do {
192                         # Get the character and check if it is a space.
194                         $char = substr($data, $seek, 1);
196                         if ($char eq ' '){
198                                 # The character is a space, so get the date and time.
200                                 $date           = substr($data, 0, $seek);
201                                 $timelength     = $length - $seek - 1;
202                                 $time           = substr($data, $seek + 1, $timelength);
204                         }
206                         $seek++;
208                 } until ($seek eq $length);
210                 # Get the year, month and date.
212                 $length = length($date);
213                 $seek = 0;
215                 do {
217                         # Get the character and check if it is a dash.
219                         $char = substr($date, $seek, 1);
221                         if ($char eq '-'){
223                                 # The character is a dash, so get the year, month or day.
225                                 $datelength = $seek - $startchar;
227                                 if ($count eq 0){
229                                         # Get the year from the date.
231                                         $year           = substr($date, 0, $datelength) + 1900;
232                                         $startchar      = $seek;
233                                         $count = 1;
235                                         # Get the last two characters to get the short year
236                                         # version.
238                                         $year_short     = substr($year, 2, 2);
240                                 } elsif ($count eq 1){
242                                         # Get the month and day from the date.
244                                         $month  = substr($date, $startchar + 1, $datelength - 1) + 1;
246                                         # Check if the month is less then 10, if it is
247                                         # add a zero to the value.
249                                         if ($month < 10){
251                                                 $month_full = '0' . $month;
253                                         } else {
255                                                 $month_full = $month;
257                                         }
259                                         $startchar      = $seek;
260                                         $count = 2;
262                                         $daylength      = $length - $seek + 1;
263                                         $day            = substr($date, $startchar + 1, $daylength);
265                                         $day =~ s/^0//;
267                                         # Check if the day is less than 10, if it is
268                                         # add a zero to the value.
270                                         if ($day < 10){
272                                                 $day_full       = '0' . $day;
274                                         } else {
276                                                 $day_full       = $day;
278                                         }
280                                 }
282                         }
284                         $seek++;
286                 } until ($seek eq $length);
288                 # Get the length of the time value and reset certain
289                 # values to 0.
291                 $length = length($time);
292                 $seek = 0;
293                 $count = 0;
294                 $startchar = 0;
296                 do {
298                         # Get the character and check if it is a colon.
300                         $char = substr($time, $seek, 1);
302                         if ($char eq ':'){
304                                 # The character is a colon, so get the hour, minute and day.
306                                 $timelength = $seek - $startchar;
308                                 if ($count eq 0){
310                                         # Get the hour from the time.
312                                         $hour = substr($time, 0, $timelength);
313                                         $hour =~ s/^0//;
314                                         $count = 1;
315                                         $startchar = $seek;
317                                         # If the hour is less than ten then add a
318                                         # zero.
320                                         if ($hour < 10){
322                                                 $hour_full = '0' . $hour;
324                                         } else {
326                                                 $hour_full = $hour;
328                                         }
330                                 } elsif ($count eq 1){
332                                         # Get the minute and second from the time.
334                                         $minute = substr($time, $startchar + 1, $timelength - 1);
335                                         $minute =~ s/^0//;
336                                         $count = 2;
337                                                 
338                                         # If the minute is less than ten then add a
339                                         # zero.
341                                         if ($minute < 10){
343                                                 $minute_full = '0' . $minute;
345                                         } else {
347                                                 $minute_full = $minute;
349                                         }
351                                         $startchar = $seek;
353                                         $secondlength = $length - $seek + 1;
354                                         $second = substr($time, $startchar + 1, $secondlength);
355                                         $second =~ s/^0//;
356                                         
357                                         # If the second is less than ten then add a
358                                         # zero.
360                                         if ($second < 10){
362                                                 $second_full = '0' . $second;
364                                         } else {
366                                                 $second_full = $second;
368                                         }
370                                 }
372                         }
374                         $seek++;
376                 } until ($seek eq $length);
378                 # Get the setting for displaying the date and time.
380                 $data = $options{"DateTime"};
382                 # Process the setting for displaying the date and time
383                 # using regular expressions
385                 $data =~ s/DD/$day_full/g;
386                 $data =~ s/D/$day/g;
387                 $data =~ s/MM/$month_full/g;
388                 $data =~ s/M/$month/g;
389                 $data =~ s/YY/$year/g;
390                 $data =~ s/Y/$year_short/g;
392                 $data =~ s/hh/$hour_full/g;
393                 $data =~ s/h/$hour/g;
394                 $data =~ s/mm/$minute_full/g;
395                 $data =~ s/m/$minute/g;
396                 $data =~ s/ss/$second_full/g;
397                 $data =~ s/s/$second/g;
399         }
401         return $data;
405 sub geterror{
406 #################################################################################
407 # geterror: Gets the error message (or extended error message).                 #
408 #                                                                               #
409 # Usage:                                                                        #
410 #                                                                               #
411 # $dbmodule->geterror(extended);                                                #
412 #                                                                               #
413 # Extended      Specifies if the extended error should be retrieved.            #
414 #################################################################################
416         # Get the data passed to the subroutine.
418         my $class       = shift;
419         my $extended    = shift;
421         if (!$extended){
422                 $extended = 0;
423         }
425         if (!$errorext){
426                 $errorext = "";
427         }
429         if (!$error){
430                 $error = "";
431         }
433         # Check to see if extended information should be returned.
435         if ($extended eq 1){
437                 # Extended information should be returned.
439                 return $errorext;
441         } else {
443                 # Basic information should be returned.
445                 return $error;
447         }
451 sub dbpermissions{
452 #################################################################################
453 # dbpermissions: Check if the permissions for the database are valid.           #
454 #                                                                               #
455 # Usage:                                                                        #
456 #                                                                               #
457 # $database->dbpermissions(dbname, read, write);                                #
458 #                                                                               #
459 # dbname        Specifies the database name to check.                           #
460 # read          Check to see if the database can be read.                       #
461 # write         Check to see if the database can be written.                    #
462 #################################################################################
464         # This subroutine is not needed for this database module.
466         return 0;
470 sub dbexists{
471 #################################################################################
472 # dbexists: Check if the database exists.                                       #
473 #                                                                               #
474 # Usage:                                                                        #
475 #                                                                               #
476 # $dbmodule->dbexists(dbname);                                                  #
477 #                                                                               #
478 # dbname        Specifies the database name to check.                           #
479 #################################################################################
481         $error = "";
482         $errorext = "";
484         # Get the value that was passed to the subroutine.
486         my $class       = shift;
487         my ($filename)  = @_;
489         my @table_data;
490         my $table_exists = 0;
492         # Check if the table exists.
494         $string_handle = $database_handle->prepare('SHOW TABLES LIKE \'' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($filename) . '_database_info\'') or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
495         $string_handle->execute();
497         while (@table_data = $string_handle->fetchrow_array()){
499                 $table_exists = 1;
501         }
503         # Check if the table really does exist.
505         if ($table_exists eq 1){
507                 # The table exists so return a value of 0.
509                 return 0;
511         } else {
513                 # The table does not exist so return a value of 1.
515                 return 1;
517         }
522 #################################################################################
523 # General subroutines.                                                          #
524 #################################################################################
526 sub connect{
527 #################################################################################
528 # connect: Connect to the server.                                               #
529 #                                                                               #
530 # Usage:                                                                        #
531 #                                                                               #
532 # $dbmodule->connect();                                                         #
533 #################################################################################
535         $error = "";
536         $errorext = "";
538         # Connect to the server.
540         $database_handle = DBI->connect("DBI:mysql:database=" . $options{"Database"} . ";host=" . $options{"Server"} . ";protocol=" . $options{"Protocol"} . "port=" . $options{"Port"}, $options{"Username"}, $options{"Password"}, { "mysql_enable_utf8" => 1 }) or ( $error = "DatabaseConnectionError", $errorext = DBI->errstr, return );
541         $database_handle->do('SET CHARACTER SET utf8');
542         $database_handle->do('SET NAMES utf8');
546 sub disconnect{
547 #################################################################################
548 # connect: Disconnect from the server.                                          #
549 #                                                                               #
550 # Usage:                                                                        #
551 #                                                                               #
552 # $dbmodule->disconnect();                                                      #
553 #################################################################################
554         
555         # Disconnect from the server.
557         if ($string_handle){
559                 $string_handle->finish();
561         }
563         if ($database_handle){
565                 $database_handle->disconnect();
567         }
571 #################################################################################
572 # Database Subroutines.                                                         #
573 #################################################################################
575 sub getdblist{
576 #################################################################################
577 # getdblist: Gets the list of available databases.                              #
578 #                                                                               #
579 # Usage:                                                                        #
580 #                                                                               #
581 # $dbmodule->getdblist();                                                       #
582 #################################################################################
584         $error = "";
585         $errorext = "";
587         # Get the list of databases.
589         $string_handle = $database_handle->prepare("SHOW TABLES") or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
590         $string_handle->execute();
592         my @final_table_list;   
593         my @database_table_list;
594         my @table_name;
595         my $table;
597         while (@table_name = $string_handle->fetchrow_array()){
599                 push(@database_table_list, decode_utf8($table_name[0]));
601         }
603         my $table_prefix = $options{"TablePrefix"};
605         # Find all the database information tables with the correct table prefix.
607         @database_table_list = grep /^$table_prefix/ , @database_table_list;
608         @database_table_list = grep /m*database_info$/ , @database_table_list;
610         foreach $table (@database_table_list){
612                 # Process each table name removing the table prefix name and
613                 # the _database_info part.
615                 $table =~ s/^$table_prefix(_)//g;
616                 $table =~ s/_database_info$//g;
618                 push (@final_table_list, $table);
620         }
622         # Return the final list of databases.
624         return @final_table_list;
628 sub getseconddatabaseinfo{
629 #################################################################################
630 # getseconddatabaseinfo: Get information about the database that pages will be  #
631 # moved or copied to.                                                           #
632 #                                                                               #
633 # Usage:                                                                        #
634 #                                                                               #
635 # $dbmodule->getseconddatabaseinfo();                                           #
636 #################################################################################
639         # Get the database information.
641         my $class = shift;
642         my ($databaseinfo, %databaseinfo);
643         my ($sqldata, @sqldata);
645         $error = "";
646         $errorext = "";
648         $string_handle = $database_handle->prepare('SELECT name, description, notes, categories, kiriwrite_version_major, kiriwrite_version_minor, kiriwrite_version_revision FROM ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($second_database_filename) . '_database_info LIMIT 1') or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
649         $string_handle->execute();
651         @sqldata = $string_handle->fetchrow_array();
653         # Process the database information into a hash.
655         %databaseinfo = (
656                 "DatabaseName"  => decode_utf8($sqldata[0]),
657                 "Description"   => decode_utf8($sqldata[1]),
658                 "Notes"         => decode_utf8($sqldata[2]),
659                 "Categories"    => decode_utf8($sqldata[3]),
660                 "Major"         => decode_utf8($sqldata[4]),
661                 "Minor"         => decode_utf8($sqldata[5]),
662                 "Revision"      => decode_utf8($sqldata[6])
663         );
665         $string_handle->finish();
667         return %databaseinfo;
671 sub selectdb{
672 #################################################################################
673 # selectdb: Selects the Kiriwrite database.                                     #
674 #                                                                               #
675 # Usage:                                                                        #
676 #                                                                               #
677 # $dbmodule->connect(options);                                                  #
678 #                                                                               #
679 # options       Specifies the following options in any order.                   #
680 #                                                                               #
681 # DatabaseName  Specifies the Kiriwrite database to use.                        #
682 #################################################################################
684         # Get the database name.
686         $error = "";
687         $errorext = "";
689         my $class = shift;
690         my ($passedoptions) = @_;
692         my $dbname = $passedoptions->{"DatabaseName"};
694         my $database_exists = $class->dbexists($dbname);
696         if ($database_exists eq 1){
698                 # The database does not exist so return an error value
699                 # saying that the database does not exist.
701                 $error = "DoesNotExist";
703                 return;
705         }
707         $database_filename = $dbname;
711 sub selectseconddb{
712 #################################################################################
713 # selectseconddb: Selects a second Kiriwrite database for moving and copying    #
714 # pages to.                                                                     #
715 #                                                                               #
716 # Usage:                                                                        #
717 #                                                                               #
718 # $dbmodule->selectseconddb(options);                                           #
719 #                                                                               #
720 # options       Specifies the following options in any order.                   #
721 #                                                                               #
722 # DatabaseName  Specifies the Kiriwrite database to use.                        #
723 #################################################################################
725         # Get the database name.
727         $error = "";
728         $errorext = "";
730         my $class = shift;
731         my ($passedoptions) = @_;
732         my (%database, $database);
734         my $dbname = $passedoptions->{"DatabaseName"};
736         # Check if the database exists.
738         my $database_exists = $class->dbexists($dbname);
740         if ($database_exists eq 1){
742                 # The database does not exist so return an error value
743                 # saying that the database does not exist.
745                 $error = "DoesNotExist";
747                 return;
749         }
751         # Set the second database filename.
753         $second_database_filename = $dbname;
757 sub getdatabaseinfo{
758 #################################################################################
759 # getdatabaseinfo: Get information about the database.                          #
760 #                                                                               #
761 # Usage:                                                                        #
762 #                                                                               #
763 # $dbmodule->getdatabaseinfo();                                                 #
764 #################################################################################
766         # Get the database information.
768         $error = "";
769         $errorext = "";
771         my $class = shift;
772         my ($databaseinfo, %databaseinfo);
773         my ($sqldata, @sqldata);
775         $string_handle = $database_handle->prepare('SELECT name, description, notes, categories, kiriwrite_version_major, kiriwrite_version_minor, kiriwrite_version_revision FROM ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($database_filename) . '_database_info LIMIT 1') or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
776         $string_handle->execute();
778         @sqldata = $string_handle->fetchrow_array();
780         # Process the database information into a hash.
782         %databaseinfo = (
784                 "DatabaseName"  => decode_utf8($sqldata[0]),
785                 "Description"   => decode_utf8($sqldata[1]),
786                 "Notes"         => decode_utf8($sqldata[2]),
787                 "Categories"    => decode_utf8($sqldata[3]),
788                 "Major"         => decode_utf8($sqldata[4]),
789                 "Minor"         => decode_utf8($sqldata[5]),
790                 "Revision"      => decode_utf8($sqldata[6])
791         );
793         $string_handle->finish();
795         return %databaseinfo;
799 sub adddatabase{
800 #################################################################################
801 # adddatabase: Adds a Kiriwrite database.                                       #
802 #                                                                               #
803 # Usage:                                                                        #
804 #                                                                               #
805 # $dbmodule->adddatabase(options);                                              #
806 #                                                                               #
807 # options       Specifies the following options in any order.                   #
808 #                                                                               #
809 # DatabaseFilename      Specifies the database file/shortname to use.           #
810 # DatabaseName          Specifies the database name to use.                     #
811 # DatabaseDescription   Specifies the database description to use.              #
812 # DatabaseNotes         Specifies the database notes to use.                    #
813 # DatabaseCategories    Specifies the database categories to use.               #
814 # VersionMajor          Specifies the major version.                            #
815 # VersionMinor          Specifies the minor version.                            #
816 # VersionRevision       Specifies the revision version.                         #
817 #################################################################################
819         # Get the database that was passed to the subroutine.
821         $error  = "";
822         $errorext = "";
824         my $class       = shift;
825         my ($passedoptions) = @_;
827         my $dbfilename          = $passedoptions->{"DatabaseFilename"};
828         my $dbname              = $passedoptions->{"DatabaseName"};
829         my $dbdescription       = $passedoptions->{"DatabaseDescription"};
830         my $dbnotes             = $passedoptions->{"DatabaseNotes"};
831         my $dbcategories        = $passedoptions->{"DatabaseCategories"};
832         my $dbmajorver          = $passedoptions->{"VersionMajor"};
833         my $dbminorver          = $passedoptions->{"VersionMinor"};
834         my $dbrevisionver       = $passedoptions->{"VersionRevision"};
836         # Check if the database with the filename given already exists.
838         my $database_exists     = $class->dbexists($dbfilename);
840         if ($database_exists eq 0){
842                 # The database filename exists so set the error value.
844                 $error = "DatabaseExists";
845                 return;
847         }
849         # Create the database structure (info and page tables);
851         $string_handle  = $database_handle->prepare('CREATE TABLE ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($dbfilename) . '_database_info (
852                         name varchar(256) primary key,
853                         description varchar(512), 
854                         notes mediumtext,
855                         categories varchar(512), 
856                         kiriwrite_version_major int(4), 
857                         kiriwrite_version_minor int(4), 
858                         kiriwrite_version_revision int(4)
859         ) DEFAULT CHARSET=utf8') or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
860         $string_handle->execute();
862         $string_handle  = $database_handle->prepare('CREATE TABLE ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($dbfilename) . '_database_pages (
863                         filename varchar(256) primary key, 
864                         pagename varchar(512), 
865                         pagedescription varchar(512), 
866                         pagesection varchar(256),
867                         pagetemplate varchar(64),
868                         pagedata mediumtext,
869                         pagesettings int(1),
870                         lastmodified datetime
871         ) DEFAULT CHARSET=utf8') or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
872         $string_handle->execute();
874         # Convert the values into SQL query formatted values and add an entry
875         # to the kiriwrite_database_info table.
877         $string_handle = $database_handle->prepare('INSERT INTO ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($dbfilename) . '_database_info (name, description, notes, categories, kiriwrite_version_major, kiriwrite_version_minor, kiriwrite_version_revision) VALUES(
878                 \'' . $class->convert($dbname) . '\',
879                 \'' . $class->convert($dbdescription) . '\',
880                 \'' . $class->convert($dbnotes) . '\',
881                 \'' . $class->convert($dbcategories) . '\',
882                 \'' . $class->convert($dbmajorver) . '\',
883                 \'' . $class->convert($dbminorver) . '\',
884                 \'' . $class->convert($dbrevisionver) . '\'
885         )') or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
886         $string_handle->execute();
890 sub editdatabase{
891 #################################################################################
892 # editdatabase: Edits a Kiriwrite Database.                                     #
893 #                                                                               #
894 # Usage:                                                                        #
895 #                                                                               #
896 # $dbmodule->editdatabase(options);                                             #
897 #                                                                               #
898 # options               Specifies the following options in any order.           #
899 #                                                                               #
900 # NewDatabaseFilename   Specifies the new database filename to use.             #
901 # DatabaseName          Specifies the new database name.                        #
902 # DatabaseDescription   Specifies the new database description.                 #
903 # DatabaseNotes         Specifies the new database notes.                       #
904 # DatabaseCategories    Specifies the new database categories.                  #
905 #################################################################################
907         $error          = "";
908         $errorext       = "";
910         my $class       = shift;
911         my ($passedoptions) = @_;
913         my $dbnewfilename       = $passedoptions->{"DatabaseNewFilename"};
914         my $dbname              = $passedoptions->{"DatabaseName"};
915         my $dbdescription       = $passedoptions->{"DatabaseDescription"};
916         my $dbnotes             = $passedoptions->{"DatabaseNotes"};
917         my $dbcategories        = $passedoptions->{"DatabaseCategories"};
919         # Check if a new database filename has been specified and if a
920         # new database filename has been specified then change the
921         # database filename.
923         if ($database_filename ne $dbnewfilename){
925                 # Check if a table with the filename already exists before using the
926                 # new filename.
928                 my $database_newexists          = $class->dbexists($dbnewfilename);
930                 if ($database_newexists eq 0){
932                         # The database filename exists so set the error value.
934                         $error = "DatabaseExists";
935                         return;
937                 }
939                 # Rename the tables.
941                 $string_handle = $database_handle->prepare('RENAME TABLE ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($database_filename) . '_database_info TO ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($dbnewfilename) . '_database_info, ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($database_filename) . '_database_pages TO ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($dbnewfilename) . '_database_pages');
942                 $string_handle->execute();
944         }
946         # Get the current database information.
948         $string_handle = $database_handle->prepare('SELECT name FROM ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($dbnewfilename) . '_database_info LIMIT 1') or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
949         $string_handle->execute();
951         my @database_oldinfo    = $string_handle->fetchrow_array();
953         my $dboldname           = decode_utf8($database_oldinfo[0]);
955         # Update the database information.
957         $string_handle = $database_handle->prepare('UPDATE ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($dbnewfilename) . '_database_info SET name = \'' . $class->convert($dbname) . '\',
958         description = \'' . $class->convert($dbdescription) . '\',
959         notes = \'' . $class->convert($dbnotes) . '\',
960         categories = \'' . $class->convert($dbcategories) . '\'') or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
961         $string_handle->execute();
965 sub deletedatabase{
966 #################################################################################
967 # deletedatabase: Deletes a Kiriwrite database.                                 #
968 #                                                                               #
969 # Usage:                                                                        #
970 #                                                                               #
971 # $dbmodule->deletedatabase(options);                                           #
972 #                                                                               #
973 # options       Specifies the following options in any order.                   #
974 #                                                                               #
975 # DatabaseName  Specifies the Kiriwrite database to delete.                     #
976 #################################################################################
978         $error          = "";
979         $errorext       = "";
981         # Get the database filename.
983         my $class               = shift;
984         my ($passedoptions)     = shift;
986         my $databasename        = $passedoptions->{"DatabaseName"};
988         my @table_data;
989         my $table_exists;
991         # Check if the database with the filename given already exists.
993         my $database_exists     = $class->dbexists($databasename);
995         if ($database_exists eq 1){
997                 # The database does not exist so set the error value.
999                 $error = "DoesNotExist";
1000                 return;
1002         }
1006         # Delete the database tables.
1008         $string_handle = $database_handle->prepare('DROP TABLE ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($databasename) . '_database_info')  or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
1009         $string_handle->execute();
1011         # Check if the _database_pages table exists and delete it if it exists.
1013         $string_handle = $database_handle->prepare('SHOW TABLES LIKE \'' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($databasename) . '_database_pages\'')  or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
1014         $string_handle->execute();
1016         while (@table_data = $string_handle->fetchrow_array()){
1018                 $table_exists = 1;
1020         }
1022         # Check if the _database_pages table really does exist.
1024         if ($table_exists eq 1){
1026                 # the _database_pages table really does exist so delete it.
1028                 $string_handle = $database_handle->prepare('DROP TABLE ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($databasename) . '_database_pages')  or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
1029                 $string_handle->execute();
1031         }
1035 #################################################################################
1036 # Template subroutines.                                                         #
1037 #################################################################################
1039 sub connecttemplate{
1040 #################################################################################
1041 # connecttemplate: Connect to the template database.                            #
1042 #                                                                               #
1043 # Usage:                                                                        #
1044 #                                                                               #
1045 # $dbmodule->connecttemplate(missingignore);                                    #
1046 #                                                                               #
1047 # missingignore Ignore errror about database being missing.                     #
1048 #################################################################################
1050         $error = "";
1051         $errorext = "";
1053         my $class = shift;
1054         my $ignoremissing = shift;
1055         my $templatedb_exists = 0;
1056         my @templatedb_check;
1058         # Check if the template database exists.
1060         $string_handle = $database_handle->prepare('SHOW TABLES LIKE \'' . $class->convert($options{"TablePrefix"}) . '_templates\'') or ( $error = "TemplateDatabaseError", $errorext = $database_handle->errstr, return );
1061         $string_handle->execute();
1063         while (@templatedb_check = $string_handle->fetchrow_array()){
1065                 $templatedb_exists = 1;
1067         }
1069         if (!$templatedb_exists){
1071                 if (!$ignoremissing){
1073                         $error = "TemplateDatabaseDoesNotExist";
1074                         return;
1076                 }
1078         }
1082 sub disconnecttemplate{
1083 #################################################################################
1084 # disconnecttemplate: Disconnect from the template database.                    #
1085 #                                                                               #
1086 # Usage:                                                                        #
1087 #                                                                               #
1088 # $dbmodule->disconnecttemplate();                                              #
1089 #################################################################################
1091         # This subroutine is not used.
1095 sub gettemplatelist{
1096 #################################################################################
1097 # gettemplatelist: Gets the list of templates.                                  #
1098 #                                                                               #
1099 # Usage:                                                                        #
1100 #                                                                               #
1101 # $dbmodule->gettemplatelist();                                                 #
1102 #################################################################################
1104         my $error = "";
1105         my $errorext = "";
1107         my $class = shift;
1109         $string_handle = $database_handle->prepare('SELECT filename FROM ' . $class->convert($options{"TablePrefix"}) . '_templates ORDER BY filename ASC') or ( $error = "TemplateDatabaseError", $errorext = $database_handle->errstr, return );
1110         $string_handle->execute();
1112         my @database_template;
1113         my @templates_list;
1114         my $template_filename;
1116         while (@database_template = $string_handle->fetchrow_array()){
1118                 # Get certain values from the array.
1120                 $template_filename      = decode_utf8($database_template[0]);
1122                 # Add the template to the list of templates.
1124                 push(@templates_list, $template_filename);
1126         }
1128         return @templates_list;
1132 sub gettemplateinfo{
1133 #################################################################################
1134 # gettemplateinfo: Get information on a template.                               #
1135 #                                                                               #
1136 # Usage:                                                                        #
1137 #                                                                               #
1138 # $dbmodule->gettemplateinfo(options);                                          #
1139 #                                                                               #
1140 # options       Specifies the following options in any order.                   #
1141 #                                                                               #
1142 # TemplateFilename      Specifies the template filename to use.                 #
1143 #################################################################################
1145         $error = "";
1146         $errorext = "";
1148         # Get the data passed to the subroutine.
1150         my $class = shift;
1151         my ($passedoptions) = @_;
1153         my %page_info;
1154         my @template_data;
1156         my $template_filename;
1157         my $template_name;
1158         my $template_description;
1159         my $template_datemodified;
1160         my $template_layout;
1162         my $template_found = 0;
1164         my $filename    = $passedoptions->{"TemplateFilename"};
1166         $string_handle = $database_handle->prepare('SELECT filename, templatename, templatedescription, templatelayout, datemodified FROM ' . $class->convert($options{"TablePrefix"}) . '_templates WHERE filename = \'' . $class->convert($filename) . '\'') or ( $error = "TemplateDatabaseError", $errorext = $database_handle->errstr, return );
1167         $string_handle->execute();
1169         while (@template_data = $string_handle->fetchrow_array()){
1171                 # Get certain values from the array.
1173                 $template_filename      = decode_utf8($template_data[0]);
1174                 $template_name          = decode_utf8($template_data[1]);
1175                 $template_description   = decode_utf8($template_data[2]);
1176                 $template_layout        = decode_utf8($template_data[3]);
1177                 $template_datemodified  = decode_utf8($template_data[4]);
1179                 # Process them into the hash.
1181                 %page_info = (
1182                         "TemplateFilename" => $template_filename,
1183                         "TemplateName" => $template_name,
1184                         "TemplateDescription" => $template_description,
1185                         "TemplateLayout" => $template_layout,
1186                         "TemplateLastModified" => $template_datemodified
1187                 );
1189                 $template_found = 1;
1191         }
1193         if ($template_found eq 0){
1195                 # The template was not found in the template database so
1196                 # write an error value.
1198                 $error = "TemplateDoesNotExist";
1199                 return;
1201         }
1203         return %page_info;      
1208 sub addtemplate{
1209 #################################################################################
1210 # addtemplate: Adds a template to the template database.                        #
1211 #                                                                               #
1212 # Usage:                                                                        #
1213 #                                                                               #
1214 # $dbmodule->addtemplate();                                                     #
1215 #                                                                               #
1216 # options       Specifies the following options in any order.                   #
1217 #                                                                               #
1218 # TemplateFilename      Specifies the new template filename.                    #
1219 # TemplateName          Specifies the new template name.                        #
1220 # TemplateDescription   Specifies the new template description.                 #
1221 # TemplateLayout        Specifies the new template layout.                      #
1222 #################################################################################
1224         $error = "";
1225         $errorext = "";
1227         # Get the data passed to the subroutine.
1229         my $class = shift;
1230         my ($passedoptions) = @_;
1232         my @page_exists;
1233         my @templatedb_check;
1234         my $templatedb_exists;
1235         my $blankfile = 0;
1237         my $template_filename           = $passedoptions->{"TemplateFilename"};
1238         my $template_name               = $passedoptions->{"TemplateName"};
1239         my $template_description        = $passedoptions->{"TemplateDescription"};
1240         my $template_layout             = $passedoptions->{"TemplateLayout"};
1242         # Check if the template database exists.
1244         $string_handle = $database_handle->prepare('SHOW TABLES LIKE \'' . $class->convert($options{"TablePrefix"}) . '_templates\'') or ( $error = "TemplateDatabaseError", $errorext = $database_handle->errstr, return );
1245         $string_handle->execute();
1247         while (@templatedb_check = $string_handle->fetchrow_array()){
1249                 $templatedb_exists = 1;
1251         }
1253         # Check if the template database table exists and if it doesn't
1254         # then create the template database table.
1256         if (!$templatedb_exists){
1258                 $string_handle = $database_handle->prepare('CREATE TABLE ' . $class->convert($options{"TablePrefix"}) . '_templates (
1259                         filename varchar(256) primary key,
1260                         templatename varchar(512),
1261                         templatedescription varchar(512),
1262                         templatelayout mediumtext,
1263                         datemodified datetime
1264                 ) DEFAULT CHARSET=utf8') or ( $error = "TemplateDatabaseError", $errorext = $database_handle->errstr, return );
1265                 $string_handle->execute();
1267         }
1269         # Check if the template already exists before adding.
1271         if (!$templatedb_exists){
1273                 $string_handle = $database_handle->prepare('SELECT filename FROM ' . $class->convert($options{"TablePrefix"}) . '_templates WHERE filename = \'' . $class->convert($template_filename) . '\' LIMIT 1') or ($blankfile = 1);
1275                 if ($blankfile eq 0){
1277                         $string_handle->execute();
1279                         while (@page_exists = $string_handle->fetchrow_array()){
1281                                 $error = "TemplatePageExists";
1282                                 return;
1284                         }
1286                 }
1288         }
1290         # Get the current date.
1291  
1292         my ($created_second, $created_minute, $created_hour, $created_day, $created_month, $created_year, $created_weekday, $created_yearday, $created_dst) = localtime;
1293  
1294         my $template_date = $created_year . '-' . $created_month . '-' . $created_day . ' ' . $created_hour . ':' . $created_minute . ':' . $created_second;
1296         # Check if certain values are undefined and if they
1297         # are then set them blank.
1299         if (!$template_name){
1301                 $template_name = "";
1303         }
1305         if (!$template_description){
1307                 $template_description = "";
1309         }
1311         if (!$template_layout){
1313                 $template_layout = "";
1315         }
1317         $string_handle = $database_handle->prepare('INSERT INTO ' . $class->convert($options{"TablePrefix"}) . '_templates (filename, templatename, templatedescription, templatelayout, datemodified) VALUES(
1318                         \'' . $class->convert($template_filename) . '\',
1319                         \'' . $class->convert($template_name) . '\',
1320                         \'' . $class->convert($template_description) . '\',
1321                         \'' . $class->convert($template_layout) . '\',
1322                         \'' . $class->convert($template_date) . '\'
1323         )') or ( $error = "TemplateDatabaseError", $errorext = $database_handle->errstr, return );
1324         $string_handle->execute();
1328 sub deletetemplate{
1329 #################################################################################
1330 # deletetemplate: Deletes a template from the template database.                #
1331 #                                                                               #
1332 # Usage:                                                                        #
1333 #                                                                               #
1334 # $dbmodule->deletetemplate(options);                                           #
1335 #                                                                               #
1336 # options       Specifies the following options in any order.                   #
1337 #                                                                               #
1338 # TemplateFilename      Specifies the template filename to delete.              #
1339 #################################################################################
1341         $error = "";
1342         $errorext = "";
1344         # Get the data passed to the subroutine.
1346         my $class = shift;
1347         my ($passedoptions) = @_;
1349         my @pagedata;
1350         my $template_filename = $passedoptions->{"TemplateFilename"};
1351         my $template_count = 0;
1353         # Check if the template exists.
1355         $string_handle = $database_handle->prepare('SELECT filename FROM ' . $class->convert($options{"TablePrefix"}) . '_templates WHERE filename = \'' . $class->convert($template_filename) . '\' LIMIT 1') or ( $error = "TemplateDatabaseError", $errorext = $database_handle->errstr, return );
1356         $string_handle->execute();
1358         while (@pagedata = $string_handle->fetchrow_array()){
1360                 $template_count++;
1362         }
1364         if ($template_count eq 0){
1366                 # No pages were returned so return an error value.
1368                 $error = "TemplateDoesNotExist";
1369                 return;
1371         }
1373         # Delete the template from the template database.
1375         $string_handle = $database_handle->prepare('DELETE FROM ' . $class->convert($options{"TablePrefix"}) . '_templates WHERE filename = \'' . $class->convert($template_filename) . '\'') or ( $error = "TemplateDatabaseError", $errorext = $database_handle->errstr, return );
1376         $string_handle->execute();
1380 sub edittemplate{
1381 #################################################################################
1382 # editttemplate: Edits a Kiriwrite template.                                    #
1383 #                                                                               #
1384 # Usage:                                                                        #
1385 #                                                                               #
1386 # $dbmodule->edittemplate(options);                                             #
1387 #                                                                               #
1388 # options       Specifies the following options in any order.                   #
1389 #                                                                               #
1390 # TemplateFilename              Specifies the template filename to edit.        #
1391 # NewTemplateFilename           Specifies the new template filename.            #
1392 # NewTemplateName               Specifies the new template name.                #
1393 # NewTemplateDescription        Specifies the new template description.         #
1394 # NewTemplateLayout             Specifies the new template layout.              #
1395 #################################################################################
1397         # Get the values passed.
1399         my $class = shift;
1400         my ($passedoptions) = @_;
1401         my $template_found = 0;
1402         my @template_info;
1404         # Process the values passed.
1406         my $template_filename           = $passedoptions->{"TemplateFilename"};
1407         my $new_template_filename       = $passedoptions->{"NewTemplateFilename"};
1408         my $new_template_name           = $passedoptions->{"NewTemplateName"};
1409         my $new_template_description    = $passedoptions->{"NewTemplateDescription"};
1410         my $new_template_layout         = $passedoptions->{"NewTemplateLayout"};
1412         # Check if the template exists.
1414         $string_handle = $database_handle->prepare('SELECT filename FROM ' . $class->convert($options{"TablePrefix"}) . '_templates WHERE filename = \'' . $class->convert($template_filename) . '\' LIMIT 1') or ( $error = "TemplateDatabaseError", $errorext = $database_handle->errstr, return );
1415         $string_handle->execute();
1417         while (@template_info = $string_handle->fetchrow_array()){
1419                 $template_found = 1;
1421         }
1423         # Check to see if the template was found and set an error value if
1424         # it wasn't.
1426         if ($template_found eq 0){
1428                 $error = "TemplateDoesNotExist";
1429                 return;
1431         }
1433         # Get the date and time.
1435         my ($created_second, $created_minute, $created_hour, $created_day, $created_month, $created_year, $created_weekday, $created_yearday, $created_dst) = localtime;
1436         my $templatenewdate = $created_year . '-' . $created_month . '-' . $created_day . ' ' . $created_hour . ':' . $created_minute . ':' . $created_second;
1438         # Update the template information.
1440         $string_handle = $database_handle->prepare('UPDATE ' . $class->convert($options{"TablePrefix"}) . '_templates SET
1441                 filename = \'' . $class->convert($new_template_filename) . '\',
1442                 templatename = \'' . $class->convert($new_template_name) . '\',
1443                 templatedescription = \'' . $class->convert($new_template_description) . '\',
1444                 templatelayout = \'' . $class->convert($new_template_layout) . '\',
1445                 datemodified = \'' . $class->convert($templatenewdate) . '\'
1446                 WHERE filename = \'' . $class->convert($template_filename) . '\'
1447         ') or ( $error = "TemplateDatabaseError", $errorext = $database_handle->errstr, return );
1448         $string_handle->execute();
1452 #################################################################################
1453 # Page subroutines.                                                             #
1454 #################################################################################
1456 sub getpagelist{
1457 #################################################################################
1458 # getpagelist: Gets the list of pages from the database.                        #
1459 #                                                                               #
1460 # Usage:                                                                        #
1461 #                                                                               #
1462 # $dbmodule->getpagelist();                                                     #
1463 #################################################################################
1465         $error = "";
1466         $errorext = "";
1468         my $class       = shift;
1469         
1470         $string_handle  = $database_handle->prepare('SELECT filename FROM ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($database_filename) . '_database_pages') or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
1471         $string_handle->execute();
1473         my @database_pagefilenames;
1474         my @database_pagefilenames_final;
1476         # Process the collected pages.
1478         while (@database_pagefilenames = $string_handle->fetchrow_array){
1480                 # Add each page to the list of pages in the database.
1482                 push(@database_pagefilenames_final, decode_utf8($database_pagefilenames[0]));
1484         }
1486         return @database_pagefilenames_final;   
1490 sub getpageinfo{
1491 #################################################################################
1492 # getpageinfo: Gets the page information from the filename passed.              #
1493 #                                                                               #
1494 # Usage:                                                                        #
1495 #                                                                               #
1496 # $dbmodule->getpageinfo(options);                                              #
1497 #                                                                               #
1498 # options       Specifies the following options in any order.                   #
1499 #                                                                               #
1500 # PageFilename  Specifies the page filename to get the page information from.   #
1501 #################################################################################
1503         $error = "";
1504         $errorext = "";
1506         my $class               = shift;
1507         my ($passedoptions)     = shift;
1508         my (%database_page, $database_page);
1509         my ($pagefilename, $pagename, $pagedescription, $pagesection, $pagetemplate, $pagedata, $pagesettings, $pagelastmodified);
1511         my @data_page;
1512         my $page_found = 0;
1514         # Get the page from the database.
1516         my $page_filename       = $passedoptions->{"PageFilename"};
1518         $string_handle  = $database_handle->prepare('SELECT filename, pagename, pagedescription, pagesection, pagetemplate, pagedata, pagesettings, lastmodified FROM ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($database_filename) . '_database_pages WHERE filename = \'' . $class->convert($page_filename) . '\' LIMIT 1') or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
1519         $string_handle->execute();
1521         # Check if the page exists in the database.
1523         while (@data_page = $string_handle->fetchrow_array()){
1525                 # Get the values from the array.
1527                 $pagefilename           = decode_utf8($data_page[0]);
1528                 $pagename               = decode_utf8($data_page[1]);
1529                 $pagedescription        = decode_utf8($data_page[2]);
1530                 $pagesection            = decode_utf8($data_page[3]);
1531                 $pagetemplate           = decode_utf8($data_page[4]);
1532                 $pagedata               = decode_utf8($data_page[5]);
1533                 $pagesettings           = decode_utf8($data_page[6]);
1534                 $pagelastmodified       = decode_utf8($data_page[7]);
1536                 # Put the values into the page hash.
1538                 %database_page = (
1539                         "PageFilename"          => $pagefilename,
1540                         "PageName"              => $pagename,
1541                         "PageDescription"       => $pagedescription,
1542                         "PageSection"           => $pagesection,
1543                         "PageTemplate"          => $pagetemplate,
1544                         "PageContent"           => $pagedata,
1545                         "PageSettings"          => $pagesettings,
1546                         "PageLastModified"      => $class->dateconvert($pagelastmodified),
1547                 );
1549                 $page_found = 1;
1551         }
1552         
1553         # Check if the page did exist.
1555         if (!$page_found){
1557                 $error = "PageDoesNotExist";
1558                 return;
1560         }
1562         return %database_page;
1567 sub addpage{
1568 #################################################################################
1569 # addpage: Add a page to the selected database.                                 #
1570 #                                                                               #
1571 # Usage:                                                                        #
1572 #                                                                               #
1573 # $dbmodule->addpage(options);                                                  #
1574 #                                                                               #
1575 # options       Specifies the following options in any order.                   #
1576 #                                                                               #
1577 # PageFilename          Specifies the page filename to use.                     #
1578 # PageName              Specifies the page name to use.                         #
1579 # PageDescription       Specifies the page description to use.                  #
1580 # PageSection           Specifies the page section to use.                      #
1581 # PageTemplate          Specifies the page template to use.                     #
1582 # PageContent           Specifies the page content to use.                      #
1583 # PageSettings          Specifies the page settings to use.                     #
1584 #################################################################################
1586         # Get the data that was passed to the subroutine.
1588         $error = "";
1589         $errorext = "";
1591         my $class               = shift;
1592         my ($passedoptions)     = shift;
1594         my @database_page;
1595         my $page_count = 0;
1597         # Get the values passed to the hash.
1599         my $page_filename       = $passedoptions->{"PageFilename"};
1600         my $page_name           = $passedoptions->{"PageName"};
1601         my $page_description    = $passedoptions->{"PageDescription"};
1602         my $page_section        = $passedoptions->{"PageSection"};
1603         my $page_template       = $passedoptions->{"PageTemplate"};
1604         my $page_content        = $passedoptions->{"PageContent"};
1605         my $page_settings       = $passedoptions->{"PageSettings"};
1607         # Check to see if the filename given already exists
1608         # in the page database.
1610         $string_handle = $database_handle->prepare('SELECT filename FROM ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($database_filename) . '_database_pages WHERE filename = \'' . $class->convert($page_filename) . '\' LIMIT 1') or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
1611         $string_handle->execute();
1613         # Check if a page with the filename given really does
1614         # exist.
1616         while (@database_page = $string_handle->fetchrow_array()){
1618                 # A page does exist so increment the count to 1.
1620                 $page_count++;
1621                 
1622         }
1624         if ($page_count ne 0){
1626                 # The page does exist so set the error value.
1628                 $error = "PageExists";
1629                 return;
1631         }
1633         # Check if certain values are undefined.
1635         if (!$page_name){
1637                 $page_name = "";
1639         }
1641         if (!$page_description){
1643                 $page_description = "";
1645         }
1647         if (!$page_section){
1649                 $page_section = "";
1651         }
1653         if (!$page_content){
1655                 $page_content = "";
1657         }
1659         my ($created_second, $created_minute, $created_hour, $created_day, $created_month, $created_year, $created_weekday, $created_yearday, $created_dst) = localtime;
1660         my $page_date = $created_year . '-' . $created_month . '-' . $created_day . ' ' . $created_hour . ':' . $created_minute . ':' . $created_second;
1662         # Add the page to the selected database.
1664         $string_handle = $database_handle->prepare('INSERT INTO ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($database_filename) . '_database_pages (filename, pagename, pagedescription, pagesection, pagetemplate, pagedata, pagesettings, lastmodified) VALUES (
1665                 \'' . $class->convert($page_filename) . '\',
1666                 \'' . $class->convert($page_name) . '\',
1667                 \'' . $class->convert($page_description) . '\',
1668                 \'' . $class->convert($page_section) . '\',
1669                 \'' . $class->convert($page_template) . '\',
1670                 \'' . $class->convert($page_content) . '\',
1671                 \'' . $class->convert($page_settings) . '\',
1672                 \'' . $class->convert($page_date) . '\'
1673         )') or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
1674         $string_handle->execute();
1678 sub deletepage{
1679 #################################################################################
1680 # deletepage: Delete a page from the selected database.                         #
1681 #                                                                               #
1682 # Usage:                                                                        #
1683 #                                                                               #
1684 # $dbmodule->deletepage(options)                                                #
1685 #                                                                               #
1686 # options       Specifies the following options in any order.                   #
1687 #                                                                               #
1688 # PageFilename  Specifies the page filename to delete.                          #
1689 #################################################################################
1691         $error = "";
1692         $errorext = "";
1694         # Get the data that was passed to the subroutine.
1696         my $class = shift;
1697         my ($passedoptions) = @_;
1698         my @page_info;
1699         my $page_found = 0;
1701         # Get the page filename.
1703         my $page_filename = $passedoptions->{"PageFilename"};
1705         # Check if the page exists before deleting it.
1707         $string_handle = $database_handle->prepare('SELECT filename FROM ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($database_filename) . '_database_pages WHERE filename = \'' . $class->convert($page_filename) . '\' LIMIT 1') or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
1708         $string_handle->execute();
1710         while (@page_info = $string_handle->fetchrow_array()){
1712                 $page_found = 1;
1714         }
1716         # Check if the page really does exist.
1718         if (!$page_found){
1720                 $error = "PageDoesNotExist";
1721                 return;
1723         }
1725         # Delete the page.
1727         $string_handle = $database_handle->prepare('DELETE FROM ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($database_filename) . '_database_pages WHERE filename = \'' . $class->convert($page_filename) . '\'') or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
1728         $string_handle->execute();
1732 sub editpage{
1733 #################################################################################
1734 # editpage: Edit a page from the selected database.                             #
1735 #                                                                               #
1736 # Usage:                                                                        #
1737 #                                                                               #
1738 # $dbmodule->editpage(options);                                                 #
1739 #                                                                               #
1740 # options       Specifies the following options in any order.                   #
1741 #                                                                               #
1742 # PageFilename          Specifies the filename to edit.                         #
1743 # PageNewFilename       Specifies the new filename to use.                      #
1744 # PageNewName           Specifies the new page name to use.                     #
1745 # PageNewDescription    Specifies the new page description to use.              #
1746 # PageNewSection        Specifies the new page section to use.                  #
1747 # PageNewTemplate       Specifies the new page template to use.                 #
1748 # PageNewContent        Specifies the new page content to use.                  #
1749 # PageNewSettings       Specifies the new page settings to use.                 #
1750 #################################################################################
1752         $error = "";
1753         $errorext = "";
1755         # Get the values passed to the subroutine.
1757         my $class = shift;
1758         my ($passedoptions) = @_;
1759         my $page_found = 0;
1760         my @page_info;
1762         # Get the data that was passed to the subroutine.
1764         my $page_filename       = $passedoptions->{"PageFilename"};
1765         my $page_newfilename    = $passedoptions->{"PageNewFilename"};
1766         my $page_newname        = $passedoptions->{"PageNewName"};
1767         my $page_newdescription = $passedoptions->{"PageNewDescription"};
1768         my $page_newsection     = $passedoptions->{"PageNewSection"};
1769         my $page_newtemplate    = $passedoptions->{"PageNewTemplate"};
1770         my $page_newcontent     = $passedoptions->{"PageNewContent"};
1771         my $page_newsettings    = $passedoptions->{"PageNewSettings"};
1773         # Check if the page with the filename given exists.
1775         $string_handle = $database_handle->prepare('SELECT filename FROM ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($database_filename) . '_database_pages WHERE filename = \'' . $class->convert($page_filename) . '\' LIMIT 1') or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
1776         $string_handle->execute();
1778         # Check if the page really does exist.
1780         while (@page_info = $string_handle->fetchrow_array()){
1782                 # The page information is found.
1784                 $page_found = 1;
1786         }
1788         # Check if the page really does exist.
1790         if (!$page_found){
1792                 $error = "PageDoesNotExist";
1793                 return;
1795         }
1797         # Get the current date.
1799         my ($created_second, $created_minute, $created_hour, $created_day, $created_month, $created_year, $created_weekday, $created_yearday, $created_dst) = localtime;
1800         my $page_date = $created_year . '-' . $created_month . '-' . $created_day . ' ' . $created_hour . ':' . $created_minute . ':' . $created_second;
1802         # Edit the selected page.
1804         $string_handle = $database_handle->prepare('UPDATE ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($database_filename) . '_database_pages SET filename = \'' . $class->convert($page_newfilename) . '\', pagename = \'' . $class->convert($page_newname) . '\', pagedescription = \'' . $class->convert($page_newdescription) . '\', pagesection = \'' . $class->convert($page_newsection) . '\', pagetemplate = \'' . $class->convert($page_newtemplate) . '\', pagedata = \'' . $class->convert($page_newcontent) . '\', pagedata = \'' . $class->convert($page_newcontent) . '\', pagesettings = \'' . $class->convert($page_newsettings) . '\', lastmodified = \'' . $page_date . '\' WHERE filename = \'' . $class->convert($page_filename) . '\'')  or ( $error = "DatabaseError", $errorext = $database_handle->errstr, return );
1805         $string_handle->execute();
1809 sub movepage{
1810 #################################################################################
1811 # movepage: Moves a page from the old database to the new database.             #
1812 #                                                                               #
1813 # Usage:                                                                        #
1814 #                                                                               #
1815 # $dbmodule->movepage(options);                                                 #
1816 #                                                                               #
1817 # options       Specifies the following options in any order.                   #
1818 #                                                                               #
1819 # PageFilename  Specifies the page with the filename to move.                   #
1820 #################################################################################
1822         $error = "";
1823         $errorext = "";
1825         # Get the values passed to the subroutine.
1827         my $class = shift;
1828         my ($passedoptions) = @_;
1830         my (%database_page, $database_page);
1831         my ($pagefilename, $pagename, $pagedescription, $pagesection, $pagetemplate, $pagedata, $pagesettings, $pagelastmodified);
1832         my @page_info;
1833         my $page_found = 0;
1835         # Get the data that was passed to the subroutine.
1837         my $page_filename = $passedoptions->{"PageFilename"};
1839         # Check if the page with the filename given exists.
1841         $string_handle = $database_handle->prepare('SELECT filename, pagename, pagedescription, pagesection, pagetemplate, pagedata, pagesettings, lastmodified FROM ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($database_filename) . '_database_pages WHERE filename = \'' . $class->convert($page_filename) . '\' LIMIT 1') or ( $error = "OldDatabaseError", $errorext = $database_handle->errstr, return );
1842         $string_handle->execute();
1844         # Check if the page really does exist.
1846         while (@page_info = $string_handle->fetchrow_array()){
1848                 # Get the values from the array.
1850                 $pagefilename           = decode_utf8($page_info[0]);
1851                 $pagename               = decode_utf8($page_info[1]);
1852                 $pagedescription        = decode_utf8($page_info[2]);
1853                 $pagesection            = decode_utf8($page_info[3]);
1854                 $pagetemplate           = decode_utf8($page_info[4]);
1855                 $pagedata               = decode_utf8($page_info[5]);
1856                 $pagesettings           = decode_utf8($page_info[6]);
1857                 $pagelastmodified       = decode_utf8($page_info[7]);
1859                 # Put the values into the page hash.
1861                 %database_page = (
1862                         "PageFilename"          => $pagefilename,
1863                         "PageName"              => $pagename,
1864                         "PageDescription"       => $pagedescription,
1865                         "PageSection"           => $pagesection,
1866                         "PageTemplate"          => $pagetemplate,
1867                         "PageContent"           => $pagedata,
1868                         "PageSettings"          => $pagesettings,
1869                         "PageLastModified"      => $pagelastmodified,
1870                 );
1872                 # The page information is found.
1874                 $page_found = 1;
1876         }
1878         # Check if the page really does exist.
1880         if (!$page_found){
1882                 $error = "PageDoesNotExist";
1883                 return;
1885         }
1887         # Check if the page with the filename given already exists in
1888         # the database the page is being moved to.
1890         $page_found = 0;
1891         @page_info = ();
1893         $string_handle = $database_handle->prepare('SELECT filename FROM ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($second_database_filename) . '_database_pages WHERE filename = \'' . $class->convert($page_filename) . '\' LIMIT 1') or ( $error = "NewDatabaseError", $errorext = $database_handle->errstr, return );
1894         $string_handle->execute();
1896         while (@page_info = $string_handle->fetchrow_array()){
1898                 $page_found = 1;
1900         }
1902         # Check if the page really does exist.
1904         if ($page_found){
1906                 $error = "PageAlreadyExists";
1907                 return;
1909         }
1911         # Add the page to the new database.
1913         $string_handle = $database_handle->prepare('INSERT INTO ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($second_database_filename) . '_database_pages (filename, pagename, pagedescription, pagesection, pagetemplate, pagedata, pagesettings, lastmodified) VALUES (
1914                 \'' . $class->convert($database_page{"PageFilename"}) . '\',
1915                 \'' . $class->convert($database_page{"PageName"}) . '\',
1916                 \'' . $class->convert($database_page{"PageDescription"}) . '\',
1917                 \'' . $class->convert($database_page{"PageSection"}) . '\',
1918                 \'' . $class->convert($database_page{"PageTemplate"}) . '\',
1919                 \'' . $class->convert($database_page{"PageContent"}) . '\',
1920                 \'' . $class->convert($database_page{"PageSettings"}) . '\',
1921                 \'' . $class->convert($database_page{"PageLastModified"}) . '\'
1922         )') or ( $error = "NewDatabaseError", $errorext = $database_handle->errstr, return );
1923         $string_handle->execute();
1925         # Delete the page from the old database.
1927         $string_handle = $database_handle->prepare('DELETE FROM ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($database_filename) . '_database_pages WHERE filename = \'' . $class->convert($database_page{"PageFilename"}) . '\'') or ( $error = "OldDatabaseError", $errorext = $database_handle->errstr, return );
1928         $string_handle->execute();
1932 sub copypage{
1933 #################################################################################
1934 # copypage: Copies a page from the old database to the new database.            #
1935 #                                                                               #
1936 # Usage:                                                                        #
1937 #                                                                               #
1938 # $dbmodule->copypage(options);                                                 #
1939 #                                                                               #
1940 # options       Specifies the following options in any order.                   #
1941 #                                                                               #
1942 # PageFilename  Specifies the page with the filename to copy.                   #
1943 #################################################################################
1945         $error = "";
1946         $errorext = "";
1948         # Get the values passed to the subroutine.
1950         my $class = shift;
1951         my ($passedoptions) = @_;
1953         my (%database_page, $database_page);
1954         my ($pagefilename, $pagename, $pagedescription, $pagesection, $pagetemplate, $pagedata, $pagesettings, $pagelastmodified);
1955         my @page_info;
1956         my $page_found = 0;
1958         # Get the data that was passed to the subroutine.
1960         my $page_filename = $passedoptions->{"PageFilename"};
1962         # Check if the page with the filename given exists.
1964         $string_handle = $database_handle->prepare('SELECT filename, pagename, pagedescription, pagesection, pagetemplate, pagedata, pagesettings, lastmodified FROM ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($database_filename) . '_database_pages WHERE filename = \'' . $class->convert($page_filename) . '\' LIMIT 1') or ( $error = "OldDatabaseError", $errorext = $database_handle->errstr, return );
1965         $string_handle->execute();
1967         # Check if the page really does exist.
1969         while (@page_info = $string_handle->fetchrow_array()){
1971                 # Get the values from the array.
1973                 $pagefilename           = decode_utf8($page_info[0]);
1974                 $pagename               = decode_utf8($page_info[1]);
1975                 $pagedescription        = decode_utf8($page_info[2]);
1976                 $pagesection            = decode_utf8($page_info[3]);
1977                 $pagetemplate           = decode_utf8($page_info[4]);
1978                 $pagedata               = decode_utf8($page_info[5]);
1979                 $pagesettings           = decode_utf8($page_info[6]);
1980                 $pagelastmodified       = decode_utf8($page_info[7]);
1982                 # Put the values into the page hash.
1984                 %database_page = (
1985                         "PageFilename"          => $pagefilename,
1986                         "PageName"              => $pagename,
1987                         "PageDescription"       => $pagedescription,
1988                         "PageSection"           => $pagesection,
1989                         "PageTemplate"          => $pagetemplate,
1990                         "PageContent"           => $pagedata,
1991                         "PageSettings"          => $pagesettings,
1992                         "PageLastModified"      => $pagelastmodified,
1993                 );
1995                 # The page information is found.
1997                 $page_found = 1;
1999         }
2001         # Check if the page really does exist.
2003         if (!$page_found){
2005                 $error = "PageDoesNotExist";
2006                 return;
2008         }
2010         # Check if the page with the filename given already exists in
2011         # the database the page is being moved to.
2013         $page_found = 0;
2014         @page_info = ();
2016         $string_handle = $database_handle->prepare('SELECT filename FROM ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($second_database_filename) . '_database_pages WHERE filename = \'' . $class->convert($page_filename) . '\' LIMIT 1') or ( $error = "NewDatabaseError", $errorext = $database_handle->errstr, return );
2017         $string_handle->execute();
2019         while (@page_info = $string_handle->fetchrow_array()){
2021                 $page_found = 1;
2023         }
2024         
2025         # Check if the page really does exist.
2027         if ($page_found){
2029                 $error = "PageAlreadyExists";
2030                 return;
2032         }
2034         # Add the page to the new database.
2036         $string_handle = $database_handle->prepare('INSERT INTO ' . $class->convert($options{"TablePrefix"}) . '_' . $class->convert($second_database_filename) . '_database_pages (filename, pagename, pagedescription, pagesection, pagetemplate, pagedata, pagesettings, lastmodified) VALUES (
2037                 \'' . $class->convert($database_page{"PageFilename"}) . '\',
2038                 \'' . $class->convert($database_page{"PageName"}) . '\',
2039                 \'' . $class->convert($database_page{"PageDescription"}) . '\',
2040                 \'' . $class->convert($database_page{"PageSection"}) . '\',
2041                 \'' . $class->convert($database_page{"PageTemplate"}) . '\',
2042                 \'' . $class->convert($database_page{"PageContent"}) . '\',
2043                 \'' . $class->convert($database_page{"PageSettings"}) . '\',
2044                 \'' . $class->convert($database_page{"PageLastModified"}) . '\'
2045         )') or ( $error = "NewDatabaseError", $errorext = $database_handle->errstr, return );
2046         $string_handle->execute();
2050 #################################################################################
2051 # Filter subroutines.                                                           #
2052 #################################################################################
2054 sub connectfilter{
2055 #################################################################################
2056 # connectfilter: Connect to the filter database.                                #
2057 #                                                                               #
2058 # Usage:                                                                        #
2059 #                                                                               #
2060 # $dbmodule->connectfilter(missingignore);                                      #
2061 #                                                                               #
2062 # missingignore Ignore error about database being missing.                      #
2063 #################################################################################
2065         $error = "";
2066         $errorext = "";
2068         my $class = shift;
2069         my $ignoremissing = shift;
2070         my @filterdb_check;
2071         my $filterdb_exists = 0;
2073         # Check if the template database exists.
2075         $string_handle = $database_handle->prepare('SHOW TABLES LIKE \'' . $class->convert($options{"TablePrefix"}) . '_filters\'') or ( $error = "TemplateDatabaseError", $errorext = $database_handle->errstr, return );
2076         $string_handle->execute();
2078         while (@filterdb_check = $string_handle->fetchrow_array()){
2080                 $filterdb_exists = 1;
2082         }
2084         if (!$filterdb_exists){
2086                 if (!$ignoremissing){
2088                         $error = "FilterDatabaseDoesNotExist";
2089                         return;
2091                 }
2093         }
2097 sub disconnectfilter{
2098 #################################################################################
2099 # disconnectfilter: Disconnect from the filter database.                        #
2100 #                                                                               #
2101 # Usage:                                                                        #
2102 #                                                                               #
2103 # $dbmodule->disconnectfilter();                                                #
2104 #################################################################################
2106         # This subroutine is not used.
2110 sub getfilterlist{
2111 #################################################################################
2112 # getfilterlist: Gets the list of filters in the filter database.               #
2113 #                                                                               #
2114 # Usage:                                                                        #
2115 #                                                                               #
2116 # $dbmodule->getfilterlist();                                                   #
2117 #################################################################################
2119         $error = "";
2120         $errorext = "";
2122         my $class = shift;
2124         my @filter_list;
2125         my @filter_data;
2127         # Get the list of filters available.
2129         $string_handle  = $database_handle->prepare('SELECT id, priority FROM ' . $class->convert($options{"TablePrefix"}) . '_filters ORDER BY priority ASC') or ( $error = "FilterDatabaseError", $errorext = $database_handle->errstr, return );
2130         $string_handle->execute();
2132         while (@filter_data = $string_handle->fetchrow_array()){
2134                 # Add the filter to the list of available filters.
2136                 push(@filter_list, decode_utf8($filter_data[0]));
2138         }
2140         return @filter_list;
2144 sub getfilterinfo{
2145 #################################################################################
2146 # getfilterinfo: Gets information about the filter.                             #
2147 #                                                                               #
2148 # Usage:                                                                        #
2149 #                                                                               #
2150 # $dbmodule->getfilterinfo(options);                                            #
2151 #                                                                               #
2152 # options       Specifies the following options in any order.                   #
2153 #                                                                               #
2154 # FilterID      Specifies the filter ID number to get information from.         #
2155 #################################################################################
2157         $error = "";
2158         $errorext = "";
2160         # Get the values passed to the subroutine.
2162         my $class               = shift;
2163         my ($passedoptions)     = @_;
2165         my %filter_info;
2166         my $filter_exists       = 0;
2167         my @filter_data;
2169         # Get the values that are in the hash.
2171         my $filter_id           = $passedoptions->{"FilterID"};
2173         $string_handle = $database_handle->prepare('SELECT id, priority, findsetting, replacesetting, notes FROM ' . $class->convert($options{"TablePrefix"}) . '_filters where id = \'' . $class->convert($filter_id) . '\'') or ( $error = "FilterDatabaseError", $errorext = $database_handle->errstr, return );
2174         $string_handle->execute();
2176         # Get the filter information.
2178         while (@filter_data = $string_handle->fetchrow_array()){
2180                 $filter_info{"FilterID"}        = decode_utf8($filter_data[0]);
2181                 $filter_info{"FilterPriority"}  = decode_utf8($filter_data[1]);
2182                 $filter_info{"FilterFind"}      = decode_utf8($filter_data[2]);
2183                 $filter_info{"FilterReplace"}   = decode_utf8($filter_data[3]);
2184                 $filter_info{"FilterNotes"}     = decode_utf8($filter_data[4]);
2186                 $filter_exists = 1;
2188         }
2190         # Check if the filter exists.
2192         if (!$filter_exists){
2194                 # The filter does not exist so return
2195                 # an error value.
2197                 $error = "FilterDoesNotExist";
2198                 return;
2200         }
2202         # Return the filter information.
2204         return %filter_info;
2208 sub addfilter{
2209 #################################################################################
2210 # addfilter: Adds a filter to the filter database.                              #
2211 #                                                                               #
2212 # Usage:                                                                        #
2213 #                                                                               #
2214 # $dbmodule->addfilter(options);                                                #
2215 #                                                                               #
2216 # options       Specifies the following options in any order.                   #
2217 #                                                                               #
2218 # FindFilter    Specifies the find filter to add.                               #
2219 # ReplaceFilter Specifies the replace filter to add.                            #
2220 # Priority      Specifies the filter priority to use.                           #
2221 # Notes         Specifies the notes to use.                                     #
2222 #################################################################################
2224         $error = "";
2225         $errorext = "";
2227         # Get the values passed to the subroutine.
2229         my $class = shift;
2230         my ($passedoptions) = @_;
2232         # Define some variables for later.
2234         my @database_filters;
2235         my @filterdb_check;
2236         my @filterid_list;
2237         my @filterid_check;
2238         my $nofiltertable = 0;
2239         my $filter_found = 0;
2240         my $filter_count = 0;
2241         my $filterdb_exists = 0;
2242         my $filter_id;
2243         my $new_id;
2245         # Get the values from the hash.
2247         my $filter_find         = $passedoptions->{"FindFilter"};
2248         my $filter_replace      = $passedoptions->{"ReplaceFilter"};
2249         my $filter_priority     = $passedoptions->{"Priority"};
2250         my $filter_notes        = $passedoptions->{"Notes"};
2252         # Check if the template database exists.
2254         $string_handle = $database_handle->prepare('SHOW TABLES LIKE \'' . $class->convert($options{"TablePrefix"}) . '_filters\'') or ( $error = "FilterDatabaseError", $errorext = $database_handle->errstr, return );
2255         $string_handle->execute();
2257         while (@filterdb_check = $string_handle->fetchrow_array()){
2259                 $filterdb_exists = 1;
2261         }
2263         # Check if certain values are undefined and if they
2264         # are then set them blank.
2266         if (!$filter_find){
2268                 $filter_find = "";
2270         }
2272         if (!$filter_replace){
2274                 $filter_replace = "";
2276         }
2278         if (!$filter_priority){
2280                 $filter_priority = 1;
2282         }
2284         if (!$filter_notes){
2286                 $filter_notes = "";
2288         }
2290         # Check if there is really no filter table.
2292         if (!$filterdb_exists){
2294                 # Create the filter database table.
2296                 $string_handle = $database_handle->prepare('CREATE TABLE ' . $class->convert($options{"TablePrefix"}) . '_filters (
2297                         id int(7) primary key,
2298                         priority int(5),
2299                         findsetting varchar(1024),
2300                         replacesetting varchar(1024),
2301                         notes text
2302                 ) DEFAULT CHARSET=utf8') or ( $error = "FilterDatabaseError", $errorext = $database_handle->errstr, return );
2303                 $string_handle->execute();
2305         }
2307         # Find the lowest filter identification number available.
2309         $string_handle = $database_handle->prepare('SELECT id FROM ' . $class->convert($options{"TablePrefix"}) . '_filters ORDER BY id ASC') or ( $error = "FilterDatabaseError", $errorext = $database_handle->errstr, return );
2310         $string_handle->execute();
2312         while (@database_filters = $string_handle->fetchrow_array()){
2314                 $filter_id      = decode_utf8($database_filters[0]);
2316                 # Add the filter identification to the list of filter IDs.
2318                 push(@filterid_list, $filter_id);
2320         }
2322         $filter_id = "";
2324         # Process each filter looking for a blank available filter.
2326         foreach $filter_id (@filterid_list){
2328                 # Check the next filter ID to see if it's blank.
2330                 $new_id = $filter_id + 1;
2332                 $string_handle = $database_handle->prepare('SELECT id FROM ' . $class->convert($options{"TablePrefix"}) . '_filters WHERE id = \'' . $class->convert($new_id) . '\'') or ( $error = "FilterDatabaseError", $errorext = $database_handle->errstr, return );
2333                 $string_handle->execute();
2335                 # Get the filter identification number.
2337                 while (@filterid_check = $string_handle->fetchrow_array()){
2339                         $filter_found = 1;
2341                 }
2343                 # Check if a filter was found.
2345                 if (!$filter_found){
2347                         # No filter was found using this ID so exit the loop.
2349                         last;
2351                 }
2353                 # Increment the filter count and reset the filter found value.
2355                 $filter_count++;
2356                 $filter_found = 0;
2357                 $new_id = 0;
2359         }
2361         # Check if there were any filters in the filters database.
2363         if (!$filter_count && !$new_id){
2365                 # There were no filters in the filters database so set
2366                 # the new filter identification value to 1.
2368                 $new_id = 1;
2370         }
2372         # Add the filter to the filter database.
2374         $string_handle = $database_handle->prepare('INSERT INTO ' . $class->convert($options{"TablePrefix"}) . '_filters (id, priority, findsetting, replacesetting, notes) VALUES (
2375                 \'' . $class->convert($new_id) . '\',
2376                 \'' . $class->convert($filter_priority) . '\',
2377                 \'' . $class->convert($filter_find) . '\',
2378                 \'' . $class->convert($filter_replace) .'\',
2379                 \'' . $class->convert($filter_notes) . '\'
2380         )') or ( $error = "FilterDatabaseError", $errorext = $database_handle->errstr, return );
2381         $string_handle->execute();
2386 sub editfilter{
2387 #################################################################################
2388 # editfilter: Edits a filter in the filter database.                            #
2389 #                                                                               #
2390 # Usage:                                                                        #
2391 #                                                                               #
2392 # $dbmodule->editfilter(options);                                               #
2393 #                                                                               #
2394 # options       Specifies the following options in any order.                   #
2395 #                                                                               #
2396 # FilterID              Specifies the filter to edit.                           #
2397 # NewFindFilter         Specifies the new find filter setting.                  #
2398 # NewReplaceFilter      Specifies the new replace filter setting.               #
2399 # NewFilterPriority     Specifies the new filter priority setting.              #
2400 # NewFilterNotes        Specifies the new notes for the filter.                 #
2401 #################################################################################
2403         $error = "";
2404         $errorext = "";
2406         # Get the values passed to the subroutine.
2408         my $class = shift;
2409         my ($passedoptions) = @_;
2411         my @filter_data;
2412         my $filter_exists = 1;
2413         my $blankfile = 0;
2415         # Get the values from the hash.
2417         my $filter_id           = $passedoptions->{"FilterID"};
2418         my $filter_newfind      = $passedoptions->{"NewFindFilter"};
2419         my $filter_newreplace   = $passedoptions->{"NewReplaceFilter"};
2420         my $filter_newpriority  = $passedoptions->{"NewFilterPriority"};
2421         my $filter_newnotes     = $passedoptions->{"NewFilterNotes"};
2423         # Check if the filter exists before editing it.
2425         $string_handle = $database_handle->prepare('SELECT id FROM ' . $class->convert($options{"TablePrefix"}) . '_filters where id = \'' . $class->convert($filter_id) . '\'') or ( $error = "FilterDatabaseError", $errorext = $database_handle->errstr, return );
2426         $string_handle->execute();
2428         # Check if the filter exists.
2430         while (@filter_data = $string_handle->fetchrow_array()){
2432                 $filter_exists = 1;
2434         }       
2436         # Check if the filter really does exist.
2438         if (!$filter_exists){
2440                 # The filter does not exist so return
2441                 # an error value.
2443                 $error = "FilterDoesNotExist";
2444                 return;
2446         }
2448         # Edit the selected filter.
2450         $string_handle = $database_handle->prepare('UPDATE ' . $class->convert($options{"TablePrefix"}) . '_filters SET
2451                 findsetting = \'' . $class->convert($filter_newfind) . '\',
2452                 replacesetting = \'' . $class->convert($filter_newreplace) . '\',
2453                 priority = \'' . $class->convert($filter_newpriority) . '\',
2454                 notes = \'' . $class->convert($filter_newnotes) . '\'
2455         WHERE id = \'' . $class->convert($filter_id) . '\'') or ( $error = "FilterDatabaseError", $errorext = $database_handle->errstr, return );       
2456         $string_handle->execute();
2458         return;
2462 sub deletefilter{
2463 #################################################################################
2464 # deletefilter: Deletes a filter from the filter database.                      #
2465 #                                                                               #
2466 # Usage:                                                                        #
2467 #                                                                               #
2468 # $dbmodule->deletefilter(options);                                             #
2469 #                                                                               #
2470 # options       Specifies the following options in any order.                   #
2471 #                                                                               #
2472 # FilterID      Specifies the filter to delete from the filter database.        #
2473 #################################################################################
2475         $error = "";
2476         $errorext = "";
2478         # Get the values passed to the subroutine.
2480         my $class = shift;
2481         my ($passedoptions) = @_;
2483         my $filter_exists = 0;
2484         my @filter_data;
2486         # Get the values from the hash.
2488         my $filter_id           = $passedoptions->{"FilterID"};
2490         # Check if the filter exists before deleting.
2492         $string_handle = $database_handle->prepare('SELECT id FROM ' . $class->convert($options{"TablePrefix"}) . '_filters where id = \'' . $class->convert($filter_id) . '\'') or ( $error = "FilterDatabaseError", $errorext = $database_handle->errstr, return );
2493         $string_handle->execute();
2495         while (@filter_data = $string_handle->fetchrow_array()){
2497                 $filter_exists = 1;
2499         }
2501         # Check to see if the filter really does exist.
2503         if (!$filter_exists){
2505                 $error = "FilterDoesNotExist";
2506                 return;
2508         }
2510         # Delete the filter from the filter database.
2512         $string_handle = $database_handle->prepare('DELETE FROM ' . $class->convert($options{"TablePrefix"}) . '_filters where id = \'' . $class->convert($filter_id) . '\'') or ( $error = "FilterDatabaseError", $errorext = $database_handle->errstr, return );
2513         $string_handle->execute();
2517 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