Copying over fixed Crud from HEAD.

This commit is contained in:
Colin Kuskie 2009-05-06 14:06:28 -07:00
parent 907ce09355
commit dc9347d7cd

View file

@ -20,11 +20,11 @@ use strict;
use Class::InsideOut qw(readonly private id register); use Class::InsideOut qw(readonly private id register);
use JSON; use JSON;
use Tie::IxHash; use Tie::IxHash;
use Clone qw/clone/;
use WebGUI::DateTime; use WebGUI::DateTime;
use WebGUI::Exception; use WebGUI::Exception;
use WebGUI::Utility; use WebGUI::Utility;
private objectData => my %objectData; private objectData => my %objectData;
readonly session => my %session; readonly session => my %session;
@ -438,8 +438,14 @@ sub crud_updateTable {
my $fieldType = $control->getDatabaseFieldType; my $fieldType = $control->getDatabaseFieldType;
my $isKey = $properties->{$property}{isQueryKey}; my $isKey = $properties->{$property}{isQueryKey};
my $defaultValue = $properties->{$property}{defaultValue}; my $defaultValue = $properties->{$property}{defaultValue};
if ($properties->{$property}{serialize}) {
$defaultValue = JSON->new->canonical->encode($defaultValue);
}
my $notNullClause = ($isKey || $defaultValue ne "") ? "not null" : ""; my $notNullClause = ($isKey || $defaultValue ne "") ? "not null" : "";
my $defaultClause = "default ".$dbh->quote($defaultValue) if ($defaultValue ne ""); my $defaultClause = '';
if ($fieldType !~ /(?:text|blob)$/i) {
$defaultClause = "default ".$dbh->quote($defaultValue) if ($defaultValue ne "");
}
if (exists $tableFields{$property}) { if (exists $tableFields{$property}) {
my $changed = 0; my $changed = 0;
@ -549,12 +555,11 @@ sub get {
# return a specific property # return a specific property
if (defined $name) { if (defined $name) {
return $objectData{id $self}{$name}; return clone $objectData{id $self}{$name};
} }
# return a copy of all properties # return a copy of all properties
my %copy = %{$objectData{id $self}}; return clone $objectData{id $self};
return \%copy;
} }
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -920,9 +925,11 @@ B<WARNING:> As part of it's validation mechanisms, update() will delete any elem
sub update { sub update {
my ($self, $data) = @_; my ($self, $data) = @_;
my $session = $self->session;
# validate incoming data # validate incoming data
my $properties = $self->crud_getProperties($self->session); my $properties = $self->crud_getProperties($session);
my $dbData = { $self->crud_getTableKey($session) => $self->getId };
foreach my $property (keys %{$data}) { foreach my $property (keys %{$data}) {
# don't save fields that aren't part of our definition # don't save fields that aren't part of our definition
@ -937,20 +944,23 @@ sub update {
} }
# serialize if needed # serialize if needed
if ($properties->{$property}{serialize} && $data->{property} ne "") { if ($properties->{$property}{serialize} && $data->{$property} ne "") {
$data->{property} = JSON->new->canonical->encode($data->{property}); $dbData->{$property} = JSON->new->canonical->encode($data->{$property});
}
else {
$dbData->{$property} = $data->{$property};
} }
} }
# set last updated # set last updated
$data->{lastUpdated} ||= WebGUI::DateTime->new($self->session, time())->toDatabase; $data->{lastUpdated} ||= WebGUI::DateTime->new($session, time())->toDatabase;
# update memory # update memory
my $refId = id $self; my $refId = id $self;
%{$objectData{$refId}} = (%{$objectData{$refId}}, %{$data}); %{$objectData{$refId}} = (%{$objectData{$refId}}, %{$data});
# update the database # update the database
$self->session->db->setRow($self->crud_getTableName($self->session), $self->crud_getTableKey($self->session), $objectData{$refId}); $session->db->setRow($self->crud_getTableName($session), $self->crud_getTableKey($session), $dbData);
return 1; return 1;
} }