</links>
</class>
<class id="aum" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="actor::usr_message" oils_persist:tablename="actor.usr_message" reporter:label="User Message">
- <fields oils_persist:primary="id" oils_persist:sequence="actor.usr_note_id_seq">
+ <fields oils_persist:primary="id" oils_persist:sequence="actor.usr_message_id_seq">
+ <field reporter:label="Creation Date/Time" name="create_date" reporter:datatype="timestamp"/>
+ <field reporter:label="Read Date/Time" name="read_date" reporter:datatype="timestamp"/>
+ <field reporter:label="Creating Library" name="sending_lib" reporter:datatype="link"/>
+ <field reporter:label="Message ID" name="id" reporter:datatype="id" />
+ <field reporter:label="Deleted?" name="deleted" reporter:datatype="bool"/>
+ <field reporter:label="Title" name="title" reporter:datatype="text"/>
+ <field reporter:label="User" name="usr" reporter:datatype="link" />
+ <field reporter:label="Message" name="message" reporter:datatype="text"/>
+ </fields>
+ <links>
+ <link field="usr" reltype="has_a" key="id" map="" class="au"/>
+ <link field="sending_lib" reltype="has_a" key="id" map="" class="aou"/>
+ </links>
+ <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+ <actions> <!-- created magically, so no create action -->
+ <retrieve permission="VIEW_USER" context_field="sending_lib" />
+ <update permission="UPDATE_USER" context_field="sending_lib" />
+ <delete permission="UPDATE_USER" context_field="sending_lib" />
+ </actions>
+ </permacrud>
+ </class>
+ <class id="auml" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="actor::usr_message" oils_persist:tablename="actor.usr_message_limited" reporter:label="User Message (Limited Access)">
+ <fields oils_persist:primary="id" oils_persist:sequence="actor.usr_message_id_seq">
<field reporter:label="Creation Date/Time" name="create_date" reporter:datatype="timestamp"/>
<field reporter:label="Read Date/Time" name="read_date" reporter:datatype="timestamp"/>
<field reporter:label="Creating Library" name="sending_lib" reporter:datatype="link"/>
</links>
<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
<actions> <!-- created magically, so no create action -->
- <retrieve permission="VIEW_USER" context_field="sending_lib" owning_user="usr"/>
- <update permission="UPDATE_USER" context_field="sending_lib" owning_user="usr"/>
- <delete permission="UPDATE_USER" context_field="sending_lib" owning_user="usr"/>
+ <retrieve permission="UPDATE_USER" context_field="sending_lib" owning_user="usr"/>
+ <update permission="UPDATE_USER" context_field="sending_lib" owning_user="usr"/>
</actions>
</permacrud>
</class>
$pcrud->request('open-ils.pcrud.transaction.begin', $self->editor->authtoken)->gather(1);
my $messages = $pcrud->request(
- 'open-ils.pcrud.search.aum.atomic',
+ 'open-ils.pcrud.search.auml.atomic',
$self->editor->authtoken,
{
usr => $self->editor->requestor->id,
},
{
flesh => 1,
- flesh_fields => { aum => ['sending_lib'] },
+ flesh_fields => { auml => ['sending_lib'] },
}
)->gather(1);
if (@$messages) {
$messages->[0]->read_date('now');
$pcrud->request(
- 'open-ils.pcrud.update.aum',
+ 'open-ils.pcrud.update.auml',
$self->editor->authtoken,
$messages->[0]
)->gather(1);
my %paging = ($limit or $offset) ? (limit => $limit, offset => $offset) : ();
my $all_messages = $pcrud->request(
- 'open-ils.pcrud.id_list.aum.atomic',
+ 'open-ils.pcrud.id_list.auml.atomic',
$self->editor->authtoken,
{
usr => $self->editor->requestor->id,
)->gather(1);
my $messages = $pcrud->request(
- 'open-ils.pcrud.search.aum.atomic',
+ 'open-ils.pcrud.search.auml.atomic',
$self->editor->authtoken,
{
usr => $self->editor->requestor->id,
},
{
flesh => 1,
- flesh_fields => { aum => ['sending_lib'] },
- order_by => { aum => 'create_date DESC' },
+ flesh_fields => { auml => ['sending_lib'] },
+ order_by => { auml => 'create_date DESC' },
%paging
}
)->gather(1);
$pcrud->request('open-ils.pcrud.transaction.begin', $self->editor->authtoken)->gather(1);
for my $id (@ids) {
my $aum = $pcrud->request(
- 'open-ils.pcrud.retrieve.aum',
+ 'open-ils.pcrud.retrieve.auml',
$self->editor->authtoken,
$id
)->gather(1);
} elsif ($action eq 'mark_deleted') {
$aum->deleted('t');
}
- $pcrud->request('open-ils.pcrud.update.aum', $self->editor->authtoken, $aum)->gather(1) ?
+ $pcrud->request('open-ils.pcrud.update.auml', $self->editor->authtoken, $aum)->gather(1) ?
$changed++ :
$failed++;
}
WHERE OLD.id = actor.usr_message.id
);
-ALTER TALBE action_trigger.event_definition
- ADD COLUMN message_template TEXT,
- ADD COLUMN message_usr_path TEXT,
- ADD COLUMN message_library_path TEXT,
- ADD COLUMN message_title TEXT;
-
CREATE FUNCTION actor.convert_usr_note_to_message () RETURNS TRIGGER AS $$
BEGIN
IF NEW.pub THEN
AFTER INSERT OR UPDATE ON actor.usr_note
FOR EACH ROW EXECUTE PROCEDURE actor.convert_usr_note_to_message();
+-- limited view to ensure that a library user who somehow
+-- manages to figure out how to access pcrud cannot change
+-- the text of messages sent them
+CREATE VIEW actor.usr_message_limited
+AS SELECT * FROM actor.usr_message;
+
+CREATE FUNCTION actor.restrict_usr_message_limited () RETURNS TRIGGER AS $$
+BEGIN
+ IF TG_OP = 'UPDATE' THEN
+ UPDATE actor.usr_message
+ SET read_date = NEW.read_date,
+ deleted = NEW.deleted
+ WHERE id = NEW.id;
+ RETURN NEW;
+ END IF;
+ RETURN NULL;
+END;
+$$ LANGUAGE PLPGSQL;
+
+CREATE TRIGGER restrict_usr_message_limited_tgr
+ INSTEAD OF UPDATE OR INSERT OR DELETE ON actor.usr_message_limited
+ FOR EACH ROW EXECUTE PROCEDURE actor.restrict_usr_message_limited();
+
CREATE TABLE actor.usr_setting (
id BIGSERIAL PRIMARY KEY,
usr INT NOT NULL REFERENCES actor.usr ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
AFTER INSERT OR UPDATE ON actor.usr_note
FOR EACH ROW EXECUTE PROCEDURE actor.convert_usr_note_to_message();
+CREATE VIEW actor.usr_message_limited
+AS SELECT * FROM actor.usr_message;
+
+CREATE FUNCTION actor.restrict_usr_message_limited () RETURNS TRIGGER AS $$
+BEGIN
+ IF TG_OP = 'UPDATE' THEN
+ UPDATE actor.usr_message
+ SET read_date = NEW.read_date,
+ deleted = NEW.deleted
+ WHERE id = NEW.id;
+ RETURN NEW;
+ END IF;
+ RETURN NULL;
+END;
+$$ LANGUAGE PLPGSQL;
+
+CREATE TRIGGER restrict_usr_message_limited_tgr
+ INSTEAD OF UPDATE OR INSERT OR DELETE ON actor.usr_message_limited
+ FOR EACH ROW EXECUTE PROCEDURE actor.restrict_usr_message_limited();
+
-- and copy over existing public user notes as (read) patron messages
INSERT INTO actor.usr_message (usr, title, message, sending_lib, create_date, read_date)
SELECT aun.usr, title, value, home_ou, aun.create_date, NOW()