[interchange-cvs] interchange - heins modified 4 files
interchange-cvs at icdevgroup.org
interchange-cvs at icdevgroup.org
Wed Oct 19 10:26:32 EDT 2005
User: heins
Date: 2005-10-19 14:26:32 GMT
Modified: lib/Vend UserDB.pm
Modified: dist/standard catalog.cfg
Modified: dist/standard/dbconf/mysql userdb.mysql
Modified: dist/standard/dbconf/pgsql userdb.pgsql
Log:
* Add mechanism for serializing value paramters to a single field
in the user database.
Having to add a field to the table every time you want to store a
product parameter or preference is very annoying, and is not necessary.
* Adds "extra_fields" parameter to UserDB configuration. It takes
a space-separated list of variables which will be stored
in the "preferences" field by default.
* Use this to store the value of mv_same_billing and a few other
things in the standard demo.
* Results in a stringified hash (i.e. { mv_same_billing => 1, foo => 'bar' }
stored in the field. Automatically saved on [userdb save] and automatically
retrieved on login.
Revision Changes Path
2.39 +51 -12 interchange/lib/Vend/UserDB.pm
rev 2.39, prev_rev 2.38
Index: UserDB.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/UserDB.pm,v
retrieving revision 2.38
retrieving revision 2.39
diff -u -r2.38 -r2.39
--- UserDB.pm 11 Aug 2005 22:55:06 -0000 2.38
+++ UserDB.pm 19 Oct 2005 14:26:32 -0000 2.39
@@ -1,6 +1,6 @@
# Vend::UserDB - Interchange user database functions
#
-# $Id: UserDB.pm,v 2.38 2005/08/11 22:55:06 racke Exp $
+# $Id: UserDB.pm,v 2.39 2005/10/19 14:26:32 mheins Exp $
#
# Copyright (C) 2002-2003 Interchange Development Group
# Copyright (C) 1996-2002 Red Hat, Inc.
@@ -17,7 +17,7 @@
package Vend::UserDB;
-$VERSION = substr(q$Revision: 2.38 $, 10);
+$VERSION = substr(q$Revision: 2.39 $, 10);
use vars qw!
$VERSION
@@ -599,9 +599,12 @@
}
sub get_values {
- my($self, @fields) = @_;
+ my($self, $valref, $scratchref) = @_;
- @fields = @{ $self->{DB_FIELDS} } unless @fields;
+ $valref = $::Values unless ref($valref);
+ $scratchref = $::Scratch unless ref($scratchref);
+
+ my @fields = @{ $self->{DB_FIELDS} };
my $db = $self->{DB}
or die errmsg("No user database found.");
@@ -636,6 +639,17 @@
? $row->{$self->{LOCATION}->{OUTBOARD_KEY}}
: $self->{USERNAME};
+ if(my $ef = $self->{OPTIONS}->{extra_fields}) {
+ my @s = grep /\w/, split /[\s,]+/, $ef;
+ my $field = $self->{LOCATION}{PREFERENCES};
+ my $loc = $self->{OPTIONS}{extra_selector} || 'default';
+ my $hash = get_option_hash($row->{$field});
+ if($hash and $hash = $hash->{$loc} and ref($hash) eq 'HASH') {
+ for(@s) {
+ $::Values->{$_} = $hash->{$_};
+ }
+ }
+ }
for(@fields) {
if($ignore{$_}) {
@@ -673,13 +687,14 @@
}
sub set_values {
- my($self) = @_;
+ my($self, $valref, $scratchref) = @_;
- my @fields;
+ $valref = $::Values unless ref($valref);
+ $scratchref = $::Scratch unless ref($scratchref);
my $user = $self->{USERNAME};
- @fields = @{$self->{DB_FIELDS}};
+ my @fields = @{$self->{DB_FIELDS}};
my $db = $self->{DB};
@@ -705,16 +720,35 @@
my @bvals;
eval {
+
+ my @extra;
+
+ if(my $ef = $self->{OPTIONS}->{extra_fields}) {
+ my $row = $db->row_hash($user);
+ my @s = grep /\w/, split /[\s,]+/, $ef;
+ my $field = $self->{LOCATION}{PREFERENCES};
+ my $loc = $self->{OPTIONS}{extra_selector} || 'default';
+ my $hash = get_option_hash( $row->{$field} ) || {};
+
+ my $subhash = $hash->{$loc} ||= {};
+ for(@s) {
+ $subhash->{$_} = $valref->{$_};
+ }
+
+ push @extra, $field;
+ push @extra, uneval_it($hash);
+ }
+
for( @fields ) {
-#::logDebug("set_values saving $_ as $::Values->{$_}\n");
+#::logDebug("set_values saving $_ as $valref->{$_}\n");
my $val;
if ($scratch{$_}) {
- $val = $::Scratch->{$_}
- if defined $::Scratch->{$_};
+ $val = $scratchref->{$_}
+ if defined $scratchref->{$_};
}
else {
- $val = $::Values->{$_}
- if defined $::Values->{$_};
+ $val = $valref->{$_}
+ if defined $valref->{$_};
}
next if ! defined $val;
@@ -737,6 +771,11 @@
}
}
+ while(@extra) {
+ push @bfields, shift @extra;
+ push @bvals, shift @extra;
+ }
+
if(@bfields) {
$db->set_slice($user, \@bfields, \@bvals);
}
1.11 +16 -0 interchange/dist/standard/catalog.cfg
rev 1.11, prev_rev 1.10
Index: catalog.cfg
===================================================================
RCS file: /var/cvs/interchange/dist/standard/catalog.cfg,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- catalog.cfg 14 Sep 2005 13:28:19 -0000 1.10
+++ catalog.cfg 19 Oct 2005 14:26:32 -0000 1.11
@@ -209,6 +209,21 @@
# Don't want people setting their credit limit or dealer status directly
UserDB default scratch "dealer price_level credit_limit"
+# Set some other things you want to retain but which don't deserve their
+# own field -- stored in serial field preferences
+UserDB default extra_fields <<EOU
+"
+ mv_same_billing
+ mv_credit_card_exp_type
+ mv_credit_card_exp_month
+ mv_credit_card_exp_year
+ fax_order
+ phone_cell
+ account_id
+ po_number
+"
+EOU
+
# Log user login/logut etc in separate logfile
UserDB default logfile logs/userdb.log
@@ -255,6 +270,7 @@
ifndef COMMON_ORDER_PROFILE
Variable COMMON_ORDER_PROFILE <<EOV
+ mv_same_billing=always_pass
fname=required
lname=required
address1=required
1.2 +33 -39 interchange/dist/standard/dbconf/mysql/userdb.mysql
rev 1.2, prev_rev 1.1
Index: userdb.mysql
===================================================================
RCS file: /var/cvs/interchange/dist/standard/dbconf/mysql/userdb.mysql,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- userdb.mysql 25 Apr 2004 17:07:49 -0000 1.1
+++ userdb.mysql 19 Oct 2005 14:26:32 -0000 1.2
@@ -1,53 +1,47 @@
Database userdb userdb.txt __SQLDSN__
-Database userdb COLUMN_DEF "username=varchar(32) NOT NULL PRIMARY KEY"
-Database userdb COLUMN_DEF "password=varchar(20) NOT NULL"
+Database userdb DEFAULT_TYPE varchar(255)
+Database userdb COLUMN_DEF "username=varchar(64) NOT NULL PRIMARY KEY"
+Database userdb COLUMN_DEF "password=varchar(64) NOT NULL"
+Database userdb COLUMN_DEF "accounts=BLOB"
Database userdb COLUMN_DEF "acl=text"
-Database userdb COLUMN_DEF "mod_time=timestamp"
-Database userdb COLUMN_DEF "s_nickname=text"
-Database userdb COLUMN_DEF "company=varchar(30)"
-Database userdb COLUMN_DEF "fname=varchar(30)"
-Database userdb COLUMN_DEF "lname=varchar(30)"
Database userdb COLUMN_DEF "address1=varchar(64)"
Database userdb COLUMN_DEF "address2=varchar(64)"
Database userdb COLUMN_DEF "address3=varchar(64)"
-Database userdb COLUMN_DEF "city=varchar(30)"
-Database userdb COLUMN_DEF "state=varchar(10)"
-Database userdb COLUMN_DEF "zip=varchar(10)"
-Database userdb COLUMN_DEF "country=varchar(10)"
-Database userdb COLUMN_DEF "phone_day=varchar(20)"
-Database userdb COLUMN_DEF "mv_shipmode=varchar(255)"
-Database userdb COLUMN_DEF "b_nickname=text"
-Database userdb COLUMN_DEF "b_fname=varchar(30)"
-Database userdb COLUMN_DEF "b_lname=varchar(30)"
+Database userdb COLUMN_DEF "address_book=BLOB"
Database userdb COLUMN_DEF "b_address1=varchar(64)"
Database userdb COLUMN_DEF "b_address2=varchar(64)"
Database userdb COLUMN_DEF "b_address3=varchar(64)"
Database userdb COLUMN_DEF "b_city=varchar(30)"
+Database userdb COLUMN_DEF "b_company=varchar(64)"
+Database userdb COLUMN_DEF "b_country=varchar(10)"
+Database userdb COLUMN_DEF "b_fname=varchar(30)"
+Database userdb COLUMN_DEF "b_lname=varchar(30)"
+Database userdb COLUMN_DEF "b_nickname=text"
+Database userdb COLUMN_DEF "b_phone=varchar(30)"
Database userdb COLUMN_DEF "b_state=varchar(10)"
Database userdb COLUMN_DEF "b_zip=varchar(10)"
-Database userdb COLUMN_DEF "b_country=varchar(10)"
-Database userdb COLUMN_DEF "b_phone=varchar(20)"
-Database userdb COLUMN_DEF "mv_credit_card_type=varchar(16)"
-Database userdb COLUMN_DEF "mv_credit_card_exp_month=varchar(2)"
-Database userdb COLUMN_DEF "mv_credit_card_exp_year=varchar(4)"
-Database userdb COLUMN_DEF "p_nickname=text"
-Database userdb COLUMN_DEF "email=varchar(42)"
-Database userdb COLUMN_DEF "fax=varchar(20)"
-Database userdb COLUMN_DEF "phone_night=varchar(20)"
-Database userdb COLUMN_DEF "fax_order=varchar(2)"
-Database userdb COLUMN_DEF "address_book=BLOB"
-Database userdb COLUMN_DEF "accounts=BLOB"
-Database userdb COLUMN_DEF "preferences=BLOB"
Database userdb COLUMN_DEF "carts=BLOB"
-Database userdb COLUMN_DEF "owner=varchar(20)"
-Database userdb COLUMN_DEF "file_acl=BLOB"
+Database userdb COLUMN_DEF "city=varchar(30)"
+Database userdb COLUMN_DEF "company=varchar(64)"
+Database userdb COLUMN_DEF "country=varchar(10)"
+Database userdb COLUMN_DEF "credit_limit=varchar(16)"
Database userdb COLUMN_DEF "db_acl=BLOB"
-Database userdb COLUMN_DEF "order_numbers=TEXT"
-Database userdb COLUMN_DEF "email_copy=varchar(1)"
-Database userdb COLUMN_DEF "mail_list=varchar(64)"
-Database userdb COLUMN_DEF "project_id=varchar(20)"
-Database userdb COLUMN_DEF "account_id=varchar(20)"
-Database userdb COLUMN_DEF "order_dest=varchar(32)"
-Database userdb COLUMN_DEF "payment_method=varchar(32)"
Database userdb COLUMN_DEF "dealer=varchar(32)"
-Database userdb COLUMN_DEF "feedback=BLOB"
+Database userdb COLUMN_DEF "email=varchar(42)"
+Database userdb COLUMN_DEF "fax=varchar(30)"
+Database userdb COLUMN_DEF "file_acl=BLOB"
+Database userdb COLUMN_DEF "fname=varchar(30)"
+Database userdb COLUMN_DEF "inactive=varchar(8)"
+Database userdb COLUMN_DEF "lname=varchar(30)"
+Database userdb COLUMN_DEF "mail_list=text"
+Database userdb COLUMN_DEF "mod_time=timestamp"
+Database userdb COLUMN_DEF "mv_shipmode=varchar(255)"
+Database userdb COLUMN_DEF "owner=varchar(20)"
+Database userdb COLUMN_DEF "p_nickname=text"
+Database userdb COLUMN_DEF "phone_day=varchar(30)"
+Database userdb COLUMN_DEF "phone_night=varchar(30)"
+Database userdb COLUMN_DEF "price_level=varchar(30)"
+Database userdb COLUMN_DEF "preferences=BLOB"
+Database userdb COLUMN_DEF "s_nickname=text"
+Database userdb COLUMN_DEF "state=varchar(20)"
+Database userdb COLUMN_DEF "zip=varchar(10)"
1.2 +42 -46 interchange/dist/standard/dbconf/pgsql/userdb.pgsql
rev 1.2, prev_rev 1.1
Index: userdb.pgsql
===================================================================
RCS file: /var/cvs/interchange/dist/standard/dbconf/pgsql/userdb.pgsql,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- userdb.pgsql 25 Apr 2004 17:07:49 -0000 1.1
+++ userdb.pgsql 19 Oct 2005 14:26:32 -0000 1.2
@@ -1,56 +1,52 @@
Database userdb userdb.txt __SQLDSN__
Database userdb LENGTH_EXCEPTION_DEFAULT truncate_log
Database userdb DEFAULT_TYPE varchar(255)
-Database userdb COLUMN_DEF "username=varchar(32) NOT NULL PRIMARY KEY"
-Database userdb COLUMN_DEF "password=varchar(20)"
+
+Database userdb COLUMN_DEF "username=varchar(64) NOT NULL PRIMARY KEY"
+Database userdb COLUMN_DEF "password=varchar(64) NOT NULL"
+Database userdb COLUMN_DEF "accounts=text"
Database userdb COLUMN_DEF "acl=text"
+Database userdb COLUMN_DEF "address1=varchar(64)"
+Database userdb COLUMN_DEF "address2=varchar(64)"
+Database userdb COLUMN_DEF "address3=varchar(64)"
+Database userdb COLUMN_DEF "address_book=text"
+Database userdb COLUMN_DEF "b_address1=varchar(64)"
+Database userdb COLUMN_DEF "b_address2=varchar(64)"
+Database userdb COLUMN_DEF "b_address3=varchar(64)"
+Database userdb COLUMN_DEF "b_city=varchar(30)"
+Database userdb COLUMN_DEF "b_company=varchar(64)"
+Database userdb COLUMN_DEF "b_country=varchar(10)"
+Database userdb COLUMN_DEF "b_fname=varchar(30)"
+Database userdb COLUMN_DEF "b_lname=varchar(30)"
+Database userdb COLUMN_DEF "b_nickname=text"
+Database userdb COLUMN_DEF "b_phone=varchar(30)"
+Database userdb COLUMN_DEF "b_state=varchar(10)"
+Database userdb COLUMN_DEF "b_zip=varchar(10)"
+Database userdb COLUMN_DEF "carts=text"
+Database userdb COLUMN_DEF "city=varchar(30)"
+Database userdb COLUMN_DEF "company=varchar(64)"
+Database userdb COLUMN_DEF "country=varchar(10)"
+Database userdb COLUMN_DEF "credit_limit=varchar(16)"
+Database userdb COLUMN_DEF "db_acl=text"
+Database userdb COLUMN_DEF "dealer=varchar(32)"
+Database userdb COLUMN_DEF "email=varchar(42)"
+Database userdb COLUMN_DEF "fax=varchar(30)"
+Database userdb COLUMN_DEF "file_acl=text"
+Database userdb COLUMN_DEF "fname=varchar(30)"
+Database userdb COLUMN_DEF "inactive=varchar(8)"
+Database userdb COLUMN_DEF "lname=varchar(30)"
+Database userdb COLUMN_DEF "mail_list=text"
Database userdb COLUMN_DEF "mod_time=varchar(20)"
-Database userdb COLUMN_DEF "s_nickname=text"
-Database userdb COLUMN_DEF "company=varchar(128)"
-Database userdb COLUMN_DEF "fname=varchar(128)"
-Database userdb COLUMN_DEF "lname=varchar(128)"
-Database userdb COLUMN_DEF "address1=varchar(128)"
-Database userdb COLUMN_DEF "address2=varchar(128)"
-Database userdb COLUMN_DEF "address3=varchar(128)"
-Database userdb COLUMN_DEF "city=varchar(128)"
-Database userdb COLUMN_DEF "state=varchar(32)"
-Database userdb COLUMN_DEF "zip=varchar(32)"
-Database userdb COLUMN_DEF "country=varchar(32)"
-Database userdb COLUMN_DEF "phone_day=varchar(32)"
Database userdb COLUMN_DEF "mv_shipmode=varchar(255)"
-Database userdb COLUMN_DEF "b_nickname=text"
-Database userdb COLUMN_DEF "b_fname=varchar(128)"
-Database userdb COLUMN_DEF "b_lname=varchar(128)"
-Database userdb COLUMN_DEF "b_address1=varchar(128)"
-Database userdb COLUMN_DEF "b_address2=varchar(128)"
-Database userdb COLUMN_DEF "b_address3=varchar(128)"
-Database userdb COLUMN_DEF "b_city=varchar(128)"
-Database userdb COLUMN_DEF "b_state=varchar(32)"
-Database userdb COLUMN_DEF "b_zip=varchar(32)"
-Database userdb COLUMN_DEF "b_country=varchar(32)"
-Database userdb COLUMN_DEF "b_phone=varchar(32)"
-Database userdb COLUMN_DEF "mv_credit_card_type=varchar(16)"
-Database userdb COLUMN_DEF "mv_credit_card_exp_month=varchar(2)"
-Database userdb COLUMN_DEF "mv_credit_card_exp_year=varchar(4)"
-Database userdb COLUMN_DEF "p_nickname=text"
-Database userdb COLUMN_DEF "email=varchar(128)"
-Database userdb COLUMN_DEF "fax=varchar(32)"
-Database userdb COLUMN_DEF "phone_night=varchar(32)"
-Database userdb COLUMN_DEF "fax_order=varchar(2)"
-Database userdb COLUMN_DEF "address_book=TEXT"
-Database userdb COLUMN_DEF "accounts=TEXT"
-Database userdb COLUMN_DEF "preferences=TEXT"
-Database userdb COLUMN_DEF "carts=TEXT"
Database userdb COLUMN_DEF "owner=varchar(20)"
-Database userdb COLUMN_DEF "file_acl=TEXT"
-Database userdb COLUMN_DEF "db_acl=TEXT"
-Database userdb COLUMN_DEF "order_numbers=TEXT"
-Database userdb COLUMN_DEF "email_copy=varchar(1)"
-Database userdb COLUMN_DEF "mail_list=varchar(64)"
-Database userdb COLUMN_DEF "project_id=varchar(20)"
-Database userdb COLUMN_DEF "account_id=varchar(20)"
-Database userdb COLUMN_DEF "order_dest=varchar(32)"
-Database userdb COLUMN_DEF "inactive=varchar(32)"
+Database userdb COLUMN_DEF "p_nickname=text"
+Database userdb COLUMN_DEF "phone_day=varchar(30)"
+Database userdb COLUMN_DEF "phone_night=varchar(30)"
+Database userdb COLUMN_DEF "price_level=varchar(30)"
+Database userdb COLUMN_DEF "preferences=text"
+Database userdb COLUMN_DEF "s_nickname=text"
+Database userdb COLUMN_DEF "state=varchar(20)"
+Database userdb COLUMN_DEF "zip=varchar(10)"
Database userdb DEFAULT "inactive=''"
# Prevent problems with abstime representation
More information about the interchange-cvs
mailing list