10.1. SQL-запросы
10.1.1. Предварительные действия
Прежде, чем приступать к действиям, описанным далее, следует выполнить SQL-запросы к данному шагу.
10.1.2. Создание функции сохранения отправляемого письма в БД
CREATE OR REPLACE FUNCTION f_email_out_to_comments(
IN pdb_userid integer,
IN pdb_email_uid integer,
IN pdb_email_date timestamp with time zone,
IN pdb_email_from text,
IN pdb_email_to text,
IN pdb_email_cc text,
IN pdb_email_bcc text,
IN pdb_email_subject text,
IN pdb_email_body text,
IN object_id integer,
IN f_register_object integer,
IN "1001.object_id" integer)
RETURNS TABLE(r_object_id integer, r_comment_id integer, r_comment_type_id integer) AS
$BODY$
DECLARE
var_comment_type_id integer:= 2; -- Исходящее письмо;
var_comment_remark text; -- Текст к комментарию;
var_object_id integer; -- ID обращения;
BEGIN
var_object_id := COALESCE(object_id, f_register_object, "1001.object_id");
/* Формирует текст комментария */
var_comment_remark:= COALESCE(pdb_email_body,'Тело письма не содержит текст.');
INSERT INTO t_comments(dttmcr, userid, object_id, comment_type_id, comment_text, comment_from, comment_to, comment_cc, comment_subject, comment_bcc)
VALUES(pdb_email_date, pdb_userid, var_object_id, var_comment_type_id, var_comment_remark, pdb_email_from, pdb_email_to, pdb_email_cc, pdb_email_subject, pdb_email_bcc)
RETURNING comment_id INTO r_comment_id;
/* Формирует ID типа комментария для возврата */
r_comment_type_id := var_comment_type_id;
/* Формиурет ID обращения для возврата */
r_object_id := var_object_id;
RETURN QUERY
SELECT
r_object_id,
r_comment_id,
r_comment_type_id;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
10.1.3. Создание функции повышения уровня цитирумого текста
CREATE OR REPLACE FUNCTION f_increase_quote(orig_text text)
RETURNS text AS
$BODY$
DECLARE
result text;
BEGIN
SELECT '> '||replace(orig_text, chr(10), chr(10)||'> ')
INTO result;
RETURN result;
END
$BODY$
LANGUAGE plpgsql VOLATILE;
10.1.4. Создание функции, формирующей тело письма при переадресации
CREATE OR REPLACE FUNCTION f_body_forward(
var_text text,
pdb_userid integer,
var_comment_id integer)
RETURNS text AS
$BODY$
DECLARE
var_date timestamp; -- Дата оригинального сообщения
var_time time; -- Время
var_from text; -- Отправитель оригинального сообщения
var_theme text; -- Оригинальная тема сообщения
var_to text; -- Получатель сообщения
var_orig_text text; -- Текст оригинального сообщения
var_signature text; -- Подпись
var_new_text text; -- Новый текст
var_result text; -- Результат
BEGIN
/* Формирует дату оригинального сообщения */
var_date := (SELECT dttmcr FROM t_comments WHERE comment_id = var_comment_id);
/* Формирует время оригинального сообщения */
var_time := (SELECT dttmcr::time FROM t_comments WHERE comment_id = var_comment_id);
/* Формирует отправителя оригинального сообщения */
var_from := (SELECT comment_from FROM t_comments WHERE comment_id = var_comment_id);
/* Формирует тему оригинального сообщения */
var_theme := (SELECT comment_subject FROM t_comments WHERE comment_id = var_comment_id);
/* Формирует получателя оригинального сообщения */
var_to := (SELECT comment_to FROM t_comments WHERE comment_id = var_comment_id);
/* Формирует текст оригинального сообщения */
var_orig_text := (SELECT comment_text FROM t_comments WHERE comment_id = var_comment_id);
/* Формирует подпись */
var_signature := (SELECT user_signature FROM t_users WHERE user_id = pdb_userid);
SELECT
'Начало переадресованного сообщения:'||
chr(10)||chr(10)||
'От: '||COALESCE(var_from, 'неизвестный отправитель')||chr(10)||
'Тема: '||COALESCE(var_theme, '-')||chr(10)||
'Дата и время: '||COALESCE(var_date::text, 'неизвестная дата и время')||chr(10)||
'Кому: '||COALESCE(var_to, '-')||
chr(10)||chr(10)||
COALESCE(var_orig_text, 'Оригинальное письмо не содержит текст.')
INTO var_new_text;
SELECT
COALESCE(var_text, '')||
chr(10)||chr(10)||chr(10)||
COALESCE(var_signature, '')||
chr(10)||chr(10)||chr(10)||
f_increase_quote(var_new_text)
INTO var_result;
RETURN var_result;
END
$BODY$
LANGUAGE plpgsql VOLATILE;
10.1.5. Создание функции, формирующей тело письма при ответе
CREATE OR REPLACE FUNCTION f_body_reply(
var_text text,
pdb_userid integer,
var_comment_id integer)
RETURNS text AS
$BODY$
DECLARE
var_date date; -- Дата оригинального сообщения
var_time time; -- Время
var_from text; -- Отправитель оригинального сообщения
var_orig_text text; -- Текст оригинального сообщения
var_signature text; -- Подпись
var_new_text text; -- Новый текст
var_result text; -- Результат
BEGIN
/* Формирует дату оригинального сообщения */
var_date := (SELECT dttmcr::date FROM t_comments WHERE comment_id = var_comment_id);
/* Формирует время оригинального сообщения */
var_time := (SELECT dttmcr::time FROM t_comments WHERE comment_id = var_comment_id);
/* Формирует отправителя оригинального сообщения */
var_from := (SELECT comment_from FROM t_comments WHERE comment_id = var_comment_id);
/* Формирует текст оригинального сообщения */
var_orig_text := (SELECT comment_text FROM t_comments WHERE comment_id = var_comment_id);
/* Формирует подпись */
var_signature := (SELECT user_signature FROM t_users WHERE user_id = pdb_userid);
/* Формирует результат */
SELECT
COALESCE(var_date::text, 'Неизвестная дата')||', в '||COALESCE(var_time::text, 'неизвестное время')||', '||COALESCE(var_from, 'неизвестный отправитель')||' написал(а):'||
chr(10)||chr(10)||
COALESCE(var_orig_text, 'Оригинальное письмо не содержит текст.')
INTO var_new_text;
SELECT
COALESCE(var_text, '')||
chr(10)||chr(10)||chr(10)||
COALESCE(var_signature, '')||
chr(10)||chr(10)||chr(10)||
f_increase_quote(var_new_text)
INTO var_result;
RETURN var_result;
END
$BODY$
LANGUAGE plpgsql VOLATILE;
10.1.6. Далее