Commit 4b204416 authored by Frank Bergmann's avatar Frank Bergmann

Initial Import

parents
Pipeline #90 failed with stages
<?xml version="1.0"?>
<!-- Generated by the OpenACS Package Manager -->
<package key="acs-reference" url="http://www.arsdigita.com/acs-repository/apm/packages/acs-reference" type="apm_service">
<package-name>ACS Reference Data</package-name>
<pretty-plural>ACS Reference Datas</pretty-plural>
<initial-install-p>t</initial-install-p>
<singleton-p>t</singleton-p>
<version name="5.1.5" url="http://openacs.org/repository/download/apm/acs-reference-5.1.5.apm">
<owner url="mailto:jon@jongriffin.com">Jon Griffin</owner>
<summary>Tools and API for managing refrence data.</summary>
<release-date>2004-02-28</release-date>
<maturity>3</maturity>
<vendor url="http://www.mayuli.com">Mayuli Enterprises, LLC</vendor>
<description format="text/html">Reference Data provides an API to support:
&lt;ul&gt;
&lt;li&gt; A common set of reference data.
&lt;li&gt; Running standard reports on this data.
&lt;li&gt; Monitoring the usage of reference data.
&lt;/ul&gt;</description>
<provides url="acs-reference" version="5.1.4"/>
<requires url="acs-kernel" version="5.0.0"/>
<callbacks>
</callbacks>
<parameters>
<!-- No version parameters -->
</parameters>
</version>
</package>
--
-- packages/acs-reference/sql/acs-reference-create.sql
--
-- @author jon@arsdigita.com
-- @creation-date 2000-11-21
-- @cvs-id $Id$
-- setup the basic admin privileges
begin
acs_privilege.create_privilege('acs_reference_create');
acs_privilege.create_privilege('acs_reference_write');
acs_privilege.create_privilege('acs_reference_read');
acs_privilege.create_privilege('acs_reference_delete');
acs_privilege.add_child('create','acs_reference_create');
acs_privilege.add_child('write', 'acs_reference_write');
acs_privilege.add_child('read', 'acs_reference_read');
acs_privilege.add_child('delete','acs_reference_delete');
end;
/
show errors
-- Create the basic object type used to represent a reference database
begin
acs_object_type.create_type (
supertype => 'acs_object',
object_type => 'acs_reference_repository',
pretty_name => 'ACS Reference Repository',
pretty_plural => 'ACS Reference Repositories',
table_name => 'acs_reference_repositories',
id_column => 'repository_id',
name_method => 'acs_object.default_name'
);
end;
/
show errors
-- A table to store metadata for each reference database
create table acs_reference_repositories (
repository_id integer
constraint arr_repository_id_fk references acs_objects (object_id)
constraint arr_repository_id_pk primary key,
-- what is the table name we are monitoring
table_name varchar2(100)
constraint arr_table_name_nn not null
constraint arr_table_name_uq unique,
-- is this external or internal data
internal_data_p char(1)
constraint arr_internal_data_p_ck
check (internal_data_p in ('t','f')),
-- Does this source include pl/sql package?
package_name varchar2(100)
constraint arr_package_name_uq unique,
-- last updated
last_update date,
-- where is this data from
source varchar2(1000),
source_url varchar2(255),
-- should default to today
effective_date date default sysdate,
expiry_date date,
-- a text field to hold the maintainer
maintainer_id integer
constraint arr_maintainer_id_fk references persons(person_id),
-- this could be ancillary docs, pdf's etc
notes blob
);
-- API
create or replace package acs_reference
as
function new (
repository_id in acs_reference_repositories.repository_id%TYPE default null,
table_name in acs_reference_repositories.table_name%TYPE,
internal_data_p in acs_reference_repositories.internal_data_p%TYPE default 'f',
package_name in acs_reference_repositories.package_name%TYPE default null,
last_update in acs_reference_repositories.last_update%TYPE default sysdate,
source in acs_reference_repositories.source%TYPE default null,
source_url in acs_reference_repositories.source_url%TYPE default null,
effective_date in acs_reference_repositories.effective_date%TYPE default sysdate,
expiry_date in acs_reference_repositories.expiry_date%TYPE default null,
notes in acs_reference_repositories.notes%TYPE default empty_blob(),
creation_date in acs_objects.creation_date%TYPE default sysdate,
creation_user in acs_objects.creation_user%TYPE default null,
creation_ip in acs_objects.creation_ip%TYPE default null,
object_type in acs_objects.object_type%TYPE default 'acs_reference_repository',
first_names in persons.first_names%TYPE default null,
last_name in persons.last_name%TYPE default null
) return acs_objects.object_id%TYPE;
procedure del (
repository_id in acs_reference_repositories.repository_id%TYPE
);
function is_expired_p (
repository_id integer
) return char;
end acs_reference;
/
show errors
create or replace package body acs_reference
as
function new (
repository_id in acs_reference_repositories.repository_id%TYPE default null,
table_name in acs_reference_repositories.table_name%TYPE,
internal_data_p in acs_reference_repositories.internal_data_p%TYPE default 'f',
package_name in acs_reference_repositories.package_name%TYPE default null,
last_update in acs_reference_repositories.last_update%TYPE default sysdate,
source in acs_reference_repositories.source%TYPE default null,
source_url in acs_reference_repositories.source_url%TYPE default null,
effective_date in acs_reference_repositories.effective_date%TYPE default sysdate,
expiry_date in acs_reference_repositories.expiry_date%TYPE default null,
notes in acs_reference_repositories.notes%TYPE default empty_blob(),
creation_date in acs_objects.creation_date%TYPE default sysdate,
creation_user in acs_objects.creation_user%TYPE default null,
creation_ip in acs_objects.creation_ip%TYPE default null,
object_type in acs_objects.object_type%TYPE default 'acs_reference_repository',
first_names in persons.first_names%TYPE default null,
last_name in persons.last_name%TYPE default null
) return acs_objects.object_id%TYPE
is
v_repository_id acs_reference_repositories.repository_id%TYPE;
v_maintainer_id persons.person_id%TYPE;
begin
v_repository_id := acs_object.new (
object_id => repository_id,
creation_date => creation_date,
creation_user => creation_user,
creation_ip => creation_ip,
object_type => object_type
);
if first_names is not null and last_name is not null then
v_maintainer_id := person.new (
first_names => first_names,
last_name => last_name,
email => null
);
else
v_maintainer_id := null;
end if;
insert into acs_reference_repositories
(repository_id,
table_name,
internal_data_p,
last_update,
package_name,
source,
source_url,
effective_date,
expiry_date,
maintainer_id,
notes)
values
(v_repository_id,
table_name,
internal_data_p,
last_update,
package_name,
source,
source_url,
effective_date,
expiry_date,
v_maintainer_id,
notes);
return v_repository_id;
end new;
procedure del (
repository_id in acs_reference_repositories.repository_id%TYPE
)
is
v_maintainer_id integer;
begin
select maintainer_id into v_maintainer_id
from acs_reference_repositories
where repository_id = acs_reference.del.repository_id;
delete from acs_reference_repositories
where repository_id = acs_reference.del.repository_id;
acs_object.del(repository_id);
person.del(v_maintainer_id);
end del;
function is_expired_p (
repository_id integer
) return char
is
v_expiry_date date;
begin
select expiry_date into v_expiry_date
from acs_reference_repositories
where repository_id = is_expired_p.repository_id;
if nvl(v_expiry_date,sysdate+1) < sysdate then
return 't';
else
return 'f';
end if;
end;
end acs_reference;
/
show errors
-- Drop the ACS Reference packages
--
-- @author jon@jongriffin.com
-- @cvs-id $Id$
set serveroutput on
-- drop all associated tables and packages
-- ordered by repository_id for dependencies.
declare
cursor refsrc_cur is
select table_name,
package_name,
repository_id
from acs_reference_repositories
order by repository_id desc;
begin
for rec in refsrc_cur loop
dbms_output.put_line('Dropping ' || rec.table_name);
execute immediate 'drop table ' || rec.table_name;
if rec.package_name is not null then
execute immediate 'drop package ' || rec.package_name;
end if;
acs_reference.del(rec.repository_id);
end loop;
end;
/
show errors
-- drop privileges
begin
acs_privilege.remove_child('create','acs_reference_create');
acs_privilege.remove_child('write', 'acs_reference_write');
acs_privilege.remove_child('read', 'acs_reference_read');
acs_privilege.remove_child('delete','acs_reference_delete');
acs_privilege.drop_privilege('acs_reference_create');
acs_privilege.drop_privilege('acs_reference_write');
acs_privilege.drop_privilege('acs_reference_read');
acs_privilege.drop_privilege('acs_reference_delete');
end;
/
show errors
-- drop the object
begin
acs_object_type.drop_type('acs_reference_repository','t');
end;
/
show errors
drop package acs_reference;
drop table acs_reference_repositories;
--
-- packages/acs-reference/sql/acs-reference-create.sql
--
-- @author jon@arsdigita.com
-- @creation-date 2000-11-21
-- @cvs-id $Id$
create or replace package acs_reference
as
function new (
repository_id in acs_reference_repositories.repository_id%TYPE default null,
table_name in acs_reference_repositories.table_name%TYPE,
internal_data_p in acs_reference_repositories.internal_data_p%TYPE default 'f',
package_name in acs_reference_repositories.package_name%TYPE default null,
last_update in acs_reference_repositories.last_update%TYPE default sysdate,
source in acs_reference_repositories.source%TYPE default null,
source_url in acs_reference_repositories.source_url%TYPE default null,
effective_date in acs_reference_repositories.effective_date%TYPE default sysdate,
expiry_date in acs_reference_repositories.expiry_date%TYPE default null,
notes in acs_reference_repositories.notes%TYPE default empty_blob(),
creation_date in acs_objects.creation_date%TYPE default sysdate,
creation_user in acs_objects.creation_user%TYPE default null,
creation_ip in acs_objects.creation_ip%TYPE default null,
object_type in acs_objects.object_type%TYPE default 'acs_reference_repository',
first_names in persons.first_names%TYPE default null,
last_name in persons.last_name%TYPE default null
) return acs_objects.object_id%TYPE;
procedure del (
repository_id in acs_reference_repositories.repository_id%TYPE
);
function is_expired_p (
repository_id integer
) return char;
end acs_reference;
/
show errors
create or replace package body acs_reference
as
function new (
repository_id in acs_reference_repositories.repository_id%TYPE default null,
table_name in acs_reference_repositories.table_name%TYPE,
internal_data_p in acs_reference_repositories.internal_data_p%TYPE default 'f',
package_name in acs_reference_repositories.package_name%TYPE default null,
last_update in acs_reference_repositories.last_update%TYPE default sysdate,
source in acs_reference_repositories.source%TYPE default null,
source_url in acs_reference_repositories.source_url%TYPE default null,
effective_date in acs_reference_repositories.effective_date%TYPE default sysdate,
expiry_date in acs_reference_repositories.expiry_date%TYPE default null,
notes in acs_reference_repositories.notes%TYPE default empty_blob(),
creation_date in acs_objects.creation_date%TYPE default sysdate,
creation_user in acs_objects.creation_user%TYPE default null,
creation_ip in acs_objects.creation_ip%TYPE default null,
object_type in acs_objects.object_type%TYPE default 'acs_reference_repository',
first_names in persons.first_names%TYPE default null,
last_name in persons.last_name%TYPE default null
) return acs_objects.object_id%TYPE
is
v_repository_id acs_reference_repositories.repository_id%TYPE;
v_maintainer_id persons.person_id%TYPE;
begin
v_repository_id := acs_object.new (
object_id => repository_id,
creation_date => creation_date,
creation_user => creation_user,
creation_ip => creation_ip,
object_type => object_type
);
if first_names is not null and last_name is not null then
v_maintainer_id := person.new (
first_names => first_names,
last_name => last_name,
email => null
);
else
v_maintainer_id := null;
end if;
insert into acs_reference_repositories
(repository_id,
table_name,
internal_data_p,
last_update,
package_name,
source,
source_url,
effective_date,
expiry_date,
maintainer_id,
notes)
values
(v_repository_id,
table_name,
internal_data_p,
last_update,
package_name,
source,
source_url,
effective_date,
expiry_date,
v_maintainer_id,
notes);
return v_repository_id;
end new;
procedure del (
repository_id in acs_reference_repositories.repository_id%TYPE
)
is
v_maintainer_id integer;
begin
select maintainer_id into v_maintainer_id
from acs_reference_repositories
where repository_id = acs_reference.del.repository_id;
delete from acs_reference_repositories
where repository_id = acs_reference.del.repository_id;
acs_object.del(repository_id);
person.del(v_maintainer_id);
end del;
function is_expired_p (
repository_id integer
) return char
is
v_expiry_date date;
begin
select expiry_date into v_expiry_date
from acs_reference_repositories
where repository_id = is_expired_p.repository_id;
if nvl(v_expiry_date,sysdate+1) < sysdate then
return 't';
else
return 'f';
end if;
end;
end acs_reference;
/
show errors
-- packages/acs-reference/sql/postgresql/acs-reference-create.sql
--
-- @author jon@jongriffin.com
-- @creation-date 2001-07-16
--
-- @cvs-id $Id$
-- setup the basic admin privileges
select acs_privilege__create_privilege('acs_reference_create');
select acs_privilege__create_privilege('acs_reference_write');
select acs_privilege__create_privilege('acs_reference_read');
select acs_privilege__create_privilege('acs_reference_delete');
select acs_privilege__add_child('create','acs_reference_create');
select acs_privilege__add_child('write', 'acs_reference_write');
select acs_privilege__add_child('read', 'acs_reference_read');
select acs_privilege__add_child('delete','acs_reference_delete');
-- Create the basic object type used to represent a reference database
select acs_object_type__create_type (
'acs_reference_repository',
'ACS Reference Repository',
'ACS Reference Repositories',
'acs_object',
'acs_reference_repositories',
'repository_id',
null,
'f',
null,
'acs_object__default_name'
);
-- A table to store metadata for each reference database
-- add functions to do exports and imports to selected tables.
create table acs_reference_repositories (
repository_id integer
constraint arr_repository_id_fk references acs_objects (object_id)
constraint arr_repository_id_pk primary key,
-- what is the table name we are monitoring
table_name varchar(100)
constraint arr_table_name_nn not null
constraint arr_table_name_uq unique,
-- is this external or internal data
internal_data_p boolean,
-- Does this source include pl/sql package?
package_name varchar(100)
constraint arr_package_name_uq unique,
-- last updated
last_update timestamptz,
-- where is this data from
source varchar(1000),
source_url varchar(255),
-- should default to today
effective_date timestamptz, -- default sysdate
expiry_date timestamptz,
-- a text field to hold the maintainer
maintainer_id integer
constraint arr_maintainer_id_fk references persons(person_id),
-- this could be ancillary docs, pdf's etc
-- needs to be fixed for PG
-- DRB: needs to use Content Repository for both PG and Oracle, no???
lob integer
);
-- API
-- default for Oracle
create function acs_reference__new (integer,varchar,boolean,varchar,timestamptz,
varchar,varchar,timestamptz,timestamptz,integer,integer,varchar,varchar,
varchar,varchar,integer)
returns integer as '
declare
p_repository_id alias for $1; -- default null
p_table_name alias for $2; --
p_internal_data_p alias for $3; -- default "f"
p_package_name alias for $4; -- default null
p_last_update alias for $5; -- default sysdate
p_source alias for $6; -- default null
p_source_url alias for $7; -- default null
p_effective_date alias for $8; -- default sysdate
p_expiry_date alias for $9; -- default null
p_maintainer_id alias for $10; -- default null
p_notes alias for $11; -- default null (not Oracle empty_blob())
-- I really see no need for these as parameters
-- creation_date alias for $12; -- default sysdate
p_first_names alias for $12; -- default null
p_last_name alias for $13; -- default null
p_creation_ip alias for $14; -- default null
p_object_type alias for $15; -- default "acs_reference_repository"
p_creation_user alias for $16; -- default null
v_repository_id acs_reference_repositories.repository_id%TYPE;
v_object_type acs_objects.object_type%TYPE;
v_maintainer_id persons.person_id%TYPE;
begin
if p_object_type is null then
v_object_type := ''acs_reference_repository'';
else
v_object_type := p_object_type;
end if;
v_repository_id := acs_object__new (
p_repository_id,
v_object_type,
now(),
p_creation_user,
p_creation_ip,
null
);
-- This logic is not correct as the maintainer could already exist
-- The way around this is a little clunky as you can search persons
-- then pick an existing person or add a new one, to many screens!
-- I really doubt the need for person anyway.
--
-- It probably needs to just be a UI function and pass
-- in the value for maintainer.
--
-- IN OTHER WORDS
-- Guaranteed to probably break in the future if you depend on
-- first_names and last_name to still exist as a param
-- This needs to be updated in the Oracle version also
-- NEEDS TO BE FIXED - jag
if p_first_names is not null and p_last_name is not null and p_maintainer_id is null then
v_maintainer_id := person__new (null, ''person'', now(), null, null, null, null,
p_first_names, p_last_name, null);
else if p_maintainer_id is not null then
v_maintainer_id := p_maintainer_id;
else
v_maintainer_id := null;
end if;
end if;
insert into acs_reference_repositories
(repository_id,table_name,internal_data_p,
last_update,package_name,source,
source_url,effective_date,expiry_date,
maintainer_id,lob)
values
(v_repository_id, p_table_name, p_internal_data_p,
p_last_update, p_package_name, p_source, p_source_url,
p_effective_date, p_expiry_date, v_maintainer_id, p_notes);
return v_repository_id;
end;
' language 'plpgsql';
-- made initially for PG
create function acs_reference__new (varchar,timestamptz,
varchar,varchar,timestamptz)
returns integer as '
declare
p_table_name alias for $1; --
p_last_update alias for $2; -- default sysdate
p_source alias for $3; -- default null
p_source_url alias for $4; -- default null
p_effective_date alias for $5; -- default sysdate
v_repository_id acs_reference_repositories.repository_id%TYPE;
begin
return acs_reference__new(null, p_table_name, ''f'', null, null, p_source, p_source_url,
p_effective_date, null, null, null, null, null, null,
''acs_reference_repository'', null);
end;
' language 'plpgsql';
create function acs_reference__delete (integer)
returns integer as '
declare
p_repository_id alias for $1;
v_maintainer_id acs_objects.object_id%TYPE;
begin
select maintainer_id into v_maintainer_id
from acs_reference_repositories
where repository_id = p_repository_id;
delete from acs_reference_repositories
where repository_id = p_repository_id;
perform acs_object__delete(p_repository_id);
return 0;
end;
' language 'plpgsql';
create function acs_reference__is_expired_p (integer)
returns char as '
declare
repository_id alias for $1;
begin
select expiry_date into v_expiry_date
from acs_reference_repositories
where repository_id = is_expired_p.repository_id;
if coalesce(v_expiry_date,now()+1) < now() then
return ''t'';
else
return ''f'';
end if;
end;
' language 'plpgsql';
-- packages/acs-reference/sql/postgresql/acs-reference-data.sql
--
-- Drop the ACS Reference packages
--
-- @author jon@jongriffin.com
-- @dropd 2001-07-16
--
-- @cvs-id $Id$
--
-- drop all associated tables and functions
-- DRB: in PG we could do this dynamically as JonG has done in Oracle. The
-- proc name can easily be picked up from pg_proc since we use unique package
-- keys as prefaces. The params can be picked up as well but I don't know
-- how off the top of my head. It would be a nice to write a general function
-- to do this in both Oracle and PG - "drop_package_functions(package_key)".
select acs_privilege__remove_child('create','acs_reference_create');
select acs_privilege__remove_child('write', 'acs_reference_write');
select acs_privilege__remove_child('read', 'acs_reference_read');
select acs_privilege__remove_child('delete','acs_reference_delete');
select acs_privilege__drop_privilege('acs_reference_create');
select acs_privilege__drop_privilege('acs_reference_write');
select acs_privilege__drop_privilege('acs_reference_read');
select acs_privilege__drop_privilege('acs_reference_delete');
select acs_object__delete(repository_id)
from acs_reference_repositories;
select acs_object_type__drop_type ('acs_reference_repository', 't');
drop function acs_reference__new (varchar,timestamptz, varchar,varchar,timestamptz);
drop function acs_reference__new (integer,varchar,boolean,varchar,timestamptz,
varchar,varchar,timestamptz,timestamptz,integer,integer,varchar,varchar,
integer,varchar,integer);
drop function acs_reference__delete (integer);
drop function acs_reference__is_expired_p (integer);
drop table acs_reference_repositories;
ad_library {
Utility procs for working with data in acs-reference
@author Jon Griffin <jon@jongriffin.com>
@creation-date 2001-08-28
@cvs-id $Id$
}
ad_proc -private acs_reference_get_db_structure {
{-table_name:required}
} {
Query the DB to get the data structure. Utility function.
} {
}