LP#1749475: stamp schema update
authorGalen Charlton <gmc@equinoxinitiative.org>
Mon, 14 Sep 2020 13:46:43 +0000 (09:46 -0400)
committerGalen Charlton <gmc@equinoxinitiative.org>
Mon, 14 Sep 2020 13:47:25 +0000 (09:47 -0400)
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Open-ILS/src/sql/Pg/002.schema.config.sql
Open-ILS/src/sql/Pg/upgrade/1231.schema.AT-def-groups.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/XXXX.schema.AT-def-groups.sql [deleted file]

index 5ee86b6..483c5fa 100644 (file)
@@ -92,7 +92,7 @@ CREATE TRIGGER no_overlapping_deps
     BEFORE INSERT OR UPDATE ON config.db_patch_dependencies
     FOR EACH ROW EXECUTE PROCEDURE evergreen.array_overlap_check ('deprecates');
 
     BEFORE INSERT OR UPDATE ON config.db_patch_dependencies
     FOR EACH ROW EXECUTE PROCEDURE evergreen.array_overlap_check ('deprecates');
 
-INSERT INTO config.upgrade_log (version, applied_to) VALUES ('1230', :eg_version); -- dbs/sandbergja/jboyer
+INSERT INTO config.upgrade_log (version, applied_to) VALUES ('1231', :eg_version); -- miker/mmorgan/gmcharlt
 
 CREATE TABLE config.bib_source (
        id              SERIAL  PRIMARY KEY,
 
 CREATE TABLE config.bib_source (
        id              SERIAL  PRIMARY KEY,
diff --git a/Open-ILS/src/sql/Pg/upgrade/1231.schema.AT-def-groups.sql b/Open-ILS/src/sql/Pg/upgrade/1231.schema.AT-def-groups.sql
new file mode 100644 (file)
index 0000000..37d268a
--- /dev/null
@@ -0,0 +1,414 @@
+BEGIN;
+
+SELECT evergreen.upgrade_deps_block_check('1231', :eg_version);
+
+INSERT into config.org_unit_setting_type
+( name, grp, label, description, datatype, fm_class ) VALUES
+( 'opac.email_record.allow_without_login', 'opac',
+    oils_i18n_gettext('opac.email_record.allow_without_login',
+        'Allow record emailing without login',
+        'coust', 'label'),
+    oils_i18n_gettext('opac.email_record.allow_without_login',
+        'Instead of forcing a patron to log in in order to email the details of a record, just challenge them with a simple catpcha.',
+        'coust', 'description'),
+    'bool', null)
+;
+
+CREATE TABLE action_trigger.event_def_group (
+    id      SERIAL  PRIMARY KEY,
+    owner   INT     NOT NULL REFERENCES actor.org_unit (id)
+                        ON DELETE RESTRICT ON UPDATE CASCADE
+                        DEFERRABLE INITIALLY DEFERRED,
+    hook    TEXT    NOT NULL REFERENCES action_trigger.hook (key)
+                        ON DELETE RESTRICT ON UPDATE CASCADE
+                        DEFERRABLE INITIALLY DEFERRED,
+    active  BOOL    NOT NULL DEFAULT TRUE,
+    name    TEXT    NOT NULL
+);
+SELECT SETVAL('action_trigger.event_def_group_id_seq'::TEXT, 100, TRUE);
+
+CREATE TABLE action_trigger.event_def_group_member (
+    id          SERIAL  PRIMARY KEY,
+    grp         INT     NOT NULL REFERENCES action_trigger.event_def_group (id)
+                            ON DELETE CASCADE ON UPDATE CASCADE
+                            DEFERRABLE INITIALLY DEFERRED,
+    event_def   INT     NOT NULL REFERENCES action_trigger.event_definition (id)
+                            ON DELETE RESTRICT ON UPDATE CASCADE
+                            DEFERRABLE INITIALLY DEFERRED,
+    sortable    BOOL    NOT NULL DEFAULT TRUE,
+    holdings    BOOL    NOT NULL DEFAULT FALSE,
+    external    BOOL    NOT NULL DEFAULT FALSE,
+    name        TEXT    NOT NULL
+);
+
+INSERT INTO action_trigger.event_def_group (id, owner, hook, name)
+    VALUES (1, 1, 'biblio.format.record_entry.print','Print Record(s)');
+
+INSERT INTO action_trigger.event_def_group (id, owner, hook, name)
+    VALUES (2,1,'biblio.format.record_entry.email','Email Record(s)');
+
+DO $block$
+BEGIN
+  PERFORM * FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.email' AND owner = 1 AND active AND template =
+$$
+[%- USE date -%]
+[%- SET user = target.0.owner -%]
+To: [%- params.recipient_email || user.email %]
+From: [%- params.sender_email || default_sender %]
+Date: [%- date.format(date.now, '%a, %d %b %Y %T -0000', gmt => 1) %]
+Subject: Bibliographic Records
+Auto-Submitted: auto-generated
+
+[% FOR cbreb IN target %]
+[% FOR item IN cbreb.items;
+    bre_id = item.target_biblio_record_entry;
+
+    bibxml = helpers.unapi_bre(bre_id, {flesh => '{mra}'});
+    title = '';
+    FOR part IN bibxml.findnodes('//*[@tag="245"]/*[@code="a" or @code="b"]');
+        title = title _ part.textContent;
+    END;
+
+    author = bibxml.findnodes('//*[@tag="100"]/*[@code="a"]').textContent;
+    item_type = bibxml.findnodes('//*[local-name()="attributes"]/*[local-name()="field"][@name="item_type"]').getAttribute('coded-value');
+    publisher = bibxml.findnodes('//*[@tag="260"]/*[@code="b"]').textContent;
+    pubdate = bibxml.findnodes('//*[@tag="260"]/*[@code="c"]').textContent;
+    isbn = bibxml.findnodes('//*[@tag="020"]/*[@code="a"]').textContent;
+    issn = bibxml.findnodes('//*[@tag="022"]/*[@code="a"]').textContent;
+    upc = bibxml.findnodes('//*[@tag="024"]/*[@code="a"]').textContent;
+%]
+
+[% loop.count %]/[% loop.size %].  Bib ID# [% bre_id %]
+[% IF isbn %]ISBN: [% isbn _ "\n" %][% END -%]
+[% IF issn %]ISSN: [% issn _ "\n" %][% END -%]
+[% IF upc  %]UPC:  [% upc _ "\n" %] [% END -%]
+Title: [% title %]
+Author: [% author %]
+Publication Info: [% publisher %] [% pubdate %]
+Item Type: [% item_type %]
+
+[% END %]
+[% END %]
+$$;
+
+  IF FOUND THEN -- update
+
+    INSERT INTO action_trigger.event_def_group_member (grp, name, event_def)
+        SELECT 2, 'Brief', id FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.email';
+
+    INSERT INTO action_trigger.event_def_group_member (grp, name, holdings, event_def)
+        SELECT 2, 'Full', TRUE, id FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.email';
+
+    UPDATE action_trigger.event_definition SET template = $$
+[%- USE date -%]
+[%- SET user = target.0.owner -%]
+To: [%- params.recipient_email || user_data.0.email || user.email %]
+From: [%- params.sender_email || default_sender %]
+Date: [%- date.format(date.now, '%a, %d %b %Y %T -0000', gmt => 1) %]
+Subject: [%- user_data.0.subject || 'Bibliographic Records' %]
+Auto-Submitted: auto-generated
+
+[%- FOR cbreb IN target;
+
+    flesh_list = '{mra';
+    IF user_data.0.type == 'full';
+        flesh_list = flesh_list _ ',holdings_xml,acp';
+        IF params.holdings_limit;
+            flimit = 'acn=>' _ params.holdings_limit _ ',acp=>' _ params.holdings_limit;
+        END;
+    END;
+    flesh_list = flesh_list _ '}';
+
+    item_list = helpers.sort_bucket_unapi_bre(cbreb.items,{flesh => flesh_list, site => user_data.0.context_org, flesh_limit => flimit}, user_data.0.sort_by, user_data.0.sort_dir);
+
+FOR item IN item_list -%]
+
+[% loop.count %]/[% loop.size %].  Bib ID# [% item.id %]
+[% IF item.isbn %]ISBN: [% item.isbn _ "\n" %][% END -%]
+[% IF item.issn %]ISSN: [% item.issn _ "\n" %][% END -%]
+[% IF item.upc  %]UPC:  [% item.upc _ "\n" %][% END -%]
+Title: [% item.title %]
+[% IF item.author %]Author: [% item.author _ "\n" %][% END -%]
+Publication Info: [% item.publisher %] [% item.pubdate %]
+Item Type: [% item.item_type %]
+[% IF user_data.0.type == 'full' && item.holdings.size == 0 %]
+ * No items for this record at the selected location
+[%- END %]
+[% FOR cp IN item.holdings -%]
+ * Library: [% cp.circ_lib %]
+   Location: [% cp.location %]
+   Call Number: [% cp.prefix _ ' ' _ cp.callnumber _ ' ' _ cp.suffix %]
+[% IF cp.parts %]   Parts: [% cp.parts _ "\n" %][% END -%]
+   Status: [% cp.status_label %]
+   Barcode: [% cp.barcode %]
+[% END -%]
+[%- END -%]
+[%- END -%]
+$$ WHERE hook = 'biblio.format.record_entry.email' AND owner = 1 AND active;
+
+  ELSE -- insert full and add existing brief
+
+    INSERT INTO action_trigger.event_def_group_member (grp, name, event_def)
+        SELECT 2, 'Brief', id FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.email' AND active;
+
+    INSERT INTO action_trigger.event_definition (
+        active,
+        owner,
+        name,
+        hook,
+        validator,
+        reactor,
+        cleanup_success,
+        cleanup_failure,
+        group_field,
+        granularity,
+        delay,
+        template
+    ) SELECT
+        TRUE,
+        owner,
+        'biblio.record_entry.email.full',
+        'biblio.format.record_entry.email',
+        'NOOP_True',
+        'SendEmail',
+        'DeleteTempBiblioBucket',
+        'DeleteTempBiblioBucket',
+        'owner',
+        NULL,
+        '00:00:00',
+        $$
+[%- USE date -%]
+[%- SET user = target.0.owner -%]
+To: [%- params.recipient_email || user_data.0.email || user.email %]
+From: [%- params.sender_email || default_sender %]
+Date: [%- date.format(date.now, '%a, %d %b %Y %T -0000', gmt => 1) %]
+Subject: [%- user_data.0.subject || 'Bibliographic Records' %]
+Auto-Submitted: auto-generated
+
+[%- FOR cbreb IN target;
+
+    flesh_list = '{mra';
+    IF user_data.0.type == 'full';
+        flesh_list = flesh_list _ ',holdings_xml,acp';
+        IF params.holdings_limit;
+            flimit = 'acn=>' _ params.holdings_limit _ ',acp=>' _ params.holdings_limit;
+        END;
+    END;
+    flesh_list = flesh_list _ '}';
+
+    item_list = helpers.sort_bucket_unapi_bre(cbreb.items,{flesh => flesh_list, site => user_data.0.context_org, flesh_limit => flimit}, user_data.0.sort_by, user_data.0.sort_dir);
+
+FOR item IN item_list -%]
+
+[% loop.count %]/[% loop.size %].  Bib ID# [% item.id %]
+[% IF item.isbn %]ISBN: [% item.isbn _ "\n" %][% END -%]
+[% IF item.issn %]ISSN: [% item.issn _ "\n" %][% END -%]
+[% IF item.upc  %]UPC:  [% item.upc _ "\n" %][% END -%]
+Title: [% item.title %]
+[% IF item.author %]Author: [% item.author _ "\n" %][% END -%]
+Publication Info: [% item.publisher %] [% item.pubdate %]
+Item Type: [% item.item_type %]
+[% IF user_data.0.type == 'full' && item.holdings.size == 0 %]
+ * No items for this record at the selected location
+[%- END %]
+[% FOR cp IN item.holdings -%]
+ * Library: [% cp.circ_lib %]
+   Location: [% cp.location %]
+   Call Number: [% cp.prefix _ ' ' _ cp.callnumber _ ' ' _ cp.suffix %]
+[% IF cp.parts %]   Parts: [% cp.parts _ "\n" %][% END -%]
+   Status: [% cp.status_label %]
+   Barcode: [% cp.barcode %]
+[% END -%]
+[%- END -%]
+[%- END -%]
+$$ FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.email' AND active;
+
+    INSERT INTO action_trigger.event_def_group_member (grp, name, holdings, event_def)
+        SELECT 2, 'Full', TRUE, id FROM action_trigger.event_definition WHERE name = 'biblio.record_entry.email.full' and active;
+
+  END IF;
+END
+$block$;
+
+DO $block$
+BEGIN
+  PERFORM * FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.print' AND owner = 1 AND active AND template =
+$$
+<div>
+    <style> li { padding: 8px; margin 5px; }</style>
+    <ol>
+    [% FOR cbreb IN target %]
+    [% FOR item IN cbreb.items;
+        bre_id = item.target_biblio_record_entry;
+
+        bibxml = helpers.unapi_bre(bre_id, {flesh => '{mra}'});
+        title = '';
+        FOR part IN bibxml.findnodes('//*[@tag="245"]/*[@code="a" or @code="b"]');
+            title = title _ part.textContent;
+        END;
+
+        author = bibxml.findnodes('//*[@tag="100"]/*[@code="a"]').textContent;
+        item_type = bibxml.findnodes('//*[local-name()="attributes"]/*[local-name()="field"][@name="item_type"]').getAttribute('coded-value');
+        publisher = bibxml.findnodes('//*[@tag="260"]/*[@code="b"]').textContent;
+        pubdate = bibxml.findnodes('//*[@tag="260"]/*[@code="c"]').textContent;
+        isbn = bibxml.findnodes('//*[@tag="020"]/*[@code="a"]').textContent;
+        %]
+
+        <li>
+            Bib ID# [% bre_id %] ISBN: [% isbn %]<br />
+            Title: [% title %]<br />
+            Author: [% author %]<br />
+            Publication Info: [% publisher %] [% pubdate %]<br/>
+            Item Type: [% item_type %]
+        </li>
+    [% END %]
+    [% END %]
+    </ol>
+</div>
+$$;
+
+  IF FOUND THEN -- update
+
+    INSERT INTO action_trigger.event_def_group_member (grp, name, event_def)
+        SELECT 1, 'Brief', id FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.print';
+
+    INSERT INTO action_trigger.event_def_group_member (grp, name, holdings, event_def)
+        SELECT 1, 'Full', TRUE, id FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.print';
+
+    UPDATE action_trigger.event_definition SET template = $$
+<div>
+    <style> li { padding: 8px; margin 5px; }</style>
+    <ol>
+    [% FOR cbreb IN target;
+
+    flesh_list = '{mra';
+    IF user_data.0.type == 'full';
+        flesh_list = flesh_list _ ',holdings_xml,acp';
+        IF params.holdings_limit;
+            flimit = 'acn=>' _ params.holdings_limit _ ',acp=>' _ params.holdings_limit;
+        END;
+    END;
+    flesh_list = flesh_list _ '}';
+
+    item_list = helpers.sort_bucket_unapi_bre(cbreb.items,{flesh => flesh_list, site => user_data.0.context_org, flesh_limit => flimit}, user_data.0.sort_by, user_data.0.sort_dir);
+    FOR item IN item_list %]
+        <li>
+            Bib ID# [% item.id %]<br />
+            [% IF item.isbn %]ISBN: [% item.isbn %]<br />[% END %]
+            [% IF item.issn %]ISSN: [% item.issn %]<br />[% END %]
+            [% IF item.upc  %]UPC:  [% item.upc %]<br />[% END %]
+            Title: [% item.title %]<br />
+[% IF item.author %]            Author: [% item.author %]<br />[% END -%]
+            Publication Info: [% item.publisher %] [% item.pubdate %]<br/>
+            Item Type: [% item.item_type %]
+            <ul>
+            [% IF user_data.0.type == 'full' && item.holdings.size == 0 %]
+                <li>No items for this record at the selected location</li>
+            [% END %]
+            [% FOR cp IN item.holdings -%]
+                <li>
+                    Library: [% cp.circ_lib %]<br/>
+                    Location: [% cp.location %]<br/>
+                    Call Number: [% cp.prefix _ ' ' _ cp.callnumber _ ' ' _ cp.suffix %]<br/>
+                    [% IF cp.parts %]Parts: [% cp.parts %]<br/>[% END %]
+                    Status: [% cp.status_label %]<br/>
+                    Barcode: [% cp.barcode %]
+                </li>
+            [% END %]
+            </ul>
+        </li>
+    [% END %]
+    [% END %]
+    </ol>
+</div>
+$$ WHERE hook = 'biblio.format.record_entry.print' AND owner = 1 AND active;
+
+    ELSE -- insert full and add brief
+
+    INSERT INTO action_trigger.event_def_group_member (grp, name, event_def)
+        SELECT 1, 'Brief', id FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.print' AND active;
+
+    INSERT INTO action_trigger.event_definition (
+        active,
+        owner,
+        name,
+        hook,
+        validator,
+        reactor,
+        cleanup_success,
+        cleanup_failure,
+        group_field,
+        granularity,
+        delay,
+        template
+    ) SELECT
+        TRUE,
+        owner,
+        'biblio.record_entry.print.full',
+        'biblio.format.record_entry.print',
+        'NOOP_True',
+        'ProcessTemplate',
+        'DeleteTempBiblioBucket',
+        'DeleteTempBiblioBucket',
+        'owner',
+        'print-on-demand',
+        '00:00:00',
+        $$
+<div>
+    <style> li { padding: 8px; margin 5px; }</style>
+    <ol>
+    [% FOR cbreb IN target;
+
+    flesh_list = '{mra';
+    IF user_data.0.type == 'full';
+        flesh_list = flesh_list _ ',holdings_xml,acp';
+        IF params.holdings_limit;
+            flimit = 'acn=>' _ params.holdings_limit _ ',acp=>' _ params.holdings_limit;
+        END;
+    END;
+    flesh_list = flesh_list _ '}';
+
+    item_list = helpers.sort_bucket_unapi_bre(cbreb.items,{flesh => flesh_list, site => user_data.0.context_org, flesh_limit => flimit}, user_data.0.sort_by, user_data.0.sort_dir);
+    FOR item IN item_list %]
+        <li>
+            Bib ID# [% item.id %]<br />
+            [% IF item.isbn %]ISBN: [% item.isbn %]<br />[% END %]
+            [% IF item.issn %]ISSN: [% item.issn %]<br />[% END %]
+            [% IF item.upc  %]UPC:  [% item.upc %]<br />[% END %]
+            Title: [% item.title %]<br />
+[% IF item.author %]            Author: [% item.author %]<br />[% END -%]
+            Publication Info: [% item.publisher %] [% item.pubdate %]<br/>
+            Item Type: [% item.item_type %]
+            <ul>
+            [% IF user_data.0.type == 'full' && item.holdings.size == 0 %]
+                <li>No items for this record at the selected location</li>
+            [% END %]
+            [% FOR cp IN item.holdings -%]
+                <li>
+                    Library: [% cp.circ_lib %]<br/>
+                    Location: [% cp.location %]<br/>
+                    Call Number: [% cp.prefix _ ' ' _ cp.callnumber _ ' ' _ cp.suffix %]<br/>
+                    [% IF cp.parts %]Parts: [% cp.parts %]<br/>[% END %]
+                    Status: [% cp.status_label %]<br/>
+                    Barcode: [% cp.barcode %]
+                </li>
+            [% END %]
+            </ul>
+        </li>
+    [% END %]
+    [% END %]
+    </ol>
+</div>
+$$ FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.print' AND active;
+
+    INSERT INTO action_trigger.event_def_group_member (grp, name, holdings, event_def)
+        SELECT 1, 'Full', TRUE, id FROM action_trigger.event_definition WHERE name = 'biblio.record_entry.print.full' and active;
+
+  END IF;
+END
+$block$;
+
+COMMIT;
+
diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.AT-def-groups.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.AT-def-groups.sql
deleted file mode 100644 (file)
index 6f9cbd2..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-BEGIN;
-
-SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
-
-INSERT into config.org_unit_setting_type
-( name, grp, label, description, datatype, fm_class ) VALUES
-( 'opac.email_record.allow_without_login', 'opac',
-    oils_i18n_gettext('opac.email_record.allow_without_login',
-        'Allow record emailing without login',
-        'coust', 'label'),
-    oils_i18n_gettext('opac.email_record.allow_without_login',
-        'Instead of forcing a patron to log in in order to email the details of a record, just challenge them with a simple catpcha.',
-        'coust', 'description'),
-    'bool', null)
-;
-
-CREATE TABLE action_trigger.event_def_group (
-    id      SERIAL  PRIMARY KEY,
-    owner   INT     NOT NULL REFERENCES actor.org_unit (id)
-                        ON DELETE RESTRICT ON UPDATE CASCADE
-                        DEFERRABLE INITIALLY DEFERRED,
-    hook    TEXT    NOT NULL REFERENCES action_trigger.hook (key)
-                        ON DELETE RESTRICT ON UPDATE CASCADE
-                        DEFERRABLE INITIALLY DEFERRED,
-    active  BOOL    NOT NULL DEFAULT TRUE,
-    name    TEXT    NOT NULL
-);
-SELECT SETVAL('action_trigger.event_def_group_id_seq'::TEXT, 100, TRUE);
-
-CREATE TABLE action_trigger.event_def_group_member (
-    id          SERIAL  PRIMARY KEY,
-    grp         INT     NOT NULL REFERENCES action_trigger.event_def_group (id)
-                            ON DELETE CASCADE ON UPDATE CASCADE
-                            DEFERRABLE INITIALLY DEFERRED,
-    event_def   INT     NOT NULL REFERENCES action_trigger.event_definition (id)
-                            ON DELETE RESTRICT ON UPDATE CASCADE
-                            DEFERRABLE INITIALLY DEFERRED,
-    sortable    BOOL    NOT NULL DEFAULT TRUE,
-    holdings    BOOL    NOT NULL DEFAULT FALSE,
-    external    BOOL    NOT NULL DEFAULT FALSE,
-    name        TEXT    NOT NULL
-);
-
-INSERT INTO action_trigger.event_def_group (id, owner, hook, name)
-    VALUES (1, 1, 'biblio.format.record_entry.print','Print Record(s)');
-
-INSERT INTO action_trigger.event_def_group (id, owner, hook, name)
-    VALUES (2,1,'biblio.format.record_entry.email','Email Record(s)');
-
-DO $block$
-BEGIN
-  PERFORM * FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.email' AND owner = 1 AND active AND template =
-$$
-[%- USE date -%]
-[%- SET user = target.0.owner -%]
-To: [%- params.recipient_email || user.email %]
-From: [%- params.sender_email || default_sender %]
-Date: [%- date.format(date.now, '%a, %d %b %Y %T -0000', gmt => 1) %]
-Subject: Bibliographic Records
-Auto-Submitted: auto-generated
-
-[% FOR cbreb IN target %]
-[% FOR item IN cbreb.items;
-    bre_id = item.target_biblio_record_entry;
-
-    bibxml = helpers.unapi_bre(bre_id, {flesh => '{mra}'});
-    title = '';
-    FOR part IN bibxml.findnodes('//*[@tag="245"]/*[@code="a" or @code="b"]');
-        title = title _ part.textContent;
-    END;
-
-    author = bibxml.findnodes('//*[@tag="100"]/*[@code="a"]').textContent;
-    item_type = bibxml.findnodes('//*[local-name()="attributes"]/*[local-name()="field"][@name="item_type"]').getAttribute('coded-value');
-    publisher = bibxml.findnodes('//*[@tag="260"]/*[@code="b"]').textContent;
-    pubdate = bibxml.findnodes('//*[@tag="260"]/*[@code="c"]').textContent;
-    isbn = bibxml.findnodes('//*[@tag="020"]/*[@code="a"]').textContent;
-    issn = bibxml.findnodes('//*[@tag="022"]/*[@code="a"]').textContent;
-    upc = bibxml.findnodes('//*[@tag="024"]/*[@code="a"]').textContent;
-%]
-
-[% loop.count %]/[% loop.size %].  Bib ID# [% bre_id %]
-[% IF isbn %]ISBN: [% isbn _ "\n" %][% END -%]
-[% IF issn %]ISSN: [% issn _ "\n" %][% END -%]
-[% IF upc  %]UPC:  [% upc _ "\n" %] [% END -%]
-Title: [% title %]
-Author: [% author %]
-Publication Info: [% publisher %] [% pubdate %]
-Item Type: [% item_type %]
-
-[% END %]
-[% END %]
-$$;
-
-  IF FOUND THEN -- update
-
-    INSERT INTO action_trigger.event_def_group_member (grp, name, event_def)
-        SELECT 2, 'Brief', id FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.email';
-
-    INSERT INTO action_trigger.event_def_group_member (grp, name, holdings, event_def)
-        SELECT 2, 'Full', TRUE, id FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.email';
-
-    UPDATE action_trigger.event_definition SET template = $$
-[%- USE date -%]
-[%- SET user = target.0.owner -%]
-To: [%- params.recipient_email || user_data.0.email || user.email %]
-From: [%- params.sender_email || default_sender %]
-Date: [%- date.format(date.now, '%a, %d %b %Y %T -0000', gmt => 1) %]
-Subject: [%- user_data.0.subject || 'Bibliographic Records' %]
-Auto-Submitted: auto-generated
-
-[%- FOR cbreb IN target;
-
-    flesh_list = '{mra';
-    IF user_data.0.type == 'full';
-        flesh_list = flesh_list _ ',holdings_xml,acp';
-        IF params.holdings_limit;
-            flimit = 'acn=>' _ params.holdings_limit _ ',acp=>' _ params.holdings_limit;
-        END;
-    END;
-    flesh_list = flesh_list _ '}';
-
-    item_list = helpers.sort_bucket_unapi_bre(cbreb.items,{flesh => flesh_list, site => user_data.0.context_org, flesh_limit => flimit}, user_data.0.sort_by, user_data.0.sort_dir);
-
-FOR item IN item_list -%]
-
-[% loop.count %]/[% loop.size %].  Bib ID# [% item.id %]
-[% IF item.isbn %]ISBN: [% item.isbn _ "\n" %][% END -%]
-[% IF item.issn %]ISSN: [% item.issn _ "\n" %][% END -%]
-[% IF item.upc  %]UPC:  [% item.upc _ "\n" %][% END -%]
-Title: [% item.title %]
-[% IF item.author %]Author: [% item.author _ "\n" %][% END -%]
-Publication Info: [% item.publisher %] [% item.pubdate %]
-Item Type: [% item.item_type %]
-[% IF user_data.0.type == 'full' && item.holdings.size == 0 %]
- * No items for this record at the selected location
-[%- END %]
-[% FOR cp IN item.holdings -%]
- * Library: [% cp.circ_lib %]
-   Location: [% cp.location %]
-   Call Number: [% cp.prefix _ ' ' _ cp.callnumber _ ' ' _ cp.suffix %]
-[% IF cp.parts %]   Parts: [% cp.parts _ "\n" %][% END -%]
-   Status: [% cp.status_label %]
-   Barcode: [% cp.barcode %]
-[% END -%]
-[%- END -%]
-[%- END -%]
-$$ WHERE hook = 'biblio.format.record_entry.email' AND owner = 1 AND active;
-
-  ELSE -- insert full and add existing brief
-
-    INSERT INTO action_trigger.event_def_group_member (grp, name, event_def)
-        SELECT 2, 'Brief', id FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.email' AND active;
-
-    INSERT INTO action_trigger.event_definition (
-        active,
-        owner,
-        name,
-        hook,
-        validator,
-        reactor,
-        cleanup_success,
-        cleanup_failure,
-        group_field,
-        granularity,
-        delay,
-        template
-    ) SELECT
-        TRUE,
-        owner,
-        'biblio.record_entry.email.full',
-        'biblio.format.record_entry.email',
-        'NOOP_True',
-        'SendEmail',
-        'DeleteTempBiblioBucket',
-        'DeleteTempBiblioBucket',
-        'owner',
-        NULL,
-        '00:00:00',
-        $$
-[%- USE date -%]
-[%- SET user = target.0.owner -%]
-To: [%- params.recipient_email || user_data.0.email || user.email %]
-From: [%- params.sender_email || default_sender %]
-Date: [%- date.format(date.now, '%a, %d %b %Y %T -0000', gmt => 1) %]
-Subject: [%- user_data.0.subject || 'Bibliographic Records' %]
-Auto-Submitted: auto-generated
-
-[%- FOR cbreb IN target;
-
-    flesh_list = '{mra';
-    IF user_data.0.type == 'full';
-        flesh_list = flesh_list _ ',holdings_xml,acp';
-        IF params.holdings_limit;
-            flimit = 'acn=>' _ params.holdings_limit _ ',acp=>' _ params.holdings_limit;
-        END;
-    END;
-    flesh_list = flesh_list _ '}';
-
-    item_list = helpers.sort_bucket_unapi_bre(cbreb.items,{flesh => flesh_list, site => user_data.0.context_org, flesh_limit => flimit}, user_data.0.sort_by, user_data.0.sort_dir);
-
-FOR item IN item_list -%]
-
-[% loop.count %]/[% loop.size %].  Bib ID# [% item.id %]
-[% IF item.isbn %]ISBN: [% item.isbn _ "\n" %][% END -%]
-[% IF item.issn %]ISSN: [% item.issn _ "\n" %][% END -%]
-[% IF item.upc  %]UPC:  [% item.upc _ "\n" %][% END -%]
-Title: [% item.title %]
-[% IF item.author %]Author: [% item.author _ "\n" %][% END -%]
-Publication Info: [% item.publisher %] [% item.pubdate %]
-Item Type: [% item.item_type %]
-[% IF user_data.0.type == 'full' && item.holdings.size == 0 %]
- * No items for this record at the selected location
-[%- END %]
-[% FOR cp IN item.holdings -%]
- * Library: [% cp.circ_lib %]
-   Location: [% cp.location %]
-   Call Number: [% cp.prefix _ ' ' _ cp.callnumber _ ' ' _ cp.suffix %]
-[% IF cp.parts %]   Parts: [% cp.parts _ "\n" %][% END -%]
-   Status: [% cp.status_label %]
-   Barcode: [% cp.barcode %]
-[% END -%]
-[%- END -%]
-[%- END -%]
-$$ FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.email' AND active;
-
-    INSERT INTO action_trigger.event_def_group_member (grp, name, holdings, event_def)
-        SELECT 2, 'Full', TRUE, id FROM action_trigger.event_definition WHERE name = 'biblio.record_entry.email.full' and active;
-
-  END IF;
-END
-$block$;
-
-DO $block$
-BEGIN
-  PERFORM * FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.print' AND owner = 1 AND active AND template =
-$$
-<div>
-    <style> li { padding: 8px; margin 5px; }</style>
-    <ol>
-    [% FOR cbreb IN target %]
-    [% FOR item IN cbreb.items;
-        bre_id = item.target_biblio_record_entry;
-
-        bibxml = helpers.unapi_bre(bre_id, {flesh => '{mra}'});
-        title = '';
-        FOR part IN bibxml.findnodes('//*[@tag="245"]/*[@code="a" or @code="b"]');
-            title = title _ part.textContent;
-        END;
-
-        author = bibxml.findnodes('//*[@tag="100"]/*[@code="a"]').textContent;
-        item_type = bibxml.findnodes('//*[local-name()="attributes"]/*[local-name()="field"][@name="item_type"]').getAttribute('coded-value');
-        publisher = bibxml.findnodes('//*[@tag="260"]/*[@code="b"]').textContent;
-        pubdate = bibxml.findnodes('//*[@tag="260"]/*[@code="c"]').textContent;
-        isbn = bibxml.findnodes('//*[@tag="020"]/*[@code="a"]').textContent;
-        %]
-
-        <li>
-            Bib ID# [% bre_id %] ISBN: [% isbn %]<br />
-            Title: [% title %]<br />
-            Author: [% author %]<br />
-            Publication Info: [% publisher %] [% pubdate %]<br/>
-            Item Type: [% item_type %]
-        </li>
-    [% END %]
-    [% END %]
-    </ol>
-</div>
-$$;
-
-  IF FOUND THEN -- update
-
-    INSERT INTO action_trigger.event_def_group_member (grp, name, event_def)
-        SELECT 1, 'Brief', id FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.print';
-
-    INSERT INTO action_trigger.event_def_group_member (grp, name, holdings, event_def)
-        SELECT 1, 'Full', TRUE, id FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.print';
-
-    UPDATE action_trigger.event_definition SET template = $$
-<div>
-    <style> li { padding: 8px; margin 5px; }</style>
-    <ol>
-    [% FOR cbreb IN target;
-
-    flesh_list = '{mra';
-    IF user_data.0.type == 'full';
-        flesh_list = flesh_list _ ',holdings_xml,acp';
-        IF params.holdings_limit;
-            flimit = 'acn=>' _ params.holdings_limit _ ',acp=>' _ params.holdings_limit;
-        END;
-    END;
-    flesh_list = flesh_list _ '}';
-
-    item_list = helpers.sort_bucket_unapi_bre(cbreb.items,{flesh => flesh_list, site => user_data.0.context_org, flesh_limit => flimit}, user_data.0.sort_by, user_data.0.sort_dir);
-    FOR item IN item_list %]
-        <li>
-            Bib ID# [% item.id %]<br />
-            [% IF item.isbn %]ISBN: [% item.isbn %]<br />[% END %]
-            [% IF item.issn %]ISSN: [% item.issn %]<br />[% END %]
-            [% IF item.upc  %]UPC:  [% item.upc %]<br />[% END %]
-            Title: [% item.title %]<br />
-[% IF item.author %]            Author: [% item.author %]<br />[% END -%]
-            Publication Info: [% item.publisher %] [% item.pubdate %]<br/>
-            Item Type: [% item.item_type %]
-            <ul>
-            [% IF user_data.0.type == 'full' && item.holdings.size == 0 %]
-                <li>No items for this record at the selected location</li>
-            [% END %]
-            [% FOR cp IN item.holdings -%]
-                <li>
-                    Library: [% cp.circ_lib %]<br/>
-                    Location: [% cp.location %]<br/>
-                    Call Number: [% cp.prefix _ ' ' _ cp.callnumber _ ' ' _ cp.suffix %]<br/>
-                    [% IF cp.parts %]Parts: [% cp.parts %]<br/>[% END %]
-                    Status: [% cp.status_label %]<br/>
-                    Barcode: [% cp.barcode %]
-                </li>
-            [% END %]
-            </ul>
-        </li>
-    [% END %]
-    [% END %]
-    </ol>
-</div>
-$$ WHERE hook = 'biblio.format.record_entry.print' AND owner = 1 AND active;
-
-    ELSE -- insert full and add brief
-
-    INSERT INTO action_trigger.event_def_group_member (grp, name, event_def)
-        SELECT 1, 'Brief', id FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.print' AND active;
-
-    INSERT INTO action_trigger.event_definition (
-        active,
-        owner,
-        name,
-        hook,
-        validator,
-        reactor,
-        cleanup_success,
-        cleanup_failure,
-        group_field,
-        granularity,
-        delay,
-        template
-    ) SELECT
-        TRUE,
-        owner,
-        'biblio.record_entry.print.full',
-        'biblio.format.record_entry.print',
-        'NOOP_True',
-        'ProcessTemplate',
-        'DeleteTempBiblioBucket',
-        'DeleteTempBiblioBucket',
-        'owner',
-        'print-on-demand',
-        '00:00:00',
-        $$
-<div>
-    <style> li { padding: 8px; margin 5px; }</style>
-    <ol>
-    [% FOR cbreb IN target;
-
-    flesh_list = '{mra';
-    IF user_data.0.type == 'full';
-        flesh_list = flesh_list _ ',holdings_xml,acp';
-        IF params.holdings_limit;
-            flimit = 'acn=>' _ params.holdings_limit _ ',acp=>' _ params.holdings_limit;
-        END;
-    END;
-    flesh_list = flesh_list _ '}';
-
-    item_list = helpers.sort_bucket_unapi_bre(cbreb.items,{flesh => flesh_list, site => user_data.0.context_org, flesh_limit => flimit}, user_data.0.sort_by, user_data.0.sort_dir);
-    FOR item IN item_list %]
-        <li>
-            Bib ID# [% item.id %]<br />
-            [% IF item.isbn %]ISBN: [% item.isbn %]<br />[% END %]
-            [% IF item.issn %]ISSN: [% item.issn %]<br />[% END %]
-            [% IF item.upc  %]UPC:  [% item.upc %]<br />[% END %]
-            Title: [% item.title %]<br />
-[% IF item.author %]            Author: [% item.author %]<br />[% END -%]
-            Publication Info: [% item.publisher %] [% item.pubdate %]<br/>
-            Item Type: [% item.item_type %]
-            <ul>
-            [% IF user_data.0.type == 'full' && item.holdings.size == 0 %]
-                <li>No items for this record at the selected location</li>
-            [% END %]
-            [% FOR cp IN item.holdings -%]
-                <li>
-                    Library: [% cp.circ_lib %]<br/>
-                    Location: [% cp.location %]<br/>
-                    Call Number: [% cp.prefix _ ' ' _ cp.callnumber _ ' ' _ cp.suffix %]<br/>
-                    [% IF cp.parts %]Parts: [% cp.parts %]<br/>[% END %]
-                    Status: [% cp.status_label %]<br/>
-                    Barcode: [% cp.barcode %]
-                </li>
-            [% END %]
-            </ul>
-        </li>
-    [% END %]
-    [% END %]
-    </ol>
-</div>
-$$ FROM action_trigger.event_definition WHERE hook = 'biblio.format.record_entry.print' AND active;
-
-    INSERT INTO action_trigger.event_def_group_member (grp, name, holdings, event_def)
-        SELECT 1, 'Full', TRUE, id FROM action_trigger.event_definition WHERE name = 'biblio.record_entry.print.full' and active;
-
-  END IF;
-END
-$block$;
-
-COMMIT;
-