124 lines
3.9 KiB
PL/PgSQL
124 lines
3.9 KiB
PL/PgSQL
-- Creates new own dictionary.
|
|
CREATE OR REPLACE FUNCTION dictionary_new (
|
|
_name_sl dictionary.name_sl%type,
|
|
_name_sl_short dictionary.name_sl_short%type,
|
|
_name_en dictionary.name_en%type,
|
|
_author dictionary.author%type,
|
|
_issn dictionary.issn%type,
|
|
_domain_primary_id dictionary.domain_primary_id%type,
|
|
_entries_have_domain_labels dictionary.entries_have_domain_labels%type,
|
|
_entries_have_label dictionary.entries_have_label%type,
|
|
_entries_have_definition dictionary.entries_have_definition%type,
|
|
_entries_have_synonyms dictionary.entries_have_synonyms%type,
|
|
_entries_have_links dictionary.entries_have_links%type,
|
|
_entries_have_other dictionary.entries_have_other%type,
|
|
_entries_have_foreign_languages dictionary.entries_have_foreign_languages%type,
|
|
_entries_have_foreign_definitions dictionary.entries_have_foreign_definitions%type,
|
|
_entries_have_foreign_synonyms dictionary.entries_have_foreign_synonyms%type,
|
|
_entries_have_images dictionary.entries_have_images%type,
|
|
_entries_have_audio dictionary.entries_have_audio%type,
|
|
_entries_have_videos dictionary.entries_have_videos%type,
|
|
_domain_secondary smallint[],
|
|
_domain_secondary_new_name_sl varchar[],
|
|
_domain_secondary_new_name_en varchar[],
|
|
_language int[],
|
|
_creator_id user_role.user_id%type,
|
|
OUT _dictionary_id dictionary.id%type
|
|
)
|
|
LANGUAGE plpgsql AS $$
|
|
DECLARE
|
|
_domain_secondary_id domain_secondary.id%type;
|
|
_secondary_domain_id domain_secondary.id%type;
|
|
|
|
BEGIN
|
|
-- Check uniqueness of names within own dictionaries.
|
|
IF EXISTS (
|
|
SELECT 1
|
|
FROM dictionary
|
|
WHERE
|
|
count_comments IS NOT NULL AND -- Indicator of own dictionaries.
|
|
(
|
|
name_sl = _name_sl OR
|
|
name_sl_short = _name_sl_short OR
|
|
name_en = _name_en
|
|
)
|
|
) THEN
|
|
RAISE EXCEPTION 'One of dictionary names not unique among own dictionaries.';
|
|
END IF;
|
|
|
|
-- Create new dictionary.
|
|
INSERT INTO dictionary (
|
|
name_sl,
|
|
name_sl_short,
|
|
name_en,
|
|
author,
|
|
issn,
|
|
domain_primary_id,
|
|
count_comments,
|
|
entries_have_domain_labels,
|
|
entries_have_label,
|
|
entries_have_definition,
|
|
entries_have_synonyms,
|
|
entries_have_links,
|
|
entries_have_other,
|
|
entries_have_foreign_languages,
|
|
entries_have_foreign_definitions,
|
|
entries_have_foreign_synonyms,
|
|
entries_have_images,
|
|
entries_have_audio,
|
|
entries_have_videos
|
|
)
|
|
VALUES (
|
|
_name_sl,
|
|
_name_sl_short,
|
|
_name_en,
|
|
_author,
|
|
_issn,
|
|
_domain_primary_id,
|
|
0,
|
|
_entries_have_domain_labels,
|
|
_entries_have_label,
|
|
_entries_have_definition,
|
|
_entries_have_synonyms,
|
|
_entries_have_links,
|
|
_entries_have_other,
|
|
_entries_have_foreign_languages,
|
|
_entries_have_foreign_definitions,
|
|
_entries_have_foreign_synonyms,
|
|
_entries_have_images,
|
|
_entries_have_audio,
|
|
_entries_have_videos
|
|
)
|
|
RETURNING id
|
|
INTO _dictionary_id;
|
|
|
|
-- Create new secondary domains, if any.
|
|
FOR i IN 1..COALESCE(array_length(_domain_secondary_new_name_sl, 1), 0) LOOP
|
|
INSERT INTO domain_secondary (name_sl, name_en)
|
|
VALUES
|
|
(_domain_secondary_new_name_sl[i], _domain_secondary_new_name_en[i])
|
|
RETURNING id
|
|
INTO _domain_secondary_id;
|
|
|
|
_domain_secondary := _domain_secondary || _domain_secondary_id;
|
|
END LOOP;
|
|
|
|
-- Associate secondary domains, if any.
|
|
FOREACH _secondary_domain_id IN ARRAY _domain_secondary LOOP
|
|
INSERT INTO dictionary_domain_secondary (dictionary_id, domain_secondary_id)
|
|
VALUES (_dictionary_id, _secondary_domain_id);
|
|
END LOOP;
|
|
|
|
-- Associate languages, if any.
|
|
FOR i IN 1..COALESCE(array_length(_language, 1), 0) LOOP
|
|
INSERT INTO dictionary_language (dictionary_id, language_id, selection_order)
|
|
VALUES (_dictionary_id, _language[i], i);
|
|
END LOOP;
|
|
|
|
-- Make the creator its administrator.
|
|
INSERT INTO user_role (user_id, role_name, dictionary_id, administration, editing, terminology_review, language_review)
|
|
VALUES (_creator_id, 'editor', _dictionary_id, TRUE, TRUE, TRUE, TRUE);
|
|
|
|
END
|
|
$$
|