[interchange-cvs] interchange - racke modified lib/Vend/Table/Shadow.pm
interchange-core@icdevgroup.org
interchange-core@icdevgroup.org
Wed Jan 1 09:17:01 2003
User: racke
Date: 2003-01-01 14:16:48 GMT
Modified: lib/Vend/Table Shadow.pm
Log:
foreign method implemented
field method calls _map_column now too
lookup_table introduced
Revision Changes Path
1.16 +37 -20 interchange/lib/Vend/Table/Shadow.pm
rev 1.16, prev_rev 1.15
Index: Shadow.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Table/Shadow.pm,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- Shadow.pm 12 Nov 2002 11:05:33 -0000 1.15
+++ Shadow.pm 1 Jan 2003 14:16:48 -0000 1.16
@@ -1,8 +1,8 @@
# Vend::Table::Shadow - Access a virtual "Shadow" table
#
-# $Id: Shadow.pm,v 1.15 2002/11/12 11:05:33 racke Exp $
+# $Id: Shadow.pm,v 1.16 2003/01/01 14:16:48 racke Exp $
#
-# Copyright (C) 2002 Stefan Hornburg (Racke) <racke@linuxia.de>
+# Copyright (C) 2002-2003 Stefan Hornburg (Racke) <racke@linuxia.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -20,7 +20,7 @@
# MA 02111-1307 USA.
package Vend::Table::Shadow;
-$VERSION = substr(q$Revision: 1.15 $, 10);
+$VERSION = substr(q$Revision: 1.16 $, 10);
# TODO
#
@@ -180,24 +180,18 @@
return $ref;
}
+sub foreign {
+ my ($s, $key, $foreign) = @_;
+
+ $s = $s->import_db() unless defined $s->[$OBJ];
+ $s->[$OBJ]->foreign($key, $foreign);
+}
+
sub field {
my ($s, $key, $column) = @_;
my ($map, $locale, $db);
- $s = $s->import_db() unless defined $s->[$OBJ];
- $locale = $::Scratch->{mv_locale} || 'default';
- if (exists $s->[$CONFIG]->{MAP}->{$column}->{$locale}) {
- $map = $s->[$CONFIG]->{MAP}->{$column}->{$locale};
- if (exists $map->{table}) {
- $db = Vend::Data::database_exists_ref($map->{table})
- or die "unknown table $map->{table} in mapping for column $column of $s->[$TABLE] for locale $locale";
- return unless $db->record_exists($key);
- return $db->field($key, $map->{column});
- } else {
- $column = $map->{column};
- }
- }
- $s->[$OBJ]->field($key, $column);
+ $s->_map_column($key, $column);
}
sub ref {
@@ -271,6 +265,29 @@
if (exists $s->[$CONFIG]->{MAP}->{$column}->{$locale}) {
$mapentry = $s->[$CONFIG]->{MAP}->{$column};
$map = $mapentry->{$locale};
+ if (exists $map->{lookup_table}) {
+ my ($db_lookup, $lookup_key);
+ ::logDebug ("Lookup $column with key $key in $map->{lookup_table}");
+ $db_lookup = Vend::Data::database_exists_ref($map->{lookup_table})
+ or die "unknown lookup table $map->{lookup_table} in mapping for column $column of $s->[$TABLE] for locale $locale";
+ $db = Vend::Data::database_exists_ref($map->{table})
+ or die "unknown table $map->{table} in mapping for column $column of $s->[$TABLE] for locale $locale";
+
+ # retrieve original value
+ $value = $s->[$OBJ]->field($key,$column);
+
+ # now map original value to lookup table
+ if ($lookup_key = $db_lookup->foreign($value,$map->{lookup_column})) {
+ my $final = $db->field($lookup_key,$map->{column});
+ return $final if $final;
+ }
+
+ if ($mapentry->{fallback}) {
+ return $value;
+ }
+
+ return '';
+ }
if (exists $map->{table}) {
$db = Vend::Data::database_exists_ref($map->{table})
or die "unknown table $map->{table} in mapping for column $column of $s->[$TABLE] for locale $locale";
@@ -280,21 +297,21 @@
$value = '';
}
} else {
- $value = $s->field($key, $map->{column});
+ $value = $s->[$OBJ]->field($key, $map->{column});
}
if (! $value && $mapentry->{fallback}) {
# nothing found, so we fallback to the original entry
if ($done) {
$value = $orig;
} else {
- $value = $s->field($key, $column);
+ $value = $s->[$OBJ]->field($key, $column);
}
}
} elsif ($done) {
# column lookup already took place
$value = $orig;
} else {
- $value = $s->field($key, $column);
+ $value = $s->[$OBJ]->field($key, $column);
}
return $value;