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. Далее

10.2. Создание действия 1221 Новое письмо