Index: openacs-4/packages/acs-messaging/acs-messaging.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-messaging/acs-messaging.info,v
diff -u -N -r1.39.2.6 -r1.39.2.7
--- openacs-4/packages/acs-messaging/acs-messaging.info 17 Aug 2016 08:32:11 -0000 1.39.2.6
+++ openacs-4/packages/acs-messaging/acs-messaging.info 20 Sep 2016 15:35:55 -0000 1.39.2.7
@@ -6,20 +6,22 @@
ACS Messaging Services
t
t
+ f
+ t
-
+
Anukul Kapoor
John Prevost
Vinod Kurup
General messaging for bboard and general comments.
- 2015-10-04
- 3
+ 2016-09-20
OpenACS
- GPL
- Provides generic message services, with email sending. acs-mail-lite and notifications are the
+ Provides generic message services, with email sending. acs-mail-lite and notifications are the
prefered packages for delivering this functionality and it is anticipated that this package will ultimately be deprecated.
+ GPL
+ 3
-
+
@@ -32,7 +34,3 @@
-
-
-
-
Index: openacs-4/packages/acs-messaging/sql/oracle/acs-messaging-packages.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-messaging/sql/oracle/acs-messaging-packages.sql,v
diff -u -N -r1.8 -r1.8.14.1
--- openacs-4/packages/acs-messaging/sql/oracle/acs-messaging-packages.sql 4 Jun 2006 00:45:40 -0000 1.8
+++ openacs-4/packages/acs-messaging/sql/oracle/acs-messaging-packages.sql 20 Sep 2016 15:35:54 -0000 1.8.14.1
@@ -206,24 +206,35 @@
v_revision_id cr_revisions.revision_id%TYPE;
begin
- -- generate a message id now so we can get an rfc822 message-id
- if message_id is null then
- select acs_object_id_seq.nextval into v_message_id from dual;
- else
- v_message_id := message_id;
- end if;
+ -- -- generate a message id now so we can get an rfc822 message-id
+ -- if message_id is null then
+ -- select acs_object_id_seq.nextval into v_message_id from dual;
+ -- else
+ -- v_message_id := message_id;
+ -- end if;
- -- this needs to be fixed up, but Oracle doesn't give us a way
- -- to get the FQDN
+ -- -- this needs to be fixed up, but Oracle doesn't give us a way
+ -- -- to get the FQDN
+ -- if rfc822_id is null then
+ -- v_rfc822_id := sysdate || '.' || v_message_id || '@' ||
+ -- utl_inaddr.get_host_name || '.hate';
+ -- else
+ -- v_rfc822_id := rfc822_id;
+ -- end if;
+
+ -- Antonio Pisano 2016-09-20
+ -- rfc822_id MUST come from the tcl, no more
+ -- sql tricks to retrieve one if missing.
+ -- Motivations:
+ -- 1) duplication. We have same logics in acs_mail_lite::generate_message_id
+ -- 2) what if SystemURL is https?
+ -- 3) empty SystemURL would break General Comments
if rfc822_id is null then
- v_rfc822_id := sysdate || '.' || v_message_id || '@' ||
- utl_inaddr.get_host_name || '.hate';
- else
- v_rfc822_id := rfc822_id;
+ RAISE SELF_IS_NULL;
end if;
v_message_id := content_item.new (
- name => v_rfc822_id,
+ name => rfc822_id,
parent_id => parent_id,
content_type => 'acs_message_revision',
item_id => message_id,
@@ -238,7 +249,7 @@
insert into acs_messages
(message_id, reply_to, sent_date, sender, rfc822_id)
values
- (v_message_id, reply_to, sent_date, sender, v_rfc822_id);
+ (v_message_id, reply_to, sent_date, sender, rfc822_id);
-- create an initial revision for the new message
v_revision_id := acs_message.edit (
Index: openacs-4/packages/acs-messaging/sql/oracle/upgrade/upgrade-5.9.1d1-5.9.1d2.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-messaging/sql/oracle/upgrade/upgrade-5.9.1d1-5.9.1d2.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-messaging/sql/oracle/upgrade/upgrade-5.9.1d1-5.9.1d2.sql 20 Sep 2016 15:35:55 -0000 1.1.2.1
@@ -0,0 +1,136 @@
+--
+-- packages/acs-messaging/sql/acs-messaging-create.sql
+--
+-- @author John Prevost
+-- @creation-date 2000-08-27
+-- @cvs-id $Id: upgrade-5.9.1d1-5.9.1d2.sql,v 1.1.2.1 2016/09/20 15:35:55 antoniop Exp $
+--
+
+set feedback off
+
+-- Object System Metadata ----------------------------------------------
+
+begin
+
+ acs_object_type.create_type (
+ supertype => 'content_item',
+ object_type => 'acs_message',
+ pretty_name => 'Message',
+ pretty_plural => 'Messages',
+ table_name => 'acs_messages',
+ id_column => 'message_id',
+ name_method => 'acs_message.name'
+ );
+
+ acs_object_type.create_type (
+ supertype => 'content_revision',
+ object_type => 'acs_message_revision',
+ pretty_name => 'Message Revision',
+ pretty_plural => 'Message Revisions',
+ name_method => 'acs_object.default_name'
+ );
+
+end;
+/
+show errors
+
+-- Raw Tables and Comments ---------------------------------------------
+
+create table acs_messages ( -- extends cr_items
+ message_id integer
+ constraint acs_messages_message_id_fk
+ references cr_items (item_id) on delete cascade
+ constraint acs_messages_message_id_pk
+ primary key,
+ -- we will need to find a way to make reply_to go to 0 instead of null
+ -- to improve scalability
+ reply_to integer
+ constraint acs_messages_reply_to_fk
+ references acs_messages (message_id) on delete set null,
+ sent_date date
+ constraint acs_messages_sent_date_nn
+ not null,
+ sender integer
+ constraint acs_messages_sender_fk
+ references parties (party_id),
+ rfc822_id varchar2(250)
+ constraint acs_messages_rfc822_id_nn
+ not null
+ constraint acs_messages_rfc822_id_un
+ unique
+);
+
+create index acs_messages_reply_to_idx on acs_messages (reply_to);
+create index acs_messages_sender_idx on acs_messages (sender);
+
+comment on table acs_messages is '
+ A generic message which may be attached to any object in the system.
+';
+
+comment on column acs_messages.reply_to is '
+ Pointer to a message this message contains a reply to, for threading.
+';
+
+comment on column acs_messages.sent_date is '
+ The date the message was sent (may be distinct from when it was created
+ or published in the system.)
+';
+
+comment on column acs_messages.sender is '
+ The person who sent the message (may be distinct from the person who
+ entered the message in the system.)
+';
+
+comment on column acs_messages.rfc822_id is '
+ The RFC822 message-id of this message, for sending email.
+';
+
+create table acs_messages_outgoing (
+ message_id integer
+ constraint amo_message_id_fk
+ references acs_messages (message_id) on delete cascade,
+ to_address varchar2(1000)
+ constraint amo_to_address_nn
+ not null,
+ grouping_id integer,
+ wait_until date
+ constraint amo_wait_until_nn not null,
+ constraint acs_messages_outgoing_pk
+ primary key (message_id, to_address)
+);
+
+comment on table acs_messages_outgoing is '
+ Set of messages to be sent to parties. It is assumed that sending a
+ message either queues it in a real MTA or fails, so no information about
+ what''s been tried how many times is kept.
+';
+
+comment on column acs_messages_outgoing.to_address is '
+ The email address to send this message to. Note that this will
+ probably become a party_id again once upgrading a party to a user
+ is possible.
+';
+
+comment on column acs_messages_outgoing.grouping_id is '
+ This identifier is used to group sets of messages to be sent as
+ digests. When a message is about to be sent, any other messages
+ with the same grouping_id will be put together with it in a
+ digest. It is recommended but not required that an object id is
+ used. Bboard, for example, might use the forum id that the user''s
+ subscribed to. For instant (non-digest) updates, it would be
+ appropriate to use null, which is never equal to anything else.
+';
+
+comment on column acs_messages_outgoing.wait_until is '
+ Don''t schedule a send until after this date. If another message with
+ the same grouping ID is scheduled to be sent, then this message may be
+ sent at the same time. (So, for example, daily digests would be
+ achieved by setting the grouping_id to the same value, and the wait_until
+ value to the end of the current day. As soon as one message in the group
+ is to be sent, all will be sent.)
+';
+
+@@ acs-messaging-views
+@@ acs-messaging-packages
+
+set feedback on
Index: openacs-4/packages/acs-messaging/sql/postgresql/acs-messaging-packages.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-messaging/sql/postgresql/acs-messaging-packages.sql,v
diff -u -N -r1.20.4.1 -r1.20.4.2
--- openacs-4/packages/acs-messaging/sql/postgresql/acs-messaging-packages.sql 17 Aug 2016 08:32:11 -0000 1.20.4.1
+++ openacs-4/packages/acs-messaging/sql/postgresql/acs-messaging-packages.sql 20 Sep 2016 15:35:54 -0000 1.20.4.2
@@ -114,38 +114,45 @@
DECLARE
p_creation_date timestamptz := current_timestamp; -- alias for $13 --default sysdate,
v_message_id acs_messages.message_id%TYPE;
- v_rfc822_id acs_messages.rfc822_id%TYPE;
v_revision_id cr_revisions.revision_id%TYPE;
- v_system_url varchar;
- v_domain_name varchar;
- v_idx integer;
BEGIN
- -- generate a message id now so we can get an rfc822 message-id
- if p_message_id is null then
- select nextval('t_acs_object_id_seq') into v_message_id;
- else
- v_message_id := p_message_id;
- end if;
+ -- -- generate a message id now so we can get an rfc822 message-id
+ -- if p_message_id is null then
+ -- select nextval('t_acs_object_id_seq') into v_message_id;
+ -- else
+ -- v_message_id := p_message_id;
+ -- end if;
- -- need to make this mandatory also - jg
- -- this needs to be fixed up, but Oracle doesn't give us a way
- -- to get the FQDN
+ -- -- need to make this mandatory also - jg
+ -- -- this needs to be fixed up, but Oracle doesn't give us a way
+ -- -- to get the FQDN
- -- vk: get SystemURL parameter and use it to extract domain name
- select apm__get_value(package_id, 'SystemURL') into v_system_url
- from apm_packages where package_key='acs-kernel';
- v_idx := position('http://' in v_system_url);
- v_domain_name := trim (substr(v_system_url, v_idx + 7));
+ -- -- vk: get SystemURL parameter and use it to extract domain name
+ -- select apm__get_value(package_id, 'SystemURL') into v_system_url
+ -- from apm_packages where package_key='acs-kernel';
+ -- v_idx := position('http://' in v_system_url);
+ -- v_domain_name := trim (substr(v_system_url, v_idx + 7));
- if p_rfc822_id is null then
- v_rfc822_id := current_date || '.' || v_message_id || '@' ||
- v_domain_name || '.hate';
- else
- v_rfc822_id := p_rfc822_id;
+ -- if p_rfc822_id is null then
+ -- v_rfc822_id := current_date || '.' || v_message_id || '@' ||
+ -- v_domain_name || '.hate';
+ -- else
+ -- v_rfc822_id := p_rfc822_id;
+ -- end if;
+
+ -- Antonio Pisano 2016-09-20
+ -- rfc822_id MUST come from the tcl, no more
+ -- sql tricks to retrieve one if missing.
+ -- Motivations:
+ -- 1) duplication. We have same logics in acs_mail_lite::generate_message_id
+ -- 2) what if SystemURL is https?
+ -- 3) empty SystemURL would break General Comments
+ if p_rfc822_id is null then
+ RAISE null_value_not_allowed;
end if;
v_message_id := content_item__new (
- v_rfc822_id, -- 1 name
+ p_rfc822_id, -- 1 name
p_parent_id, -- 2 parent_id
p_message_id, -- 3 item_id
null, -- 4 locale
@@ -167,7 +174,7 @@
insert into acs_messages
(message_id, reply_to, sent_date, sender, rfc822_id)
values
- (v_message_id, p_reply_to, p_sent_date, p_sender, v_rfc822_id);
+ (v_message_id, p_reply_to, p_sent_date, p_sender, p_rfc822_id);
-- create an initial revision for the new message
v_revision_id := acs_message__edit (
Index: openacs-4/packages/acs-messaging/sql/postgresql/upgrade/upgrade-5.9.1d1-5.9.1d2.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-messaging/sql/postgresql/upgrade/upgrade-5.9.1d1-5.9.1d2.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-messaging/sql/postgresql/upgrade/upgrade-5.9.1d1-5.9.1d2.sql 20 Sep 2016 15:35:55 -0000 1.1.2.1
@@ -0,0 +1,103 @@
+
+CREATE OR REPLACE FUNCTION acs_message__new(
+ p_message_id integer, --default null,
+ p_reply_to integer, --default null,
+ p_sent_date timestamptz, --default sysdate,
+ p_sender integer, --default null,
+ p_rfc822_id varchar, --default null,
+ p_title varchar, --default null,
+ p_description varchar, --default null,
+ p_mime_type varchar, --default 'text/plain',
+ p_text text, --default null,
+ p_data integer, --default null,
+ p_parent_id integer, --default 0,
+ p_context_id integer,
+ p_creation_user integer, --default null,
+ p_creation_ip varchar, --default null,
+ p_object_type varchar, --default 'acs_message',
+ p_is_live boolean, --default 't'
+ p_package_id integer default null
+
+) RETURNS integer AS $$
+DECLARE
+ p_creation_date timestamptz := current_timestamp; -- alias for $13 --default sysdate,
+ v_message_id acs_messages.message_id%TYPE;
+ v_revision_id cr_revisions.revision_id%TYPE;
+ BEGIN
+ -- -- generate a message id now so we can get an rfc822 message-id
+ -- if p_message_id is null then
+ -- select nextval('t_acs_object_id_seq') into v_message_id;
+ -- else
+ -- v_message_id := p_message_id;
+ -- end if;
+
+ -- -- need to make this mandatory also - jg
+ -- -- this needs to be fixed up, but Oracle doesn't give us a way
+ -- -- to get the FQDN
+
+ -- -- vk: get SystemURL parameter and use it to extract domain name
+ -- select apm__get_value(package_id, 'SystemURL') into v_system_url
+ -- from apm_packages where package_key='acs-kernel';
+ -- v_idx := position('http://' in v_system_url);
+ -- v_domain_name := trim (substr(v_system_url, v_idx + 7));
+
+ -- if p_rfc822_id is null then
+ -- v_rfc822_id := current_date || '.' || v_message_id || '@' ||
+ -- v_domain_name || '.hate';
+ -- else
+ -- v_rfc822_id := p_rfc822_id;
+ -- end if;
+
+ -- Antonio Pisano 2016-09-20
+ -- rfc822_id MUST come from the tcl, no more
+ -- sql tricks to retrieve one if missing.
+ -- Motivations:
+ -- 1) duplication. We have same logics in acs_mail_lite::generate_message_id
+ -- 2) what if SystemURL is https?
+ -- 3) empty SystemURL would break General Comments
+ if p_rfc822_id is null then
+ RAISE null_value_not_allowed;
+ end if;
+
+ v_message_id := content_item__new (
+ p_rfc822_id, -- 1 name
+ p_parent_id, -- 2 parent_id
+ p_message_id, -- 3 item_id
+ null, -- 4 locale
+ p_creation_date, -- 5 creation_date
+ p_creation_user, -- 6 creation_user
+ p_context_id, -- 7 context_id
+ p_creation_ip, -- 8 creation_ip
+ p_object_type, -- 9 item_subtype
+ 'acs_message_revision', -- 10 content_type
+ null, -- 11 title
+ null, -- 12 description
+ 'text/plain', -- 13 mime_type
+ null, -- 14 nls_language
+ null, -- 15 text
+ 'text', -- 16 storage_type
+ p_package_id -- 17 package_id
+ );
+
+ insert into acs_messages
+ (message_id, reply_to, sent_date, sender, rfc822_id)
+ values
+ (v_message_id, p_reply_to, p_sent_date, p_sender, p_rfc822_id);
+
+ -- create an initial revision for the new message
+ v_revision_id := acs_message__edit (
+ v_message_id, -- message_id
+ p_title, -- title
+ p_description, -- description
+ p_mime_type, -- mime_type
+ p_text, -- text
+ p_data, -- data
+ p_creation_date, -- creation_date
+ p_creation_user, -- creation_user
+ p_creation_ip, -- creation_ip
+ p_is_live -- is_live
+ );
+
+ return v_message_id;
+END;
+$$ LANGUAGE plpgsql;
Index: openacs-4/packages/general-comments/tcl/general-comments-procs-oracle.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/general-comments/tcl/general-comments-procs-oracle.xql,v
diff -u -N -r1.7 -r1.7.16.1
--- openacs-4/packages/general-comments/tcl/general-comments-procs-oracle.xql 24 Jan 2005 00:29:38 -0000 1.7
+++ openacs-4/packages/general-comments/tcl/general-comments-procs-oracle.xql 20 Sep 2016 15:35:54 -0000 1.7.16.1
@@ -63,7 +63,8 @@
context_id => :context_id,
creation_user => :user_id,
creation_ip => :creation_ip,
- is_live => :is_live
+ is_live => :is_live,
+ rfc822_id => :rfc822_id
);
end;
Index: openacs-4/packages/general-comments/tcl/general-comments-procs-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/general-comments/tcl/general-comments-procs-postgresql.xql,v
diff -u -N -r1.8 -r1.8.12.1
--- openacs-4/packages/general-comments/tcl/general-comments-procs-postgresql.xql 8 Aug 2006 21:26:56 -0000 1.8
+++ openacs-4/packages/general-comments/tcl/general-comments-procs-postgresql.xql 20 Sep 2016 15:35:54 -0000 1.8.12.1
@@ -61,7 +61,7 @@
NULL, -- 2 p_reply_to
current_timestamp, -- 3 p_sent_date
NULL, -- 4 p_sender
- NULL, -- 5 p_rfc822_id
+ :rfc822_id, -- 5 p_rfc822_id
:title, -- 6 p_title
NULL, -- 7 p_description
:comment_mime_type, -- 8 p_mime_type
Index: openacs-4/packages/general-comments/tcl/general-comments-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/general-comments/tcl/general-comments-procs.tcl,v
diff -u -N -r1.22.2.1 -r1.22.2.2
--- openacs-4/packages/general-comments/tcl/general-comments-procs.tcl 18 Sep 2015 08:07:33 -0000 1.22.2.1
+++ openacs-4/packages/general-comments/tcl/general-comments-procs.tcl 20 Sep 2016 15:35:54 -0000 1.22.2.2
@@ -34,6 +34,10 @@
@error
} {
+
+ # Generate a unique id for the message
+ # result from proc comes enveloped in <>
+ set rfc822_id [string range [acs_mail_lite::generate_message_id] 1 end-1]
db_transaction {