-- -- The User Preferences package -- -- Ported to PostgreSQL by: Gabriel Burca <gburca-openacs@ebixio.com> -- Based on the Oracle version by: ben@openforce -- -- distributed under the GPL v2 -- -- Jan. 1 2004 -- -- package select define_function_args('user_pref_type__new', 'preference_type_id,object_type;user_pref_type,package_key,short_name,pretty_name,datatype;text,options,default_value,creation_date;now(),creation_user,creation_ip,context_id'); create or replace function user_pref_type__new (integer, varchar, varchar, varchar, varchar, varchar, varchar, varchar, timestamptz, integer, varchar, integer) returns int4 as ' declare p_preference_type_id alias for $1; -- default null p_object_type alias for $2; -- default ''user_pref_type'' p_package_key alias for $3; p_short_name alias for $4; p_pretty_name alias for $5; p_datatype alias for $6; -- default ''text'' p_options alias for $7; -- default null p_default_value alias for $8; -- default null p_creation_date alias for $9; -- default sysdate p_creation_user alias for $10; p_creation_ip alias for $11; p_context_id alias for $12; v_pref_type_id user_preference_types.preference_type_id%TYPE; begin v_pref_type_id := acs_object__new ( p_preference_type_id, p_object_type, p_creation_date, p_creation_user, p_creation_ip, p_context_id ); insert into user_preference_types (preference_type_id, package_key, short_name, pretty_name, datatype, options, default_value) values (v_pref_type_id, p_package_key, p_short_name, p_pretty_name, p_datatype, p_options, p_default_value); return v_pref_type_id; end;' language 'plpgsql'; select define_function_args('user_pref_type__get_user_pref', 'preference_type,package_id,user_id'); create or replace function user_pref_type__get_user_pref (varchar, integer, integer) returns varchar as ' declare p_preference_type alias for $1; p_package_id alias for $2; p_user_id alias for $3; v_type_id user_preference_types.preference_type_id%TYPE; v_pref user_preference_values.value%TYPE; begin select preference_type_id into v_type_id from user_preference_types where short_name = p_preference_type; -- if there is no such preference type if NOT FOUND then return NULL; end if; -- check direct user pref for package_id not null select value into v_pref from user_preference_values where preference_type_id = v_type_id and package_id = p_package_id and user_id = p_user_id; if FOUND then return v_pref; end if; -- check user pref with package_id NULL select value into v_pref from user_preference_values where preference_type_id = v_type_id and package_id is NULL and user_id = p_user_id; if FOUND then return v_pref; end if; -- if not found, check package default select default_value into v_pref from user_preference_default_values where preference_type_id = v_type_id and package_id = p_package_id; if FOUND then return v_pref; end if; -- if not found check default value for preference type select default_value into v_pref from user_preference_types where preference_type_id = v_type_id; return v_pref; end;' language 'plpgsql'; select define_function_args('user_pref_type__set_package_default', 'preference_type_id,package_id,default_value'); create or replace function user_pref_type__set_package_default (integer, integer, varchar) returns int4 as ' declare p_preference_type_id alias for $1; p_package_id alias for $2; p_default_value alias for $3; v_count integer; begin select count(*) into v_count from user_preference_default_values where preference_type_id = p_preference_type_id and package_id = p_package_id; if v_count > 0 then update user_preference_default_values set default_value= p_default_value where preference_type_id= p_preference_type_id and package_id= p_package_id; else insert into user_preference_default_values (preference_type_id, package_id, default_value) values (p_preference_type_id, p_package_id, p_default_value); end if; return 0; end;' language 'plpgsql'; select define_function_args('user_pref_type__set_user_pref', 'preference_type,package_id,user_id,value'); create or replace function user_pref_type__set_user_pref (varchar, integer, integer, varchar) returns int4 as ' declare p_preference_type alias for $1; p_package_id alias for $2; p_user_id alias for $3; p_value alias for $4; v_type_id user_preference_types.preference_type_id%TYPE; v_count integer; begin select preference_type_id into v_type_id from user_preference_types where short_name = p_preference_type; -- if there is no such preference type if NOT FOUND then return NULL; end if; select count(*) into v_count from user_preference_values where preference_type_id= v_type_id and package_id= p_package_id and user_id= p_user_id; if v_count > 0 then update user_preference_values set value= p_value where preference_type_id= v_type_id and package_id= p_package_id and user_id= p_user_id; else insert into user_preference_values (preference_type_id, package_id, user_id, value) values (v_type_id, p_package_id, p_user_id, p_value); end if; return 0; end;' language 'plpgsql'; select define_function_args('user_pref_type__del', 'preference_type_id'); create or replace function user_pref_type__del (integer) returns int4 as ' declare p_preference_type_id alias for $1; begin acs_object__del(p_preference_type_id); return 0; end;' language 'plpgsql';