Index: openacs-4/packages/dotlrn/sql/postgresql/upgrade/upgrade-2.0a3-2.0.2.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/sql/postgresql/upgrade/upgrade-2.0a3-2.0.2.sql,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/dotlrn/sql/postgresql/upgrade/upgrade-2.0a3-2.0.2.sql 20 Apr 2004 21:13:18 -0000 1.2 @@ -0,0 +1,203 @@ +-- +-- Privacy control update +-- for systems upgrading to 2.0 from +-- code olderthan February 20, 2004. +-- +-- by aegrumet@alum.mit.edu on 2004-02-23 +-- + +-- prompt Creating relationships, relational segments, helper views and package... + +-- This function was copied in from privacy-init.sql (v1.1.2.3) but +-- given an extra "if" condition. We could have put the "if" directly +-- in privacy-init.sql but it doesn't really belong there. +create function inline_1() +returns integer as ' +declare + v_guest_segment_id integer; + v_non_guest_segment_id integer; + v_object_id integer; + v_count integer; +begin + + -- + -- Only run this code if the new rel_types haven''t been created. + -- Fix for bug #1633. + -- + select count(*) into v_count + from acs_object_types + where object_type = ''dotlrn_guest_rel''; + + if v_count = 0 then + + -- + -- Guests + -- + + perform acs_rel_type__create_type( + ''dotlrn_guest_rel'', + ''.LRN Guest'', + ''.LRN Guests'', + ''membership_rel'', + ''dotlrn_guest_rels'', + ''rel_id'', + ''dotlrn_guest_rel'', + ''group'', + null, + 0, + null, + ''user'', + null, + 0, + 1 + ); + + v_guest_segment_id := rel_segment__new( + ''Registered .LRN Guests'', + acs__magic_object_id(''registered_users''), + ''dotlrn_guest_rel'' + ); + + -- + -- Non Guests + -- + + perform acs_rel_type__create_type( + ''dotlrn_non_guest_rel'', + ''.LRN Non-Guest'', + ''.LRN Non-Guests'', + ''membership_rel'', + ''dotlrn_non_guest_rels'', + ''rel_id'', + ''dotlrn_non_guest_rel'', + ''group'', + null, + 0, + null, + ''user'', + null, + 0, + 1 + ); + + v_non_guest_segment_id := rel_segment__new( + ''Registered .LRN Non-Guests'', + acs__magic_object_id(''registered_users''), + ''dotlrn_non_guest_rel'' + ); + + end if; + + return(0); +end; +' language 'plpgsql'; + +select inline_1(); +drop function inline_1(); + +-- Copied in from privacy-init.sql (v.1.1.2.3) +create or replace view dotlrn_guest_status +as +select r.object_id_two as user_id, + case when r.rel_type = 'dotlrn_guest_rel' then 't' else 'f' end as guest_p + from acs_rels r, + membership_rels m +where m.rel_id = r.rel_id + and (r.rel_type = 'dotlrn_guest_rel' + or r.rel_type = 'dotlrn_non_guest_rel') + and r.object_id_one = acs__magic_object_id('registered_users'); + + +\i ../privacy-package-create.sql + +-- prompt Establishing non-guest or guest status for each user... + +create function inline_1() +returns integer as ' +declare + v_dotlrn_package_id integer; + v_permission_p char(1); + v_non_guest_relseg_id integer; + v_guest_relseg_id integer; + user record; +begin + + -- + -- Load some constants. + -- + + -- Assume, as in dotlrn::package_key, that dotlrn is mounted at /dotlrn. + select c.object_id into v_dotlrn_package_id + from site_nodes c, site_nodes p + where p.node_id = c.parent_id + and c.name = ''dotlrn'' + and p.parent_id is null; + + select segment_id into v_non_guest_relseg_id + from rel_segments + where group_id = acs__magic_object_id(''registered_users'') + and rel_type = ''dotlrn_non_guest_rel''; + + select segment_id into v_guest_relseg_id + from rel_segments + where group_id = acs__magic_object_id(''registered_users'') + and rel_type = ''dotlrn_guest_rel''; + + -- + -- Convert permissions to relationships for each user. + -- + + for user in select user_id from dotlrn_users + loop + select acs_permission__permission_p( + v_dotlrn_package_id,user.user_id,''read_private_data'') + into v_permission_p + from dual; + + if v_permission_p = ''t'' then + perform acs_permission__revoke_permission( + v_dotlrn_package_id,user.user_id,''read_private_data''); + perform dotlrn_privacy__set_user_non_guest(user.user_id); + else + perform dotlrn_privacy__set_user_guest(user.user_id); + end if; + + end loop; + + return(0); +end; +' language 'plpgsql'; + +select inline_1(); +drop function inline_1(); + + +-- prompt Granting read_private_data privilege to non-guests on each community... + +create function inline_1() +returns integer as ' +declare + v_count integer; + v_parameter_id integer; + community record; +begin + + for community in select community_id, package_id from dotlrn_communities_all + loop + + -- Grant permission to non-guests on community. + perform dotlrn_privacy__grant_rd_prv_dt_to_rel( + community.community_id,''dotlrn_non_guest_rel''); + + end loop; + + return(0); + +end; +' language 'plpgsql'; + +select inline_1(); +drop function inline_1(); + +-- prompt Finished. +