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 {