[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