fixed: Thingy: field sequence not imported correctly for existing Thingies

This commit is contained in:
Yung Han Khoe 2008-04-08 16:12:10 +00:00
parent 4f0ea8d9ad
commit 539957df52
3 changed files with 28 additions and 7 deletions

View file

@ -8,6 +8,7 @@
- fixed: Thingy: "add" and "edit" permission problem - fixed: Thingy: "add" and "edit" permission problem
- fixed: EMail field rejects some valid email addresses - fixed: EMail field rejects some valid email addresses
- fixed: Calendar date localization can be broken - fixed: Calendar date localization can be broken
- fixed: Thingy: field sequence not imported correctly for existing Thingies
7.5.9 7.5.9
- fixed: Collaboration System attachments follow site's max size instead of CS's - fixed: Collaboration System attachments follow site's max size instead of CS's

View file

@ -425,6 +425,11 @@ If this collateral data set is not grouped by assetId, but by another column the
If you've specified a setName you may also set a value for that set. Defaults to the value for this id from the wobject properties. If you've specified a setName you may also set a value for that set. Defaults to the value for this id from the wobject properties.
=head3 updateSequence
If set to "1" an update of existing collateral data will also update the sequence number. This option is used when
importing collateral data in a package. Defaults to "0".
=cut =cut
sub setCollateral { sub setCollateral {
@ -436,11 +441,13 @@ sub setCollateral {
my $useAssetId = shift; my $useAssetId = shift;
my $setName = shift || "assetId"; my $setName = shift || "assetId";
my $setValue = shift || $self->get($setName); my $setValue = shift || $self->get($setName);
my $updateSequence = shift;
my $db = $self->session->db; my $db = $self->session->db;
my ($key, $seq, $dbkeys, $dbvalues); my ($key, $seq, $dbkeys, $dbvalues);
my $counter = 0; my $counter = 0;
my $sql; my $sql;
if ($properties->{$keyName} eq "new" || $properties->{$keyName} eq "") {
if ($properties->{$keyName} eq "new" || $properties->{$keyName} eq "") {
$properties->{$keyName} = $self->session->id->generate(); $properties->{$keyName} = $self->session->id->generate();
$sql = "insert into ".$db->dbh->quote_identifier($table)." ("; $sql = "insert into ".$db->dbh->quote_identifier($table)." (";
my $dbkeys = ""; my $dbkeys = "";
@ -468,7 +475,7 @@ sub setCollateral {
} else { } else {
$sql = "update ".$db->dbh->quote_identifier($table)." set "; $sql = "update ".$db->dbh->quote_identifier($table)." set ";
foreach my $key (keys %{$properties}) { foreach my $key (keys %{$properties}) {
unless ($key eq "sequenceNumber") { unless ($key eq "sequenceNumber" && $updateSequence ne "1") {
$sql .= ',' if ($counter++ > 0); $sql .= ',' if ($counter++ > 0);
$sql .= $db->dbh->quote_identifier($key)."=".$db->quote($properties->{$key}); $sql .= $db->dbh->quote_identifier($key)."=".$db->quote($properties->{$key});
} }

View file

@ -253,6 +253,10 @@ The id of the field that should be deleted.
The id of the thing to which the field to be deleted belongs. The id of the thing to which the field to be deleted belongs.
=head3 keepSequenceNumbers
Boolean indicating that the sequence numbers should not be changed. This is used by importAssetCollateralData.
=cut =cut
sub deleteField { sub deleteField {
@ -260,12 +264,20 @@ sub deleteField {
my $self = shift; my $self = shift;
my $fieldId = shift; my $fieldId = shift;
my $thingId = shift; my $thingId = shift;
my $keepSequenceNumbers = shift;
my $db = $self->session->db; my $db = $self->session->db;
my $error = $self->session->errorHandler; my $error = $self->session->errorHandler;
my $deletedSequenceNumber;
my ($deletedSequenceNumber) = $db->quickArray("select sequenceNumber from Thingy_fields where fieldId = ?",[$fieldId]); if ($keepSequenceNumbers ne "1"){
($deletedSequenceNumber) = $db->quickArray("select sequenceNumber from Thingy_fields where fieldId = ?"
,[$fieldId]);
}
$self->deleteCollateral("Thingy_fields","fieldId",$fieldId); $self->deleteCollateral("Thingy_fields","fieldId",$fieldId);
$db->write("update Thingy_fields set sequenceNumber = sequenceNumber -1 where sequenceNumber > ?",[$deletedSequenceNumber]); if ($keepSequenceNumbers ne "1"){
$db->write("update Thingy_fields set sequenceNumber = sequenceNumber -1 where sequenceNumber > ?"
,[$deletedSequenceNumber]);
}
my ($columnExists) = $db->quickArray("show columns from ".$db->dbh->quote_identifier("Thingy_".$thingId) my ($columnExists) = $db->quickArray("show columns from ".$db->dbh->quote_identifier("Thingy_".$thingId)
." like ".$db->quote("field_".$fieldId)); ." like ".$db->quote("field_".$fieldId));
@ -792,9 +804,10 @@ sub importAssetCollateralData {
my ($fieldIdExists) = $session->db->quickArray("select fieldId from Thingy_fields where fieldId = ? and thingId = ? ",[$field->{fieldId},$field->{thingId}]); my ($fieldIdExists) = $session->db->quickArray("select fieldId from Thingy_fields where fieldId = ? and thingId = ? ",[$field->{fieldId},$field->{thingId}]);
if ($assetExists && $fieldIdExists){ if ($assetExists && $fieldIdExists){
# update existing field # update existing field
$error->info("Updating Field, label: ".$field->{label}.", id: ".$field->{fieldId}); $error->info("Updating Field, label: ".$field->{label}.", id: ".$field->{fieldId}.",seq :"
.$field->{sequenceNumber});
$self->_updateFieldType($field->{fieldType},$field->{fieldId},$field->{thingId},$field->{assetId},$dbDataType); $self->_updateFieldType($field->{fieldType},$field->{fieldId},$field->{thingId},$field->{assetId},$dbDataType);
$self->setCollateral("Thingy_fields","fieldId",$field,1,0); $self->setCollateral("Thingy_fields","fieldId",$field,1,0,"","",1);
} }
else{ else{
# Add field as Collateral, retain fieldId. # Add field as Collateral, retain fieldId.
@ -807,7 +820,7 @@ sub importAssetCollateralData {
while (my $fieldInDataBase = $fieldsInDatabase->hashRef) { while (my $fieldInDataBase = $fieldsInDatabase->hashRef) {
if (!WebGUI::Utility::isIn($fieldInDataBase->{fieldId},@importFields)){ if (!WebGUI::Utility::isIn($fieldInDataBase->{fieldId},@importFields)){
# delete field # delete field
$self->deleteField($fieldInDataBase->{fieldId},$fieldInDataBase->{thingId}); $self->deleteField($fieldInDataBase->{fieldId},$fieldInDataBase->{thingId},"1");
} }
} }