EPrints Technical Mailing List Archive
See the EPrints wiki for instructions on how to join this mailing list and related information.
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] EPrints/CRIS
 - Next by thread: [EP-tech] DOI handling in orcid_support_advance
 - Index(es):
 
