#!/usr/bin/perl # Create Functions for Perl/PostgreSQL version 1.0 # Copyright 2001, Mark Nielsen # All rights reserved. # This Copyright notice was copied and modified from the Perl # Copyright notice. # This program is free software; you can redistribute it and/or modify # it under the terms of either: # a) the GNU General Public License as published by the Free # Software Foundation; either version 1, or (at your option) any # later version, or # b) the "Artistic License" which comes with this Kit. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either # the GNU General Public License or the Artistic License for more details. # You should have received a copy of the Artistic License with this # Kit, in the file named "Artistic". If not, I'll be glad to provide one. # You should also have received a copy of the GNU General Public License # along with this program in the file named "Copying". If not, write to the # Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA # 02111-1307, USA or visit their web page on the internet at # https://www.gnu.org/copyleft/gpl.html. package PACKAGE::Set_Info; use strict; use Apache; use DBI; use CGI; use PACKAGE::Misc; use PACKAGE::Constants; sub new { my $Class = shift; my %Args = @_; my $self = {}; my $Global = PACKAGE::Constants::Get_Constants; ### Get the database connection. $self->{'dbh'} = $Global->{'dbh'}; ## Load up the queries. if (exists $Args{'query'}) {$self->{'query'} = $Args{'query'};} else {$self->{'query'} = new CGI;} bless $self,$Class; return ($self); } #-------------------------------------------------------------------------- sub set_general { my $self = shift; my %Args = @_; ### You should NEVER use this method manually. ## Set the default result to an error number. my $Result = -13; ## See if we specified a command, error if not. my $Command = $Args{'command'}; my @Commands = ('insert','update','delete','purge','unpurge','purgeone', 'unpurgeone','undelete','copy','change'); if (!(grep($_ eq $Command, @Commands))) {return (-11);} ## See if we specified an Id, if not error out. my $Id = $Args{'id'}; if (($Id < 1) && !(grep($_ ne $Command,('insert','purge','unpurge')))) {return (-10);} my $TableName = $Args{'tablename'}; my $Columns = $Args{'columns'}; ### If we somehow didn't get the tablename or columns, return error. ### This should be impossible since they are supplies by other ### functions. if (($TableName eq "") || ((@$Columns) < 1)) {return (-14);} if (grep($_ eq $Command,('delete','undelete','purgeone','unpurgeone','copy'))) { my $Sql = "select sql_$TableName\_$Command\(?) as $Command"; my $sth = $self->{'dbh'}->prepare($Sql); $sth->execute($Id); my $ref = $sth->fetchrow_hashref(); $Result = $ref->{$Command}; } elsif (grep($_ eq $Command, ('insert','purge','unpurge'))) { my $Sql = "select sql_$TableName\_$Command\() as $Command"; my $sth = $self->{'dbh'}->prepare($Sql); $sth->execute(); my $ref = $sth->fetchrow_hashref(); $Result = $ref->{$Command}; } ### Use the update function to explicity define every field. ### Use the change function when you want to specify only certain ### fields. elsif ($Command eq "update") { my $query = $self->{'query'}; if (exists $Args{'query'}) {$query = $Args{'query'};} ### If we were supplied a query, use it instead. if (exists $Args{'query'}) {$query = $Args{'query'};} my @Fields = @$Columns; my @Values = (); my $String = ""; my $args = \%Args; foreach my $Field (@Fields) { my $Value = ''; ## If we supplied a list of fields, use them. if (exists $args->{'fields'}->{$Field}) { $Value = $args->{'fields'}->{$Field};} else {$Value = $query->param($Field) || '';} if ($Value eq "") {$Value = '';} $Value = GES::Misc->Clean_String($Value); push (@Values,$Value); $String .= ",?"; } my $Sql = "select sql_$TableName\_update(? $String) as update"; my $sth = $self->{'dbh'}->prepare($Sql); $sth->execute($Id,@Values); my $ref = $sth->fetchrow_hashref(); $Result = $ref->{'update'}; } ### This function is used when you only want to change the values and ### fields you specify. It will work with no fields specified, which is ### just a copy in the backup table. elsif ($Command eq "change") { my $query = $self->{'query'}; if (exists $Args{'query'}) {$query = $Args{'query'};} ### If we were supplied a query, use it instead. if (exists $Args{'query'}) {$query = $Args{'query'};} my @Fields = @$Columns; my @Values = (); my $String = ""; my @Params = $query->param(); my $Sql = "select * from $TableName where $TableName\_id = ?"; my $sth = $self->{'dbh'}->prepare($Sql); $sth->execute($Id); my $No = $sth->rows(); ## If we don't have one thing to change, return an error. if ($No < 1) {return (-100);} my $Previous = $sth->fetchrow_hashref(); my $args = \%Args; foreach my $Field (@Fields) { my $Value = ''; ## If we supplied a list of fields, use them. if (exists $args->{'fields'}->{$Field}) { $Value = $args->{'fields'}->{$Field};} elsif (grep($_ eq $Field, @Params)) { $Value = $query->param($Field); } else {$Value = $Previous->{$Field};} if ($Value eq "") {$Value = '';} $Value = GES::Misc->Clean_String($Value); push (@Values,$Value); $String .= ",?"; } my $Sql = "select sql_$TableName\_update(? $String) as update"; my $sth = $self->{'dbh'}->prepare($Sql); $sth->execute($Id,@Values); my $ref = $sth->fetchrow_hashref(); $Result = $ref->{'update'}; } return ($Result); }