Index: openacs-4/packages/dotlrn/dotlrn.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/dotlrn.info,v
diff -u -r1.46 -r1.47
--- openacs-4/packages/dotlrn/dotlrn.info	31 Jan 2002 17:32:51 -0000	1.46
+++ openacs-4/packages/dotlrn/dotlrn.info	8 Feb 2002 20:50:56 -0000	1.47
@@ -29,6 +29,14 @@
         <files>
             <file path="coding-tips.txt"/>
             <file type="package_spec" path="dotlrn.info"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-admin-profile-provider-create.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-admin-profile-provider-drop.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-admins-create.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-admins-drop.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-admins-init.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-admins-package-create.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-admins-package-drop.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-admins-sanitize.sql"/>
             <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-applet-sc-create.sql"/>
             <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-classes-create.sql"/>
             <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-clubs-create.sql"/>
@@ -39,10 +47,32 @@
             <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-init.sql"/>
             <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-main-portlet-create.sql"/>
             <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-main-portlet-drop.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-professor-profile-provider-create.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-professor-profile-provider-drop.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-professors-create.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-professors-drop.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-professors-init.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-professors-package-create.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-professors-package-drop.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-professors-sanitize.sql"/>
             <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-security-create.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-student-profile-provider-create.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-student-profile-provider-drop.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-students-create.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-students-drop.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-students-init.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-students-package-create.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-students-package-drop.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-students-sanitize.sql"/>
             <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-user-extension-create.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-user-profile-provider-create.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-user-profile-provider-drop.sql"/>
             <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-users-create.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-users-drop.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-users-init.sql"/>
             <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-users-package-create.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-users-package-drop.sql"/>
+            <file type="data_model" db_type="oracle" path="sql/oracle/dotlrn-users-sanitize.sql"/>
             <file type="data_model_create" db_type="postgresql" path="sql/postgresql/dotlrn-create.sql"/>
             <file type="tcl_procs" path="tcl/applets-procs.tcl"/>
             <file type="query_file" path="tcl/applets-procs.xql"/>
@@ -64,6 +94,7 @@
             <file type="query_file" db_type="postgresql" path="tcl/dotlrn-procs-postgresql.xql"/>
             <file type="tcl_procs" path="tcl/dotlrn-procs.tcl"/>
             <file type="query_file" path="tcl/dotlrn-procs.xql"/>
+            <file type="tcl_procs" path="tcl/dotlrn-professor-profile-provider-procs.tcl"/>
             <file type="query_file" db_type="oracle" path="tcl/dotlrn-security-procs-oracle.xql"/>
             <file type="tcl_procs" path="tcl/dotlrn-security-procs.tcl"/>
             <file type="query_file" path="tcl/dotlrn-security-procs.xql"/>
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-admin-profile-provider-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-admin-profile-provider-create.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-admin-profile-provider-create.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,56 @@
+--
+-- Implementation of the profile provider interface for dotLRN Admins.
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-admin-profile-provider-create.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+declare
+    foo                         integer;
+begin
+
+    -- create the implementation
+    foo := acs_sc_impl.new(
+        impl_contract_name => 'profile_provider',
+        impl_name => 'dotlrn_admin_profile_provider',
+        impl_owner_name => 'dotlrn_admin_profile_provider'
+    );
+
+    -- add the bindings to the method implementations
+
+        -- name method
+        foo := acs_sc_impl.new_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_admin_profile_provider',
+            impl_operation_name => 'name',
+            impl_alias => 'dotlrn_admin_profile_provider::name',
+            impl_pl => 'TCL'
+        );
+
+        -- prettyName method
+        foo := acs_sc_impl.new_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_admin_profile_provider',
+            impl_operation_name => 'prettyName',
+            impl_alias => 'dotlrn_admin_profile_provider::prettyName',
+            impl_pl => 'TCL'
+        );
+
+        -- render method
+        foo := acs_sc_impl.new_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_admin_profile_provider',
+            impl_operation_name => 'render',
+            impl_alias => 'dotlrn_admin_profile_provider::render',
+            impl_pl => 'TCL'
+        );
+
+    -- bind this implementation to the interface it implements
+    acs_sc_binding.new(
+        contract_name => 'profile_provider',
+        impl_name => 'dotlrn_admin_profile_provider'
+    );
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-admin-profile-provider-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-admin-profile-provider-drop.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-admin-profile-provider-drop.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,50 @@
+--
+-- Implementation of the profile provider interface for dotLRN Admins.
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-admin-profile-provider-drop.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+declare
+    foo                         integer;
+begin
+
+    -- drop the binding between this implementation and the interface it
+    -- implements.
+    acs_sc_binding.delete(
+        contract_name => 'profile_provider',
+        impl_name => 'dotlrn_admin_profile_provider'
+    );
+
+    -- drop the bindings to the method implementations
+
+        -- name method
+        foo := acs_sc_impl.delete_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_admin_profile_provider',
+            impl_operation_name => 'name'
+        );
+
+        -- prettyName method
+        foo := acs_sc_impl.delete_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_admin_profile_provider',
+            impl_operation_name => 'prettyName'
+        );
+
+        -- render method
+        foo := acs_sc_impl.delete_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_admin_profile_provider',
+            impl_operation_name => 'render'
+        );
+
+    -- drop the implementation
+    acs_sc_impl.delete(
+        impl_contract_name => 'profile_provider',
+        impl_name => 'dotlrn_admin_profile_provider'
+    );
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-admins-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-admins-create.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-admins-create.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,24 @@
+--
+-- Create the dotLRN Admins package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-admins-create.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+create table dotlrn_admin_profile_rels (
+    rel_id                      constraint dotlrn_adm_prfl_rels_rel_id_fk
+                                references dotlrn_user_profile_rels (rel_id)
+                                constraint dotlrn_admin_prfl_rels_pk
+                                primary key
+);
+
+create table dotlrn_full_admin_profile_rels (
+    rel_id                      constraint dotlrn_fl_adm_prfl_rels_rel_fk
+                                references dotlrn_full_user_profile_rels (rel_id)
+                                constraint dotlrn_full_admin_prfl_rels_pk
+                                primary key
+);
+
+@@ dotlrn-admin-profile-provider-create.sql
+@@ dotlrn-admins-init.sql
+@@ dotlrn-admins-package-create.sql
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-admins-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-admins-drop.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-admins-drop.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,13 @@
+--
+-- Drop the dotLRN Admins package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-admins-drop.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+@@ dotlrn-admins-package-drop.sql
+@@ dotlrn-admins-sanitize.sql
+@@ dotlrn-admin-profile-provider-drop.sql
+
+drop table dotlrn_full_admin_profile_rels;
+drop table dotlrn_admin_profile_rels;
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-admins-init.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-admins-init.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-admins-init.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,105 @@
+--
+-- Initialize the dotLRN Admins package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-admins-init.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+declare
+    foo                         integer;
+    group_id                    integer;
+    dotlrn_users_group_id       integer;
+begin
+
+    acs_rel_type.create_type(
+        rel_type => 'dotlrn_admin_profile_rel',
+        supertype => 'dotlrn_user_profile_rel',
+        pretty_name => 'dotLRN Admin Profile Membership',
+        pretty_plural => 'dotLRN Admin Profile Memberships',
+        package_name => 'dotlrn_admin_profile_rel',
+        table_name => 'dotlrn_admin_profile_rels',
+        id_column => 'rel_id',
+        object_type_one => 'profiled_group',
+        role_one => null,
+        min_n_rels_one => 0,
+        max_n_rels_one => null,
+        object_type_two => 'user',
+        role_two => null,
+        min_n_rels_two => 0,
+        max_n_rels_two => 1
+    );
+
+    select min(impl_id)
+    into foo
+    from acs_sc_impls
+    where impl_name = 'dotlrn_admin_profile_provider';
+
+    group_id := profiled_group.new(
+        profile_provider => foo,
+        group_name => 'dotLRN Admins'
+    );
+
+    insert
+    into dotlrn_user_types
+    (type, pretty_name, group_id)
+    values
+    ('admin', 'Administrator', group_id);
+
+    foo := rel_segment.new(
+        segment_name => 'dotLRN Profiled Admins',
+        group_id => group_id,
+        rel_type => 'dotlrn_admin_profile_rel'
+    );
+
+    select group_id
+    into dotlrn_users_group_id
+    from groups
+    where group_name = 'dotLRN Users';
+
+    foo := composition_rel.new(
+        object_id_one => dotlrn_users_group_id,
+        object_id_two => group_id
+    );
+
+end;
+/
+show errors
+
+declare
+    foo                         integer;
+begin
+
+    acs_rel_type.create_type(
+        rel_type => 'dotlrn_full_admin_profile_rel',
+        supertype => 'dotlrn_full_user_profile_rel',
+        pretty_name => 'dotLRN Full Admin Profile Membership',
+        pretty_plural => 'dotLRN Full Admin Profile Memberships',
+        package_name => 'dotlrn_full_admin_profile_rel',
+        table_name => 'dotlrn_full_admin_profile_rels',
+        id_column => 'rel_id',
+        object_type_one => 'profiled_group',
+        role_one => null,
+        min_n_rels_one => 0,
+        max_n_rels_one => null,
+        object_type_two => 'user',
+        role_two => null,
+        min_n_rels_two => 0,
+        max_n_rels_two => 1
+    );
+
+    select min(group_id)
+    into foo
+    from profiled_groups
+    where profile_provider = (select min(impl_id)
+                              from acs_sc_impls
+                              where impl_name = 'dotlrn_admin_profile_provider');
+
+    foo := rel_segment.new(
+        segment_name => 'dotLRN Full Profiled Admins',
+        group_id => foo,
+        rel_type => 'dotlrn_full_admin_profile_rel'
+    );
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-admins-package-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-admins-package-create.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-admins-package-create.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,174 @@
+--
+-- Create the Admin package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-admins-package-create.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+create or replace package dotlrn_admin_profile_rel
+as
+    function new (
+        rel_id in dotlrn_admin_profile_rels.rel_id%TYPE default null,
+        id in dotlrn_user_profile_rels.id%TYPE default null,
+        rel_type in acs_rels.rel_type%TYPE default 'dotlrn_admin_profile_rel',
+        group_id in groups.group_id%TYPE default null,
+        user_id in users.user_id%TYPE,
+        creation_user in acs_objects.creation_user%TYPE default null,
+        creation_ip in acs_objects.creation_ip%TYPE default null
+    ) return dotlrn_user_profile_rels.rel_id%TYPE;
+
+    procedure delete (
+        rel_id in dotlrn_admin_profile_rels.rel_id%TYPE
+    );
+
+end;
+/
+show errors
+
+create or replace package body dotlrn_admin_profile_rel
+as
+    function new (
+        rel_id in dotlrn_admin_profile_rels.rel_id%TYPE default null,
+        id in dotlrn_user_profile_rels.id%TYPE default null,
+        rel_type in acs_rels.rel_type%TYPE default 'dotlrn_admin_profile_rel',
+        group_id in groups.group_id%TYPE default null,
+        user_id in users.user_id%TYPE,
+        creation_user in acs_objects.creation_user%TYPE default null,
+        creation_ip in acs_objects.creation_ip%TYPE default null
+    ) return dotlrn_user_profile_rels.rel_id%TYPE
+    is
+        v_rel_id                dotlrn_user_profile_rels.rel_id%TYPE;
+        v_group_id              groups.group_id%TYPE;
+    begin
+        if group_id is null then
+            select min(group_id)
+            into v_group_id
+            from profiled_groups
+            where profile_provider = (select min(impl_id)
+                                      from acs_sc_impls
+                                      where impl_name = 'dotlrn_admin_profile_provider');
+        else
+             v_group_id := group_id;
+        end if;
+
+        v_rel_id := dotlrn_user_profile_rel.new(
+            rel_id => rel_id,
+            id => id,
+            rel_type => rel_type,
+            group_id => v_group_id,
+            user_id => user_id,
+            creation_user => creation_user,
+            creation_ip => creation_ip
+        );
+
+        insert
+        into dotlrn_admin_profile_rels
+        (rel_id)
+        values
+        (v_rel_id);
+
+        return v_rel_id;
+    end;
+
+    procedure delete (
+        rel_id in dotlrn_admin_profile_rels.rel_id%TYPE
+    )
+    is
+    begin
+        delete
+        from dotlrn_admin_profile_rels
+        where rel_id = dotlrn_admin_profile_rel.delete.rel_id;
+
+        dotlrn_user_profile_rel.delete(rel_id);
+    end;
+
+end;
+/
+show errors
+
+create or replace package dotlrn_full_admin_profile_rel
+as
+    function new (
+        rel_id in dotlrn_full_admin_profile_rels.rel_id%TYPE default null,
+        portal_id in dotlrn_full_user_profile_rels.portal_id%TYPE,
+        theme_id in dotlrn_full_user_profile_rels.theme_id%TYPE default null,
+        id in dotlrn_user_profile_rels.id%TYPE default null,
+        rel_type in acs_rels.rel_type%TYPE default 'dotlrn_full_admin_profile_rel',
+        group_id in groups.group_id%TYPE default null,
+        user_id in users.user_id%TYPE,
+        creation_user in acs_objects.creation_user%TYPE default null,
+        creation_ip in acs_objects.creation_ip%TYPE default null
+    ) return dotlrn_full_user_profile_rels.rel_id%TYPE;
+
+    procedure delete (
+        rel_id in dotlrn_full_admin_profile_rels.rel_id%TYPE
+    );
+
+end;
+/
+show errors
+
+create or replace package body dotlrn_full_admin_profile_rel
+as
+    function new (
+        rel_id in dotlrn_full_admin_profile_rels.rel_id%TYPE default null,
+        portal_id in dotlrn_full_user_profile_rels.portal_id%TYPE,
+        theme_id in dotlrn_full_user_profile_rels.theme_id%TYPE default null,
+        id in dotlrn_user_profile_rels.id%TYPE default null,
+        rel_type in acs_rels.rel_type%TYPE default 'dotlrn_full_admin_profile_rel',
+        group_id in groups.group_id%TYPE default null,
+        user_id in users.user_id%TYPE,
+        creation_user in acs_objects.creation_user%TYPE default null,
+        creation_ip in acs_objects.creation_ip%TYPE default null
+    ) return dotlrn_full_user_profile_rels.rel_id%TYPE
+    is
+        v_rel_id                dotlrn_full_user_profile_rels.rel_id%TYPE;
+        v_group_id              groups.group_id%TYPE;
+    begin
+        if group_id is null then
+            select min(group_id)
+            into v_group_id
+            from profiled_groups
+            where profile_provider = (select min(impl_id)
+                                      from acs_sc_impls
+                                      where impl_name = 'dotlrn_admin_profile_provider');
+        else
+             v_group_id := group_id;
+        end if;
+
+        v_rel_id := dotlrn_full_user_profile_rel.new(
+            rel_id => rel_id,
+            portal_id => portal_id,
+            theme_id => theme_id,
+            id => id,
+            rel_type => rel_type,
+            group_id => v_group_id,
+            user_id => user_id,
+            creation_user => creation_user,
+            creation_ip => creation_ip
+        );
+
+        insert
+        into dotlrn_full_admin_profile_rels
+        (rel_id)
+        values
+        (v_rel_id);
+
+        return v_rel_id;
+    end;
+
+    procedure delete (
+        rel_id in dotlrn_full_admin_profile_rels.rel_id%TYPE
+    )
+    is
+    begin
+        delete
+        from dotlrn_full_admin_profile_rels
+        where rel_id = dotlrn_full_admin_profile_rel.delete.rel_id;
+
+        dotlrn_full_user_profile_rel.delete(rel_id);
+    end;
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-admins-package-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-admins-package-drop.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-admins-package-drop.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,9 @@
+--
+-- Create the dotLRN Admins package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-admins-package-drop.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+drop package dotlrn_full_admin_profile_rel;
+drop package dotlrn_admin_profile_rel;
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-admins-sanitize.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-admins-sanitize.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-admins-sanitize.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,65 @@
+--
+-- Sanitize the dotLRN Admin package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-admins-sanitize.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+declare
+    foo                         integer;
+begin
+
+    select min(segment_id)
+    into foo
+    from rel_segments
+    where segment_name = 'dotLRN Full Profiled Admins';
+
+    rel_segment.delete(
+        segment_id => foo
+    );
+
+    acs_rel_type.drop_type(
+        rel_type => 'dotlrn_full_admin_profile_rel',
+        cascade_p => 't'
+    );
+
+end;
+/
+show errors
+
+declare
+    foo                         integer;
+begin
+
+    select min(segment_id)
+    into foo
+    from rel_segments
+    where segment_name = 'dotLRN Profiled Admins';
+
+    rel_segment.delete(
+        segment_id => foo
+    );
+
+    select min(group_id)
+    into foo
+    from profiled_groups
+    where profile_provider = (select min(impl_id)
+                              from acs_sc_impls
+                              where impl_name = 'dotlrn_admin_profile_provider');
+
+    delete
+    from dotlrn_user_types
+    where group_id = foo;
+
+    profiled_group.delete(
+        group_id => foo
+    );
+
+    acs_rel_type.drop_type(
+        rel_type => 'dotlrn_admin_profile_rel',
+        cascade_p => 't'
+    );
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/dotlrn-create.sql,v
diff -u -r1.9 -r1.10
--- openacs-4/packages/dotlrn/sql/oracle/dotlrn-create.sql	22 Jan 2002 20:50:56 -0000	1.9
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-create.sql	8 Feb 2002 20:50:56 -0000	1.10
@@ -10,7 +10,6 @@
 --
 
 @dotlrn-users-create.sql
-@dotlrn-users-package-create.sql
 @dotlrn-communities-create.sql
 @dotlrn-clubs-create.sql
 @dotlrn-classes-create.sql
@@ -21,4 +20,3 @@
 @dotlrn-main-portlet-create.sql
 @dotlrn-security-create.sql
 @dotlrn-user-extension-create.sql
-
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-init.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/dotlrn-init.sql,v
diff -u -r1.11 -r1.12
--- openacs-4/packages/dotlrn/sql/oracle/dotlrn-init.sql	15 Jan 2002 20:48:30 -0000	1.11
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-init.sql	8 Feb 2002 20:50:56 -0000	1.12
@@ -46,11 +46,6 @@
     acs_rel_type.create_role ('teaching_assistant', 'Teaching Assistant', 'Teaching Assistants');
     acs_rel_type.create_role ('instructor', 'Instructor', 'Instructors');
     acs_rel_type.create_role ('admin', 'Administrator', 'Administrators');
-
-    -- add the user types
-    insert into dotlrn_user_types (type_id, type) values (1, 'student');        
-    insert into dotlrn_user_types (type_id, type) values (2, 'professor');        
-    insert into dotlrn_user_types (type_id, type) values (3, 'admin');        
 end;
 /
 show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-professor-profile-provider-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-professor-profile-provider-create.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-professor-profile-provider-create.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,56 @@
+--
+-- Implementation of the profile provider interface for dotLRN Professors.
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-professor-profile-provider-create.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+declare
+    foo                         integer;
+begin
+
+    -- create the implementation
+    foo := acs_sc_impl.new(
+        impl_contract_name => 'profile_provider',
+        impl_name => 'dotlrn_professor_profile_provider',
+        impl_owner_name => 'dotlrn_professor_profile_provider'
+    );
+
+    -- add the bindings to the method implementations
+
+        -- name method
+        foo := acs_sc_impl.new_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_professor_profile_provider',
+            impl_operation_name => 'name',
+            impl_alias => 'dotlrn_professor_profile_provider::name',
+            impl_pl => 'TCL'
+        );
+
+        -- prettyName method
+        foo := acs_sc_impl.new_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_professor_profile_provider',
+            impl_operation_name => 'prettyName',
+            impl_alias => 'dotlrn_professor_profile_provider::prettyName',
+            impl_pl => 'TCL'
+        );
+
+        -- render method
+        foo := acs_sc_impl.new_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_professor_profile_provider',
+            impl_operation_name => 'render',
+            impl_alias => 'dotlrn_professor_profile_provider::render',
+            impl_pl => 'TCL'
+        );
+
+    -- bind this implementation to the interface it implements
+    acs_sc_binding.new(
+        contract_name => 'profile_provider',
+        impl_name => 'dotlrn_professor_profile_provider'
+    );
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-professor-profile-provider-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-professor-profile-provider-drop.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-professor-profile-provider-drop.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,50 @@
+--
+-- Implementation of the profile provider interface for dotLRN Professors.
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-professor-profile-provider-drop.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+declare
+    foo                         integer;
+begin
+
+    -- drop the binding between this implementation and the interface it
+    -- implements.
+    acs_sc_binding.delete(
+        contract_name => 'profile_provider',
+        impl_name => 'dotlrn_professor_profile_provider'
+    );
+
+    -- drop the bindings to the method implementations
+
+        -- name method
+        foo := acs_sc_impl.delete_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_professor_profile_provider',
+            impl_operation_name => 'name'
+        );
+
+        -- prettyName method
+        foo := acs_sc_impl.delete_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_professor_profile_provider',
+            impl_operation_name => 'prettyName'
+        );
+
+        -- render method
+        foo := acs_sc_impl.delete_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_professor_profile_provider',
+            impl_operation_name => 'render'
+        );
+
+    -- drop the implementation
+    acs_sc_impl.delete(
+        impl_contract_name => 'profile_provider',
+        impl_name => 'dotlrn_professor_profile_provider'
+    );
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-professors-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-professors-create.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-professors-create.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,24 @@
+--
+-- Create the dotLRN Professors package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-professors-create.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+create table dotlrn_professor_profile_rels (
+    rel_id                      constraint dotlrn_prof_rels_rel_id_fk
+                                references dotlrn_user_profile_rels (rel_id)
+                                constraint dotlrn_prof_profile_rels_pk
+                                primary key
+);
+
+create table dotlrn_full_prof_profile_rels (
+    rel_id                      constraint dotlrn_fp_prfl_rels_rel_fk
+                                references dotlrn_full_user_profile_rels (rel_id)
+                                constraint dotlrn_full_prof_prfl_rels_pk
+                                primary key
+);
+
+@@ dotlrn-professor-profile-provider-create.sql
+@@ dotlrn-professors-init.sql
+@@ dotlrn-professors-package-create.sql
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-professors-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-professors-drop.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-professors-drop.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,13 @@
+--
+-- Drop the dotLRN Professors package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-professors-drop.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+@@ dotlrn-professors-package-drop.sql
+@@ dotlrn-professors-sanitize.sql
+@@ dotlrn-professor-profile-provider-drop.sql
+
+drop table dotlrn_full_prof_profile_rels;
+drop table dotlrn_professor_profile_rels;
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-professors-init.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-professors-init.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-professors-init.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,105 @@
+--
+-- Initialize the dotLRN Professors package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-professors-init.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+declare
+    foo                         integer;
+    group_id                    integer;
+    dotlrn_users_group_id       integer;
+begin
+
+    acs_rel_type.create_type(
+        rel_type => 'dotlrn_professor_profile_rel',
+        supertype => 'dotlrn_user_profile_rel',
+        pretty_name => 'dotLRN Professor Profile Membership',
+        pretty_plural => 'dotLRN Professor Profile Memberships',
+        package_name => 'dotlrn_professor_profile_rel',
+        table_name => 'dotlrn_professor_profile_rels',
+        id_column => 'rel_id',
+        object_type_one => 'profiled_group',
+        role_one => null,
+        min_n_rels_one => 0,
+        max_n_rels_one => null,
+        object_type_two => 'user',
+        role_two => null,
+        min_n_rels_two => 0,
+        max_n_rels_two => 1
+    );
+
+    select min(impl_id)
+    into foo
+    from acs_sc_impls
+    where impl_name = 'dotlrn_professor_profile_provider';
+
+    group_id := profiled_group.new(
+        profile_provider => foo,
+        group_name => 'dotLRN Professors'
+    );
+
+    insert
+    into dotlrn_user_types
+    (type, pretty_name, group_id)
+    values
+    ('professor', 'Professor', group_id);
+
+    foo := rel_segment.new(
+        segment_name => 'dotLRN Profiled Professors',
+        group_id => group_id,
+        rel_type => 'dotlrn_professor_profile_rel'
+    );
+
+    select group_id
+    into dotlrn_users_group_id
+    from groups
+    where group_name = 'dotLRN Users';
+
+    foo := composition_rel.new(
+        object_id_one => dotlrn_users_group_id,
+        object_id_two => group_id
+    );
+
+end;
+/
+show errors
+
+declare
+    foo                         integer;
+begin
+
+    acs_rel_type.create_type(
+        rel_type => 'dotlrn_full_professor_profile_rel',
+        supertype => 'dotlrn_full_user_profile_rel',
+        pretty_name => 'dotLRN Full Professor Profile Membership',
+        pretty_plural => 'dotLRN Full Professor Profile Memberships',
+        package_name => 'dotlrn_full_prof_profile_rel',
+        table_name => 'dotlrn_full_prof_profile_rels',
+        id_column => 'rel_id',
+        object_type_one => 'profiled_group',
+        role_one => null,
+        min_n_rels_one => 0,
+        max_n_rels_one => null,
+        object_type_two => 'user',
+        role_two => null,
+        min_n_rels_two => 0,
+        max_n_rels_two => 1
+    );
+
+    select min(group_id)
+    into foo
+    from profiled_groups
+    where profile_provider = (select min(impl_id)
+                              from acs_sc_impls
+                              where impl_name = 'dotlrn_professor_profile_provider');
+
+    foo := rel_segment.new(
+        segment_name => 'dotLRN Full Profiled Professors',
+        group_id => foo,
+        rel_type => 'dotlrn_full_professor_profile_rel'
+    );
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-professors-package-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-professors-package-create.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-professors-package-create.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,174 @@
+--
+-- Create the Professor package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-professors-package-create.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+create or replace package dotlrn_professor_profile_rel
+as
+    function new (
+        rel_id in dotlrn_professor_profile_rels.rel_id%TYPE default null,
+        id in dotlrn_user_profile_rels.id%TYPE default null,
+        rel_type in acs_rels.rel_type%TYPE default 'dotlrn_professor_profile_rel',
+        group_id in groups.group_id%TYPE default null,
+        user_id in users.user_id%TYPE,
+        creation_user in acs_objects.creation_user%TYPE default null,
+        creation_ip in acs_objects.creation_ip%TYPE default null
+    ) return dotlrn_user_profile_rels.rel_id%TYPE;
+
+    procedure delete (
+        rel_id in dotlrn_professor_profile_rels.rel_id%TYPE
+    );
+
+end;
+/
+show errors
+
+create or replace package body dotlrn_professor_profile_rel
+as
+    function new (
+        rel_id in dotlrn_professor_profile_rels.rel_id%TYPE default null,
+        id in dotlrn_user_profile_rels.id%TYPE default null,
+        rel_type in acs_rels.rel_type%TYPE default 'dotlrn_professor_profile_rel',
+        group_id in groups.group_id%TYPE default null,
+        user_id in users.user_id%TYPE,
+        creation_user in acs_objects.creation_user%TYPE default null,
+        creation_ip in acs_objects.creation_ip%TYPE default null
+    ) return dotlrn_user_profile_rels.rel_id%TYPE
+    is
+        v_rel_id                dotlrn_user_profile_rels.rel_id%TYPE;
+        v_group_id              groups.group_id%TYPE;
+    begin
+        if group_id is null then
+            select min(group_id)
+            into v_group_id
+            from profiled_groups
+            where profile_provider = (select min(impl_id)
+                                      from acs_sc_impls
+                                      where impl_name = 'dotlrn_professor_profile_provider');
+        else
+             v_group_id := group_id;
+        end if;
+
+        v_rel_id := dotlrn_user_profile_rel.new(
+            rel_id => rel_id,
+            id => id,
+            rel_type => rel_type,
+            group_id => v_group_id,
+            user_id => user_id,
+            creation_user => creation_user,
+            creation_ip => creation_ip
+        );
+
+        insert
+        into dotlrn_professor_profile_rels
+        (rel_id)
+        values
+        (v_rel_id);
+
+        return v_rel_id;
+    end;
+
+    procedure delete (
+        rel_id in dotlrn_professor_profile_rels.rel_id%TYPE
+    )
+    is
+    begin
+        delete
+        from dotlrn_professor_profile_rels
+        where rel_id = dotlrn_professor_profile_rel.delete.rel_id;
+
+        dotlrn_user_profile_rel.delete(rel_id);
+    end;
+
+end;
+/
+show errors
+
+create or replace package dotlrn_full_prof_profile_rel
+as
+    function new (
+        rel_id in dotlrn_full_prof_profile_rels.rel_id%TYPE default null,
+        portal_id in dotlrn_full_user_profile_rels.portal_id%TYPE,
+        theme_id in dotlrn_full_user_profile_rels.theme_id%TYPE default null,
+        id in dotlrn_user_profile_rels.id%TYPE default null,
+        rel_type in acs_rels.rel_type%TYPE default 'dotlrn_full_professor_profile_rel',
+        group_id in groups.group_id%TYPE default null,
+        user_id in users.user_id%TYPE,
+        creation_user in acs_objects.creation_user%TYPE default null,
+        creation_ip in acs_objects.creation_ip%TYPE default null
+    ) return dotlrn_full_user_profile_rels.rel_id%TYPE;
+
+    procedure delete (
+        rel_id in dotlrn_full_prof_profile_rels.rel_id%TYPE
+    );
+
+end;
+/
+show errors
+
+create or replace package body dotlrn_full_prof_profile_rel
+as
+    function new (
+        rel_id in dotlrn_full_prof_profile_rels.rel_id%TYPE default null,
+        portal_id in dotlrn_full_user_profile_rels.portal_id%TYPE,
+        theme_id in dotlrn_full_user_profile_rels.theme_id%TYPE default null,
+        id in dotlrn_user_profile_rels.id%TYPE default null,
+        rel_type in acs_rels.rel_type%TYPE default 'dotlrn_full_professor_profile_rel',
+        group_id in groups.group_id%TYPE default null,
+        user_id in users.user_id%TYPE,
+        creation_user in acs_objects.creation_user%TYPE default null,
+        creation_ip in acs_objects.creation_ip%TYPE default null
+    ) return dotlrn_full_user_profile_rels.rel_id%TYPE
+    is
+        v_rel_id                dotlrn_full_user_profile_rels.rel_id%TYPE;
+        v_group_id              groups.group_id%TYPE;
+    begin
+        if group_id is null then
+            select min(group_id)
+            into v_group_id
+            from profiled_groups
+            where profile_provider = (select min(impl_id)
+                                      from acs_sc_impls
+                                      where impl_name = 'dotlrn_professor_profile_provider');
+        else
+             v_group_id := group_id;
+        end if;
+
+        v_rel_id := dotlrn_full_user_profile_rel.new(
+            rel_id => rel_id,
+            portal_id => portal_id,
+            theme_id => theme_id,
+            id => id,
+            rel_type => rel_type,
+            group_id => v_group_id,
+            user_id => user_id,
+            creation_user => creation_user,
+            creation_ip => creation_ip
+        );
+
+        insert
+        into dotlrn_full_prof_profile_rels
+        (rel_id)
+        values
+        (v_rel_id);
+
+        return v_rel_id;
+    end;
+
+    procedure delete (
+        rel_id in dotlrn_full_prof_profile_rels.rel_id%TYPE
+    )
+    is
+    begin
+        delete
+        from dotlrn_full_prof_profile_rels
+        where rel_id = dotlrn_full_prof_profile_rel.delete.rel_id;
+
+        dotlrn_full_user_profile_rel.delete(rel_id);
+    end;
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-professors-package-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-professors-package-drop.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-professors-package-drop.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,9 @@
+--
+-- Create the dotLRN Professors package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-professors-package-drop.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+drop package dotlrn_full_prof_profile_rel;
+drop package dotlrn_professor_profile_rel;
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-professors-sanitize.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-professors-sanitize.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-professors-sanitize.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,65 @@
+--
+-- Sanitize the dotLRN Professor package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-professors-sanitize.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+declare
+    foo                         integer;
+begin
+
+    select min(segment_id)
+    into foo
+    from rel_segments
+    where segment_name = 'dotLRN Full Profiled Professors';
+
+    rel_segment.delete(
+        segment_id => foo
+    );
+
+    acs_rel_type.drop_type(
+        rel_type => 'dotlrn_full_professor_profile_rel',
+        cascade_p => 't'
+    );
+
+end;
+/
+show errors
+
+declare
+    foo                         integer;
+begin
+
+    select min(segment_id)
+    into foo
+    from rel_segments
+    where segment_name = 'dotLRN Profiled Professors';
+
+    rel_segment.delete(
+        segment_id => foo
+    );
+
+    select min(group_id)
+    into foo
+    from profiled_groups
+    where profile_provider = (select min(impl_id)
+                              from acs_sc_impls
+                              where impl_name = 'dotlrn_professor_profile_provider');
+
+    delete
+    from dotlrn_user_types
+    where group_id = foo;
+
+    profiled_group.delete(
+        group_id => foo
+    );
+
+    acs_rel_type.drop_type(
+        rel_type => 'dotlrn_professor_profile_rel',
+        cascade_p => 't'
+    );
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-student-profile-provider-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-student-profile-provider-create.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-student-profile-provider-create.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,56 @@
+--
+-- Implementation of the profile provider interface for dotLRN Students.
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-student-profile-provider-create.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+declare
+    foo                         integer;
+begin
+
+    -- create the implementation
+    foo := acs_sc_impl.new(
+        impl_contract_name => 'profile_provider',
+        impl_name => 'dotlrn_student_profile_provider',
+        impl_owner_name => 'dotlrn_student_profile_provider'
+    );
+
+    -- add the bindings to the method implementations
+
+        -- name method
+        foo := acs_sc_impl.new_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_student_profile_provider',
+            impl_operation_name => 'name',
+            impl_alias => 'dotlrn_student_profile_provider::name',
+            impl_pl => 'TCL'
+        );
+
+        -- prettyName method
+        foo := acs_sc_impl.new_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_student_profile_provider',
+            impl_operation_name => 'prettyName',
+            impl_alias => 'dotlrn_student_profile_provider::prettyName',
+            impl_pl => 'TCL'
+        );
+
+        -- render method
+        foo := acs_sc_impl.new_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_student_profile_provider',
+            impl_operation_name => 'render',
+            impl_alias => 'dotlrn_student_profile_provider::render',
+            impl_pl => 'TCL'
+        );
+
+    -- bind this implementation to the interface it implements
+    acs_sc_binding.new(
+        contract_name => 'profile_provider',
+        impl_name => 'dotlrn_student_profile_provider'
+    );
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-student-profile-provider-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-student-profile-provider-drop.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-student-profile-provider-drop.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,50 @@
+--
+-- Implementation of the profile provider interface for dotLRN Students.
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-student-profile-provider-drop.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+declare
+    foo                         integer;
+begin
+
+    -- drop the binding between this implementation and the interface it
+    -- implements.
+    acs_sc_binding.delete(
+        contract_name => 'profile_provider',
+        impl_name => 'dotlrn_student_profile_provider'
+    );
+
+    -- drop the bindings to the method implementations
+
+        -- name method
+        foo := acs_sc_impl.delete_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_student_profile_provider',
+            impl_operation_name => 'name'
+        );
+
+        -- prettyName method
+        foo := acs_sc_impl.delete_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_student_profile_provider',
+            impl_operation_name => 'prettyName'
+        );
+
+        -- render method
+        foo := acs_sc_impl.delete_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_student_profile_provider',
+            impl_operation_name => 'render'
+        );
+
+    -- drop the implementation
+    acs_sc_impl.delete(
+        impl_contract_name => 'profile_provider',
+        impl_name => 'dotlrn_student_profile_provider'
+    );
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-students-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-students-create.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-students-create.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,24 @@
+--
+-- Create the dotLRN Students package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-students-create.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+create table dotlrn_student_profile_rels (
+    rel_id                      constraint dotlrn_std_rels_rel_id_fk
+                                references dotlrn_user_profile_rels (rel_id)
+                                constraint dotlrn_student_profile_rels_pk
+                                primary key
+);
+
+create table dotlrn_full_stud_profile_rels (
+    rel_id                      constraint dotlrn_fs_prfl_rels_rel_fk
+                                references dotlrn_full_user_profile_rels (rel_id)
+                                constraint dotlrn_fs_prfl_rels_pk
+                                primary key
+);
+
+@@ dotlrn-student-profile-provider-create.sql
+@@ dotlrn-students-init.sql
+@@ dotlrn-students-package-create.sql
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-students-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-students-drop.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-students-drop.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,13 @@
+--
+-- Drop the dotLRN Students package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-students-drop.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+@@ dotlrn-students-package-drop.sql
+@@ dotlrn-students-sanitize.sql
+@@ dotlrn-student-profile-provider-drop.sql
+
+drop table dotlrn_full_stud_profile_rels;
+drop table dotlrn_student_profile_rels;
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-students-init.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-students-init.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-students-init.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,105 @@
+--
+-- Initialize the dotLRN Students package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-students-init.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+declare
+    foo                         integer;
+    group_id                    integer;
+    dotlrn_users_group_id       integer;
+begin
+
+    acs_rel_type.create_type(
+        rel_type => 'dotlrn_student_profile_rel',
+        supertype => 'dotlrn_user_profile_rel',
+        pretty_name => 'dotLRN Student Profile Membership',
+        pretty_plural => 'dotLRN Student Profile Memberships',
+        package_name => 'dotlrn_student_profile_rel',
+        table_name => 'dotlrn_student_profile_rels',
+        id_column => 'rel_id',
+        object_type_one => 'profiled_group',
+        role_one => null,
+        min_n_rels_one => 0,
+        max_n_rels_one => null,
+        object_type_two => 'user',
+        role_two => null,
+        min_n_rels_two => 0,
+        max_n_rels_two => 1
+    );
+
+    select min(impl_id)
+    into foo
+    from acs_sc_impls
+    where impl_name = 'dotlrn_student_profile_provider';
+
+    group_id := profiled_group.new(
+        profile_provider => foo,
+        group_name => 'dotLRN Students'
+    );
+
+    insert
+    into dotlrn_user_types
+    (type, pretty_name, group_id)
+    values
+    ('student', 'Student', group_id);
+
+    foo := rel_segment.new(
+        segment_name => 'dotLRN Profiled Students',
+        group_id => group_id,
+        rel_type => 'dotlrn_student_profile_rel'
+    );
+
+    select group_id
+    into dotlrn_users_group_id
+    from groups
+    where group_name = 'dotLRN Users';
+
+    foo := composition_rel.new(
+        object_id_one => dotlrn_users_group_id,
+        object_id_two => group_id
+    );
+
+end;
+/
+show errors
+
+declare
+    foo                         integer;
+begin
+
+    acs_rel_type.create_type(
+        rel_type => 'dotlrn_full_student_profile_rel',
+        supertype => 'dotlrn_full_user_profile_rel',
+        pretty_name => 'dotLRN Full Student Profile Membership',
+        pretty_plural => 'dotLRN Full Student Profile Memberships',
+        package_name => 'dotlrn_full_stud_profile_rel',
+        table_name => 'dotlrn_full_stud_profile_rels',
+        id_column => 'rel_id',
+        object_type_one => 'profiled_group',
+        role_one => null,
+        min_n_rels_one => 0,
+        max_n_rels_one => null,
+        object_type_two => 'user',
+        role_two => null,
+        min_n_rels_two => 0,
+        max_n_rels_two => 1
+    );
+
+    select min(group_id)
+    into foo
+    from profiled_groups
+    where profile_provider = (select min(impl_id)
+                              from acs_sc_impls
+                              where impl_name = 'dotlrn_student_profile_provider');
+
+    foo := rel_segment.new(
+        segment_name => 'dotLRN Full Profiled Students',
+        group_id => foo,
+        rel_type => 'dotlrn_full_student_profile_rel'
+    );
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-students-package-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-students-package-create.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-students-package-create.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,174 @@
+--
+-- Create the Student package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-students-package-create.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+create or replace package dotlrn_student_profile_rel
+as
+    function new (
+        rel_id in dotlrn_student_profile_rels.rel_id%TYPE default null,
+        id in dotlrn_user_profile_rels.id%TYPE default null,
+        rel_type in acs_rels.rel_type%TYPE default 'dotlrn_student_profile_rel',
+        group_id in groups.group_id%TYPE default null,
+        user_id in users.user_id%TYPE,
+        creation_user in acs_objects.creation_user%TYPE default null,
+        creation_ip in acs_objects.creation_ip%TYPE default null
+    ) return dotlrn_user_profile_rels.rel_id%TYPE;
+
+    procedure delete (
+        rel_id in dotlrn_student_profile_rels.rel_id%TYPE
+    );
+
+end;
+/
+show errors
+
+create or replace package body dotlrn_student_profile_rel
+as
+    function new (
+        rel_id in dotlrn_student_profile_rels.rel_id%TYPE default null,
+        id in dotlrn_user_profile_rels.id%TYPE default null,
+        rel_type in acs_rels.rel_type%TYPE default 'dotlrn_student_profile_rel',
+        group_id in groups.group_id%TYPE default null,
+        user_id in users.user_id%TYPE,
+        creation_user in acs_objects.creation_user%TYPE default null,
+        creation_ip in acs_objects.creation_ip%TYPE default null
+    ) return dotlrn_user_profile_rels.rel_id%TYPE
+    is
+        v_rel_id                dotlrn_user_profile_rels.rel_id%TYPE;
+        v_group_id              groups.group_id%TYPE;
+    begin
+        if group_id is null then
+            select min(group_id)
+            into v_group_id
+            from profiled_groups
+            where profile_provider = (select min(impl_id)
+                                      from acs_sc_impls
+                                      where impl_name = 'dotlrn_student_profile_provider');
+        else
+             v_group_id := group_id;
+        end if;
+
+        v_rel_id := dotlrn_user_profile_rel.new(
+            rel_id => rel_id,
+            id => id,
+            rel_type => rel_type,
+            group_id => v_group_id,
+            user_id => user_id,
+            creation_user => creation_user,
+            creation_ip => creation_ip
+        );
+
+        insert
+        into dotlrn_student_profile_rels
+        (rel_id)
+        values
+        (v_rel_id);
+
+        return v_rel_id;
+    end;
+
+    procedure delete (
+        rel_id in dotlrn_student_profile_rels.rel_id%TYPE
+    )
+    is
+    begin
+        delete
+        from dotlrn_student_profile_rels
+        where rel_id = dotlrn_student_profile_rel.delete.rel_id;
+
+        dotlrn_user_profile_rel.delete(rel_id);
+    end;
+
+end;
+/
+show errors
+
+create or replace package dotlrn_full_stud_profile_rel
+as
+    function new (
+        rel_id in dotlrn_full_stud_profile_rels.rel_id%TYPE default null,
+        portal_id in dotlrn_full_user_profile_rels.portal_id%TYPE,
+        theme_id in dotlrn_full_user_profile_rels.theme_id%TYPE default null,
+        id in dotlrn_user_profile_rels.id%TYPE default null,
+        rel_type in acs_rels.rel_type%TYPE default 'dotlrn_full_student_profile_rel',
+        group_id in groups.group_id%TYPE default null,
+        user_id in users.user_id%TYPE,
+        creation_user in acs_objects.creation_user%TYPE default null,
+        creation_ip in acs_objects.creation_ip%TYPE default null
+    ) return dotlrn_full_user_profile_rels.rel_id%TYPE;
+
+    procedure delete (
+        rel_id in dotlrn_full_stud_profile_rels.rel_id%TYPE
+    );
+
+end;
+/
+show errors
+
+create or replace package body dotlrn_full_stud_profile_rel
+as
+    function new (
+        rel_id in dotlrn_full_stud_profile_rels.rel_id%TYPE default null,
+        portal_id in dotlrn_full_user_profile_rels.portal_id%TYPE,
+        theme_id in dotlrn_full_user_profile_rels.theme_id%TYPE default null,
+        id in dotlrn_user_profile_rels.id%TYPE default null,
+        rel_type in acs_rels.rel_type%TYPE default 'dotlrn_full_student_profile_rel',
+        group_id in groups.group_id%TYPE default null,
+        user_id in users.user_id%TYPE,
+        creation_user in acs_objects.creation_user%TYPE default null,
+        creation_ip in acs_objects.creation_ip%TYPE default null
+    ) return dotlrn_full_user_profile_rels.rel_id%TYPE
+    is
+        v_rel_id                dotlrn_full_user_profile_rels.rel_id%TYPE;
+        v_group_id              groups.group_id%TYPE;
+    begin
+        if group_id is null then
+            select min(group_id)
+            into v_group_id
+            from profiled_groups
+            where profile_provider = (select min(impl_id)
+                                      from acs_sc_impls
+                                      where impl_name = 'dotlrn_student_profile_provider');
+        else
+             v_group_id := group_id;
+        end if;
+
+        v_rel_id := dotlrn_full_user_profile_rel.new(
+            rel_id => rel_id,
+            portal_id => portal_id,
+            theme_id => theme_id,
+            id => id,
+            rel_type => rel_type,
+            group_id => v_group_id,
+            user_id => user_id,
+            creation_user => creation_user,
+            creation_ip => creation_ip
+        );
+
+        insert
+        into dotlrn_full_stud_profile_rels
+        (rel_id)
+        values
+        (v_rel_id);
+
+        return v_rel_id;
+    end;
+
+    procedure delete (
+        rel_id in dotlrn_full_stud_profile_rels.rel_id%TYPE
+    )
+    is
+    begin
+        delete
+        from dotlrn_full_stud_profile_rels
+        where rel_id = dotlrn_full_stud_profile_rel.delete.rel_id;
+
+        dotlrn_full_user_profile_rel.delete(rel_id);
+    end;
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-students-package-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-students-package-drop.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-students-package-drop.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,9 @@
+--
+-- Create the dotLRN Students package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-students-package-drop.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+drop package dotlrn_full_stud_profile_rel;
+drop package dotlrn_student_profile_rel;
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-students-sanitize.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-students-sanitize.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-students-sanitize.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,65 @@
+--
+-- Sanitize the dotLRN Student package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-students-sanitize.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+declare
+    foo                         integer;
+begin
+
+    select min(segment_id)
+    into foo
+    from rel_segments
+    where segment_name = 'dotLRN Full Profiled Students';
+
+    rel_segment.delete(
+        segment_id => foo
+    );
+
+    acs_rel_type.drop_type(
+        rel_type => 'dotlrn_full_student_profile_rel',
+        cascade_p => 't'
+    );
+
+end;
+/
+show errors
+
+declare
+    foo                         integer;
+begin
+
+    select min(segment_id)
+    into foo
+    from rel_segments
+    where segment_name = 'dotLRN Profiled Students';
+
+    rel_segment.delete(
+        segment_id => foo
+    );
+
+    select min(group_id)
+    into foo
+    from profiled_groups
+    where profile_provider = (select min(impl_id)
+                              from acs_sc_impls
+                              where impl_name = 'dotlrn_student_profile_provider');
+
+    delete
+    from dotlrn_user_types
+    where group_id = foo;
+
+    profiled_group.delete(
+        group_id => foo
+    );
+
+    acs_rel_type.drop_type(
+        rel_type => 'dotlrn_student_profile_rel',
+        cascade_p => 't'
+    );
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-user-profile-provider-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-user-profile-provider-create.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-user-profile-provider-create.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,56 @@
+--
+-- Implementation of the profile provider interface for dotlrn users.
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-user-profile-provider-create.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+declare
+    foo                         integer;
+begin
+
+    -- create the implementation
+    foo := acs_sc_impl.new(
+        impl_contract_name => 'profile_provider',
+        impl_name => 'dotlrn_user_profile_provider',
+        impl_owner_name => 'dotlrn_user_profile_provider'
+    );
+
+    -- add the bindings to the method implementations
+
+        -- name method
+        foo := acs_sc_impl.new_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_user_profile_provider',
+            impl_operation_name => 'name',
+            impl_alias => 'dotlrn_user_profile_provider::name',
+            impl_pl => 'TCL'
+        );
+
+        -- prettyName method
+        foo := acs_sc_impl.new_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_user_profile_provider',
+            impl_operation_name => 'prettyName',
+            impl_alias => 'dotlrn_user_profile_provider::prettyName',
+            impl_pl => 'TCL'
+        );
+
+        -- render method
+        foo := acs_sc_impl.new_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_user_profile_provider',
+            impl_operation_name => 'render',
+            impl_alias => 'dotlrn_user_profile_provider::render',
+            impl_pl => 'TCL'
+        );
+
+    -- bind this implementation to the interface it implements
+    acs_sc_binding.new(
+        contract_name => 'profile_provider',
+        impl_name => 'dotlrn_user_profile_provider'
+    );
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-user-profile-provider-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-user-profile-provider-drop.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-user-profile-provider-drop.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,50 @@
+--
+-- Implementation of the profile provider interface for dotlrn users.
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-user-profile-provider-drop.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+declare
+    foo                         integer;
+begin
+
+    -- drop the binding between this implementation and the interface it
+    -- implements.
+    acs_sc_binding.delete(
+        contract_name => 'profile_provider',
+        impl_name => 'dotlrn_user_profile_provider'
+    );
+
+    -- drop the bindings to the method implementations
+
+        -- name method
+        foo := acs_sc_impl.delete_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_user_profile_provider',
+            impl_operation_name => 'name'
+        );
+
+        -- prettyName method
+        foo := acs_sc_impl.delete_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_user_profile_provider',
+            impl_operation_name => 'prettyName'
+        );
+
+        -- render method
+        foo := acs_sc_impl.delete_alias(
+            impl_contract_name => 'profile_provider',
+            impl_name => 'dotlrn_user_profile_provider',
+            impl_operation_name => 'render'
+        );
+
+    -- drop the implementation
+    acs_sc_impl.delete(
+        impl_contract_name => 'profile_provider',
+        impl_name => 'dotlrn_user_profile_provider'
+    );
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-users-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-users-create.sql,v
diff -u -r1.8 -r1.9
--- openacs-4/packages/dotlrn/sql/oracle/dotlrn-users-create.sql	10 Jan 2002 19:30:17 -0000	1.8
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-users-create.sql	8 Feb 2002 20:50:56 -0000	1.9
@@ -1,157 +1,77 @@
-
 --
--- The DotLRN basic system
--- copyright 2001, OpenForce, Inc.
--- distributed under the GNU GPL v2
+-- Create the dotLRN Users package
 --
--- for Oracle 8/8i. (We're guessing 9i works, too).
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id$
 --
--- ben@openforce.net
--- October 30th, 2001
--- we remember September 11th, 2001
---
 
---
--- Users of the dotLRN system
---
-
--- not an object, there's really no use for it
--- this is just so other, non-university systems can set up their own user types
-create table dotlrn_user_types (
-       type_id                  integer not null
-                                constraint dlrn_user_type_pk primary key,
-       type                     varchar2(200) not null
-                                constraint dlrn_user_type_un unique
+create table dotlrn_user_profile_rels (
+    rel_id                      constraint dotlrn_usr_prfl_rels_rel_id_fk
+                                references user_profile_rels (rel_id)
+                                constraint dotlrn_user_profile_rels_pk
+                                primary key,
+    id                          varchar2(100)
 );
 
-create table dotlrn_user_rels (
-       rel_id                   integer not null
-                                constraint dlrn_user_rel_fk references membership_rels(rel_id)
-                                constraint dlrn_user_rel_pk primary key,
-       type_id                  integer not null
-                                constraint dlrn_user_rel_type_fk references dotlrn_user_types(type_id)
+create table dotlrn_full_user_profile_rels (
+    rel_id                      constraint dotlrn_fup_rels_rel_fk
+                                references dotlrn_user_profile_rels (rel_id)
+                                constraint dotlrn_full_user_prfl_rels_pk
+                                primary key,
+    portal_id                   constraint dotlrn_fup_rels_portal_fk
+                                references portals (portal_id)
+                                constraint dotlrn_fup_rels_portal_nn
+                                not null,
+    theme_id                    constraint dotlrn_fup_rels_theme_fk
+                                references portal_element_themes (theme_id)
 );
 
-create table dotlrn_full_user_rels (
-       rel_id                   integer not null
-                                constraint dlrn_full_user_rel_fk references dotlrn_user_rels(rel_id)
-                                constraint dlrn_full_user_rel_pk primary key,
-       theme_id                 integer
-                                constraint dlrn_full_user_theme_fk references portal_element_themes(theme_id),
-       portal_id                integer not null
-                                constraint dlrn_full_user_portal_fk references portals(portal_id)
+create table dotlrn_user_types (
+    type                        varchar2(100)
+                                constraint dotlrn_user_types_pk
+                                primary key,
+    pretty_name                 varchar2(200),
+    group_id                    constraint dotlrn_user_types_group_id_fk
+                                references profiled_groups (group_id)
+                                constraint dotlrn_user_types_group_id_nn
+                                not null
 );
 
--- the user group
-declare
-    foo integer;
-begin
-    foo:= acs_group.new (
-        group_id => null,
-        object_type => 'group',
-        creation_date => sysdate,
-        group_name => 'dotLRN Users'
-    );
-end;
-/
-show errors
-
-create or replace function dotlrn_get_group_id return integer is
-    p_group_id integer;
-begin
-    select max(group_id) into p_group_id
-    from groups
-    where group_name = 'dotLRN Users';
-
-    return p_group_id;
-end;
-/
-show errors
-
-create view dotlrn_users
+create or replace view dotlrn_users
 as
     select acs_rels.rel_id,
+           dotlrn_user_profile_rels.id,
            registered_users.user_id,
-           first_names,
-           last_name,
-           email,
-           dotlrn_user_types.type_id,
-           type
-    from dotlrn_user_rels,
+           registered_users.first_names,
+           registered_users.last_name,
+           registered_users.email,
+           dotlrn_user_types.type
+    from dotlrn_user_profile_rels,
          acs_rels,
          registered_users,
          dotlrn_user_types
     where acs_rels.object_id_two = registered_users.user_id
-    and acs_rels.object_id_one = dotlrn_get_group_id()
-    and acs_rels.rel_id = dotlrn_user_rels.rel_id
-    and dotlrn_user_rels.type_id = dotlrn_user_types.type_id;
+    and acs_rels.object_id_one = dotlrn_user_types.group_id
+    and acs_rels.rel_id = dotlrn_user_profile_rels.rel_id;
 
-create view dotlrn_full_users
+create or replace view dotlrn_full_users
 as
-    select acs_rels.rel_id,
-           registered_users.user_id,
-           first_names,
-           last_name,
-           email,
-           dotlrn_user_types.type_id,
-           type,
-           portal_id,
-           theme_id
-    from dotlrn_user_rels,
-         dotlrn_full_user_rels,
-         acs_rels,
-         registered_users,
-         dotlrn_user_types
-    where acs_rels.object_id_two = registered_users.user_id
-    and acs_rels.object_id_one = dotlrn_get_group_id()
-    and acs_rels.rel_id = dotlrn_user_rels.rel_id
-    and dotlrn_user_rels.rel_id = dotlrn_full_user_rels.rel_id
-    and dotlrn_user_types.type_id = dotlrn_user_rels.type_id;
+    select dotlrn_users.*,
+           dotlrn_full_user_profile_rels.portal_id,
+           dotlrn_full_user_profile_rels.theme_id
+    from dotlrn_users,
+         dotlrn_full_user_profile_rels
+    where dotlrn_users.rel_id = dotlrn_full_user_profile_rels.rel_id;
 
--- The packages
+@@ dotlrn-user-profile-provider-create.sql
+@@ dotlrn-users-init.sql
+@@ dotlrn-users-package-create.sql
 
-declare
-    v_group_id integer;
-    foo integer;
-begin
-    acs_rel_type.create_type (
-        rel_type => 'dotlrn_user_rel',
-        supertype => 'membership_rel',
-        pretty_name => 'dotLRN User Membership',
-        pretty_plural => 'dotLRN User Memberships',
-        package_name => 'dotlrn_user_rel',
-        table_name => 'dotlrn_user_rels',
-        id_column => 'rel_id',
-        object_type_one => 'group', role_one => null, min_n_rels_one => 0, max_n_rels_one => null,
-        object_type_two => 'user', role_two => null, min_n_rels_two => 0, max_n_rels_two => 1
-    );
+-- create administrators
+@@ dotlrn-admins-create.sql
 
-    acs_rel_type.create_type (
-        rel_type => 'dotlrn_full_user_rel',
-        supertype => 'dotlrn_user_rel',
-        pretty_name => 'dotLRN Full User Membership',
-        pretty_plural => 'dotLRN Full User Memberships',
-        package_name => 'dotlrn_full_user_rel',
-        table_name => 'dotlrn_full_user_rels',
-        id_column => 'rel_id',
-        object_type_one => 'group', role_one => null, min_n_rels_one => 0, max_n_rels_one => null,
-        object_type_two => 'user', role_two => null, min_n_rels_two => 0, max_n_rels_two => 1
-    );
+-- create professors
+@@ dotlrn-professors-create.sql
 
-    v_group_id:= dotlrn_get_group_id();
-
-    -- Now we create the rel segments!
-    foo:= rel_segment.new (
-        segment_name => 'dotLRN Users',
-        group_id => v_group_id,
-        rel_type => 'dotlrn_user_rel'
-    );
-
-    foo:= rel_segment.new (
-        segment_name => 'dotLRN Full Access Users',
-        group_id => v_group_id,
-        rel_type => 'dotlrn_full_user_rel'
-    );
-end;
-/
-show errors
+-- create students
+@@ dotlrn-students-create.sql
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-users-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-users-drop.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-users-drop.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,26 @@
+--
+-- Drop the User Profile package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-users-drop.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+-- drop students
+@@ dotlrn-students-drop.sql
+
+-- drop professors
+@@ dotlrn-professors-drop.sql
+
+-- drop admins
+@@ dotlrn-admins-drop.sql
+
+@@ dotlrn-users-package-drop.sql
+@@ dotlrn-users-sanitize.sql
+@@ dotlrn-user-profile-provider-drop.sql
+
+drop view dotlrn_full_users;
+drop view dotlrn_users;
+
+drop table dotlrn_user_types;
+drop table dotlrn_full_user_profile_rels;
+drop table dotlrn_user_profile_rels;
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-users-init.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-users-init.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-users-init.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,87 @@
+--
+-- Initialize the User Profile package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-users-init.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+declare
+    foo                         integer;
+begin
+
+    acs_rel_type.create_type(
+        rel_type => 'dotlrn_user_profile_rel',
+        supertype => 'user_profile_rel',
+        pretty_name => 'dotLRN User Profile Membership',
+        pretty_plural => 'dotLRN User Profile Memberships',
+        package_name => 'dotlrn_user_profile_rel',
+        table_name => 'dotlrn_user_profile_rels',
+        id_column => 'rel_id',
+        object_type_one => 'profiled_group',
+        role_one => null,
+        min_n_rels_one => 0,
+        max_n_rels_one => null,
+        object_type_two => 'user',
+        role_two => null,
+        min_n_rels_two => 0,
+        max_n_rels_two => 1
+    );
+
+    select min(impl_id)
+    into foo
+    from acs_sc_impls
+    where impl_name = 'dotlrn_user_profile_provider';
+
+    foo := profiled_group.new(
+        profile_provider => foo,
+        group_name => 'dotLRN Users'
+    );
+
+    foo := rel_segment.new(
+        segment_name => 'dotLRN Profiled Users',
+        group_id => foo,
+        rel_type => 'dotlrn_user_profile_rel'
+    );
+
+end;
+/
+show errors
+
+declare
+    foo                         integer;
+begin
+
+    acs_rel_type.create_type(
+        rel_type => 'dotlrn_full_user_profile_rel',
+        supertype => 'dotlrn_user_profile_rel',
+        pretty_name => 'dotLRN Full User Profile Membership',
+        pretty_plural => 'dotLRN Full User Profile Memberships',
+        package_name => 'dotlrn_full_user_profile_rel',
+        table_name => 'dotlrn_full_user_profile_rels',
+        id_column => 'rel_id',
+        object_type_one => 'profiled_group',
+        role_one => null,
+        min_n_rels_one => 0,
+        max_n_rels_one => null,
+        object_type_two => 'user',
+        role_two => null,
+        min_n_rels_two => 0,
+        max_n_rels_two => 1
+    );
+
+    select min(group_id)
+    into foo
+    from profiled_groups
+    where profile_provider = (select min(impl_id)
+                              from acs_sc_impls
+                              where impl_name = 'dotlrn_user_profile_provider');
+
+    foo := rel_segment.new(
+        segment_name => 'dotLRN Full Profiled Users',
+        group_id => foo,
+        rel_type => 'dotlrn_full_user_profile_rel'
+    );
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-users-package-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-users-package-create.sql,v
diff -u -r1.5 -r1.6
--- openacs-4/packages/dotlrn/sql/oracle/dotlrn-users-package-create.sql	1 Dec 2001 23:16:27 -0000	1.5
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-users-package-create.sql	8 Feb 2002 20:50:56 -0000	1.6
@@ -1,161 +1,171 @@
-
 --
--- The DotLRN basic system
--- copyright 2001, OpenForce, Inc.
--- distributed under the GNU GPL v2
+-- Create the User Profile package
 --
--- for Oracle 8/8i. (We're guessing 9i works, too).
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id$
 --
--- ben@openforce.net
--- October 30th, 2001
--- we remember September 11th, 2001
---
 
---
--- Users of the dotLRN system
---
+create or replace package dotlrn_user_profile_rel
+as
+    function new (
+        rel_id in dotlrn_user_profile_rels.rel_id%TYPE default null,
+        id in dotlrn_user_profile_rels.id%TYPE default null,
+        rel_type in acs_rels.rel_type%TYPE default 'dotlrn_user_profile_rel',
+        group_id in groups.group_id%TYPE default null,
+        user_id in users.user_id%TYPE,
+        creation_user in acs_objects.creation_user%TYPE default null,
+        creation_ip in acs_objects.creation_ip%TYPE default null
+    ) return dotlrn_user_profile_rels.rel_id%TYPE;
 
-create or replace package dotlrn_user_rel
-is
-  function new (
-    rel_id		in dotlrn_user_rels.rel_id%TYPE default NULL,
-    rel_type		in acs_rels.rel_type%TYPE default 'dotlrn_user_rel',
-    type_id		in dotlrn_user_rels.type_id%TYPE,
-    group_id		in groups.group_id%TYPE default NULL,
-    user_id		in users.user_id%TYPE,
-    creation_user	in acs_objects.creation_user%TYPE default null,
-    creation_ip		in acs_objects.creation_ip%TYPE default null
-  ) return dotlrn_user_rels.rel_id%TYPE;
+    procedure delete (
+        rel_id in dotlrn_user_profile_rels.rel_id%TYPE
+    );
 
-  procedure delete (
-    rel_id		in dotlrn_user_rels.rel_id%TYPE
-  );
-
 end;
 /
 show errors
 
+create or replace package body dotlrn_user_profile_rel
+as
+    function new (
+        rel_id in dotlrn_user_profile_rels.rel_id%TYPE default null,
+        id in dotlrn_user_profile_rels.id%TYPE default null,
+        rel_type in acs_rels.rel_type%TYPE default 'dotlrn_user_profile_rel',
+        group_id in groups.group_id%TYPE default null,
+        user_id in users.user_id%TYPE,
+        creation_user in acs_objects.creation_user%TYPE default null,
+        creation_ip in acs_objects.creation_ip%TYPE default null
+    ) return dotlrn_user_profile_rels.rel_id%TYPE
+    is
+        v_rel_id                user_profile_rels.rel_id%TYPE;
+        v_group_id              groups.group_id%TYPE;
+    begin
+        if group_id is null then
+            select min(group_id)
+            into v_group_id
+            from profiled_groups
+            where profile_provider = (select min(impl_id)
+                                      from acs_sc_impls
+                                      where impl_name = 'dotlrn_user_profile_provider');
+        else
+             v_group_id := group_id;
+        end if;
 
-create or replace package body dotlrn_user_rel
-is
-  function new (
-    rel_id		in dotlrn_user_rels.rel_id%TYPE default NULL,
-    rel_type		in acs_rels.rel_type%TYPE default 'dotlrn_user_rel',
-    type_id		in dotlrn_user_rels.type_id%TYPE,
-    group_id		in groups.group_id%TYPE default NULL,
-    user_id		in users.user_id%TYPE,
-    creation_user	in acs_objects.creation_user%TYPE default null,
-    creation_ip		in acs_objects.creation_ip%TYPE default null
-  ) return dotlrn_user_rels.rel_id%TYPE
-  is
-    v_rel_id		membership_rels.rel_id%TYPE;
-    p_group_id		groups.group_id%TYPE;
-  begin
-    if group_id is NULL then
-       p_group_id:= dotlrn_get_group_id();
-    else 
-       p_group_id:= group_id;
-    end if;
+        v_rel_id := user_profile_rel.new(
+            rel_id => rel_id,
+            rel_type => rel_type,
+            group_id => v_group_id,
+            user_id => user_id,
+            creation_user => creation_user,
+            creation_ip => creation_ip
+        );
 
-    v_rel_id:= membership_rel.new (
-		rel_id => rel_id,
-		rel_type => rel_type,
-		object_id_one => p_group_id,
-		object_id_two => user_id,
-		creation_user => creation_user,
-		creation_ip => creation_ip);
+        insert
+        into dotlrn_user_profile_rels
+        (rel_id, id)
+        values
+        (v_rel_id, id);
 
-    insert into dotlrn_user_rels
-    (rel_id, type_id) values
-    (v_rel_id, type_id);
+        return v_rel_id;
+    end;
 
-    return v_rel_id;
-  end;
+    procedure delete (
+        rel_id in dotlrn_user_profile_rels.rel_id%TYPE
+    )
+    is
+    begin
+        delete
+        from dotlrn_user_profile_rels
+        where rel_id = dotlrn_user_profile_rel.delete.rel_id;
 
-  procedure delete (
-    rel_id		in dotlrn_user_rels.rel_id%TYPE
-  )
-  is
-  begin
-    delete from dotlrn_user_rels where rel_id= dotlrn_user_rel.delete.rel_id;
+        user_profile_rel.delete(rel_id);
+    end;
 
-    membership_rel.delete(rel_id);
-  end;
-
 end;
 /
 show errors
 
+create or replace package dotlrn_full_user_profile_rel
+as
+    function new (
+        rel_id in dotlrn_full_user_profile_rels.rel_id%TYPE default null,
+        portal_id in dotlrn_full_user_profile_rels.portal_id%TYPE,
+        theme_id in dotlrn_full_user_profile_rels.theme_id%TYPE default null,
+        id in dotlrn_user_profile_rels.id%TYPE default null,
+        rel_type in acs_rels.rel_type%TYPE default 'dotlrn_full_user_profile_rel',
+        group_id in groups.group_id%TYPE default null,
+        user_id in users.user_id%TYPE,
+        creation_user in acs_objects.creation_user%TYPE default null,
+        creation_ip in acs_objects.creation_ip%TYPE default null
+    ) return dotlrn_user_profile_rels.rel_id%TYPE;
 
+    procedure delete (
+        rel_id in dotlrn_full_user_profile_rels.rel_id%TYPE
+    );
 
---
--- Full Users
---
-
-create or replace package dotlrn_full_user_rel
-is
-  function new (
-    rel_id		in dotlrn_full_user_rels.rel_id%TYPE default NULL,
-    rel_type		in acs_rels.rel_type%TYPE default 'dotlrn_full_user_rel',
-    type_id		in dotlrn_user_rels.type_id%TYPE,
-    portal_id		in dotlrn_full_user_rels.portal_id%TYPE,
-    group_id		in groups.group_id%TYPE default NULL,
-    user_id		in users.user_id%TYPE,
-    creation_user	in acs_objects.creation_user%TYPE default null,
-    creation_ip		in acs_objects.creation_ip%TYPE default null
-  ) return dotlrn_full_user_rels.rel_id%TYPE;
-
-  procedure delete (
-    rel_id		in dotlrn_full_user_rels.rel_id%TYPE
-  );
-
 end;
 /
 show errors
 
+create or replace package body dotlrn_full_user_profile_rel
+as
+    function new (
+        rel_id in dotlrn_full_user_profile_rels.rel_id%TYPE default null,
+        portal_id in dotlrn_full_user_profile_rels.portal_id%TYPE,
+        theme_id in dotlrn_full_user_profile_rels.theme_id%TYPE default null,
+        id in dotlrn_user_profile_rels.id%TYPE default null,
+        rel_type in acs_rels.rel_type%TYPE default 'dotlrn_full_user_profile_rel',
+        group_id in groups.group_id%TYPE default null,
+        user_id in users.user_id%TYPE,
+        creation_user in acs_objects.creation_user%TYPE default null,
+        creation_ip in acs_objects.creation_ip%TYPE default null
+    ) return dotlrn_user_profile_rels.rel_id%TYPE
+    is
+        v_rel_id                dotlrn_user_profile_rels.rel_id%TYPE;
+        v_group_id              groups.group_id%TYPE;
+    begin
+        if group_id is null then
+            select min(group_id)
+            into v_group_id
+            from profiled_groups
+            where profile_provider = (select min(impl_id)
+                                      from acs_sc_impls
+                                      where impl_name = 'dotlrn_user_profile_provider');
+        else
+             v_group_id := group_id;
+        end if;
 
-create or replace package body dotlrn_full_user_rel
-is
-  function new (
-    rel_id		in dotlrn_full_user_rels.rel_id%TYPE default NULL,
-    rel_type		in acs_rels.rel_type%TYPE default 'dotlrn_full_user_rel',
-    type_id		in dotlrn_user_rels.type_id%TYPE,    
-    portal_id		in dotlrn_full_user_rels.portal_id%TYPE,
-    group_id		in groups.group_id%TYPE default NULL,
-    user_id		in users.user_id%TYPE,
-    creation_user	in acs_objects.creation_user%TYPE default null,
-    creation_ip		in acs_objects.creation_ip%TYPE default null
-  ) return dotlrn_full_user_rels.rel_id%TYPE
-  is
-    v_rel_id		dotlrn_user_rels.rel_id%TYPE;
-  begin
-    v_rel_id:= dotlrn_user_rel.new (
-		rel_id => rel_id,
-		rel_type => rel_type,
-		type_id => type_id,
-		group_id => group_id,
-		user_id => user_id,
-		creation_user => creation_user,
-		creation_ip => creation_ip);
+        v_rel_id := dotlrn_user_profile_rel.new(
+            rel_id => rel_id,
+            id => id,
+            rel_type => rel_type,
+            group_id => v_group_id,
+            user_id => user_id,
+            creation_user => creation_user,
+            creation_ip => creation_ip
+        );
 
-    insert into dotlrn_full_user_rels
-    (rel_id, portal_id) values
-    (v_rel_id, portal_id);
+        insert
+        into dotlrn_full_user_profile_rels
+        (rel_id, portal_id, theme_id)
+        values
+        (v_rel_id, portal_id, theme_id);
 
-    return v_rel_id;
-  end;
+        return v_rel_id;
+    end;
 
-  procedure delete (
-    rel_id		in dotlrn_full_user_rels.rel_id%TYPE
-  )
-  is
-  begin
-    delete from dotlrn_full_user_rels where rel_id = dotlrn_full_user_rel.delete.rel_id;
+    procedure delete (
+        rel_id in dotlrn_full_user_profile_rels.rel_id%TYPE
+    )
+    is
+    begin
+        delete
+        from dotlrn_full_user_profile_rels
+        where rel_id = dotlrn_full_user_profile_rel.delete.rel_id;
 
-    dotlrn_user_rel.delete(rel_id);
-  end;
+        dotlrn_user_profile_rel.delete(rel_id);
+    end;
 
 end;
 /
 show errors
-
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-users-package-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-users-package-drop.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-users-package-drop.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,9 @@
+--
+-- Create the User Profile package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-users-package-drop.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+drop package dotlrn_full_user_profile_rel;
+drop package dotlrn_user_profile_rel;
Index: openacs-4/packages/dotlrn/sql/oracle/dotlrn-users-sanitize.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/oracle/Attic/dotlrn-users-sanitize.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/sql/oracle/dotlrn-users-sanitize.sql	8 Feb 2002 20:50:56 -0000	1.1
@@ -0,0 +1,61 @@
+--
+-- Sanitize the User Profile package
+--
+-- @author <a href="mailto:yon@openforce.net">yon@openforce.net</a>
+-- @version $Id: dotlrn-users-sanitize.sql,v 1.1 2002/02/08 20:50:56 yon Exp $
+--
+
+declare
+    foo                         integer;
+begin
+
+    select min(segment_id)
+    into foo
+    from rel_segments
+    where segment_name = 'dotLRN Full Profiled Users';
+
+    rel_segment.delete(
+        segment_id => foo
+    );
+
+    acs_rel_type.drop_type(
+        rel_type => 'dotlrn_full_user_profile_rel',
+        cascade_p => 't'
+    );
+
+end;
+/
+show errors
+
+declare
+    foo                         integer;
+begin
+
+    select min(segment_id)
+    into foo
+    from rel_segments
+    where segment_name = 'dotLRN Profiled Users';
+
+    rel_segment.delete(
+        segment_id => foo
+    );
+
+    select min(group_id)
+    into foo
+    from profiled_groups
+    where profile_provider = (select min(impl_id)
+                              from acs_sc_impls
+                              where impl_name = 'dotlrn_user_profile_provider');
+
+    profiled_group.delete(
+        group_id => foo
+    );
+
+    acs_rel_type.drop_type(
+        rel_type => 'dotlrn_user_profile_rel',
+        cascade_p => 't'
+    );
+
+end;
+/
+show errors
Index: openacs-4/packages/dotlrn/tcl/dotlrn-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/tcl/dotlrn-procs.tcl,v
diff -u -r1.34 -r1.35
--- openacs-4/packages/dotlrn/tcl/dotlrn-procs.tcl	25 Jan 2002 00:23:40 -0000	1.34
+++ openacs-4/packages/dotlrn/tcl/dotlrn-procs.tcl	8 Feb 2002 20:50:57 -0000	1.35
@@ -274,11 +274,26 @@
 	return [portal::render -page_num $page_num -hide_links_p $hide_links_p -render_style $render_style $portal_id $theme_id ]
     }
 
-    ad_proc -public get_user_type_id_from_type {
+    ad_proc -public get_group_id_from_user_type {
         -type
     } {
-        return the type_id of a dotlrn_user type
+        return the group_id of the group that holds users of this type
     } {
-        return [db_string select_user_type_id_from_type {} -default ""]
+        return [db_string select_group_id_from_user_type {} -default ""]
     }
+
+    ad_proc -public get_rel_type_from_user_type {
+        -type
+        {-access_level "full"}
+    } {
+        return the appropriate rel_type base on user type and access level
+    } {
+        if {[string equal $access_level "full"] == 1} {
+            set rel_type "dotlrn_full_"
+        } else {
+            set rel_type "dotlrn_"
+        }
+
+        return "${rel_type}${type}_profile_rel"
+    }
 }
Index: openacs-4/packages/dotlrn/tcl/dotlrn-procs.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/tcl/dotlrn-procs.xql,v
diff -u -r1.8 -r1.9
--- openacs-4/packages/dotlrn/tcl/dotlrn-procs.xql	20 Jan 2002 17:20:44 -0000	1.8
+++ openacs-4/packages/dotlrn/tcl/dotlrn-procs.xql	8 Feb 2002 20:50:57 -0000	1.9
@@ -38,11 +38,11 @@
 </querytext>
 </fullquery>
 
-  <fullquery name="dotlrn::get_user_type_id_from_type.select_user_type_id_from_type">
+  <fullquery name="dotlrn::get_group_id_from_user_type.select_group_id_from_user_type">
     <querytext>
-      select type_id
+      select dotlrn_user_types.group_id
       from dotlrn_user_types
-      where type = :type
+      where dotlrn_user_types.type = :type
     </querytext>
   </fullquery>
 
Index: openacs-4/packages/dotlrn/tcl/dotlrn-security-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/tcl/dotlrn-security-procs.tcl,v
diff -u -r1.22 -r1.23
--- openacs-4/packages/dotlrn/tcl/dotlrn-security-procs.tcl	25 Jan 2002 00:22:50 -0000	1.22
+++ openacs-4/packages/dotlrn/tcl/dotlrn-security-procs.tcl	8 Feb 2002 20:50:57 -0000	1.23
@@ -15,270 +15,269 @@
     @author ben@openforce.net
     @creation-date 2001-10-30
     @version $Id$
-    
+
 }
 
 namespace eval dotlrn {
 
     ad_proc -private do_abort {} {
-	do an abort if security violation
+        do an abort if security violation
     } {
-	ad_returnredirect "not-allowed"
-	return -code error
+        ad_returnredirect "not-allowed"
+        return -code error
     }
 
     ad_proc -public get_user_types {} {
-	return the list of possible user types, first type then type_id
+        return the list of possible user types, first type then group_id of the type
     } {
-	return [db_list_of_lists select_user_types {}]
+        return [db_list_of_lists select_user_types {}]
     }
 
     ad_proc -public user_p {
         {-user_id:required}
     } {
         check if a user is a dotLRN user
     } {
-        return [db_string select_count "select count(*) from dotlrn_users where user_id= :user_id"]
+        return [db_string select_count {
+            select count(*)
+            from dual
+            where exists (select 1
+                          from dotlrn_users
+                          where user_id = :user_id)
+        }]
     }
 
     ad_proc -public user_add {
-	{-rel_type "dotlrn_user_rel"}
-	{-user_id:required}
-	{-type_id 1}
+        {-type "student"}
+        {-access_level "limited"}
+        {-id ""}
+        {-user_id:required}
     } {
-	Add a user as a dotLRN user
+        Add a user as a dotLRN user
     } {
         # Check if the user is already a dotLRN user
         if {[user_p -user_id $user_id]} {
             return
         }
 
-	# set up extra vars
-	set extra_vars [ns_set create]
-	
-	ns_set put $extra_vars user_id $user_id
-	ns_set put $extra_vars type_id $type_id
+        # set up extra vars
+        set extra_vars [ns_set create]
+        ns_set put $extra_vars user_id $user_id
+        ns_set put $extra_vars id $id
 
-	db_transaction {
+        db_transaction {
 
             # get the first page name and theme
             set page_name_and_layout_list [split [ad_parameter -package_id [dotlrn::get_package_id] user_wsp_page_names "Untitled Page,Simple 2-Column;" ] ";"]
             set page_name_list [list]
             set layout_name_list [list]
-            
-            ns_log Notice "bma: [llength $page_name_and_layout_list] LENGTH"
 
             # seperate name and theme
             foreach item $page_name_and_layout_list {
                 lappend page_name_list [lindex [split $item ","] 0]
                 lappend layout_name_list [lindex [split $item ","] 1]
-
-                ns_log Notice "bma: $page_name_list *** $layout_name_list"
             }
 
-	    if {$rel_type == "dotlrn_full_user_rel"} {
-		# Create a portal page for this user
-		set portal_id [portal::create \
+            if {[string equal $access_level "full"] == 1} {
+                # Create a portal page for this user
+                set portal_id [portal::create \
                         -name "Your dotLRN Workspace" \
                         -default_page_name [lindex $page_name_list 0] \
                         -layout_name [lindex $layout_name_list 0] \
                         $user_id]
-                
+
                 # create rest of the default pages from the ad_param
                 for {set i 1} {$i < [expr [llength $page_name_list]]} {incr i} {
                     portal::page_create -portal_id $portal_id \
                             -pretty_name [lindex $page_name_list $i] \
                             -layout_name [lindex $layout_name_list $i]
                 }
-                
+
                 # manually switch back to the first page
                 set page_id [portal::get_page_id -portal_id $portal_id -sort_key 0]
 
                 # aks test adding applets on new pages
                 # make a test page to the wsp
-                dotlrn_main_portlet::add_self_to_page -page_id $page_id \
-                        $portal_id {}
+                dotlrn_main_portlet::add_self_to_page -page_id $page_id $portal_id {}
                 # end test
-                
+
                 # Update the user and set the portal page correctly
                 ns_set put $extra_vars portal_id $portal_id
-                
-	    }
+            }
 
-	    # Add the relation (no need to feed in anything for object_id_one, or two for that matter).
-	    set rel_id [relation_add -extra_vars $extra_vars -member_state approved $rel_type "" $user_id]
+            # Add the relation (no need to feed in anything for object_id_one, or two for that matter).
+            set rel_id [relation_add \
+                -extra_vars $extra_vars \
+                -member_state approved \
+                [get_rel_type_from_user_type -type $type -access_level $access_level] \
+                "" \
+                $user_id]
 
-	    if {$rel_type == "dotlrn_full_user_rel"} {
+            if {[string equal $access_level "full"] == 1} {
                 # must be here since wsp must exist in the dotlrn_full_users table,
                 #do the callbacks on the active dotlrn-wide applets
                 dotlrn_community::applets_dispatch \
                         -op AddUser \
                         -list_args [list $user_id]
             }
-                
-	}
+        }
 
-	return $rel_id
+        return $rel_id
     }
 
     ad_proc -public user_remove {
-	user_id
+        user_id
     } {
-	Remove a user from the set of dotLRN users
+        Remove a user from the set of dotLRN users
     } {
-	# Get the rel_id and remove it
-	set rel_id [db_string select_rel_id {} -default ""]
+        set rel_id [db_string select_rel_id {} -default ""]
 
-	if {![empty_string_p $rel_id]} {
-	    relation_remove $rel_id
-	}
+        if {![empty_string_p $rel_id]} {
+            relation_remove $rel_id
+        }
     }
 
     ad_proc -private user_get_type {
-	user_id
+        user_id
     } {
-	returns the dotLRN user role or empty string if not a dotLRN user
-        
-        FIXME: THIS DOES NOT WORK ANYMORE!
+        returns the dotLRN user role or empty string if not a dotLRN user
     } {
-	return [db_string select_user_type {} -default ""]
+        return [db_string select_user_type {} -default ""]
     }
 
     ad_proc -public user_can_browse_p {
-	{user_id ""}
+        {user_id ""}
     } {
-	Check is a user can browse dotLRN
+        Check is a user can browse dotLRN
     } {
-	return [ad_permission_p -user_id $user_id [dotlrn::get_package_id] dotlrn_browse]
+        return [ad_permission_p -user_id $user_id [dotlrn::get_package_id] dotlrn_browse]
     }
 
     ad_proc -public require_user_browse {
-	{user_id ""}
+        {user_id ""}
     } {
-	Require that a user be able to browse dotLRN
+        Require that a user be able to browse dotLRN
     } {
-	if {![user_can_browse_p -user_id $user_id]} {
-	    do_abort
-	}
+        if {![user_can_browse_p -user_id $user_id]} {
+            do_abort
+        }
     }
 
     ad_proc -public set_user_read_private_data {
-	{-user_id:required}
-	val
+        {-user_id:required}
+        val
     } {
-	set whether or not a user can read private data
+        set whether or not a user can read private data
     } {
-	acs_privacy::set_user_read_private_data -user_id $user_id -object_id [dotlrn::get_package_id] $val
+        acs_privacy::set_user_read_private_data -user_id $user_id -object_id [dotlrn::get_package_id] $val
     }
 
     ad_proc -public user_can_read_private_data_p {
-	{user_id ""}
+        {user_id ""}
     } {
-	Check if a user can read sensitive data in dotLRN
+        Check if a user can read sensitive data in dotLRN
     } {
-	if {[empty_string_p $user_id]} {
-	    set user_id [ad_conn user_id]
-	}
-	
-	ns_log Notice "BEN: dotlrn::user_can_read_private_data_p -- got the call, user_id = $user_id"
+        if {[empty_string_p $user_id]} {
+            set user_id [ad_conn user_id]
+        }
 
-	return [acs_privacy::user_can_read_private_data_p -user_id $user_id -object_id [dotlrn::get_package_id]]
+        return [acs_privacy::user_can_read_private_data_p -user_id $user_id -object_id [dotlrn::get_package_id]]
     }
 
     ad_proc -public require_user_read_private_data {
-	{user_id ""}
+        {user_id ""}
     } {
-	Require that a user be able to read sensitive data
+        Require that a user be able to read sensitive data
     } {
-	if {![user_can_read_private_data_p -user_id $user_id]} {
-	    do_abort
-	}
+        if {![user_can_read_private_data_p -user_id $user_id]} {
+            do_abort
+        }
     }
 
     ad_proc -public user_can_read_community_type_p {
-	{-user_id ""}
-	community_type
+        {-user_id ""}
+        community_type
     } {
-	Check if a user can read a community type
+        Check if a user can read a community type
     } {
-	# FIXME: permission hack
-	# NOT SURE HOW TO FIX THIS WITHOUT object_ids on community types
-	return 1
+        # FIXME: permission hack
+        # NOT SURE HOW TO FIX THIS WITHOUT object_ids on community types
+        return 1
     }
 
     ad_proc -public require_user_read_community_type {
-	{-user_id ""}
-	community_type
+        {-user_id ""}
+        community_type
     } {
-	require that a user be able to read a community type
+        require that a user be able to read a community type
     } {
-	if {![user_can_read_community_type_p -user_id $user_id $community_type]} {
-	    do_abort
-	}
+        if {![user_can_read_community_type_p -user_id $user_id $community_type]} {
+            do_abort
+        }
     }
 
     ad_proc -public user_can_read_community_p {
-	{-user_id ""}
-	community_id
+        {-user_id ""}
+        community_id
     } {
-	Check if a user can read a community
+        Check if a user can read a community
     } {
-	return [ad_permission_p -user_id $user_id $community_id dotlrn_view_community]
+        return [ad_permission_p -user_id $user_id $community_id dotlrn_view_community]
     }
 
     ad_proc -public require_user_read_community {
-	{-user_id ""}
-	community_id
+        {-user_id ""}
+        community_id
     } {
-	require that a user be able to read a community
+        require that a user be able to read a community
     } {
-	if {![user_can_read_community_p -user_id $user_id $community_id]} {
-	    do_abort
-	}
+        if {![user_can_read_community_p -user_id $user_id $community_id]} {
+            do_abort
+        }
     }
 
     ad_proc -public user_is_community_member_p {
-	{-user_id ""}
-	community_id
+        {-user_id ""}
+        community_id
     } {
-	check if a user is a member of a community
+        check if a user is a member of a community
     } {
-	if {[empty_string_p $user_id]} {
-	    set user_id [ad_conn user_id]
-	}
-	
-	return [dotlrn_community::member_p $community_id $user_id]
+        if {[empty_string_p $user_id]} {
+            set user_id [ad_conn user_id]
+        }
+
+        return [dotlrn_community::member_p $community_id $user_id]
     }
 
     ad_proc -public require_user_community_member {
-	{-user_id ""}
-	community_id
+        {-user_id ""}
+        community_id
     } {
-	require that a user be member of a particular community
+        require that a user be member of a particular community
     } {
-	if {![user_is_community_member_p -user_id $user_id $community_id]} {
-	    do_abort
-	}
+        if {![user_is_community_member_p -user_id $user_id $community_id]} {
+            do_abort
+        }
     }
 
     ad_proc -public user_can_admin_community_p {
-	{-user_id ""}
-	community_id
+        {-user_id ""}
+        community_id
     } {
-	check if a user can admin a community
+        check if a user can admin a community
     } {
-	return [ad_permission_p -user_id $user_id $community_id dotlrn_admin_community]
+        return [ad_permission_p -user_id $user_id $community_id dotlrn_admin_community]
     }
 
     ad_proc -public require_user_admin_community {
-	{-user_id ""}
-	community_id
+        {-user_id ""}
+        community_id
     } {
-	require that user be able to admin a community
+        require that user be able to admin a community
     } {
-	if {![user_can_admin_community_p -user_id $user_id $community_id]} {
-	    do_abort
-	}
+        if {![user_can_admin_community_p -user_id $user_id $community_id]} {
+            do_abort
+        }
     }
 
 }
Index: openacs-4/packages/dotlrn/tcl/dotlrn-security-procs.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/tcl/dotlrn-security-procs.xql,v
diff -u -r1.4 -r1.5
--- openacs-4/packages/dotlrn/tcl/dotlrn-security-procs.xql	1 Dec 2001 23:16:27 -0000	1.4
+++ openacs-4/packages/dotlrn/tcl/dotlrn-security-procs.xql	8 Feb 2002 20:50:57 -0000	1.5
@@ -2,28 +2,39 @@
 
 <queryset>
 
-<fullquery name="dotlrn::get_user_types.select_user_types">
-<querytext>
-select type, type_id from dotlrn_user_types order by type
-</querytext>
-</fullquery>
+  <fullquery name="dotlrn::get_user_types.select_user_types">
+    <querytext>
+      select pretty_name,
+             type
+      from dotlrn_user_types
+      order by pretty_name
+    </querytext>
+  </fullquery>
 
-<fullquery name="dotlrn::user_remove.select_rel_id">
-<querytext>
-select rel_id from dotlrn_users where user_id= :user_id
-</querytext>
-</fullquery>
+  <fullquery name="dotlrn::user_remove.select_rel_id">
+    <querytext>
+      select rel_id
+      from dotlrn_users
+      where user_id = :user_id
+    </querytext>
+  </fullquery>
 
-<fullquery name="dotlrn::user_get_type.select_user_type">
-<querytext>
-select type from dotlrn_users, dotlrn_user_types where dotlrn_user_rels.type_id= dotlrn_user_types.type_id and user_id= :user_id
-</querytext>>
-</fullquery>
+  <fullquery name="dotlrn::user_get_type.select_user_type">
+    <querytext>
+      select type
+      from dotlrn_users
+      where user_id = :user_id
+    </querytext>>
+  </fullquery>
 
-<fullquery name="dotlrn::user_add.update_user_portal_id">
-<querytext>
-update dotlrn_full_user_rels set portal_id= :portal_id where rel_id = (select rel_id from dotlrn_full_users where user_id= :user_id)
-</querytext>
-</fullquery>
+  <fullquery name="dotlrn::user_add.update_user_portal_id">
+    <querytext>
+      update dotlrn_full_user_profile_rels
+      set portal_id = :portal_id
+      where rel_id = (select rel_id
+                      from dotlrn_full_users
+                      where user_id = :user_id)
+    </querytext>
+  </fullquery>
 
 </queryset>
Index: openacs-4/packages/dotlrn/tcl/dotlrn-user-extension-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/tcl/dotlrn-user-extension-procs.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/dotlrn/tcl/dotlrn-user-extension-procs.tcl	22 Jan 2002 19:59:31 -0000	1.1
+++ openacs-4/packages/dotlrn/tcl/dotlrn-user-extension-procs.tcl	8 Feb 2002 20:50:57 -0000	1.2
@@ -36,12 +36,9 @@
 
         # Loop through patterns
         foreach pattern [automatic_email_patterns] {
-            ns_log Notice "DOTLRN: checking if $email matches $pattern"
             if {[string match $pattern $email]} {
-                ns_log Notice "DOTLRN: YES IT DOES!"
                 # create the dotLRN user now
-                dotlrn::user_add -rel_type dotlrn_full_user_rel -user_id $user_id
-
+                dotlrn::user_add -type "student" -access_level "full" -user_id $user_id
                 break
             }
         }
Index: openacs-4/packages/dotlrn/www/user-add-2.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/user-add-2.tcl,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/dotlrn/www/user-add-2.tcl	23 Jan 2002 01:15:10 -0000	1.3
+++ openacs-4/packages/dotlrn/www/user-add-2.tcl	8 Feb 2002 20:50:57 -0000	1.4
@@ -10,6 +10,7 @@
     password
     first_names
     last_name
+    {id ""}
     {referer "/acs-admin/users"}
 } -properties {
     context_bar:onevalue
@@ -19,6 +20,7 @@
     first_names:onevalue
     last_name:onevalue
     email:onevalue
+    id:onevalue
     password:onevalue
     administration_name:onevalue
 }
Index: openacs-4/packages/dotlrn/www/user-add.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/user-add.tcl,v
diff -u -r1.9 -r1.10
--- openacs-4/packages/dotlrn/www/user-add.tcl	31 Jan 2002 17:08:09 -0000	1.9
+++ openacs-4/packages/dotlrn/www/user-add.tcl	8 Feb 2002 20:50:57 -0000	1.10
@@ -7,11 +7,12 @@
     @creation-date Jan 19, 2002
     @cvs-id $Id$
 } -query {
-    {referer "members"}
+    {id ""}
     {type "student"}
-    {rel_type "dotlrn_full_user_rel"}
+    {access_level "full"}
     {read_private_data_p "t"}
     {add_membership_p "t"}
+    {referer "members"}
 } -properties {
     context_bar:onevalue
 }
@@ -35,6 +36,12 @@
     -widget hidden \
     -value $target_user_id
 
+element create add_user id \
+    -label "ID" \
+    -datatype text \
+    -widget text \
+    -value $id
+
 element create add_user email \
     -label "Email" \
     -datatype text \
@@ -63,18 +70,18 @@
     -widget hidden \
     -value $referer
 
-element create add_user rel_type \
-    -label "Rel Type" \
-    -datatype text \
-    -widget hidden \
-    -value $rel_type
-
 element create add_user type \
     -label "Type" \
     -datatype text \
     -widget hidden \
     -value $type
 
+element create add_user access_level \
+    -label "Access Level" \
+    -datatype text \
+    -widget hidden \
+    -value $access_level
+
 element create add_user read_private_data_p \
     -label "Can Read Private Data" \
     -datatype text \
@@ -88,15 +95,16 @@
     -value $add_membership_p
 
 if {[form is_valid add_user]} {
-    template::form get_values add_user target_user_id email first_names last_name referer rel_type type read_private_data_p
+    form get_values add_user \
+        target_user_id id email first_names last_name referer type access_level read_private_data_p
 
     db_transaction {
         # create the ACS user
         set password [ad_generate_random_string]
         set target_user_id [ad_user_new $email $first_names $last_name $password "" "" "" "t" "approved" $target_user_id]
 
         # make the user a dotLRN user
-        dotlrn::user_add -rel_type $rel_type -user_id $target_user_id -type_id [dotlrn::get_user_type_id_from_type -type $type]
+        dotlrn::user_add -id $id -type $type -access_level $access_level -user_id $target_user_id
 
         # can this user read private data?
         acs_privacy::set_user_read_private_data -user_id $target_user_id -object_id [dotlrn::get_package_id] -value $read_private_data_p
Index: openacs-4/packages/dotlrn/www/admin/add-instructor-3.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/add-instructor-3.tcl,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/dotlrn/www/admin/add-instructor-3.tcl	20 Jan 2002 19:43:46 -0000	1.3
+++ openacs-4/packages/dotlrn/www/admin/add-instructor-3.tcl	8 Feb 2002 20:50:57 -0000	1.4
@@ -14,7 +14,7 @@
 
 # if the user isn't already a dotLRN user make him so
 if {!${is_dotlrn_user}} {
-    dotlrn::user_add -rel_type dotlrn_full_user_rel -user_id $user_id -type_id [dotlrn::get_user_type_id_from_type -type "professor"]
+    dotlrn::user_add -type "professor" -access_level "full" -user_id $user_id
     acs_privacy::set_user_read_private_data -user_id $user_id -object_id [dotlrn_community::get_package_id $community_id] -value "t"
 }
 
Index: openacs-4/packages/dotlrn/www/admin/user-edit-oracle.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/user-edit-oracle.xql,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/dotlrn/www/admin/user-edit-oracle.xql	10 Dec 2001 23:58:31 -0000	1.1
+++ openacs-4/packages/dotlrn/www/admin/user-edit-oracle.xql	8 Feb 2002 20:50:57 -0000	1.2
@@ -3,10 +3,20 @@
 <queryset>
 <rdbms><type>oracle</type><version>8.1.6</version></rdbms>
 
-<fullquery name="select_user_info">
-<querytext>
-select first_names, last_name, email, type_id, case when dotlrn_full_user_rels.rel_id is NULL then 't' else 'f' end as limited_access_p, acs_permission.permission_p(:dotlrn_package_id, user_id, 'read_private_data') as read_private_data_p from dotlrn_users, dotlrn_full_user_rels where user_id=:user_id and dotlrn_users.rel_id= dotlrn_full_user_rels.rel_id(+)
-</querytext>
-</fullquery>
+  <fullquery name="select_user_info">
+    <querytext>
+      select dotlrn_users.id,
+             dotlrn_users.first_names,
+             dotlrn_users.last_name,
+             dotlrn_users.email,
+             dotlrn_users.type,
+             case when dotlrn_full_user_rels.rel_id is null then 'limited' else 'full' end as access_level,
+             acs_permission.permission_p(:dotlrn_package_id, :user_id, 'read_private_data') as read_private_data_p
+      from dotlrn_users,
+           dotlrn_full_user_rels
+      where dotlrn_users.user_id = :user_id
+      and dotlrn_users.rel_id = dotlrn_full_user_rels.rel_id(+)
+    </querytext>
+  </fullquery>
 
 </queryset>
Index: openacs-4/packages/dotlrn/www/admin/user-edit-verify.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/user-edit-verify.adp,v
diff -u -r1.6 -r1.7
--- openacs-4/packages/dotlrn/www/admin/user-edit-verify.adp	23 Jan 2002 00:15:44 -0000	1.6
+++ openacs-4/packages/dotlrn/www/admin/user-edit-verify.adp	8 Feb 2002 20:50:57 -0000	1.7
@@ -6,5 +6,7 @@
 
 <p></p>
 
-You're asking to change the level of access of this user. This has strong repercussions. Are you user about this?
+You're asking to change the level of access of this user.
+This has strong repercussions. Are you user about this?
+
 <formtemplate id="verif_edit_user"></formtemplate>
Index: openacs-4/packages/dotlrn/www/admin/user-edit.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/user-edit.adp,v
diff -u -r1.6 -r1.7
--- openacs-4/packages/dotlrn/www/admin/user-edit.adp	23 Jan 2002 00:15:44 -0000	1.6
+++ openacs-4/packages/dotlrn/www/admin/user-edit.adp	8 Feb 2002 20:50:57 -0000	1.7
@@ -3,6 +3,7 @@
 <property name="context_bar">@context_bar@</property>
 
 You're editing <strong>@first_names@ @last_name@</strong>.
-<p>
 
+<p></p>
+
 <formtemplate id="edit_user"></formtemplate>
Index: openacs-4/packages/dotlrn/www/admin/user-edit.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/user-edit.tcl,v
diff -u -r1.7 -r1.8
--- openacs-4/packages/dotlrn/www/admin/user-edit.tcl	1 Feb 2002 22:30:01 -0000	1.7
+++ openacs-4/packages/dotlrn/www/admin/user-edit.tcl	8 Feb 2002 20:50:57 -0000	1.8
@@ -1,5 +1,5 @@
 ad_page_contract {
-    Edit a User
+    Edit a dotLRN user
 
     @author Ben Adida (ben@openforce.net)
     @author yon (yon@openforce.net)
@@ -10,6 +10,11 @@
     user_id
 }
 
+set context_bar {{users Users} {Edit}}
+set dotlrn_package_id [dotlrn::get_package_id]
+
+db_1row select_user_info {}
+
 form create edit_user
 
 element create edit_user user_id \
@@ -18,150 +23,58 @@
     -widget hidden \
     -value $user_id
 
-element create edit_user type_id \
+element create edit_user id \
+    -label "ID" \
+    -datatype text \
+    -widget text \
+    -value $id \
+    -optional
+
+element create edit_user type \
     -label "User Type" \
     -datatype text \
     -widget select \
-    -options [dotlrn::get_user_types]
+    -options [dotlrn::get_user_types] \
+    -value $type
 
-element create edit_user rel_type \
-    -label "Access" \
+element create edit_user access_level \
+    -label "Access Level" \
     -datatype text \
     -widget select \
-    -options {{{limited access} dotlrn_user_rel} {{full access} dotlrn_full_user_rel}}
+    -options {{"Full Access" "full"} {"Limited Access" "limited"}} \
+    -value $access_level
 
 element create edit_user read_private_data_p \
     -label "Can Access Private Information?" \
     -datatype text \
     -widget select \
-    -options {{yes t} {no f}}
+    -options {{"Yes" "t"} {"No" "f"}} \
+    -value $read_private_data_p
 
 element create edit_user referer \
     -label "Referer" \
     -datatype text \
     -widget hidden \
     -value $referer
 
-# Create a form of hidden vars
-form create verif_edit_user
+if {[form is_valid edit_user]} {
+    form get_values edit_user \
+        user_id id type access_level read_private_data_p referer
 
-element create verif_edit_user user_id \
-    -label "User ID" \
-    -datatype integer \
-    -widget hidden
-
-element create verif_edit_user type_id \
-    -label "Type ID" \
-    -datatype integer \
-    -widget hidden
-
-element create verif_edit_user rel_type \
-    -label "Relationship Type" \
-    -datatype text \
-    -widget hidden
-
-element create verif_edit_user read_private_data_p \
--label "Can Read Private Data?" \
-    -datatype text \
-    -widget hidden
-
-element create verif_edit_user referer \
-    -label "Referer" \
-    -datatype text \
-    -widget hidden \
-    -value $referer
-
-set context_bar {{users Users} {Edit}}
-set dotlrn_package_id [dotlrn::get_package_id]
-
-# We verified everything, now we make the change
-if {[form is_valid verif_edit_user]} {
-    form get_values verif_edit_user \
-        user_id type_id rel_type read_private_data_p referer
-
-    set rel_id [db_string select_rel_id {
-        select rel_id
-        from dotlrn_users
-        where user_id = :user_id
-    }]
-
     db_transaction {
         # remove the user
         dotlrn::user_remove $user_id
 
         # add the user
-        dotlrn::user_add -rel_type $rel_type -user_id $user_id -type_id $type_id
+        dotlrn::user_add -id $id -type $type -access_level $access_level -user_id $user_id
 
         # Update permissions
         acs_privacy::set_user_read_private_data -user_id $user_id -object_id [dotlrn::get_package_id] -value $read_private_data_p
     }
 
-    ad_returnredirect $referer
-    ad_script_abort
-}
-
-
-if {[form is_valid edit_user]} {
-    form get_values edit_user \
-        user_id type_id rel_type read_private_data_p referer
-
-    # Do something
-    set new_rel_type $rel_type
-
-    db_1row select_limited_user_info {
-        select first_names,
-               last_name,
-               object_type as old_rel_type
-        from dotlrn_users,
-             acs_objects
-        where dotlrn_users.user_id = :user_id
-        and dotlrn_users.rel_id = acs_objects.object_id
-    }
-
-    set old_rel_type [db_string select_rel_type {
-        select 'dotlrn_full_user_rel'
-        from dual
-        where exists (select 1
-                      from dotlrn_full_users
-                      where user_id = :user_id)
-    } -default "dotlrn_user_rel"]
-
-    if {$new_rel_type == $old_rel_type} {
-        # Simply update things
-        db_transaction {
-            # Update straight user info
-            db_dml update_user {}
-
-            # Update permissions
-            acs_privacy::set_user_read_private_data -user_id $user_id -object_id [dotlrn::get_package_id] -value $read_private_data_p
-        }
-    } else {
-        # Warn about the change
-        element set_properties verif_edit_user user_id -value $user_id
-        element set_properties verif_edit_user type_id -value $type_id
-        element set_properties verif_edit_user rel_type -value $rel_type
-        element set_properties verif_edit_user read_private_data_p -value $read_private_data_p
-
-        ad_return_template "user-edit-verify"
-        return
-    }
-
     # redirect
     ad_returnredirect $referer
     ad_script_abort
 }
 
-db_1row select_user_info {}
-
-# set some values
-element set_properties edit_user type_id -value $type_id
-
-if {$limited_access_p == "t"} {
-    element set_properties edit_user rel_type -value dotlrn_user_rel
-} else {
-    element set_properties edit_user rel_type -value dotlrn_full_user_rel
-}
-
-element set_properties edit_user read_private_data_p -value $read_private_data_p
-
 ad_return_template
Index: openacs-4/packages/dotlrn/www/admin/user-edit.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/Attic/user-edit.xql,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/dotlrn/www/admin/user-edit.xql	10 Dec 2001 23:58:31 -0000	1.1
+++ openacs-4/packages/dotlrn/www/admin/user-edit.xql	8 Feb 2002 20:50:57 -0000	1.2
@@ -2,12 +2,14 @@
 
 <queryset>
 
-<fullquery name="update_user">
-<querytext>
-update dotlrn_user_rels set
-type_id= :type_id
-where rel_id = (select rel_id from dotlrn_users where user_id= :user_id)
-</querytext>
-</fullquery>
+  <fullquery name="update_user">
+    <querytext>
+      update dotlrn_user_profile_rels
+      set id = :id
+      where rel_id = (select rel_id
+                      from dotlrn_users
+                      where user_id = :user_id)
+    </querytext>
+  </fullquery>
 
 </queryset>
Index: openacs-4/packages/dotlrn/www/admin/user-new-2.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/user-new-2.adp,v
diff -u -r1.10 -r1.11
--- openacs-4/packages/dotlrn/www/admin/user-new-2.adp	23 Jan 2002 00:15:44 -0000	1.10
+++ openacs-4/packages/dotlrn/www/admin/user-new-2.adp	8 Feb 2002 20:50:57 -0000	1.11
@@ -3,6 +3,7 @@
 <property name="context_bar">@context_bar@</property>
 
 You've chosen to add <strong>@first_names@ @last_name@</strong>.
-<p>
 
+<p></p>
+
 <formtemplate id="add_user"></formtemplate>
Index: openacs-4/packages/dotlrn/www/admin/user-new-2.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/user-new-2.tcl,v
diff -u -r1.13 -r1.14
--- openacs-4/packages/dotlrn/www/admin/user-new-2.tcl	1 Feb 2002 22:20:50 -0000	1.13
+++ openacs-4/packages/dotlrn/www/admin/user-new-2.tcl	8 Feb 2002 20:50:57 -0000	1.14
@@ -1,5 +1,5 @@
 ad_page_contract {
-    Choose a role
+    Create a dotLRN user
 
     @author Ben Adida (ben@openforce.net)
     @creation-date 2001-11-04
@@ -12,31 +12,49 @@
 form create add_user
 
 element create add_user user_id \
-	-label "User ID" -datatype integer -widget hidden -value $user_id
+        -label "User ID" \
+        -datatype integer \
+        -widget hidden \
+        -value $user_id
 
-element create add_user type_id \
-	-label "User Type" -datatype text -widget select -options [dotlrn::get_user_types]
+element create add_user id \
+        -label "ID" \
+        -datatype text \
+        -widget text \
 
-element create add_user rel_type \
-	-label "Access" -datatype text -widget select -options {{{limited access} dotlrn_user_rel} {{full access} dotlrn_full_user_rel}}
+element create add_user type \
+        -label "User Type" \
+        -datatype text \
+        -widget select \
+        -options [dotlrn::get_user_types]
 
+element create add_user access_level \
+        -label "Access Level" \
+        -datatype text \
+        -widget select \
+        -options {{"Full Access" "full"} {"Limited Access" "limited"}}
+
 element create add_user read_private_data_p \
-        -label "Can Access Private Information?" -datatype text -widget select -options {{yes t} {no f}}
+        -label "Can Access Private Information?" \
+        -datatype text \
+        -widget select \
+        -options {{"Yes" "t"} {"No" "f"}}
 
 element create add_user referer \
-        -label "Referer" -datatype text -widget hidden -value $referer
+        -label "Referer" \
+        -datatype text \
+        -widget hidden \
+        -value $referer
 
 if {[form is_valid add_user]} {
-    template::form get_values add_user user_id type_id rel_type read_private_data_p referer
+    form get_values add_user \
+        user_id id type access_level read_private_data_p referer
 
     db_transaction {
-        # add the user
-        dotlrn::user_add -rel_type $rel_type -user_id $user_id -type_id $type_id
-
+        dotlrn::user_add -id $id -type $type -access_level $access_level -user_id $user_id
         acs_privacy::set_user_read_private_data -user_id $user_id -object_id [dotlrn::get_package_id] -value $read_private_data_p
     }
 
-    # redirect
     ad_returnredirect $referer
     ad_script_abort
 }