EPrints Technical Mailing List Archive
Message: #09021
< Previous (by date) | Next (by date) > | < Previous (in thread) | Next (in thread) > | Messages - Most Recent First | Threads - Most Recent First
Re: [EP-tech] email notification on a specific metadata field value change
- To: Tomasz Neugebauer <Tomasz.Neugebauer@concordia.ca>, "eprints-tech@ecs.soton.ac.uk" <eprints-tech@ecs.soton.ac.uk>
- Subject: Re: [EP-tech] email notification on a specific metadata field value change
- From: John Salter <J.Salter@leeds.ac.uk>
- Date: Sun, 7 Aug 2022 19:15:08 +0000
CAUTION: This e-mail originated outside the University of Southampton.
To log something in the history dataset, you need to do something like this:
https://github.com/eprints/eprints/blob/3.3/perl_lib/EPrints/DataObj/EPrint.pm#L755-L772
I don't think the 'revision' needs to be set.
The 'action' value is defined as a set: https://github.com/eprints/eprints/blob/3.3/perl_lib/EPrints/DataObj/History.pm#L120-L137
You could use the 'note' or 'other' action and include info in the 'details' field.
An alternative approach would be to add a new value to the set of options (pushing a value onto the set), or redefining the history->action field using 'replace_core'. This would be beneficial if you ever needed to search the history dataset for that specific
action.
Hope that gets you somewhere close to a working solution!
Cheers,
John
From: Tomasz Neugebauer <Tomasz.Neugebauer@concordia.ca>
Sent: 05 August 2022 22:20 To: John Salter <J.Salter@leeds.ac.uk>; eprints-tech@ecs.soton.ac.uk <eprints-tech@ecs.soton.ac.uk> Subject: RE: [EP-tech] email notification on a specific metadata field value change Thank you, John! Yes, that worked for me, the function looks like this:
$c->add_dataset_trigger( 'eprint', EPrints::Const::EP_TRIGGER_BEFORE_COMMIT, sub { my( %args ) = @_; my( $session, $eprint, $changed ) = @args{qw( repository dataobj changed )};
if( exists $changed->{'field_of_interest'} ) { my $old_val = $changed->{'field_of_interest'}; my $new_val = $eprint->get_value( 'field_of_interest');
my $user = $eprint->get_user(); my $username = EPrints::Utils::tree_to_utf8( $user->render_description() );
# generate an email alert if ($old_val eq 'FALSE' && $new_val eq 'TRUE') { print STDERR "field_of_interest Changed from ".$old_val." ".$new_val." SEND NOTIFICATION EMAIL";
my $message = $session->make_element( "p" ); $message->appendChild( $session->make_text("Hello " . $username.",")); $message->appendChild($session->make_element( "br" )); $message->appendChild($session->make_element( "br" ));
my $title = $session->make_element( "strong" ); $title->appendChild($session->make_text($eprint->get_value("title")));
$message->appendChild($session->make_text( "This email is to let you know that the following item you deposited: ")); $message->appendChild($title); $message->appendChild($session->make_text(" (".$eprint->get_url().")")); $message->appendChild($session->make_text(" has changed in a specific way."));
my $ok = $user->mail("field_change_phrase",$message); }
} }, priority => 73);
This works! The only thing is, I would like the action to register in the history for the item, any idea how would I do that?
Tomasz
From: John Salter <J.Salter@leeds.ac.uk>
Attention This email originates from outside the concordia.ca domain. // Ce courriel provient de l'exterieur du domaine de concordia.ca
This sounds like a job for a commit trigger.
You can check whether the field you are interested in is a key in the changed hash, and use that as a basis for sending an email. NB The example below may not be syntactically correct. It's lashed together late at night (for me anyway), but I think you'll get the idea. Happy to answer questions about it in (my) morning!
Cheers, John
$c->add_dataset_trigger( 'eprint', EPrints::Const::EP_TRIGGER_BEFORE_COMMIT, sub { my( %args ) = @_; my( $repo, $user, $changed ) = @args{qw( repository dataobj changed )};
if( exists $changed->{'the_field_youre_interested_in'} ) { my $old_val = $changed->{'the_field_youre_interested_in'}; my $new_val = $eprint->get_value( 'the_field_youre_interested_in' );
# generate an email alert } }, priority => 73);
From:
eprints-tech-bounces@ecs.soton.ac.uk [mailto:eprints-tech-bounces@ecs.soton.ac.uk]
On Behalf Of Tomasz Neugebauer via Eprints-tech
CAUTION: This e-mail originated outside the University of Southampton. Another question from me, I hope I don’t get blocked for posting too many! I would like to add an email notification that would be sent out to the depositor when a specific editor-only metadata field changes in a deposit. What would be the best/easiest way to get that done? This method is the only way that comes to mind, but it seems complicated. Would I need to 1. add an item field with a date value, 2. use “automatic fields.pl” to insert a date of when the field changes into it whenver the field that I want monitored changes, and 3. run a batch script nightly to send the notification email to for all those items that have “today’s” date in the monitor field Or could I use a trigger mechanism on this field to send out the email? Tomasz
|
- Follow-Ups:
- Re: [EP-tech] email notification on a specific metadata field value change
- From: John Salter <J.Salter@leeds.ac.uk>
- Re: [EP-tech] email notification on a specific metadata field value change
- References:
- [EP-tech] email notification on a specific metadata field value change
- From: Tomasz Neugebauer <Tomasz.Neugebauer@concordia.ca>
- Re: [EP-tech] email notification on a specific metadata field value change
- From: John Salter <J.Salter@leeds.ac.uk>
- Re: [EP-tech] email notification on a specific metadata field value change
- From: Tomasz Neugebauer <Tomasz.Neugebauer@concordia.ca>
- Re: [EP-tech] email notification on a specific metadata field value change
- From: John Salter <J.Salter@leeds.ac.uk>
- [EP-tech] email notification on a specific metadata field value change
- Prev by Date: Re: [EP-tech] email notification on a specific metadata field value change
- Next by Date: [EP-tech] empty c->{'host'} in Eprints 3.3.XX
- Previous by thread: [EP-tech] Sort view with creators_name and corp_creators
- Index(es):