-- Data model to support content repository of the ArsDigita Community
-- System
-- Copyright (C) 1999-2000 ArsDigita Corporation
-- Author: Karl Goldstein (karlg@arsdigita.com)
-- $Id: content-template.sql,v 1.27 2017/08/07 23:47:47 gustafn Exp $
-- This is free software distributed under the terms of the GNU Public
-- License. Full text of the license is available from the GNU Project:
-- http://www.fsf.org/copyleft/gpl.html
create view content_template_globals as
select -200 as c_root_folder_id;
--
-- procedure content_template__get_root_folder/0
--
select define_function_args('content_template__get_root_folder','');
CREATE OR REPLACE FUNCTION content_template__get_root_folder(
) RETURNS integer AS $$
DECLARE
v_folder_id integer;
BEGIN
select c_root_folder_id from content_template_globals into v_folder_id;
return v_folder_id;
END;
$$ LANGUAGE plpgsql immutable;
-- create or replace package body content_template
--
-- procedure content_template__new/1
--
CREATE OR REPLACE FUNCTION content_template__new(
new__name varchar
) RETURNS integer AS $$
--
-- content_template__new/1 maybe obsolete, when we define proper defaults for /8
--
DECLARE
BEGIN
return content_template__new(new__name,
null,
null,
now(),
null,
null
);
END;
$$ LANGUAGE plpgsql;
-- function new
--
-- procedure content_template__new/6
--
CREATE OR REPLACE FUNCTION content_template__new(
new__name varchar,
new__parent_id integer, -- default null
new__template_id integer, -- default null
new__creation_date timestamptz, -- default now()
new__creation_user integer, -- default null
new__creation_ip varchar -- default null
) RETURNS integer AS $$
--
-- content_template__new/6 maybe obsolete, when we define proper defaults for /8
--
DECLARE
v_template_id cr_templates.template_id%TYPE;
v_parent_id cr_items.parent_id%TYPE;
BEGIN
if new__parent_id is null then
select c_root_folder_id into v_parent_id from content_template_globals;
else
v_parent_id := new__parent_id;
end if;
-- make sure we're allowed to create a template in this folder
if content_folder__is_folder(new__parent_id) = 't' and
content_folder__is_registered(new__parent_id,'content_template','f') = 'f' then
raise EXCEPTION '-20000: This folder does not allow templates to be created';
else
v_template_id := content_item__new (
new__name,
v_parent_id,
new__template_id,
null,
new__creation_date,
new__creation_user,
null,
new__creation_ip,
'content_item',
'content_template',
null, -- title
null, -- description
'text/plain',
null, -- nls_language
null, -- text
null, -- data
null, -- relation_tag
'f', -- is_live
'text', -- storage_type
null, -- package_id
't' -- with_child_rels
);
insert into cr_templates (
template_id
) values (
v_template_id
);
return v_template_id;
end if;
END;
$$ LANGUAGE plpgsql;
--
-- procedure content_template__new/3
--
CREATE OR REPLACE FUNCTION content_template__new(
new__name varchar,
new__text text,
new__is_live bool
) RETURNS integer AS $$
--
-- content_template__new/3 maybe obsolete, when we define proper defaults for /8
--
DECLARE
BEGIN
return content_template__new(new__name,
null,
null,
now(),
null,
null,
new__text,
new__is_live
);
END;
$$ LANGUAGE plpgsql;
-- old define_function_args('content_template__new','name,parent_id,template_id,creation_date;now,creation_user,creation_ip,text,is_live;f')
-- new
select define_function_args('content_template__new','name,parent_id;null,template_id;null,creation_date;now,creation_user;null,creation_ip;null,text;null,is_live;f');
--
-- procedure content_template__new/8
--
CREATE OR REPLACE FUNCTION content_template__new(
new__name varchar,
new__parent_id integer, -- default null
new__template_id integer, -- default null
new__creation_date timestamptz, -- default now() -- default 'now'
new__creation_user integer, -- default null
new__creation_ip varchar, -- default null
new__text text, -- default null
new__is_live bool -- default 'f'
) RETURNS integer AS $$
DECLARE
v_template_id cr_templates.template_id%TYPE;
v_parent_id cr_items.parent_id%TYPE;
BEGIN
if new__parent_id is null then
select c_root_folder_id into v_parent_id from content_template_globals;
else
v_parent_id := new__parent_id;
end if;
-- make sure we're allowed to create a template in this folder
if content_folder__is_folder(new__parent_id) = 't' and
content_folder__is_registered(new__parent_id,'content_template','f') = 'f' then
raise EXCEPTION '-20000: This folder does not allow templates to be created';
else
v_template_id := content_item__new (
new__template_id, -- new__item_id
new__name, -- new__name
v_parent_id, -- new__parent_id
null, -- new__title
new__creation_date, -- new__creation_date
new__creation_user, -- new__creation_user
null, -- new__context_id
new__creation_ip, -- new__creation_ip
new__is_live, -- new__is_live
'text/plain', -- new__mime_type
new__text, -- new__text
'text', -- new__storage_type
't', -- new__security_inherit_p
'CR_FILES', -- new__storage_area_key
'content_item', -- new__item_subtype
'content_template' -- new__content_type
);
insert into cr_templates (
template_id
) values (
v_template_id
);
return v_template_id;
end if;
END;
$$ LANGUAGE plpgsql;
-- procedure delete
select define_function_args('content_template__del','template_id');
--
-- procedure content_template__del/1
--
CREATE OR REPLACE FUNCTION content_template__del(
delete__template_id integer
) RETURNS integer AS $$
DECLARE
BEGIN
delete from cr_type_template_map
where template_id = delete__template_id;
delete from cr_item_template_map
where template_id = delete__template_id;
delete from cr_templates
where template_id = delete__template_id;
PERFORM content_item__delete(delete__template_id);
return 0;
END;
$$ LANGUAGE plpgsql;
select define_function_args('content_template__delete','template_id');
--
-- procedure content_template__delete/1
--
CREATE OR REPLACE FUNCTION content_template__delete(
delete__template_id integer
) RETURNS integer AS $$
DECLARE
BEGIN
PERFORM content_template__delete(delete__template_id);
return 0;
END;
$$ LANGUAGE plpgsql;
-- function is_template
select define_function_args('content_template__is_template','template_id');
--
-- procedure content_template__is_template/1
--
CREATE OR REPLACE FUNCTION content_template__is_template(
is_template__template_id integer
) RETURNS boolean AS $$
DECLARE
BEGIN
return count(*) > 0 from cr_templates
where template_id = is_template__template_id;
END;
$$ LANGUAGE plpgsql stable;
-- function get_path
-- old define_function_args('content_template__get_path','template_id,root_folder_id')
-- new
select define_function_args('content_template__get_path','template_id,root_folder_id;content_template_globals.c_root_folder_id');
--
-- procedure content_template__get_path/2
--
CREATE OR REPLACE FUNCTION content_template__get_path(
template_id integer,
root_folder_id integer -- default content_template_globals.c_root_folder_id
) RETURNS varchar AS $$
DECLARE
BEGIN
return content_item__get_path(template_id, root_folder_id);
END;
$$ LANGUAGE plpgsql stable;
-- show errors